summaryrefslogtreecommitdiffstats
path: root/mobile/android/android-components/components/feature/prompts
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-15 03:34:42 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-15 03:34:42 +0000
commitda4c7e7ed675c3bf405668739c3012d140856109 (patch)
treecdd868dba063fecba609a1d819de271f0d51b23e /mobile/android/android-components/components/feature/prompts
parentAdding upstream version 125.0.3. (diff)
downloadfirefox-da4c7e7ed675c3bf405668739c3012d140856109.tar.xz
firefox-da4c7e7ed675c3bf405668739c3012d140856109.zip
Adding upstream version 126.0.upstream/126.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'mobile/android/android-components/components/feature/prompts')
-rw-r--r--mobile/android/android-components/components/feature/prompts/README.md76
-rw-r--r--mobile/android/android-components/components/feature/prompts/build.gradle79
-rw-r--r--mobile/android/android-components/components/feature/prompts/proguard-rules.pro21
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/androidTest/java/mozilla/components/feature/prompts/file/OnDeviceFilePickerTest.kt155
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/AndroidManifest.xml25
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/PromptContainer.kt63
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/PromptFeature.kt1220
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/PromptMiddleware.kt59
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/address/AddressAdapter.kt68
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/address/AddressDelegate.kt33
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/address/AddressPicker.kt89
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/address/AddressSelectBar.kt151
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/concept/PasswordPromptView.kt42
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/concept/SelectablePromptView.kt49
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/creditcard/CreditCardDelegate.kt34
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/creditcard/CreditCardItemViewHolder.kt48
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/creditcard/CreditCardPicker.kt119
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/creditcard/CreditCardSaveDialogFragment.kt210
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/creditcard/CreditCardSelectBar.kt152
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/creditcard/CreditCardsAdapter.kt39
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/AbstractPromptTextDialogFragment.kt72
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/AlertDialogFragment.kt80
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/AuthenticationDialogFragment.kt189
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/AutofillEditText.kt31
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/BasicColorAdapter.kt131
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/ChoiceAdapter.kt217
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/ChoiceDialogFragment.kt145
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/ColorPickerDialogFragment.kt164
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/ConfirmDialogFragment.kt84
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/FullScreenNotificationDialog.kt70
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/LoginDialogFacts.kt45
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/MultiButtonDialogFragment.kt99
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/PromptAbuserDetector.kt64
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/PromptDialogFragment.kt98
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/SaveLoginDialogFragment.kt428
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/TextPromptDialogFragment.kt130
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/TimePickerDialogFragment.kt342
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/ext/Calendar.kt65
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/ext/EditText.kt25
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/ext/PromptRequest.kt36
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/facts/AddressAutofillDialogFacts.kt76
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/facts/CreditCardAutofillDialogFacts.kt100
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/facts/LoginAutofillDialogFacts.kt60
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/facts/PromptFacts.kt61
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/file/FilePicker.kt247
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/file/FileUploadsDirCleaner.kt86
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/file/FileUploadsDirCleanerMiddleware.kt40
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/file/MimeType.kt187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/DialogColors.kt57
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/IdentityCredentialItem.kt106
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/PrivacyPolicyDialogFragment.kt130
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/SelectAccountDialog.kt172
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/SelectAccountDialogFragment.kt118
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/SelectProviderDialog.kt144
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/SelectProviderDialogFragment.kt103
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/previews/DialogPreviewMaterialTheme.kt24
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/previews/LightDarkPreview.kt16
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/BasicLoginAdapter.kt67
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/LoginDelegate.kt27
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/LoginExceptions.kt22
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/LoginPicker.kt80
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/LoginSelectBar.kt140
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/StrongPasswordPromptViewListener.kt92
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/SuggestStrongPasswordBar.kt110
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/SuggestStrongPasswordDelegate.kt19
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/provider/FileProvider.kt18
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/share/ShareDelegate.kt51
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/widget/LoginPanelTextInputLayout.kt55
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/widget/MonthAndYearPicker.kt178
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/widget/TimePrecisionPicker.kt231
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/color/button_state_list.xml8
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/drawable-hdpi/color_picker_row_bg.9.pngbin0 -> 151 bytes
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/drawable-mdpi/color_picker_row_bg.9.pngbin0 -> 135 bytes
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/drawable-xhdpi/color_picker_row_bg.9.pngbin0 -> 169 bytes
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/drawable-xxhdpi/color_picker_row_bg.9.pngbin0 -> 199 bytes
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/drawable/color_picker_checkmark.xml11
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/drawable/mozac_ic_password_reveal_two_state.xml8
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/layout/login_selection_list_item.xml50
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_choice_dialogs.xml10
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_choice_group_item.xml7
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_login_multiselect_view.xml86
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_menu_choice_item.xml15
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_menu_separator_choice_item.xml8
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_multiple_choice_item.xml23
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_promps_widget_month_picker.xml40
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompt_auth_prompt.xml54
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompt_save_credit_card_prompt.xml140
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompt_save_login_prompt.xml144
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompt_simple_text.xml14
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompt_with_check_box.xml47
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_address_list_item.xml31
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_address_select_prompt.xml84
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_color_item.xml13
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_color_picker_dialogs.xml12
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_credit_card_list_item.xml59
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_credit_card_select_prompt.xml84
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_date_time_picker.xml26
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_time_picker.xml66
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_single_choice_item.xml22
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_suggest_strong_password_view.xml52
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_text_prompt.xml45
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-am/strings.xml192
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-an/strings.xml91
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-ar/strings.xml136
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-ast/strings.xml128
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-az/strings.xml99
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-azb/strings.xml192
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-ban/strings.xml45
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-be/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-bg/strings.xml188
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-bn/strings.xml96
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-br/strings.xml176
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-bs/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-ca/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-cak/strings.xml189
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-ceb/strings.xml110
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-ckb/strings.xml93
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-co/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-cs/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-cy/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-da/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-de/strings.xml199
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-dsb/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-el/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-en-rCA/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-en-rGB/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-eo/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-es-rAR/strings.xml188
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-es-rCL/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-es-rES/strings.xml188
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-es-rMX/strings.xml144
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-es/strings.xml188
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-et/strings.xml180
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-eu/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-fa/strings.xml138
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-ff/strings.xml79
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-fi/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-fr/strings.xml196
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-fur/strings.xml190
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-fy-rNL/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-ga-rIE/strings.xml65
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-gd/strings.xml129
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-gl/strings.xml189
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-gn/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-gu-rIN/strings.xml81
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-hi-rIN/strings.xml108
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-hil/strings.xml39
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-hr/strings.xml144
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-hsb/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-hu/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-hy-rAM/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-ia/strings.xml188
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-in/strings.xml138
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-is/strings.xml189
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-it/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-iw/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-ja/strings.xml199
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-ka/strings.xml144
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-kaa/strings.xml134
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-kab/strings.xml175
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-kk/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-kmr/strings.xml170
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-kn/strings.xml83
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-ko/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-lij/strings.xml81
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-lo/strings.xml146
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-lt/strings.xml130
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-mix/strings.xml18
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-ml/strings.xml81
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-mr/strings.xml98
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-my/strings.xml110
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-nb-rNO/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-ne-rNP/strings.xml111
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-nl/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-nn-rNO/strings.xml174
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-oc/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-or/strings.xml53
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-pa-rIN/strings.xml188
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-pa-rPK/strings.xml156
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-pl/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-pt-rBR/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-pt-rPT/strings.xml188
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-rm/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-ro/strings.xml95
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-ru/strings.xml188
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-sat/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-sc/strings.xml174
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-si/strings.xml189
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-sk/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-skr/strings.xml190
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-sl/strings.xml183
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-sq/strings.xml188
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-sr/strings.xml144
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-su/strings.xml151
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-sv-rSE/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-ta/strings.xml99
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-te/strings.xml100
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-tg/strings.xml188
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-th/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-tl/strings.xml123
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-tok/strings.xml78
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-tr/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-trs/strings.xml142
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-tt/strings.xml128
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-tzm/strings.xml53
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-ug/strings.xml190
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-uk/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-ur/strings.xml110
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-uz/strings.xml129
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-vec/strings.xml65
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-vi/strings.xml187
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-yo/strings.xml129
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-zam/strings.xml14
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-zh-rCN/strings.xml199
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-zh-rTW/strings.xml199
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values/attrs.xml23
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values/colors.xml20
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values/ids.xml7
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values/quarantined_strings.xml9
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values/strings-no-translatable.xml25
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values/strings.xml188
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values/styles.xml18
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/xml/feature_prompts_file_paths.xml7
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/PromptContainerTest.kt76
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/PromptFeatureTest.kt2850
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/PromptMiddlewareTest.kt111
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/address/AddressAdapterTest.kt82
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/address/AddressPickerTest.kt145
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/address/AddressSelectBarTest.kt141
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/creditcard/CreditCardItemViewHolderTest.kt71
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/creditcard/CreditCardPickerTest.kt190
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/creditcard/CreditCardSaveDialogFragmentTest.kt315
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/creditcard/CreditCardSelectBarTest.kt146
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/creditcard/CreditCardsAdapterTest.kt49
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/AlertDialogFragmentTest.kt147
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/AuthenticationDialogFragmentTest.kt196
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/ChoiceDialogFragmentTest.kt692
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/ColorPickerDialogFragmentTest.kt159
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/ConfirmDialogFragmentTest.kt126
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/MultiButtonDialogFragmentTest.kt252
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/SaveLoginDialogFragmentTest.kt132
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/TextPromptDialogFragmentTest.kt153
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/TimePickerDialogFragmentTest.kt284
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/ext/EditTextTest.kt44
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/ext/PromptRequestTest.kt55
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/facts/AddressAutofillDialogFactsTest.kt94
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/facts/CreditCardAutofillDialogFactsTest.kt147
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/file/FilePickerTest.kt405
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/file/FileUploadsDirCleanerMiddlewareTest.kt59
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/file/FileUploadsDirCleanerTest.kt87
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/file/MimeTypeTest.kt392
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/login/BasicLoginAdapterTest.kt64
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/login/LoginPickerTest.kt142
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/login/LoginSelectBarTest.kt104
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/login/StrongPasswordPromptViewListenerTest.kt143
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/login/SuggestStrongPasswordBarTest.kt61
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/share/DefaultShareDelegateTest.kt70
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/widget/MonthAndYearPickerTest.kt196
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/widget/TimePrecisionPickerTest.kt106
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker2
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/resources/robolectric.properties1
261 files changed, 35510 insertions, 0 deletions
diff --git a/mobile/android/android-components/components/feature/prompts/README.md b/mobile/android/android-components/components/feature/prompts/README.md
new file mode 100644
index 0000000000..704f34b36e
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/README.md
@@ -0,0 +1,76 @@
+# [Android Components](../../../README.md) > Feature > Prompts
+
+A feature for displaying native dialogs. It will subscribe to the selected session and will handle all the common prompt dialogs from web content like input type
+date, file, time, color, option, menu, authentication, confirmation and alerts.
+
+## Usage
+
+### Setting up the dependency
+Use Gradle to download the library from [maven.mozilla.org](https://maven.mozilla.org/) ([Setup repository](../../../README.md#maven-repository)):
+
+```Groovy
+implementation "org.mozilla.components:feature-prompts:{latest-version}"
+```
+
+### PromptFeature
+
+ ```kotlin
+ val onNeedToRequestPermissions : (Array<String>) -> Unit = { permissions ->
+ /* You are in charge of triggering the request for the permissions needed,
+ * this way you can control, when you request the permissions,
+ * in case that you want to show an informative dialog,
+ * to clarify the use of these permissions.
+ */
+ this.requestPermissions(permissions, MY_PROMPT_PERMISSION_REQUEST_CODE)
+ }
+
+ val promptFeature = PromptFeature(fragment = this,
+ fragment = fragment,
+ store = store,
+ fragmentManager= fragmentManager,
+ onNeedToRequestPermissions = onNeedToRequestPermissions
+ )
+
+ // It will start listing for new prompt requests from web content.
+ promptFeature.start()
+
+ // It will stop listing for prompt requests from web content.
+ promptFeature.stop()
+
+ /* There are some requests that are not handled with dialogs, instead they are delegated to other apps
+ * to perform the request e.g a file picker request, which delegates to the OS file picker.
+ * For this reason, you have to forward the results of these requests to the prompt feature by overriding,
+ * onActivityResult in your Activity or Fragment and forward its calls to promptFeature.onActivityResult.
+ */
+ override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ promptFeature.onActivityResult(requestCode, resultCode, data)
+ }
+
+ /* Additionally, there are requests that need to have some runtime permission before they can be performed,
+ * like file pickers request that need access to read the selected files. You need to override
+ * onRequestPermissionsResult in your Activity or Fragment and forward the results to
+ * promptFeature.PermissionsResult.
+ */
+ override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
+ when (requestCode) {
+ MY_PROMPT_PERMISSION_REQUEST_CODE -> promptFeature.onPermissionsResult(permissions, grantResults)
+ }
+ }
+ ```
+
+## Facts
+
+This component emits the following [Facts](../../support/base/README.md#Facts):
+
+| Action | Item | Description |
+|-----------|--------------|-------------------------|
+| DISPLAY | prompt | A prompt was shown. |
+| CANCEL | prompt | A prompt was canceled. |
+| CONFIRM | prompt | A prompt was confirmed. |
+
+
+## License
+
+ This Source Code Form is subject to the terms of the Mozilla Public
+ License, v. 2.0. If a copy of the MPL was not distributed with this
+ file, You can obtain one at http://mozilla.org/MPL/2.0/
diff --git a/mobile/android/android-components/components/feature/prompts/build.gradle b/mobile/android/android-components/components/feature/prompts/build.gradle
new file mode 100644
index 0000000000..0212157d95
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/build.gradle
@@ -0,0 +1,79 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
+apply plugin: 'com.android.library'
+apply plugin: 'kotlin-android'
+
+android {
+ defaultConfig {
+ minSdkVersion config.minSdkVersion
+ compileSdk config.compileSdkVersion
+ targetSdkVersion config.targetSdkVersion
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+
+ composeOptions {
+ kotlinCompilerExtensionVersion = Versions.compose_compiler
+ }
+
+ buildFeatures {
+ compose true
+ }
+
+ namespace 'mozilla.components.feature.prompts'
+}
+
+tasks.withType(KotlinCompile).configureEach {
+ kotlinOptions.freeCompilerArgs += "-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi"
+}
+
+dependencies {
+ implementation project(':browser-state')
+ implementation project(':concept-engine')
+ implementation project(':feature-session')
+ implementation project(':feature-tabs')
+ implementation project(':lib-state')
+ implementation project(':support-ktx')
+ implementation project(':support-utils')
+ implementation project(':ui-icons')
+ implementation project(':ui-widgets')
+ implementation project(':ui-colors')
+
+ implementation ComponentsDependencies.androidx_constraintlayout
+ implementation ComponentsDependencies.androidx_core_ktx
+ implementation ComponentsDependencies.google_material
+
+ implementation ComponentsDependencies.androidx_core_ktx
+ implementation ComponentsDependencies.androidx_compose_ui
+ implementation ComponentsDependencies.androidx_compose_ui_tooling_preview
+ implementation ComponentsDependencies.androidx_compose_foundation
+ implementation ComponentsDependencies.androidx_compose_material
+
+ debugImplementation ComponentsDependencies.androidx_compose_ui_tooling
+
+ testImplementation ComponentsDependencies.androidx_test_core
+ testImplementation ComponentsDependencies.androidx_test_junit
+ testImplementation ComponentsDependencies.testing_coroutines
+ testImplementation ComponentsDependencies.testing_robolectric
+ testImplementation project(':feature-session')
+ testImplementation project(':support-test')
+ testImplementation project(':support-test-libstate')
+
+ androidTestImplementation project(':support-android-test')
+ androidTestImplementation ComponentsDependencies.androidx_test_core
+ androidTestImplementation ComponentsDependencies.androidx_test_runner
+}
+
+apply from: '../../../android-lint.gradle'
+apply from: '../../../publish.gradle'
+ext.configurePublish(config.componentsGroupId, archivesBaseName, project.ext.description)
diff --git a/mobile/android/android-components/components/feature/prompts/proguard-rules.pro b/mobile/android/android-components/components/feature/prompts/proguard-rules.pro
new file mode 100644
index 0000000000..f1b424510d
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/mobile/android/android-components/components/feature/prompts/src/androidTest/java/mozilla/components/feature/prompts/file/OnDeviceFilePickerTest.kt b/mobile/android/android-components/components/feature/prompts/src/androidTest/java/mozilla/components/feature/prompts/file/OnDeviceFilePickerTest.kt
new file mode 100644
index 0000000000..5aef30b6d6
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/androidTest/java/mozilla/components/feature/prompts/file/OnDeviceFilePickerTest.kt
@@ -0,0 +1,155 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.file
+
+import android.content.ClipData
+import android.content.Context
+import android.content.Intent
+import androidx.core.net.toUri
+import androidx.test.core.app.ApplicationProvider
+import mozilla.components.browser.state.store.BrowserStore
+import mozilla.components.concept.engine.prompt.PromptRequest
+import mozilla.components.feature.prompts.PromptContainer
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Test
+
+class OnDeviceFilePickerTest {
+ private val context: Context
+ get() = ApplicationProvider.getApplicationContext()
+
+ private val badUri1 = "file:///data/user/0/${context.packageName}/any_directory/file.text".toUri()
+ private val badUri2 = "file:///data/data/${context.packageName}/any_directory/file.text".toUri()
+ private val goodUri = "file:///data/directory/${context.packageName}/any_directory/file.text".toUri()
+
+ @Test
+ fun removeUrisUnderPrivateAppDir() {
+ val uris = arrayOf(badUri1, badUri2, goodUri)
+
+ val filterUris = uris.removeUrisUnderPrivateAppDir(context)
+
+ assertEquals(1, filterUris.size)
+ assertTrue(filterUris.contains(goodUri))
+ }
+
+ @Test
+ fun unsafeUrisWillNotBeSelected() {
+ val promptContainer = PromptContainer.TestPromptContainer(context)
+ val fileUploadsDirCleaner = FileUploadsDirCleaner { context.cacheDir }
+ val filePicker = FilePicker(
+ container = promptContainer,
+ fileUploadsDirCleaner = fileUploadsDirCleaner,
+ store = BrowserStore(),
+ ) { }
+ var onDismissWasExecuted = false
+ var onSingleFileSelectedWasExecuted = false
+ var onMultipleFilesSelectedWasExecuted = false
+
+ val filePickerRequest = PromptRequest.File(
+ arrayOf(""),
+ isMultipleFilesSelection = true,
+ onDismiss = { onDismissWasExecuted = true },
+ onSingleFileSelected = { _, _ -> onSingleFileSelectedWasExecuted = true },
+ onMultipleFilesSelected = { _, _ -> onMultipleFilesSelectedWasExecuted = true },
+ )
+
+ val intent = Intent()
+ intent.clipData = ClipData("", arrayOf(), ClipData.Item(badUri1))
+ filePicker.handleFilePickerIntentResult(intent, filePickerRequest)
+
+ assertTrue(onDismissWasExecuted)
+ assertFalse(onSingleFileSelectedWasExecuted)
+ assertFalse(onMultipleFilesSelectedWasExecuted)
+ }
+
+ @Test
+ fun safeUrisWillBeSelected() {
+ val promptContainer = PromptContainer.TestPromptContainer(context)
+ val fileUploadsDirCleaner = FileUploadsDirCleaner { context.cacheDir }
+ val filePicker = FilePicker(
+ container = promptContainer,
+ fileUploadsDirCleaner = fileUploadsDirCleaner,
+ store = BrowserStore(),
+ ) { }
+ var urisWereSelected = false
+ var onDismissWasExecuted = false
+ var onSingleFileSelectedWasExecuted = false
+
+ val filePickerRequest = PromptRequest.File(
+ arrayOf(""),
+ isMultipleFilesSelection = true,
+ onDismiss = { onDismissWasExecuted = true },
+ onSingleFileSelected = { _, _ -> onSingleFileSelectedWasExecuted = true },
+ onMultipleFilesSelected = { _, uris -> urisWereSelected = uris.isNotEmpty() },
+ )
+
+ val intent = Intent()
+ intent.clipData = ClipData("", arrayOf(), ClipData.Item(goodUri))
+ filePicker.handleFilePickerIntentResult(intent, filePickerRequest)
+
+ assertTrue(urisWereSelected)
+ assertFalse(onDismissWasExecuted)
+ assertFalse(onSingleFileSelectedWasExecuted)
+ }
+
+ @Test
+ fun unsafeUriWillNotBeSelected() {
+ val promptContainer = PromptContainer.TestPromptContainer(context)
+ val fileUploadsDirCleaner = FileUploadsDirCleaner { context.cacheDir }
+ val filePicker = FilePicker(
+ container = promptContainer,
+ fileUploadsDirCleaner = fileUploadsDirCleaner,
+ store = BrowserStore(),
+ ) { }
+ var onDismissWasExecuted = false
+ var onSingleFileSelectedWasExecuted = false
+ var onMultipleFilesSelectedWasExecuted = false
+
+ val filePickerRequest = PromptRequest.File(
+ arrayOf(""),
+ onDismiss = { onDismissWasExecuted = true },
+ onSingleFileSelected = { _, _ -> onSingleFileSelectedWasExecuted = true },
+ onMultipleFilesSelected = { _, _ -> onMultipleFilesSelectedWasExecuted = true },
+ )
+
+ val intent = Intent()
+ intent.data = badUri1
+ filePicker.handleFilePickerIntentResult(intent, filePickerRequest)
+
+ assertTrue(onDismissWasExecuted)
+ assertFalse(onSingleFileSelectedWasExecuted)
+ assertFalse(onMultipleFilesSelectedWasExecuted)
+ }
+
+ @Test
+ fun safeUriWillBeSelected() {
+ val promptContainer = PromptContainer.TestPromptContainer(context)
+ val fileUploadsDirCleaner = FileUploadsDirCleaner { context.cacheDir }
+ val filePicker = FilePicker(
+ container = promptContainer,
+ fileUploadsDirCleaner = fileUploadsDirCleaner,
+ store = BrowserStore(),
+ ) { }
+ var onDismissWasExecuted = false
+ var onSingleFileSelectedWasExecuted = false
+ var onMultipleFilesSelectedWasExecuted = false
+
+ val filePickerRequest = PromptRequest.File(
+ arrayOf(""),
+ onDismiss = { onDismissWasExecuted = true },
+ onSingleFileSelected = { _, _ -> onSingleFileSelectedWasExecuted = true },
+ onMultipleFilesSelected = { _, _ -> onMultipleFilesSelectedWasExecuted = true },
+ )
+
+ val intent = Intent()
+ intent.data = goodUri
+ filePicker.handleFilePickerIntentResult(intent, filePickerRequest)
+
+ assertTrue(onSingleFileSelectedWasExecuted)
+ assertFalse(onMultipleFilesSelectedWasExecuted)
+ assertFalse(onDismissWasExecuted)
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/AndroidManifest.xml b/mobile/android/android-components/components/feature/prompts/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..ee81dd1486
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/AndroidManifest.xml
@@ -0,0 +1,25 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <!-- Needed for uploading media files on devices with Android 13 and later. -->
+ <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
+ <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
+ <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
+
+ <!-- Used for requesting partial video/image files access on devices with Android 14 and later. -->
+ <uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />
+
+ <application android:supportsRtl="true">
+ <provider
+ android:name="mozilla.components.feature.prompts.provider.FileProvider"
+ android:authorities="${applicationId}.feature.prompts.fileprovider"
+ android:exported="false"
+ android:grantUriPermissions="true">
+ <meta-data
+ android:name="android.support.FILE_PROVIDER_PATHS"
+ android:resource="@xml/feature_prompts_file_paths" />
+ </provider>
+ </application>
+</manifest>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/PromptContainer.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/PromptContainer.kt
new file mode 100644
index 0000000000..fb02e45d2e
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/PromptContainer.kt
@@ -0,0 +1,63 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts
+
+import android.content.Context
+import android.content.Intent
+import androidx.annotation.StringRes
+import androidx.annotation.VisibleForTesting
+
+/**
+ * Wrapper to hold shared functionality between activities and fragments for [PromptFeature].
+ */
+internal sealed class PromptContainer {
+
+ /**
+ * Getter for [Context].
+ */
+ abstract val context: Context
+
+ /**
+ * Launches an activity for which you would like a result when it finished.
+ */
+ abstract fun startActivityForResult(intent: Intent, code: Int)
+
+ /**
+ * Returns a localized string.
+ */
+ abstract fun getString(@StringRes res: Int, vararg objects: Any): String
+
+ internal class Activity(
+ private val activity: android.app.Activity,
+ ) : PromptContainer() {
+
+ override val context get() = activity
+
+ override fun startActivityForResult(intent: Intent, code: Int) =
+ activity.startActivityForResult(intent, code)
+
+ override fun getString(res: Int, vararg objects: Any) = activity.getString(res, *objects)
+ }
+
+ internal class Fragment(
+ private val fragment: androidx.fragment.app.Fragment,
+ ) : PromptContainer() {
+
+ override val context get() = fragment.requireContext()
+
+ @Suppress("DEPRECATION")
+ // https://github.com/mozilla-mobile/android-components/issues/10357
+ override fun startActivityForResult(intent: Intent, code: Int) =
+ fragment.startActivityForResult(intent, code)
+
+ override fun getString(res: Int, vararg objects: Any) = fragment.getString(res, *objects)
+ }
+
+ @VisibleForTesting
+ internal class TestPromptContainer(override val context: Context) : PromptContainer() {
+ override fun startActivityForResult(intent: Intent, code: Int) = Unit
+ override fun getString(res: Int, vararg objects: Any) = context.getString(res, *objects)
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/PromptFeature.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/PromptFeature.kt
new file mode 100644
index 0000000000..481b0e5ce3
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/PromptFeature.kt
@@ -0,0 +1,1220 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts
+
+import android.app.Activity
+import android.content.Intent
+import androidx.annotation.VisibleForTesting
+import androidx.annotation.VisibleForTesting.Companion.PRIVATE
+import androidx.core.view.isVisible
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.cancel
+import kotlinx.coroutines.flow.map
+import mozilla.components.browser.state.action.ContentAction
+import mozilla.components.browser.state.selector.findTabOrCustomTab
+import mozilla.components.browser.state.selector.findTabOrCustomTabOrSelectedTab
+import mozilla.components.browser.state.state.SessionState
+import mozilla.components.browser.state.store.BrowserStore
+import mozilla.components.concept.engine.prompt.Choice
+import mozilla.components.concept.engine.prompt.PromptRequest
+import mozilla.components.concept.engine.prompt.PromptRequest.Alert
+import mozilla.components.concept.engine.prompt.PromptRequest.Authentication
+import mozilla.components.concept.engine.prompt.PromptRequest.BeforeUnload
+import mozilla.components.concept.engine.prompt.PromptRequest.Color
+import mozilla.components.concept.engine.prompt.PromptRequest.Confirm
+import mozilla.components.concept.engine.prompt.PromptRequest.Dismissible
+import mozilla.components.concept.engine.prompt.PromptRequest.File
+import mozilla.components.concept.engine.prompt.PromptRequest.MenuChoice
+import mozilla.components.concept.engine.prompt.PromptRequest.MultipleChoice
+import mozilla.components.concept.engine.prompt.PromptRequest.Popup
+import mozilla.components.concept.engine.prompt.PromptRequest.Repost
+import mozilla.components.concept.engine.prompt.PromptRequest.SaveCreditCard
+import mozilla.components.concept.engine.prompt.PromptRequest.SaveLoginPrompt
+import mozilla.components.concept.engine.prompt.PromptRequest.SelectAddress
+import mozilla.components.concept.engine.prompt.PromptRequest.SelectCreditCard
+import mozilla.components.concept.engine.prompt.PromptRequest.SelectLoginPrompt
+import mozilla.components.concept.engine.prompt.PromptRequest.Share
+import mozilla.components.concept.engine.prompt.PromptRequest.SingleChoice
+import mozilla.components.concept.engine.prompt.PromptRequest.TextPrompt
+import mozilla.components.concept.engine.prompt.PromptRequest.TimeSelection
+import mozilla.components.concept.identitycredential.Account
+import mozilla.components.concept.identitycredential.Provider
+import mozilla.components.concept.storage.CreditCardEntry
+import mozilla.components.concept.storage.CreditCardValidationDelegate
+import mozilla.components.concept.storage.LoginEntry
+import mozilla.components.concept.storage.LoginValidationDelegate
+import mozilla.components.feature.prompts.address.AddressDelegate
+import mozilla.components.feature.prompts.address.AddressPicker
+import mozilla.components.feature.prompts.address.DefaultAddressDelegate
+import mozilla.components.feature.prompts.creditcard.CreditCardDelegate
+import mozilla.components.feature.prompts.creditcard.CreditCardPicker
+import mozilla.components.feature.prompts.creditcard.CreditCardSaveDialogFragment
+import mozilla.components.feature.prompts.dialog.AlertDialogFragment
+import mozilla.components.feature.prompts.dialog.AuthenticationDialogFragment
+import mozilla.components.feature.prompts.dialog.ChoiceDialogFragment
+import mozilla.components.feature.prompts.dialog.ChoiceDialogFragment.Companion.MENU_CHOICE_DIALOG_TYPE
+import mozilla.components.feature.prompts.dialog.ChoiceDialogFragment.Companion.MULTIPLE_CHOICE_DIALOG_TYPE
+import mozilla.components.feature.prompts.dialog.ChoiceDialogFragment.Companion.SINGLE_CHOICE_DIALOG_TYPE
+import mozilla.components.feature.prompts.dialog.ColorPickerDialogFragment
+import mozilla.components.feature.prompts.dialog.ConfirmDialogFragment
+import mozilla.components.feature.prompts.dialog.MultiButtonDialogFragment
+import mozilla.components.feature.prompts.dialog.PromptAbuserDetector
+import mozilla.components.feature.prompts.dialog.PromptDialogFragment
+import mozilla.components.feature.prompts.dialog.Prompter
+import mozilla.components.feature.prompts.dialog.SaveLoginDialogFragment
+import mozilla.components.feature.prompts.dialog.TextPromptDialogFragment
+import mozilla.components.feature.prompts.dialog.TimePickerDialogFragment
+import mozilla.components.feature.prompts.ext.executeIfWindowedPrompt
+import mozilla.components.feature.prompts.facts.emitCreditCardSaveShownFact
+import mozilla.components.feature.prompts.facts.emitPromptConfirmedFact
+import mozilla.components.feature.prompts.facts.emitPromptDismissedFact
+import mozilla.components.feature.prompts.facts.emitPromptDisplayedFact
+import mozilla.components.feature.prompts.facts.emitSuccessfulAddressAutofillFormDetectedFact
+import mozilla.components.feature.prompts.facts.emitSuccessfulCreditCardAutofillFormDetectedFact
+import mozilla.components.feature.prompts.file.FilePicker
+import mozilla.components.feature.prompts.file.FileUploadsDirCleaner
+import mozilla.components.feature.prompts.identitycredential.DialogColors
+import mozilla.components.feature.prompts.identitycredential.DialogColorsProvider
+import mozilla.components.feature.prompts.identitycredential.PrivacyPolicyDialogFragment
+import mozilla.components.feature.prompts.identitycredential.SelectAccountDialogFragment
+import mozilla.components.feature.prompts.identitycredential.SelectProviderDialogFragment
+import mozilla.components.feature.prompts.login.LoginDelegate
+import mozilla.components.feature.prompts.login.LoginExceptions
+import mozilla.components.feature.prompts.login.LoginPicker
+import mozilla.components.feature.prompts.login.StrongPasswordPromptViewListener
+import mozilla.components.feature.prompts.login.SuggestStrongPasswordDelegate
+import mozilla.components.feature.prompts.share.DefaultShareDelegate
+import mozilla.components.feature.prompts.share.ShareDelegate
+import mozilla.components.feature.session.SessionUseCases
+import mozilla.components.feature.session.SessionUseCases.ExitFullScreenUseCase
+import mozilla.components.feature.tabs.TabsUseCases
+import mozilla.components.lib.state.ext.flowScoped
+import mozilla.components.support.base.feature.ActivityResultHandler
+import mozilla.components.support.base.feature.LifecycleAwareFeature
+import mozilla.components.support.base.feature.OnNeedToRequestPermissions
+import mozilla.components.support.base.feature.PermissionsFeature
+import mozilla.components.support.base.feature.UserInteractionHandler
+import mozilla.components.support.base.log.logger.Logger
+import mozilla.components.support.ktx.kotlin.ifNullOrEmpty
+import mozilla.components.support.ktx.kotlinx.coroutines.flow.ifAnyChanged
+import java.lang.ref.WeakReference
+import java.security.InvalidParameterException
+import java.util.Collections
+import java.util.Date
+import java.util.WeakHashMap
+
+@VisibleForTesting(otherwise = PRIVATE)
+internal const val FRAGMENT_TAG = "mozac_feature_prompt_dialog"
+
+/**
+ * Feature for displaying native dialogs for html elements like: input type
+ * date, file, time, color, option, menu, authentication, confirmation and alerts.
+ *
+ * There are some requests that are handled with intents instead of dialogs,
+ * like file choosers and others. For this reason, you have to keep the feature
+ * aware of the flow of requesting data from other apps, overriding
+ * onActivityResult in your [Activity] or [Fragment] and forward its calls
+ * to [onActivityResult].
+ *
+ * This feature will subscribe to the currently selected session and display
+ * a suitable native dialog based on [Session.Observer.onPromptRequested] events.
+ * Once the dialog is closed or the user selects an item from the dialog
+ * the related [PromptRequest] will be consumed.
+ *
+ * @property container The [Activity] or [Fragment] which hosts this feature.
+ * @property store The [BrowserStore] this feature should subscribe to.
+ * @property customTabId Optional id of a custom tab. Instead of showing context
+ * menus for the currently selected tab this feature will show only context menus
+ * for this custom tab if an id is provided.
+ * @property fragmentManager The [FragmentManager] to be used when displaying
+ * a dialog (fragment).
+ * @property shareDelegate Delegate used to display share sheet.
+ * @property exitFullscreenUsecase Usecase allowing to exit browser tabs' fullscreen mode.
+ * @property isSaveLoginEnabled A callback invoked when a login prompt is triggered. If false,
+ * 'save login' prompts will not be shown.
+ * @property isCreditCardAutofillEnabled A callback invoked when credit card fields are detected in the webpage.
+ * If this resolves to `true` a prompt allowing the user to select the credit card details to be autocompleted
+ * will be shown.
+ * @property isAddressAutofillEnabled A callback invoked when address fields are detected in the webpage.
+ * If this resolves to `true` a prompt allowing the user to select the address details to be autocompleted
+ * will be shown.
+ * @property loginExceptionStorage An implementation of [LoginExceptions] that saves and checks origins
+ * the user does not want to see a save login dialog for.
+ * @property loginDelegate Delegate for login picker.
+ * @property suggestStrongPasswordDelegate Delegate for strong password generator.
+ * @property isSuggestStrongPasswordEnabled Feature flag denoting whether the suggest strong password
+ * feature is enabled or not. If this resolves to 'false', the feature will be hidden.
+ * @property onSaveLoginWithStrongPassword A callback invoked to save a new login that uses the
+ * generated strong password
+ * @property creditCardDelegate Delegate for credit card picker.
+ * @property addressDelegate Delegate for address picker.
+ * @property fileUploadsDirCleaner a [FileUploadsDirCleaner] to clean up temporary file uploads.
+ * @property onNeedToRequestPermissions A callback invoked when permissions
+ * need to be requested before a prompt (e.g. a file picker) can be displayed.
+ * Once the request is completed, [onPermissionsResult] needs to be invoked.
+ */
+@Suppress("LargeClass", "LongParameterList")
+class PromptFeature private constructor(
+ private val container: PromptContainer,
+ private val store: BrowserStore,
+ private var customTabId: String?,
+ private val fragmentManager: FragmentManager,
+ private val identityCredentialColorsProvider: DialogColorsProvider = DialogColorsProvider {
+ DialogColors.default()
+ },
+ private val tabsUseCases: TabsUseCases,
+ private val shareDelegate: ShareDelegate,
+ private val exitFullscreenUsecase: ExitFullScreenUseCase = SessionUseCases(store).exitFullscreen,
+ override val creditCardValidationDelegate: CreditCardValidationDelegate? = null,
+ override val loginValidationDelegate: LoginValidationDelegate? = null,
+ private val isSaveLoginEnabled: () -> Boolean = { false },
+ private val isCreditCardAutofillEnabled: () -> Boolean = { false },
+ private val isAddressAutofillEnabled: () -> Boolean = { false },
+ override val loginExceptionStorage: LoginExceptions? = null,
+ private val loginDelegate: LoginDelegate = object : LoginDelegate {},
+ private val suggestStrongPasswordDelegate: SuggestStrongPasswordDelegate = object :
+ SuggestStrongPasswordDelegate {},
+ private val isSuggestStrongPasswordEnabled: Boolean = false,
+ private val onSaveLoginWithStrongPassword: (String, String) -> Unit = { _, _ -> },
+ private val creditCardDelegate: CreditCardDelegate = object : CreditCardDelegate {},
+ private val addressDelegate: AddressDelegate = DefaultAddressDelegate(),
+ private val fileUploadsDirCleaner: FileUploadsDirCleaner,
+ onNeedToRequestPermissions: OnNeedToRequestPermissions,
+) : LifecycleAwareFeature,
+ PermissionsFeature,
+ Prompter,
+ ActivityResultHandler,
+ UserInteractionHandler {
+ // These three scopes have identical lifetimes. We do not yet have a way of combining scopes
+ private var handlePromptScope: CoroutineScope? = null
+ private var dismissPromptScope: CoroutineScope? = null
+
+ @VisibleForTesting
+ var activePromptRequest: PromptRequest? = null
+
+ internal val promptAbuserDetector = PromptAbuserDetector()
+ private val logger = Logger("PromptFeature")
+
+ @VisibleForTesting(otherwise = PRIVATE)
+ internal var activePrompt: WeakReference<PromptDialogFragment>? = null
+
+ // This set of weak references of fragments is only used for dismissing all prompts on navigation.
+ // For all other code only `activePrompt` is tracked for now.
+ @VisibleForTesting(otherwise = PRIVATE)
+ internal val activePromptsToDismiss =
+ Collections.newSetFromMap(WeakHashMap<PromptDialogFragment, Boolean>())
+
+ constructor(
+ activity: Activity,
+ store: BrowserStore,
+ customTabId: String? = null,
+ fragmentManager: FragmentManager,
+ tabsUseCases: TabsUseCases,
+ identityCredentialColorsProvider: DialogColorsProvider = DialogColorsProvider { DialogColors.default() },
+ shareDelegate: ShareDelegate = DefaultShareDelegate(),
+ exitFullscreenUsecase: ExitFullScreenUseCase = SessionUseCases(store).exitFullscreen,
+ creditCardValidationDelegate: CreditCardValidationDelegate? = null,
+ loginValidationDelegate: LoginValidationDelegate? = null,
+ isSaveLoginEnabled: () -> Boolean = { false },
+ isCreditCardAutofillEnabled: () -> Boolean = { false },
+ isAddressAutofillEnabled: () -> Boolean = { false },
+ loginExceptionStorage: LoginExceptions? = null,
+ loginDelegate: LoginDelegate = object : LoginDelegate {},
+ suggestStrongPasswordDelegate: SuggestStrongPasswordDelegate = object :
+ SuggestStrongPasswordDelegate {},
+ isSuggestStrongPasswordEnabled: Boolean = false,
+ onSaveLoginWithStrongPassword: (String, String) -> Unit = { _, _ -> },
+ creditCardDelegate: CreditCardDelegate = object : CreditCardDelegate {},
+ addressDelegate: AddressDelegate = DefaultAddressDelegate(),
+ fileUploadsDirCleaner: FileUploadsDirCleaner,
+ onNeedToRequestPermissions: OnNeedToRequestPermissions,
+ ) : this(
+ container = PromptContainer.Activity(activity),
+ store = store,
+ customTabId = customTabId,
+ fragmentManager = fragmentManager,
+ tabsUseCases = tabsUseCases,
+ identityCredentialColorsProvider = identityCredentialColorsProvider,
+ shareDelegate = shareDelegate,
+ exitFullscreenUsecase = exitFullscreenUsecase,
+ creditCardValidationDelegate = creditCardValidationDelegate,
+ loginValidationDelegate = loginValidationDelegate,
+ isSaveLoginEnabled = isSaveLoginEnabled,
+ isCreditCardAutofillEnabled = isCreditCardAutofillEnabled,
+ isAddressAutofillEnabled = isAddressAutofillEnabled,
+ loginExceptionStorage = loginExceptionStorage,
+ fileUploadsDirCleaner = fileUploadsDirCleaner,
+ onNeedToRequestPermissions = onNeedToRequestPermissions,
+ loginDelegate = loginDelegate,
+ suggestStrongPasswordDelegate = suggestStrongPasswordDelegate,
+ isSuggestStrongPasswordEnabled = isSuggestStrongPasswordEnabled,
+ onSaveLoginWithStrongPassword = onSaveLoginWithStrongPassword,
+ creditCardDelegate = creditCardDelegate,
+ addressDelegate = addressDelegate,
+ )
+
+ constructor(
+ fragment: Fragment,
+ store: BrowserStore,
+ customTabId: String? = null,
+ fragmentManager: FragmentManager,
+ tabsUseCases: TabsUseCases,
+ shareDelegate: ShareDelegate = DefaultShareDelegate(),
+ exitFullscreenUsecase: ExitFullScreenUseCase = SessionUseCases(store).exitFullscreen,
+ creditCardValidationDelegate: CreditCardValidationDelegate? = null,
+ loginValidationDelegate: LoginValidationDelegate? = null,
+ isSaveLoginEnabled: () -> Boolean = { false },
+ isCreditCardAutofillEnabled: () -> Boolean = { false },
+ isAddressAutofillEnabled: () -> Boolean = { false },
+ loginExceptionStorage: LoginExceptions? = null,
+ loginDelegate: LoginDelegate = object : LoginDelegate {},
+ suggestStrongPasswordDelegate: SuggestStrongPasswordDelegate = object :
+ SuggestStrongPasswordDelegate {},
+ isSuggestStrongPasswordEnabled: Boolean = false,
+ onSaveLoginWithStrongPassword: (String, String) -> Unit = { _, _ -> },
+ creditCardDelegate: CreditCardDelegate = object : CreditCardDelegate {},
+ addressDelegate: AddressDelegate = DefaultAddressDelegate(),
+ fileUploadsDirCleaner: FileUploadsDirCleaner,
+ onNeedToRequestPermissions: OnNeedToRequestPermissions,
+ ) : this(
+ container = PromptContainer.Fragment(fragment),
+ store = store,
+ customTabId = customTabId,
+ fragmentManager = fragmentManager,
+ tabsUseCases = tabsUseCases,
+ shareDelegate = shareDelegate,
+ exitFullscreenUsecase = exitFullscreenUsecase,
+ creditCardValidationDelegate = creditCardValidationDelegate,
+ loginValidationDelegate = loginValidationDelegate,
+ isSaveLoginEnabled = isSaveLoginEnabled,
+ isCreditCardAutofillEnabled = isCreditCardAutofillEnabled,
+ isAddressAutofillEnabled = isAddressAutofillEnabled,
+ loginExceptionStorage = loginExceptionStorage,
+ fileUploadsDirCleaner = fileUploadsDirCleaner,
+ onNeedToRequestPermissions = onNeedToRequestPermissions,
+ loginDelegate = loginDelegate,
+ suggestStrongPasswordDelegate = suggestStrongPasswordDelegate,
+ isSuggestStrongPasswordEnabled = isSuggestStrongPasswordEnabled,
+ onSaveLoginWithStrongPassword = onSaveLoginWithStrongPassword,
+ creditCardDelegate = creditCardDelegate,
+ addressDelegate = addressDelegate,
+ )
+
+ private val filePicker =
+ FilePicker(container, store, customTabId, fileUploadsDirCleaner, onNeedToRequestPermissions)
+
+ @VisibleForTesting(otherwise = PRIVATE)
+ internal var loginPicker =
+ with(loginDelegate) {
+ loginPickerView?.let {
+ LoginPicker(store, it, onManageLogins, customTabId)
+ }
+ }
+
+ @VisibleForTesting(otherwise = PRIVATE)
+ internal var strongPasswordPromptViewListener =
+ with(suggestStrongPasswordDelegate) {
+ strongPasswordPromptViewListenerView?.let {
+ StrongPasswordPromptViewListener(store, it, customTabId)
+ }
+ }
+
+ @VisibleForTesting(otherwise = PRIVATE)
+ internal var creditCardPicker =
+ with(creditCardDelegate) {
+ creditCardPickerView?.let {
+ CreditCardPicker(
+ store = store,
+ creditCardSelectBar = it,
+ manageCreditCardsCallback = onManageCreditCards,
+ selectCreditCardCallback = onSelectCreditCard,
+ sessionId = customTabId,
+ )
+ }
+ }
+
+ @VisibleForTesting(otherwise = PRIVATE)
+ internal var addressPicker =
+ with(addressDelegate) {
+ addressPickerView?.let {
+ AddressPicker(
+ store = store,
+ addressSelectBar = it,
+ onManageAddresses = onManageAddresses,
+ sessionId = customTabId,
+ )
+ }
+ }
+
+ override val onNeedToRequestPermissions
+ get() = filePicker.onNeedToRequestPermissions
+
+ override fun onOpenLink(url: String) {
+ tabsUseCases.addTab(
+ url = url,
+ )
+ }
+
+ /**
+ * Starts observing the selected session to listen for prompt requests
+ * and displays a dialog when needed.
+ */
+ @Suppress("ComplexMethod", "LongMethod")
+ override fun start() {
+ promptAbuserDetector.resetJSAlertAbuseState()
+
+ handlePromptScope = store.flowScoped { flow ->
+ flow.map { state -> state.findTabOrCustomTabOrSelectedTab(customTabId) }
+ .ifAnyChanged {
+ arrayOf(it?.content?.promptRequests, it?.content?.loading)
+ }
+ .collect { state ->
+ state?.content?.let { content ->
+ if (content.promptRequests.lastOrNull() != activePromptRequest) {
+ // Dismiss any active select login or credit card prompt if it does
+ // not match the current prompt request for the session.
+ when (activePromptRequest) {
+ is SelectLoginPrompt -> {
+ loginPicker?.dismissCurrentLoginSelect(activePromptRequest as SelectLoginPrompt)
+ strongPasswordPromptViewListener?.dismissCurrentSuggestStrongPassword(
+ activePromptRequest as SelectLoginPrompt,
+ )
+ }
+
+ is SaveLoginPrompt -> {
+ (activePrompt?.get() as? SaveLoginDialogFragment)?.dismissAllowingStateLoss()
+ }
+
+ is SaveCreditCard -> {
+ (activePrompt?.get() as? CreditCardSaveDialogFragment)?.dismissAllowingStateLoss()
+ }
+
+ is SelectCreditCard -> {
+ creditCardPicker?.dismissSelectCreditCardRequest(
+ activePromptRequest as SelectCreditCard,
+ )
+ }
+
+ is SelectAddress -> {
+ addressPicker?.dismissSelectAddressRequest(
+ activePromptRequest as SelectAddress,
+ )
+ }
+
+ is SingleChoice,
+ is MultipleChoice,
+ is MenuChoice,
+ -> {
+ (activePrompt?.get() as? ChoiceDialogFragment)?.let { dialog ->
+ if (dialog.isAdded) {
+ dialog.dismissAllowingStateLoss()
+ } else {
+ activePromptsToDismiss.remove(dialog)
+ activePrompt?.clear()
+ }
+ }
+ }
+
+ else -> {
+ // no-op
+ }
+ }
+
+ onPromptRequested(state)
+ } else if (!content.loading) {
+ promptAbuserDetector.resetJSAlertAbuseState()
+ } else if (content.loading) {
+ dismissSelectPrompts()
+ }
+
+ activePromptRequest = content.promptRequests.lastOrNull()
+ }
+ }
+ }
+
+ // Dismiss all prompts when page URL or session id changes. See Fenix#5326
+ dismissPromptScope = store.flowScoped { flow ->
+ flow.ifAnyChanged { state ->
+ arrayOf(
+ state.selectedTabId,
+ state.findTabOrCustomTabOrSelectedTab(customTabId)?.content?.url,
+ )
+ }.collect {
+ dismissSelectPrompts()
+
+ val prompt = activePrompt?.get()
+
+ store.consumeAllSessionPrompts(
+ sessionId = prompt?.sessionId,
+ activePrompt,
+ predicate = { it.shouldDismissOnLoad },
+ consume = { prompt?.dismiss() },
+ )
+
+ // Let's make sure we do not leave anything behind..
+ activePromptsToDismiss.forEach { fragment -> fragment.dismiss() }
+ }
+ }
+
+ fragmentManager.findFragmentByTag(FRAGMENT_TAG)?.let { fragment ->
+ // There's still a [PromptDialogFragment] visible from the last time. Re-attach this feature so that the
+ // fragment can invoke the callback on this feature once the user makes a selection. This can happen when
+ // the app was in the background and on resume the activity and fragments get recreated.
+ reattachFragment(fragment as PromptDialogFragment)
+ }
+ }
+
+ override fun stop() {
+ // Stops observing the selected session for incoming prompt requests.
+ handlePromptScope?.cancel()
+ dismissPromptScope?.cancel()
+
+ // Dismisses the logins prompt so that it can appear on another tab
+ dismissSelectPrompts()
+ }
+
+ override fun onBackPressed(): Boolean {
+ return dismissSelectPrompts()
+ }
+
+ /**
+ * Notifies the feature of intent results for prompt requests handled by
+ * other apps like credit card and file chooser requests.
+ *
+ * @param requestCode The code of the app that requested the intent.
+ * @param data The result of the request.
+ * @param resultCode The code of the result.
+ */
+ override fun onActivityResult(requestCode: Int, data: Intent?, resultCode: Int): Boolean {
+ if (requestCode == PIN_REQUEST) {
+ if (resultCode == Activity.RESULT_OK) {
+ creditCardPicker?.onAuthSuccess()
+ } else {
+ creditCardPicker?.onAuthFailure()
+ }
+
+ return true
+ }
+
+ return filePicker.onActivityResult(requestCode, resultCode, data)
+ }
+
+ /**
+ * Notifies the feature that the biometric authentication was completed. It will then
+ * either process or dismiss the prompt request.
+ *
+ * @param isAuthenticated True if the user is authenticated successfully from the biometric
+ * authentication prompt or false otherwise.
+ */
+ fun onBiometricResult(isAuthenticated: Boolean) {
+ if (isAuthenticated) {
+ creditCardPicker?.onAuthSuccess()
+ } else {
+ creditCardPicker?.onAuthFailure()
+ }
+ }
+
+ /**
+ * Notifies the feature that the permissions request was completed. It will then
+ * either process or dismiss the prompt request.
+ *
+ * @param permissions List of permission requested.
+ * @param grantResults The grant results for the corresponding permissions
+ * @see [onNeedToRequestPermissions].
+ */
+ override fun onPermissionsResult(permissions: Array<String>, grantResults: IntArray) {
+ filePicker.onPermissionsResult(permissions, grantResults)
+ }
+
+ /**
+ * Invoked when a native dialog needs to be shown.
+ *
+ * @param session The session which requested the dialog.
+ */
+ @Suppress("NestedBlockDepth")
+ @VisibleForTesting(otherwise = PRIVATE)
+ internal fun onPromptRequested(session: SessionState) {
+ // Some requests are handle with intents
+ session.content.promptRequests.lastOrNull()?.let { promptRequest ->
+ store.state.findTabOrCustomTabOrSelectedTab(customTabId)?.let {
+ promptRequest.executeIfWindowedPrompt { exitFullscreenUsecase(it.id) }
+ }
+
+ when (promptRequest) {
+ is File -> {
+ emitPromptDisplayedFact(promptName = "FilePrompt")
+ filePicker.handleFileRequest(promptRequest)
+ }
+
+ is Share -> handleShareRequest(promptRequest, session)
+ is SelectCreditCard -> {
+ emitSuccessfulCreditCardAutofillFormDetectedFact()
+ if (isCreditCardAutofillEnabled() && promptRequest.creditCards.isNotEmpty()) {
+ creditCardPicker?.handleSelectCreditCardRequest(promptRequest)
+ }
+ }
+
+ is SelectLoginPrompt -> {
+ if (promptRequest.logins.isEmpty()) {
+ if (isSuggestStrongPasswordEnabled) {
+ val currentUrl =
+ store.state.findTabOrCustomTabOrSelectedTab(customTabId)?.content?.url
+ if (currentUrl != null) {
+ strongPasswordPromptViewListener?.handleSuggestStrongPasswordRequest(
+ promptRequest,
+ currentUrl,
+ onSaveLoginWithStrongPassword,
+ )
+ }
+ }
+ } else {
+ loginPicker?.handleSelectLoginRequest(promptRequest)
+ }
+ emitPromptDisplayedFact(promptName = "SelectLoginPrompt")
+ }
+
+ is SelectAddress -> {
+ emitSuccessfulAddressAutofillFormDetectedFact()
+ if (isAddressAutofillEnabled() && promptRequest.addresses.isNotEmpty()) {
+ addressPicker?.handleSelectAddressRequest(promptRequest)
+ }
+ }
+
+ else -> handleDialogsRequest(promptRequest, session)
+ }
+ }
+ }
+
+ /**
+ * Invoked when a dialog is dismissed. This consumes the [PromptFeature]
+ * value from the session indicated by [sessionId].
+ *
+ * @param sessionId this is the id of the session which requested the prompt.
+ * @param promptRequestUID identifier of the [PromptRequest] for which this dialog was shown.
+ * @param value an optional value provided by the dialog as a result of canceling the action.
+ */
+ override fun onCancel(sessionId: String, promptRequestUID: String, value: Any?) {
+ store.consumePromptFrom(sessionId, promptRequestUID, activePrompt) {
+ emitPromptDismissedFact(promptName = it::class.simpleName.ifNullOrEmpty { "" })
+ when (it) {
+ is BeforeUnload -> it.onStay()
+ is Popup -> {
+ val shouldNotShowMoreDialogs = value as Boolean
+ promptAbuserDetector.userWantsMoreDialogs(!shouldNotShowMoreDialogs)
+ it.onDeny()
+ }
+
+ is Dismissible -> it.onDismiss()
+ else -> {
+ // no-op
+ }
+ }
+ }
+ }
+
+ /**
+ * Invoked when the user confirms the action on the dialog. This consumes
+ * the [PromptFeature] value from the [SessionState] indicated by [sessionId].
+ *
+ * @param sessionId that requested to show the dialog.
+ * @param promptRequestUID identifier of the [PromptRequest] for which this dialog was shown.
+ * @param value an optional value provided by the dialog as a result of confirming the action.
+ */
+ @Suppress("UNCHECKED_CAST", "ComplexMethod")
+ override fun onConfirm(sessionId: String, promptRequestUID: String, value: Any?) {
+ store.consumePromptFrom(sessionId, promptRequestUID, activePrompt) {
+ when (it) {
+ is TimeSelection -> it.onConfirm(value as Date)
+ is Color -> it.onConfirm(value as String)
+ is Alert -> {
+ val shouldNotShowMoreDialogs = value as Boolean
+ promptAbuserDetector.userWantsMoreDialogs(!shouldNotShowMoreDialogs)
+ it.onConfirm(!shouldNotShowMoreDialogs)
+ }
+
+ is SingleChoice -> it.onConfirm(value as Choice)
+ is MenuChoice -> it.onConfirm(value as Choice)
+ is BeforeUnload -> it.onLeave()
+ is Popup -> {
+ val shouldNotShowMoreDialogs = value as Boolean
+ promptAbuserDetector.userWantsMoreDialogs(!shouldNotShowMoreDialogs)
+ it.onAllow()
+ }
+
+ is MultipleChoice -> it.onConfirm(value as Array<Choice>)
+
+ is Authentication -> {
+ val (user, password) = value as Pair<String, String>
+ it.onConfirm(user, password)
+ }
+
+ is TextPrompt -> {
+ val (shouldNotShowMoreDialogs, text) = value as Pair<Boolean, String>
+
+ promptAbuserDetector.userWantsMoreDialogs(!shouldNotShowMoreDialogs)
+ it.onConfirm(!shouldNotShowMoreDialogs, text)
+ }
+
+ is Share -> it.onSuccess()
+
+ is SaveCreditCard -> it.onConfirm(value as CreditCardEntry)
+ is SaveLoginPrompt -> it.onConfirm(value as LoginEntry)
+
+ is Confirm -> {
+ val (isCheckBoxChecked, buttonType) =
+ value as Pair<Boolean, MultiButtonDialogFragment.ButtonType>
+ promptAbuserDetector.userWantsMoreDialogs(!isCheckBoxChecked)
+ when (buttonType) {
+ MultiButtonDialogFragment.ButtonType.POSITIVE ->
+ it.onConfirmPositiveButton(!isCheckBoxChecked)
+
+ MultiButtonDialogFragment.ButtonType.NEGATIVE ->
+ it.onConfirmNegativeButton(!isCheckBoxChecked)
+
+ MultiButtonDialogFragment.ButtonType.NEUTRAL ->
+ it.onConfirmNeutralButton(!isCheckBoxChecked)
+ }
+ }
+
+ is Repost -> it.onConfirm()
+ is PromptRequest.IdentityCredential.SelectProvider -> it.onConfirm(value as Provider)
+ is PromptRequest.IdentityCredential.SelectAccount -> it.onConfirm(value as Account)
+ is PromptRequest.IdentityCredential.PrivacyPolicy -> it.onConfirm(value as Boolean)
+ else -> {
+ // no-op
+ }
+ }
+ emitPromptConfirmedFact(it::class.simpleName.ifNullOrEmpty { "" })
+ }
+ }
+
+ /**
+ * Invoked when the user is requesting to clear the selected value from the dialog.
+ * This consumes the [PromptFeature] value from the [SessionState] indicated by [sessionId].
+ *
+ * @param sessionId that requested to show the dialog.
+ * @param promptRequestUID identifier of the [PromptRequest] for which this dialog was shown.
+ */
+ override fun onClear(sessionId: String, promptRequestUID: String) {
+ store.consumePromptFrom(sessionId, promptRequestUID, activePrompt) {
+ when (it) {
+ is TimeSelection -> it.onClear()
+ else -> {
+ // no-op
+ }
+ }
+ }
+ }
+
+ /**
+ * Re-attaches a fragment that is still visible but not linked to this feature anymore.
+ */
+ private fun reattachFragment(fragment: PromptDialogFragment) {
+ val session = store.state.findTabOrCustomTab(fragment.sessionId)
+ if (session?.content?.promptRequests?.isEmpty() != false) {
+ fragmentManager.beginTransaction()
+ .remove(fragment)
+ .commitAllowingStateLoss()
+ return
+ }
+ // Re-assign the feature instance so that the fragment can invoke us once the user makes a selection or cancels
+ // the dialog.
+ fragment.feature = this
+ }
+
+ private fun handleShareRequest(promptRequest: Share, session: SessionState) {
+ emitPromptDisplayedFact(promptName = "ShareSheet")
+ shareDelegate.showShareSheet(
+ context = container.context,
+ shareData = promptRequest.data,
+ onDismiss = {
+ emitPromptDismissedFact(promptName = "ShareSheet")
+ onCancel(session.id, promptRequest.uid)
+ },
+ onSuccess = { onConfirm(session.id, promptRequest.uid, null) },
+ )
+ }
+
+ /**
+ * Called from on [onPromptRequested] to handle requests for showing native dialogs.
+ */
+ @Suppress("ComplexMethod", "LongMethod")
+ @VisibleForTesting(otherwise = PRIVATE)
+ internal fun handleDialogsRequest(
+ promptRequest: PromptRequest,
+ session: SessionState,
+ ) {
+ // Requests that are handled with dialogs
+ val dialog = when (promptRequest) {
+ is SaveCreditCard -> {
+ if (!isCreditCardAutofillEnabled.invoke() || creditCardValidationDelegate == null ||
+ !promptRequest.creditCard.isValid
+ ) {
+ dismissDialogRequest(promptRequest, session)
+
+ if (creditCardValidationDelegate == null) {
+ logger.debug(
+ "Ignoring received SaveCreditCard because PromptFeature." +
+ "creditCardValidationDelegate is null. If you are trying to autofill " +
+ "credit cards, try attaching a CreditCardValidationDelegate to PromptFeature",
+ )
+ }
+
+ return
+ }
+
+ emitCreditCardSaveShownFact()
+
+ CreditCardSaveDialogFragment.newInstance(
+ sessionId = session.id,
+ promptRequestUID = promptRequest.uid,
+ shouldDismissOnLoad = false,
+ creditCard = promptRequest.creditCard,
+ )
+ }
+
+ is SaveLoginPrompt -> {
+ if (!isSaveLoginEnabled.invoke() || loginValidationDelegate == null) {
+ dismissDialogRequest(promptRequest, session)
+
+ if (loginValidationDelegate == null) {
+ logger.debug(
+ "Ignoring received SaveLoginPrompt because PromptFeature." +
+ "loginValidationDelegate is null. If you are trying to autofill logins, " +
+ "try attaching a LoginValidationDelegate to PromptFeature",
+ )
+ }
+
+ return
+ }
+
+ SaveLoginDialogFragment.newInstance(
+ sessionId = session.id,
+ promptRequestUID = promptRequest.uid,
+ shouldDismissOnLoad = false,
+ hint = promptRequest.hint,
+ // For v1, we only handle a single login and drop all others on the floor
+ entry = promptRequest.logins[0],
+ icon = session.content.icon,
+ )
+ }
+
+ is SingleChoice -> ChoiceDialogFragment.newInstance(
+ promptRequest.choices,
+ session.id,
+ promptRequest.uid,
+ true,
+ SINGLE_CHOICE_DIALOG_TYPE,
+ )
+
+ is MultipleChoice -> ChoiceDialogFragment.newInstance(
+ promptRequest.choices,
+ session.id,
+ promptRequest.uid,
+ true,
+ MULTIPLE_CHOICE_DIALOG_TYPE,
+ )
+
+ is MenuChoice -> ChoiceDialogFragment.newInstance(
+ promptRequest.choices,
+ session.id,
+ promptRequest.uid,
+ true,
+ MENU_CHOICE_DIALOG_TYPE,
+ )
+
+ is Alert -> {
+ with(promptRequest) {
+ AlertDialogFragment.newInstance(
+ session.id,
+ promptRequest.uid,
+ true,
+ title,
+ message,
+ promptAbuserDetector.areDialogsBeingAbused(),
+ )
+ }
+ }
+
+ is TimeSelection -> {
+ val selectionType = when (promptRequest.type) {
+ TimeSelection.Type.DATE -> TimePickerDialogFragment.SELECTION_TYPE_DATE
+ TimeSelection.Type.DATE_AND_TIME -> TimePickerDialogFragment.SELECTION_TYPE_DATE_AND_TIME
+ TimeSelection.Type.TIME -> TimePickerDialogFragment.SELECTION_TYPE_TIME
+ TimeSelection.Type.MONTH -> TimePickerDialogFragment.SELECTION_TYPE_MONTH
+ }
+
+ with(promptRequest) {
+ TimePickerDialogFragment.newInstance(
+ session.id,
+ promptRequest.uid,
+ true,
+ initialDate,
+ minimumDate,
+ maximumDate,
+ selectionType,
+ stepValue,
+ )
+ }
+ }
+
+ is TextPrompt -> {
+ with(promptRequest) {
+ TextPromptDialogFragment.newInstance(
+ session.id,
+ promptRequest.uid,
+ true,
+ title,
+ inputLabel,
+ inputValue,
+ promptAbuserDetector.areDialogsBeingAbused(),
+ )
+ }
+ }
+
+ is Authentication -> {
+ with(promptRequest) {
+ AuthenticationDialogFragment.newInstance(
+ session.id,
+ promptRequest.uid,
+ true,
+ title,
+ message,
+ userName,
+ password,
+ onlyShowPassword,
+ uri,
+ )
+ }
+ }
+
+ is Color -> ColorPickerDialogFragment.newInstance(
+ session.id,
+ promptRequest.uid,
+ true,
+ promptRequest.defaultColor,
+ )
+
+ is Popup -> {
+ val title = container.getString(R.string.mozac_feature_prompts_popup_dialog_title)
+ val positiveLabel = container.getString(R.string.mozac_feature_prompts_allow)
+ val negativeLabel = container.getString(R.string.mozac_feature_prompts_deny)
+
+ ConfirmDialogFragment.newInstance(
+ sessionId = session.id,
+ promptRequest.uid,
+ title = title,
+ message = promptRequest.targetUri,
+ positiveButtonText = positiveLabel,
+ negativeButtonText = negativeLabel,
+ hasShownManyDialogs = promptAbuserDetector.areDialogsBeingAbused(),
+ shouldDismissOnLoad = true,
+ )
+ }
+
+ is BeforeUnload -> {
+ val title =
+ container.getString(R.string.mozac_feature_prompt_before_unload_dialog_title)
+ val body =
+ container.getString(R.string.mozac_feature_prompt_before_unload_dialog_body)
+ val leaveLabel =
+ container.getString(R.string.mozac_feature_prompts_before_unload_leave)
+ val stayLabel =
+ container.getString(R.string.mozac_feature_prompts_before_unload_stay)
+
+ ConfirmDialogFragment.newInstance(
+ sessionId = session.id,
+ promptRequest.uid,
+ title = title,
+ message = body,
+ positiveButtonText = leaveLabel,
+ negativeButtonText = stayLabel,
+ shouldDismissOnLoad = true,
+ )
+ }
+
+ is Confirm -> {
+ with(promptRequest) {
+ val positiveButton = positiveButtonTitle.ifEmpty {
+ container.getString(R.string.mozac_feature_prompts_ok)
+ }
+ val negativeButton = negativeButtonTitle.ifEmpty {
+ container.getString(R.string.mozac_feature_prompts_cancel)
+ }
+
+ MultiButtonDialogFragment.newInstance(
+ session.id,
+ promptRequest.uid,
+ title,
+ message,
+ promptAbuserDetector.areDialogsBeingAbused(),
+ false,
+ positiveButton,
+ negativeButton,
+ neutralButtonTitle,
+ )
+ }
+ }
+
+ is Repost -> {
+ val title = container.context.getString(R.string.mozac_feature_prompt_repost_title)
+ val message =
+ container.context.getString(R.string.mozac_feature_prompt_repost_message)
+ val positiveAction =
+ container.context.getString(R.string.mozac_feature_prompt_repost_positive_button_text)
+ val negativeAction =
+ container.context.getString(R.string.mozac_feature_prompt_repost_negative_button_text)
+
+ ConfirmDialogFragment.newInstance(
+ sessionId = session.id,
+ promptRequestUID = promptRequest.uid,
+ shouldDismissOnLoad = true,
+ title = title,
+ message = message,
+ positiveButtonText = positiveAction,
+ negativeButtonText = negativeAction,
+ )
+ }
+
+ is PromptRequest.IdentityCredential.SelectProvider -> {
+ SelectProviderDialogFragment.newInstance(
+ sessionId = session.id,
+ promptRequestUID = promptRequest.uid,
+ shouldDismissOnLoad = true,
+ providers = promptRequest.providers,
+ colorsProvider = identityCredentialColorsProvider,
+ )
+ }
+
+ is PromptRequest.IdentityCredential.SelectAccount -> {
+ SelectAccountDialogFragment.newInstance(
+ sessionId = session.id,
+ promptRequestUID = promptRequest.uid,
+ shouldDismissOnLoad = true,
+ accounts = promptRequest.accounts,
+ provider = promptRequest.provider,
+ colorsProvider = identityCredentialColorsProvider,
+ )
+ }
+
+ is PromptRequest.IdentityCredential.PrivacyPolicy -> {
+ val title =
+ container.getString(
+ R.string.mozac_feature_prompts_identity_credentials_privacy_policy_title,
+ promptRequest.providerDomain,
+ )
+ val message =
+ container.getString(
+ R.string.mozac_feature_prompts_identity_credentials_privacy_policy_description,
+ promptRequest.host,
+ promptRequest.providerDomain,
+ promptRequest.privacyPolicyUrl,
+ promptRequest.termsOfServiceUrl,
+ )
+ PrivacyPolicyDialogFragment.newInstance(
+ sessionId = session.id,
+ promptRequestUID = promptRequest.uid,
+ shouldDismissOnLoad = true,
+ title = title,
+ message = message,
+ icon = promptRequest.icon,
+ )
+ }
+
+ else -> throw InvalidParameterException("Not valid prompt request type $promptRequest")
+ }
+
+ dialog.feature = this
+
+ if (canShowThisPrompt(promptRequest)) {
+ // If the ChoiceDialogFragment's choices data were updated,
+ // we need to dismiss the previous dialog
+ activePrompt?.get()?.let { promptDialog ->
+ // ChoiceDialogFragment could update their choices data,
+ // and we need to dismiss the previous UI dialog,
+ // without consuming the engine callbacks, and allow to create a new dialog with the
+ // updated data.
+ if (promptDialog is ChoiceDialogFragment &&
+ !session.content.promptRequests.any { it.uid == promptDialog.promptRequestUID }
+ ) {
+ // We want to avoid consuming the engine callbacks and allow a new dialog
+ // to be created with the updated data.
+ promptDialog.feature = null
+ promptDialog.dismiss()
+ }
+ }
+
+ emitPromptDisplayedFact(promptName = dialog::class.simpleName.ifNullOrEmpty { "" })
+ dialog.show(fragmentManager, FRAGMENT_TAG)
+ activePrompt = WeakReference(dialog)
+
+ if (promptRequest.shouldDismissOnLoad) {
+ activePromptsToDismiss.add(dialog)
+ }
+ } else {
+ dismissDialogRequest(promptRequest, session)
+ }
+ promptAbuserDetector.updateJSDialogAbusedState()
+ }
+
+ /**
+ * Dismiss and consume the given prompt request for the session.
+ */
+ @VisibleForTesting
+ internal fun dismissDialogRequest(promptRequest: PromptRequest, session: SessionState) {
+ (promptRequest as Dismissible).onDismiss()
+ store.dispatch(ContentAction.ConsumePromptRequestAction(session.id, promptRequest))
+ emitPromptDismissedFact(promptName = promptRequest::class.simpleName.ifNullOrEmpty { "" })
+ }
+
+ private fun canShowThisPrompt(promptRequest: PromptRequest): Boolean {
+ return when (promptRequest) {
+ is SingleChoice,
+ is MultipleChoice,
+ is MenuChoice,
+ is TimeSelection,
+ is File,
+ is Color,
+ is Authentication,
+ is BeforeUnload,
+ is SaveLoginPrompt,
+ is SelectLoginPrompt,
+ is SelectCreditCard,
+ is SaveCreditCard,
+ is SelectAddress,
+ is Share,
+ is PromptRequest.IdentityCredential.SelectProvider,
+ is PromptRequest.IdentityCredential.SelectAccount,
+ is PromptRequest.IdentityCredential.PrivacyPolicy,
+ -> true
+
+ is Alert, is TextPrompt, is Confirm, is Repost, is Popup -> promptAbuserDetector.shouldShowMoreDialogs
+ }
+ }
+
+ /**
+ * Dismisses the select prompts if they are active and visible.
+ *
+ * @returns true if a select prompt was dismissed, otherwise false.
+ */
+ @VisibleForTesting
+ fun dismissSelectPrompts(): Boolean {
+ var result = false
+
+ (activePromptRequest as? SelectLoginPrompt)?.let { selectLoginPrompt ->
+ loginPicker?.let { loginPicker ->
+ if (loginDelegate.loginPickerView?.asView()?.isVisible == true) {
+ loginPicker.dismissCurrentLoginSelect(selectLoginPrompt)
+ result = true
+ }
+ }
+ }
+
+ (activePromptRequest as? SelectCreditCard)?.let { selectCreditCardPrompt ->
+ creditCardPicker?.let { creditCardPicker ->
+ if (creditCardDelegate.creditCardPickerView?.asView()?.isVisible == true) {
+ creditCardPicker.dismissSelectCreditCardRequest(selectCreditCardPrompt)
+ result = true
+ }
+ }
+ }
+
+ (activePromptRequest as? SelectAddress)?.let { selectAddressPrompt ->
+ addressPicker?.let { addressPicker ->
+ if (addressDelegate.addressPickerView?.asView()?.isVisible == true) {
+ addressPicker.dismissSelectAddressRequest(selectAddressPrompt)
+ result = true
+ }
+ }
+ }
+
+ return result
+ }
+
+ companion object {
+ // The PIN request code
+ const val PIN_REQUEST = 303
+ }
+}
+
+/**
+ * Removes the [PromptRequest] indicated by [promptRequestUID] from the current Session if it it exists
+ * and offers a [consume] callback for other optional side effects.
+ *
+ * @param sessionId Session id of the tab or custom tab in which to try consuming [PromptRequests].
+ * If the id is not provided or a tab with that id is not found the method will act on the current tab.
+ * @param promptRequestUID Id of the [PromptRequest] to be consumed.
+ * @param activePrompt The current active Prompt if known. If provided it will always be cleared,
+ * irrespective of if [PromptRequest] indicated by [promptRequestUID] is found and removed or not.
+ * @param consume callback with the [PromptRequest] if found, before being removed from the Session.
+ */
+internal fun BrowserStore.consumePromptFrom(
+ sessionId: String?,
+ promptRequestUID: String,
+ activePrompt: WeakReference<PromptDialogFragment>? = null,
+ consume: (PromptRequest) -> Unit,
+) {
+ state.findTabOrCustomTabOrSelectedTab(sessionId)?.let { tab ->
+ activePrompt?.clear()
+ tab.content.promptRequests.firstOrNull { it.uid == promptRequestUID }?.let {
+ consume(it)
+ dispatch(ContentAction.ConsumePromptRequestAction(tab.id, it))
+ }
+ }
+}
+
+/**
+ * Removes the most recent [PromptRequest] of type [P] from the current Session if it it exists
+ * and offers a [consume] callback for other optional side effects.
+ *
+ * @param sessionId Session id of the tab or custom tab in which to try consuming [PromptRequests].
+ * If the id is not provided or a tab with that id is not found the method will act on the current tab.
+ * @param activePrompt The current active Prompt if known. If provided it will always be cleared,
+ * irrespective of if [PromptRequest] indicated by [promptRequestUID] is found and removed or not.
+ * @param consume callback with the [PromptRequest] if found, before being removed from the Session.
+ */
+internal inline fun <reified P : PromptRequest> BrowserStore.consumePromptFrom(
+ sessionId: String?,
+ activePrompt: WeakReference<PromptDialogFragment>? = null,
+ consume: (P) -> Unit,
+) {
+ state.findTabOrCustomTabOrSelectedTab(sessionId)?.let { tab ->
+ activePrompt?.clear()
+ tab.content.promptRequests.lastOrNull { it is P }?.let {
+ consume(it as P)
+ dispatch(ContentAction.ConsumePromptRequestAction(tab.id, it))
+ }
+ }
+}
+
+/**
+ * Filters and removes all [PromptRequest]s from the current Session if it it exists
+ * and offers a [consume] callback for other optional side effects on each filtered [PromptRequest].
+ *
+ * @param sessionId Session id of the tab or custom tab in which to try consuming [PromptRequests].
+ * If the id is not provided or a tab with that id is not found the method will act on the current tab.
+ * @param activePrompt The current active Prompt if known. If provided it will always be cleared,
+ * irrespective of if [PromptRequest] indicated by [promptRequestUID] is found and removed or not.
+ * @param predicate function allowing matching only specific [PromptRequest]s from all contained in the Session.
+ * @param consume callback with the [PromptRequest] if found, before being removed from the Session.
+ */
+internal fun BrowserStore.consumeAllSessionPrompts(
+ sessionId: String?,
+ activePrompt: WeakReference<PromptDialogFragment>? = null,
+ predicate: (PromptRequest) -> Boolean,
+ consume: (PromptRequest) -> Unit = { },
+) {
+ state.findTabOrCustomTabOrSelectedTab(sessionId)?.let { tab ->
+ activePrompt?.clear()
+ tab.content.promptRequests
+ .filter { predicate(it) }
+ .forEach {
+ consume(it)
+ dispatch(ContentAction.ConsumePromptRequestAction(tab.id, it))
+ }
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/PromptMiddleware.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/PromptMiddleware.kt
new file mode 100644
index 0000000000..5c0d3fe6cb
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/PromptMiddleware.kt
@@ -0,0 +1,59 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts
+
+import kotlinx.coroutines.MainScope
+import kotlinx.coroutines.launch
+import mozilla.components.browser.state.action.BrowserAction
+import mozilla.components.browser.state.action.ContentAction
+import mozilla.components.browser.state.selector.findTab
+import mozilla.components.browser.state.state.BrowserState
+import mozilla.components.concept.engine.prompt.PromptRequest
+import mozilla.components.lib.state.Middleware
+import mozilla.components.lib.state.MiddlewareContext
+
+/**
+ * [Middleware] implementation for managing [PromptRequest]s.
+ */
+class PromptMiddleware : Middleware<BrowserState, BrowserAction> {
+
+ private val scope = MainScope()
+
+ override fun invoke(
+ context: MiddlewareContext<BrowserState, BrowserAction>,
+ next: (BrowserAction) -> Unit,
+ action: BrowserAction,
+ ) {
+ when (action) {
+ is ContentAction.UpdatePromptRequestAction -> {
+ if (shouldBlockPrompt(action, context)) {
+ return
+ }
+ }
+ else -> {
+ // no-op
+ }
+ }
+
+ next(action)
+ }
+
+ private fun shouldBlockPrompt(
+ action: ContentAction.UpdatePromptRequestAction,
+ context: MiddlewareContext<BrowserState, BrowserAction>,
+ ): Boolean {
+ if (action.promptRequest is PromptRequest.Popup) {
+ context.state.findTab(action.sessionId)?.let {
+ if (it.content.promptRequests.lastOrNull { prompt -> prompt is PromptRequest.Popup } != null) {
+ scope.launch {
+ (action.promptRequest as PromptRequest.Popup).onDeny()
+ }
+ return true
+ }
+ }
+ }
+ return false
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/address/AddressAdapter.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/address/AddressAdapter.kt
new file mode 100644
index 0000000000..055d231d1d
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/address/AddressAdapter.kt
@@ -0,0 +1,68 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.address
+
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.annotation.VisibleForTesting
+import androidx.recyclerview.widget.DiffUtil
+import androidx.recyclerview.widget.ListAdapter
+import androidx.recyclerview.widget.RecyclerView
+import mozilla.components.concept.storage.Address
+import mozilla.components.feature.prompts.R
+
+@VisibleForTesting
+internal object AddressDiffCallback : DiffUtil.ItemCallback<Address>() {
+ override fun areItemsTheSame(oldItem: Address, newItem: Address) =
+ oldItem.guid == newItem.guid
+
+ override fun areContentsTheSame(oldItem: Address, newItem: Address) =
+ oldItem == newItem
+}
+
+/**
+ * RecyclerView adapter for displaying address items.
+ */
+internal class AddressAdapter(
+ private val onAddressSelected: (Address) -> Unit,
+) : ListAdapter<Address, AddressViewHolder>(AddressDiffCallback) {
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AddressViewHolder {
+ val view = LayoutInflater
+ .from(parent.context)
+ .inflate(R.layout.mozac_feature_prompts_address_list_item, parent, false)
+ return AddressViewHolder(view, onAddressSelected)
+ }
+
+ override fun onBindViewHolder(holder: AddressViewHolder, position: Int) {
+ holder.bind(getItem(position))
+ }
+}
+
+/**
+ * View holder for a address item.
+ */
+@VisibleForTesting
+internal class AddressViewHolder(
+ itemView: View,
+ private val onAddressSelected: (Address) -> Unit,
+) : RecyclerView.ViewHolder(itemView), View.OnClickListener {
+ @VisibleForTesting
+ lateinit var address: Address
+
+ init {
+ itemView.setOnClickListener(this)
+ }
+
+ fun bind(address: Address) {
+ this.address = address
+ itemView.findViewById<TextView>(R.id.address_name)?.text = address.addressLabel
+ }
+
+ override fun onClick(v: View?) {
+ onAddressSelected(address)
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/address/AddressDelegate.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/address/AddressDelegate.kt
new file mode 100644
index 0000000000..00838b8965
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/address/AddressDelegate.kt
@@ -0,0 +1,33 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.address
+
+import mozilla.components.concept.storage.Address
+import mozilla.components.feature.prompts.concept.SelectablePromptView
+
+/**
+ * Delegate for address picker
+ */
+interface AddressDelegate {
+ /**
+ * The [SelectablePromptView] used for [AddressPicker] to display a
+ * selectable prompt list of address options.
+ */
+ val addressPickerView: SelectablePromptView<Address>?
+
+ /**
+ * Callback invoked when the user clicks "Manage addresses" from
+ * select address prompt.
+ */
+ val onManageAddresses: () -> Unit
+}
+
+/**
+ * Default implementation for address picker delegate
+ */
+class DefaultAddressDelegate(
+ override val addressPickerView: SelectablePromptView<Address>? = null,
+ override val onManageAddresses: () -> Unit = {},
+) : AddressDelegate
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/address/AddressPicker.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/address/AddressPicker.kt
new file mode 100644
index 0000000000..b1be8ac212
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/address/AddressPicker.kt
@@ -0,0 +1,89 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.address
+
+import mozilla.components.browser.state.action.ContentAction
+import mozilla.components.browser.state.store.BrowserStore
+import mozilla.components.concept.engine.prompt.PromptRequest
+import mozilla.components.concept.storage.Address
+import mozilla.components.feature.prompts.concept.SelectablePromptView
+import mozilla.components.feature.prompts.consumePromptFrom
+import mozilla.components.feature.prompts.facts.emitAddressAutofillDismissedFact
+import mozilla.components.feature.prompts.facts.emitAddressAutofillShownFact
+import mozilla.components.support.base.log.logger.Logger
+
+/**
+ * Interactor that implements [SelectablePromptView.Listener] and notifies the feature about actions
+ * the user performed in the address picker.
+ *
+ * @property store The [BrowserStore] this feature should subscribe to.
+ * @property addressSelectBar The [SelectablePromptView] view into which the select address
+ * prompt will be inflated.
+ * @property onManageAddresses Callback invoked when user clicks on "Manage adresses" button from
+ * select address prompt.
+ * @property sessionId The session ID which requested the prompt.
+ */
+class AddressPicker(
+ private val store: BrowserStore,
+ private val addressSelectBar: SelectablePromptView<Address>,
+ private val onManageAddresses: () -> Unit = {},
+ private var sessionId: String? = null,
+) : SelectablePromptView.Listener<Address> {
+
+ init {
+ addressSelectBar.listener = this
+ }
+
+ /**
+ * Shows the select address prompt in response to the [PromptRequest] event.
+ *
+ * @param request The [PromptRequest] containing the the address request data to be shown.
+ */
+ internal fun handleSelectAddressRequest(request: PromptRequest.SelectAddress) {
+ emitAddressAutofillShownFact()
+ addressSelectBar.showPrompt(request.addresses)
+ }
+
+ /**
+ * Dismisses the active [PromptRequest.SelectAddress] request.
+ *
+ * @param promptRequest The current active [PromptRequest.SelectAddress] or null
+ * otherwise.
+ */
+ @Suppress("TooGenericExceptionCaught")
+ fun dismissSelectAddressRequest(promptRequest: PromptRequest.SelectAddress? = null) {
+ emitAddressAutofillDismissedFact()
+ addressSelectBar.hidePrompt()
+
+ try {
+ if (promptRequest != null) {
+ promptRequest.onDismiss()
+ sessionId?.let {
+ store.dispatch(ContentAction.ConsumePromptRequestAction(it, promptRequest))
+ }
+ return
+ }
+
+ store.consumePromptFrom<PromptRequest.SelectAddress>(sessionId) {
+ it.onDismiss()
+ }
+ } catch (e: RuntimeException) {
+ Logger.error("Can't dismiss select address prompt", e)
+ }
+ }
+
+ override fun onOptionSelect(option: Address) {
+ store.consumePromptFrom<PromptRequest.SelectAddress>(sessionId) {
+ it.onConfirm(option)
+ }
+
+ addressSelectBar.hidePrompt()
+ }
+
+ override fun onManageOptions() {
+ onManageAddresses.invoke()
+ dismissSelectAddressRequest()
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/address/AddressSelectBar.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/address/AddressSelectBar.kt
new file mode 100644
index 0000000000..693b2cde34
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/address/AddressSelectBar.kt
@@ -0,0 +1,151 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.address
+
+import android.content.Context
+import android.content.res.ColorStateList
+import android.util.AttributeSet
+import android.view.View
+import androidx.appcompat.widget.AppCompatImageView
+import androidx.appcompat.widget.AppCompatTextView
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.core.content.withStyledAttributes
+import androidx.core.view.isVisible
+import androidx.core.widget.ImageViewCompat
+import androidx.core.widget.TextViewCompat
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import mozilla.components.concept.storage.Address
+import mozilla.components.feature.prompts.R
+import mozilla.components.feature.prompts.concept.SelectablePromptView
+import mozilla.components.feature.prompts.facts.emitAddressAutofillExpandedFact
+import mozilla.components.feature.prompts.facts.emitSuccessfulAddressAutofillSuccessFact
+import mozilla.components.support.ktx.android.view.hideKeyboard
+
+/**
+ * A customizable "Select addresses" bar implementing [SelectablePromptView].
+ */
+class AddressSelectBar @JvmOverloads constructor(
+ context: Context,
+ attrs: AttributeSet? = null,
+ defStyleAttr: Int = 0,
+) : ConstraintLayout(context, attrs, defStyleAttr), SelectablePromptView<Address> {
+
+ private var view: View? = null
+ private var recyclerView: RecyclerView? = null
+ private var headerView: AppCompatTextView? = null
+ private var expanderView: AppCompatImageView? = null
+ private var manageAddressesView: AppCompatTextView? = null
+ private var headerTextStyle: Int? = null
+
+ private val listAdapter = AddressAdapter { address ->
+ listener?.apply {
+ onOptionSelect(address)
+ emitSuccessfulAddressAutofillSuccessFact()
+ }
+ }
+
+ override var listener: SelectablePromptView.Listener<Address>? = null
+
+ init {
+ context.withStyledAttributes(
+ attrs,
+ R.styleable.AddressSelectBar,
+ defStyleAttr,
+ 0,
+ ) {
+ val textStyle =
+ getResourceId(
+ R.styleable.AddressSelectBar_mozacSelectAddressHeaderTextStyle,
+ 0,
+ )
+
+ if (textStyle > 0) {
+ headerTextStyle = textStyle
+ }
+ }
+ }
+
+ override fun hidePrompt() {
+ this.isVisible = false
+ recyclerView?.isVisible = false
+ manageAddressesView?.isVisible = false
+
+ listAdapter.submitList(null)
+
+ toggleSelectAddressHeader(shouldExpand = false)
+ }
+
+ override fun showPrompt(options: List<Address>) {
+ if (view == null) {
+ view = View.inflate(context, LAYOUT_ID, this)
+ bindViews()
+ }
+
+ listAdapter.submitList(options)
+ view?.isVisible = true
+ }
+
+ private fun bindViews() {
+ recyclerView = findViewById<RecyclerView>(R.id.address_list).apply {
+ layoutManager = LinearLayoutManager(context, RecyclerView.VERTICAL, false)
+ adapter = listAdapter
+ }
+
+ headerView = findViewById<AppCompatTextView>(R.id.select_address_header).apply {
+ setOnClickListener {
+ toggleSelectAddressHeader(shouldExpand = recyclerView?.isVisible != true)
+ }
+
+ headerTextStyle?.let { appearance ->
+ TextViewCompat.setTextAppearance(this, appearance)
+ currentTextColor.let { color ->
+ TextViewCompat.setCompoundDrawableTintList(this, ColorStateList.valueOf(color))
+ }
+ }
+ }
+
+ expanderView =
+ findViewById<AppCompatImageView>(R.id.mozac_feature_address_expander).apply {
+ headerView?.currentTextColor?.let {
+ ImageViewCompat.setImageTintList(this, ColorStateList.valueOf(it))
+ }
+ }
+
+ manageAddressesView = findViewById<AppCompatTextView>(R.id.manage_addresses).apply {
+ setOnClickListener {
+ listener?.onManageOptions()
+ }
+ }
+ }
+
+ /**
+ * Toggles the visibility of the list of address items in the prompt.
+ *
+ * @param shouldExpand True if the list of addresses should be displayed, false otherwise.
+ */
+ private fun toggleSelectAddressHeader(shouldExpand: Boolean) {
+ recyclerView?.isVisible = shouldExpand
+ manageAddressesView?.isVisible = shouldExpand
+
+ if (shouldExpand) {
+ emitAddressAutofillExpandedFact()
+ view?.hideKeyboard()
+ expanderView?.rotation = ROTATE_180
+ headerView?.contentDescription =
+ context.getString(R.string.mozac_feature_prompts_collapse_address_content_description_2)
+ } else {
+ expanderView?.rotation = 0F
+ headerView?.contentDescription =
+ context.getString(R.string.mozac_feature_prompts_expand_address_content_description_2)
+ }
+ }
+
+ companion object {
+ val LAYOUT_ID = R.layout.mozac_feature_prompts_address_select_prompt
+
+ private const val ROTATE_180 = 180F
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/concept/PasswordPromptView.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/concept/PasswordPromptView.kt
new file mode 100644
index 0000000000..71dd678d09
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/concept/PasswordPromptView.kt
@@ -0,0 +1,42 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.concept
+
+/**
+ * An interface for views that can display a generated strong password prompt.
+ */
+interface PasswordPromptView {
+
+ var listener: Listener?
+
+ /**
+ * Shows a simple prompt with the given [generatedPassword].
+ */
+ fun showPrompt(
+ generatedPassword: String,
+ url: String,
+ onSaveLoginWithStrongPassword: (url: String, password: String) -> Unit,
+ )
+
+ /**
+ * Hides the prompt.
+ */
+ fun hidePrompt()
+
+ /**
+ * Interface to allow a class to listen to generated strong password event events.
+ */
+ interface Listener {
+ /**
+ * Called when a user wants to use a strong generated password.
+ *
+ */
+ fun onUseGeneratedPassword(
+ generatedPassword: String,
+ url: String,
+ onSaveLoginWithStrongPassword: (url: String, password: String) -> Unit,
+ )
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/concept/SelectablePromptView.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/concept/SelectablePromptView.kt
new file mode 100644
index 0000000000..0db9a256a0
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/concept/SelectablePromptView.kt
@@ -0,0 +1,49 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.concept
+
+import android.view.View
+
+/**
+ * An interface for views that can display an option selection prompt.
+ */
+interface SelectablePromptView<T> {
+
+ var listener: Listener<T>?
+
+ /**
+ * Shows an option selection prompt with the provided options.
+ *
+ * @param options A list of options to display in the prompt.
+ */
+ fun showPrompt(options: List<T>)
+
+ /**
+ * Hides the option selection prompt.
+ */
+ fun hidePrompt()
+
+ /**
+ * Casts this [SelectablePromptView] interface to an Android [View] object.
+ */
+ fun asView(): View = (this as View)
+
+ /**
+ * Interface to allow a class to listen to the option selection prompt events.
+ */
+ interface Listener<in T> {
+ /**
+ * Called when an user selects an options from the prompt.
+ *
+ * @param option The selected option.
+ */
+ fun onOptionSelect(option: T)
+
+ /**
+ * Called when the user invokes the option to manage the list of options.
+ */
+ fun onManageOptions()
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/creditcard/CreditCardDelegate.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/creditcard/CreditCardDelegate.kt
new file mode 100644
index 0000000000..9723d0d521
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/creditcard/CreditCardDelegate.kt
@@ -0,0 +1,34 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.creditcard
+
+import mozilla.components.concept.storage.CreditCardEntry
+import mozilla.components.feature.prompts.concept.SelectablePromptView
+
+/**
+ * Delegate for credit card picker and related callbacks
+ */
+interface CreditCardDelegate {
+ /**
+ * The [SelectablePromptView] used for [CreditCardPicker] to display a
+ * selectable prompt list of credit cards.
+ */
+ val creditCardPickerView: SelectablePromptView<CreditCardEntry>?
+ get() = null
+
+ /**
+ * Callback invoked when a user selects "Manage credit cards"
+ * from the select credit card prompt.
+ */
+ val onManageCreditCards: () -> Unit
+ get() = {}
+
+ /**
+ * Callback invoked when a user selects a credit card option
+ * from the select credit card prompt
+ */
+ val onSelectCreditCard: () -> Unit
+ get() = {}
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/creditcard/CreditCardItemViewHolder.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/creditcard/CreditCardItemViewHolder.kt
new file mode 100644
index 0000000000..0c79c37086
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/creditcard/CreditCardItemViewHolder.kt
@@ -0,0 +1,48 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.creditcard
+
+import android.view.View
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import mozilla.components.concept.storage.CreditCardEntry
+import mozilla.components.feature.prompts.R
+import mozilla.components.support.utils.creditCardIssuerNetwork
+
+/**
+ * View holder for displaying a credit card item.
+ *
+ * @param onCreditCardSelected Callback invoked when a credit card item is selected.
+ */
+class CreditCardItemViewHolder(
+ view: View,
+ private val onCreditCardSelected: (CreditCardEntry) -> Unit,
+) : RecyclerView.ViewHolder(view) {
+
+ /**
+ * Binds the view with the provided [CreditCardEntry].
+ *
+ * @param creditCard The [CreditCardEntry] to display.
+ */
+ fun bind(creditCard: CreditCardEntry) {
+ itemView.findViewById<ImageView>(R.id.credit_card_logo)
+ .setImageResource(creditCard.cardType.creditCardIssuerNetwork().icon)
+
+ itemView.findViewById<TextView>(R.id.credit_card_number).text =
+ creditCard.obfuscatedCardNumber
+
+ itemView.findViewById<TextView>(R.id.credit_card_expiration_date).text =
+ creditCard.expiryDate
+
+ itemView.setOnClickListener {
+ onCreditCardSelected(creditCard)
+ }
+ }
+
+ companion object {
+ val LAYOUT_ID = R.layout.mozac_feature_prompts_credit_card_list_item
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/creditcard/CreditCardPicker.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/creditcard/CreditCardPicker.kt
new file mode 100644
index 0000000000..f6fd58d17c
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/creditcard/CreditCardPicker.kt
@@ -0,0 +1,119 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.creditcard
+
+import androidx.annotation.VisibleForTesting
+import mozilla.components.browser.state.action.ContentAction
+import mozilla.components.browser.state.store.BrowserStore
+import mozilla.components.concept.engine.prompt.PromptRequest
+import mozilla.components.concept.storage.CreditCardEntry
+import mozilla.components.feature.prompts.concept.SelectablePromptView
+import mozilla.components.feature.prompts.consumePromptFrom
+import mozilla.components.feature.prompts.facts.emitCreditCardAutofillDismissedFact
+import mozilla.components.feature.prompts.facts.emitCreditCardAutofillShownFact
+import mozilla.components.support.base.log.logger.Logger
+
+/**
+ * Interactor that implements [SelectablePromptView.Listener] and notifies the feature about actions
+ * the user performed in the credit card picker.
+ *
+ * @property store The [BrowserStore] this feature should subscribe to.
+ * @property creditCardSelectBar The [SelectablePromptView] view into which the select credit card
+ * prompt will be inflated.
+ * @property manageCreditCardsCallback A callback invoked when a user selects "Manage credit cards"
+ * from the select credit card prompt.
+ * @property selectCreditCardCallback A callback invoked when a user selects a credit card option
+ * from the select credit card prompt
+ * @property sessionId The session ID which requested the prompt.
+ */
+class CreditCardPicker(
+ private val store: BrowserStore,
+ private val creditCardSelectBar: SelectablePromptView<CreditCardEntry>,
+ private val manageCreditCardsCallback: () -> Unit = {},
+ private val selectCreditCardCallback: () -> Unit = {},
+ private var sessionId: String? = null,
+) : SelectablePromptView.Listener<CreditCardEntry> {
+
+ init {
+ creditCardSelectBar.listener = this
+ }
+
+ // The selected credit card option to confirm.
+ @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+ internal var selectedCreditCard: CreditCardEntry? = null
+
+ override fun onManageOptions() {
+ manageCreditCardsCallback.invoke()
+ dismissSelectCreditCardRequest()
+ }
+
+ override fun onOptionSelect(option: CreditCardEntry) {
+ selectedCreditCard = option
+ creditCardSelectBar.hidePrompt()
+ selectCreditCardCallback.invoke()
+ }
+
+ /**
+ * Called on a successful authentication to confirm the selected credit card option.
+ */
+ fun onAuthSuccess() {
+ store.consumePromptFrom<PromptRequest.SelectCreditCard>(sessionId) {
+ selectedCreditCard?.let { creditCard ->
+ it.onConfirm(creditCard)
+ }
+
+ selectedCreditCard = null
+ }
+ }
+
+ /**
+ * Called on a failed authentication to dismiss the current select credit card prompt request.
+ */
+ fun onAuthFailure() {
+ selectedCreditCard = null
+
+ store.consumePromptFrom<PromptRequest.SelectCreditCard>(sessionId) {
+ it.onDismiss()
+ }
+ }
+
+ /**
+ * Dismisses the active select credit card request.
+ *
+ * @param promptRequest The current active [PromptRequest.SelectCreditCard] or null
+ * otherwise.
+ */
+ @Suppress("TooGenericExceptionCaught")
+ fun dismissSelectCreditCardRequest(promptRequest: PromptRequest.SelectCreditCard? = null) {
+ emitCreditCardAutofillDismissedFact()
+ creditCardSelectBar.hidePrompt()
+
+ try {
+ if (promptRequest != null) {
+ promptRequest.onDismiss()
+ sessionId?.let {
+ store.dispatch(ContentAction.ConsumePromptRequestAction(it, promptRequest))
+ }
+ return
+ }
+
+ store.consumePromptFrom<PromptRequest.SelectCreditCard>(sessionId) {
+ it.onDismiss()
+ }
+ } catch (e: RuntimeException) {
+ Logger.error("Can't dismiss this select credit card prompt", e)
+ }
+ }
+
+ /**
+ * Shows the select credit card prompt in response to the [PromptRequest] event.
+ *
+ * @param request The [PromptRequest] containing the the credit card request data to be shown.
+ */
+ internal fun handleSelectCreditCardRequest(request: PromptRequest.SelectCreditCard) {
+ emitCreditCardAutofillShownFact()
+ creditCardSelectBar.showPrompt(request.creditCards)
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/creditcard/CreditCardSaveDialogFragment.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/creditcard/CreditCardSaveDialogFragment.kt
new file mode 100644
index 0000000000..d5c5b64518
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/creditcard/CreditCardSaveDialogFragment.kt
@@ -0,0 +1,210 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.creditcard
+
+import android.app.Dialog
+import android.content.DialogInterface
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.Button
+import android.widget.FrameLayout
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.annotation.VisibleForTesting
+import androidx.appcompat.widget.AppCompatTextView
+import androidx.core.view.isVisible
+import com.google.android.material.bottomsheet.BottomSheetBehavior
+import com.google.android.material.bottomsheet.BottomSheetDialog
+import kotlinx.coroutines.Dispatchers.IO
+import kotlinx.coroutines.Dispatchers.Main
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
+import mozilla.components.concept.storage.CreditCardEntry
+import mozilla.components.concept.storage.CreditCardValidationDelegate.Result
+import mozilla.components.feature.prompts.R
+import mozilla.components.feature.prompts.dialog.KEY_PROMPT_UID
+import mozilla.components.feature.prompts.dialog.KEY_SESSION_ID
+import mozilla.components.feature.prompts.dialog.KEY_SHOULD_DISMISS_ON_LOAD
+import mozilla.components.feature.prompts.dialog.PromptDialogFragment
+import mozilla.components.feature.prompts.facts.emitCreditCardAutofillCreatedFact
+import mozilla.components.feature.prompts.facts.emitCreditCardAutofillUpdatedFact
+import mozilla.components.support.ktx.android.content.appName
+import mozilla.components.support.ktx.android.view.toScope
+import mozilla.components.support.utils.creditCardIssuerNetwork
+import mozilla.components.support.utils.ext.getParcelableCompat
+
+private const val KEY_CREDIT_CARD = "KEY_CREDIT_CARD"
+
+/**
+ * [android.support.v4.app.DialogFragment] implementation to display a dialog that allows
+ * user to save a new credit card or update an existing credit card.
+ */
+internal class CreditCardSaveDialogFragment : PromptDialogFragment() {
+
+ @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+ internal val creditCard by lazy {
+ safeArguments.getParcelableCompat(KEY_CREDIT_CARD, CreditCardEntry::class.java)!!
+ }
+
+ @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+ internal var confirmResult: Result = Result.CanBeCreated
+
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+ return BottomSheetDialog(requireContext(), R.style.MozDialogStyle).apply {
+ setCancelable(true)
+ setOnShowListener {
+ val bottomSheet =
+ findViewById<View>(com.google.android.material.R.id.design_bottom_sheet) as FrameLayout
+ val behavior = BottomSheetBehavior.from(bottomSheet)
+ behavior.state = BottomSheetBehavior.STATE_EXPANDED
+ }
+ }
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?,
+ ): View {
+ return LayoutInflater.from(requireContext()).inflate(
+ R.layout.mozac_feature_prompt_save_credit_card_prompt,
+ container,
+ false,
+ )
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ view.findViewById<ImageView>(R.id.credit_card_logo)
+ .setImageResource(creditCard.cardType.creditCardIssuerNetwork().icon)
+
+ view.findViewById<TextView>(R.id.save_credit_card_message).text =
+ getString(
+ R.string.mozac_feature_prompts_save_credit_card_prompt_body_2,
+ context?.appName,
+ )
+
+ view.findViewById<TextView>(R.id.credit_card_number).text = creditCard.obfuscatedCardNumber
+ view.findViewById<TextView>(R.id.credit_card_expiration_date).text = creditCard.expiryDate
+
+ view.findViewById<Button>(R.id.save_confirm).setOnClickListener {
+ feature?.onConfirm(
+ sessionId = sessionId,
+ promptRequestUID = promptRequestUID,
+ value = creditCard,
+ )
+ dismiss()
+ emitSaveUpdateFact()
+ }
+
+ view.findViewById<Button>(R.id.save_cancel).setOnClickListener {
+ feature?.onCancel(
+ sessionId = sessionId,
+ promptRequestUID = promptRequestUID,
+ )
+ dismiss()
+ }
+
+ updateUI(view)
+ }
+
+ /**
+ * Emit the save or update fact based on the confirm action for the credit card.
+ */
+ @VisibleForTesting
+ internal fun emitSaveUpdateFact() {
+ when (confirmResult) {
+ is Result.CanBeCreated -> {
+ emitCreditCardAutofillCreatedFact()
+ }
+ is Result.CanBeUpdated -> {
+ emitCreditCardAutofillUpdatedFact()
+ }
+ }
+ }
+
+ override fun onCancel(dialog: DialogInterface) {
+ super.onCancel(dialog)
+ feature?.onCancel(
+ sessionId = sessionId,
+ promptRequestUID = promptRequestUID,
+ )
+ }
+
+ /**
+ * Updates the dialog based on whether a save or update credit card state should be displayed.
+ */
+ private fun updateUI(view: View) = view.toScope().launch(IO) {
+ val validationDelegate = feature?.creditCardValidationDelegate ?: return@launch
+ confirmResult = validationDelegate.shouldCreateOrUpdate(creditCard)
+
+ withContext(Main) {
+ when (confirmResult) {
+ is Result.CanBeCreated -> setViewText(
+ view = view,
+ header = requireContext().getString(R.string.mozac_feature_prompts_save_credit_card_prompt_title),
+ cancelButtonText = requireContext().getString(R.string.mozac_feature_prompt_not_now),
+ confirmButtonText = requireContext().getString(R.string.mozac_feature_prompt_save_confirmation),
+ )
+ is Result.CanBeUpdated -> setViewText(
+ view = view,
+ header = requireContext().getString(R.string.mozac_feature_prompts_update_credit_card_prompt_title),
+ cancelButtonText = requireContext().getString(R.string.mozac_feature_prompts_cancel),
+ confirmButtonText = requireContext().getString(R.string.mozac_feature_prompt_update_confirmation),
+ showMessageBody = false,
+ )
+ }
+ }
+ }
+
+ /**
+ * Updates the header and button text in the dialog.
+ *
+ * @param view The view associated with the dialog.
+ * @param header The header text to be displayed.
+ * @param cancelButtonText The cancel button text to be displayed.
+ * @param confirmButtonText The confirm button text to be displayed.
+ * @param showMessageBody Whether or not to show the dialog message body text.
+ */
+ @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+ internal fun setViewText(
+ view: View,
+ header: String,
+ cancelButtonText: String,
+ confirmButtonText: String,
+ showMessageBody: Boolean = true,
+ ) {
+ view.findViewById<AppCompatTextView>(R.id.save_credit_card_message).isVisible =
+ showMessageBody
+ view.findViewById<AppCompatTextView>(R.id.save_credit_card_header).text = header
+ view.findViewById<Button>(R.id.save_cancel).text = cancelButtonText
+ view.findViewById<Button>(R.id.save_confirm).text = confirmButtonText
+ }
+
+ companion object {
+ fun newInstance(
+ sessionId: String,
+ promptRequestUID: String,
+ shouldDismissOnLoad: Boolean,
+ creditCard: CreditCardEntry,
+ ): CreditCardSaveDialogFragment {
+ val fragment = CreditCardSaveDialogFragment()
+ val arguments = fragment.arguments ?: Bundle()
+
+ with(arguments) {
+ putString(KEY_SESSION_ID, sessionId)
+ putString(KEY_PROMPT_UID, promptRequestUID)
+ putBoolean(KEY_SHOULD_DISMISS_ON_LOAD, shouldDismissOnLoad)
+ putParcelable(KEY_CREDIT_CARD, creditCard)
+ }
+
+ fragment.arguments = arguments
+ return fragment
+ }
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/creditcard/CreditCardSelectBar.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/creditcard/CreditCardSelectBar.kt
new file mode 100644
index 0000000000..93fcdeeca0
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/creditcard/CreditCardSelectBar.kt
@@ -0,0 +1,152 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.creditcard
+
+import android.content.Context
+import android.content.res.ColorStateList
+import android.util.AttributeSet
+import android.view.View
+import androidx.appcompat.widget.AppCompatImageView
+import androidx.appcompat.widget.AppCompatTextView
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.core.content.withStyledAttributes
+import androidx.core.view.isVisible
+import androidx.core.widget.ImageViewCompat
+import androidx.core.widget.TextViewCompat
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import mozilla.components.concept.storage.CreditCardEntry
+import mozilla.components.feature.prompts.R
+import mozilla.components.feature.prompts.concept.SelectablePromptView
+import mozilla.components.feature.prompts.facts.emitCreditCardAutofillExpandedFact
+import mozilla.components.feature.prompts.facts.emitSuccessfulCreditCardAutofillSuccessFact
+import mozilla.components.support.ktx.android.view.hideKeyboard
+
+/**
+ * A customizable "Select credit card" bar implementing [SelectablePromptView].
+ */
+class CreditCardSelectBar @JvmOverloads constructor(
+ context: Context,
+ attrs: AttributeSet? = null,
+ defStyleAttr: Int = 0,
+) : ConstraintLayout(context, attrs, defStyleAttr), SelectablePromptView<CreditCardEntry> {
+
+ private var view: View? = null
+ private var recyclerView: RecyclerView? = null
+ private var headerView: AppCompatTextView? = null
+ private var expanderView: AppCompatImageView? = null
+ private var manageCreditCardsButtonView: AppCompatTextView? = null
+ private var headerTextStyle: Int? = null
+
+ private val listAdapter = CreditCardsAdapter { creditCard ->
+ listener?.apply {
+ onOptionSelect(creditCard)
+ emitSuccessfulCreditCardAutofillSuccessFact()
+ }
+ }
+
+ override var listener: SelectablePromptView.Listener<CreditCardEntry>? = null
+
+ init {
+ context.withStyledAttributes(
+ attrs,
+ R.styleable.CreditCardSelectBar,
+ defStyleAttr,
+ 0,
+ ) {
+ val textStyle =
+ getResourceId(
+ R.styleable.CreditCardSelectBar_mozacSelectCreditCardHeaderTextStyle,
+ 0,
+ )
+
+ if (textStyle > 0) {
+ headerTextStyle = textStyle
+ }
+ }
+ }
+
+ override fun hidePrompt() {
+ this.isVisible = false
+ recyclerView?.isVisible = false
+ manageCreditCardsButtonView?.isVisible = false
+
+ listAdapter.submitList(null)
+
+ toggleSelectCreditCardHeader(shouldExpand = false)
+ }
+
+ override fun showPrompt(options: List<CreditCardEntry>) {
+ if (view == null) {
+ view = View.inflate(context, LAYOUT_ID, this)
+ bindViews()
+ }
+
+ listAdapter.submitList(options)
+ view?.isVisible = true
+ }
+
+ private fun bindViews() {
+ recyclerView = findViewById<RecyclerView>(R.id.credit_cards_list).apply {
+ layoutManager = LinearLayoutManager(context, RecyclerView.VERTICAL, false)
+ adapter = listAdapter
+ }
+
+ headerView = findViewById<AppCompatTextView>(R.id.select_credit_card_header).apply {
+ setOnClickListener {
+ toggleSelectCreditCardHeader(shouldExpand = recyclerView?.isVisible != true)
+ }
+
+ headerTextStyle?.let {
+ TextViewCompat.setTextAppearance(this, it)
+ currentTextColor.let {
+ TextViewCompat.setCompoundDrawableTintList(this, ColorStateList.valueOf(it))
+ }
+ }
+ }
+
+ expanderView =
+ findViewById<AppCompatImageView>(R.id.mozac_feature_credit_cards_expander).apply {
+ headerView?.currentTextColor?.let {
+ ImageViewCompat.setImageTintList(this, ColorStateList.valueOf(it))
+ }
+ }
+
+ manageCreditCardsButtonView =
+ findViewById<AppCompatTextView>(R.id.manage_credit_cards).apply {
+ setOnClickListener {
+ listener?.onManageOptions()
+ }
+ }
+ }
+
+ /**
+ * Toggles the visibility of the list of credit cards in the prompt.
+ *
+ * @param shouldExpand True if the list of credit cards should be displayed, false otherwise.
+ */
+ private fun toggleSelectCreditCardHeader(shouldExpand: Boolean) {
+ recyclerView?.isVisible = shouldExpand
+ manageCreditCardsButtonView?.isVisible = shouldExpand
+
+ if (shouldExpand) {
+ view?.hideKeyboard()
+ expanderView?.rotation = ROTATE_180
+ headerView?.contentDescription =
+ context.getString(R.string.mozac_feature_prompts_collapse_credit_cards_content_description_2)
+ emitCreditCardAutofillExpandedFact()
+ } else {
+ expanderView?.rotation = 0F
+ headerView?.contentDescription =
+ context.getString(R.string.mozac_feature_prompts_expand_credit_cards_content_description_2)
+ }
+ }
+
+ companion object {
+ val LAYOUT_ID = R.layout.mozac_feature_prompts_credit_card_select_prompt
+
+ private const val ROTATE_180 = 180F
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/creditcard/CreditCardsAdapter.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/creditcard/CreditCardsAdapter.kt
new file mode 100644
index 0000000000..cfa7f4d265
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/creditcard/CreditCardsAdapter.kt
@@ -0,0 +1,39 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.creditcard
+
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import androidx.recyclerview.widget.DiffUtil
+import androidx.recyclerview.widget.ListAdapter
+import mozilla.components.concept.storage.CreditCardEntry
+
+/**
+ * Adapter for a list of credit cards to be displayed.
+ *
+ * @param onCreditCardSelected Callback invoked when a credit card item is selected.
+ */
+class CreditCardsAdapter(
+ private val onCreditCardSelected: (CreditCardEntry) -> Unit,
+) : ListAdapter<CreditCardEntry, CreditCardItemViewHolder>(DiffCallback) {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CreditCardItemViewHolder {
+ val view = LayoutInflater.from(parent.context)
+ .inflate(CreditCardItemViewHolder.LAYOUT_ID, parent, false)
+ return CreditCardItemViewHolder(view, onCreditCardSelected)
+ }
+
+ override fun onBindViewHolder(holder: CreditCardItemViewHolder, position: Int) {
+ holder.bind(getItem(position))
+ }
+
+ internal object DiffCallback : DiffUtil.ItemCallback<CreditCardEntry>() {
+ override fun areItemsTheSame(oldItem: CreditCardEntry, newItem: CreditCardEntry) =
+ oldItem.guid == newItem.guid
+
+ override fun areContentsTheSame(oldItem: CreditCardEntry, newItem: CreditCardEntry) =
+ oldItem == newItem
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/AbstractPromptTextDialogFragment.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/AbstractPromptTextDialogFragment.kt
new file mode 100644
index 0000000000..b1ee54fa98
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/AbstractPromptTextDialogFragment.kt
@@ -0,0 +1,72 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.dialog
+
+import android.annotation.SuppressLint
+import android.text.method.ScrollingMovementMethod
+import android.view.LayoutInflater
+import android.view.View
+import android.widget.CheckBox
+import android.widget.TextView
+import androidx.annotation.IdRes
+import androidx.appcompat.app.AlertDialog
+import androidx.core.view.isVisible
+import mozilla.components.feature.prompts.R
+
+internal const val KEY_MANY_ALERTS = "KEY_MANY_ALERTS"
+internal const val KEY_USER_CHECK_BOX = "KEY_USER_CHECK_BOX"
+
+/**
+ * An abstract alert for showing a text message plus a checkbox for handling [hasShownManyDialogs].
+ */
+internal abstract class AbstractPromptTextDialogFragment : PromptDialogFragment() {
+
+ /**
+ * Tells if a checkbox should be shown for preventing this [sessionId] from showing more dialogs.
+ */
+ internal val hasShownManyDialogs: Boolean by lazy { safeArguments.getBoolean(KEY_MANY_ALERTS) }
+
+ /**
+ * Stores the user's decision from the checkbox
+ * for preventing this [sessionId] from showing more dialogs.
+ */
+ internal var userSelectionNoMoreDialogs: Boolean
+ get() = safeArguments.getBoolean(KEY_USER_CHECK_BOX)
+ set(value) {
+ safeArguments.putBoolean(KEY_USER_CHECK_BOX, value)
+ }
+
+ /**
+ * Creates custom view that adds a [TextView] + [CheckBox] and attach the corresponding
+ * events for handling [hasShownManyDialogs].
+ */
+ @SuppressLint("InflateParams")
+ internal fun setCustomMessageView(builder: AlertDialog.Builder): AlertDialog.Builder {
+ val inflater = LayoutInflater.from(requireContext())
+ val view = inflater.inflate(R.layout.mozac_feature_prompt_with_check_box, null)
+ val textView = view.findViewById<TextView>(R.id.message)
+ textView.text = message
+ textView.movementMethod = ScrollingMovementMethod()
+
+ addCheckBoxIfNeeded(view)
+
+ builder.setView(view)
+
+ return builder
+ }
+
+ internal fun addCheckBoxIfNeeded(
+ view: View,
+ @IdRes id: Int = R.id.mozac_feature_prompts_no_more_dialogs_check_box,
+ ) {
+ if ((hasShownManyDialogs)) {
+ val checkBox = view.findViewById<CheckBox>(id)
+ checkBox.isVisible = true
+ checkBox.setOnCheckedChangeListener { _, isChecked ->
+ userSelectionNoMoreDialogs = isChecked
+ }
+ }
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/AlertDialogFragment.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/AlertDialogFragment.kt
new file mode 100644
index 0000000000..d14bb23047
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/AlertDialogFragment.kt
@@ -0,0 +1,80 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.dialog
+
+import android.app.Dialog
+import android.content.DialogInterface
+import android.os.Bundle
+import androidx.appcompat.app.AlertDialog
+import mozilla.components.ui.widgets.withCenterAlignedButtons
+
+/**
+ * [android.support.v4.app.DialogFragment] implementation to display web Alerts with native dialogs.
+ */
+internal class AlertDialogFragment : AbstractPromptTextDialogFragment() {
+
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+ val builder = AlertDialog.Builder(requireContext())
+ .setTitle(title)
+ .setCancelable(true)
+ .setPositiveButton(android.R.string.ok) { _, _ ->
+ onPositiveClickAction()
+ }
+ return setCustomMessageView(builder)
+ .create()
+ .withCenterAlignedButtons()
+ }
+
+ override fun onCancel(dialog: DialogInterface) {
+ super.onCancel(dialog)
+ feature?.onCancel(sessionId, promptRequestUID)
+ }
+
+ private fun onPositiveClickAction() {
+ if (!userSelectionNoMoreDialogs) {
+ feature?.onCancel(sessionId, promptRequestUID)
+ } else {
+ feature?.onConfirm(sessionId, promptRequestUID, userSelectionNoMoreDialogs)
+ }
+ }
+
+ companion object {
+ /**
+ * A builder method for creating a [AlertDialogFragment]
+ * @param sessionId to create the dialog.
+ * @param promptRequestUID identifier of the [PromptRequest] for which this dialog is shown.
+ * @param shouldDismissOnLoad whether or not the dialog should automatically be dismissed
+ * when a new page is loaded.
+ * @param title the title of the dialog.
+ * @param message the message of the dialog.
+ * @param hasShownManyDialogs tells if this [sessionId] has shown many dialogs
+ * in a short period of time, if is true a checkbox will be part of the dialog, for the user
+ * to choose if wants to prevent this [sessionId] continuing showing dialogs.
+ */
+ fun newInstance(
+ sessionId: String,
+ promptRequestUID: String,
+ shouldDismissOnLoad: Boolean,
+ title: String,
+ message: String,
+ hasShownManyDialogs: Boolean,
+ ): AlertDialogFragment {
+ val fragment = AlertDialogFragment()
+ val arguments = fragment.arguments ?: Bundle()
+
+ with(arguments) {
+ putString(KEY_SESSION_ID, sessionId)
+ putString(KEY_PROMPT_UID, promptRequestUID)
+ putBoolean(KEY_SHOULD_DISMISS_ON_LOAD, shouldDismissOnLoad)
+ putString(KEY_TITLE, title)
+ putString(KEY_MESSAGE, message)
+ putBoolean(KEY_MANY_ALERTS, hasShownManyDialogs)
+ }
+
+ fragment.arguments = arguments
+ return fragment
+ }
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/AuthenticationDialogFragment.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/AuthenticationDialogFragment.kt
new file mode 100644
index 0000000000..af9ccd3a9b
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/AuthenticationDialogFragment.kt
@@ -0,0 +1,189 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.dialog
+
+import android.annotation.SuppressLint
+import android.app.Dialog
+import android.content.DialogInterface
+import android.os.Bundle
+import android.text.Editable
+import android.text.TextWatcher
+import android.view.LayoutInflater
+import android.view.View
+import android.view.View.GONE
+import androidx.annotation.StringRes
+import androidx.annotation.VisibleForTesting
+import androidx.annotation.VisibleForTesting.Companion.PRIVATE
+import androidx.appcompat.app.AlertDialog
+import mozilla.components.feature.prompts.R
+import mozilla.components.ui.widgets.withCenterAlignedButtons
+
+private const val KEY_USERNAME_EDIT_TEXT = "KEY_USERNAME_EDIT_TEXT"
+private const val KEY_PASSWORD_EDIT_TEXT = "KEY_PASSWORD_EDIT_TEXT"
+private const val KEY_ONLY_SHOW_PASSWORD = "KEY_ONLY_SHOW_PASSWORD"
+private const val KEY_URL = "KEY_SESSION_URL"
+
+/**
+ * [android.support.v4.app.DialogFragment] implementation to display a
+ * <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication">authentication</a>
+ * dialog with native dialogs.
+ */
+internal class AuthenticationDialogFragment : PromptDialogFragment() {
+
+ internal val onlyShowPassword: Boolean by lazy { safeArguments.getBoolean(KEY_ONLY_SHOW_PASSWORD) }
+
+ private var url: String?
+ get() = safeArguments.getString(KEY_URL, null)
+ set(value) {
+ safeArguments.putString(KEY_URL, value)
+ }
+
+ internal var username: String
+ get() = safeArguments.getString(KEY_USERNAME_EDIT_TEXT, "")
+ set(value) {
+ safeArguments.putString(KEY_USERNAME_EDIT_TEXT, value)
+ }
+
+ internal var password: String
+ get() = safeArguments.getString(KEY_PASSWORD_EDIT_TEXT, "")
+ set(value) {
+ safeArguments.putString(KEY_PASSWORD_EDIT_TEXT, value)
+ }
+
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+ val builder = AlertDialog.Builder(requireContext())
+ .setupTitle()
+ .setMessage(message)
+ .setCancelable(true)
+ .setNegativeButton(R.string.mozac_feature_prompts_cancel) { _, _ ->
+ feature?.onCancel(sessionId, promptRequestUID)
+ }
+ .setPositiveButton(android.R.string.ok) { _, _ ->
+ onPositiveClickAction()
+ }
+ return addLayout(builder).create().withCenterAlignedButtons()
+ }
+
+ override fun onCancel(dialog: DialogInterface) {
+ super.onCancel(dialog)
+ feature?.onCancel(sessionId, promptRequestUID)
+ }
+
+ private fun onPositiveClickAction() {
+ feature?.onConfirm(sessionId, promptRequestUID, username to password)
+ }
+
+ @SuppressLint("InflateParams")
+ private fun addLayout(builder: AlertDialog.Builder): AlertDialog.Builder {
+ val inflater = LayoutInflater.from(requireContext())
+ val view = inflater.inflate(R.layout.mozac_feature_prompt_auth_prompt, null)
+
+ bindUsername(view)
+ bindPassword(view)
+
+ return builder.setView(view)
+ }
+
+ private fun bindUsername(view: View) {
+ // Username field uses the AutofillEditText so if the user focus is here, the autofill
+ // application can get the web domain info without searching through the view tree.
+ val usernameEditText = view.findViewById<AutofillEditText>(R.id.username)
+ usernameEditText.url = url
+
+ if (onlyShowPassword) {
+ usernameEditText.visibility = GONE
+ } else {
+ usernameEditText.setText(username)
+ usernameEditText.addTextChangedListener(
+ object : TextWatcher {
+ override fun afterTextChanged(editable: Editable) {
+ username = editable.toString()
+ }
+
+ override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) = Unit
+
+ override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) = Unit
+ },
+ )
+ }
+ }
+
+ private fun bindPassword(view: View) {
+ // Password field uses the AutofillEditText so if the user focus is here, the autofill
+ // application can get the web domain info without searching through the view tree.
+ val passwordEditText = view.findViewById<AutofillEditText>(R.id.password)
+ passwordEditText.url = url
+
+ passwordEditText.setText(password)
+ passwordEditText.addTextChangedListener(
+ object : TextWatcher {
+ override fun afterTextChanged(editable: Editable) {
+ password = editable.toString()
+ }
+
+ override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) = Unit
+
+ override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) = Unit
+ },
+ )
+ }
+
+ companion object {
+ /**
+ * A builder method for creating a [AuthenticationDialogFragment]
+ * @param sessionId the id of the session for which this dialog will be created.
+ * @param promptRequestUID identifier of the [PromptRequest] for which this dialog is shown.
+ * @param shouldDismissOnLoad whether or not the dialog should automatically be dismissed
+ * when a new page is loaded.
+ * @param title the title of the dialog.
+ * @param message the text that will go below title.
+ * @param username the default value of the username text field.
+ * @param password the default value of the password text field.
+ * @param onlyShowPassword indicates if the dialog should include an username text field.
+ */
+ @Suppress("LongParameterList")
+ fun newInstance(
+ sessionId: String,
+ promptRequestUID: String,
+ shouldDismissOnLoad: Boolean,
+ title: String,
+ message: String,
+ username: String,
+ password: String,
+ onlyShowPassword: Boolean,
+ url: String?,
+ ): AuthenticationDialogFragment {
+ val fragment = AuthenticationDialogFragment()
+ val arguments = fragment.arguments ?: Bundle()
+
+ with(arguments) {
+ putString(KEY_SESSION_ID, sessionId)
+ putString(KEY_PROMPT_UID, promptRequestUID)
+ putBoolean(KEY_SHOULD_DISMISS_ON_LOAD, shouldDismissOnLoad)
+ putString(KEY_TITLE, title)
+ putString(KEY_MESSAGE, message)
+ putBoolean(KEY_ONLY_SHOW_PASSWORD, onlyShowPassword)
+ putString(KEY_USERNAME_EDIT_TEXT, username)
+ putString(KEY_PASSWORD_EDIT_TEXT, password)
+ putString(KEY_URL, url)
+ }
+
+ fragment.arguments = arguments
+ return fragment
+ }
+
+ @StringRes
+ internal val DEFAULT_TITLE = R.string.mozac_feature_prompt_sign_in
+ }
+
+ @VisibleForTesting(otherwise = PRIVATE)
+ internal fun AlertDialog.Builder.setupTitle(): AlertDialog.Builder {
+ return if (title.isEmpty()) {
+ setTitle(DEFAULT_TITLE)
+ } else {
+ setTitle(title)
+ }
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/AutofillEditText.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/AutofillEditText.kt
new file mode 100644
index 0000000000..c094256f15
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/AutofillEditText.kt
@@ -0,0 +1,31 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package mozilla.components.feature.prompts.dialog
+
+import android.content.Context
+import android.os.Build
+import android.util.AttributeSet
+import android.view.ViewStructure
+import androidx.appcompat.widget.AppCompatEditText
+
+/**
+ * [androidx.appcompat.widget.AppCompatEditText] implementation to add WebDomain information which
+ * allows autofill applications to detect which URL is requesting the authentication info.
+ */
+internal class AutofillEditText : AppCompatEditText {
+ internal var url: String? = null
+
+ constructor (context: Context) : super(context)
+
+ constructor (context: Context, attrs: AttributeSet?) : super(context, attrs)
+
+ constructor (context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
+
+ override fun onProvideAutofillStructure(structure: ViewStructure?, flags: Int) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && url != null) {
+ structure?.setWebDomain(url)
+ }
+ super.onProvideAutofillStructure(structure, flags)
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/BasicColorAdapter.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/BasicColorAdapter.kt
new file mode 100644
index 0000000000..736ffde257
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/BasicColorAdapter.kt
@@ -0,0 +1,131 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.dialog
+
+import android.graphics.Color
+import android.graphics.Rect
+import android.graphics.drawable.Drawable
+import android.util.TypedValue
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.annotation.ColorInt
+import androidx.annotation.VisibleForTesting
+import androidx.core.content.ContextCompat
+import androidx.core.graphics.BlendModeColorFilterCompat.createBlendModeColorFilterCompat
+import androidx.core.graphics.BlendModeCompat
+import androidx.core.graphics.BlendModeCompat.SRC_IN
+import androidx.recyclerview.widget.DiffUtil
+import androidx.recyclerview.widget.ListAdapter
+import androidx.recyclerview.widget.RecyclerView
+import mozilla.components.feature.prompts.R
+import mozilla.components.support.utils.ColorUtils
+
+/**
+ * Represents an item in the [BasicColorAdapter] list.
+ *
+ * @property color color int that this item corresponds to.
+ * @property contentDescription accessibility description of this color.
+ * @property selected if true, this is the color that will be set when the dialog is closed.
+ */
+data class ColorItem(
+ @ColorInt val color: Int,
+ val contentDescription: String,
+ val selected: Boolean = false,
+)
+
+private object ColorItemDiffCallback : DiffUtil.ItemCallback<ColorItem>() {
+ override fun areItemsTheSame(oldItem: ColorItem, newItem: ColorItem) =
+ oldItem.color == newItem.color
+
+ override fun areContentsTheSame(oldItem: ColorItem, newItem: ColorItem) =
+ oldItem == newItem
+}
+
+/**
+ * RecyclerView adapter for displaying color items.
+ */
+internal class BasicColorAdapter(
+ private val onColorSelected: (Int) -> Unit,
+) : ListAdapter<ColorItem, ColorViewHolder>(ColorItemDiffCallback) {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ColorViewHolder {
+ val view = LayoutInflater
+ .from(parent.context)
+ .inflate(R.layout.mozac_feature_prompts_color_item, parent, false)
+ return ColorViewHolder(view, onColorSelected)
+ }
+
+ override fun onBindViewHolder(holder: ColorViewHolder, position: Int) {
+ holder.bind(getItem(position))
+ }
+}
+
+/**
+ * View holder for a color item.
+ */
+internal class ColorViewHolder(
+ itemView: View,
+ private val onColorSelected: (Int) -> Unit,
+) : RecyclerView.ViewHolder(itemView), View.OnClickListener {
+ @VisibleForTesting
+ @ColorInt
+ internal var color: Int = Color.BLACK
+
+ private val checkDrawable: Drawable? by lazy {
+ // Get the height of the row
+ val typedValue = TypedValue()
+ itemView.context.theme.resolveAttribute(
+ android.R.attr.listPreferredItemHeight,
+ typedValue,
+ true,
+ )
+ var height = typedValue.getDimension(itemView.context.resources.displayMetrics).toInt()
+
+ // Remove padding for the shadow
+ val backgroundPadding = Rect()
+ ContextCompat.getDrawable(itemView.context, R.drawable.color_picker_row_bg)?.getPadding(backgroundPadding)
+ height -= backgroundPadding.top + backgroundPadding.bottom
+
+ ContextCompat.getDrawable(itemView.context, R.drawable.color_picker_checkmark)?.apply {
+ setBounds(0, 0, height, height)
+ }
+ }
+
+ init {
+ itemView.setOnClickListener(this)
+ }
+
+ fun bind(colorItem: ColorItem) {
+ // Save the color for the onClick callback
+ color = colorItem.color
+
+ // Set the background to look like this item's color
+ itemView.background = itemView.background.apply {
+ colorFilter = createBlendModeColorFilterCompat(
+ colorItem.color,
+ BlendModeCompat.MODULATE,
+ )
+ }
+ itemView.contentDescription = colorItem.contentDescription
+
+ // Display the check mark
+ val check = if (colorItem.selected) {
+ checkDrawable?.apply {
+ val readableColor = ColorUtils.getReadableTextColor(color)
+ colorFilter = createBlendModeColorFilterCompat(readableColor, SRC_IN)
+ }
+ } else {
+ null
+ }
+ itemView.isActivated = colorItem.selected
+ (itemView as TextView).setCompoundDrawablesRelative(check, null, null, null)
+ }
+
+ override fun onClick(v: View?) {
+ onColorSelected(color)
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/ChoiceAdapter.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/ChoiceAdapter.kt
new file mode 100644
index 0000000000..9f65ac6ab3
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/ChoiceAdapter.kt
@@ -0,0 +1,217 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.dialog
+
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.CheckedTextView
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import mozilla.components.concept.engine.prompt.Choice
+import mozilla.components.feature.prompts.R
+
+/**
+ * RecyclerView adapter for displaying choice items.
+ */
+internal class ChoiceAdapter(
+ private val fragment: ChoiceDialogFragment,
+ private val inflater: LayoutInflater,
+) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
+
+ companion object {
+ internal const val TYPE_MULTIPLE = 1
+ internal const val TYPE_SINGLE = 2
+ internal const val TYPE_GROUP = 3
+ internal const val TYPE_MENU = 4
+ internal const val TYPE_MENU_SEPARATOR = 5
+ }
+
+ private val choices = mutableListOf<Choice>()
+
+ init {
+ addItems(fragment.choices)
+ }
+
+ override fun getItemViewType(position: Int): Int {
+ val item = choices[position]
+ return when {
+ fragment.isSingleChoice and item.isGroupType -> TYPE_GROUP
+ fragment.isSingleChoice -> TYPE_SINGLE
+ fragment.isMenuChoice -> if (item.isASeparator) TYPE_MENU_SEPARATOR else TYPE_MENU
+ item.isGroupType -> TYPE_GROUP
+ else -> TYPE_MULTIPLE
+ }
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, type: Int): RecyclerView.ViewHolder {
+ val layoutId = getLayoutId(type)
+ val view = inflater.inflate(layoutId, parent, false)
+
+ return when (type) {
+ TYPE_GROUP -> GroupViewHolder(view)
+
+ TYPE_MENU -> MenuViewHolder(view)
+
+ TYPE_MENU_SEPARATOR -> MenuSeparatorViewHolder(view)
+
+ TYPE_SINGLE -> SingleViewHolder(view)
+
+ TYPE_MULTIPLE -> MultipleViewHolder(view)
+
+ else -> throw IllegalArgumentException(" $type is not a valid layout type")
+ }
+ }
+
+ override fun getItemCount(): Int = choices.size
+
+ override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
+ val choice = choices[position]
+ when (holder) {
+ is MenuSeparatorViewHolder -> return
+
+ is GroupViewHolder -> {
+ holder.bind(choice)
+ }
+
+ is SingleViewHolder -> {
+ holder.bind(choice, fragment)
+ }
+
+ is MultipleViewHolder -> {
+ holder.bind(choice, fragment)
+ }
+
+ is MenuViewHolder -> {
+ holder.bind(choice, fragment)
+ }
+ }
+ }
+
+ private fun getLayoutId(itemType: Int): Int {
+ return when (itemType) {
+ TYPE_GROUP -> R.layout.mozac_feature_choice_group_item
+ TYPE_MULTIPLE -> R.layout.mozac_feature_multiple_choice_item
+ TYPE_SINGLE -> R.layout.mozac_feature_single_choice_item
+ TYPE_MENU -> R.layout.mozac_feature_menu_choice_item
+ TYPE_MENU_SEPARATOR -> R.layout.mozac_feature_menu_separator_choice_item
+ else -> throw IllegalArgumentException(" $itemType is not a valid layout dialog type")
+ }
+ }
+
+ /**
+ * View holder for a single choice item.
+ */
+ internal class SingleViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ internal val labelView = itemView.findViewById<CheckedTextView>(R.id.labelView)
+
+ fun bind(choice: Choice, fragment: ChoiceDialogFragment) {
+ labelView.choice = choice
+ labelView.isChecked = choice.selected
+
+ if (choice.enable) {
+ itemView.setOnClickListener {
+ val actualChoice = labelView.choice
+ fragment.onSelect(actualChoice)
+ labelView.toggle()
+ }
+ } else {
+ itemView.isClickable = false
+ }
+ }
+ }
+
+ /**
+ * View holder for a Multiple choice item.
+ */
+ internal class MultipleViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ internal val labelView = itemView.findViewById<CheckedTextView>(R.id.labelView)
+
+ fun bind(choice: Choice, fragment: ChoiceDialogFragment) {
+ labelView.choice = choice
+ labelView.isChecked = choice in fragment.mapSelectChoice
+
+ if (choice.enable) {
+ itemView.setOnClickListener {
+ val actualChoice = labelView.choice
+ with(fragment.mapSelectChoice) {
+ if (actualChoice in this) {
+ this -= actualChoice
+ } else {
+ this[actualChoice] = actualChoice
+ }
+ }
+ labelView.toggle()
+ }
+ } else {
+ itemView.isClickable = false
+ }
+ }
+ }
+
+ /**
+ * View holder for a Menu choice item.
+ */
+ internal class MenuViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ internal val labelView = itemView.findViewById<TextView>(R.id.labelView)
+
+ fun bind(choice: Choice, fragment: ChoiceDialogFragment) {
+ labelView.choice = choice
+
+ if (choice.enable) {
+ itemView.setOnClickListener {
+ val actualChoice = labelView.choice
+ fragment.onSelect(actualChoice)
+ }
+ } else {
+ itemView.isClickable = false
+ }
+ }
+ }
+
+ /**
+ * View holder for a menu separator choice item.
+ */
+ internal class MenuSeparatorViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
+
+ /**
+ * View holder for a group choice item.
+ */
+ internal class GroupViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ internal val labelView = itemView.findViewById<TextView>(R.id.labelView)
+
+ fun bind(choice: Choice) {
+ labelView.choice = choice
+ labelView.isEnabled = false
+ }
+ }
+
+ private fun addItems(items: Array<Choice>, indent: String? = null) {
+ for (choice in items) {
+ if (indent != null && !choice.isGroupType) {
+ choice.label = indent + choice.label
+ }
+
+ choices.add(choice)
+
+ if (choice.isGroupType) {
+ val newIndent = if (indent != null) indent + '\t' else "\t"
+ addItems(requireNotNull(choice.children), newIndent)
+ }
+
+ if (choice.selected) {
+ fragment.mapSelectChoice[choice] = choice
+ }
+ }
+ }
+}
+
+internal var TextView.choice: Choice
+ get() = tag as Choice
+ set(value) {
+ this.text = value.label
+ this.isEnabled = value.enable
+ tag = value
+ }
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/ChoiceDialogFragment.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/ChoiceDialogFragment.kt
new file mode 100644
index 0000000000..a15e09bf09
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/ChoiceDialogFragment.kt
@@ -0,0 +1,145 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.dialog
+
+import android.annotation.SuppressLint
+import android.app.Dialog
+import android.content.DialogInterface
+import android.os.Bundle
+import android.os.Parcelable
+import android.view.LayoutInflater
+import android.view.View
+import androidx.annotation.VisibleForTesting
+import androidx.annotation.VisibleForTesting.Companion.PRIVATE
+import androidx.appcompat.app.AlertDialog
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import mozilla.components.concept.engine.prompt.Choice
+import mozilla.components.feature.prompts.R
+import mozilla.components.support.utils.ext.getParcelableArrayCompat
+import mozilla.components.ui.widgets.withCenterAlignedButtons
+
+private const val KEY_CHOICES = "KEY_CHOICES"
+private const val KEY_DIALOG_TYPE = "KEY_DIALOG_TYPE"
+
+/**
+ * [android.support.v4.app.DialogFragment] implementation to display choice(options,optgroup and menu)
+ * web content in native dialogs.
+ */
+internal class ChoiceDialogFragment : PromptDialogFragment() {
+
+ internal val choices: Array<Choice> by lazy {
+ safeArguments.getParcelableArrayCompat(KEY_CHOICES, Choice::class.java) ?: emptyArray()
+ }
+
+ @VisibleForTesting
+ internal val dialogType: Int by lazy { safeArguments.getInt(KEY_DIALOG_TYPE) }
+
+ internal val isSingleChoice get() = dialogType == SINGLE_CHOICE_DIALOG_TYPE
+
+ internal val isMenuChoice get() = dialogType == MENU_CHOICE_DIALOG_TYPE
+
+ internal val mapSelectChoice by lazy { HashMap<Choice, Choice>() }
+
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+ return when (dialogType) {
+ SINGLE_CHOICE_DIALOG_TYPE -> createSingleChoiceDialog()
+ MULTIPLE_CHOICE_DIALOG_TYPE -> createMultipleChoiceDialog()
+ MENU_CHOICE_DIALOG_TYPE -> createSingleChoiceDialog()
+ else -> throw IllegalArgumentException(" $dialogType is not a valid choice dialog type")
+ }
+ }
+
+ companion object {
+ fun newInstance(
+ choices: Array<Choice>,
+ sessionId: String,
+ promptRequestUID: String,
+ shouldDismissOnLoad: Boolean,
+ dialogType: Int,
+ ): ChoiceDialogFragment {
+ val fragment = ChoiceDialogFragment()
+ val arguments = fragment.arguments ?: Bundle()
+
+ with(arguments) {
+ putParcelableArray(KEY_CHOICES, choices)
+ putString(KEY_SESSION_ID, sessionId)
+ putString(KEY_PROMPT_UID, promptRequestUID)
+ putBoolean(KEY_SHOULD_DISMISS_ON_LOAD, shouldDismissOnLoad)
+ putInt(KEY_DIALOG_TYPE, dialogType)
+ }
+
+ fragment.arguments = arguments
+
+ return fragment
+ }
+
+ const val SINGLE_CHOICE_DIALOG_TYPE = 0
+ const val MULTIPLE_CHOICE_DIALOG_TYPE = 1
+ const val MENU_CHOICE_DIALOG_TYPE = 2
+ }
+
+ @SuppressLint("InflateParams")
+ internal fun createDialogContentView(inflater: LayoutInflater): View {
+ val index = choices.indexOfFirst { it.selected }
+ val view = inflater.inflate(R.layout.mozac_feature_choice_dialogs, null)
+ view.findViewById<RecyclerView>(R.id.recyclerView).apply {
+ layoutManager = LinearLayoutManager(context, RecyclerView.VERTICAL, false).also {
+ it.scrollToPosition(index)
+ }
+ adapter = ChoiceAdapter(this@ChoiceDialogFragment, inflater)
+ }
+ return view
+ }
+
+ fun onSelect(selectedChoice: Choice) {
+ feature?.onConfirm(sessionId, promptRequestUID, selectedChoice)
+ dismiss()
+ }
+
+ override fun onCancel(dialog: DialogInterface) {
+ super.onCancel(dialog)
+ feature?.onCancel(sessionId, promptRequestUID)
+ }
+
+ private fun createSingleChoiceDialog(): AlertDialog {
+ val builder = AlertDialog.Builder(requireContext())
+ val inflater = LayoutInflater.from(requireContext())
+ val view = createDialogContentView(inflater)
+
+ return builder.setView(view)
+ .setOnDismissListener {
+ feature?.onCancel(sessionId, promptRequestUID)
+ }.create()
+ }
+
+ private fun createMultipleChoiceDialog(): AlertDialog {
+ val builder = AlertDialog.Builder(requireContext())
+ val inflater = LayoutInflater.from(requireContext())
+ val view = createDialogContentView(inflater)
+
+ return builder.setView(view)
+ .setNegativeButton(R.string.mozac_feature_prompts_cancel) { _, _ ->
+ feature?.onCancel(sessionId, promptRequestUID)
+ }
+ .setPositiveButton(R.string.mozac_feature_prompts_ok) { _, _ ->
+ feature?.onConfirm(sessionId, promptRequestUID, mapSelectChoice.keys.toTypedArray())
+ }.setOnDismissListener {
+ feature?.onCancel(sessionId, promptRequestUID)
+ }.create().withCenterAlignedButtons()
+ }
+}
+
+@Suppress("UNCHECKED_CAST")
+@VisibleForTesting(otherwise = PRIVATE)
+internal fun Array<Parcelable>.toArrayOfChoices(): Array<Choice> {
+ return if (this.isArrayOf<Choice>()) {
+ this as Array<Choice>
+ } else {
+ Array(this.size) { index ->
+ this[index] as Choice
+ }
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/ColorPickerDialogFragment.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/ColorPickerDialogFragment.kt
new file mode 100644
index 0000000000..83b849991e
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/ColorPickerDialogFragment.kt
@@ -0,0 +1,164 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.dialog
+
+import android.annotation.SuppressLint
+import android.app.Dialog
+import android.content.DialogInterface
+import android.graphics.Color
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import androidx.annotation.ColorInt
+import androidx.annotation.VisibleForTesting
+import androidx.appcompat.app.AlertDialog
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import mozilla.components.feature.prompts.R
+import mozilla.components.ui.widgets.withCenterAlignedButtons
+
+private const val KEY_SELECTED_COLOR = "KEY_SELECTED_COLOR"
+
+private const val RGB_BIT_MASK = 0xffffff
+
+/**
+ * [androidx.fragment.app.DialogFragment] implementation for a color picker dialog.
+ */
+internal class ColorPickerDialogFragment : PromptDialogFragment(), DialogInterface.OnClickListener {
+
+ @ColorInt
+ private var initiallySelectedCustomColor: Int? = null
+ private lateinit var defaultColors: List<ColorItem>
+ private lateinit var listAdapter: BasicColorAdapter
+
+ @VisibleForTesting
+ internal var selectedColor: Int
+ get() = safeArguments.getInt(KEY_SELECTED_COLOR)
+ set(value) {
+ safeArguments.putInt(KEY_SELECTED_COLOR, value)
+ }
+
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog =
+ AlertDialog.Builder(requireContext())
+ .setCancelable(true)
+ .setTitle(R.string.mozac_feature_prompts_choose_a_color)
+ .setNegativeButton(R.string.mozac_feature_prompts_cancel, this)
+ .setPositiveButton(R.string.mozac_feature_prompts_set_date, this)
+ .setView(createDialogContentView())
+ .create()
+ .withCenterAlignedButtons()
+
+ override fun onCancel(dialog: DialogInterface) {
+ super.onCancel(dialog)
+ onClick(dialog, DialogInterface.BUTTON_NEGATIVE)
+ }
+
+ override fun onClick(dialog: DialogInterface?, which: Int) {
+ when (which) {
+ DialogInterface.BUTTON_POSITIVE ->
+ feature?.onConfirm(sessionId, promptRequestUID, selectedColor.toHexColor())
+ DialogInterface.BUTTON_NEGATIVE -> feature?.onCancel(sessionId, promptRequestUID)
+ }
+ }
+
+ @SuppressLint("InflateParams")
+ internal fun createDialogContentView(): View {
+ val view = LayoutInflater
+ .from(requireContext())
+ .inflate(R.layout.mozac_feature_prompts_color_picker_dialogs, null)
+
+ // Save the color selected when this dialog opened to show at the end
+ initiallySelectedCustomColor = selectedColor
+
+ // Load list of colors from resources
+ val typedArray = resources.obtainTypedArray(R.array.mozac_feature_prompts_default_colors)
+
+ defaultColors = List(typedArray.length()) { i ->
+ val color = typedArray.getColor(i, Color.BLACK)
+ if (color == initiallySelectedCustomColor) {
+ // No need to save the initial color, its already in the list
+ initiallySelectedCustomColor = null
+ }
+
+ color.toColorItem()
+ }
+ typedArray.recycle()
+
+ setupRecyclerView(view)
+ onColorChange(selectedColor)
+ return view
+ }
+
+ private fun setupRecyclerView(view: View) {
+ listAdapter = BasicColorAdapter(this::onColorChange)
+ view.findViewById<RecyclerView>(R.id.recyclerView).apply {
+ layoutManager = LinearLayoutManager(context, RecyclerView.VERTICAL, false).apply {
+ stackFromEnd = true
+ }
+ adapter = listAdapter
+ setHasFixedSize(true)
+ itemAnimator = null
+ }
+ }
+
+ /**
+ * Called when a new color is selected by the user.
+ */
+ @VisibleForTesting
+ internal fun onColorChange(newColor: Int) {
+ selectedColor = newColor
+
+ val colorItems = defaultColors.toMutableList()
+ val index = colorItems.indexOfFirst { it.color == newColor }
+ val lastColor = if (index > -1) {
+ colorItems[index] = colorItems[index].copy(selected = true)
+ initiallySelectedCustomColor
+ } else {
+ newColor
+ }
+ if (lastColor != null) {
+ colorItems.add(lastColor.toColorItem(selected = lastColor == newColor))
+ }
+
+ listAdapter.submitList(colorItems)
+ }
+
+ companion object {
+
+ fun newInstance(
+ sessionId: String,
+ promptRequestUID: String,
+ shouldDismissOnLoad: Boolean,
+ defaultColor: String,
+ ) = ColorPickerDialogFragment().apply {
+ arguments = (arguments ?: Bundle()).apply {
+ putString(KEY_SESSION_ID, sessionId)
+ putString(KEY_PROMPT_UID, promptRequestUID)
+ putBoolean(KEY_SHOULD_DISMISS_ON_LOAD, shouldDismissOnLoad)
+ putInt(KEY_SELECTED_COLOR, defaultColor.toColor())
+ }
+ }
+ }
+}
+
+internal fun Int.toColorItem(selected: Boolean = false): ColorItem {
+ return ColorItem(
+ color = this,
+ contentDescription = toHexColor(),
+ selected = selected,
+ )
+}
+
+internal fun String.toColor(): Int {
+ return try {
+ Color.parseColor(this)
+ } catch (e: IllegalArgumentException) {
+ Color.BLACK
+ }
+}
+
+internal fun Int.toHexColor(): String {
+ return String.format("#%06x", RGB_BIT_MASK and this)
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/ConfirmDialogFragment.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/ConfirmDialogFragment.kt
new file mode 100644
index 0000000000..9d04f7d26b
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/ConfirmDialogFragment.kt
@@ -0,0 +1,84 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.dialog
+
+import android.app.Dialog
+import android.content.DialogInterface
+import android.os.Bundle
+import androidx.annotation.VisibleForTesting
+import androidx.appcompat.app.AlertDialog
+import mozilla.components.ui.widgets.withCenterAlignedButtons
+
+internal const val KEY_POSITIVE_BUTTON = "KEY_POSITIVE_BUTTON"
+internal const val KEY_NEGATIVE_BUTTON = "KEY_NEGATIVE_BUTTON"
+
+/**
+ * [android.support.v4.app.DialogFragment] implementation for a confirm dialog.
+ * The user has two possible options, allow the request or
+ * deny it (Positive and Negative buttons]. When the positive button is pressed the
+ * feature.onConfirm function will be called otherwise the feature.onCancel function will be called.
+ */
+internal class ConfirmDialogFragment : AbstractPromptTextDialogFragment() {
+
+ @VisibleForTesting
+ internal val positiveButtonText: String by lazy { safeArguments.getString(KEY_POSITIVE_BUTTON)!! }
+
+ @VisibleForTesting
+ internal val negativeButtonText: String by lazy { safeArguments.getString(KEY_NEGATIVE_BUTTON)!! }
+
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+ val builder = AlertDialog.Builder(requireContext())
+ .setCancelable(false)
+ .setTitle(title)
+ .setNegativeButton(negativeButtonText) { _, _ ->
+ feature?.onCancel(sessionId, promptRequestUID, userSelectionNoMoreDialogs)
+ }
+ .setPositiveButton(positiveButtonText) { _, _ ->
+ onPositiveClickAction()
+ }
+ return setCustomMessageView(builder)
+ .create()
+ .withCenterAlignedButtons()
+ }
+
+ override fun onCancel(dialog: DialogInterface) {
+ super.onCancel(dialog)
+ feature?.onCancel(sessionId, promptRequestUID, userSelectionNoMoreDialogs)
+ }
+
+ private fun onPositiveClickAction() {
+ feature?.onConfirm(sessionId, promptRequestUID, userSelectionNoMoreDialogs)
+ }
+
+ companion object {
+ fun newInstance(
+ sessionId: String? = null,
+ promptRequestUID: String,
+ shouldDismissOnLoad: Boolean,
+ title: String,
+ message: String,
+ positiveButtonText: String,
+ negativeButtonText: String,
+ hasShownManyDialogs: Boolean = false,
+ ): ConfirmDialogFragment {
+ val fragment = ConfirmDialogFragment()
+ val arguments = fragment.arguments ?: Bundle()
+
+ with(arguments) {
+ putString(KEY_SESSION_ID, sessionId)
+ putString(KEY_PROMPT_UID, promptRequestUID)
+ putBoolean(KEY_SHOULD_DISMISS_ON_LOAD, shouldDismissOnLoad)
+ putString(KEY_TITLE, title)
+ putString(KEY_MESSAGE, message)
+ putString(KEY_POSITIVE_BUTTON, positiveButtonText)
+ putString(KEY_NEGATIVE_BUTTON, negativeButtonText)
+ putBoolean(KEY_MANY_ALERTS, hasShownManyDialogs)
+ }
+
+ fragment.arguments = arguments
+ return fragment
+ }
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/FullScreenNotificationDialog.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/FullScreenNotificationDialog.kt
new file mode 100644
index 0000000000..3c403f3734
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/FullScreenNotificationDialog.kt
@@ -0,0 +1,70 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.dialog
+
+import android.app.Dialog
+import android.os.Bundle
+import android.view.Gravity
+import android.view.WindowManager
+import androidx.annotation.LayoutRes
+import androidx.appcompat.app.AlertDialog
+import androidx.fragment.app.DialogFragment
+import androidx.fragment.app.FragmentManager
+import androidx.lifecycle.lifecycleScope
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
+
+private const val TAG = "mozac_feature_prompts_full_screen_notification_dialog"
+private const val SNACKBAR_DURATION_LONG_MS = 3000L
+
+/**
+ * UI to show a 'full screen mode' notification.
+ */
+interface FullScreenNotification {
+ /**
+ * Show the notification.
+ *
+ * @param fragmentManager the [FragmentManager] to add this notification to.
+ */
+ fun show(fragmentManager: FragmentManager)
+}
+
+/**
+ * [DialogFragment] that is configured to match the style and behaviour of a Snackbar.
+ *
+ * @property layout the layout to use for the dialog.
+ */
+class FullScreenNotificationDialog(@LayoutRes val layout: Int) :
+ DialogFragment(), FullScreenNotification {
+ override fun show(fragmentManager: FragmentManager) = super.show(fragmentManager, TAG)
+
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = requireActivity().let {
+ val view = layoutInflater.inflate(layout, null)
+ AlertDialog.Builder(it).setView(view).create()
+ }
+
+ override fun onStart() {
+ super.onStart()
+
+ dialog?.let { dialog ->
+ dialog.window?.let { window ->
+ // Prevent any user input from key or other button events to it.
+ window.setFlags(
+ WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
+ WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
+ )
+
+ window.setGravity(Gravity.BOTTOM)
+ window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
+ }
+ }
+
+ // Attempt to automatically dismiss the dialog after the given duration.
+ lifecycleScope.launch {
+ delay(SNACKBAR_DURATION_LONG_MS)
+ dialog?.dismiss()
+ }
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/LoginDialogFacts.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/LoginDialogFacts.kt
new file mode 100644
index 0000000000..6d9a985aa8
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/LoginDialogFacts.kt
@@ -0,0 +1,45 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.dialog
+
+import mozilla.components.support.base.Component
+import mozilla.components.support.base.facts.Action
+import mozilla.components.support.base.facts.Fact
+import mozilla.components.support.base.facts.collect
+
+/**
+ * Facts emitted for telemetry related to [LoginDialogFragment]
+ */
+class LoginDialogFacts {
+ /**
+ * Items that specify how the [LoginDialogFragment] was interacted with
+ */
+ object Items {
+ const val DISPLAY = "display"
+ const val SAVE = "save"
+ const val NEVER_SAVE = "never_save"
+ const val CANCEL = "cancel"
+ }
+}
+
+private fun emitLoginDialogFacts(
+ action: Action,
+ item: String,
+ value: String? = null,
+ metadata: Map<String, Any>? = null,
+) {
+ Fact(
+ Component.FEATURE_PROMPTS,
+ action,
+ item,
+ value,
+ metadata,
+ ).collect()
+}
+
+internal fun emitDisplayFact() = emitLoginDialogFacts(Action.CLICK, LoginDialogFacts.Items.DISPLAY)
+internal fun emitNeverSaveFact() = emitLoginDialogFacts(Action.CLICK, LoginDialogFacts.Items.NEVER_SAVE)
+internal fun emitSaveFact() = emitLoginDialogFacts(Action.CLICK, LoginDialogFacts.Items.SAVE)
+internal fun emitCancelFact() = emitLoginDialogFacts(Action.CLICK, LoginDialogFacts.Items.CANCEL)
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/MultiButtonDialogFragment.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/MultiButtonDialogFragment.kt
new file mode 100644
index 0000000000..0ace6d2366
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/MultiButtonDialogFragment.kt
@@ -0,0 +1,99 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.dialog
+
+import android.app.Dialog
+import android.content.DialogInterface
+import android.os.Bundle
+import androidx.appcompat.app.AlertDialog
+import mozilla.components.ui.widgets.withCenterAlignedButtons
+
+private const val KEY_POSITIVE_BUTTON_TITLE = "KEY_POSITIVE_BUTTON_TITLE"
+private const val KEY_NEGATIVE_BUTTON_TITLE = "KEY_NEGATIVE_BUTTON_TITLE"
+private const val KEY_NEUTRAL_BUTTON_TITLE = "KEY_NEUTRAL_BUTTON_TITLE"
+
+/**
+ * [android.support.v4.app.DialogFragment] implementation to display a confirm dialog,
+ * it can have up to three buttons, they could be positive, negative or neutral.
+ */
+internal class MultiButtonDialogFragment : AbstractPromptTextDialogFragment() {
+
+ internal val positiveButtonTitle: String? by lazy { safeArguments.getString(KEY_POSITIVE_BUTTON_TITLE) }
+
+ internal val negativeButtonTitle: String? by lazy { safeArguments.getString(KEY_NEGATIVE_BUTTON_TITLE) }
+
+ internal val neutralButtonTitle: String? by lazy { safeArguments.getString(KEY_NEUTRAL_BUTTON_TITLE) }
+
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+ val builder = AlertDialog.Builder(requireContext())
+ .setTitle(title)
+ .setCancelable(true)
+ .setupButtons()
+ return setCustomMessageView(builder)
+ .create()
+ .withCenterAlignedButtons()
+ }
+
+ override fun onCancel(dialog: DialogInterface) {
+ super.onCancel(dialog)
+ feature?.onCancel(sessionId, promptRequestUID)
+ }
+
+ private fun AlertDialog.Builder.setupButtons(): AlertDialog.Builder {
+ if (!positiveButtonTitle.isNullOrBlank()) {
+ setPositiveButton(positiveButtonTitle) { _, _ ->
+ feature?.onConfirm(sessionId, promptRequestUID, userSelectionNoMoreDialogs to ButtonType.POSITIVE)
+ }
+ }
+ if (!negativeButtonTitle.isNullOrBlank()) {
+ setNegativeButton(negativeButtonTitle) { _, _ ->
+ feature?.onConfirm(sessionId, promptRequestUID, userSelectionNoMoreDialogs to ButtonType.NEGATIVE)
+ }
+ }
+ if (!neutralButtonTitle.isNullOrBlank()) {
+ setNeutralButton(neutralButtonTitle) { _, _ ->
+ feature?.onConfirm(sessionId, promptRequestUID, userSelectionNoMoreDialogs to ButtonType.NEUTRAL)
+ }
+ }
+ return this
+ }
+
+ companion object {
+ fun newInstance(
+ sessionId: String,
+ promptRequestUID: String,
+ title: String,
+ message: String,
+ hasShownManyDialogs: Boolean,
+ shouldDismissOnLoad: Boolean,
+ positiveButton: String = "",
+ negativeButton: String = "",
+ neutralButton: String = "",
+ ): MultiButtonDialogFragment {
+ val fragment = MultiButtonDialogFragment()
+ val arguments = fragment.arguments ?: Bundle()
+
+ with(arguments) {
+ putString(KEY_SESSION_ID, sessionId)
+ putString(KEY_PROMPT_UID, promptRequestUID)
+ putString(KEY_TITLE, title)
+ putString(KEY_MESSAGE, message)
+ putBoolean(KEY_MANY_ALERTS, hasShownManyDialogs)
+ putBoolean(KEY_SHOULD_DISMISS_ON_LOAD, shouldDismissOnLoad)
+ putString(KEY_POSITIVE_BUTTON_TITLE, positiveButton)
+ putString(KEY_NEGATIVE_BUTTON_TITLE, negativeButton)
+ putString(KEY_NEUTRAL_BUTTON_TITLE, neutralButton)
+ }
+ fragment.arguments = arguments
+ return fragment
+ }
+ }
+
+ enum class ButtonType {
+ POSITIVE,
+ NEGATIVE,
+ NEUTRAL,
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/PromptAbuserDetector.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/PromptAbuserDetector.kt
new file mode 100644
index 0000000000..ac92f5e726
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/PromptAbuserDetector.kt
@@ -0,0 +1,64 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.dialog
+
+import java.util.Date
+
+/**
+ * Helper class to identify if a website has shown many dialogs.
+ */
+internal class PromptAbuserDetector {
+
+ internal var jsAlertCount = 0
+ internal var lastDialogShownAt = Date()
+ var shouldShowMoreDialogs = true
+ private set
+
+ fun resetJSAlertAbuseState() {
+ jsAlertCount = 0
+ shouldShowMoreDialogs = true
+ }
+
+ fun updateJSDialogAbusedState() {
+ if (!areDialogsAbusedByTime()) {
+ jsAlertCount = 0
+ }
+ ++jsAlertCount
+ lastDialogShownAt = Date()
+ }
+
+ fun userWantsMoreDialogs(checkBox: Boolean) {
+ shouldShowMoreDialogs = checkBox
+ }
+
+ fun areDialogsBeingAbused(): Boolean {
+ return areDialogsAbusedByTime() || areDialogsAbusedByCount()
+ }
+
+ internal fun areDialogsAbusedByTime(): Boolean {
+ return if (jsAlertCount == 0) {
+ false
+ } else {
+ val now = Date()
+ val diffInSeconds = (now.time - lastDialogShownAt.time) / SECOND_MS
+ diffInSeconds < MAX_SUCCESSIVE_DIALOG_SECONDS_LIMIT
+ }
+ }
+
+ internal fun areDialogsAbusedByCount(): Boolean {
+ return jsAlertCount > MAX_SUCCESSIVE_DIALOG_COUNT
+ }
+
+ companion object {
+ // Maximum number of successive dialogs before we prompt users to disable dialogs.
+ internal const val MAX_SUCCESSIVE_DIALOG_COUNT: Int = 2
+
+ // Minimum time required between dialogs in seconds before enabling the stop dialog.
+ internal const val MAX_SUCCESSIVE_DIALOG_SECONDS_LIMIT: Int = 3
+
+ // Number of milliseconds in 1 second.
+ internal const val SECOND_MS: Int = 1000
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/PromptDialogFragment.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/PromptDialogFragment.kt
new file mode 100644
index 0000000000..093c389cbf
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/PromptDialogFragment.kt
@@ -0,0 +1,98 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.dialog
+
+import androidx.fragment.app.DialogFragment
+import mozilla.components.concept.engine.prompt.PromptRequest
+import mozilla.components.concept.storage.CreditCardValidationDelegate
+import mozilla.components.concept.storage.LoginValidationDelegate
+import mozilla.components.feature.prompts.login.LoginExceptions
+
+internal const val KEY_SESSION_ID = "KEY_SESSION_ID"
+internal const val KEY_TITLE = "KEY_TITLE"
+internal const val KEY_MESSAGE = "KEY_MESSAGE"
+internal const val KEY_PROMPT_UID = "KEY_PROMPT_UID"
+internal const val KEY_SHOULD_DISMISS_ON_LOAD = "KEY_SHOULD_DISMISS_ON_LOAD"
+
+/**
+ * An abstract representation for all different types of prompt dialogs.
+ * for handling [PromptFeature] dialogs.
+ */
+internal abstract class PromptDialogFragment : DialogFragment() {
+ var feature: Prompter? = null
+
+ internal val sessionId: String by lazy { requireNotNull(arguments).getString(KEY_SESSION_ID)!! }
+
+ internal val promptRequestUID: String by lazy { requireNotNull(arguments).getString(KEY_PROMPT_UID)!! }
+
+ /**
+ * Whether or not the dialog should automatically be dismissed when a new page is loaded.
+ */
+ internal val shouldDismissOnLoad: Boolean by lazy {
+ safeArguments.getBoolean(KEY_SHOULD_DISMISS_ON_LOAD, true)
+ }
+
+ internal val title: String by lazy { safeArguments.getString(KEY_TITLE)!! }
+
+ internal val message: String by lazy { safeArguments.getString(KEY_MESSAGE)!! }
+
+ val safeArguments get() = requireNotNull(arguments)
+}
+
+internal interface Prompter {
+
+ /**
+ * Validates whether or not a given [CreditCard] may be stored.
+ */
+ val creditCardValidationDelegate: CreditCardValidationDelegate?
+
+ /**
+ * Validates whether or not a given Login may be stored.
+ *
+ * Logging in will not prompt a save dialog if this is left null.
+ */
+ val loginValidationDelegate: LoginValidationDelegate?
+
+ /**
+ * Stores whether a site should never be prompted for logins saving.
+ */
+ val loginExceptionStorage: LoginExceptions?
+
+ /**
+ * Invoked when a dialog is dismissed. This consumes the [PromptRequest] indicated by [promptRequestUID]
+ * from the session indicated by [sessionId].
+ *
+ * @param sessionId this is the id of the session which requested the prompt.
+ * @param promptRequestUID id of the [PromptRequest] for which this dialog was shown.
+ * @param value an optional value provided by the dialog as a result of cancelling the action.
+ */
+ fun onCancel(sessionId: String, promptRequestUID: String, value: Any? = null)
+
+ /**
+ * Invoked when the user confirms the action on the dialog. This consumes the [PromptRequest] indicated
+ * by [promptRequestUID] from the session indicated by [sessionId].
+ *
+ * @param sessionId that requested to show the dialog.
+ * @param promptRequestUID id of the [PromptRequest] for which this dialog was shown.
+ * @param value an optional value provided by the dialog as a result of confirming the action.
+ */
+ fun onConfirm(sessionId: String, promptRequestUID: String, value: Any?)
+
+ /**
+ * Invoked when the user is requesting to clear the selected value from the dialog.
+ * This consumes the [PromptFeature] value from the session indicated by [sessionId].
+ *
+ * @param sessionId that requested to show the dialog.
+ * @param promptRequestUID id of the [PromptRequest] for which this dialog was shown.
+ */
+ fun onClear(sessionId: String, promptRequestUID: String)
+
+ /**
+ * Invoked when the user is requesting to open a website from the dialog.
+ *
+ * @param url The url to be opened.
+ */
+ fun onOpenLink(url: String)
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/SaveLoginDialogFragment.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/SaveLoginDialogFragment.kt
new file mode 100644
index 0000000000..bcc36d12f9
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/SaveLoginDialogFragment.kt
@@ -0,0 +1,428 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.dialog
+
+import android.app.Dialog
+import android.content.DialogInterface
+import android.content.res.ColorStateList
+import android.graphics.Bitmap
+import android.os.Bundle
+import android.text.Editable
+import android.text.TextWatcher
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.Button
+import android.widget.FrameLayout
+import android.widget.ImageView
+import androidx.annotation.VisibleForTesting
+import androidx.appcompat.widget.AppCompatTextView
+import androidx.core.content.ContextCompat
+import androidx.core.widget.ImageViewCompat
+import com.google.android.material.bottomsheet.BottomSheetBehavior
+import com.google.android.material.bottomsheet.BottomSheetDialog
+import com.google.android.material.button.MaterialButton
+import com.google.android.material.textfield.TextInputEditText
+import com.google.android.material.textfield.TextInputLayout
+import kotlinx.coroutines.CancellationException
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Deferred
+import kotlinx.coroutines.Dispatchers.IO
+import kotlinx.coroutines.Dispatchers.Main
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.cancelAndJoin
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
+import mozilla.components.concept.storage.LoginEntry
+import mozilla.components.concept.storage.LoginValidationDelegate.Result
+import mozilla.components.feature.prompts.R
+import mozilla.components.feature.prompts.ext.onDone
+import mozilla.components.support.base.log.logger.Logger
+import mozilla.components.support.ktx.android.content.res.resolveAttribute
+import mozilla.components.support.ktx.android.view.hideKeyboard
+import mozilla.components.support.ktx.android.view.toScope
+import mozilla.components.support.utils.ext.getParcelableCompat
+import kotlin.reflect.KProperty
+import com.google.android.material.R as MaterialR
+
+private const val KEY_LOGIN_HINT = "KEY_LOGIN_HINT"
+private const val KEY_LOGIN_USERNAME = "KEY_LOGIN_USERNAME"
+private const val KEY_LOGIN_PASSWORD = "KEY_LOGIN_PASSWORD"
+private const val KEY_LOGIN_ORIGIN = "KEY_LOGIN_ORIGIN"
+private const val KEY_LOGIN_FORM_ACTION_ORIGIN = "KEY_LOGIN_FORM_ACTION_ORIGIN"
+private const val KEY_LOGIN_HTTP_REALM = "KEY_LOGIN_HTTP_REALM"
+
+@VisibleForTesting internal const val KEY_LOGIN_ICON = "KEY_LOGIN_ICON"
+
+/**
+ * [android.support.v4.app.DialogFragment] implementation to display a
+ * dialog that allows users to save/update usernames and passwords for a given domain.
+ */
+@Suppress("LargeClass")
+internal class SaveLoginDialogFragment : PromptDialogFragment() {
+
+ private inner class SafeArgString(private val key: String) {
+ operator fun getValue(frag: SaveLoginDialogFragment, prop: KProperty<*>): String =
+ safeArguments.getString(key)!!
+
+ operator fun setValue(frag: SaveLoginDialogFragment, prop: KProperty<*>, value: String) {
+ safeArguments.putString(key, value)
+ }
+ }
+
+ private val origin by lazy { safeArguments.getString(KEY_LOGIN_ORIGIN)!! }
+ private val formActionOrigin by lazy { safeArguments.getString(KEY_LOGIN_FORM_ACTION_ORIGIN) }
+ private val httpRealm by lazy { safeArguments.getString(KEY_LOGIN_HTTP_REALM) }
+
+ @VisibleForTesting
+ internal val icon by lazy { safeArguments.getParcelableCompat(KEY_LOGIN_ICON, Bitmap::class.java) }
+
+ @VisibleForTesting
+ internal var username by SafeArgString(KEY_LOGIN_USERNAME)
+
+ @VisibleForTesting
+ internal var password by SafeArgString(KEY_LOGIN_PASSWORD)
+
+ @Volatile
+ private var loginValid = false
+ private var validateStateUpdate: Job? = null
+
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+ return BottomSheetDialog(requireContext(), R.style.MozDialogStyle).apply {
+ setCancelable(true)
+ setOnShowListener {
+ /*
+ Note: we must include a short delay before expanding the bottom sheet.
+ This is because the keyboard is still in the process of hiding when `onShowListener` is triggered.
+ Because of this, we'll only be given a small portion of the screen to draw on which will set the bottom
+ anchor of this view incorrectly to somewhere in the center of the view. If we delay a small amount we
+ are given the correct amount of space and are properly anchored.
+ */
+ CoroutineScope(IO).launch {
+ delay(KEYBOARD_HIDING_DELAY)
+ launch(Main) {
+ val bottomSheet =
+ findViewById<View>(MaterialR.id.design_bottom_sheet) as FrameLayout
+ val behavior = BottomSheetBehavior.from(bottomSheet)
+ behavior.state = BottomSheetBehavior.STATE_EXPANDED
+ }
+ }
+ }
+ }
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?,
+ ): View {
+ /*
+ * If an implementation of [LoginExceptions] is hooked up to [PromptFeature], we will not
+ * show this save login dialog for any origin saved as an exception.
+ */
+ CoroutineScope(IO).launch {
+ if (feature?.loginExceptionStorage?.isLoginExceptionByOrigin(origin) == true) {
+ feature?.onCancel(sessionId, promptRequestUID)
+ dismiss()
+ }
+ }
+
+ return setupRootView(container)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ view.findViewById<AppCompatTextView>(R.id.host_name).text = origin
+
+ view.findViewById<AppCompatTextView>(R.id.save_message).text =
+ getString(R.string.mozac_feature_prompt_login_save_headline_2)
+
+ view.findViewById<Button>(R.id.save_confirm).setOnClickListener {
+ onPositiveClickAction()
+ }
+
+ view.findViewById<Button>(R.id.save_cancel).apply {
+ setOnClickListener {
+ if (this.text == context?.getString(R.string.mozac_feature_prompt_never_save)) {
+ emitNeverSaveFact()
+ CoroutineScope(IO).launch {
+ feature?.loginExceptionStorage?.addLoginException(origin)
+ }
+ }
+ feature?.onCancel(sessionId, promptRequestUID)
+ dismiss()
+ }
+ }
+
+ emitDisplayFact()
+ update()
+ }
+
+ override fun onCancel(dialog: DialogInterface) {
+ super.onCancel(dialog)
+ feature?.onCancel(sessionId, promptRequestUID)
+ emitCancelFact()
+ }
+
+ private fun onPositiveClickAction() {
+ feature?.onConfirm(
+ sessionId,
+ promptRequestUID,
+ LoginEntry(
+ origin = origin,
+ formActionOrigin = formActionOrigin,
+ httpRealm = httpRealm,
+ username = username,
+ password = password,
+ ),
+ )
+ emitSaveFact()
+ dismiss()
+ }
+
+ @VisibleForTesting
+ internal fun setupRootView(container: ViewGroup? = null): View {
+ val rootView = inflateRootView(container)
+ bindUsername(rootView)
+ bindPassword(rootView)
+ bindIcon(rootView)
+ return rootView
+ }
+
+ @VisibleForTesting
+ internal fun inflateRootView(container: ViewGroup? = null): View {
+ return LayoutInflater.from(requireContext()).inflate(
+ R.layout.mozac_feature_prompt_save_login_prompt,
+ container,
+ false,
+ )
+ }
+
+ private fun bindUsername(view: View) {
+ val usernameEditText = view.findViewById<TextInputEditText>(R.id.username_field)
+
+ usernameEditText.setText(username)
+ usernameEditText.addTextChangedListener(
+ object : TextWatcher {
+ override fun afterTextChanged(editable: Editable) {
+ username = editable.toString()
+ // Update accesses member state, so it must be called after username is set
+ update()
+ }
+
+ override fun beforeTextChanged(
+ s: CharSequence?,
+ start: Int,
+ count: Int,
+ after: Int,
+ ) = Unit
+
+ override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) =
+ Unit
+ },
+ )
+
+ with(usernameEditText) {
+ onDone(false) {
+ hideKeyboard()
+ clearFocus()
+ }
+ }
+ }
+
+ private fun bindPassword(view: View) {
+ val passwordEditText = view.findViewById<TextInputEditText>(R.id.password_field)
+
+ passwordEditText.addTextChangedListener(
+ object : TextWatcher {
+ override fun afterTextChanged(editable: Editable) {
+ // Note that password is accessed by `fun update`
+ password = editable.toString()
+ if (password.isEmpty()) {
+ setViewState(
+ loginValid = false,
+ passwordErrorText =
+ context?.getString(R.string.mozac_feature_prompt_error_empty_password),
+ )
+ } else {
+ setViewState(
+ loginValid = true,
+ passwordErrorText = "",
+ )
+ }
+ }
+
+ override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) =
+ Unit
+
+ override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) = Unit
+ },
+ )
+ passwordEditText.setText(password)
+
+ with(passwordEditText) {
+ onDone(false) {
+ hideKeyboard()
+ clearFocus()
+ }
+ }
+ }
+
+ private fun bindIcon(view: View) {
+ val iconView = view.findViewById<ImageView>(R.id.host_icon)
+ if (icon != null) {
+ iconView.setImageBitmap(icon)
+ } else {
+ setImageViewTint(iconView)
+ }
+ }
+
+ @VisibleForTesting
+ internal fun setImageViewTint(imageView: ImageView) {
+ val tintColor = ContextCompat.getColor(
+ requireContext(),
+ requireContext().theme.resolveAttribute(android.R.attr.textColorPrimary),
+ )
+ ImageViewCompat.setImageTintList(imageView, ColorStateList.valueOf(tintColor))
+ }
+
+ /**
+ * Check current state then update view state to match.
+ */
+ @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+ fun update() = view?.toScope()?.launch(IO) {
+ val entry = LoginEntry(
+ origin = origin,
+ formActionOrigin = formActionOrigin,
+ httpRealm = httpRealm,
+ username = username,
+ password = password,
+ )
+
+ try {
+ validateStateUpdate?.cancelAndJoin()
+ } catch (cancellationException: CancellationException) {
+ Logger.error("Failed to cancel job", cancellationException)
+ }
+
+ var validateDeferred: Deferred<Result>?
+ validateStateUpdate = launch validate@{
+ if (!loginValid) {
+ // Don't run the validation logic if we know the login is invalid
+ return@validate
+ }
+ val validationDelegate =
+ feature?.loginValidationDelegate ?: return@validate
+ validateDeferred = validationDelegate.shouldUpdateOrCreateAsync(entry)
+ val result = validateDeferred?.await()
+ withContext(Main) {
+ when (result) {
+ Result.CanBeCreated -> {
+ setViewState(
+ headline = context?.getString(R.string.mozac_feature_prompt_login_save_headline_2),
+ negativeText = context?.getString(R.string.mozac_feature_prompt_never_save),
+ confirmText = context?.getString(R.string.mozac_feature_prompt_save_confirmation),
+ )
+ }
+ is Result.CanBeUpdated -> {
+ setViewState(
+ headline = if (result.foundLogin.username.isEmpty()) {
+ context?.getString(
+ R.string.mozac_feature_prompt_login_add_username_headline,
+ )
+ } else {
+ context?.getString(R.string.mozac_feature_prompt_login_update_headline_2)
+ },
+ negativeText = context?.getString(R.string.mozac_feature_prompt_dont_update),
+ confirmText =
+ context?.getString(R.string.mozac_feature_prompt_update_confirmation),
+ )
+ }
+ else -> {
+ // no-op
+ }
+ }
+ }
+ validateStateUpdate?.invokeOnCompletion {
+ if (it is CancellationException) {
+ validateDeferred?.cancel()
+ }
+ }
+ }
+ }
+
+ private fun setViewState(
+ headline: String? = null,
+ negativeText: String? = null,
+ confirmText: String? = null,
+ loginValid: Boolean? = null,
+ passwordErrorText: String? = null,
+ ) {
+ if (headline != null) {
+ view?.findViewById<AppCompatTextView>(R.id.save_message)?.text = headline
+ }
+
+ if (negativeText != null) {
+ view?.findViewById<MaterialButton>(R.id.save_cancel)?.text = negativeText
+ }
+
+ val confirmButton = view?.findViewById<Button>(R.id.save_confirm)
+ if (confirmText != null) {
+ confirmButton?.text = confirmText
+ }
+
+ if (loginValid != null) {
+ this.loginValid = loginValid
+ confirmButton?.isEnabled = loginValid
+ }
+
+ if (passwordErrorText != null) {
+ view?.findViewById<TextInputLayout>(R.id.password_text_input_layout)?.error =
+ passwordErrorText
+ }
+ }
+
+ companion object {
+ private const val KEYBOARD_HIDING_DELAY = 100L
+
+ /**
+ * A builder method for creating a [SaveLoginDialogFragment]
+ * @param sessionId the id of the session for which this dialog will be created.
+ * @param promptRequestUID identifier of the [PromptRequest] for which this dialog is shown.
+ * @param shouldDismissOnLoad whether or not the dialog should automatically be dismissed
+ * when a new page is loaded.
+ * @param hint a value that helps to determine the appropriate prompting behavior.
+ * @param login represents login information on a given domain.
+ * */
+ fun newInstance(
+ sessionId: String,
+ promptRequestUID: String,
+ shouldDismissOnLoad: Boolean,
+ hint: Int,
+ entry: LoginEntry,
+ icon: Bitmap? = null,
+ ): SaveLoginDialogFragment {
+ val fragment = SaveLoginDialogFragment()
+ val arguments = fragment.arguments ?: Bundle()
+
+ with(arguments) {
+ putString(KEY_SESSION_ID, sessionId)
+ putString(KEY_PROMPT_UID, promptRequestUID)
+ putBoolean(KEY_SHOULD_DISMISS_ON_LOAD, shouldDismissOnLoad)
+ putInt(KEY_LOGIN_HINT, hint)
+ putString(KEY_LOGIN_USERNAME, entry.username)
+ putString(KEY_LOGIN_PASSWORD, entry.password)
+ putString(KEY_LOGIN_ORIGIN, entry.origin)
+ putString(KEY_LOGIN_FORM_ACTION_ORIGIN, entry.formActionOrigin)
+ putString(KEY_LOGIN_HTTP_REALM, entry.httpRealm)
+ putParcelable(KEY_LOGIN_ICON, icon)
+ }
+
+ fragment.arguments = arguments
+ return fragment
+ }
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/TextPromptDialogFragment.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/TextPromptDialogFragment.kt
new file mode 100644
index 0000000000..01492e96e4
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/TextPromptDialogFragment.kt
@@ -0,0 +1,130 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.dialog
+
+import android.annotation.SuppressLint
+import android.app.Dialog
+import android.content.DialogInterface
+import android.os.Bundle
+import android.text.Editable
+import android.text.TextWatcher
+import android.view.LayoutInflater
+import android.widget.EditText
+import android.widget.TextView
+import androidx.appcompat.app.AlertDialog
+import mozilla.components.feature.prompts.R
+import mozilla.components.ui.widgets.withCenterAlignedButtons
+
+private const val KEY_USER_EDIT_TEXT = "KEY_USER_EDIT_TEXT"
+private const val KEY_LABEL_INPUT = "KEY_LABEL_INPUT"
+private const val KEY_DEFAULT_INPUT_VALUE = "KEY_DEFAULT_INPUT_VALUE"
+
+/**
+ * [androidx.fragment.app.DialogFragment] implementation to display a
+ * <a href="https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt">Window.prompt()</a> with native dialogs.
+ */
+internal class TextPromptDialogFragment : AbstractPromptTextDialogFragment(), TextWatcher {
+ /**
+ * Contains the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt#Parameters">default()</a>
+ * value provided by this [sessionId].
+ */
+ internal val defaultInputValue: String? by lazy { safeArguments.getString(KEY_DEFAULT_INPUT_VALUE) }
+
+ /**
+ * Contains the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt#Parameters">message</a>
+ * value provided by this [sessionId].
+ */
+ internal val labelInput: String? by lazy { safeArguments.getString(KEY_LABEL_INPUT) }
+
+ private var userSelectionEditText: String
+ get() = safeArguments.getString(KEY_USER_EDIT_TEXT, defaultInputValue)
+ set(value) {
+ safeArguments.putString(KEY_USER_EDIT_TEXT, value)
+ }
+
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+ val builder = AlertDialog.Builder(requireContext())
+ .setTitle(title)
+ .setCancelable(true)
+ .setPositiveButton(android.R.string.ok) { _, _ ->
+ onPositiveClickAction()
+ }
+ return addLayout(builder).create().withCenterAlignedButtons()
+ }
+
+ override fun onCancel(dialog: DialogInterface) {
+ feature?.onCancel(sessionId, promptRequestUID)
+ }
+
+ private fun onPositiveClickAction() {
+ feature?.onConfirm(sessionId, promptRequestUID, userSelectionNoMoreDialogs to userSelectionEditText)
+ }
+
+ @SuppressLint("InflateParams")
+ private fun addLayout(builder: AlertDialog.Builder): AlertDialog.Builder {
+ val inflater = LayoutInflater.from(requireContext())
+ val view = inflater.inflate(R.layout.mozac_feature_text_prompt, null)
+
+ val label = view.findViewById<TextView>(R.id.input_label)
+ val editText = view.findViewById<EditText>(R.id.input_value)
+
+ label.text = labelInput
+ editText.setText(defaultInputValue)
+ editText.addTextChangedListener(this)
+
+ addCheckBoxIfNeeded(view)
+
+ return builder.setView(view)
+ }
+
+ override fun afterTextChanged(editable: Editable) {
+ userSelectionEditText = editable.toString()
+ }
+
+ override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) = Unit
+
+ override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) = Unit
+
+ companion object {
+ /**
+ * A builder method for creating a [TextPromptDialogFragment]
+ * @param sessionId to create the dialog.
+ * @param promptRequestUID identifier of the [PromptRequest] for which this dialog is shown.
+ * @param shouldDismissOnLoad whether or not the dialog should automatically be dismissed
+ * when a new page is loaded.
+ * @param title the title of the dialog.
+ * @param inputLabel
+ * @param defaultInputValue
+ * @param hasShownManyDialogs tells if this [sessionId] has shown many dialogs
+ * in a short period of time, if is true a checkbox will be part of the dialog, for the user
+ * to choose if wants to prevent this [sessionId] continuing showing dialogs.
+ */
+ fun newInstance(
+ sessionId: String,
+ promptRequestUID: String,
+ shouldDismissOnLoad: Boolean,
+ title: String,
+ inputLabel: String,
+ defaultInputValue: String,
+ hasShownManyDialogs: Boolean,
+ ): TextPromptDialogFragment {
+ val fragment = TextPromptDialogFragment()
+ val arguments = fragment.arguments ?: Bundle()
+
+ with(arguments) {
+ putString(KEY_SESSION_ID, sessionId)
+ putString(KEY_PROMPT_UID, promptRequestUID)
+ putBoolean(KEY_SHOULD_DISMISS_ON_LOAD, shouldDismissOnLoad)
+ putString(KEY_TITLE, title)
+ putString(KEY_LABEL_INPUT, inputLabel)
+ putString(KEY_DEFAULT_INPUT_VALUE, defaultInputValue)
+ putBoolean(KEY_MANY_ALERTS, hasShownManyDialogs)
+ }
+
+ fragment.arguments = arguments
+ return fragment
+ }
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/TimePickerDialogFragment.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/TimePickerDialogFragment.kt
new file mode 100644
index 0000000000..60f1f3e415
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/TimePickerDialogFragment.kt
@@ -0,0 +1,342 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package mozilla.components.feature.prompts.dialog
+
+import android.annotation.SuppressLint
+import android.app.AlertDialog
+import android.app.DatePickerDialog
+import android.app.Dialog
+import android.app.TimePickerDialog
+import android.content.Context
+import android.content.DialogInterface
+import android.content.DialogInterface.BUTTON_NEGATIVE
+import android.content.DialogInterface.BUTTON_NEUTRAL
+import android.content.DialogInterface.BUTTON_POSITIVE
+import android.os.Build
+import android.os.Build.VERSION_CODES.M
+import android.os.Bundle
+import android.text.format.DateFormat
+import android.view.LayoutInflater
+import android.view.View
+import android.widget.DatePicker
+import android.widget.TimePicker
+import androidx.annotation.VisibleForTesting
+import androidx.annotation.VisibleForTesting.Companion.PRIVATE
+import mozilla.components.feature.prompts.R
+import mozilla.components.feature.prompts.ext.day
+import mozilla.components.feature.prompts.ext.hour
+import mozilla.components.feature.prompts.ext.millisecond
+import mozilla.components.feature.prompts.ext.minute
+import mozilla.components.feature.prompts.ext.month
+import mozilla.components.feature.prompts.ext.second
+import mozilla.components.feature.prompts.ext.toCalendar
+import mozilla.components.feature.prompts.ext.year
+import mozilla.components.feature.prompts.widget.MonthAndYearPicker
+import mozilla.components.feature.prompts.widget.TimePrecisionPicker
+import mozilla.components.support.utils.TimePicker.shouldShowSecondsPicker
+import mozilla.components.support.utils.ext.getSerializableCompat
+import mozilla.components.ui.widgets.withCenterAlignedButtons
+import java.util.Calendar
+import java.util.Date
+
+private const val KEY_INITIAL_DATE = "KEY_INITIAL_DATE"
+private const val KEY_MIN_DATE = "KEY_MIN_DATE"
+private const val KEY_MAX_DATE = "KEY_MAX_DATE"
+private const val KEY_SELECTED_DATE = "KEY_SELECTED_DATE"
+private const val KEY_SELECTION_TYPE = "KEY_SELECTION_TYPE"
+private const val KEY_STEP_VALUE = "KEY_STEP_VALUE"
+
+/**
+ * [DialogFragment][androidx.fragment.app.DialogFragment] implementation to display date picker with a native dialog.
+ */
+internal class TimePickerDialogFragment :
+ PromptDialogFragment(),
+ DatePicker.OnDateChangedListener,
+ TimePicker.OnTimeChangedListener,
+ TimePickerDialog.OnTimeSetListener,
+ DatePickerDialog.OnDateSetListener,
+ DialogInterface.OnClickListener,
+ MonthAndYearPicker.OnDateSetListener,
+ TimePrecisionPicker.OnTimeSetListener {
+ private val initialDate: Date by lazy {
+ safeArguments.getSerializableCompat(KEY_INITIAL_DATE, Date::class.java) as Date
+ }
+ private val minimumDate: Date? by lazy {
+ safeArguments.getSerializableCompat(KEY_MIN_DATE, Date::class.java) as? Date
+ }
+ private val maximumDate: Date? by lazy {
+ safeArguments.getSerializableCompat(KEY_MAX_DATE, Date::class.java) as? Date
+ }
+ private val selectionType: Int by lazy { safeArguments.getInt(KEY_SELECTION_TYPE) }
+ private val stepSize: String? by lazy { safeArguments.getString(KEY_STEP_VALUE) }
+
+ @VisibleForTesting(otherwise = PRIVATE)
+ internal var selectedDate: Date
+ get() = safeArguments.getSerializableCompat(KEY_SELECTED_DATE, Date::class.java) as Date
+ set(value) {
+ safeArguments.putSerializable(KEY_SELECTED_DATE, value)
+ }
+
+ @Suppress("ComplexMethod")
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+ val context = requireContext()
+ val dialog = when (selectionType) {
+ SELECTION_TYPE_TIME -> createTimePickerDialog(context)
+ SELECTION_TYPE_DATE -> initialDate.toCalendar().let { cal ->
+ DatePickerDialog(
+ context,
+ this@TimePickerDialogFragment,
+ cal.year,
+ cal.month,
+ cal.day,
+ ).apply { setMinMaxDate(datePicker) }
+ }
+ SELECTION_TYPE_DATE_AND_TIME -> AlertDialog.Builder(context)
+ .setView(inflateDateTimePicker(LayoutInflater.from(context)))
+ .create()
+ .also {
+ it.setButton(BUTTON_POSITIVE, context.getString(R.string.mozac_feature_prompts_set_date), this)
+ it.setButton(BUTTON_NEGATIVE, context.getString(R.string.mozac_feature_prompts_cancel), this)
+ }
+ SELECTION_TYPE_MONTH -> AlertDialog.Builder(context)
+ .setTitle(R.string.mozac_feature_prompts_set_month)
+ .setView(inflateDateMonthPicker())
+ .create()
+ .also {
+ it.setButton(BUTTON_POSITIVE, context.getString(R.string.mozac_feature_prompts_set_date), this)
+ it.setButton(BUTTON_NEGATIVE, context.getString(R.string.mozac_feature_prompts_cancel), this)
+ }
+ else -> throw IllegalArgumentException()
+ }
+
+ dialog.also {
+ it.setCancelable(true)
+ it.setButton(BUTTON_NEUTRAL, context.getString(R.string.mozac_feature_prompts_clear), this)
+ }
+
+ return dialog
+ }
+
+ /**
+ * Called when the user touches outside of the dialog.
+ */
+ override fun onCancel(dialog: DialogInterface) {
+ super.onCancel(dialog)
+ onClick(dialog, BUTTON_NEGATIVE)
+ }
+
+ override fun onStart() {
+ super.onStart()
+
+ val alertDialog = dialog
+ if (alertDialog is AlertDialog) {
+ // We want to call the extension function after the show() call on the dialog,
+ // and the DialogFragment does that call during onStart().
+ alertDialog.withCenterAlignedButtons()
+ }
+ }
+
+ // Create the appropriate time picker dialog for the given step value.
+ private fun createTimePickerDialog(context: Context): AlertDialog {
+ // Create the Android time picker dialog
+ fun createTimePickerDialog(): AlertDialog {
+ return initialDate.toCalendar().let { cal ->
+ TimePickerDialog(
+ context,
+ this,
+ cal.hour,
+ cal.minute,
+ DateFormat.is24HourFormat(context),
+ )
+ }
+ }
+
+ // Create the custom time picker dialog
+ fun createTimeStepPickerDialog(stepValue: Float): AlertDialog {
+ return AlertDialog.Builder(context)
+ .setTitle(R.string.mozac_feature_prompts_set_time)
+ .setView(
+ TimePrecisionPicker(
+ context = requireContext(),
+ selectedTime = initialDate.toCalendar(),
+ maxTime = maximumDate?.toCalendar()
+ ?: TimePrecisionPicker.getDefaultMaxTime(),
+ minTime = minimumDate?.toCalendar()
+ ?: TimePrecisionPicker.getDefaultMinTime(),
+ stepValue = stepValue,
+ timeSetListener = this,
+ ),
+ )
+ .create()
+ .also {
+ it.setButton(
+ BUTTON_POSITIVE,
+ context.getString(R.string.mozac_feature_prompts_set_date),
+ this,
+ )
+ it.setButton(
+ BUTTON_NEGATIVE,
+ context.getString(R.string.mozac_feature_prompts_cancel),
+ this,
+ )
+ }
+ }
+
+ return if (!shouldShowSecondsPicker(stepSize?.toFloat())) {
+ createTimePickerDialog()
+ } else {
+ stepSize?.let {
+ createTimeStepPickerDialog(it.toFloat())
+ } ?: createTimePickerDialog()
+ }
+ }
+
+ @SuppressLint("InflateParams")
+ private fun inflateDateTimePicker(inflater: LayoutInflater): View {
+ val view = inflater.inflate(R.layout.mozac_feature_prompts_date_time_picker, null)
+ val datePicker = view.findViewById<DatePicker>(R.id.date_picker)
+ val dateTimePicker = view.findViewById<TimePicker>(R.id.datetime_picker)
+ val cal = initialDate.toCalendar()
+
+ // Bind date picker
+ setMinMaxDate(datePicker)
+ datePicker.init(cal.year, cal.month, cal.day, this)
+ initTimePicker(dateTimePicker, cal)
+
+ return view
+ }
+
+ private fun inflateDateMonthPicker(): View {
+ return MonthAndYearPicker(
+ context = requireContext(),
+ selectedDate = initialDate.toCalendar(),
+ maxDate = maximumDate?.toCalendar() ?: MonthAndYearPicker.getDefaultMaxDate(),
+ minDate = minimumDate?.toCalendar() ?: MonthAndYearPicker.getDefaultMinDate(),
+ dateSetListener = this,
+ )
+ }
+
+ @Suppress("DEPRECATION")
+ private fun initTimePicker(picker: TimePicker, cal: Calendar) {
+ if (Build.VERSION.SDK_INT >= M) {
+ picker.hour = cal.hour
+ picker.minute = cal.minute
+ } else {
+ picker.currentHour = cal.hour
+ picker.currentMinute = cal.minute
+ }
+ picker.setIs24HourView(DateFormat.is24HourFormat(requireContext()))
+ picker.setOnTimeChangedListener(this)
+ }
+
+ private fun setMinMaxDate(datePicker: DatePicker) {
+ minimumDate?.let {
+ datePicker.minDate = it.time
+ }
+ maximumDate?.let {
+ datePicker.maxDate = it.time
+ }
+ }
+
+ override fun onTimeSet(
+ picker: TimePrecisionPicker,
+ hour: Int,
+ minute: Int,
+ second: Int,
+ millisecond: Int,
+ ) {
+ val calendar = selectedDate.toCalendar()
+ calendar.hour = hour
+ calendar.minute = minute
+ calendar.second = second
+ calendar.millisecond = millisecond
+ selectedDate = calendar.time
+ }
+
+ override fun onDateChanged(view: DatePicker?, year: Int, monthOfYear: Int, dayOfMonth: Int) {
+ val calendar = Calendar.getInstance()
+ calendar.set(year, monthOfYear, dayOfMonth)
+ selectedDate = calendar.time
+ }
+
+ override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) {
+ onDateChanged(view, year, month, dayOfMonth)
+ onClick(null, BUTTON_POSITIVE)
+ }
+
+ override fun onDateSet(picker: MonthAndYearPicker, month: Int, year: Int) {
+ onDateChanged(null, year, month, 0)
+ }
+
+ override fun onTimeChanged(picker: TimePicker?, hourOfDay: Int, minute: Int) {
+ val calendar = selectedDate.toCalendar()
+ calendar.set(Calendar.HOUR_OF_DAY, hourOfDay)
+ calendar.set(Calendar.MINUTE, minute)
+ selectedDate = calendar.time
+ }
+
+ override fun onTimeSet(view: TimePicker?, hourOfDay: Int, minute: Int) {
+ onTimeChanged(view, hourOfDay, minute)
+ onClick(null, BUTTON_POSITIVE)
+ }
+
+ override fun onClick(dialog: DialogInterface?, which: Int) {
+ when (which) {
+ BUTTON_POSITIVE -> feature?.onConfirm(sessionId, promptRequestUID, selectedDate)
+ BUTTON_NEGATIVE -> feature?.onCancel(sessionId, promptRequestUID)
+ BUTTON_NEUTRAL -> feature?.onClear(sessionId, promptRequestUID)
+ }
+ }
+
+ companion object {
+ /**
+ * A builder method for creating a [TimePickerDialogFragment]
+ * @param sessionId to create the dialog.
+ * @param promptRequestUID identifier of the [PromptRequest] for which this dialog is shown.
+ * @param shouldDismissOnLoad whether or not the dialog should automatically be dismissed
+ * when a new page is loaded.
+ * @param title of the dialog.
+ * @param initialDate date that will be selected by default.
+ * @param minDate the minimumDate date that will be allowed to be selected.
+ * @param maxDate the maximumDate date that will be allowed to be selected.
+ * @param selectionType indicate which type of time should be selected, valid values are
+ * ([TimePickerDialogFragment.SELECTION_TYPE_DATE], [TimePickerDialogFragment.SELECTION_TYPE_DATE_AND_TIME],
+ * and [TimePickerDialogFragment.SELECTION_TYPE_TIME])
+ * @param stepValue value of time jumped whenever the time is incremented/decremented.
+ *
+ * @return a new instance of [TimePickerDialogFragment]
+ */
+ fun newInstance(
+ sessionId: String,
+ promptRequestUID: String,
+ shouldDismissOnLoad: Boolean,
+ initialDate: Date,
+ minDate: Date?,
+ maxDate: Date?,
+ selectionType: Int = SELECTION_TYPE_DATE,
+ stepValue: String? = null,
+ ): TimePickerDialogFragment {
+ val fragment = TimePickerDialogFragment()
+ val arguments = fragment.arguments ?: Bundle()
+ fragment.arguments = arguments
+ with(arguments) {
+ putString(KEY_SESSION_ID, sessionId)
+ putString(KEY_PROMPT_UID, promptRequestUID)
+ putBoolean(KEY_SHOULD_DISMISS_ON_LOAD, shouldDismissOnLoad)
+ putSerializable(KEY_INITIAL_DATE, initialDate)
+ putSerializable(KEY_MIN_DATE, minDate)
+ putSerializable(KEY_MAX_DATE, maxDate)
+ putString(KEY_STEP_VALUE, stepValue)
+ putInt(KEY_SELECTION_TYPE, selectionType)
+ }
+ fragment.selectedDate = initialDate
+ return fragment
+ }
+
+ const val SELECTION_TYPE_DATE = 1
+ const val SELECTION_TYPE_DATE_AND_TIME = 2
+ const val SELECTION_TYPE_TIME = 3
+ const val SELECTION_TYPE_MONTH = 4
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/ext/Calendar.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/ext/Calendar.kt
new file mode 100644
index 0000000000..ac50247251
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/ext/Calendar.kt
@@ -0,0 +1,65 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+@file:Suppress("TooManyFunctions")
+
+package mozilla.components.feature.prompts.ext
+
+import java.util.Calendar
+import java.util.Date
+
+internal fun Date.toCalendar() = Calendar.getInstance().also { it.time = this }
+
+internal var Calendar.millisecond: Int
+ get() = get(Calendar.MILLISECOND)
+ set(value) {
+ set(Calendar.MILLISECOND, value)
+ }
+internal var Calendar.second: Int
+ get() = get(Calendar.SECOND)
+ set(value) {
+ set(Calendar.SECOND, value)
+ }
+internal var Calendar.minute: Int
+ get() = get(Calendar.MINUTE)
+ set(value) {
+ set(Calendar.MINUTE, value)
+ }
+internal var Calendar.hour: Int
+ get() = get(Calendar.HOUR_OF_DAY)
+ set(value) {
+ set(Calendar.HOUR_OF_DAY, value)
+ }
+internal var Calendar.day: Int
+ get() = get(Calendar.DAY_OF_MONTH)
+ set(value) {
+ set(Calendar.DAY_OF_MONTH, value)
+ }
+internal var Calendar.year: Int
+ get() = get(Calendar.YEAR)
+ set(value) {
+ set(Calendar.YEAR, value)
+ }
+
+internal var Calendar.month: Int
+ get() = get(Calendar.MONTH)
+ set(value) {
+ set(Calendar.MONTH, value)
+ }
+
+internal fun Calendar.minMillisecond(): Int = getActualMinimum(Calendar.MILLISECOND)
+internal fun Calendar.maxMillisecond(): Int = getActualMaximum(Calendar.MILLISECOND)
+internal fun Calendar.minSecond(): Int = getActualMinimum(Calendar.SECOND)
+internal fun Calendar.maxSecond(): Int = getActualMaximum(Calendar.SECOND)
+internal fun Calendar.minMinute(): Int = getActualMinimum(Calendar.MINUTE)
+internal fun Calendar.maxMinute(): Int = getActualMaximum(Calendar.MINUTE)
+internal fun Calendar.minHour(): Int = getActualMinimum(Calendar.HOUR_OF_DAY)
+internal fun Calendar.maxHour(): Int = getActualMaximum(Calendar.HOUR_OF_DAY)
+internal fun Calendar.minMonth(): Int = getMinimum(Calendar.MONTH)
+internal fun Calendar.maxMonth(): Int = getActualMaximum(Calendar.MONTH)
+internal fun Calendar.minDay(): Int = getMinimum(Calendar.DAY_OF_MONTH)
+internal fun Calendar.maxDay(): Int = getActualMaximum(Calendar.DAY_OF_MONTH)
+internal fun Calendar.minYear(): Int = getMinimum(Calendar.YEAR)
+internal fun Calendar.maxYear(): Int = getActualMaximum(Calendar.YEAR)
+internal fun now() = Calendar.getInstance()
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/ext/EditText.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/ext/EditText.kt
new file mode 100644
index 0000000000..370037df6a
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/ext/EditText.kt
@@ -0,0 +1,25 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.ext
+
+import android.view.inputmethod.EditorInfo
+import android.widget.EditText
+
+/**
+ * Extension function to handle keyboard Done action
+ * @param actionConsumed true if you have consumed the action, else false.
+ * @param onDonePressed callback to execute when Done key is pressed
+ */
+internal fun EditText.onDone(actionConsumed: Boolean, onDonePressed: () -> Unit) {
+ setOnEditorActionListener { _, actionId, _ ->
+ when (actionId) {
+ EditorInfo.IME_ACTION_DONE -> {
+ onDonePressed()
+ actionConsumed
+ }
+ else -> false
+ }
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/ext/PromptRequest.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/ext/PromptRequest.kt
new file mode 100644
index 0000000000..17db873e40
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/ext/PromptRequest.kt
@@ -0,0 +1,36 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.ext
+
+import mozilla.components.concept.engine.prompt.PromptRequest
+import mozilla.components.concept.engine.prompt.PromptRequest.Alert
+import mozilla.components.concept.engine.prompt.PromptRequest.Confirm
+import mozilla.components.concept.engine.prompt.PromptRequest.Popup
+import mozilla.components.concept.engine.prompt.PromptRequest.TextPrompt
+import kotlin.reflect.KClass
+
+/**
+ * List of all prompts who are not to be shown in fullscreen.
+ */
+@PublishedApi
+internal val PROMPTS_TO_EXIT_FULLSCREEN_FOR = listOf<KClass<out PromptRequest>>(
+ Alert::class,
+ TextPrompt::class,
+ Confirm::class,
+ Popup::class,
+)
+
+/**
+ * Convenience method for executing code if the current [PromptRequest] is one that
+ * should not be shown in fullscreen tabs.
+ */
+internal inline fun <reified T> T.executeIfWindowedPrompt(
+ block: () -> Unit,
+) where T : PromptRequest {
+ PROMPTS_TO_EXIT_FULLSCREEN_FOR
+ .firstOrNull {
+ this::class == it
+ }?.let { block.invoke() }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/facts/AddressAutofillDialogFacts.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/facts/AddressAutofillDialogFacts.kt
new file mode 100644
index 0000000000..c7142a12d1
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/facts/AddressAutofillDialogFacts.kt
@@ -0,0 +1,76 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.facts
+
+import mozilla.components.support.base.Component
+import mozilla.components.support.base.facts.Action
+import mozilla.components.support.base.facts.Fact
+import mozilla.components.support.base.facts.collect
+
+/**
+ * Facts emitted for telemetry related to the Autofill prompt feature for addresses.
+ */
+class AddressAutofillDialogFacts {
+ /**
+ * Specific types of telemetry items.
+ */
+ object Items {
+ const val AUTOFILL_ADDRESS_FORM_DETECTED = "autofill_address_form_detected"
+ const val AUTOFILL_ADDRESS_SUCCESS = "autofill_address_success"
+ const val AUTOFILL_ADDRESS_PROMPT_SHOWN = "autofill_address_prompt_shown"
+ const val AUTOFILL_ADDRESS_PROMPT_EXPANDED = "autofill_address_prompt_expanded"
+ const val AUTOFILL_ADDRESS_PROMPT_DISMISSED = "autofill_address_prompt_dismissed"
+ }
+}
+
+private fun emitAddressAutofillDialogFact(
+ action: Action,
+ item: String,
+ value: String? = null,
+ metadata: Map<String, Any>? = null,
+) {
+ Fact(
+ Component.FEATURE_PROMPTS,
+ action,
+ item,
+ value,
+ metadata,
+ ).collect()
+}
+
+internal fun emitSuccessfulAddressAutofillFormDetectedFact() {
+ emitAddressAutofillDialogFact(
+ Action.INTERACTION,
+ AddressAutofillDialogFacts.Items.AUTOFILL_ADDRESS_FORM_DETECTED,
+ )
+}
+
+internal fun emitSuccessfulAddressAutofillSuccessFact() {
+ emitAddressAutofillDialogFact(
+ Action.INTERACTION,
+ AddressAutofillDialogFacts.Items.AUTOFILL_ADDRESS_SUCCESS,
+ )
+}
+
+internal fun emitAddressAutofillShownFact() {
+ emitAddressAutofillDialogFact(
+ Action.INTERACTION,
+ AddressAutofillDialogFacts.Items.AUTOFILL_ADDRESS_PROMPT_SHOWN,
+ )
+}
+
+internal fun emitAddressAutofillExpandedFact() {
+ emitAddressAutofillDialogFact(
+ Action.INTERACTION,
+ AddressAutofillDialogFacts.Items.AUTOFILL_ADDRESS_PROMPT_EXPANDED,
+ )
+}
+
+internal fun emitAddressAutofillDismissedFact() {
+ emitAddressAutofillDialogFact(
+ Action.INTERACTION,
+ AddressAutofillDialogFacts.Items.AUTOFILL_ADDRESS_PROMPT_DISMISSED,
+ )
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/facts/CreditCardAutofillDialogFacts.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/facts/CreditCardAutofillDialogFacts.kt
new file mode 100644
index 0000000000..6160c82f52
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/facts/CreditCardAutofillDialogFacts.kt
@@ -0,0 +1,100 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.facts
+
+import mozilla.components.support.base.Component
+import mozilla.components.support.base.facts.Action
+import mozilla.components.support.base.facts.Fact
+import mozilla.components.support.base.facts.collect
+
+/**
+ * Facts emitted for telemetry related to the Autofill prompt feature for credit cards.
+ */
+class CreditCardAutofillDialogFacts {
+ /**
+ * Specific types of telemetry items.
+ */
+ object Items {
+ const val AUTOFILL_CREDIT_CARD_FORM_DETECTED = "autofill_credit_card_form_detected"
+ const val AUTOFILL_CREDIT_CARD_SUCCESS = "autofill_credit_card_success"
+ const val AUTOFILL_CREDIT_CARD_PROMPT_SHOWN = "autofill_credit_card_prompt_shown"
+ const val AUTOFILL_CREDIT_CARD_PROMPT_EXPANDED = "autofill_credit_card_prompt_expanded"
+ const val AUTOFILL_CREDIT_CARD_PROMPT_DISMISSED = "autofill_credit_card_prompt_dismissed"
+ const val AUTOFILL_CREDIT_CARD_CREATED = "autofill_credit_card_created"
+ const val AUTOFILL_CREDIT_CARD_UPDATED = "autofill_credit_card_updated"
+ const val AUTOFILL_CREDIT_CARD_SAVE_PROMPT_SHOWN = "autofill_credit_card_save_prompt_shown"
+ }
+}
+
+private fun emitCreditCardAutofillDialogFact(
+ action: Action,
+ item: String,
+ value: String? = null,
+ metadata: Map<String, Any>? = null,
+) {
+ Fact(
+ Component.FEATURE_PROMPTS,
+ action,
+ item,
+ value,
+ metadata,
+ ).collect()
+}
+
+internal fun emitSuccessfulCreditCardAutofillFormDetectedFact() {
+ emitCreditCardAutofillDialogFact(
+ Action.INTERACTION,
+ CreditCardAutofillDialogFacts.Items.AUTOFILL_CREDIT_CARD_FORM_DETECTED,
+ )
+}
+
+internal fun emitSuccessfulCreditCardAutofillSuccessFact() {
+ emitCreditCardAutofillDialogFact(
+ Action.INTERACTION,
+ CreditCardAutofillDialogFacts.Items.AUTOFILL_CREDIT_CARD_SUCCESS,
+ )
+}
+
+internal fun emitCreditCardAutofillShownFact() {
+ emitCreditCardAutofillDialogFact(
+ Action.INTERACTION,
+ CreditCardAutofillDialogFacts.Items.AUTOFILL_CREDIT_CARD_PROMPT_SHOWN,
+ )
+}
+
+internal fun emitCreditCardAutofillExpandedFact() {
+ emitCreditCardAutofillDialogFact(
+ Action.INTERACTION,
+ CreditCardAutofillDialogFacts.Items.AUTOFILL_CREDIT_CARD_PROMPT_EXPANDED,
+ )
+}
+
+internal fun emitCreditCardAutofillDismissedFact() {
+ emitCreditCardAutofillDialogFact(
+ Action.INTERACTION,
+ CreditCardAutofillDialogFacts.Items.AUTOFILL_CREDIT_CARD_PROMPT_DISMISSED,
+ )
+}
+
+internal fun emitCreditCardAutofillCreatedFact() {
+ emitCreditCardAutofillDialogFact(
+ Action.CONFIRM,
+ CreditCardAutofillDialogFacts.Items.AUTOFILL_CREDIT_CARD_CREATED,
+ )
+}
+
+internal fun emitCreditCardAutofillUpdatedFact() {
+ emitCreditCardAutofillDialogFact(
+ Action.CONFIRM,
+ CreditCardAutofillDialogFacts.Items.AUTOFILL_CREDIT_CARD_UPDATED,
+ )
+}
+
+internal fun emitCreditCardSaveShownFact() {
+ emitCreditCardAutofillDialogFact(
+ Action.DISPLAY,
+ CreditCardAutofillDialogFacts.Items.AUTOFILL_CREDIT_CARD_SAVE_PROMPT_SHOWN,
+ )
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/facts/LoginAutofillDialogFacts.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/facts/LoginAutofillDialogFacts.kt
new file mode 100644
index 0000000000..0098598137
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/facts/LoginAutofillDialogFacts.kt
@@ -0,0 +1,60 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.facts
+
+import mozilla.components.support.base.Component
+import mozilla.components.support.base.facts.Action
+import mozilla.components.support.base.facts.Fact
+import mozilla.components.support.base.facts.collect
+
+/**
+ * Facts emitted for telemetry related to the Autofill prompt feature for logins.
+ */
+class LoginAutofillDialogFacts {
+ /**
+ * Specific types of telemetry items.
+ */
+ object Items {
+ const val AUTOFILL_LOGIN_PROMPT_SHOWN = "autofill_login_prompt_shown"
+ const val AUTOFILL_LOGIN_PROMPT_DISMISSED = "autofill_login_prompt_dismissed"
+ const val AUTOFILL_LOGIN_PERFORMED = "autofill_login_performed"
+ }
+}
+
+private fun emitLoginAutofillDialogFact(
+ action: Action,
+ item: String,
+ value: String? = null,
+ metadata: Map<String, Any>? = null,
+) {
+ Fact(
+ Component.FEATURE_PROMPTS,
+ action,
+ item,
+ value,
+ metadata,
+ ).collect()
+}
+
+internal fun emitLoginAutofillShownFact() {
+ emitLoginAutofillDialogFact(
+ Action.INTERACTION,
+ LoginAutofillDialogFacts.Items.AUTOFILL_LOGIN_PROMPT_SHOWN,
+ )
+}
+
+internal fun emitLoginAutofillPerformedFact() {
+ emitLoginAutofillDialogFact(
+ Action.INTERACTION,
+ LoginAutofillDialogFacts.Items.AUTOFILL_LOGIN_PERFORMED,
+ )
+}
+
+internal fun emitLoginAutofillDismissedFact() {
+ emitLoginAutofillDialogFact(
+ Action.INTERACTION,
+ LoginAutofillDialogFacts.Items.AUTOFILL_LOGIN_PROMPT_DISMISSED,
+ )
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/facts/PromptFacts.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/facts/PromptFacts.kt
new file mode 100644
index 0000000000..c5374fe5aa
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/facts/PromptFacts.kt
@@ -0,0 +1,61 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.facts
+
+import mozilla.components.support.base.Component
+import mozilla.components.support.base.facts.Action
+import mozilla.components.support.base.facts.Fact
+import mozilla.components.support.base.facts.collect
+
+/**
+ * Facts emitted for different events related to the prompt feature.
+ */
+class PromptFacts {
+ /**
+ * Different events emitted by prompts.
+ */
+ object Items {
+ const val PROMPT = "PROMPT"
+ }
+}
+
+private fun emitFact(
+ action: Action,
+ item: String,
+ value: String? = null,
+ metadata: Map<String, Any>? = null,
+) {
+ Fact(
+ Component.FEATURE_PROMPTS,
+ action,
+ item,
+ value,
+ metadata,
+ ).collect()
+}
+
+internal fun emitPromptDisplayedFact(promptName: String) {
+ emitFact(
+ Action.DISPLAY,
+ PromptFacts.Items.PROMPT,
+ value = promptName,
+ )
+}
+
+internal fun emitPromptDismissedFact(promptName: String) {
+ emitFact(
+ Action.CANCEL,
+ PromptFacts.Items.PROMPT,
+ value = promptName,
+ )
+}
+
+internal fun emitPromptConfirmedFact(promptName: String) {
+ emitFact(
+ Action.CONFIRM,
+ PromptFacts.Items.PROMPT,
+ value = promptName,
+ )
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/file/FilePicker.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/file/FilePicker.kt
new file mode 100644
index 0000000000..a07fcab997
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/file/FilePicker.kt
@@ -0,0 +1,247 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.file
+
+import android.app.Activity
+import android.app.Activity.RESULT_OK
+import android.content.Context
+import android.content.Intent
+import android.content.Intent.EXTRA_INITIAL_INTENTS
+import android.content.pm.PackageManager.PERMISSION_GRANTED
+import android.net.Uri
+import android.provider.MediaStore.EXTRA_OUTPUT
+import androidx.annotation.VisibleForTesting
+import androidx.annotation.VisibleForTesting.Companion.PRIVATE
+import androidx.fragment.app.Fragment
+import mozilla.components.browser.state.selector.findCustomTabOrSelectedTab
+import mozilla.components.browser.state.store.BrowserStore
+import mozilla.components.concept.engine.prompt.PromptRequest
+import mozilla.components.concept.engine.prompt.PromptRequest.File
+import mozilla.components.feature.prompts.PromptContainer
+import mozilla.components.feature.prompts.consumePromptFrom
+import mozilla.components.support.base.feature.OnNeedToRequestPermissions
+import mozilla.components.support.base.feature.PermissionsFeature
+import mozilla.components.support.base.log.logger.Logger
+import mozilla.components.support.ktx.android.content.isPermissionGranted
+import mozilla.components.support.ktx.android.net.getFileName
+import mozilla.components.support.ktx.android.net.isUnderPrivateAppDirectory
+import mozilla.components.support.utils.ext.getParcelableExtraCompat
+
+/**
+ * The image capture intent doesn't return the URI where the image is saved,
+ * so we track it here.
+ *
+ * Top-level scoped to survive activity recreation in the "Don't keep activities" scenario.
+ */
+@VisibleForTesting
+internal var captureUri: Uri? = null
+
+/**
+ * @property container The [Activity] or [Fragment] which hosts the file picker.
+ * @property store The [BrowserStore] this feature should subscribe to.
+ * @property fileUploadsDirCleaner a [FileUploadsDirCleaner] to clean up temporary file uploads.
+ * @property onNeedToRequestPermissions a callback invoked when permissions
+ * need to be requested before a prompt (e.g. a file picker) can be displayed.
+ * Once the request is completed, [onPermissionsResult] needs to be invoked.
+ */
+internal class FilePicker(
+ private val container: PromptContainer,
+ private val store: BrowserStore,
+ private var sessionId: String? = null,
+ private var fileUploadsDirCleaner: FileUploadsDirCleaner,
+ override val onNeedToRequestPermissions: OnNeedToRequestPermissions,
+) : PermissionsFeature {
+
+ private val logger = Logger("FilePicker")
+
+ /**
+ * Cache of the current request to be used after permission is granted.
+ */
+ @VisibleForTesting
+ internal var currentRequest: PromptRequest? = null
+
+ @Suppress("ComplexMethod")
+ fun handleFileRequest(promptRequest: File, requestPermissions: Boolean = true) {
+ // Track which permissions are needed.
+ val neededPermissions = mutableSetOf<String>()
+ // Build a list of intents for capturing media and opening the file picker to combine later.
+ val intents = mutableListOf<Intent>()
+ captureUri = null
+
+ // Compare the accepted values against image/*, video/*, and audio/*
+ for (type in MimeType.values()) {
+ val hasPermission = container.context.isPermissionGranted(type.permission)
+ // The captureMode attribute can be used if the accepted types are exactly for
+ // image/*, video/*, or audio/*.
+ if (hasPermission && type.shouldCapture(
+ promptRequest.mimeTypes,
+ promptRequest.captureMode,
+ )
+ ) {
+ type.buildIntent(container.context, promptRequest)?.also {
+ saveCaptureUriIfPresent(it)
+ container.startActivityForResult(it, FILE_PICKER_ACTIVITY_REQUEST_CODE)
+ return
+ }
+ }
+ // Otherwise, build the intent and create a chooser later
+ if (type.matches(promptRequest.mimeTypes)) {
+ if (hasPermission) {
+ type.buildIntent(container.context, promptRequest)?.also {
+ saveCaptureUriIfPresent(it)
+ intents.add(it)
+ }
+ } else {
+ neededPermissions.addAll(type.permission)
+ }
+ }
+ }
+
+ val canSkipPermissionRequest = !requestPermissions && intents.isNotEmpty()
+
+ if (neededPermissions.isEmpty() || canSkipPermissionRequest) {
+ // Combine the intents together using a chooser.
+ val lastIntent = intents.removeAt(intents.lastIndex)
+ val chooser = Intent.createChooser(lastIntent, null).apply {
+ putExtra(EXTRA_INITIAL_INTENTS, intents.toTypedArray())
+ }
+
+ container.startActivityForResult(chooser, FILE_PICKER_ACTIVITY_REQUEST_CODE)
+ } else {
+ askAndroidPermissionsForRequest(neededPermissions, promptRequest)
+ }
+ }
+
+ /**
+ * Notifies the feature of intent results for prompt requests handled by
+ * other apps like file chooser requests.
+ *
+ * @param requestCode The code of the app that requested the intent.
+ * @param intent The result of the request.
+ */
+ fun onActivityResult(requestCode: Int, resultCode: Int, intent: Intent?): Boolean {
+ var resultHandled = false
+ val request = getActivePromptRequest() ?: return false
+ if (requestCode == FILE_PICKER_ACTIVITY_REQUEST_CODE && request is File) {
+ store.consumePromptFrom(sessionId, request.uid) {
+ if (resultCode == RESULT_OK) {
+ handleFilePickerIntentResult(intent, request)
+ } else {
+ request.onDismiss()
+ }
+ }
+ resultHandled = true
+ }
+ if (request !is File) {
+ logger.error("Invalid PromptRequest expected File but $request was provided")
+ }
+
+ return resultHandled
+ }
+
+ private fun getActivePromptRequest(): PromptRequest? =
+ store.state.findCustomTabOrSelectedTab(sessionId)?.content?.promptRequests?.lastOrNull { prompt ->
+ prompt is File
+ }
+
+ /**
+ * Notifies the feature that the permissions request was completed. It will then
+ * either process or dismiss the prompt request.
+ *
+ * @param permissions List of permission requested.
+ * @param grantResults The grant results for the corresponding permissions
+ * @see [onNeedToRequestPermissions].
+ */
+ override fun onPermissionsResult(permissions: Array<String>, grantResults: IntArray) {
+ if (grantResults.isNotEmpty() && grantResults.all { it == PERMISSION_GRANTED }) {
+ onPermissionsGranted()
+ } else {
+ onPermissionsDenied()
+ }
+ currentRequest = null
+ }
+
+ /**
+ * Used in conjunction with [onNeedToRequestPermissions], to notify the feature
+ * that all the required permissions have been granted, and the pending [PromptRequest]
+ * can be performed.
+ *
+ * If the required permission has not been granted
+ * [onNeedToRequestPermissions] will be called.
+ */
+ @VisibleForTesting(otherwise = PRIVATE)
+ internal fun onPermissionsGranted() {
+ // Try again handling the original request which we've cached before.
+ // Actually consuming it will be done in onActivityResult once the user returns from the file picker.
+ handleFileRequest(currentRequest as File, requestPermissions = false)
+ }
+
+ /**
+ * Used in conjunction with [onNeedToRequestPermissions] to notify the feature that one
+ * or more required permissions have been denied.
+ */
+ @VisibleForTesting(otherwise = PRIVATE)
+ internal fun onPermissionsDenied() {
+ // Nothing left to do. Consume / cleanup the requests.
+ store.consumePromptFrom<File>(sessionId) { request ->
+ request.onDismiss()
+ }
+ }
+
+ @VisibleForTesting(otherwise = PRIVATE)
+ internal fun handleFilePickerIntentResult(intent: Intent?, request: File) {
+ if (intent?.clipData != null && request.isMultipleFilesSelection) {
+ intent.clipData?.run {
+ val uris = Array<Uri>(itemCount) { index -> getItemAt(index).uri }
+ // We want to verify that we are not exposing any private data
+ val sanitizedUris = uris.removeUrisUnderPrivateAppDir(container.context)
+ if (sanitizedUris.isEmpty()) {
+ request.onDismiss()
+ } else {
+ sanitizedUris.map {
+ enqueueForCleanup(container.context, it)
+ }
+ request.onMultipleFilesSelected(container.context, sanitizedUris)
+ }
+ }
+ } else {
+ val uri = intent?.data ?: captureUri
+ uri?.let {
+ // We want to verify that we are not exposing any private data
+ if (!it.isUnderPrivateAppDirectory(container.context)) {
+ enqueueForCleanup(container.context, it)
+ request.onSingleFileSelected(container.context, it)
+ } else {
+ request.onDismiss()
+ }
+ } ?: request.onDismiss()
+ }
+
+ captureUri = null
+ }
+
+ private fun saveCaptureUriIfPresent(intent: Intent) =
+ intent.getParcelableExtraCompat(EXTRA_OUTPUT, Uri::class.java)?.let { captureUri = it }
+
+ @VisibleForTesting
+ fun askAndroidPermissionsForRequest(permissions: Set<String>, request: File) {
+ currentRequest = request
+ onNeedToRequestPermissions(permissions.toTypedArray())
+ }
+
+ private fun enqueueForCleanup(context: Context, uri: Uri) {
+ val contentResolver = context.contentResolver
+ val fileName = uri.getFileName(contentResolver)
+ fileUploadsDirCleaner.enqueueForCleanup(fileName)
+ }
+
+ companion object {
+ const val FILE_PICKER_ACTIVITY_REQUEST_CODE = 7113
+ }
+}
+
+internal fun Array<Uri>.removeUrisUnderPrivateAppDir(context: Context): Array<Uri> {
+ return this.filter { !it.isUnderPrivateAppDirectory(context) }.toTypedArray()
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/file/FileUploadsDirCleaner.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/file/FileUploadsDirCleaner.kt
new file mode 100644
index 0000000000..5a87b6ab00
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/file/FileUploadsDirCleaner.kt
@@ -0,0 +1,86 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.file
+
+import androidx.annotation.VisibleForTesting
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.DelicateCoroutinesApi
+import kotlinx.coroutines.Dispatchers.IO
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
+import mozilla.components.concept.engine.prompt.PromptRequest.File.Companion.DEFAULT_UPLOADS_DIR_NAME
+import mozilla.components.support.base.log.logger.Logger
+import java.io.File
+import java.io.IOException
+
+/**
+ * A storage implementation for organizing temporal uploads metadata to be clean up.
+ */
+@OptIn(DelicateCoroutinesApi::class)
+class FileUploadsDirCleaner(
+ private val scope: CoroutineScope = GlobalScope,
+ private val cacheDirectory: () -> File,
+) {
+ private val logger = Logger("FileUploadsDirCleaner")
+
+ private val cacheDir by lazy { cacheDirectory() }
+
+ @VisibleForTesting
+ internal var fileNamesToBeDeleted: List<String> = emptyList()
+
+ @VisibleForTesting
+ internal var dispatcher: CoroutineDispatcher = IO
+
+ /**
+ * Enqueue the [fileName] for future clean up.
+ */
+ internal fun enqueueForCleanup(fileName: String) {
+ fileNamesToBeDeleted += (fileName)
+ logger.info("File $fileName added to the upload cleaning queue.")
+ }
+
+ /**
+ * Remove all the temporary file uploads.
+ */
+ internal fun cleanRecentUploads() {
+ scope.launch(dispatcher) {
+ val cacheUploadDirectory = File(getCacheDir(), DEFAULT_UPLOADS_DIR_NAME)
+ fileNamesToBeDeleted = fileNamesToBeDeleted.filter { fileName ->
+ try {
+ File(cacheUploadDirectory, fileName).delete()
+ logger.info("Temporal file $fileName deleted")
+ false
+ } catch (e: IOException) {
+ logger.error("Unable to delete the temporal file $fileName", e)
+ true
+ }
+ }
+ }
+ }
+
+ /**
+ * Remove the file uploads directory if exists.
+ */
+ suspend fun cleanUploadsDirectory() {
+ withContext(dispatcher) {
+ val cacheUploadDirectory = File(getCacheDir(), DEFAULT_UPLOADS_DIR_NAME)
+ if (cacheUploadDirectory.exists()) {
+ // To not collide with users uploading while, we are cleaning
+ // previous files, lets rename the directory.
+ val cacheUploadDirectoryToDelete = File(getCacheDir(), "/uploads_to_be_deleted")
+
+ cacheUploadDirectory.renameTo(cacheUploadDirectoryToDelete)
+ cacheUploadDirectoryToDelete.deleteRecursively()
+ logger.info("Removed the temporal files under /uploads")
+ }
+ }
+ }
+
+ private suspend fun getCacheDir(): File = withContext(dispatcher) {
+ cacheDir
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/file/FileUploadsDirCleanerMiddleware.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/file/FileUploadsDirCleanerMiddleware.kt
new file mode 100644
index 0000000000..41fb56ea59
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/file/FileUploadsDirCleanerMiddleware.kt
@@ -0,0 +1,40 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.file
+
+import mozilla.components.browser.state.action.BrowserAction
+import mozilla.components.browser.state.action.ContentAction
+import mozilla.components.browser.state.action.TabListAction
+import mozilla.components.browser.state.state.BrowserState
+import mozilla.components.lib.state.Middleware
+import mozilla.components.lib.state.MiddlewareContext
+
+/**
+ * [Middleware] that observe when a user navigates away from a site and clean up,
+ * temporary file uploads.
+ */
+class FileUploadsDirCleanerMiddleware(
+ private val fileUploadsDirCleaner: FileUploadsDirCleaner,
+) : Middleware<BrowserState, BrowserAction> {
+
+ override fun invoke(
+ context: MiddlewareContext<BrowserState, BrowserAction>,
+ next: (BrowserAction) -> Unit,
+ action: BrowserAction,
+ ) {
+ when (action) {
+ is TabListAction.SelectTabAction,
+ is ContentAction.UpdateUrlAction,
+ is ContentAction.UpdateLoadRequestAction,
+ -> {
+ fileUploadsDirCleaner.cleanRecentUploads()
+ }
+ else -> {
+ // no-op
+ }
+ }
+ next(action)
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/file/MimeType.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/file/MimeType.kt
new file mode 100644
index 0000000000..4f40081ebb
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/file/MimeType.kt
@@ -0,0 +1,187 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.file
+
+import android.Manifest.permission.CAMERA
+import android.Manifest.permission.READ_EXTERNAL_STORAGE
+import android.Manifest.permission.READ_MEDIA_AUDIO
+import android.Manifest.permission.READ_MEDIA_IMAGES
+import android.Manifest.permission.READ_MEDIA_VIDEO
+import android.Manifest.permission.READ_MEDIA_VISUAL_USER_SELECTED
+import android.Manifest.permission.RECORD_AUDIO
+import android.annotation.SuppressLint
+import android.content.Context
+import android.content.Intent
+import android.content.Intent.ACTION_GET_CONTENT
+import android.content.Intent.CATEGORY_OPENABLE
+import android.content.Intent.EXTRA_ALLOW_MULTIPLE
+import android.content.Intent.EXTRA_LOCAL_ONLY
+import android.content.Intent.EXTRA_MIME_TYPES
+import android.net.Uri
+import android.os.Build
+import android.provider.MediaStore.ACTION_IMAGE_CAPTURE
+import android.provider.MediaStore.ACTION_VIDEO_CAPTURE
+import android.provider.MediaStore.Audio.Media.RECORD_SOUND_ACTION
+import android.provider.MediaStore.EXTRA_OUTPUT
+import android.webkit.MimeTypeMap
+import androidx.core.content.FileProvider.getUriForFile
+import mozilla.components.concept.engine.prompt.PromptRequest.File
+import java.io.IOException
+import java.text.SimpleDateFormat
+import java.util.Date
+import java.util.Locale.US
+
+internal sealed class MimeType(
+ private val type: String,
+ val permission: List<String>,
+) {
+
+ data class Image(
+ private val getUri: (Context, String, java.io.File) -> Uri = { context, authority, file ->
+ getUriForFile(context, authority, file)
+ },
+ ) : MimeType(
+ "image/",
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
+ listOf(CAMERA, READ_MEDIA_IMAGES, READ_MEDIA_VISUAL_USER_SELECTED)
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ listOf(CAMERA, READ_MEDIA_IMAGES)
+ } else {
+ listOf(CAMERA)
+ },
+ ) {
+ /**
+ * Build an image capture intent using the application FileProvider.
+ * A FileProvider must be defined in your AndroidManifest.xml, see
+ * https://developer.android.com/training/camera/photobasics#TaskPath
+ */
+ override fun buildIntent(context: Context, request: File): Intent? {
+ val intent = Intent(ACTION_IMAGE_CAPTURE).withDeviceSupport(context) ?: return null
+
+ val photoFile = try {
+ val filename = SimpleDateFormat("yyyy-MM-ddHH.mm.ss", US).format(Date())
+ java.io.File.createTempFile(filename, ".jpg", context.cacheDir)
+ } catch (e: IOException) {
+ return null
+ }
+
+ val photoUri = getUri(context, "${context.packageName}.feature.prompts.fileprovider", photoFile)
+
+ return intent.apply { putExtra(EXTRA_OUTPUT, photoUri) }.addCaptureHint(request.captureMode)
+ }
+ }
+
+ object Video : MimeType(
+ "video/",
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
+ listOf(CAMERA, READ_MEDIA_VIDEO, READ_MEDIA_VISUAL_USER_SELECTED)
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ listOf(CAMERA, READ_MEDIA_VIDEO)
+ } else {
+ listOf(CAMERA)
+ },
+ ) {
+ override fun buildIntent(context: Context, request: File) =
+ Intent(ACTION_VIDEO_CAPTURE).withDeviceSupport(context)?.addCaptureHint(request.captureMode)
+ }
+
+ object Audio : MimeType(
+ "audio/",
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ listOf(RECORD_AUDIO, READ_MEDIA_AUDIO)
+ } else {
+ listOf(RECORD_AUDIO)
+ },
+ ) {
+ override fun buildIntent(context: Context, request: File) =
+ Intent(RECORD_SOUND_ACTION).withDeviceSupport(context)
+ }
+
+ object Wildcard : MimeType(
+ "*/",
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ listOf(READ_MEDIA_IMAGES, READ_MEDIA_AUDIO, READ_MEDIA_VIDEO)
+ } else {
+ listOf(READ_EXTERNAL_STORAGE)
+ },
+ ) {
+ private val mimeTypeMap = MimeTypeMap.getSingleton()
+
+ override fun matches(mimeTypes: Array<out String>) = true
+
+ override fun shouldCapture(mimeTypes: Array<out String>, capture: File.FacingMode) = false
+
+ override fun buildIntent(context: Context, request: File) =
+ Intent(ACTION_GET_CONTENT).apply {
+ type = "*/*"
+ addCategory(CATEGORY_OPENABLE)
+ putExtra(EXTRA_LOCAL_ONLY, true)
+ if (request.mimeTypes.isNotEmpty()) {
+ val types = request.mimeTypes
+ .map {
+ if (it.contains("/")) {
+ it
+ } else {
+ mimeTypeMap.getMimeTypeFromExtension(it) ?: "*/*"
+ }
+ }
+ .toTypedArray()
+ putExtra(EXTRA_MIME_TYPES, types)
+ }
+ putExtra(EXTRA_ALLOW_MULTIPLE, request.isMultipleFilesSelection)
+ }
+ }
+
+ /**
+ * True if any of the given mime values match this type. If no values are specified, then
+ * there will not be a match.
+ */
+ open fun matches(mimeTypes: Array<out String>) =
+ mimeTypes.isNotEmpty() && mimeTypes.any { it.startsWith(type) }
+
+ open fun shouldCapture(mimeTypes: Array<out String>, capture: File.FacingMode) =
+ capture != File.FacingMode.NONE &&
+ mimeTypes.isNotEmpty() &&
+ mimeTypes.all { it.startsWith(type) }
+
+ abstract fun buildIntent(context: Context, request: File): Intent?
+
+ companion object {
+ /**
+ * List of all MimeTypes that can be iterated
+ */
+ fun values() = listOf(Image(), Video, Audio, Wildcard)
+
+ const val CAMERA_FACING = "android.intent.extras.CAMERA_FACING"
+ const val LENS_FACING_FRONT = "android.intent.extras.LENS_FACING_FRONT"
+ const val USE_FRONT_CAMERA = "android.intent.extra.USE_FRONT_CAMERA"
+ const val LENS_FACING_BACK = "android.intent.extras.LENS_FACING_BACK"
+ const val USE_BACK_CAMERA = "android.intent.extra.USE_BACK_CAMERA"
+ }
+}
+
+/**
+ * Return the intent only if its type has any corresponding apps on the device.
+ */
+@SuppressLint("QueryPermissionsNeeded") // We expect our browsers to have the QUERY_ALL_PACKAGES permission
+private fun Intent.withDeviceSupport(context: Context) =
+ if (resolveActivity(context.packageManager) != null) this else null
+
+/**
+ * Hacky request for specific camera orientation
+ * https://stackoverflow.com/questions/43841738
+ */
+private fun Intent.addCaptureHint(capture: File.FacingMode): Intent? {
+ if (capture == File.FacingMode.FRONT_CAMERA) {
+ putExtra(MimeType.CAMERA_FACING, 1)
+ putExtra(MimeType.LENS_FACING_FRONT, 1)
+ putExtra(MimeType.USE_FRONT_CAMERA, true)
+ } else if (capture == File.FacingMode.BACK_CAMERA) {
+ putExtra(MimeType.CAMERA_FACING, 0)
+ putExtra(MimeType.LENS_FACING_BACK, 1)
+ putExtra(MimeType.USE_BACK_CAMERA, true)
+ }
+ return this
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/DialogColors.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/DialogColors.kt
new file mode 100644
index 0000000000..246d8b2cb0
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/DialogColors.kt
@@ -0,0 +1,57 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.identitycredential
+
+import androidx.compose.material.ContentAlpha
+import androidx.compose.material.MaterialTheme
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.graphics.Color
+
+/**
+ * Represents the colors used by the dialogs.
+ */
+data class DialogColors(
+ val title: Color,
+ val description: Color,
+) {
+
+ companion object {
+
+ /**
+ * Creates an [DialogColors] that represents the default colors used in an
+ * IdentityCredential dialog.
+ *
+ * @param title The text color for the title of a suggestion.
+ * @param description The text color for the description of a suggestion.
+ */
+ @Composable
+ fun default(
+ title: Color = MaterialTheme.colors.onBackground,
+ description: Color = MaterialTheme.colors.onBackground.copy(
+ alpha = ContentAlpha.medium,
+ ),
+ ) = DialogColors(
+ title,
+ description,
+ )
+
+ /**
+ * Creates a provider that provides the default [DialogColors]
+ */
+ fun defaultProvider() = DialogColorsProvider { default() }
+ }
+}
+
+/**
+ * An [DialogColorsProvider] implementation can provide an [DialogColors]
+ */
+fun interface DialogColorsProvider {
+
+ /**
+ * Provides [DialogColors]
+ */
+ @Composable
+ fun provideColors(): DialogColors
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/IdentityCredentialItem.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/IdentityCredentialItem.kt
new file mode 100644
index 0000000000..e89ce54259
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/IdentityCredentialItem.kt
@@ -0,0 +1,106 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.identitycredential
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import mozilla.components.feature.prompts.identitycredential.previews.DialogPreviewMaterialTheme
+import mozilla.components.feature.prompts.identitycredential.previews.LightDarkPreview
+
+/**
+ * List item used to display an IdentityCredential item that supports clicks
+ *
+ * @param title the Title of the item
+ * @param description The Description of the item.
+ * @param modifier The modifier to apply to this layout.
+ * @param onClick Invoked when the item is clicked.
+ * @param beforeItemContent An optional layout to display before the item.
+ *
+ */
+@Composable
+internal fun IdentityCredentialItem(
+ title: String,
+ description: String,
+ modifier: Modifier = Modifier,
+ colors: DialogColors = DialogColors.default(),
+ onClick: () -> Unit,
+ beforeItemContent: (@Composable () -> Unit)? = null,
+) {
+ Row(
+ modifier = modifier
+ .fillMaxWidth()
+ .clickable(onClick = onClick)
+ .padding(horizontal = 16.dp, vertical = 6.dp),
+ verticalAlignment = Alignment.CenterVertically,
+ ) {
+ beforeItemContent?.invoke()
+
+ Column {
+ Text(
+ text = title,
+ style = TextStyle(
+ fontSize = 16.sp,
+ lineHeight = 24.sp,
+ color = colors.title,
+ letterSpacing = 0.15.sp,
+ ),
+ maxLines = 1,
+ )
+
+ Text(
+ text = description,
+ style = TextStyle(
+ fontSize = 14.sp,
+ lineHeight = 20.sp,
+ color = colors.description,
+ letterSpacing = 0.25.sp,
+ ),
+ maxLines = 1,
+ )
+ }
+ }
+}
+
+@Composable
+@LightDarkPreview
+private fun ProviderItemPreview() {
+ DialogPreviewMaterialTheme {
+ IdentityCredentialItem(
+ modifier = Modifier.background(MaterialTheme.colors.background),
+ title = "Title",
+ description = "Description",
+ onClick = {},
+ )
+ }
+}
+
+@Composable
+@Preview(name = "Provider with a start-spacer")
+private fun ProviderItemPreviewWithSpacer() {
+ IdentityCredentialItem(
+ modifier = Modifier.background(Color.White),
+ title = "Title",
+ description = "Description",
+ onClick = {},
+ ) {
+ Spacer(modifier = Modifier.size(24.dp))
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/PrivacyPolicyDialogFragment.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/PrivacyPolicyDialogFragment.kt
new file mode 100644
index 0000000000..60db3c282d
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/PrivacyPolicyDialogFragment.kt
@@ -0,0 +1,130 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.identitycredential
+
+import android.app.Dialog
+import android.content.DialogInterface
+import android.os.Bundle
+import android.text.SpannableStringBuilder
+import android.text.method.LinkMovementMethod
+import android.text.style.ClickableSpan
+import android.text.style.URLSpan
+import android.view.LayoutInflater
+import android.view.View
+import android.widget.TextView
+import androidx.appcompat.app.AlertDialog
+import androidx.core.text.HtmlCompat
+import androidx.core.text.getSpans
+import mozilla.components.feature.prompts.R
+import mozilla.components.feature.prompts.dialog.AbstractPromptTextDialogFragment
+import mozilla.components.feature.prompts.dialog.KEY_MESSAGE
+import mozilla.components.feature.prompts.dialog.KEY_PROMPT_UID
+import mozilla.components.feature.prompts.dialog.KEY_SESSION_ID
+import mozilla.components.feature.prompts.dialog.KEY_SHOULD_DISMISS_ON_LOAD
+import mozilla.components.feature.prompts.dialog.KEY_TITLE
+
+internal const val KEY_ICON = "KEY_ICON"
+
+/**
+ * [ A Federated Credential Management dialog for showing a privacy policy.
+ */
+internal class PrivacyPolicyDialogFragment : AbstractPromptTextDialogFragment() {
+
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+ val builder = AlertDialog.Builder(requireContext())
+ .setTitle(title)
+ .setCancelable(true)
+ .setPositiveButton(R.string.mozac_feature_prompts_identity_credentials_continue) { _, _ ->
+ onConfirmAction(true)
+ }
+ .setNegativeButton(R.string.mozac_feature_prompts_identity_credentials_cancel) { _, _ ->
+ onConfirmAction(false)
+ }
+
+ return setMessage(builder)
+ .create()
+ }
+
+ internal fun setMessage(builder: AlertDialog.Builder): AlertDialog.Builder {
+ val inflater = LayoutInflater.from(requireContext())
+ val view = inflater.inflate(R.layout.mozac_feature_prompt_simple_text, null)
+ val textView = view.findViewById<TextView>(R.id.labelView)
+ val text = HtmlCompat.fromHtml(message, HtmlCompat.FROM_HTML_MODE_COMPACT)
+
+ val spannableStringBuilder = SpannableStringBuilder(text)
+ spannableStringBuilder.getSpans<URLSpan>().forEach { link ->
+ addActionToLinks(spannableStringBuilder, link)
+ }
+ textView.text = spannableStringBuilder
+ textView.movementMethod = LinkMovementMethod.getInstance()
+
+ builder.setView(view)
+
+ return builder
+ }
+
+ override fun onCancel(dialog: DialogInterface) {
+ super.onCancel(dialog)
+ feature?.onCancel(sessionId, promptRequestUID)
+ }
+
+ private fun addActionToLinks(
+ spannableStringBuilder: SpannableStringBuilder,
+ link: URLSpan,
+ ) {
+ val start = spannableStringBuilder.getSpanStart(link)
+ val end = spannableStringBuilder.getSpanEnd(link)
+ val flags = spannableStringBuilder.getSpanFlags(link)
+ val clickable: ClickableSpan = object : ClickableSpan() {
+ override fun onClick(view: View) {
+ view.setOnClickListener {
+ dismiss()
+ feature?.onOpenLink(link.url)
+ }
+ }
+ }
+ spannableStringBuilder.setSpan(clickable, start, end, flags)
+ spannableStringBuilder.removeSpan(link)
+ }
+
+ private fun onConfirmAction(confirmed: Boolean) {
+ feature?.onConfirm(sessionId, promptRequestUID, confirmed)
+ }
+
+ companion object {
+ /**
+ * A builder method for creating a [PrivacyPolicyDialogFragment]
+ * @param sessionId to create the dialog.
+ * @param promptRequestUID identifier of the [PromptRequest] for which this dialog is shown.
+ * @param shouldDismissOnLoad whether or not the dialog should automatically be dismissed
+ * when a new page is loaded.
+ * @param title the title of the dialog.
+ * @param message the message of the dialog.
+ * @param icon an icon of the provider.
+ */
+ fun newInstance(
+ sessionId: String,
+ promptRequestUID: String,
+ shouldDismissOnLoad: Boolean,
+ title: String,
+ message: String,
+ icon: String?,
+ ): PrivacyPolicyDialogFragment {
+ val fragment = PrivacyPolicyDialogFragment()
+ val arguments = fragment.arguments ?: Bundle()
+
+ with(arguments) {
+ putString(KEY_SESSION_ID, sessionId)
+ putString(KEY_PROMPT_UID, promptRequestUID)
+ putString(KEY_TITLE, title)
+ putString(KEY_MESSAGE, message)
+ putBoolean(KEY_SHOULD_DISMISS_ON_LOAD, shouldDismissOnLoad)
+ putString(KEY_ICON, icon)
+ }
+ fragment.arguments = arguments
+ return fragment
+ }
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/SelectAccountDialog.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/SelectAccountDialog.kt
new file mode 100644
index 0000000000..2054053b49
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/SelectAccountDialog.kt
@@ -0,0 +1,172 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.identitycredential
+
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.width
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.asImageBitmap
+import androidx.compose.ui.layout.ContentScale
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import mozilla.components.concept.identitycredential.Account
+import mozilla.components.concept.identitycredential.Provider
+import mozilla.components.feature.prompts.R
+import mozilla.components.feature.prompts.identitycredential.previews.DialogPreviewMaterialTheme
+import mozilla.components.feature.prompts.identitycredential.previews.LightDarkPreview
+import mozilla.components.support.ktx.kotlin.base64ToBitmap
+
+/**
+ * A Federated Credential Management dialog for selecting an account.
+ *
+ * @param provider The [Provider] on which the user is logging in.
+ * @param colors The colors of the dialog.
+ * @param accounts The list of available accounts for this provider.
+ * @param modifier [Modifier] to be applied to the layout.
+ * @param onAccountClick Invoked when the user clicks on an item.
+ */
+@Composable
+fun SelectAccountDialog(
+ provider: Provider,
+ accounts: List<Account>,
+ modifier: Modifier = Modifier,
+ colors: DialogColors = DialogColors.default(),
+ onAccountClick: (Account) -> Unit,
+) {
+ Column(
+ modifier = modifier.fillMaxWidth(),
+ ) {
+ Row(
+ verticalAlignment = Alignment.CenterVertically,
+ modifier = Modifier.padding(16.dp),
+ ) {
+ provider.icon?.base64ToBitmap()?.asImageBitmap()?.let {
+ Image(
+ bitmap = it,
+ contentDescription = null,
+ contentScale = ContentScale.FillWidth,
+ modifier = Modifier
+ .size(16.dp),
+ )
+
+ Spacer(Modifier.width(4.dp))
+ }
+
+ Text(
+ text = stringResource(
+ id = R.string.mozac_feature_prompts_identity_credentials_choose_account_for_provider,
+ provider.name,
+ ),
+ style = TextStyle(
+ fontSize = 16.sp,
+ lineHeight = 24.sp,
+ color = colors.title,
+ letterSpacing = 0.15.sp,
+ ),
+ )
+ }
+
+ accounts.forEach { account ->
+ AccountItem(account = account, colors = colors, onClick = onAccountClick)
+ }
+
+ Spacer(modifier = Modifier.height(16.dp))
+ }
+}
+
+@Composable
+private fun AccountItem(
+ account: Account,
+ modifier: Modifier = Modifier,
+ colors: DialogColors = DialogColors.default(),
+ onClick: (Account) -> Unit,
+) {
+ IdentityCredentialItem(
+ title = account.name,
+ description = account.email,
+ colors = colors,
+ modifier = modifier,
+ onClick = { onClick(account) },
+ ) {
+ account.icon?.base64ToBitmap()?.asImageBitmap()?.let { bitmap ->
+ Image(
+ bitmap = bitmap,
+ contentDescription = null,
+ contentScale = ContentScale.FillWidth,
+ modifier = Modifier
+ .padding(horizontal = 16.dp)
+ .size(32.dp),
+ )
+ } ?: Spacer(
+ Modifier
+ .padding(horizontal = 16.dp)
+ .width(32.dp),
+ )
+ }
+}
+
+@Composable
+@Preview(name = "Provider with no favicon")
+private fun AccountItemPreview() {
+ AccountItem(
+ modifier = Modifier.background(Color.White),
+ account = Account(
+ 0,
+ "user@mozilla.com",
+ "User",
+ USER_PICTURE,
+ ),
+ onClick = {},
+ )
+}
+
+@Composable
+@LightDarkPreview
+private fun SelectAccountDialogPreview() {
+ DialogPreviewMaterialTheme {
+ SelectAccountDialog(
+ provider = Provider(0, GOOGLE_FAVICON, "Google", "google.com"),
+ accounts = listOf(
+ Account(
+ 0,
+ "user@mozilla.com",
+ "User",
+ USER_PICTURE,
+ ),
+ Account(
+ 1,
+ "user2@mozilla.com",
+ "Google",
+ null,
+ ),
+ ),
+ modifier = Modifier.background(Color.White),
+ onAccountClick = { },
+ )
+ }
+}
+
+@Suppress("MaxLineLength")
+private const val GOOGLE_FAVICON =
+ "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAARCAYAAADUryzEAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAH+SURBVHgBhVO/b9NQEL5z7Bi1lWJUCYRYHBaWDh6SKhspAYnRoVO3SqxIbiUGEEIRQ1kbxB9AM7VISJiNoSUeI6DCYmSpt1ZUak2U0GLXuZ7dOnUsp73l+e593/343hkhZYePKqp/EhhAoLOrRkEEmwgd/mrd3PpmJvGYdPbvl1cJYQkuMQI085KwfP1Lxwl9Mb74Uyu/J4BFuMIEoKp/HCixHyXYf1BqEF2QuS13gPQ2P1OyQt//ta0CYgOBFApg7ob13R5ij9rX1P67uzuDv/k45ASBMHfLOmsxabvVipqOo78pNZls/Nu8Df7vAgRBrphFHmfhCPeEggdT8zvg2dNrk8/2Rsi1N12dx1OyyIjghgnUOCBrB5/TIAJhNYkZuSNwBT4vsiNlVrrEFJHf3UE6q7DtTfO5N4Jg5W3u1Um0pPBza+eeE4nIH8aHozvQ7M+4J3JQtOumO65kbaU33BfWwOK9IPN5dzYkRy1JntAYR3640tOSy8YatKJVLm3Mt/moJrAWEL7+sfDRCp3qJ13peYIxsft0SezPxjo5X19OFaMEGgOk/7mflK12OM5QXPlAB/mwDjjA+tarSXP4M1XWdXVCLrS7Xi8ryUhCsV9a7jx5sRbpkL4trz9eJBQMnlBLExncypHU7CxsOHEQx5WJ5j4WoyQiiE6SlLRTu5e/Z+DrlXsAAAAASUVORK5CYII="
+
+@Suppress("MaxLineLength")
+private const val USER_PICTURE =
+ "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAtfSURBVHgBnVdbbFv1Gf/Z52If28c+dnyLndgnl15D2iRNadrSNoUxAkgjTCBg08T6hrYHyrQXNE2UbdK0p5WnsT3Rt0p74DJQkabSZlxWCr3RdM2N1Ekcx3cf34/tc4732WiVmDpAi2Qlsezzff/v+93+JnzHn9nZWYnTq7O6YRxrqo0xk4mRg8F+yTDaaDYbisMhxSx2x3WfLzDXQuOtU6dOKd/luaZv+8DM9JTMW/gXXc6en8LMSI1mHWq9DrQN+Hx9YFm20wDMZgYw84hGBmG022ibzW9YbeZXX3755dj/1cDs9LRUN+qvaK3WSYblEQiGIPb4UFNrKBZyYM1m+AMRWK02qNUyqoUkBI6FzR2EwQjwB4NgWAuaevu0JoivnnrpxD0nYr538SlZNzWv8Qx7stNjm95rtFpgrQ44Pb2wii7oZhNcHh9EpwtGQ4GoZ6CXNwFlDVbeDLWpo6RWYZiNk1yrfu3U7/8k36sW899v/OxHT495fcFzkscrO0QnTVqnT7GwO50wTG3YnG7wdGrCALzeIDjOAqa8ilx6i1ahQ6moiAYlpDQWhpWBYLXAzFkk3dBmD91/eO7DDz9I/s8GZqbGZKvDeY7nGNnh8cLEcmgaBn2KAW+hBzEcbA4PgoEQ7DYRvGCnJnxobFzCRjwLtWGg0WzC0Ktw9IRRbrSgai3ksxlwbUj5XHbG5w2+vbKycHcd7H/+mJ4ek9SqcWFifK/cpkMvxTOwOkSIHgb52CLsNPZQWAZnFZGi025trEIe3oUjE8NYOVeCUmyCZXR0+q1Wq9gXFmGRp2CihxlNDRwdIpNKyt6A78IzzzwxfuLEV5i42wCqxisWwSZfuXoF49u9eGhPCDfWCHAtwOHyYWjbKNzuHsTia9hMrMMheVEvl6DGL0OnUzPmNvRWZ1gManU6gaFBDofgcDhQq9VgF2wYHh5CrVKSTTBeoYov3V3B1NhO2WQ2neU5Di3DBJvkRyaTwfcO7UR/wNM9XZBOrxTLuLO2BDeNXXK5EXTbYMlcRTpfpoJm1MoNWEkX7E4bJg5M4p0338TNG1dxZ2URiXiMfi/gy6UF5ArKlFsSz8zPzyvdBsLR6B9FURrroJ2hPavgqYAL6VQSOyIeHD2wC5OyFVG/gEy+BJNWR1Qy40CfgWuXPkYLApIZ0gdFJSoKNB0HgqEeCK4gPpi7iEq9SnQVsHTrChbmr2Bp8RbSWxumza30+8w08V3Xcdbl9qFKAlMoKSgoReJ8LwJ0Qq1agFsU0COaEe4N4Mj+/ZgeC2Hfdg8qW/OY+/gaYUXCnfUCWrTrjjKabAxabRajI8NYIHB2GNRPApXL5dDUDNRpZevJzM4yTH9mdV2f5fgOVfguvZLpTdRVAtQtKyZGZuCylBHqj0Bga2hXU2jVV9FRw1w6geRWGuFIH67djqParMDrFlBp6JjaF0CiUMJQr9jVBCcBuEp4qdVIsOhVVMoolUsSB32WtYnSMaI3iQ3tzuUhcfGj1+bs0q5S03Hg0afgMNN4N28CvB1NmlA2X8BmqoxclYdTcqPNV8HyTdhEBv1hK8qpLzE2KGMg2ofJPbtRUFkUiIolRUGrpRNd65g8PIFAKHiMfeDYzNjy8jzamgYrIdUpEvWcEiqVCoxWg0YGlLKrKKXpy80E0aaOIjVWbwCC04eA6McPiB0bGxu48sUKgd9As1LG9sB9xH0Vh/dsx7ufLGJ1dQEKTUGnOirpg6OjIR7PGOshxQOBoF6t0O7z1GELxVIZ5WIaIwNTqObTSN34HAyBq5hcIHES0DIJqGom0gQelVIBZpMJQ+Ee0MSJ6ylEfHQIdwCVxE2EXINIx26iWiyQqhpdBdV0DXMffATh0mWZXVmal5Jb67QDeqDF2pWEdCZB/DRgI5VYu/we4mtxOB08NHK8ldvLyClV+L1eEikvzBZijULqqhFWiLIj2/sw2OclCzHDYu9BKrZKwpWEw07PJnxUyjVomk56UCMdqUisXaCh1io0BB0i0wOfP0hfJi1gqNtcEklzGW6ngFI+gfNXV/HpigKWHM+9uowBXxxyrws8b4KVtHYjHoeFZDjsD8A7OAzOvxvZW/+g6dnIJ7SOpXSx1iYr76yqTWJlvm/bbqUvHCWV89ODBKptQl84QibD4pObC9g+so8ewON2LIv5LRqP1YWwy4L+HpF2rSC2vo5cJglVraNJrxYdJJ+Oo6VsUkEGh48ch42jE9dJrKi4QWsQSeL7w30YHxtXWLVciR2ePDR24fJH3WChtZoEQg9UwYWnH5mCvHs/gbFJjV3HzOQwMUNFu1FEs14CRzqRLRZpYla4nA5IPcNgmgVkie+h4jptgSgYlHF4YhTnb6ySXrjh9bUQ9Pq7IPRJnhjzwNEHD+4e2jam6QZWCKktKuYk/f7xE4/gwPgY1MImSpuLqFSb0CnpmIwqMSRLKcEgqvLw+0VEdoyibh9C77ZJcLT7jeWr8NpbCO08AsY9gB2DUSgN8griEEcOayO9iYT8GJZD77Ora3cuSoL9+am9E1iiBjL5DJ6aOYJtfh5K4l+o0P+KboFKWs/RnvcceZhKU9hQcsSALLjGJoK7D8IeHkfAG0DquooW7bdAvtDZu7VRgoOoHSB1zDts2LuTGg30wE/pSlObc8zIyM7YnbWtFyLhPuuAvA11SwBOYmZZyYCRImiLvVhYJaWrlLBj+ocwu0NdtjjDQ3CRXPOuQHevZvL9RrlAehFHYWuRdKUBv4uHKxilqGhFYW0BZ989T4ewkXNyuL2yCs7hPtHNhA89+OjpaLj/RZ3Q+bdz76Bf3olf/vq3IMcihyuS3daQWJknbDioWIPyIIki0S5J1iwQi+yip5sDGAqoxcQK2tkvoNfzCLhE3H//fgw9/iuiXAEv/PwX+Oh2gr5jQTK5+YZSUk903XBHdHjBYM0n+/oHEd+IYTASAjEPhloEQwU5E/k7acDHc3O49vln5Acl2GwcWHpfsNm7GeArerW7oZUnBWyS4Xg8bvT4I3CFd8PmCeHw3p04MOCGxDRwaXHtSVXVvrLjldiKsue+UbemN6dG9+7D+p1lpMm/K9kEaiQy5cwGFuevIyjxOHRwEgMDMiyUHSw8S/RqIpVMUgxnUFV1AirgpDim1XLknkECNWUxT5BknidtaZAy6tg3Mvjab/7y3tmvZUKf33uJxOhZXdek0fFJNIopCIzW3WUniDhFQq4c7Y46m02hohTI2VTyemogW0AimUeR1A2MBSwF1VAoAq3DfVaCpV0j2jEwtRSoZSVmZqrP/eHMRbVT92v3gunpGRnt5oVIdFiW5QHafQWRvih6JB/OvfdXVGis8a0kzESjo0cPIbX4z65rGkTh9fVNckSB3FFCb9AHod3C/bsG0CtZ4bAYBM5VygXumDscPd57/KXYPVNxjFbhc3vnElvxmeWFm1JHWjWDpVMSpRpqd8ciaUQmm8Xg2DHy+DxRqQKny0HaUAf1QVmiTvgQEB6eQKR/gDBA4+fbKNWNmJKvPTn63O8W8E33gkQykdw1IL9NCWVWtNukdDqFpeUFDG0fIRY48dj3H6fg4YGJlNJJ2WGLQGul7G+zW5BO5ij1ZAmUpBlWJzkixXeOTM3KxBgrc3z/T75e/J4NdCcRjytev/dMW2cEXrBMuaig1U45r7cPbl8veoJ9ECUP3Y5YLN++TVige4DNSoCkSFcg2zWx2P/Aw90swfHsaz67+Ny2h08k71XrWy+nszPPyg6v8xTHm563251d2nUuombBiYA8jE///ibUGtGS10gfdHz2yWViB6ccnH70jGESTr/++unYNz3/Wxu42whdz3NpZZbuiNNk/nt9kV3y1EOPSXfmP0OjXlUa5XTM7XZcv3Tx/Fy5xbwVi8W+0/X83zizJdeTv85mAAAAAElFTkSuQmCC"
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/SelectAccountDialogFragment.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/SelectAccountDialogFragment.kt
new file mode 100644
index 0000000000..24395337f6
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/SelectAccountDialogFragment.kt
@@ -0,0 +1,118 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.identitycredential
+
+import android.annotation.SuppressLint
+import android.app.Dialog
+import android.content.DialogInterface
+import android.os.Bundle
+import android.view.View
+import androidx.annotation.VisibleForTesting
+import androidx.appcompat.app.AlertDialog
+import androidx.compose.foundation.isSystemInDarkTheme
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.darkColors
+import androidx.compose.material.lightColors
+import androidx.compose.ui.platform.ComposeView
+import mozilla.components.concept.identitycredential.Account
+import mozilla.components.concept.identitycredential.Provider
+import mozilla.components.feature.prompts.dialog.KEY_PROMPT_UID
+import mozilla.components.feature.prompts.dialog.KEY_SESSION_ID
+import mozilla.components.feature.prompts.dialog.KEY_SHOULD_DISMISS_ON_LOAD
+import mozilla.components.feature.prompts.dialog.PromptDialogFragment
+import mozilla.components.support.utils.ext.getParcelableArrayListCompat
+import mozilla.components.support.utils.ext.getParcelableCompat
+
+private const val KEY_ACCOUNTS = "KEY_ACCOUNTS"
+private const val KEY_PROVIDER = "KEY_PROVIDER"
+
+/**
+ * A Federated Credential Management dialog for selecting an account.
+ */
+internal class SelectAccountDialogFragment : PromptDialogFragment() {
+
+ internal val accounts: List<Account> by lazy {
+ safeArguments.getParcelableArrayListCompat(KEY_ACCOUNTS, Account::class.java) ?: emptyList()
+ }
+
+ private var colorsProvider: DialogColorsProvider = DialogColors.defaultProvider()
+
+ internal val provider: Provider by lazy {
+ requireNotNull(
+ safeArguments.getParcelableCompat(
+ KEY_PROVIDER,
+ Provider::class.java,
+ ),
+ )
+ }
+
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog =
+ AlertDialog.Builder(requireContext())
+ .setCancelable(true)
+ .setView(createDialogContentView())
+ .create()
+
+ override fun onCancel(dialog: DialogInterface) {
+ super.onCancel(dialog)
+ feature?.onCancel(sessionId, promptRequestUID)
+ }
+
+ @SuppressLint("InflateParams")
+ internal fun createDialogContentView(): View {
+ return ComposeView(requireContext()).apply {
+ setContent {
+ val colors = if (isSystemInDarkTheme()) darkColors() else lightColors()
+ MaterialTheme(colors) {
+ SelectAccountDialog(
+ provider = provider,
+ accounts = accounts,
+ colors = colorsProvider.provideColors(),
+ onAccountClick = ::onAccountChange,
+ )
+ }
+ }
+ }
+ }
+
+ /**
+ * Called when a new [Provider] is selected by the user.
+ */
+ @VisibleForTesting
+ internal fun onAccountChange(account: Account) {
+ feature?.onConfirm(sessionId, promptRequestUID, account)
+ dismiss()
+ }
+
+ companion object {
+
+ /**
+ * A builder method for creating a [SelectAccountDialogFragment]
+ * @param sessionId The id of the session for which this dialog will be created.
+ * @param promptRequestUID Identifier of the [PromptRequest] for which this dialog is shown.
+ * @param accounts The list of available accounts.
+ * @param provider The provider on which the user is logging in.
+ * @param shouldDismissOnLoad Whether or not the dialog should automatically be dismissed
+ * when a new page is loaded.
+ * @param colorsProvider Provides [DialogColors] that define the colors in the Dialog
+ */
+ fun newInstance(
+ sessionId: String,
+ promptRequestUID: String,
+ accounts: List<Account>,
+ provider: Provider,
+ shouldDismissOnLoad: Boolean,
+ colorsProvider: DialogColorsProvider,
+ ) = SelectAccountDialogFragment().apply {
+ arguments = (arguments ?: Bundle()).apply {
+ putString(KEY_SESSION_ID, sessionId)
+ putString(KEY_PROMPT_UID, promptRequestUID)
+ putBoolean(KEY_SHOULD_DISMISS_ON_LOAD, shouldDismissOnLoad)
+ putParcelableArrayList(KEY_ACCOUNTS, ArrayList(accounts))
+ putParcelable(KEY_PROVIDER, provider)
+ }
+ this.colorsProvider = colorsProvider
+ }
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/SelectProviderDialog.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/SelectProviderDialog.kt
new file mode 100644
index 0000000000..ed23b6b9f9
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/SelectProviderDialog.kt
@@ -0,0 +1,144 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.identitycredential
+
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.width
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.asImageBitmap
+import androidx.compose.ui.layout.ContentScale
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import mozilla.components.concept.identitycredential.Provider
+import mozilla.components.feature.prompts.R
+import mozilla.components.feature.prompts.identitycredential.previews.DialogPreviewMaterialTheme
+import mozilla.components.feature.prompts.identitycredential.previews.LightDarkPreview
+import mozilla.components.support.ktx.kotlin.base64ToBitmap
+
+/**
+ * A Federated Credential Management dialog for selecting a provider.
+ * @param providers The list of available providers.
+ * @param colors The colors of the dialog.
+ * @param modifier [Modifier] to be applied to the layout.
+ * @param onProviderClick Called when the user clicks on an item.
+ */
+@Composable
+fun SelectProviderDialog(
+ providers: List<Provider>,
+ modifier: Modifier = Modifier,
+ colors: DialogColors = DialogColors.default(),
+ onProviderClick: (Provider) -> Unit,
+) {
+ Column(
+ modifier = modifier.fillMaxWidth(),
+ ) {
+ Text(
+ text = stringResource(id = R.string.mozac_feature_prompts_identity_credentials_choose_provider),
+ style = TextStyle(
+ fontSize = 16.sp,
+ lineHeight = 24.sp,
+ color = colors.title,
+ letterSpacing = 0.15.sp,
+ fontWeight = FontWeight.Bold,
+ ),
+ modifier = Modifier.padding(16.dp),
+ )
+
+ providers.forEach { provider ->
+ ProviderItem(provider = provider, onClick = onProviderClick, colors = colors)
+ }
+
+ Spacer(modifier = Modifier.height(16.dp))
+ }
+}
+
+@Composable
+private fun ProviderItem(
+ provider: Provider,
+ modifier: Modifier = Modifier,
+ colors: DialogColors = DialogColors.default(),
+ onClick: (Provider) -> Unit,
+) {
+ IdentityCredentialItem(
+ title = provider.name,
+ description = provider.domain,
+ modifier = modifier,
+ colors = colors,
+ onClick = { onClick(provider) },
+ ) {
+ provider.icon?.base64ToBitmap()?.asImageBitmap()?.let { bitmap ->
+ Image(
+ bitmap = bitmap,
+ contentDescription = null,
+ contentScale = ContentScale.FillWidth,
+ modifier = Modifier
+ .padding(horizontal = 16.dp)
+ .size(24.dp),
+ )
+ } ?: Spacer(
+ Modifier
+ .padding(horizontal = 16.dp)
+ .width(24.dp),
+ )
+ }
+}
+
+@Composable
+@Preview(name = "Provider with no favicon")
+private fun ProviderItemPreview() {
+ ProviderItem(
+ modifier = Modifier.background(Color.White),
+ provider = Provider(
+ 0,
+ null,
+ "Title",
+ "Description",
+ ),
+ onClick = {},
+ )
+}
+
+@Composable
+@LightDarkPreview
+private fun SelectProviderDialogPreview() {
+ DialogPreviewMaterialTheme {
+ SelectProviderDialog(
+ providers = listOf(
+ Provider(
+ 0,
+ null,
+ "Title",
+ "Description",
+ ),
+ Provider(
+ 0,
+ GOOGLE_FAVICON,
+ "Google",
+ "google.com",
+ ),
+ ),
+ modifier = Modifier.background(MaterialTheme.colors.background),
+ ) { }
+ }
+}
+
+@Suppress("MaxLineLength")
+private const val GOOGLE_FAVICON =
+ "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAARCAYAAADUryzEAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAH+SURBVHgBhVO/b9NQEL5z7Bi1lWJUCYRYHBaWDh6SKhspAYnRoVO3SqxIbiUGEEIRQ1kbxB9AM7VISJiNoSUeI6DCYmSpt1ZUak2U0GLXuZ7dOnUsp73l+e593/343hkhZYePKqp/EhhAoLOrRkEEmwgd/mrd3PpmJvGYdPbvl1cJYQkuMQI085KwfP1Lxwl9Mb74Uyu/J4BFuMIEoKp/HCixHyXYf1BqEF2QuS13gPQ2P1OyQt//ta0CYgOBFApg7ob13R5ij9rX1P67uzuDv/k45ASBMHfLOmsxabvVipqOo78pNZls/Nu8Df7vAgRBrphFHmfhCPeEggdT8zvg2dNrk8/2Rsi1N12dx1OyyIjghgnUOCBrB5/TIAJhNYkZuSNwBT4vsiNlVrrEFJHf3UE6q7DtTfO5N4Jg5W3u1Um0pPBza+eeE4nIH8aHozvQ7M+4J3JQtOumO65kbaU33BfWwOK9IPN5dzYkRy1JntAYR3640tOSy8YatKJVLm3Mt/moJrAWEL7+sfDRCp3qJ13peYIxsft0SezPxjo5X19OFaMEGgOk/7mflK12OM5QXPlAB/mwDjjA+tarSXP4M1XWdXVCLrS7Xi8ryUhCsV9a7jx5sRbpkL4trz9eJBQMnlBLExncypHU7CxsOHEQx5WJ5j4WoyQiiE6SlLRTu5e/Z+DrlXsAAAAASUVORK5CYII="
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/SelectProviderDialogFragment.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/SelectProviderDialogFragment.kt
new file mode 100644
index 0000000000..db68fea6fe
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/SelectProviderDialogFragment.kt
@@ -0,0 +1,103 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.identitycredential
+
+import android.annotation.SuppressLint
+import android.app.Dialog
+import android.content.DialogInterface
+import android.os.Bundle
+import android.view.View
+import androidx.annotation.VisibleForTesting
+import androidx.appcompat.app.AlertDialog
+import androidx.compose.foundation.isSystemInDarkTheme
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.darkColors
+import androidx.compose.material.lightColors
+import androidx.compose.ui.platform.ComposeView
+import mozilla.components.concept.identitycredential.Provider
+import mozilla.components.feature.prompts.dialog.KEY_PROMPT_UID
+import mozilla.components.feature.prompts.dialog.KEY_SESSION_ID
+import mozilla.components.feature.prompts.dialog.KEY_SHOULD_DISMISS_ON_LOAD
+import mozilla.components.feature.prompts.dialog.PromptDialogFragment
+import mozilla.components.support.utils.ext.getParcelableArrayListCompat
+
+private const val KEY_PROVIDERS = "KEY_PROVIDERS"
+
+/**
+ * A Federated Credential Management dialog for selecting a provider.
+ */
+internal class SelectProviderDialogFragment : PromptDialogFragment() {
+
+ private val providers: List<Provider> by lazy {
+ safeArguments.getParcelableArrayListCompat(KEY_PROVIDERS, Provider::class.java)
+ ?: emptyList()
+ }
+
+ private var colorsProvider: DialogColorsProvider = DialogColors.defaultProvider()
+
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog =
+ AlertDialog.Builder(requireContext())
+ .setCancelable(true)
+ .setView(createDialogContentView())
+ .create()
+
+ override fun onCancel(dialog: DialogInterface) {
+ super.onCancel(dialog)
+ feature?.onCancel(sessionId, promptRequestUID)
+ }
+
+ @SuppressLint("InflateParams")
+ internal fun createDialogContentView(): View {
+ return ComposeView(requireContext()).apply {
+ setContent {
+ val colors = if (isSystemInDarkTheme()) darkColors() else lightColors()
+ MaterialTheme(colors) {
+ SelectProviderDialog(
+ providers = providers,
+ onProviderClick = ::onProviderChange,
+ colors = DialogColors.default(),
+ )
+ }
+ }
+ }
+ }
+
+ /**
+ * Called when a new [Provider] is selected by the user.
+ */
+ @VisibleForTesting
+ internal fun onProviderChange(provider: Provider) {
+ feature?.onConfirm(sessionId, promptRequestUID, provider)
+ dismiss()
+ }
+
+ companion object {
+
+ /**
+ * A builder method for creating a [SelectAccountDialogFragment]
+ * @param sessionId The id of the session for which this dialog will be created.
+ * @param promptRequestUID Identifier of the [PromptRequest] for which this dialog is shown.
+ * @param providers The list of available providers.
+ * @param shouldDismissOnLoad Whether or not the dialog should automatically be dismissed
+ * when a new page is loaded.
+ * @param colorsProvider Provides [DialogColors] that define the colors in the Dialog
+ */
+ fun newInstance(
+ sessionId: String,
+ promptRequestUID: String,
+ providers: List<Provider>,
+ shouldDismissOnLoad: Boolean,
+ colorsProvider: DialogColorsProvider,
+ ) = SelectProviderDialogFragment().apply {
+ arguments = (arguments ?: Bundle()).apply {
+ putString(KEY_SESSION_ID, sessionId)
+ putString(KEY_PROMPT_UID, promptRequestUID)
+ putBoolean(KEY_SHOULD_DISMISS_ON_LOAD, shouldDismissOnLoad)
+ putParcelableArrayList(KEY_PROVIDERS, ArrayList(providers))
+ }
+ this.colorsProvider = colorsProvider
+ }
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/previews/DialogPreviewMaterialTheme.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/previews/DialogPreviewMaterialTheme.kt
new file mode 100644
index 0000000000..afae915e0d
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/previews/DialogPreviewMaterialTheme.kt
@@ -0,0 +1,24 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.identitycredential.previews
+
+import androidx.compose.foundation.isSystemInDarkTheme
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.darkColors
+import androidx.compose.material.lightColors
+import androidx.compose.runtime.Composable
+import mozilla.components.ui.colors.PhotonColors
+
+@Composable
+internal fun DialogPreviewMaterialTheme(content: @Composable () -> Unit) {
+ val colors = if (!isSystemInDarkTheme()) {
+ lightColors()
+ } else {
+ darkColors(background = PhotonColors.DarkGrey30)
+ }
+ MaterialTheme(colors = colors) {
+ content()
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/previews/LightDarkPreview.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/previews/LightDarkPreview.kt
new file mode 100644
index 0000000000..83c80f9448
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/identitycredential/previews/LightDarkPreview.kt
@@ -0,0 +1,16 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.identitycredential.previews
+
+import android.content.res.Configuration
+import androidx.compose.ui.tooling.preview.Preview
+
+/**
+ * A wrapper annotation for the two uiMode that are commonly used
+ * in Compose preview functions.
+ */
+@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES)
+@Preview(uiMode = Configuration.UI_MODE_NIGHT_NO)
+annotation class LightDarkPreview
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/BasicLoginAdapter.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/BasicLoginAdapter.kt
new file mode 100644
index 0000000000..b765a9352a
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/BasicLoginAdapter.kt
@@ -0,0 +1,67 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.login
+
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.annotation.VisibleForTesting
+import androidx.recyclerview.widget.DiffUtil
+import androidx.recyclerview.widget.ListAdapter
+import androidx.recyclerview.widget.RecyclerView
+import mozilla.components.concept.storage.Login
+import mozilla.components.feature.prompts.R
+
+private object LoginItemDiffCallback : DiffUtil.ItemCallback<Login>() {
+ override fun areItemsTheSame(oldItem: Login, newItem: Login) =
+ oldItem.guid == newItem.guid
+
+ override fun areContentsTheSame(oldItem: Login, newItem: Login) =
+ oldItem == newItem
+}
+
+/**
+ * RecyclerView adapter for displaying login items.
+ */
+internal class BasicLoginAdapter(
+ private val onLoginSelected: (Login) -> Unit,
+) : ListAdapter<Login, LoginViewHolder>(LoginItemDiffCallback) {
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): LoginViewHolder {
+ val view = LayoutInflater
+ .from(parent.context)
+ .inflate(R.layout.login_selection_list_item, parent, false)
+ return LoginViewHolder(view, onLoginSelected)
+ }
+
+ override fun onBindViewHolder(holder: LoginViewHolder, position: Int) {
+ holder.bind(getItem(position))
+ }
+}
+
+/**
+ * View holder for a login item.
+ */
+internal class LoginViewHolder(
+ itemView: View,
+ private val onLoginSelected: (Login) -> Unit,
+) : RecyclerView.ViewHolder(itemView), View.OnClickListener {
+ @VisibleForTesting
+ lateinit var login: Login
+
+ init {
+ itemView.setOnClickListener(this)
+ }
+
+ fun bind(login: Login) {
+ this.login = login
+ itemView.findViewById<TextView>(R.id.username)?.text = login.username
+ itemView.findViewById<TextView>(R.id.password)?.text = login.password
+ }
+
+ override fun onClick(v: View?) {
+ onLoginSelected(login)
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/LoginDelegate.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/LoginDelegate.kt
new file mode 100644
index 0000000000..80f4d33297
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/LoginDelegate.kt
@@ -0,0 +1,27 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.login
+
+import mozilla.components.concept.storage.Login
+import mozilla.components.feature.prompts.concept.SelectablePromptView
+
+/**
+ * Delegate to display the login select prompt and related callbacks
+ */
+interface LoginDelegate {
+ /**
+ * The [SelectablePromptView] used for [LoginPicker] to display a
+ * selectable prompt list of logins.
+ */
+ val loginPickerView: SelectablePromptView<Login>?
+ get() = null
+
+ /**
+ * Callback invoked when a user selects "Manage logins"
+ * from the select login prompt.
+ */
+ val onManageLogins: () -> Unit
+ get() = {}
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/LoginExceptions.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/LoginExceptions.kt
new file mode 100644
index 0000000000..6364f28a99
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/LoginExceptions.kt
@@ -0,0 +1,22 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.login
+
+/**
+ * Interface to be implemented by a storage layer to exclude the save logins prompt from showing.
+ */
+interface LoginExceptions {
+ /**
+ * Checks if a specific origin should show a save logins prompt or if it is an exception.
+ * @param origin The origin to search exceptions list for.
+ */
+ fun isLoginExceptionByOrigin(origin: String): Boolean
+
+ /**
+ * Adds a new origin to the exceptions list implementation.
+ * @param origin The origin to add to the list of exceptions.
+ */
+ fun addLoginException(origin: String)
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/LoginPicker.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/LoginPicker.kt
new file mode 100644
index 0000000000..224f4e770e
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/LoginPicker.kt
@@ -0,0 +1,80 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.login
+
+import mozilla.components.browser.state.action.ContentAction
+import mozilla.components.browser.state.store.BrowserStore
+import mozilla.components.concept.engine.prompt.PromptRequest
+import mozilla.components.concept.storage.Login
+import mozilla.components.feature.prompts.concept.SelectablePromptView
+import mozilla.components.feature.prompts.consumePromptFrom
+import mozilla.components.feature.prompts.facts.emitLoginAutofillDismissedFact
+import mozilla.components.feature.prompts.facts.emitLoginAutofillPerformedFact
+import mozilla.components.feature.prompts.facts.emitLoginAutofillShownFact
+import mozilla.components.support.base.log.logger.Logger
+
+/**
+ * The [LoginPicker] displays a list of possible logins in a [SelectablePromptView] for a site after
+ * receiving a [PromptRequest.SelectLoginPrompt] when a user clicks into a login field and we have
+ * matching logins. It allows the user to select which one of these logins they would like to fill,
+ * or select an option to manage their logins.
+ *
+ * @property store The [BrowserStore] this feature should subscribe to.
+ * @property loginSelectBar The [SelectablePromptView] view into which the select login "prompt" will be inflated.
+ * @property manageLoginsCallback A callback invoked when a user selects "manage logins" from the
+ * select login prompt.
+ * @property sessionId This is the id of the session which requested the prompt.
+ */
+internal class LoginPicker(
+ private val store: BrowserStore,
+ private val loginSelectBar: SelectablePromptView<Login>,
+ private val manageLoginsCallback: () -> Unit = {},
+ private var sessionId: String? = null,
+) : SelectablePromptView.Listener<Login> {
+
+ init {
+ loginSelectBar.listener = this
+ }
+
+ internal fun handleSelectLoginRequest(request: PromptRequest.SelectLoginPrompt) {
+ emitLoginAutofillShownFact()
+ loginSelectBar.showPrompt(request.logins)
+ }
+
+ override fun onOptionSelect(option: Login) {
+ store.consumePromptFrom<PromptRequest.SelectLoginPrompt>(sessionId) {
+ it.onConfirm(option)
+ }
+ emitLoginAutofillPerformedFact()
+ loginSelectBar.hidePrompt()
+ }
+
+ override fun onManageOptions() {
+ manageLoginsCallback.invoke()
+ dismissCurrentLoginSelect()
+ }
+
+ @Suppress("TooGenericExceptionCaught")
+ fun dismissCurrentLoginSelect(promptRequest: PromptRequest.SelectLoginPrompt? = null) {
+ try {
+ if (promptRequest != null) {
+ promptRequest.onDismiss()
+ sessionId?.let {
+ store.dispatch(ContentAction.ConsumePromptRequestAction(it, promptRequest))
+ }
+ loginSelectBar.hidePrompt()
+ return
+ }
+
+ store.consumePromptFrom<PromptRequest.SelectLoginPrompt>(sessionId) {
+ it.onDismiss()
+ }
+ } catch (e: RuntimeException) {
+ Logger.error("Can't dismiss this login select prompt", e)
+ }
+ emitLoginAutofillDismissedFact()
+ loginSelectBar.hidePrompt()
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/LoginSelectBar.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/LoginSelectBar.kt
new file mode 100644
index 0000000000..1fc79d79e0
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/LoginSelectBar.kt
@@ -0,0 +1,140 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.login
+
+import android.content.Context
+import android.content.res.ColorStateList
+import android.util.AttributeSet
+import android.view.View
+import androidx.appcompat.widget.AppCompatImageView
+import androidx.appcompat.widget.AppCompatTextView
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.core.content.withStyledAttributes
+import androidx.core.view.isVisible
+import androidx.core.widget.ImageViewCompat
+import androidx.core.widget.TextViewCompat
+import androidx.recyclerview.widget.DividerItemDecoration
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import mozilla.components.concept.storage.Login
+import mozilla.components.feature.prompts.R
+import mozilla.components.feature.prompts.concept.SelectablePromptView
+import mozilla.components.support.ktx.android.view.hideKeyboard
+
+/**
+ * A customizable multiple login selection bar implementing [SelectablePromptView].
+ */
+class LoginSelectBar @JvmOverloads constructor(
+ context: Context,
+ attrs: AttributeSet? = null,
+ defStyleAttr: Int = 0,
+) : ConstraintLayout(context, attrs, defStyleAttr), SelectablePromptView<Login> {
+
+ var headerTextStyle: Int? = null
+
+ init {
+ context.withStyledAttributes(
+ attrs,
+ R.styleable.LoginSelectBar,
+ defStyleAttr,
+ 0,
+ ) {
+ val textStyle =
+ getResourceId(R.styleable.LoginSelectBar_mozacLoginSelectHeaderTextStyle, 0)
+ if (textStyle > 0) {
+ headerTextStyle = textStyle
+ }
+ }
+ }
+
+ override var listener: SelectablePromptView.Listener<Login>? = null
+
+ override fun showPrompt(options: List<Login>) {
+ if (loginPickerView == null) {
+ loginPickerView =
+ View.inflate(context, R.layout.mozac_feature_login_multiselect_view, this)
+ bindViews()
+ }
+
+ listAdapter.submitList(options)
+ loginPickerView?.isVisible = true
+ }
+
+ override fun hidePrompt() {
+ this.isVisible = false
+ loginsList?.isVisible = false
+ listAdapter.submitList(mutableListOf())
+ manageLoginsButton?.isVisible = false
+ toggleSavedLoginsHeader(shouldExpand = false)
+ }
+
+ override fun asView(): View {
+ return super.asView()
+ }
+
+ private var loginPickerView: View? = null
+ private var loginsList: RecyclerView? = null
+ private var manageLoginsButton: AppCompatTextView? = null
+ private var savedLoginsHeader: AppCompatTextView? = null
+ private var expandArrowHead: AppCompatImageView? = null
+
+ private var listAdapter = BasicLoginAdapter {
+ listener?.onOptionSelect(it)
+ }
+
+ private fun bindViews() {
+ manageLoginsButton = findViewById<AppCompatTextView>(R.id.manage_logins).apply {
+ setOnClickListener {
+ listener?.onManageOptions()
+ }
+ }
+ loginsList = findViewById(R.id.logins_list)
+ savedLoginsHeader = findViewById<AppCompatTextView>(R.id.saved_logins_header).apply {
+ headerTextStyle?.let {
+ TextViewCompat.setTextAppearance(this, it)
+ currentTextColor.let {
+ TextViewCompat.setCompoundDrawableTintList(this, ColorStateList.valueOf(it))
+ }
+ }
+ setOnClickListener {
+ toggleSavedLoginsHeader(shouldExpand = loginsList?.isVisible != true)
+ }
+ }
+ expandArrowHead =
+ findViewById<AppCompatImageView>(R.id.mozac_feature_login_multiselect_expand).apply {
+ savedLoginsHeader?.currentTextColor?.let {
+ ImageViewCompat.setImageTintList(this, ColorStateList.valueOf(it))
+ }
+ }
+ loginsList?.apply {
+ layoutManager = LinearLayoutManager(context, RecyclerView.VERTICAL, false).also {
+ val dividerItemDecoration = DividerItemDecoration(context, it.orientation)
+ addItemDecoration(dividerItemDecoration)
+ }
+ adapter = listAdapter
+ }
+ }
+
+ private fun toggleSavedLoginsHeader(shouldExpand: Boolean) {
+ if (shouldExpand) {
+ loginsList?.isVisible = true
+ manageLoginsButton?.isVisible = true
+ loginPickerView?.hideKeyboard()
+ expandArrowHead?.rotation = ROTATE_180
+ savedLoginsHeader?.contentDescription =
+ context.getString(R.string.mozac_feature_prompts_collapse_logins_content_description)
+ } else {
+ expandArrowHead?.rotation = 0F
+ loginsList?.isVisible = false
+ manageLoginsButton?.isVisible = false
+ savedLoginsHeader?.contentDescription =
+ context.getString(R.string.mozac_feature_prompts_expand_logins_content_description_2)
+ }
+ }
+
+ companion object {
+ private const val ROTATE_180 = 180F
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/StrongPasswordPromptViewListener.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/StrongPasswordPromptViewListener.kt
new file mode 100644
index 0000000000..69a1abf3a7
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/StrongPasswordPromptViewListener.kt
@@ -0,0 +1,92 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.login
+
+import mozilla.components.browser.state.action.ContentAction
+import mozilla.components.browser.state.store.BrowserStore
+import mozilla.components.concept.engine.prompt.PromptRequest
+import mozilla.components.concept.storage.Login
+import mozilla.components.feature.prompts.concept.PasswordPromptView
+import mozilla.components.feature.prompts.consumePromptFrom
+import mozilla.components.support.base.log.logger.Logger
+
+/**
+ * Displays a [PasswordPromptView] for a site after receiving a [PromptRequest.SelectLoginPrompt]
+ * when a user clicks into a login field and we don't have any matching logins. The user can receive
+ * a suggestion for a strong password that can be used for filling in the password field.
+ *
+ * @property browserStore The [BrowserStore] this feature should subscribe to.
+ * @property suggestStrongPasswordBar The view where the suggest strong password "prompt" will be inflated.
+ * @property sessionId This is the id of the session which requested the prompt.
+ */
+internal class StrongPasswordPromptViewListener(
+ private val browserStore: BrowserStore,
+ private val suggestStrongPasswordBar: PasswordPromptView,
+ private var sessionId: String? = null,
+) : PasswordPromptView.Listener {
+
+ init {
+ suggestStrongPasswordBar.listener = this
+ }
+
+ internal fun handleSuggestStrongPasswordRequest(
+ request: PromptRequest.SelectLoginPrompt,
+ currentUrl: String,
+ onSaveLoginWithStrongPassword: (url: String, password: String) -> Unit,
+ ) {
+ request.generatedPassword?.let {
+ suggestStrongPasswordBar.showPrompt(
+ it,
+ currentUrl,
+ onSaveLoginWithStrongPassword,
+ )
+ }
+ }
+
+ @Suppress("TooGenericExceptionCaught")
+ fun dismissCurrentSuggestStrongPassword(promptRequest: PromptRequest.SelectLoginPrompt? = null) {
+ try {
+ if (promptRequest != null) {
+ promptRequest.onDismiss()
+ sessionId?.let {
+ browserStore.dispatch(
+ ContentAction.ConsumePromptRequestAction(
+ it,
+ promptRequest,
+ ),
+ )
+ }
+ suggestStrongPasswordBar.hidePrompt()
+ return
+ }
+
+ browserStore.consumePromptFrom<PromptRequest.SelectLoginPrompt>(sessionId) {
+ it.onDismiss()
+ }
+ } catch (e: RuntimeException) {
+ Logger.error("Can't dismiss this prompt", e)
+ }
+ suggestStrongPasswordBar.hidePrompt()
+ }
+
+ override fun onUseGeneratedPassword(
+ generatedPassword: String,
+ url: String,
+ onSaveLoginWithStrongPassword: (url: String, password: String) -> Unit,
+ ) {
+ browserStore.consumePromptFrom<PromptRequest.SelectLoginPrompt>(sessionId) {
+ // Create complete login entry: https://bugzilla.mozilla.org/show_bug.cgi?id=1869575
+ val createdLoginEntryWithPassword = Login(
+ guid = "",
+ origin = url,
+ username = "",
+ password = generatedPassword,
+ )
+ it.onConfirm(createdLoginEntryWithPassword)
+ }
+ onSaveLoginWithStrongPassword.invoke(url, generatedPassword)
+ suggestStrongPasswordBar.hidePrompt()
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/SuggestStrongPasswordBar.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/SuggestStrongPasswordBar.kt
new file mode 100644
index 0000000000..d18d027644
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/SuggestStrongPasswordBar.kt
@@ -0,0 +1,110 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.login
+
+import android.content.Context
+import android.content.res.ColorStateList
+import android.util.AttributeSet
+import android.view.View
+import androidx.appcompat.widget.AppCompatTextView
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.core.content.withStyledAttributes
+import androidx.core.view.isVisible
+import androidx.core.widget.TextViewCompat
+import mozilla.components.feature.prompts.R
+import mozilla.components.feature.prompts.concept.PasswordPromptView
+
+/**
+ * A prompt bar implementing [PasswordPromptView] to display the strong generated password.
+ */
+class SuggestStrongPasswordBar @JvmOverloads constructor(
+ context: Context,
+ attrs: AttributeSet? = null,
+ defStyleAttr: Int = 0,
+) : ConstraintLayout(context, attrs, defStyleAttr), PasswordPromptView {
+
+ private var headerTextStyle: Int? = null
+ private var suggestStrongPasswordView: View? = null
+ private var suggestStrongPasswordHeader: AppCompatTextView? = null
+ private var useStrongPasswordTitle: AppCompatTextView? = null
+
+ override var listener: PasswordPromptView.Listener? = null
+
+ init {
+ context.withStyledAttributes(
+ attrs,
+ R.styleable.LoginSelectBar,
+ defStyleAttr,
+ 0,
+ ) {
+ val textStyle =
+ getResourceId(R.styleable.LoginSelectBar_mozacLoginSelectHeaderTextStyle, 0)
+ if (textStyle > 0) {
+ headerTextStyle = textStyle
+ }
+ }
+ }
+
+ override fun showPrompt(
+ generatedPassword: String,
+ url: String,
+ onSaveLoginWithStrongPassword: (url: String, password: String) -> Unit,
+ ) {
+ if (suggestStrongPasswordView == null) {
+ suggestStrongPasswordView =
+ View.inflate(context, R.layout.mozac_feature_suggest_strong_password_view, this)
+ bindViews(generatedPassword, url, onSaveLoginWithStrongPassword)
+ }
+ suggestStrongPasswordView?.isVisible = true
+ useStrongPasswordTitle?.isVisible = false
+ }
+
+ override fun hidePrompt() {
+ isVisible = false
+ }
+
+ private fun bindViews(
+ strongPassword: String,
+ url: String,
+ onSaveLoginWithStrongPassword: (url: String, password: String) -> Unit,
+ ) {
+ suggestStrongPasswordHeader =
+ findViewById<AppCompatTextView>(R.id.suggest_strong_password_header).apply {
+ headerTextStyle?.let {
+ TextViewCompat.setTextAppearance(this, it)
+ currentTextColor.let { textColor ->
+ TextViewCompat.setCompoundDrawableTintList(
+ this,
+ ColorStateList.valueOf(textColor),
+ )
+ }
+ }
+ setOnClickListener {
+ useStrongPasswordTitle?.let {
+ it.visibility = if (it.isVisible) {
+ GONE
+ } else {
+ VISIBLE
+ }
+ }
+ }
+ }
+
+ useStrongPasswordTitle = findViewById<AppCompatTextView>(R.id.use_strong_password).apply {
+ text = context.getString(
+ R.string.mozac_feature_prompts_suggest_strong_password_message,
+ strongPassword,
+ )
+ visibility = GONE
+ setOnClickListener {
+ listener?.onUseGeneratedPassword(
+ generatedPassword = strongPassword,
+ url = url,
+ onSaveLoginWithStrongPassword = onSaveLoginWithStrongPassword,
+ )
+ }
+ }
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/SuggestStrongPasswordDelegate.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/SuggestStrongPasswordDelegate.kt
new file mode 100644
index 0000000000..b77e544000
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/login/SuggestStrongPasswordDelegate.kt
@@ -0,0 +1,19 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.login
+
+import mozilla.components.feature.prompts.concept.PasswordPromptView
+
+/**
+ * Delegate to display the suggest strong password prompt.
+ */
+interface SuggestStrongPasswordDelegate {
+
+ /**
+ * The [PasswordPromptView] used for [StrongPasswordPromptViewListener] to display a simple prompt.
+ */
+ val strongPasswordPromptViewListenerView: PasswordPromptView?
+ get() = null
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/provider/FileProvider.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/provider/FileProvider.kt
new file mode 100644
index 0000000000..512dc3026c
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/provider/FileProvider.kt
@@ -0,0 +1,18 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package mozilla.components.feature.prompts.provider
+
+/**
+ * A file provider to provide functionality for the feature prompts component.
+ *
+ * We need this class to create a fully qualified class name that doesn't clash with other
+ * file providers in other components see https://stackoverflow.com/a/43444164/5533820.
+ *
+ * Be aware, when creating new file resources avoid using common names like "@xml/file_paths",
+ * as other file providers could be using the same names and this could case unexpected behaviors.
+ * As a convention try to use unique names like using the name of the component as a prefix of the
+ * name of the file, like component_xxx_file_paths.xml.
+ */
+/** @suppress */
+class FileProvider : androidx.core.content.FileProvider()
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/share/ShareDelegate.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/share/ShareDelegate.kt
new file mode 100644
index 0000000000..96d7bebaea
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/share/ShareDelegate.kt
@@ -0,0 +1,51 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.share
+
+import android.content.Context
+import mozilla.components.concept.engine.prompt.ShareData
+import mozilla.components.support.ktx.android.content.share
+
+/**
+ * Delegate to display a share prompt.
+ */
+interface ShareDelegate {
+
+ /**
+ * Displays a share sheet for the given [ShareData].
+ *
+ * @param context Reference to context.
+ * @param shareData Data to share.
+ * @param onDismiss Callback to be invoked if the share sheet is dismissed and nothing
+ * is selected, or if it fails to load.
+ * @param onSuccess Callback to be invoked if the data is successfully shared.
+ */
+ fun showShareSheet(
+ context: Context,
+ shareData: ShareData,
+ onDismiss: () -> Unit,
+ onSuccess: () -> Unit,
+ )
+}
+
+/**
+ * Default [ShareDelegate] implementation that displays the native share sheet.
+ */
+class DefaultShareDelegate : ShareDelegate {
+
+ override fun showShareSheet(
+ context: Context,
+ shareData: ShareData,
+ onDismiss: () -> Unit,
+ onSuccess: () -> Unit,
+ ) {
+ val shareSucceeded = context.share(
+ text = listOfNotNull(shareData.url, shareData.text).joinToString(" "),
+ subject = shareData.title.orEmpty(),
+ )
+
+ if (shareSucceeded) onSuccess() else onDismiss()
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/widget/LoginPanelTextInputLayout.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/widget/LoginPanelTextInputLayout.kt
new file mode 100644
index 0000000000..1cb7733079
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/widget/LoginPanelTextInputLayout.kt
@@ -0,0 +1,55 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.widget
+
+import android.content.Context
+import android.content.res.ColorStateList
+import android.content.res.TypedArray
+import android.util.AttributeSet
+import androidx.annotation.StyleableRes
+import androidx.core.content.ContextCompat
+import androidx.core.content.withStyledAttributes
+import com.google.android.material.textfield.TextInputLayout
+import mozilla.components.feature.prompts.R
+
+internal class LoginPanelTextInputLayout(
+ context: Context,
+ attrs: AttributeSet? = null,
+ defStyleAttr: Int = 0,
+) : TextInputLayout(context, attrs, defStyleAttr) {
+ constructor(context: Context) : this(context, null, 0)
+
+ constructor(context: Context, attrs: AttributeSet? = null) : this(context, attrs, 0)
+
+ init {
+ context.withStyledAttributes(
+ attrs,
+ R.styleable.LoginPanelTextInputLayout,
+ defStyleAttr,
+ 0,
+ ) {
+
+ defaultHintTextColor = ColorStateList.valueOf(
+ ContextCompat.getColor(
+ context,
+ R.color.mozacBoxStrokeColor,
+ ),
+ )
+
+ getColorOrNull(R.styleable.LoginPanelTextInputLayout_mozacInputLayoutErrorTextColor)?.let { color ->
+ setErrorTextColor(ColorStateList.valueOf(color))
+ }
+
+ getColorOrNull(R.styleable.LoginPanelTextInputLayout_mozacInputLayoutErrorIconColor)?.let { color ->
+ setErrorIconTintList(ColorStateList.valueOf(color))
+ }
+ }
+ }
+
+ private fun TypedArray.getColorOrNull(@StyleableRes styleableRes: Int): Int? {
+ val resourceId = this.getResourceId(styleableRes, 0)
+ return if (resourceId > 0) ContextCompat.getColor(context, resourceId) else null
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/widget/MonthAndYearPicker.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/widget/MonthAndYearPicker.kt
new file mode 100644
index 0000000000..2b6d334a72
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/widget/MonthAndYearPicker.kt
@@ -0,0 +1,178 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.widget
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.widget.NumberPicker
+import android.widget.ScrollView
+import androidx.annotation.VisibleForTesting
+import mozilla.components.feature.prompts.R
+import mozilla.components.feature.prompts.ext.month
+import mozilla.components.feature.prompts.ext.now
+import mozilla.components.feature.prompts.ext.year
+import java.util.Calendar
+
+/**
+ * UI widget that allows to select a month and a year.
+ */
+@SuppressLint("ViewConstructor") // This view is only instantiated in code
+internal class MonthAndYearPicker @JvmOverloads constructor(
+ context: Context,
+ private val selectedDate: Calendar = now(),
+ private val maxDate: Calendar = getDefaultMaxDate(),
+ private val minDate: Calendar = getDefaultMinDate(),
+ internal var dateSetListener: OnDateSetListener? = null,
+) : ScrollView(context), NumberPicker.OnValueChangeListener {
+
+ @VisibleForTesting
+ internal val monthView: NumberPicker
+
+ @VisibleForTesting
+ internal val yearView: NumberPicker
+ private val monthsLabels: Array<out String>
+
+ init {
+ inflate(context, R.layout.mozac_feature_promps_widget_month_picker, this)
+
+ adjustMinMaxDateIfAreInIllogicalRange()
+ adjustIfSelectedDateIsInIllogicalRange()
+
+ monthsLabels = context.resources.getStringArray(R.array.mozac_feature_prompts_months)
+
+ monthView = findViewById(R.id.month_chooser)
+ yearView = findViewById(R.id.year_chooser)
+
+ iniMonthView()
+ iniYearView()
+ }
+
+ override fun onValueChange(view: NumberPicker, oldVal: Int, newVal: Int) {
+ var month = 0
+ var year = 0
+ when (view.id) {
+ R.id.month_chooser -> {
+ month = newVal
+ // Wrapping months to update greater fields
+ if (oldVal == view.maxValue && newVal == view.minValue) {
+ yearView.value += 1
+ if (!yearView.value.isMinYear()) {
+ month = Calendar.JANUARY
+ }
+ } else if (oldVal == view.minValue && newVal == view.maxValue) {
+ yearView.value -= 1
+ if (!yearView.value.isMaxYear()) {
+ month = Calendar.DECEMBER
+ }
+ }
+ year = yearView.value
+ }
+ R.id.year_chooser -> {
+ month = monthView.value
+ year = newVal
+ }
+ }
+
+ selectedDate.month = month
+ selectedDate.year = year
+ updateMonthView(month)
+ dateSetListener?.onDateSet(this, month + 1, year) // Month is zero based
+ }
+
+ private fun Int.isMinYear() = minDate.year == this
+ private fun Int.isMaxYear() = maxDate.year == this
+
+ private fun iniMonthView() {
+ monthView.setOnValueChangedListener(this)
+ monthView.setOnLongPressUpdateInterval(SPEED_MONTH_SPINNER)
+ updateMonthView(selectedDate.month)
+ }
+
+ private fun iniYearView() {
+ val year = selectedDate.year
+ val max = maxDate.year
+ val min = minDate.year
+
+ yearView.init(year, min, max)
+ yearView.wrapSelectorWheel = false
+ yearView.setOnLongPressUpdateInterval(SPEED_YEAR_SPINNER)
+ }
+
+ private fun updateMonthView(month: Int) {
+ var min = Calendar.JANUARY
+ var max = Calendar.DECEMBER
+
+ if (selectedDate.year.isMinYear()) {
+ min = minDate.month
+ }
+
+ if (selectedDate.year.isMaxYear()) {
+ max = maxDate.month
+ }
+
+ monthView.apply {
+ displayedValues = null
+ minValue = min
+ maxValue = max
+ displayedValues = monthsLabels.copyOfRange(monthView.minValue, monthView.maxValue + 1)
+ value = month
+ wrapSelectorWheel = true
+ }
+ }
+
+ private fun adjustMinMaxDateIfAreInIllogicalRange() {
+ // If the input date range is illogical/garbage, we should not restrict the input range (i.e. allow the
+ // user to select any date). If we try to make any assumptions based on the illogical min/max date we could
+ // potentially prevent the user from selecting dates that are in the developers intended range, so it's best
+ // to allow anything.
+ if (maxDate.before(minDate)) {
+ minDate.timeInMillis = getDefaultMinDate().timeInMillis
+ maxDate.timeInMillis = getDefaultMaxDate().timeInMillis
+ }
+ }
+
+ private fun adjustIfSelectedDateIsInIllogicalRange() {
+ if (selectedDate.before(minDate) || selectedDate.after(maxDate)) {
+ selectedDate.timeInMillis = minDate.timeInMillis
+ }
+ }
+
+ private fun NumberPicker.init(currentValue: Int, min: Int, max: Int) {
+ minValue = min
+ maxValue = max
+ value = currentValue
+ setOnValueChangedListener(this@MonthAndYearPicker)
+ }
+
+ interface OnDateSetListener {
+ fun onDateSet(picker: MonthAndYearPicker, month: Int, year: Int)
+ }
+
+ companion object {
+
+ private const val SPEED_MONTH_SPINNER = 200L
+ private const val SPEED_YEAR_SPINNER = 100L
+
+ @VisibleForTesting
+ internal const val DEFAULT_MAX_YEAR = 9999
+
+ @VisibleForTesting
+ internal const val DEFAULT_MIN_YEAR = 1
+
+ internal fun getDefaultMinDate(): Calendar {
+ return now().apply {
+ month = Calendar.JANUARY
+ year = DEFAULT_MIN_YEAR
+ }
+ }
+
+ internal fun getDefaultMaxDate(): Calendar {
+ return now().apply {
+ month = Calendar.DECEMBER
+ year = DEFAULT_MAX_YEAR
+ }
+ }
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/widget/TimePrecisionPicker.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/widget/TimePrecisionPicker.kt
new file mode 100644
index 0000000000..f1855abdba
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/widget/TimePrecisionPicker.kt
@@ -0,0 +1,231 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.widget
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.view.View
+import android.widget.NumberPicker
+import android.widget.ScrollView
+import androidx.annotation.VisibleForTesting
+import mozilla.components.feature.prompts.R
+import mozilla.components.feature.prompts.ext.hour
+import mozilla.components.feature.prompts.ext.maxHour
+import mozilla.components.feature.prompts.ext.maxMillisecond
+import mozilla.components.feature.prompts.ext.maxMinute
+import mozilla.components.feature.prompts.ext.maxSecond
+import mozilla.components.feature.prompts.ext.millisecond
+import mozilla.components.feature.prompts.ext.minHour
+import mozilla.components.feature.prompts.ext.minMillisecond
+import mozilla.components.feature.prompts.ext.minMinute
+import mozilla.components.feature.prompts.ext.minSecond
+import mozilla.components.feature.prompts.ext.minute
+import mozilla.components.feature.prompts.ext.now
+import mozilla.components.feature.prompts.ext.second
+import mozilla.components.support.utils.TimePicker.shouldShowMillisecondsPicker
+import java.util.Calendar
+
+/**
+ * UI widget that allows to select a time with precision of seconds or milliseconds.
+ */
+@SuppressLint("ViewConstructor") // This view is only instantiated in code
+internal class TimePrecisionPicker @JvmOverloads constructor(
+ context: Context,
+ private val selectedTime: Calendar = now(),
+ private val minTime: Calendar = getDefaultMinTime(),
+ private val maxTime: Calendar = getDefaultMaxTime(),
+ stepValue: Float,
+ private var timeSetListener: OnTimeSetListener? = null,
+) : ScrollView(context), NumberPicker.OnValueChangeListener {
+
+ @VisibleForTesting
+ internal val hourView: NumberPicker
+
+ @VisibleForTesting
+ internal val minuteView: NumberPicker
+
+ @VisibleForTesting
+ internal val secondView: NumberPicker
+
+ @VisibleForTesting
+ internal val millisecondView: NumberPicker
+
+ init {
+ inflate(context, R.layout.mozac_feature_prompts_time_picker, this)
+
+ adjustMinMaxTimeIfInIllogicalRange()
+
+ hourView = findViewById(R.id.hour_picker)
+ minuteView = findViewById(R.id.minute_picker)
+ secondView = findViewById(R.id.second_picker)
+ millisecondView = findViewById(R.id.millisecond_picker)
+
+ // Hide the millisecond picker if this is not the desired precision defined by the step
+ if (!shouldShowMillisecondsPicker(stepValue)) {
+ millisecondView.visibility = GONE
+ findViewById<View>(R.id.millisecond_separator).visibility = GONE
+ }
+
+ initHourView()
+ updateMinuteView()
+ minuteView.setOnValueChangedListener(this)
+ minuteView.setOnLongPressUpdateInterval(SPEED_MINUTE_SPINNER)
+ secondView.init(
+ selectedTime.second,
+ selectedTime.minSecond(),
+ selectedTime.maxSecond(),
+ )
+ millisecondView.init(
+ selectedTime.millisecond,
+ selectedTime.minMillisecond(),
+ selectedTime.maxMillisecond(),
+ )
+ }
+
+ override fun onValueChange(view: NumberPicker, oldVal: Int, newVal: Int) {
+ var hour = selectedTime.hour
+ var minute = selectedTime.minute
+ var second = selectedTime.second
+ var millisecond = selectedTime.millisecond
+
+ when (view.id) {
+ R.id.hour_picker -> {
+ hour = newVal
+ selectedTime.hour = hour
+ updateMinuteView()
+ }
+ R.id.minute_picker -> {
+ minute = newVal
+ selectedTime.minute = minute
+ }
+ R.id.second_picker -> {
+ second = newVal
+ selectedTime.set(Calendar.SECOND, second)
+ }
+ R.id.millisecond_picker -> {
+ millisecond = newVal
+ selectedTime.set(Calendar.MILLISECOND, millisecond)
+ }
+ }
+
+ // Update the selected time with the latest values.
+ timeSetListener?.onTimeSet(this, hour, minute, second, millisecond)
+ }
+
+ private fun adjustMinMaxTimeIfInIllogicalRange() {
+ // If the input time range is illogical, we should not restrict the input range.
+ if (maxTime.before(minTime)) {
+ minTime.timeInMillis = getDefaultMinTime().timeInMillis
+ maxTime.timeInMillis = getDefaultMaxTime().timeInMillis
+ }
+ }
+
+ // Initialize the hour view with the min and max values.
+ private fun initHourView() {
+ val min = minTime.hour
+ val max = maxTime.hour
+
+ if (selectedTime.hour < min || selectedTime.hour > max) {
+ selectedTime.hour = min
+ timeSetListener?.onTimeSet(
+ this,
+ selectedTime.hour,
+ selectedTime.minute,
+ selectedTime.second,
+ selectedTime.millisecond,
+ )
+ }
+
+ hourView.apply {
+ minValue = min
+ maxValue = max
+ displayedValues = ((min..max).map { it.toString() }).toTypedArray()
+ value = selectedTime.hour
+ wrapSelectorWheel = true
+ setOnValueChangedListener(this@TimePrecisionPicker)
+ setOnLongPressUpdateInterval(SPEED_HOUR_SPINNER)
+ }
+ }
+
+ // Update the minute view.
+ private fun updateMinuteView() {
+ val min: Int = if (selectedTime.hour == minTime.hour) {
+ minTime.minute
+ } else {
+ selectedTime.minMinute()
+ }
+ val max: Int = if (selectedTime.hour == maxTime.hour) {
+ maxTime.minute
+ } else {
+ selectedTime.maxMinute()
+ }
+ // If the hour is set to min/max value, then constraint the minute to a valid value.
+ val minute = if (selectedTime.minute < min || selectedTime.minute > max) {
+ timeSetListener?.onTimeSet(
+ this,
+ selectedTime.hour,
+ min,
+ selectedTime.second,
+ selectedTime.millisecond,
+ )
+ min
+ } else {
+ selectedTime.minute
+ }
+
+ minuteView.apply {
+ displayedValues = null
+ minValue = min
+ maxValue = max
+ displayedValues = ((min..max).map { it.toString() }).toTypedArray()
+ value = minute
+ wrapSelectorWheel = true
+ }
+ }
+
+ // Initialize the [NumberPicker].
+ private fun NumberPicker.init(currentValue: Int, min: Int, max: Int) {
+ minValue = min
+ maxValue = max
+ value = currentValue
+ displayedValues = ((min..max).map { it.toString() }).toTypedArray()
+ setOnValueChangedListener(this@TimePrecisionPicker)
+ setOnLongPressUpdateInterval(SPEED_MINUTE_SPINNER)
+ }
+
+ // Interface used to set the selected time with seconds/milliseconds precision
+ interface OnTimeSetListener {
+ fun onTimeSet(
+ picker: TimePrecisionPicker,
+ hour: Int,
+ minute: Int,
+ second: Int,
+ millisecond: Int,
+ )
+ }
+
+ companion object {
+ private const val SPEED_HOUR_SPINNER = 200L
+ private const val SPEED_MINUTE_SPINNER = 100L
+
+ internal fun getDefaultMinTime(): Calendar {
+ return now().apply {
+ hour = minHour()
+ minute = minMinute()
+ second = minSecond()
+ millisecond = minMillisecond()
+ }
+ }
+
+ internal fun getDefaultMaxTime(): Calendar {
+ return now().apply {
+ hour = maxHour()
+ minute = maxMinute()
+ second = maxSecond()
+ millisecond = maxMillisecond()
+ }
+ }
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/color/button_state_list.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/color/button_state_list.xml
new file mode 100644
index 0000000000..ce7a07e0d5
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/color/button_state_list.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_enabled="false" android:alpha="0.50" android:color="?android:colorEdgeEffect" />
+ <item android:color="?android:colorEdgeEffect"/>
+</selector>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/drawable-hdpi/color_picker_row_bg.9.png b/mobile/android/android-components/components/feature/prompts/src/main/res/drawable-hdpi/color_picker_row_bg.9.png
new file mode 100644
index 0000000000..68ac5ef730
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/drawable-hdpi/color_picker_row_bg.9.png
Binary files differ
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/drawable-mdpi/color_picker_row_bg.9.png b/mobile/android/android-components/components/feature/prompts/src/main/res/drawable-mdpi/color_picker_row_bg.9.png
new file mode 100644
index 0000000000..5d72bdd255
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/drawable-mdpi/color_picker_row_bg.9.png
Binary files differ
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/drawable-xhdpi/color_picker_row_bg.9.png b/mobile/android/android-components/components/feature/prompts/src/main/res/drawable-xhdpi/color_picker_row_bg.9.png
new file mode 100644
index 0000000000..f5f9283b4a
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/drawable-xhdpi/color_picker_row_bg.9.png
Binary files differ
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/drawable-xxhdpi/color_picker_row_bg.9.png b/mobile/android/android-components/components/feature/prompts/src/main/res/drawable-xxhdpi/color_picker_row_bg.9.png
new file mode 100644
index 0000000000..1d69dc96eb
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/drawable-xxhdpi/color_picker_row_bg.9.png
Binary files differ
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/drawable/color_picker_checkmark.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/drawable/color_picker_checkmark.xml
new file mode 100644
index 0000000000..f162dba5d1
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/drawable/color_picker_checkmark.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="ring"
+ android:innerRadius="15dip"
+ android:thickness="4dip"
+ android:useLevel="false">
+ <solid android:color="@android:color/white"/>
+</shape>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/drawable/mozac_ic_password_reveal_two_state.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/drawable/mozac_ic_password_reveal_two_state.xml
new file mode 100644
index 0000000000..79760e5aa8
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/drawable/mozac_ic_password_reveal_two_state.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:drawable="@drawable/mozac_ic_eye_24" android:state_checked="false" />
+ <item android:drawable="@drawable/mozac_ic_eye_slash_24" />
+</selector>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/layout/login_selection_list_item.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/login_selection_list_item.xml
new file mode 100644
index 0000000000..e754c7b50b
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/login_selection_list_item.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/login_item"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="?android:attr/selectableItemBackground"
+ android:clickable="true"
+ android:focusable="true"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:paddingStart="63dp"
+ android:paddingTop="8dp"
+ android:paddingEnd="8dp"
+ android:paddingBottom="8dp">
+
+ <TextView
+ android:id="@+id/username"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:clickable="false"
+ android:focusable="false"
+ android:importantForAutofill="no"
+ android:textAppearance="?android:attr/textAppearanceListItem"
+ android:textIsSelectable="false"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ tools:text="Username" />
+
+ <TextView
+ android:id="@+id/password"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:clickable="false"
+ android:focusable="false"
+ android:importantForAutofill="no"
+ android:inputType="textPassword"
+ android:textAppearance="?android:attr/textAppearanceListItemSecondary"
+ android:textIsSelectable="false"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/username"
+ tools:ignore="TextViewEdits"
+ tools:text="password" />
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_choice_dialogs.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_choice_dialogs.xml
new file mode 100644
index 0000000000..ef5562819c
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_choice_dialogs.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<androidx.recyclerview.widget.RecyclerView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/recyclerView"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingBottom="16dp"/> \ No newline at end of file
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_choice_group_item.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_choice_group_item.xml
new file mode 100644
index 0000000000..7a166ded04
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_choice_group_item.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?><!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ style="?android:attr/listSeparatorTextViewStyle"
+ android:id="@+id/labelView"/> \ No newline at end of file
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_login_multiselect_view.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_login_multiselect_view.xml
new file mode 100644
index 0000000000..116eae6cb2
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_login_multiselect_view.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<merge xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout">
+
+ <ScrollView
+ android:id="@+id/login_scroll_view"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:id="@+id/scroll_child"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <androidx.appcompat.widget.AppCompatTextView
+ android:id="@+id/saved_logins_header"
+ android:layout_width="0dp"
+ android:layout_height="48dp"
+ android:background="?android:selectableItemBackground"
+ android:contentDescription="@string/mozac_feature_prompts_expand_logins_content_description_2"
+ android:drawablePadding="24dp"
+ android:gravity="center_vertical"
+ android:paddingStart="16dp"
+ android:paddingEnd="56dp"
+ android:text="@string/mozac_feature_prompts_saved_logins_2"
+ android:textColor="?android:colorEdgeEffect"
+ android:textSize="16sp"
+ app:drawableStartCompat="@drawable/mozac_ic_login_24"
+ app:drawableTint="?android:colorEdgeEffect"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <androidx.appcompat.widget.AppCompatImageView
+ android:id="@+id/mozac_feature_login_multiselect_expand"
+ android:layout_width="48dp"
+ android:layout_height="48dp"
+ android:layout_marginStart="8dp"
+ android:layout_marginEnd="8dp"
+ android:clickable="false"
+ android:focusable="false"
+ android:importantForAccessibility="no"
+ android:padding="16dp"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:srcCompat="@drawable/mozac_ic_chevron_down_24"
+ app:tint="?android:colorEdgeEffect" />
+
+ <androidx.recyclerview.widget.RecyclerView
+ android:id="@+id/logins_list"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:visibility="gone"
+ app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
+ app:layout_constraintTop_toBottomOf="@id/mozac_feature_login_multiselect_expand"
+ tools:listitem="@layout/login_selection_list_item" />
+
+ <androidx.appcompat.widget.AppCompatTextView
+ android:id="@+id/manage_logins"
+ android:layout_width="0dp"
+ android:layout_height="48dp"
+ android:background="?android:selectableItemBackground"
+ android:drawablePadding="24dp"
+ android:gravity="center_vertical"
+ android:paddingStart="16dp"
+ android:paddingEnd="0dp"
+ android:text="@string/mozac_feature_prompts_manage_logins_2"
+ android:textColor="?android:textColorPrimary"
+ android:textSize="16sp"
+ android:visibility="gone"
+ app:drawableStartCompat="@drawable/mozac_ic_settings_24"
+ app:drawableTint="?android:textColorPrimary"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/logins_list" />
+ </androidx.constraintlayout.widget.ConstraintLayout>
+ </ScrollView>
+</merge>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_menu_choice_item.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_menu_choice_item.xml
new file mode 100644
index 0000000000..c491949485
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_menu_choice_item.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<TextView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/labelView"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceListItemSmall"
+ android:gravity="center_vertical"
+ android:background="?android:attr/selectableItemBackground"
+ android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+ android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+ android:minHeight="?android:attr/listPreferredItemHeightSmall"/>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_menu_separator_choice_item.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_menu_separator_choice_item.xml
new file mode 100644
index 0000000000..f3dcfa28a5
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_menu_separator_choice_item.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<View xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="2dp"
+ android:background="?android:attr/listDivider"/>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_multiple_choice_item.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_multiple_choice_item.xml
new file mode 100644
index 0000000000..89a672cc21
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_multiple_choice_item.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?android:attr/listPreferredItemHeightSmall"
+ android:background="?android:attr/selectableItemBackground">
+
+ <CheckedTextView
+ android:id="@+id/labelView"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?android:attr/listPreferredItemHeightSmall"
+ android:checkMark="?android:attr/listChoiceIndicatorMultiple"
+ android:gravity="center_vertical"
+ android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+ android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+ android:textAppearance="?android:attr/textAppearanceListItemSmall"/>
+</LinearLayout> \ No newline at end of file
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_promps_widget_month_picker.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_promps_widget_month_picker.xml
new file mode 100644
index 0000000000..4d00492351
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_promps_widget_month_picker.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<merge xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ tools:parentTag="android.widget.ScrollView">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:orientation="horizontal">
+
+ <android.widget.NumberPicker
+ android:id="@+id/month_chooser"
+ android:layout_width="60dp"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="1dp"
+ android:layout_marginEnd="1dp"
+ android:focusable="true"
+ android:focusableInTouchMode="true" />
+
+ <android.widget.NumberPicker
+ android:id="@+id/year_chooser"
+ android:layout_width="75dp"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="1dp"
+ android:layout_marginEnd="1dp"
+ android:focusable="true"
+ android:focusableInTouchMode="true" />
+
+ </LinearLayout>
+</merge>
+
+
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompt_auth_prompt.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompt_auth_prompt.xml
new file mode 100644
index 0000000000..170da9e56e
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompt_auth_prompt.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<ScrollView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:paddingStart="?android:attr/listPreferredItemPaddingLeft"
+ android:paddingEnd="?android:attr/listPreferredItemPaddingLeft">
+
+ <com.google.android.material.textfield.TextInputLayout
+ android:id="@+id/username_text_input_layout"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <mozilla.components.feature.prompts.dialog.AutofillEditText
+ android:id="@+id/username"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:hint="@string/mozac_feature_prompt_username_hint"
+ android:inputType="text"
+ android:autofillHints="username"
+ tools:ignore="UnusedAttribute"/>
+
+ </com.google.android.material.textfield.TextInputLayout >
+
+ <com.google.android.material.textfield.TextInputLayout
+ android:id="@+id/password_text_input_layout"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ app:passwordToggleEnabled="true">
+
+ <mozilla.components.feature.prompts.dialog.AutofillEditText
+ android:id="@+id/password"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:hint="@string/mozac_feature_prompt_password_hint"
+ android:inputType="textPassword"
+ android:autofillHints="password"
+ tools:ignore="UnusedAttribute"/>
+
+ </com.google.android.material.textfield.TextInputLayout >
+
+ </LinearLayout>
+</ScrollView> \ No newline at end of file
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompt_save_credit_card_prompt.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompt_save_credit_card_prompt.xml
new file mode 100644
index 0000000000..03bb4d9a83
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompt_save_credit_card_prompt.xml
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="?android:windowBackground"
+ android:paddingStart="16dp"
+ android:paddingTop="16dp"
+ android:paddingEnd="16dp"
+ android:paddingBottom="16dp"
+ tools:ignore="Overdraw">
+
+ <androidx.appcompat.widget.AppCompatImageView
+ android:id="@+id/lock_icon"
+ android:layout_width="24dp"
+ android:layout_height="24dp"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:srcCompat="@drawable/mozac_ic_lock_24"
+ app:tint="?android:attr/textColorPrimary"
+ android:importantForAccessibility="no" />
+
+ <androidx.appcompat.widget.AppCompatTextView
+ android:id="@+id/save_credit_card_header"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:focusable="true"
+ android:focusableInTouchMode="true"
+ android:gravity="center_vertical"
+ android:textColor="?android:textColorPrimary"
+ android:textSize="16sp"
+ android:textStyle="bold"
+ android:layout_marginStart="12dp"
+ android:layout_marginEnd="12dp"
+ app:layout_constraintStart_toEndOf="@id/lock_icon"
+ app:layout_constraintTop_toTopOf="parent"
+ tools:text="Securely save this card?" />
+
+ <androidx.appcompat.widget.AppCompatTextView
+ android:id="@+id/save_credit_card_message"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:gravity="center_vertical"
+ android:text="@string/mozac_feature_prompts_save_credit_card_prompt_body"
+ android:textColor="?android:textColorSecondary"
+ android:textSize="14sp"
+ android:visibility="gone"
+ app:layout_constraintStart_toStartOf="@id/save_credit_card_header"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/save_credit_card_header"
+ app:layout_goneMarginTop="20dp"
+ tools:text="Card number will be encrypted. Security coded won\'t be saved."
+ tools:visibility="visible" />
+
+ <ImageView
+ android:id="@+id/credit_card_logo"
+ android:layout_width="40dp"
+ android:layout_height="40dp"
+ android:layout_marginTop="16dp"
+ android:scaleType="fitCenter"
+ android:importantForAccessibility="no"
+ app:layout_constraintStart_toStartOf="@id/save_credit_card_header"
+ app:layout_constraintTop_toBottomOf="@id/save_credit_card_message" />
+
+ <TextView
+ android:id="@+id/credit_card_number"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="16dp"
+ android:layout_marginStart="16dp"
+ android:layout_marginEnd="48dp"
+ android:clickable="false"
+ android:focusable="false"
+ android:importantForAutofill="no"
+ android:textAppearance="?android:attr/textAppearanceListItem"
+ android:textIsSelectable="false"
+ app:layout_constraintBottom_toTopOf="@id/credit_card_expiration_date"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toEndOf="@id/credit_card_logo"
+ app:layout_constraintTop_toBottomOf="@id/save_credit_card_message"
+ app:layout_constraintVertical_chainStyle="packed"
+ tools:text="Card 0000000000" />
+
+ <TextView
+ android:id="@+id/credit_card_expiration_date"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="16dp"
+ android:layout_marginEnd="48dp"
+ android:clickable="false"
+ android:focusable="false"
+ android:importantForAutofill="no"
+ android:textAppearance="?android:attr/textAppearanceListItemSecondary"
+ android:textIsSelectable="false"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toEndOf="@id/credit_card_logo"
+ app:layout_constraintTop_toBottomOf="@id/credit_card_number"
+ tools:text="01/2022" />
+
+ <com.google.android.material.button.MaterialButton
+ android:id="@+id/save_cancel"
+ style="@style/Widget.MaterialComponents.Button.TextButton"
+ android:layout_width="wrap_content"
+ android:layout_height="48dp"
+ android:layout_marginTop="16dp"
+ android:layout_marginEnd="12dp"
+ android:background="?android:attr/selectableItemBackground"
+ android:letterSpacing="0"
+ android:text="@string/mozac_feature_prompt_not_now"
+ android:textAlignment="center"
+ android:textAllCaps="false"
+ android:textColor="@color/button_state_list"
+ android:textSize="14sp"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toStartOf="@id/save_confirm"
+ app:layout_constraintTop_toBottomOf="@id/credit_card_logo"
+ app:rippleColor="?android:textColorSecondary" />
+
+ <Button
+ android:id="@+id/save_confirm"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentEnd="true"
+ android:layout_marginTop="16dp"
+ android:text="@string/mozac_feature_prompt_save_confirmation"
+ android:textAlignment="center"
+ android:textAllCaps="false"
+ android:textColor="?android:windowBackground"
+ android:textSize="14sp"
+ android:textStyle="bold"
+ app:backgroundTint="@color/button_state_list"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/credit_card_logo"
+ app:rippleColor="?android:textColorSecondary" />
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompt_save_login_prompt.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompt_save_login_prompt.xml
new file mode 100644
index 0000000000..6deb56ffff
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompt_save_login_prompt.xml
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/feature_prompt_login_fragment"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="?android:windowBackground"
+ android:paddingStart="16dp"
+ android:paddingTop="16dp"
+ android:paddingEnd="16dp"
+ android:paddingBottom="16dp"
+ tools:ignore="Overdraw">
+
+ <androidx.appcompat.widget.AppCompatImageView
+ android:id="@+id/host_icon"
+ android:layout_width="24dp"
+ android:layout_height="24dp"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:srcCompat="@drawable/mozac_ic_globe_24"
+ android:importantForAccessibility="no" />
+
+ <androidx.appcompat.widget.AppCompatTextView
+ android:id="@+id/host_name"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:focusable="true"
+ android:focusableInTouchMode="true"
+ android:gravity="center_vertical"
+ android:textColor="?android:textColorPrimary"
+ android:textSize="16sp"
+ android:layout_marginStart="12dp"
+ android:layout_marginEnd="12dp"
+ app:layout_constraintStart_toEndOf="@+id/host_icon"
+ app:layout_constraintTop_toTopOf="parent"
+ tools:text="host.com" />
+
+ <androidx.appcompat.widget.AppCompatTextView
+ android:id="@+id/save_message"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="16dp"
+ android:drawablePadding="16dp"
+ android:gravity="center_vertical"
+ android:textColor="?android:textColorPrimary"
+ android:textSize="16sp"
+ app:drawableStartCompat="@drawable/mozac_ic_login_24"
+ app:drawableTint="?android:textColorPrimary"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/host_name"
+ app:layout_goneMarginTop="8dp"
+ tools:text="@string/mozac_feature_prompt_login_save_headline_2" />
+
+ <mozilla.components.feature.prompts.widget.LoginPanelTextInputLayout
+ android:id="@+id/userNameLayout"
+ style="@style/MozTextInputLayout"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="30dp"
+ android:layout_marginTop="16dp"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/save_message">
+
+ <com.google.android.material.textfield.TextInputEditText
+ android:id="@+id/username_field"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:hint="@string/mozac_feature_prompt_username_hint"
+ android:imeOptions="actionDone"
+ android:singleLine="true"
+ android:textColor="?android:textColorPrimary"
+ android:textSize="16sp" />
+ </mozilla.components.feature.prompts.widget.LoginPanelTextInputLayout>
+
+ <mozilla.components.feature.prompts.widget.LoginPanelTextInputLayout
+ android:id="@+id/password_text_input_layout"
+ style="@style/MozTextInputLayout"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="30dp"
+ android:layout_marginTop="12dp"
+ app:errorEnabled="true"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/userNameLayout"
+ app:passwordToggleDrawable="@drawable/mozac_ic_password_reveal_two_state"
+ app:passwordToggleEnabled="true"
+ app:passwordToggleTint="?android:textColorPrimary">
+
+ <com.google.android.material.textfield.TextInputEditText
+ android:id="@+id/password_field"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:hint="@string/mozac_feature_prompt_password_hint"
+ android:imeOptions="actionDone"
+ android:inputType="textPassword"
+ android:singleLine="true"
+ android:textColor="?android:textColorPrimary"
+ android:textSize="16sp" />
+
+ </mozilla.components.feature.prompts.widget.LoginPanelTextInputLayout>
+
+ <com.google.android.material.button.MaterialButton
+ android:id="@+id/save_cancel"
+ style="@style/Widget.MaterialComponents.Button.TextButton"
+ android:layout_width="wrap_content"
+ android:layout_height="48dp"
+ android:layout_marginTop="16dp"
+ android:layout_marginEnd="12dp"
+ android:background="?android:attr/selectableItemBackground"
+ android:letterSpacing="0"
+ android:text="@string/mozac_feature_prompt_never_save"
+ android:textAlignment="center"
+ android:textAllCaps="false"
+ android:textColor="@color/button_state_list"
+ android:textSize="14sp"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toStartOf="@+id/save_confirm"
+ app:layout_constraintTop_toBottomOf="@+id/password_text_input_layout"
+ app:rippleColor="?android:textColorSecondary" />
+
+ <Button
+ android:id="@+id/save_confirm"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentEnd="true"
+ android:layout_marginTop="16dp"
+ android:text="@string/mozac_feature_prompt_save_confirmation"
+ android:textAlignment="center"
+ android:textAllCaps="false"
+ android:textColor="?android:windowBackground"
+ android:textSize="14sp"
+ android:textStyle="bold"
+ app:backgroundTint="@color/button_state_list"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/password_text_input_layout"
+ app:rippleColor="?android:textColorSecondary" />
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompt_simple_text.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompt_simple_text.xml
new file mode 100644
index 0000000000..62c9bc86ec
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompt_simple_text.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/labelView"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center_vertical"
+ android:minHeight="?android:attr/listPreferredItemHeightSmall"
+ android:paddingStart="24dp"
+ android:paddingTop="16dp"
+ android:paddingEnd="24dp"
+ android:textAppearance="?android:attr/textAppearanceListItemSmall" />
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompt_with_check_box.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompt_with_check_box.xml
new file mode 100644
index 0000000000..f094fe9c43
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompt_with_check_box.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingTop="?android:attr/listPreferredItemPaddingLeft"
+ android:paddingStart="?android:attr/listPreferredItemPaddingLeft"
+ android:paddingEnd="?android:attr/listPreferredItemPaddingLeft">
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingStart="?android:attr/listPreferredItemPaddingLeft"
+ android:paddingEnd="?android:attr/listPreferredItemPaddingLeft">
+
+ <TextView
+ android:id="@+id/message"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:maxLines="30"
+ android:scrollbars="vertical"
+ android:textColor="?android:attr/textColorPrimary"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ tools:text="Message" />
+
+ <CheckBox
+ android:id="@id/mozac_feature_prompts_no_more_dialogs_check_box"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:text="@string/mozac_feature_prompts_no_more_dialogs"
+ android:textColor="?android:attr/textColorPrimary"
+ android:visibility="gone"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/message"
+ tools:visibility="visible" />
+
+ </androidx.constraintlayout.widget.ConstraintLayout>
+</ScrollView>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_address_list_item.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_address_list_item.xml
new file mode 100644
index 0000000000..3a63084b7e
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_address_list_item.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/address_item"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="?android:attr/selectableItemBackground"
+ android:minHeight="?android:attr/listPreferredItemHeight">
+
+ <TextView
+ android:id="@+id/address_name"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="16dp"
+ android:layout_marginEnd="16dp"
+ android:clickable="false"
+ android:focusable="false"
+ android:importantForAutofill="no"
+ android:textAppearance="?android:attr/textAppearanceListItem"
+ android:textIsSelectable="false"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_chainStyle="packed"
+ tools:text="1230 Main St, Los Angeles, CA 90237" />
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_address_select_prompt.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_address_select_prompt.xml
new file mode 100644
index 0000000000..80a4660703
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_address_select_prompt.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<merge xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout">
+
+ <ScrollView
+ android:id="@+id/address_scroll_view"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:id="@+id/scroll_child"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <androidx.appcompat.widget.AppCompatTextView
+ android:id="@+id/select_address_header"
+ android:layout_width="0dp"
+ android:layout_height="48dp"
+ android:background="?android:selectableItemBackground"
+ android:contentDescription="@string/mozac_feature_prompts_expand_address_content_description_2"
+ android:drawablePadding="24dp"
+ android:gravity="center_vertical"
+ android:paddingStart="16dp"
+ android:paddingEnd="56dp"
+ android:text="@string/mozac_feature_prompts_select_address_2"
+ android:textColor="?android:colorEdgeEffect"
+ android:textSize="16sp"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <androidx.appcompat.widget.AppCompatImageView
+ android:id="@+id/mozac_feature_address_expander"
+ android:layout_width="48dp"
+ android:layout_height="48dp"
+ android:layout_marginStart="8dp"
+ android:layout_marginEnd="8dp"
+ android:clickable="false"
+ android:focusable="false"
+ android:importantForAccessibility="no"
+ android:padding="16dp"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:srcCompat="@drawable/mozac_ic_chevron_down_24"
+ app:tint="?android:colorEdgeEffect" />
+
+ <androidx.recyclerview.widget.RecyclerView
+ android:id="@+id/address_list"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:visibility="gone"
+ app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
+ app:layout_constraintTop_toBottomOf="@id/mozac_feature_address_expander"
+ tools:listitem="@layout/mozac_feature_prompts_address_list_item" />
+
+ <androidx.appcompat.widget.AppCompatTextView
+ android:id="@+id/manage_addresses"
+ android:layout_width="0dp"
+ android:layout_height="48dp"
+ android:background="?android:selectableItemBackground"
+ android:drawablePadding="24dp"
+ android:gravity="center_vertical"
+ android:paddingStart="24dp"
+ android:paddingEnd="0dp"
+ android:text="@string/mozac_feature_prompts_manage_address"
+ android:textColor="?android:textColorPrimary"
+ android:textSize="16sp"
+ android:visibility="gone"
+ app:drawableStartCompat="@drawable/mozac_ic_settings_24"
+ app:drawableTint="?android:textColorPrimary"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/address_list" />
+ </androidx.constraintlayout.widget.ConstraintLayout>
+ </ScrollView>
+</merge>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_color_item.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_color_item.xml
new file mode 100644
index 0000000000..15f07d2dc6
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_color_item.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<TextView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/color_item"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceListItemSmall"
+ android:gravity="center_vertical"
+ android:background="@drawable/color_picker_row_bg"
+ android:minHeight="?android:attr/listPreferredItemHeight" />
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_color_picker_dialogs.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_color_picker_dialogs.xml
new file mode 100644
index 0000000000..7c7e329fb8
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_color_picker_dialogs.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<androidx.recyclerview.widget.RecyclerView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/recyclerView"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingTop="16dp"
+ tools:listitem="@layout/mozac_feature_prompts_color_item" />
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_credit_card_list_item.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_credit_card_list_item.xml
new file mode 100644
index 0000000000..34bc24b7ef
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_credit_card_list_item.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/credit_card_item"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="?android:attr/selectableItemBackground"
+ android:minHeight="?android:attr/listPreferredItemHeight">
+
+ <ImageView
+ android:id="@+id/credit_card_logo"
+ android:layout_width="40dp"
+ android:layout_height="40dp"
+ android:layout_marginStart="16dp"
+ android:scaleType="fitCenter"
+ android:importantForAccessibility="no"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toBottomOf="parent" />
+
+ <TextView
+ android:id="@+id/credit_card_number"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="16dp"
+ android:layout_marginEnd="48dp"
+ android:clickable="false"
+ android:focusable="false"
+ android:importantForAutofill="no"
+ android:textAppearance="?android:attr/textAppearanceListItem"
+ android:textIsSelectable="false"
+ app:layout_constraintBottom_toTopOf="@id/credit_card_expiration_date"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toEndOf="@id/credit_card_logo"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_chainStyle="packed"
+ tools:text="Card 0000000000" />
+
+ <TextView
+ android:id="@+id/credit_card_expiration_date"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="16dp"
+ android:layout_marginEnd="48dp"
+ android:clickable="false"
+ android:focusable="false"
+ android:importantForAutofill="no"
+ android:textAppearance="?android:attr/textAppearanceListItemSecondary"
+ android:textIsSelectable="false"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toEndOf="@id/credit_card_logo"
+ app:layout_constraintTop_toBottomOf="@id/credit_card_number"
+ tools:text="01/2022" />
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_credit_card_select_prompt.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_credit_card_select_prompt.xml
new file mode 100644
index 0000000000..fad767dafd
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_credit_card_select_prompt.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<merge xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout">
+
+ <ScrollView
+ android:id="@+id/credit_card_scroll_view"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:id="@+id/scroll_child"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <androidx.appcompat.widget.AppCompatTextView
+ android:id="@+id/select_credit_card_header"
+ android:layout_width="0dp"
+ android:layout_height="48dp"
+ android:background="?android:selectableItemBackground"
+ android:contentDescription="@string/mozac_feature_prompts_expand_credit_cards_content_description_2"
+ android:drawablePadding="24dp"
+ android:gravity="center_vertical"
+ android:paddingStart="16dp"
+ android:paddingEnd="56dp"
+ android:text="@string/mozac_feature_prompts_select_credit_card_2"
+ android:textColor="?android:colorEdgeEffect"
+ android:textSize="16sp"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <androidx.appcompat.widget.AppCompatImageView
+ android:id="@+id/mozac_feature_credit_cards_expander"
+ android:layout_width="48dp"
+ android:layout_height="48dp"
+ android:layout_marginStart="8dp"
+ android:layout_marginEnd="8dp"
+ android:clickable="false"
+ android:focusable="false"
+ android:importantForAccessibility="no"
+ android:padding="16dp"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:srcCompat="@drawable/mozac_ic_chevron_down_24"
+ app:tint="?android:colorEdgeEffect" />
+
+ <androidx.recyclerview.widget.RecyclerView
+ android:id="@+id/credit_cards_list"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:visibility="gone"
+ app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
+ app:layout_constraintTop_toBottomOf="@id/mozac_feature_credit_cards_expander"
+ tools:listitem="@layout/mozac_feature_prompts_credit_card_list_item" />
+
+ <androidx.appcompat.widget.AppCompatTextView
+ android:id="@+id/manage_credit_cards"
+ android:layout_width="0dp"
+ android:layout_height="48dp"
+ android:background="?android:selectableItemBackground"
+ android:drawablePadding="24dp"
+ android:gravity="center_vertical"
+ android:paddingStart="24dp"
+ android:paddingEnd="0dp"
+ android:text="@string/mozac_feature_prompts_manage_credit_cards_2"
+ android:textColor="?android:textColorPrimary"
+ android:textSize="16sp"
+ android:visibility="gone"
+ app:drawableStartCompat="@drawable/mozac_ic_settings_24"
+ app:drawableTint="?android:textColorPrimary"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/credit_cards_list" />
+ </androidx.constraintlayout.widget.ConstraintLayout>
+ </ScrollView>
+</merge>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_date_time_picker.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_date_time_picker.xml
new file mode 100644
index 0000000000..e33d882417
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_date_time_picker.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<ScrollView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <DatePicker
+ android:id="@+id/date_picker"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"/>
+
+ <TimePicker
+ android:id="@+id/datetime_picker"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"/>
+
+ </LinearLayout>
+</ScrollView>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_time_picker.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_time_picker.xml
new file mode 100644
index 0000000000..68323699f5
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_prompts_time_picker.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?><!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<merge xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ tools:parentTag="android.widget.ScrollView">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:orientation="horizontal">
+
+ <android.widget.NumberPicker
+ android:id="@+id/hour_picker"
+ android:layout_width="60dp"
+ android:layout_height="wrap_content"
+ android:layout_marginHorizontal="1dp"
+ android:focusable="true"
+ android:focusableInTouchMode="true" />
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/mozac_feature_prompts_second_separator" />
+
+ <android.widget.NumberPicker
+ android:id="@+id/minute_picker"
+ android:layout_width="75dp"
+ android:layout_height="wrap_content"
+ android:layout_marginHorizontal="1dp"
+ android:focusable="true"
+ android:focusableInTouchMode="true" />
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/mozac_feature_prompts_second_separator" />
+
+ <android.widget.NumberPicker
+ android:id="@+id/second_picker"
+ android:layout_width="75dp"
+ android:layout_height="wrap_content"
+ android:layout_marginHorizontal="1dp"
+ android:focusable="true"
+ android:focusableInTouchMode="true" />
+
+ <TextView
+ android:id="@+id/millisecond_separator"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/mozac_feature_prompts_millisecond_separator" />
+
+ <android.widget.NumberPicker
+ android:id="@+id/millisecond_picker"
+ android:layout_width="75dp"
+ android:layout_height="wrap_content"
+ android:layout_marginHorizontal="1dp"
+ android:focusable="true"
+ android:focusableInTouchMode="true" />
+
+ </LinearLayout>
+</merge> \ No newline at end of file
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_single_choice_item.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_single_choice_item.xml
new file mode 100644
index 0000000000..d0373b3133
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_single_choice_item.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?><!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?android:attr/listPreferredItemHeightSmall"
+ android:background="?android:attr/selectableItemBackground">
+
+ <CheckedTextView
+ android:id="@+id/labelView"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?android:attr/listPreferredItemHeightSmall"
+ android:checkMark="?android:attr/listChoiceIndicatorSingle"
+ android:gravity="center_vertical"
+ android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+ android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+ android:textAppearance="?android:attr/textAppearanceListItemSmall"/>
+</LinearLayout> \ No newline at end of file
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_suggest_strong_password_view.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_suggest_strong_password_view.xml
new file mode 100644
index 0000000000..47ce784257
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_suggest_strong_password_view.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="utf-8"?><!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<merge xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout">
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+ <androidx.appcompat.widget.AppCompatTextView
+ android:id="@+id/suggest_strong_password_header"
+ android:layout_width="0dp"
+ android:layout_height="48dp"
+ android:background="?android:selectableItemBackground"
+ android:contentDescription="@string/mozac_feature_prompts_suggest_strong_password_content_description"
+ android:drawablePadding="24dp"
+ android:gravity="center_vertical"
+ android:paddingStart="16dp"
+ android:paddingEnd="56dp"
+ android:text="@string/mozac_feature_prompts_suggest_strong_password"
+ android:textColor="?android:colorEdgeEffect"
+ android:textSize="16sp"
+ app:drawableStartCompat="@drawable/mozac_ic_login_24"
+ app:drawableTint="?android:colorEdgeEffect"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <androidx.appcompat.widget.AppCompatTextView
+ android:id="@+id/use_strong_password"
+ android:layout_width="0dp"
+ android:layout_height="48dp"
+ android:background="?android:selectableItemBackground"
+ android:drawablePadding="24dp"
+ android:gravity="center_vertical"
+ android:paddingStart="16dp"
+ android:paddingEnd="0dp"
+ android:text="@string/mozac_feature_prompts_suggest_strong_password_message"
+ android:textColor="?android:textColorPrimary"
+ android:textSize="16sp"
+ android:visibility="gone"
+ app:drawableStartCompat="@drawable/mozac_ic_lock_24"
+ app:drawableTint="?android:textColorPrimary"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/suggest_strong_password_header" />
+ </androidx.constraintlayout.widget.ConstraintLayout>
+</merge>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_text_prompt.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_text_prompt.xml
new file mode 100644
index 0000000000..c3c9cdc776
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/layout/mozac_feature_text_prompt.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<ScrollView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:paddingTop="?android:attr/listPreferredItemPaddingLeft"
+ android:paddingStart="?android:attr/listPreferredItemPaddingLeft"
+ android:paddingEnd="?android:attr/listPreferredItemPaddingLeft">
+
+ <TextView
+ android:id="@+id/input_label"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ tools:text="Please enter your name"
+ android:labelFor="@+id/input_value"
+ android:contentDescription="@string/mozac_feature_prompts_content_description_input_label"/>
+
+ <EditText
+ android:id="@+id/input_value"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ tools:ignore="Autofill"
+ android:inputType="text"/>
+
+ <CheckBox
+ android:id="@id/mozac_feature_prompts_no_more_dialogs_check_box"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/mozac_feature_prompts_no_more_dialogs"
+ android:visibility="gone"
+ tools:visibility="visible"
+ android:textColor="#aaa"/>
+
+ </LinearLayout>
+</ScrollView>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-am/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-am/strings.xml
new file mode 100644
index 0000000000..a0d6b1b708
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-am/strings.xml
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">እሺ</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">ተወው</string>
+
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">ይህ ገጽ ተጨማሪ መገናኛዎችን እንዳይፈጥር ይከለክሉት</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">አቀናብር</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">አጽዳ</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">ይግቡ</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">የተጠቃሚ ስም</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">የይለፍ ቃል</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">አታስቀምጥ</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">አሁን አይሆንም</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">በጭራሽ አታስቀምጥ</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">አሁን አይሆንም</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">አስቀምጥ</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">አታዘምን</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">አሁን አይሆንም</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">አዘምን</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">የይለፍ ቃል ባዶ መሆን የለበትም</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">የይለፍ ቃል ያስገቡ</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">መግባትን ማስቀመጥ አልተቻለም</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">የይለፍ ቃል ማስቀመጥ አልተቻለም</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">ይህ መግቢያ ይቀመጥ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">የይለፍ ቃል ይቀመጥ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">ይህ መግቢያ ይዘምን?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">የይለፍ ቃል ይዘምን?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">የተጠቃሚ ስም በተቀመጠው ይለፍ ቃል ላይ ይታከል?</string>
+
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">የጽሑፍ ግብዓት መስክ ለማስገባት መለያ</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">ቀለም ይምረጡ</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">ፍቀድ</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">ከልክል</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">እርግጠኛ ነዎት?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">ከዚህ ድረ-ገፅ መውጣት ይፈልጋሉ? ያስገቡት ውሂብ ላይቀመጥ ይችላል</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">ቆይ</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">ውጣ</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">አንድ ወር ይምረጡ</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">ጥር</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">የካ</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">መጋ</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">ሚያ</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">ግን</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">ሰኔ</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">ሐም</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">ነሐ</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">መስ</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">ጥቅ</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">ሕዳ</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">ታሕ</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">ስዓት ይሙሉ</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">መግቢያዎችን ያስተዳድሩ</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">የይለፍ ቃሎችን አስተዳድር</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">የተጠቆሙ መግቢያዎችን ዘርጋ</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">የተቀመጡ የይለፍ ቃሎችን ዘርጋ</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">የተጠቆሙ መግቢያዎችን ሰብስብ</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">የተቀመጡ የይለፍ ቃሎችን ሰብስብ</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">የተጠቆሙ መግቢያዎች</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">የተቀመጡ የይለፍ ቃሎች</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">ጠንካራ የይለፍ ቃል ጥቆማ</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">ጠንካራ የይለፍ ቃል ጥቆማ</string>
+
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">ጠንካራ የይለፍ ቃል ይጠቀሙ:- %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">ውሂብ ወደዚህ ድረ-ገፅ እንደገና ይላክ?</string>
+
+ <string name="mozac_feature_prompt_repost_message">ይህን ገጽ ማደስ እንደ ክፍያ መላክ ወይም አስተያየት መለጠፍ ያሉ የቅርብ ጊዜ ድርጊቶችን ሁለት ጊዜ ማባዛት ይችላል።</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">ውሂብ እንደገና ላክ</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">ተወው</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">ክሬዲት ካርድ ይምረጡ</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">የተቀመጠ ካርድ ተጠቀም</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">የተጠቆሙ ክሬዲት ካርዶችን ዘርጋ</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">የተቀመጡ ካርዶችን ዘርጋ</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">የተጠቆሙ ክሬዲት ካርዶችን ሰብስብ</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">የተቀመጡ ካርዶችን ሰብስብ</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">ክሬዲት ካርዶችን ያስተዳድሩ</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">ካርዶችን ያስተዳድሩ</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">ይህን ካርድ ደህንነቱ በተጠበቀ ሁኔታ ይቀመጥ?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">የካርድ ማብቂያ ቀን ይዘምን?</string>
+
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">የካርድ ቁጥር ይሰወራል ። የደህንነት የሚስጥር ፅሑፍ አይቀመጥም።</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s የካርድ ቁጥርዎን ያመስጥራል። የደህንነት ኮድዎ አይቀመጥም።</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">አድራሻ ይምረጡ</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">የተጠቆሙ አድራሻዎችን ዘርጋ</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">የተቀመጡ አድራሻዎችን ዘርጋ</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">የተጠቆሙ አድራሻዎችን ሰብስብ</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">የተቀመጡ አድራሻዎችን ሰብስብ</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">አድራሻዎችን ያስተዳድሩ</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">የመለያ ምስል</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">መለያ አቅራቢ ይምረጡ</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">በ%1$s መለያ ይግቡ</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">%1$sን እንደ መለያ አቅራቢ ይጠቀሙ</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ በ%2$s መለያ ወደ %1$s መግባት በ<a href="%3$s">የግላዊነት ፖሊሲ</a> እና <a href="%4$s">የአገልግሎት ውል</a> ተገዢ ነው]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">ቀጥል</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">ሰርዝ</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-an/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-an/strings.xml
new file mode 100644
index 0000000000..7385652c19
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-an/strings.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Vale</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Cancelar</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Privar que ista pachina creye dialogos adicionals</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Aplicar</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Borrar</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Iniciar sesión</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Nombre d’usuario</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Clau</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">No alzar-lo</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">No alzar nunca</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Alzar-lo</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">No actualizar-lo</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Actualizar</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Lo campo Clau no puede estar vuedo</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">No se puede alzar l’inicio de sesión</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Alzar este inicio de sesión?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Actualizar este inicio de sesión?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Anyadir nombre de usuario a la clau alzada?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Etiqueta pa escribir un campo de dentrada de texto</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Triar una color</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Permitir</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Refusar</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">En yes seguro?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Quiers salir d’este puesto? Los datos que has escrito no s’alzarán</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">No salir</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Salir</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Triar un mes</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Chi</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Abr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">May</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Chun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Chul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Ago</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Set</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Oct</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Avi</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Chestiona os inicios de sesión</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Expande los inicios de sesión sucherius</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Reduce los inicios de sesión sucherius</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Inicios de sesión sucherius</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-ar/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ar/strings.xml
new file mode 100644
index 0000000000..a7a196cfa7
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ar/strings.xml
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">حسنا</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">ألغِ</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">امنع هذه الصفحة من إنشاء نوافذ حوار إضافية</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">حدد</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">امسح</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">لِج</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">اسم المستخدم</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">كلمة السر</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">لا تحفظ</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">لا تحفظ أبدًا</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">ليس الآن</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">احفظ</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">لا تُحدّث</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">حدّث</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">لا يمكن أن يكون حقل كلمة السر فارغًا</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">تعذّر حفظ جلسة الولوج</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">أنحفظ هذا الولوج؟</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">أنحدّث هذا الولوج؟</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">أنُضيف اسم المستخدم إلى كلمة المرور المحفوظة؟</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">تسمية لإدخال نص في حقل نصوص</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">اختر لونًا</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">اسمح</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">ارفض</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">أمتأكّد أنت؟</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">أتريد مغادرة هذا الموقع؟ قد لا تُحظ البيانات المُدخلة</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">سأبقى</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">غادِر</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">اختر شهرا</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">يناير</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">فبراير</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">مارس</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">أبريل</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">مايو</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">يونيو</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">يوليو</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">أغسطس</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">سبتمبر</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">أكتوبر</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">نوفمبر</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">ديسمبر</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">اضبط الوقت</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">أدِر جلسات الولوج</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">وسّع جلسات الولوج المقترحة</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">اطوِ جلسات الولوج المقترحة</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">جلسات الولوج المقترحة</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">أنُعيد إرسال البيانات إلى هذا الموقع؟</string>
+ <string name="mozac_feature_prompt_repost_message">بإنعاش هذه الصفحة قد تُكرّر آخر الإجراءات مثل إرسال النقود أو نشر تعليق.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">أعِد إرسال البيانات</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">ألغِ</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">اختر بطاقة ائتمان</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">وسّع بطاقات الائتمان المقترحة</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">اطوِ بطاقات الائتمان المقترحة</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">أدِر بطاقات الائتمان</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">أأحفظ هذه البطاقة بأمان؟</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">أتريد تحديث تاريخ انتهاء البطاقة؟</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">سيُعمّى رقم البطاقة. لن يُحفظ رمز الأمان.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">اختر العنوان</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">وسِّع العناوين المقترحة</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">اطوِ العناوين المقترحة</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">أدر العناوين</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">صورة الحساب</string>
+ <!-- Title of the Identity Credential provider dialog choose. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">اختر مزود ولوج</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">استخدم %1$s كمزود ولوج</string>
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-ast/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ast/strings.xml
new file mode 100644
index 0000000000..812ae26724
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ast/strings.xml
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">D\'acuerdu</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Encaboxar</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Evitar qu\'esta páxina cree diálogos adicionales</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Afitar</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Borrar</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Aniciu de sesión</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Nome d\'usuariu</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Contraseña</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Nun guardar</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Nun guardar enxamás</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Agora non</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Guardar</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Nun anovar</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Anovar</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">El campu «Contraseña» nun ha tar baleru</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Nun ye posible guardar la cuenta</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">¿Quies guardar esta cuenta?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">¿Quies anovar esta cuenta?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">¿Quies amestar el nome d\'usuariu a la contraseña guardada?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Etiqueta pa introducir un campu d\'entrada de testu</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Escoyeta d\'un color</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Permitir</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Negar</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">¿De xuru?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">¿Quies colar d\'esti sitiu? Ye posible que nun se guarden los datos introducíos</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Quedar</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Colar</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Escoyeta d\'un mes</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Xin</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Abr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">May</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Xun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Xnt</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Ago</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Set</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Och</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Pay</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Avi</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Xestión de cuentes</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Espander les cuentes suxeríes</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Recoyer les cuentes suxeríes</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Cuentes suxeríes</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">¿Quies volver unviar los datos a esti sitiu?</string>
+ <string name="mozac_feature_prompt_repost_message">Anovar esta páxina podría duplicar les aiciones de recién, como unviar un pagu o espublizar dos vegaes un artículu.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Volver unviar</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Encaboxar</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Seleiciona una tarxeta de creitu</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Espander les tarxetes de creitu</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Recoyer les tarxetes de creitu</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Xestión de tarxetes de creitu</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">¿Quies guardar esta tarxeta?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">¿Quies anovar la data de caducidá de la tarxeta?</string>
+
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Cífrase\'l númberu de la tarxeta, mas nun se guarda\'l códigu de seguranza.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Seleición d\'unes señes</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Espander les señes suxeríes</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Recoyer les señes suxeríes</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Xestionar les señes</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-az/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-az/strings.xml
new file mode 100644
index 0000000000..b292f9a227
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-az/strings.xml
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Tamam</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Ləğv et</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Bu səhifənin əlavə dialoqlar yaratmasını əngəllə</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Qur</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Təmizlə</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Daxil ol</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">İstifadəçi adı</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Parol</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Saxlama</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Heç vaxt saxlama</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Saxla</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Yeniləmə</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Yenilə</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Parol sahəsi boş olmamalıdır</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Daxil olmanı yadda saxlamaq mümkün olmadı</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Hesab yadda saxlansın?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Hesab yenilənsin?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Saxlanılmış parola istifadəçi adı əlavə edilsin?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Mətn girişi sahəsi üçün etiket</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Rəng seç</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">İcazə ver</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Rədd et</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Əminsiniz?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Saytı tərk etmək istəyirsiniz? Daxil etdiyiniz məlumatlar saxlanmamış ola bilərlər</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Qal</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Tərk et</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Ay seç</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Yan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Fev</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Apr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">May</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">İyn</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">İyl</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Avq</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sen</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Okt</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Noy</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dek</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Hesabları idarə et</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Məsləhət görülən hesabları genişlət</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Məsləhət görülən hesabları daralt</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Məsləhət görülən hesablar</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Məlumat bu sayta təkrar göndərilsin?</string>
+ <string name="mozac_feature_prompt_repost_message">Bu səhifəni yeniləmə ödəniş və ya şərh yazma kimi son əməliyyatları təkrarlaya bilər.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Təkrar göndər</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Ləğv et</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-azb/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-azb/strings.xml
new file mode 100644
index 0000000000..c76429897f
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-azb/strings.xml
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">تامام</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">لغو</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">بو صفحه‌نین ایضافی دیالوق‌لار یاراتماسی‌نین قارشیسینی آلین</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">تنظیم ‌ائله</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">پوز</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">گیریش</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">قوللانیجی آدی</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">رمز</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">ساخلاما</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">ایندی یوخ</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">هئچ زامان ساخلاما</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">ایندی یوخ</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">ساخلا</string>
+
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">گونجل‌ ائله‌مه</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">ایندی یوخ</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">گونجلله</string>
+
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">رمز یئرلیکی بوش اولمالیدیر</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">بیر رمز وئر</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">گیریشی ساخلاماق مومکون اولمادی</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">رمزی یاددا ساخلاماق مومکون دئییل</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">بو گیریش یاددا ساخلانسین؟</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">رمز یاددا ساخلانسین؟</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">بو گیریش گونجللنسین؟</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">رمز گونجللنسین؟</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">قوللانیجی آدی یاددا ساخلانمیش رمزه اکلنسین؟</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">متن گیریش یئرلیکینه گیرمک اتیکتی</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">بیر رنگ سئچ</string>
+
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">ایجازه وئر</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">رد </string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">سیز آرخایینسیز؟</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">بو سایتدان آییرلماق ایستییرسیز؟ گیردیگینیز دیتالار یاددا ساخلانیلمایا بیلر.</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">قال</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">آیریل</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">بیر آی سئج</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">ژانویه</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">فوریه</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">مارس</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">آپریل</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">می</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">جون</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">جولای</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">آقوست</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">سپتامبر</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">اوکتوبر</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">نووامبر</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">دسامبر</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">چاغ تنظیمی</string>
+
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">اوتوروم‌لاری ایداره ائله</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">رمزلری ایداره ائله</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">توصیه اولونان گیریش‌لری گئنیش‌لت</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">ساخلانمیش رمزلری گئنیش‌لت</string>
+
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">توصیه اولونان گیریش‌لری یئغ</string>
+
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">ساخلانمیش رمزلری یئغ</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">توصیه اولونان گیریش‌لر</string>
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">ساخلانمیش رمزلر</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">گوجلو رمز تکلیف ائدین</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">گوجلو رمز تکلیف ائدین</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">گوجلو رمز ایستیفاده ائدین: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">دیتا بو سایتا یئنی‌دن گؤندریلسین؟</string>
+
+ <string name="mozac_feature_prompt_repost_message">بو صفحه‌نین رفرشی اؤده‌مه گؤندرمک ویا بیر باخیشی ایکی دفعه یایینلاماق کیمی سون حرکت‌لرین تیکرار اولماسینا باعیث اولار.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">دیتانی گئنه گؤندر</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">لغو</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">اعتباری کارتینی سئچین</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">ساخلانمیش کارتدان ایستیفاده ائدین</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">تکلیف اولونان اعتباری کارت‌لاری گئنیش‌لت</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">ساخلانمیش کارت‌لاری گئنیش‌لت</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">تکلیف اولونان اعتباری کارت‌لاری یئغ</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">ساخلانمیش کارت‌لاری یئغ</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">اعتباری کارت‌لاری ایداره ائله</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">کارت‌لاری ایداره ائله</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">بو کارت گوونلی شکیلده یاددا ساخلانسین؟</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">کارتین ایستیفاده موددیتی یئنی‌لنسین؟</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">کارت نومره‌سی رمزلشدیریله‌جک. گوونلیک کودو یاددا ساخلانمیاجاق.</string>
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s کارت نومره‌زی رمزله‌ییر. گوونلیک کودو یاددا ساخلانمیاجاق</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">آدرس سئچین</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">تکلیف اولونان آدرس‌لری گئنیش‌لت</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">ساخلانمیش آدرس‌لری گئنیش‌لت</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">تکلیف اولونان آدرس‌لری یئغ</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">ساخلانمیش آدرس‌لری یئغ</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">آدرس‌لری ایداره ائله</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">حساب عکسی</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">حساب ایرائه‌ وئره‌نی سئچین</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">%1$s حسابی ایله گیرین</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">%1$s اوتورم آچما ایرائه وئره‌نی کیمی ایشه آلین</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[%2$s حسابی ایله %1$s حسابینا داخیل اولماق اونلارین <a href="%3$s">گیزلیلیک سیاستینه</a> و <a href="%4$s">خیدمت شرطلرینه باخیر. </a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">ایدامه وئر</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">لغو</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-ban/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ban/strings.xml
new file mode 100644
index 0000000000..cc094372e7
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ban/strings.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">CUMPU</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Sét</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Puyung</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Ten karaksa</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Ten mangkin</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Raksa</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Anyarin</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Pilih warna</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Jan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Péb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Apr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Méi</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Jun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Jul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Agu</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sép</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Okt</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dés</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-be/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-be/strings.xml
new file mode 100644
index 0000000000..26e60b96c3
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-be/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Добра</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Адмяніць</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Забараніць гэтай старонцы ствараць дадатковыя дыялогі</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Устанавіць</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Ачысціць</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Увайсці</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Імя карыстальніка</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Пароль</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save" moz:removedIn="125" tools:ignore="UnusedResources">Не захоўваць</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2">Не зараз</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Ніколі не захоўваць</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Не зараз</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Захаваць</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update" moz:removedIn="125" tools:ignore="UnusedResources">Не абнаўляць</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2">Не зараз</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Абнавіць</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password" moz:removedIn="125" tools:ignore="UnusedResources">Поле пароля не павінна быць пустым</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2">Увядзіце пароль</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause" moz:removedIn="125" tools:ignore="UnusedResources">Немагчыма захаваць лагін</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2">Немагчыма захаваць пароль</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline" moz:removedIn="125" tools:ignore="UnusedResources">Захаваць гэты лагін?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2">Захаваць пароль?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline" moz:removedIn="125" tools:ignore="UnusedResources">Абнавіць гэты лагін?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2">Абнавіць пароль?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Дадаць імя карыстальніка да захаванага пароля?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Метка для тэкставага поля ўводу</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Выберыце колер</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Дазволіць</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Забараніць</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Вы ўпэўнены?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Ці хочаце пакінуць гэты сайт? Дадзеныя, якія вы ўвялі, могуць не захавацца</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Застацца</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Выйсці</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Выбраць месяц</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Сту</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Лют</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Сак</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Кра</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Май</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Чэр</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Ліп</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Жні</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Вер</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Кас</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Ліс</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Сне</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Усталяваць час</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins" moz:removedIn="125" tools:ignore="UnusedResources">Кіраваць лагінамі</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2">Кіраваць паролямі</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Разгарнуць прапанаваныя лагіны</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2">Разгарнуць захаваныя паролі</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Згарнуць прапанаваныя лагіны</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2">Згарнуць захаваныя паролі</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins" moz:removedIn="125" tools:ignore="UnusedResources">Прапанаваныя лагіны</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2">Захаваныя паролі</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Прапанаваць надзейны пароль</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Прапанаваць надзейны пароль</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Выкарыстаць надзейны пароль: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Адправіць дадзеныя на гэты сайт паўторна?</string>
+ <string name="mozac_feature_prompt_repost_message">Абнаўленне гэтай старонкі можа паўтарыць апошнія дзеянні, напрыклад, адправіць плацеж або размясціць каментарый двойчы.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Паўторна адправіць дадзеныя</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Адмяніць</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card" moz:removedIn="125" tools:ignore="UnusedResources">Выберыце крэдытную карту</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2">Выкарыстаць захаваную карту</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Разгарнуць прапанаваныя крэдытныя карты</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2">Разгарнуць захаваныя карты</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Згарнуць прапанаваныя крэдытныя карты</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2">Згарнуць захаваныя карты</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards" moz:removedIn="125" tools:ignore="UnusedResources">Кіраванне крэдытнымі картамі</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2">Кіраваць картамі</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Захаваць надзейна гэту карту?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Абнавіць тэрмін дзеяння карты?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body" moz:removedIn="125" tools:ignore="UnusedResources">Нумар карты будзе зашыфраваны. Код бяспекі не будзе захаваны.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2">%s шыфруе нумар вашай карты. Ваш код бяспекі не будзе захаваны.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Выбраць адрас</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Разгарнуць прапанаваныя адрасы</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2">Разгарнуць захаваныя адрасы</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Згарнуць прапанаваныя адрасы</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2">Згарнуць захаваныя адрасы</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Кіраваць адрасамі</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Відарыс уліковага запісу</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Выберыце правайдара ўваходу</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Увайсці з уліковым запісам %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Выкарыстоўваць %1$s у якасці правайдара ўваходу</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ Уваход у %1$s з уліковым запісам %2$s рэгулюецца іх <a href="%3$s">палітыкай прыватнасці</a> і <a href="%4$s">умовамі выкарыстання</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Працягнуць</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Скасаваць</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-bg/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-bg/strings.xml
new file mode 100644
index 0000000000..60cb450032
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-bg/strings.xml
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Добре</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Отказ</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Забраняване на страницата да създава нови диалогови прозорци</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Задаване</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Изчистване</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Вписване</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Потребителско име</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Парола</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save" moz:removedIn="125" tools:ignore="UnusedResources">Без запазване</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2">Не сега</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Без запазване</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Не сега</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Запазване</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update" moz:removedIn="125" tools:ignore="UnusedResources">Без обновяване</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2">Не сега</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Обновяване</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password" moz:removedIn="125" tools:ignore="UnusedResources">Полето за парола не трябва да е празно</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2">Въведете парола</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause" moz:removedIn="125" tools:ignore="UnusedResources">Данните за вход не могат да бъдат запазени</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2">Паролата не може да бъде запазена</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline" moz:removedIn="125" tools:ignore="UnusedResources">Запазване на регистрацията?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2">Запазване на паролата?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline" moz:removedIn="125" tools:ignore="UnusedResources">Обновяване на регистрацията?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2">Актуализиране на паролата?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Добавяне на потребител към запазената парола?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Етикет към поле изискващо въвеждане</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Избиране на цвят</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Разрешаване</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Забраняване</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Сигурни ли сте?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Желаете ли да напуснете страницата? Въведените данни може да не са запазени</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Оставане</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Напускане</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Избор на месец</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">ян</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">февр</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">март</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">апр</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">май</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">юни</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">юли</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">авг</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">септ</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">окт</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">ноем</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">дек</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Задаване на време</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins" moz:removedIn="125" tools:ignore="UnusedResources">Управление на регистрации</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2">Управление на пароли</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Разгъване на предложени регистрации</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2">Разгъване на запазените пароли</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Сгъване на предложени регистрации</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2">Сгъване на запазените пароли</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins" moz:removedIn="125" tools:ignore="UnusedResources">Предложени регистрации</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2">Запазени пароли</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Предлагане на силна парола</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Предлагане на силна парола</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Използвайте силна парола: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Повторно изпращане на данни до страницата?</string>
+ <string name="mozac_feature_prompt_repost_message">Презареждането на страницата може да дублира скорошни действия, като заплащане или публикуване на коментар два пъти.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Повторно изпращане на данни</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Отказ</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card" moz:removedIn="125" tools:ignore="UnusedResources">Изберете банкова карта</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2">Използване на запазена карта</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Разгъва предложения списък с банкови карти</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2">Разгъване на запазените карти</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Сгъва предложения списък с банкови карти</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2">Сгъване на запазените карти</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards" moz:removedIn="125" tools:ignore="UnusedResources">Управление на банкови карти</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2">Управление на карти</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Защитено запазване на картата?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Обновяване на валидността на картата?</string>
+
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body" moz:removedIn="125" tools:ignore="UnusedResources">Номерът на карата ще бъде шифрован. Кодът за сигурност няма да бъде запазен.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2">%s шифрова номера на картата ви. Кодът ви за сигурност няма да бъде запазен.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Изберете адрес</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Разгъване на предложени адреси</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2">Разгъване на запазените адреси</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Свиване на предложени адреси</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2">Сгъване на запазените адреси</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Управление на адреси</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Профилна снимка</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Изберете доставчик на вход</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Вход в профила на %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Използвайте %1$s като доставчик на вход</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[Входът в профила на %1$s с/ъс %2$s е предмет на тяхната <a href="%3$s">Политика за личните данни</a> и техните <a href="%4$s">Общи условия</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Продължаване</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Отказ</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-bn/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-bn/strings.xml
new file mode 100644
index 0000000000..16a8f63c2b
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-bn/strings.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">ঠিক আছে</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">বাতিল</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">অতিরিক্ত ডায়ালগ তৈরি করা থেকে এই পাতাটিকে বিরত রাখুন</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">নির্ধারণ</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">পরিষ্কার</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">সাইন ইন</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">ব্যবহারকারীর নাম</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">পাসওয়ার্ড</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">সংরক্ষণ করবেন না</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">কখনও সংরক্ষণ করবেন না</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">সংরক্ষণ</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">হালনাগাদ করবেন না</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">আপডেট</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">পাসওয়ার্ডের জায়গাটি খালি রাখা যাবে না</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">লগইন সংরক্ষণ করা যায়নি</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">এই লগইন সংরক্ষণ করবেন?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">এই লগইন হালনাগাদ করবেন?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">সংরক্ষিত পাসওয়ার্ডে ব্যবহারকারীর নাম যুক্ত করবেন?</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">একটি রঙ নির্বাচন করুন</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">অনুমতি দিন</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">প্রত্যাখান করুন</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">আপনি কি নিশ্চিত?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">আপনি কি এই সাইটটি ছেড়ে যেতে চান? আপনার প্রবেশ করা ডাটা সংরক্ষণ নাও হতে পারে</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">থাকুন</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">ত্যাগ করুন</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">একটি মাস বাছাই করুন</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Jan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Apr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">May</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Jun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Jul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Aug</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sep</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Oct</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dec</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">লগইন ব্যবস্থাপনা করুন</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">প্রস্তাবিত লগইনগুলি সম্প্রসারিত করুন</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">প্রস্তাবিত লগইনগুলি সংকুচিত করুন</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">প্রস্তাবিত লগইনগুলি</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">সাইটে আবার তথ্য পাঠাবে?</string>
+ <string name="mozac_feature_prompt_repost_message">এই পৃষ্ঠাটি রিফ্রেশ করলে সাম্প্রতিক কাজ আবার হতে পারে যেমন কোনও অর্থ প্রদান বা দুইবার মন্তব্য পোস্ট করা।</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">তথ্য আবার পাঠাও</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">বাতিল</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-br/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-br/strings.xml
new file mode 100644
index 0000000000..ee06036029
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-br/strings.xml
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Mat eo</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Nullañ</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Mirout ar bajennad-mañ ouzh krouiñ boestadoù emziviz ouzhpenn</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Arventennañ</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Skarzhañ</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Kennaskañ</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Anv arveriad</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Ger-tremen</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Na enrollañ</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Diwezhatoc’h</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Na enrollañ biken</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Ket bremañ</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Enrollañ</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Na hizivaat</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Diwezhatoc’h</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Hizivaat</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Ar vaezienn ger-tremen a rank bezañ leuniet</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Enankit ur ger-tremen</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Ne cʼhaller ket enrollañ an titour kennaskañ</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">N’haller ket enrollañ ar ger-tremen</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Enrollañ an titour kennaskañ-mañ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Enrollañ ar ger-tremen?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Hizivaat an titour kennaskañ-mañ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Hizivaat ar ger-tremen?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Ouzhpennañ an anv arveriad dʼar gerioù-tremen enrollet?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Tikedenn evit ur vaezienn destenn.</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Dibab ul liv</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Aotren</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Nacʼhañ</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Sur ocʼh?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Fellout a ra deocʼh kuitaat al lecʼhienn-mañ? Ne vo ket enrollet ar roadennoù bet enanket ganeocʼh</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Chom</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Kuitaat</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Dibab ur miz</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Gen</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Cʼhw</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Meu</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Ebr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Mae</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Mez</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Gou</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Eos</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Gwe</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Her</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Du</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Ker</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Dibab an eur</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Ardoer titouroù kennaskañ</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Merañ ar gerioù-tremen</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Brasaat an titouroù kennaskañ aliet</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Dispakañ ar gerioù-tremen enrollet</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Berraat an titouroù kennaskañ aliet</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Kuzhat ar gerioù-tremen enrollet</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Titouroù kennaskañ aliet</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Gerioù-tremen enrollet</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Kas roadennoù en-dro d’al lec’hienn?</string>
+ <string name="mozac_feature_prompt_repost_message">Azbevaat ar bajenn a c’hallfe eilañ ar gweredoù nevez, evel kas ur paeamant pe embann un evezhiadenn div wech.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Adkas roadennoù</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Nullañ</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Diuzañ ur gartenn gred</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Astenn ar cʼhartennoù kred kinniget</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Dispakañ ar c’hartennoù enrollet</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Bihanaat ar cʼhartennoù kred kinniget</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Kuzhat ar c’hartennoù enrollet</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Merañ ar cʼhartennoù kred</string>
+
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Merañ ar c’hartennoù</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Enrollañ ar gartenn-mañ en surentez?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Hizivaat deiziad termen ar gartenn?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Enrigenet e vo niverenn ar gartenn. Ne vo ket enrollet ar c’hod surentez.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Dibab ur chomlec’h</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Displegañ ar chomlec’hioù kinniget</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Dispakañ ar chomlec’hioù enrollet</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Plegañ ar chomlec’hioù kinniget</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Kuzhat ar chomlec’hioù enrollet</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Merañ ar chomlec’hioù</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Skeudenn ar gont</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Dibab ur pourchaser dilesa</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Kennaskañ gant ur gont %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Ober gant %1$s evel pourchaser dilesa</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[Kennaskañ ouzh %1$s gant ur gont %2$s a zo reolennet gant o <a href="%3$s">Reolenn a-fet buhez prevez</a> ha <a href="%4$s">divizoù arver</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Kenderc’hel</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Nullañ</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-bs/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-bs/strings.xml
new file mode 100644
index 0000000000..d43b77b4a0
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-bs/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Otkaži</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Spriječi ovu stranicu da kreira dodatne dijaloge</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Postavi</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Očisti</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Prijava</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Korisničko ime</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Lozinka</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Nemoj spasiti</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Ne sada</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Nikad ne spašavaj</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Ne sada</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Spasi</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Nemoj ažurirati</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Ne sada</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Ažuriraj</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Polje za lozinku ne smije biti prazno</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Unesite lozinku</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Ne mogu spasiti prijavu</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Nije moguće sačuvati lozinku</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Spasi ovu prijavu?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Sačuvati lozinku?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Ažurirati ovu prijavu?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Ažurirati lozinku?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Dodaj korisničko ime uz sačuvanu lozinku?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Oznaka za unos u tekstualno polje</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Izaberite boju</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Dozvoli</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Odbij</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Da li ste sigurni?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Želite li napustiti ovu stranicu? Podaci koje ste unijeli možda neće biti sačuvani</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Ostani</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Napusti</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Izaberite mjesec</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Jan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Apr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Maj</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Jun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Jul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Aug</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sep</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Okt</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dec</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Postavi vrijeme</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Upravljanje prijavama</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Upravljajte lozinkama</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Proširi predložene prijave</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Proširi sačuvane lozinke</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Sažmi predložene prijave</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Sažmi sačuvane lozinke</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Predložene prijave</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Sačuvane lozinke</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Predloži jaku lozinku</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Predloži jaku lozinku</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Koristite jaku lozinku: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Ponovo poslati podatke na ovu stranicu?</string>
+ <string name="mozac_feature_prompt_repost_message">Osvježavanje ove stranice moglo bi ponoviti nedavne radnje, kao što su dvostruko plaćanje ili komentarisanje.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Ponovo pošalji podatke</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Otkaži</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Odaberite kreditnu karticu</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Koristi sačuvanu karticu</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Proširite predložene kreditne kartice</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Proširi sačuvane kartice</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Sažmi predložene kreditne kartice</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Sažmi sačuvane kartice</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Upravljaj kreditnim karticama</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Upravljajte karticama</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Sigurno sačuvati ovu karticu?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Ažuriraj datum isteka kartice?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Broj kartice će biti šifrovan. Sigurnosni kod neće biti sačuvan.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s šifruje broj vaše kartice. Vaš sigurnosni kod neće biti sačuvan.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Odaberi adresu</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Proširite predložene adrese</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Proširi sačuvane adrese</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Sažmi predložene adrese</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Sažmi sačuvane adrese</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Upravljaj adresama</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Slika računa</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Odaberi provajdera za prijavu</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Prijavite se sa %1$s računom</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Koristite %1$s kao provajdera za prijavu</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[Prijava na %1$s sa %2$s računom podliježe njihovoj <a href="%3$s">Politici privatnosti</a> i <a href="%4$s">Uslovima korištenja usluge </a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Nastavi</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Otkaži</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-ca/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ca/strings.xml
new file mode 100644
index 0000000000..63d52c09b9
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ca/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">D’acord</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Cancel·la</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Evita que aquesta pàgina creï més diàlegs</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Defineix</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Esborra</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Inicia la sessió</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Nom d’usuari</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Contrasenya</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">No desis</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Ara no</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">No desis mai</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Ara no</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Desa</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">No actualitzis</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Ara no</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Actualitza</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">El camp de la contrasenya no pot estar buit</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Escriviu una contrasenya</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">No es pot desar l’inici de sessió</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">No s\'ha pogut desar la contrasenya</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Voleu desar aquest inici de sessió?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Voleu desar la contrasenya?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Voleu actualitzar aquest inici de sessió?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Voleu actualitzar la contrasenya?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Voleu afegir el nom d’usuari a la contrasenya desada?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Etiqueta per introduir un camp d’entrada de text</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Trieu un color</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Permet</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Denega</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Segur?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Voleu sortir d’aquest lloc? És possible que no es desin les dades que hàgiu introduït</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">No surtis</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Surt</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Trieu un mes</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">gen.</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">febr.</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">març</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">abr.</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">maig</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">juny</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">jul.</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">ag.</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">set.</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">oct.</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">nov.</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">des.</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Defineix l’hora</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Gestiona els inicis de sessió</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Gestiona les contrasenyes</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Amplia els inicis de sessió suggerits</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Amplia les contrasenyes desades</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Redueix els inicis de sessió suggerits</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Redueix les contrasenyes desades</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Inicis de sessió suggerits</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Contrasenyes desades</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Suggereix una contrasenya segura</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Suggereix una contrasenya segura</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Useu una contrasenya segura: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Voleu tornar a enviar les dades a aquest lloc?</string>
+ <string name="mozac_feature_prompt_repost_message">Actualitzar aquesta pàgina pot provocar la repetició de les accions recents, com ara enviar un pagament o publicar un comentari dues vegades.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Torna a enviar les dades</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Cancel·la</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Seleccioneu una targeta de crèdit</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Usa una targeta desada</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Amplia les targetes de crèdit suggerides</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Amplia les targetes desades</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Redueix les targetes de crèdit suggerides</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Redueix les targetes desades</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Gestiona les targetes de crèdit</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Gestiona les targetes</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Voleu desar aquesta targeta de forma segura?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Voleu actualitzar la data de caducitat de la targeta?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">El número de targeta es xifrarà. El codi de seguretat no es desarà.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s xifra el número de la targeta. El codi de seguretat no es desarà.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Trieu l’adreça</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Amplia les adreces suggerides</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Amplia les adreces desades</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Redueix les adreces suggerides</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Redueix les adreces desades</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Gestiona les adreces</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Imatge del compte</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Trieu un proveïdor d\'inici de sessió</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Inicia la sessió amb un compte de %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Usa %1$s com a proveïdor d\'inici de sessió</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[L\'inici de sessió a %1$s amb un compte de %2$s està subjecte a la seva <a href="%3$s">Política de privadesa</a> i a les <a href="%4$s">Condicions del servei </a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Continua</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Cancel·la</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-cak/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-cak/strings.xml
new file mode 100644
index 0000000000..aae206423e
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-cak/strings.xml
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">ÜTZ</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Tiq\'at</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Man tiya\' q\'ij chi re ruxaq re\' yerunük\' kitz\'aqat taq tzijonem</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Tib\'an runuk\'ulem</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Tijosq\'ïx</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Titikirisäx molojri\'ïl</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Rub\'i\' winäq</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Ewan tzij</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save" moz:removedIn="125" tools:ignore="UnusedResources">Man tiyak</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2">Wakami mani</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Majub\'ey tiyak</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Wakami mani</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Tiyak</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update" moz:removedIn="125" tools:ignore="UnusedResources">Man tik\'ex ruwäch</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2">Wakami mani</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Tik\'ex</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password" moz:removedIn="125" tools:ignore="UnusedResources">Man tikirel ta kowöl ri ruk\'ojlem ewan tzij</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2">Titz\'ib\'äx jun ewan tzij</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause" moz:removedIn="125" tools:ignore="UnusedResources">Man xtikïr ta xyak rutikirib\'al molojri\'ïl</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2">Man tikirel ta niyak ri ewan tzij</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline" moz:removedIn="125" tools:ignore="UnusedResources">¿La niyak rutikirib\'al re moloj re\'?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2">¿La niyak ewan tzij?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline" moz:removedIn="125" tools:ignore="UnusedResources">¿La nik\'ex rutikirib\'al re moloj re\'?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2">¿La nik\'ex ri ewan tzij?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">¿La nitz\'aqatisäx rub\'i\' winäq pa ri ewan tzij yakon?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Etal richin ninim jun ruk\'ojlem rokem tz\'ib\'anïk</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Ticha\' jun b\'onil</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Tiya\' q\'ij</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Tiq\'at</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">¿La kan at jikïl?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">¿La nawajo\' yatel chupam re ruxaq re\'? Rik\'in jub\'a\' man xkeyak ta ri taq tzij xawokisaj</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Tik\'oje\' na</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Tel</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Tacha\' jun ik\'</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Ju\'ik\'</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Ka\'ik\'</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Oxik\'</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Kajik\'</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Ro\' ik\'</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Waqik\'</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Wuqik\'</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Waqxaqik\'</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">B\'elejik\'</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Lajik\'</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Julajik\'</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Kab\'lajik\'</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Tib\'an ruk\'ojlem wakami</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins" moz:removedIn="125" tools:ignore="UnusedResources">Tinuk\'samajïx rutikirib\'al molojri\'ïl</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2">Kenuk\'samajïx ewan taq tzij</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Kerik\' ri chilab\'en tikirib\'äl taq molojri\'ïl</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2">Kerik\' kij ri yakon ewan taq tzij</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Kek\'ol ri chilab\'en tikirib\'äl taq molojri\'ïl</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2">Kek\'ol ri yakon ewan taq tzij</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins" moz:removedIn="125" tools:ignore="UnusedResources">Chilab\'en taq molojri\'ïl</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2">Xeyak ewan taq tzij</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Tichilab\'ëx ütz ewan tzij</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Tichilab\'ëx ütz ewan tzij</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Ke\'awokisaj ütz ewan taq tzij: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">¿La nitaq chik tzij chi re re ruxaq?</string>
+ <string name="mozac_feature_prompt_repost_message">Nisamajïx chik re ruxaq rik\'in jub\'a\' nukamuluj samaj k\'a jub\'a\' b\'anon, achi\'el nitaq jun tojïk o kamul nrelesaj rutzijol jun na\'oj.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Titaq chik tzij</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Tiq\'at</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card" moz:removedIn="125" tools:ignore="UnusedResources">Ticha\' rutarjeta\' kre\'ito\'</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2">Tokisäx yakon tarjeta\'</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Kerik\' ri chilab\'en rutarjeta\' kre\ito\'</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2">Kerik yakon taq tarjeta\'</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Kek\'ol ri chilab\'en rutarjeta\' kre\ito\'</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2">Kek\'ol yakon taq tarjeta\'</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards" moz:removedIn="125" tools:ignore="UnusedResources">Kenuk\'samajïx kikre\'ito\' taq tarjeta\'</string>
+
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2">Kenuk\'samajïx taq tarjeta\'</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">¿Jikïl tayaka\' re tarjeta\' re\'?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">¿Tik\'ex ruq\'ijul nik\'is tarjeta\'?</string>
+
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body" moz:removedIn="125" tools:ignore="UnusedResources">Ri rajilab\'al tarjeta\' ewan rusik\'ixik. Man xtiyake\' ta ri rub\'itz\'ib\' jikomal.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2">%s nrewaj rusik\'ixij ri rajilab\'al atarjeta\'. Ri jikon rub\'itz\'ib\' man xtiyake\' ta kan.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Ticha\' ochochib\'äl</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Kerik\' ri chilab\'en ochochib\'äl</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2">Kerik\' yakon taq ochochib\'äl</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Kek\'ol ri chilab\'en ochochib\'äl</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2">Kek\'ol yakon taq ochochib\'äl</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Kenuk\'samajïx taq ochochib\'äl</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Ruwachib\'al rub\'i\' taqoya\'l</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Ticha\' jun ruya\'oj rutikirib\'al moloj</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Titikirisäx moloj rik\'in jun rub\'i\' rutaqoya\'l %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Tokisäx %1$s achi\'el ya\'öl rutikirib\'al moloj</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[Tatikirisaj moloj pa %1$s rik\'in jun rub\'i\' rutaq\'oya\'l %2$s ruximon ri\' rik\'in ri <a href="%3$s">Runa\'ojil ichinanem</a> chuqa\' <a href="%4$s">Rutzijol Samak</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Titikïr chik el</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Tiq\'at</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-ceb/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ceb/strings.xml
new file mode 100644
index 0000000000..86e88d54d6
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ceb/strings.xml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Cancel</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Pug-ngi ni nga page magbuhat ug dugang mga dialog</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Set</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Clear</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Sign in</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Username</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Password</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Ayaw i-save</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Dili mag-save</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Save</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Ayaw i-update</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Update</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Ang Password field dapat naa\'y sulod</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Dili makasave sa login</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">i-Save ni nga login?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">i-Update ni nga login?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">i-Dugang ang na-save nga password?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Label sa pag-butang ug text input field</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Pili ug color</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Allow</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Deny</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Sigurado ka?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Buot mo bang mohawa ani nga site? Ang data nga imong gi-butang basin dili ma-save</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Stay</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Leave</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Pili ug bulan</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Jan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Feb</string>
+
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Apr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">May</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Jun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Jul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Aug</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sep</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Oct</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dec</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">i-Manage ang mga login</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">i-Expand ang nasugyot nga mga login</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">i-Collapse ang nasugyot nga mga login</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Nasugyot nga mga login</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">i-Padala usab ang mga data dinhi nga site?</string>
+ <string name="mozac_feature_prompt_repost_message">Pag-refresh ani nga page posibleng maka-kopya sa bag-o nga mga aksyon, sama sa pagpadala ug bayad o pag-post sa usa ka komento makaduha. </string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Resend data</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Cancel</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Pili ug credit card</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">i-Expand ang nasugyot nga mga credit card</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">i-Collapse ang nasugyot nga mga credit card</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings -->
+ <string name="mozac_feature_prompts_manage_credit_cards">i-Manage ang mga credit card</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-ckb/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ckb/strings.xml
new file mode 100644
index 0000000000..20a7b4aa1d
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ckb/strings.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">باشە</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">پاشگەزبوونەوە</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">ڕێگە مەدە ئەم پەڕەیە داواکردنی زیاتر بکاتەوە</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">دیاریبکە</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">پاککردنەوە</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">بچۆژوورەوە</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">ناوی بەکارهێنەر</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">وشەی تێپەڕبوون</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">پاشەکەوتی مەکە</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">هەرگیز پاشەکەوت مەکە</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">پاشەکەوتکردن</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">نوێی مەکەرەوە</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">نوێکردنەوە</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">خانەی وشەی تێپەڕبوون نابێت بەتاڵ بێت</string>
+
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">نەتوانرا چوونەژوورەوە پاشەکەوت بکرێت</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">ئەم چوونەژوورەوەیە پاشەکەوت دەکەیت؟</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">ئەم چوونەژوورەوە نوێدەکەیتەوە؟</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">زیادکردنی ناوی بەکارهێنەر بۆ وشەی تێپەڕی هەڵگیراو؟</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">ڕەنگێک هەڵبژێرە</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">ڕێگەبدە</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">ڕێگەمەدە</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">ئایا تۆ دڵنیایت؟</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">دەتەویت ئەم ماڵپەڕە بەجێبهێڵیت؟ ئەو زانیارییانەی نووسیوتن لێرە لەوانەیە هەڵنەگیرێن.</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">بمێنەرەوە</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">جێیبهێلە</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">مانگێک هەڵبژێرە</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">کانوونی دووەم</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">شوبات</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">ئازار</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">نیسان</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">ئایار</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">حوزەیران</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">تەمموز</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">ئاب</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">ئەیلوول</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">تشرینی یەکەم</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">تشرینی دووەم</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">کانوونی یەکەم</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">بەڕێوەبردنی چوونەژوورەوەکان</string>
+
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">چوونەژوورەوە پێشنیارکراوەکان</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">زانیاری دەنێریتەوە بۆ ئەم ماڵپەڕە؟</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">ناردنەوەی زانیاری</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">پاشگەزبوونەوە</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-co/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-co/strings.xml
new file mode 100644
index 0000000000..7afbd91b65
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-co/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Vai</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Abbandunà</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Impedisce sta pagina d’apre dialoghi addiziunali</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Definisce</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Squassà</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Cunnettesi</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Nome d’utilizatore</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Parolla d’intesa</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Ùn arregistrà micca</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Micca subitu</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Ùn arregistrà mai</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Micca subitu</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Arregistrà</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Ùn micca rinnovà</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Micca subitu</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Piglià in contu</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">U campu di a parolla d’intesa ùn deve micca esse viotu</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Stampittate una parolla d’intesa</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Impussibule d’arregistrà l’identificazione di cunnessione</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Ùn si pò micca arregistrà a parolla d’intesa</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Arregistrà st’identificazioni di cunnessione</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Arregistrà a parolla d’intesa ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Mudificà st’identificazione di cunnessione ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Mudificà a parolla d’intesa ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Aghjunghje un nome d’utilizatore à a parolla d’intesa arregistrata ?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Discrizzione per a creazione d’un campu di scrittura di testu</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Sceglie un culore</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Permette</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Ricusà</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Cunfirmazione</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Vulete abbandunà stu situ ? Certi dati chì vo avete stampittati puderianu esse persi</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Stà</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Abbandunà</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Sceglie un mese</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">ghje.</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">ferr.</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">marzu</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">apri.</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">magh.</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">ghju.</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">lugl.</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">aostu</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">sitt.</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">utto.</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">nuve.</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">dice.</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Sceglie l’ora</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Urganizà l’identificazioni di cunnessione</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Amministrà e parolle d’intesa</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Spiegà l’identificazioni di cunnessione suggerite</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Spiegà e parolle d’intesa arregistrate</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Ripiegà l’identificazioni di cunnessione suggerite</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Ripiegà e parolle d’intesa arregistrate</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Identificazioni di cunnessione suggerite</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Parolle d’intesa arregistrate</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Suggerisce una parolla d’intesa forte</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Suggerisce una parolla d’intesa forte</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Impiegà a parolla d’intesa forte : %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Rimandà i dati à stu situ ?</string>
+ <string name="mozac_feature_prompt_repost_message">L’attualizazione di sta pagina puderia ripete azzioni recente, cum’è l’aviu d’un pagamentu o a publicazione d’un cummentu in doppiu.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Rimandà i dati</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Abbandunà</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Selezziunà una carta bancaria</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Impiegà una carta arregistrata</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Spiegà e carte bancarie suggerite</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Spiegà e carte arregistrate</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Ripiegà e carte bancarie suggerite</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Ripiegà e carte arregistrate</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Urganizà e carte bancarie</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Amministrà e carte</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Arregistrà sta carta di manera sicura ?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Mudificà a data di scadenza di a carta ?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">U numeru di a carta serà cifratu. U codice di sicurità ùn serà micca arregistratu.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s cifra u vostru numeru di carta. U vostru codice di sicurità ùn serà micca arregistratu.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Selezziunà un indirizzu</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Spiegà l’indirizzi suggeriti</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Spiegà l’indirizzi arregistrati</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Ripiegà l’indirizzi suggeriti</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Ripiegà l’indirizzi arregistrati</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Urganizà l’indirizzi</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Fiura per u contu</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Sceglie un furnidore d’accessu</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Cunnittitevi cù un contu %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Impiegà %1$s cum’è furnidore di cunnessione</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[Cunnettesi à %1$s cù un contu %2$s hè sottumessu à a so <a href="%3$s">pulitica di cunfidenzialità</a> è à e so <a href="%4$s">cundizioni d’utilizazione</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Cuntinuà</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Abbandunà</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-cs/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-cs/strings.xml
new file mode 100644
index 0000000000..2a2beceeb8
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-cs/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Zrušit</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Zabránit stránce ve vytváření dalších dialogů</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Nastavit</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Vymazat</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Přihlášení</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Uživatelské jméno</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Heslo</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save" moz:removedIn="125" tools:ignore="UnusedResources">Neukládat</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2">Teď ne</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Nikdy neukládat</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Teď ne</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Uložit</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update" moz:removedIn="125" tools:ignore="UnusedResources">Neaktualizovat</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2">Teď ne</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Aktualizovat</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password" moz:removedIn="125" tools:ignore="UnusedResources">Heslo nesmí být prázdné</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2">Zadejte heslo</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause" moz:removedIn="125" tools:ignore="UnusedResources">Přihlašovací údaje nelze uložit</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2">Heslo není možné uložit</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline" moz:removedIn="125" tools:ignore="UnusedResources">Uložit tyto přihlašovací údaje?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2">Uložit heslo?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline" moz:removedIn="125" tools:ignore="UnusedResources">Aktualizovat tyto přihlašovací údaje?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2">Aktualizovat heslo?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Přidat k uloženému heslu uživatelské jméno?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Štítek vstupního pole pro zadání textu</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Vyberte barvu</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Povolit</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Zakázat</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Opravdu?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Opravdu chcete tuto stránku opustit? Zadané údaje se nemusí uložit</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Zůstat</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Opustit</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Vyberte měsíc</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Led</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Úno</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Bře</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Dub</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Kvě</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Čvn</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Čvc</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Srp</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Zář</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Říj</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Lis</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Pro</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Nastavit čas</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins" moz:removedIn="125" tools:ignore="UnusedResources">Správa přihlašovacích údajů</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2">Správa přihlašovacích údajů</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Zobrazit navrhované přihlašovací údaje</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2">Rozbalit uložená hesla</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Skýt navrhované přihlašovací údaje</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2">Sbalit uložená hesla</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins" moz:removedIn="125" tools:ignore="UnusedResources">Navrhované přihlašovací údaje</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2">Uložená hesla</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Navrhnout silné heslo</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Navrhnout silné heslo</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Použít silné heslo: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Chcete znovu odeslat data tomuto serveru?</string>
+ <string name="mozac_feature_prompt_repost_message">Opětovné načtení této stránky může zopakovat vaši nedávnou akci, například druhé odeslání stejné platby nebo komentáře.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Odeslat</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Zrušit</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card" moz:removedIn="125" tools:ignore="UnusedResources">Vyberte platební kartu</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2">Použít uloženou kartu</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Zobrazit návrhy platebních karet</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2">Rozbalit uložené karty</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Skrýt návrhy platebních karet</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2">Sbalit uložené karty</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards" moz:removedIn="125" tools:ignore="UnusedResources">Správa platebních karet</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2">Spravovat karty</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Bezpečně uložit tuto kartu?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Aktualizovat platnost karty?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body" moz:removedIn="125" tools:ignore="UnusedResources">Číslo karty bude uložené šifrované. Bezpečnostní kód uložen nebude.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2">%s zašifruje číslo vaší karty. Váš bezpečnostní kód nebude uložen.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Vyberte adresu</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Zobrazit navrhované adresy</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2">Rozbalit uložené adresy</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Skrýt navrhované adresy</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2">Sbalit uložené adresy</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Správa adres</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Obrázek účtu</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Výběr poskytovatele přihlášení</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Přihlášení pomocí účtu %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Použití %1$s jako poskytovatele přihlášení</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ Přihlášení k %1$s pomocí účtu %2$s podléhá jejich <a href="%3$s">zásadám ochrany osobních údajů</a> a <a href="%4$s">podmínkám poskytování služby</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Pokračovat</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Zrušit</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-cy/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-cy/strings.xml
new file mode 100644
index 0000000000..d6e70ad31a
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-cy/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Iawn</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Diddymu</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Atal y dudalen hon rhag creu deialogau ychwanegol</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Gosod</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Clirio</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Mewngofnodi</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Enw Defnyddiwr</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Cyfrinair</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Peidio â chadw</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Nid nawr</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Byth cadw</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Nid nawr</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Cadw</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Peidio â diweddaru</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Nid nawr</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Diweddaru</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Rhaid i faes cyfrinair beidio â bod yn wag</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Rhowch gyfrinair</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Methu cadw mewngofnod</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Methu cadw cyfrinair</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Cadw’r mewngofnod hwn?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Cadw cyfrinair?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Diweddaru’r mewngofnod hwn?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Diweddaru cyfrinair?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Ychwanegu enw defnyddiwr i gyfrinair wedi’i gadw?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Label ar gyfer mynd i faes mewnbwn testun</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Dewis lliw</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Caniatáu</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Gwrthod</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Ydych chi’n siŵr?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Ydych chi eisiau gadael y wefan hon? Efallai na fydd data rydych chi wedi’i roi’n cael ei gadw</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Aros</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Gadael</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Dewis mis</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Ion</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Chw</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Maw</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Ebr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Mai</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Meh</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Gor</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Awst</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Med</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Hyd</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Tach</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Rhag</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Gosod yr amser</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Rheoli mewngofnodion</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Rheoli cyfrineiriau</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Ehangu’r mewngofnodion</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Ehangu cyfrineiriau sydd wedi\'u cadw</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Lleihau’r mewngofnodion</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Cau cyfrineiriau sydd wedi\'u cadw</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Mewngofnodion</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Cyfrineiriau wedi\'u cadw</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Awgrym o gyfrinair cryf</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Awgrym o gyfrinair cryf</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Defnyddiwch gyfrinair cryf: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Ail-anfon data i’r wefan hon?</string>
+ <string name="mozac_feature_prompt_repost_message">Gall adnewyddu’r dudalen hon ddyblygu gweithredoedd diweddar, fel anfon taliad neu gofnodi sylw ddwywaith.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Ail-anfon data</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Diddymu</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Dewiswch gerdyn credyd</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Defnyddio cerdyn sydd wedi\'i gadw</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Ehangu awgrymiad y cardiau credyd</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Ehangu cardiau sydd wedi\'u cadw</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Lleihau awgrymiad y cardiau credyd</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Cau cardiau sydd wedi\'u cadw</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Rheoli cardiau credyd</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Rheoli cardiau</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Cadw’r cerdyn hwn yn ddiogel?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Diweddaru dyddiad dod i ben cerdyn?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Bydd rhif y cerdyn yn cael ei amgryptio. Ni fydd y cod diogelwch yn cael ei gadw.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">Mae %s yn amgryptio rhif eich cerdyn. Ni fydd eich cod diogelwch yn cael ei gadw.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Dewiswch gyfeiriad</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Ehangu awgrymiadau cyfeiriadau</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Ehangu cyfeiriadau sydd wedi\'u cadw</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Lleihau awgrymiadau cyfeiriadau</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Cau cyfeiriadau sydd wedi\'u cadw</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Rheoli cyfeiriadau</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Llun cyfrif</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Dewiswch ddarparwr mewngofnodi</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Mewngofnodwch gyda chyfrif %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Defnyddiwch %1$s fel darparwr mewngofnodi</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ Mae mewngofnodi i %1$s gyda chyfrif %2$s yn amodol ar eu <a href="%3$s">Polisi Preifatrwydd</a> a <a href="%4$s">Thelerau Gwasanaeth </a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Parhau</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Diddymu</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-da/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-da/strings.xml
new file mode 100644
index 0000000000..df13afc653
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-da/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Annuller</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Fjern denne sides mulighed for at oprette flere dialogbokse</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Indstil</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Ryd</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Log ind</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Brugernavn</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Adgangskode</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Gem ikke</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Ikke nu</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Gem aldrig</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Ikke nu</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Gem</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Opdater ikke</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Ikke nu</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Opdater</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Feltet Adgangskode må ikke være tomt</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Indtast en adgangskode</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Kunne ikke gemme login</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Kan ikke gemme adgangskode</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Gem dette login?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Gem adgangskode?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Opdater dette login?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Opdater adgangskode?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Føj brugernavn til gemt adgangskode?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Etiket for indtastning af tekst i et input-felt</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Vælg en farve</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Tillad</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Afvis</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Er du sikker?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Vil du forlade dette websted? Data, du har indtastet, gemmes muligvis ikke</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Bliv</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Forlad</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Vælg en måned</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Jan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Apr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Maj</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Jun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Jul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Aug</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sep</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Okt</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dec</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Vælg tidspunkt</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Håndter logins</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Håndter adgangskoder</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Udvid foreslåede logins</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Udvid gemte adgangskoder</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Sammenfold foreslåede logins</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Sammenfold gemte adgangskoder</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Foreslåede logins</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Gemte adgangskoder</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Foreslå stærk adgangskode</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Foreslå stærk adgangskode</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Brug stærk adgangskode: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Send data igen til dette websted?</string>
+ <string name="mozac_feature_prompt_repost_message">Genindlæsning af denne side kan gentage nylige handlinger, fx sådan at en betaling udføres igen eller en kommentar sendes to gange.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Send data igen</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Annuller</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Vælg betalingskort</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Brug gemt kort</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Udvid foreslåede betalingskort</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Udvid gemte kort</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Sammenfold foreslåede betalingskort</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Sammenfold gemte kort</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Håndter betalingskort</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Håndter kort</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Gem dette kort sikkert?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Opdater kortets udløbsdato?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Kortnummeret vil blive krypteret. Sikkerhedskoden vil ikke blive gemt.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s krypterer dit kortnummer. Din sikkerhedskode bliver ikke gemt.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Vælg adresse</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Udvid foreslåede adresser</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Udvid gemte adresser</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Sammenfold foreslåede adresser</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Sammenfold gemte adresser</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Håndter adresser</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Kontobillede</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Vælg en login-udbyder</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Log ind med en %1$s-konto</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Brug %1$s som login-udbyder</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ Indlogning på %1$s med en %2$s-konto er underlagt deres <a href="%3$s">privatlivspolitik</a> og <a href="%4$s">tjenestevilkår</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Fortsæt</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Annuller</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-de/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-de/strings.xml
new file mode 100644
index 0000000000..de995ecc07
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-de/strings.xml
@@ -0,0 +1,199 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Abbrechen</string>
+
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Diese Seite daran hindern, weitere Dialoge zu öffnen</string>
+
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Übernehmen</string>
+
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Leeren</string>
+
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Anmelden</string>
+
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Benutzername</string>
+
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Passwort</string>
+
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Nicht speichern</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Nicht jetzt</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Nie speichern</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Nicht jetzt</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Speichern</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Nicht aktualisieren</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Nicht jetzt</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Aktualisieren</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Das Passwortfeld darf nicht leer bleiben</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Passwort eingeben</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Zugangsdaten konnten nicht gespeichert werden</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Passwort kann nicht gespeichert werden</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Diese Zugangsdaten speichern?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Passwort speichern?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Diese Zugangsdaten aktualisieren?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Passwort aktualisieren?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Benutzernamen zum gespeicherten Passwort hinzufügen?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Beschriftung für ein Texteingabefeld</string>
+
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Wählen Sie eine Farbe</string>
+
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Erlauben</string>
+
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Ablehnen</string>
+
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Sind Sie sicher?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Möchten Sie diese Seite verlassen? Von Ihnen eingegebene Daten werden möglicherweise nicht gespeichert</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Bleiben</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Verlassen</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Monat auswählen</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Jan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mär</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Apr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Mai</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Jun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Jul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Aug</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sep</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Okt</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dez</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Zeit einstellen</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Zugangsdaten verwalten</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Passwörter verwalten</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Vorgeschlagene Zugangsdaten ausklappen</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Gespeicherte Passwörter ausklappen</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Vorgeschlagene Zugangsdaten einklappen</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Gespeicherte Passwörter einklappen</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Vorgeschlagene Zugangsdaten</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Gespeicherte Passwörter</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Starkes Passwort vorschlagen</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Starkes Passwort vorschlagen</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Verwenden Sie ein starkes Passwort: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Daten erneut an diese Website senden?</string>
+ <string name="mozac_feature_prompt_repost_message">Durch das Aktualisieren dieser Seite können die letzten Aktionen doppelt ausgeführt werden, z.&amp;thinsp;B. das Senden einer Zahlung oder das zweimalige Posten eines Kommentars.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Erneut senden</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Abbrechen</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Kreditkarte auswählen</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Eine gespeicherte Karte verwenden</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Vorgeschlagene Kreditkarten ausklappen</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Gespeicherte Karten ausklappen</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Vorgeschlagene Kreditkarten einklappen</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Gespeicherte Karten einklappen</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Kreditkarten verwalten</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Karten verwalten</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Soll diese Karte sicher gespeichert werden?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Ablaufdatum der Karte aktualisieren?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Die Kartennummer wird verschlüsselt. Der Sicherheitscode wird nicht gespeichert.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s verschlüsselt Ihre Kartennummer. Ihr Sicherheitscode wird nicht gespeichert.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Adresse auswählen</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Vorgeschlagene Adressen ausklappen</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Gespeicherte Adressen ausklappen</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Vorgeschlagene Adressen einklappen</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Gespeicherte Adressen einklappen</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Adressen verwalten</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Kontobild</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Wählen Sie einen Login-Anbieter</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Melden Sie sich mit einem %1$s-Konto an</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">%1$s als Login-Anbieter verwenden</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ Die Anmeldung bei %1$s mit einem %2$s-Konto unterliegt deren <a href="%3$s">Datenschutzerklärung</a> und <a href="%4$s">Nutzungsbedingungen </a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Weiter</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Abbrechen</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-dsb/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-dsb/strings.xml
new file mode 100644
index 0000000000..36188bb0bc
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-dsb/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">W pórěźe</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Pśetergnuś</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Toś tomu bokoju napóranje pśidatnych dialogow zawoboraś</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Nastajiś</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Wuprozniś</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Pśizjawiś</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Wužywarske mě</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Gronidło</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Njeskładowaś</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Nic něnto</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Nigda njeskładowaś</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Nic něnto</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Składowaś</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Njeaktualizěrowaś</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Nic něnto</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Aktualizěrowaś</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Gronidłowe pólo njesmějo prozne byś</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Gronidło zapódaś</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Pśizjawjenje njedajo se składowaś</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Gronidło njedajo se składowaś</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Toś to pśizjawjenje składowaś?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Gronidło składowaś?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Toś to pśizjawjenje aktualizěrowaś?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Gronidło aktualizěrowaś?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Wužywaŕske mě skłaźonemu gronidłoju pśidaś?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Pópisanje za zapódaśe do tekstowego póla</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Wubjeŕśo barwu</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Dowóliś</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Wótpokazaś</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Sćo wěsty?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Cośo toś to sedło spušćiś? Zapódane daty njebudu se snaź składowaś</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Wóstaś</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Spušćiś</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Mjasec wubraś</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Jan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Měr</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Apr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Maj</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Jun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Jul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Awg</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sep</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Okt</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Now</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dec</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Cas nastajiś</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Pśizjawjenja zastojaś</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Gronidła zastojaś</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Naraźone pśizjawjenja pokazaś</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Skłaźone gronidła pokazaś</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Naraźone pśizjawjenja schowaś</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Skłaźone gronidła schowaś</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Naraźone pśizjawjenja</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Skłaźone gronidła</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Mócne gronidło naraźiś</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Mócne gronidło naraźiś</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Mócne gronidło wužywaś: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Daty k toś tomu sedłoju znowego pósłaś?</string>
+ <string name="mozac_feature_prompt_repost_message">Aktualizěrowanje toś togo boka mógło nejnowše akcije pódwojś, na pśikład słanje płaśenja abo dwójne wótpósćełanje komentara.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Daty znowego pósłaś</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Pśetergnuś</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Kreditowu kórtu wubraś</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Skłaźonu kórtu wužywaś</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Naraźone kreditowe kórty pokazaś</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Skłaźone kórty pokazaś</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Naraźone kreditowe kórty schowaś</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Skłaźone kórty schowaś</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Kreditowe kórty zastojaś</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Kórty zastojaś</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Toś tu kórtu wěsće składowaś?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Datum spadnjenja kórty aktualizěrowaś?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Numer kórty buźo se koděrowaś. Wěstotny kod njebuźo se składowaś.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s waš kórtowy numer koděrujo. Waš wěstotny kod njebuźo se składowaś.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Adresu wubraś</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Naraźone adrese pokazaś</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Skłaźone adrese pokazaś</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Naraźone adrese schowaś</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Skłaźone adrese schowaś</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Adrese zastojaś</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Kontowy wobraz</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Wubjeŕśo pśizjawjeńskego póbitowarja</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Se z kontom %1$s pśizjawiś</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">%1$s ako pśizjawjeńskego póbitowarja wužywaś</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[Pśizjawjenje pla %1$s z kontom %2$s jogo <a href="%3$s">pšawidłam priwatnosći</a> a <a href="%4$s">wužywańskim wuměnjenjam</a> pódlažy]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Dalej</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Pśetergnuś</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-el/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-el/strings.xml
new file mode 100644
index 0000000000..44f632fa99
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-el/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Ακύρωση</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Να απαγορεύεται σε αυτή τη σελίδα να δημιουργεί επιπρόσθετους διαλόγους</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Ορισμός</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Απαλοιφή</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Σύνδεση</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Όνομα χρήστη</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Κωδικός πρόσβασης</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Χωρίς αποθήκευση</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Όχι τώρα</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Ποτέ αποθήκευση</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Όχι τώρα</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Αποθήκευση</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Να μη γίνει ενημέρωση</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Όχι τώρα</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Ενημέρωση</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Το πεδίο κωδικού πρόσβασης δεν πρέπει να είναι κενό</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Εισαγάγετε έναν κωδικό πρόσβασης</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Αποτυχία αποθήκευσης σύνδεσης</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Αδυναμία αποθήκευσης κωδικού πρόσβασης</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Αποθήκευση σύνδεσης;</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Αποθήκευση κωδικού πρόσβασης;</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Ενημέρωση σύνδεσης;</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Ενημέρωση κωδικού πρόσβασης;</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Προσθήκη ονόματος χρήστη στον αποθηκευμένο κωδικό πρόσβασης;</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Ετικέτα για εισαγωγή πεδίου κειμένου</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Επιλέξτε χρώμα</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Αποδοχή</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Άρνηση</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Είστε σίγουροι;</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Θέλετε να αποχωρήσετε από τον ιστότοπο; Τα καταχωρημένα δεδομένα ενδέχεται να μην αποθηκευτούν</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Παραμονή</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Αποχώρηση</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Επιλέξτε μήνα</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Ιαν</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Φεβ</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Μάρ</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Απρ</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Μάι</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Ιούν</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Ιούλ</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Αύγ</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Σεπ</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Οκτ</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Νοέ</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Δεκ</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Ορισμός ώρας</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Διαχείριση συνδέσεων</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Διαχείριση κωδικών πρόσβασης</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Ανάπτυξη προτεινόμενων συνδέσεων</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Ανάπτυξη των αποθηκευμένων κωδικών πρόσβασης</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Σύμπτυξη προτεινόμενων συνδέσεων</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Σύμπτυξη αποθηκευμένων κωδικών πρόσβασης</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Προτεινόμενες συνδέσεις</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Αποθηκευμένοι κωδικοί πρόσβασης</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Πρόταση ισχυρού κωδικού πρόσβασης</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Πρόταση ισχυρού κωδικού πρόσβασης</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Χρησιμοποιήστε ισχυρό κωδικό: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Επαναποστολή δεδομένων στον ιστότοπο;</string>
+ <string name="mozac_feature_prompt_repost_message">Η ανανέωση αυτής της σελίδας ίσως επαναλάβει τις πρόσφατες ενέργειες, όπως αποστολή πληρωμής ή δημοσίευση σχολίου δύο φορές.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Επαναποστολή δεδομένων</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Ακύρωση</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Επιλογή πιστωτικής κάρτας</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Χρήση αποθηκευμένης κάρτας</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Ανάπτυξη προτεινόμενων πιστωτικών καρτών</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Ανάπτυξη αποθηκευμένων καρτών</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Σύμπτυξη προτεινόμενων πιστωτικών καρτών</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Σύμπτυξη αποθηκευμένων καρτών</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Διαχείριση πιστωτικών καρτών</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Διαχείριση καρτών</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Ασφαλής αποθήκευση κάρτας;</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Ενημέρωση ημερομηνίας λήξης κάρτας;</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Ο αριθμός της κάρτας θα κρυπτογραφηθεί. Ο κωδικός ασφαλείας δεν θα αποθηκευτεί.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">Το %s κρυπτογραφεί τον αριθμό της κάρτας σας. Ο κωδικός ασφαλείας σας δεν θα αποθηκευτεί.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Επιλογή διεύθυνσης</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Ανάπτυξη προτεινόμενων διευθύνσεων</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Ανάπτυξη αποθηκευμένων διευθύνσεων</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Σύμπτυξη προτεινόμενων διευθύνσεων</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Σύμπτυξη αποθηκευμένων διευθύνσεων</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Διαχείριση διευθύνσεων</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Εικόνα λογαριασμού</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Επιλογή παρόχου σύνδεσης</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Σύνδεση με λογαριασμό %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Χρήση %1$s ως παρόχου σύνδεσης</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ Η σύνδεση στο %1$s με λογαριασμό %2$s υπόκειται στην <a href="%3$s">Πολιτική απορρήτου</a> και τους <a href="%4$s">Όρους υπηρεσίας</a> του]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Συνέχεια</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Ακύρωση</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-en-rCA/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000000..e3e8443fe9
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-en-rCA/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Cancel</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Prevent this page from creating additional dialogs</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Set</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Clear</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Sign in</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Username</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Password</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save" moz:removedIn="125" tools:ignore="UnusedResources">Don’t save</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2">Not now</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Never save</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Not now</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Save</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update" moz:removedIn="125" tools:ignore="UnusedResources">Don’t update</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2">Not now</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Update</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password" moz:removedIn="125" tools:ignore="UnusedResources">Password field must not be empty</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2">Enter a password</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause" moz:removedIn="125" tools:ignore="UnusedResources">Unable to save login</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2">Can’t save password</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline" moz:removedIn="125" tools:ignore="UnusedResources">Save this login?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2">Save password?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline" moz:removedIn="125" tools:ignore="UnusedResources">Update this login?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2">Update password?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Add username to saved password?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Label for entering a text input field</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Choose a colour</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Allow</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Deny</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Are you sure?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Do you want to leave this site? Data you have entered may not be saved</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Stay</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Leave</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Pick a month</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Jan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Apr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">May</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Jun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Jul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Aug</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sep</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Oct</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dec</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Set time</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins" moz:removedIn="125" tools:ignore="UnusedResources">Manage logins</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2">Manage passwords</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Expand suggested logins</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2">Expand saved passwords</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Collapse suggested logins</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2">Collapse saved passwords</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins" moz:removedIn="125" tools:ignore="UnusedResources">Suggested logins</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2">Saved passwords</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Suggest strong password</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Suggest strong password</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Use strong password: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Resend data to this site?</string>
+ <string name="mozac_feature_prompt_repost_message">Refreshing this page could duplicate recent actions, such as sending a payment or posting a comment twice.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Resend data</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Cancel</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card" moz:removedIn="125" tools:ignore="UnusedResources">Select credit card</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2">Use saved card</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Expand suggested credit cards</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2">Expand saved cards</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Collapse suggested credit cards</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2">Collapse saved cards</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards" moz:removedIn="125" tools:ignore="UnusedResources">Manage credit cards</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2">Manage cards</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Securely save this card?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Update card expiration date?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body" moz:removedIn="125" tools:ignore="UnusedResources">Card number will be encrypted. Security code won’t be saved.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2">%s encrypts your card number. Your security code won’t be saved.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Select address</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Expand suggested addresses</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2">Expand saved addresses</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Collapse suggested addresses</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2">Collapse saved addresses</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Manage addresses</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Account picture</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Choose a login provider</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Sign in with a %1$s account</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Use %1$s as a login provider</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[Logging in to %1$s with a %2$s account is subject to their <a href="%3$s">Privacy Policy</a> and <a href="%4$s">Terms of Service</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Continue</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Cancel</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-en-rGB/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000000..b4cf291d22
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-en-rGB/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Cancel</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Prevent this page from creating additional dialogues</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Set</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Clear</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Sign in</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Username</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Password</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Don’t save</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Not now</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Never save</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Not now</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Save</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Don’t update</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Not now</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Update</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Password field must not be empty</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Enter a password</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Unable to save login</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Can’t save password</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Save this login?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Save password?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Update this login?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Update password?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Add username to saved password?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Label for entering a text input field</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Choose a colour</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Allow</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Deny</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Are you sure?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Do you want to leave this site? Data you have entered may not be saved</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Stay</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Leave</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Pick a month</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Jan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Apr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">May</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Jun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Jul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Aug</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sep</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Oct</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dec</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Set time</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Manage logins</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Manage passwords</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Expand suggested logins</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Expand saved passwords</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Collapse suggested logins</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Collapse saved passwords</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Suggested logins</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Saved passwords</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Suggest strong password</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Suggest strong password</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Use strong password: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Resend data to this site?</string>
+ <string name="mozac_feature_prompt_repost_message">Refreshing this page could duplicate recent actions, such as sending a payment or posting a comment twice.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Resend data</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Cancel</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Select credit card</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Use saved card</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Expand suggested credit cards</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Expand saved cards</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Collapse suggested credit cards</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Collapse saved cards</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Manage credit cards</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Manage cards</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Securely save this card?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Update card expiration date?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Card number will be encrypted. Security code won’t be saved.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s encrypts your card number. Your security code won’t be saved.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Select address</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Expand suggested addresses</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Expand saved addresses</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Collapse suggested addresses</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Collapse saved addresses</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Manage addresses</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Account picture</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Choose a login provider</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Sign in with a %1$s account</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Use %1$s as a login provider</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ Logging in to %1$s with a %2$s account is subject to their <a href="%3$s">Privacy Policy</a> and <a href="%4$s">Terms of Service</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Continue</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Cancel</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-eo/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-eo/strings.xml
new file mode 100644
index 0000000000..a6cc86761b
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-eo/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Akcepti</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Nuligi</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Ne permesi al tiu ĉi paĝo la kreadon de novaj dialogoj</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Akcepti</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Viŝi</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Komenci seancon</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Nomo de uzanto</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Pasvorto</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Ne konservi</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Ne nun</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Neniam konservi</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Ne nun</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Konservi</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Ne ĝisdatigi</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Ne nun</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Ĝisdatigi</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">La pasvorto ne povas esti malplena</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Tajpu pasvorton</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Ne eblas konservi legitimilon</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Ne eblas konservi la pasvorton</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Ĉu konservi tiun ĉi legitimilon?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Ĉu konservi pasvorton?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Ĉu ĝisdatigi tiun ĉi akreditilon?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Ĉu ĝisdatigi pasvorton?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Ĉu aldoni nomon de uzanto al la konservita pasvorto?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Etikedo por eniga teksta kampo</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Elekti koloron</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Permesi</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Rifuzi</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Ĉu vi certas?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Ĉu vi volas foriri el tiu ĉi retejo? Enigitaj datumoj eble ne estos konservitaj.</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Resti</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Foriri</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Elekti monaton</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Jan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Apr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Maj</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Jun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Jul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Aŭg</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sep</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Okt</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dec</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Difini horon</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Administri legitimilojn</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Administri pasvortojn</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Malfaldi sugestitajn legitimilojn</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Malfaldi konservitajn pasvortojn</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Faldi sugestitajn legitimilojn</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Faldi konservitajn pasvortojn</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Sugestitaj legitimiloj</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Konservitaj pasvortoj</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Sugesti fortan pasvorton</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Sugesti fortan pasvorton</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Uzi fortan pasvorton: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Ĉu resendi datumojn al tiu ĉi retejo?</string>
+ <string name="mozac_feature_prompt_repost_message">Reŝargo de tiu paĝo povus ripeti ĵusajn agojn, ekzemple resendon de pago aŭ komento.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Resendi datumojn</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Nuligi</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Elekti kreditkarton</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Uzi konservitan karton</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Malfaldi sugestitajn kreditkartojn</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Elporti konservitajn pasvortojn</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Faldi sugestitajn kreditkartojn</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Faldi konservitajn kartojn</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Administri kreditkartojn</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Administri kartojn</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Ĉu sekure konservi tiun ĉi kreditkarton?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Ĉu ĝisdatigi la daton de senvalidiĝo de kreditkarto?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">La numero de kreditkaro estos ĉifrita. La sekureca kodo ne estos konservita.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s ĉifras vian numeron de karto. Via sekureca kodo ne estos konservita.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Elekti adresojn</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Malfaldi sugestitajn adresojn</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Malfaldi konservitajn adresojn</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Faldi sugestitajn adresojn</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Faldi konservitajn adresojn</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Administri adresojn</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Bildo de profilo</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Elektu provanton de legitimo por uzantoj</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Komencu seancon kun konto de %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Uzi %1$s kiel provizanton de legitimilo</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[Komenco de seanco en %1$s per konto de %2$s estas regata de ilia <a href="%3$s">politiko pri privateco</a> kaj <a href="%4$s">kondiĉoj de uzo</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Daŭrigi</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Nuligi</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-es-rAR/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-es-rAR/strings.xml
new file mode 100644
index 0000000000..b16d50b15a
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-es-rAR/strings.xml
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Aceptar</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Cancelar</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Impedir que esta página cree diálogos adicionales</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Establecer</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Eliminar</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Iniciar sesión</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Nombre de usuario</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Contraseña</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">No guardar</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">No ahora</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">No guardar nunca</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">No ahora</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Guardar</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">No actualizar</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">No ahora</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Actualizar</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">El campo de contraseña no puede estar vacío</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Ingresar una contraseña</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">No se puede guardar el inicio de sesión</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">No se puede guardar la contraseña</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">¿Guardar este inicio de sesión?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">¿Guardar contraseña?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">¿Actualizar este inicio de sesión?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">¿Actualizar contraseña?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">¿Agregar nombre de usuario a la contraseña guardada?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Etiqueta para ingresar un campo de entrada de texto</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Elija un color</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Permitir</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Denegar</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">¿Estás seguro?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">¿Querés salir de este sitio? Los datos que ingresaste pueden no guardarse</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Permanecer</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Salir</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Elegí un mes</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">En</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Abr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Mayo</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Jun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Jul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Ago</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sep</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Oct</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dic</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Establecer hora</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Administrar inicios de sesión</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Administrar contraseñas</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Expandir los inicios de sesión sugeridos</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Expandir las contraseñas guardadas</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Contraer los inicios de sesión sugeridos</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Contraer contraseñas guardadas</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Inicios de sesión sugeridos</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Contraseñas guardadas</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Sugerir contraseña segura</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Sugerir contraseña segura</string>
+
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Usar contraseña segura: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">¿Reenviar datos a este sitio?</string>
+ <string name="mozac_feature_prompt_repost_message">Recargar esta página podría duplicar acciones recientes, como enviar un pago o publicar un comentario dos veces.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Reenviar datos</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Cancelar</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Seleccionar tarjeta de crédito</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Usar tarjeta guardada</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Ampliar las tarjetas de crédito sugeridas</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Expandir tarjetas guardadas</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Contraer tarjetas de crédito sugeridas</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Contraer tarjetas guardadas</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Administrar tarjetas de crédito</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Administrar tarjetas</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">¿Guardar esta tarjeta de forma segura?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">¿Actualizar la fecha de vencimiento de la tarjeta?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">El número de tarjeta será cifrado. El código de seguridad no se guardará.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s cifra tu número de tarjeta. El código de seguridad no se guardará.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Seleccionar dirección</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Expandir direcciones sugeridas</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Expandir las direcciones guardadas</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Contraer direcciones sugeridas</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Contraer direcciones guardadas</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Administrar direcciones</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Foto de la cuenta</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Elegir un proveedor de inicio de sesión</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Iniciar sesión con una cuenta de %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Usar %1$s como proveedor de inicio de sesión</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ Iniciar sesión en %1$s con una cuenta %2$s está sujeto a la <a href="%3$s">Política de privacidad</a> y <a href="%4$s">Términos de servicio</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Continuar</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Cancelar</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-es-rCL/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-es-rCL/strings.xml
new file mode 100644
index 0000000000..ed1d9dd56f
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-es-rCL/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Aceptar</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Cancelar</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Evitar que esta página cree diálogos adicionales</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Ajustar</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Limpiar</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Conectarse</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Nombre de usuario</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Contraseña</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">No guardar</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Ahora no</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Nunca guardar</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Ahora no</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Guardar</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">No actualizar</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Ahora no</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Actualizar</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">El campo de contraseña no puede estar vacío</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Ingresar una contraseña</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">No se pudo guardar la credencial</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">No se puede guardar la contraseña</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">¿Guardar esta credencial?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">¿Guardar contraseña?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">¿Actualizar esta credencial?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">¿Actualizar contraseña?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">¿Añadir nombre de usuario a la contraseña guardada?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Etiqueta para ingresar un campo de entrada de texto</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Elige un color</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Permitir</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Denegar</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">¿De verdad quieres proceder?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">¿Quieres dejar este sitio? Los datos que ha ingresado podrían no estar guardados</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Mantenerse</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Salir</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Elige un mes</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Ene</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Abr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">May</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Jun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Jul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Ago</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sep</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Oct</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dic</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Ajustar hora</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Administrar credenciales</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Gestionar contraseñas</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Expandir credenciales sugeridas</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Expandir contraseñas guardadas</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Contraer credenciales sugeridas</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Contraer contraseñas guardadas</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Credenciales sugeridas</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Contraseñas guardadas</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Sugerir contraseña segura</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Sugerir contraseña segura</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Usar contraseña segura: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">¿Reenviar datos a este sitio?</string>
+ <string name="mozac_feature_prompt_repost_message">Recargar esta página podría duplicar acciones recientes, como enviar un pago o publicar un comentario dos veces.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Reenviar datos</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Cancelar</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Seleccionar tarjeta de crédito</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Usar tarjeta guardada</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Expandir tarjetas de crédito sugeridas</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Expandir tarjetas guardadas</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Ocultar tarjetas de crédito sugeridas</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Contraer tarjetas guardadas</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Gestionar tarjetas de crédito</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Gestionar tarjetas</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">¿Guardar esta tarjeta de forma segura?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">¿Actualizar la fecha de vencimiento de la tarjeta?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">El número de la tarjeta será encriptado. El código de seguridad no será guardo.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s cifra tu número de tarjeta. Tu código de seguridad no será guardado.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Seleccionar dirección</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Expandir direcciones sugeridas</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Expandir direcciones guardadas</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Ocultar direcciones sugeridas</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Contraer direcciones guardadas</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Gestionar direcciones</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Imagen de la cuenta</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Elige un proveedor de inicio de sesión</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Conéctate con una cuenta de %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Usar %1$s como proveedor de inicio de sesión</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[Conectarse a %1$s con una cuenta de %2$s está sujeto a su <a href="%3$s">Política de privacidad</a> y <a href="%4$s">Términos de servicio</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Continuar</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Cancelar</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-es-rES/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-es-rES/strings.xml
new file mode 100644
index 0000000000..2457b86e36
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-es-rES/strings.xml
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Vale</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Cancelar</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Evitar que esta página cree diálogos adicionales</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Establecer</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Limpiar</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Iniciar sesión</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Nombre de usuario</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Contraseña</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">No guardar</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Ahora no</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">No guardar nunca</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Ahora no</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Guardar</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">No actualizar</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Ahora no</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Actualizar</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">El campo de contraseña no puede estar vacío</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Introduce una contraseña</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">No se puede guardar el inicio de sesión</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">No se ha podido guardar la contraseña</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">¿Guardar este inicio de sesión?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">¿Guardar contraseña?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">¿Actualizar este inicio de sesión?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">¿Actualizar contraseña?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">¿Añadir nombre de usuario a la contraseña guardada?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Etiqueta para ingresar un campo de entrada de texto</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Elegir un color</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Permitir</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Denegar</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">¿Estás seguro?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">¿Quieres salir de este sitio? Los datos que has introducido puede que no estén guardados</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Permanecer</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Salir</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Elige un mes</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Enero</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Febrero</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Marzo</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Abril</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Mayo</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Junio</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Julio</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Agosto</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sept</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Oct</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dic</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Establecer hora</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Administrar inicios de sesión</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Administrar contraseñas</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Expandir inicios de sesión sugeridos</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Expandir las contraseñas guardadas</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Contraer inicios de sesión sugeridos</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Contraer las contraseñas guardadas</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Inicios de sesión sugeridos</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Contraseñas guardadas</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Sugerir contraseña segura</string>
+
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Sugerir contraseña segura</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Usar contraseña segura: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">¿Reenviar los datos a este sitio?</string>
+ <string name="mozac_feature_prompt_repost_message">Actualizar esta página podría duplicar acciones recientes, como hacer un pago o publicar un comentario dos veces.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Reenviar los datos</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Cancelar</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Seleccionar tarjeta de crédito</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Usar tarjeta guardada</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Expandir la lista de tarjetas de crédito sugeridas</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Expandir tarjetas guardadas</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Contraer la lista de tarjetas de crédito sugeridas</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Contraer tarjetas guardadas</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Administrar tarjetas de crédito</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Administrar tarjetas</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">¿Guardar esta tarjeta de forma segura?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">¿Actualizar la fecha de caducidad de la tarjeta?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">El número de tarjeta será cifrado. El código de seguridad no se guardará.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s cifra tu número de tarjeta. Tu código de seguridad no se guardará.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Seleccionar dirección</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Expandir direcciones sugeridas</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Expandir direcciones guardadas</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Contraer direcciones sugeridas</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Contraer direcciones guardadas</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Administrar direcciones</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Imagen de la cuenta</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Elegir un proveedor de inicio de sesión</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Conéctate con una cuenta de %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Usar %1$s como proveedor de inicio de sesión</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ Iniciar sesión en %1$s con una cuenta %2$s está sujeto a la <a href="%3$s">Política de privacidad</a> y a los <a href="%4$s">Términos de servicio</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Continuar</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Cancelar</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-es-rMX/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-es-rMX/strings.xml
new file mode 100644
index 0000000000..d38f4e62a5
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-es-rMX/strings.xml
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Aceptar</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Cancelar</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Prevenir esta página desde la creación de cuadros de diálogo adicionales</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Establecer</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Limpiar</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Iniciar sesión</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Nombre de usuario</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Contraseña</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">No guardar</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Nunca guardar</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Ahora no</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Guardar</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">No actualizar</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Actualizar</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">El campo de contraseña no puede estar vacío</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">No se puede guardar el inicio de sesión</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">¿Guardar este inicio de sesión?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">¿Actualizar este inicio de sesión?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">¿Agregar nombre de usuario a la contraseña guardada?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Etiqueta para ingresar un campo de entrada de texto</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Elegir un color</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Permitir</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Denegar</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">¿Estás seguro?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">¿Deseas abandonar este sitio? Los datos que has ingresado podrían perderse</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Permanecer en el sitio</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Abandonar el sitio</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Eligir un mes</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Ene</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Abr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">May</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Jun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Jul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Ago</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sep</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Oct</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dic</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Establecer hora</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Administrar inicios de sesión</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Expandir los inicios de sesión sugeridos</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Contraer los inicios de sesión sugeridos</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Inicios de sesión sugeridos</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">¿Reenviar datos a este sitio?</string>
+ <string name="mozac_feature_prompt_repost_message">Actualizar esta página podría duplicar acciones recientes, como enviar un pago o publicar un comentario dos veces.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Reenviar datos</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Cancelar</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Seleccionar tarjeta de crédito</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Expandir sección de tarjetas de crédito sugeridas</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Ocultar las tarjetas de crédito sugeridas</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Administrar tarjetas de crédito</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">¿Guardar esta tarjeta de forma segura?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">¿Actualizar la fecha de vencimiento de la tarjeta?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">El número de tarjeta se encriptará. El código de seguridad no se guardará.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Seleccionar dirección</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Expandir direcciones sugeridas</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Ocultar direcciones sugeridas</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Administrar direcciones</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Imagen de la cuenta</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Elige un proveedor de inicio de sesión</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Conéctate con una cuenta de %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Usar %1$s como proveedor de inicio de sesión</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[Iniciar sesión en %1$s con una cuenta de %2$s está sujeto a su <a href="%3$s">Política de Privacidad</a> y <a href="%4$s">Términos de Servicio.</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Continuar</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Cancelar</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-es/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-es/strings.xml
new file mode 100644
index 0000000000..2457b86e36
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-es/strings.xml
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Vale</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Cancelar</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Evitar que esta página cree diálogos adicionales</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Establecer</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Limpiar</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Iniciar sesión</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Nombre de usuario</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Contraseña</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">No guardar</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Ahora no</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">No guardar nunca</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Ahora no</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Guardar</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">No actualizar</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Ahora no</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Actualizar</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">El campo de contraseña no puede estar vacío</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Introduce una contraseña</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">No se puede guardar el inicio de sesión</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">No se ha podido guardar la contraseña</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">¿Guardar este inicio de sesión?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">¿Guardar contraseña?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">¿Actualizar este inicio de sesión?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">¿Actualizar contraseña?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">¿Añadir nombre de usuario a la contraseña guardada?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Etiqueta para ingresar un campo de entrada de texto</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Elegir un color</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Permitir</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Denegar</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">¿Estás seguro?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">¿Quieres salir de este sitio? Los datos que has introducido puede que no estén guardados</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Permanecer</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Salir</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Elige un mes</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Enero</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Febrero</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Marzo</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Abril</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Mayo</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Junio</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Julio</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Agosto</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sept</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Oct</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dic</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Establecer hora</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Administrar inicios de sesión</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Administrar contraseñas</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Expandir inicios de sesión sugeridos</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Expandir las contraseñas guardadas</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Contraer inicios de sesión sugeridos</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Contraer las contraseñas guardadas</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Inicios de sesión sugeridos</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Contraseñas guardadas</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Sugerir contraseña segura</string>
+
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Sugerir contraseña segura</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Usar contraseña segura: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">¿Reenviar los datos a este sitio?</string>
+ <string name="mozac_feature_prompt_repost_message">Actualizar esta página podría duplicar acciones recientes, como hacer un pago o publicar un comentario dos veces.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Reenviar los datos</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Cancelar</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Seleccionar tarjeta de crédito</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Usar tarjeta guardada</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Expandir la lista de tarjetas de crédito sugeridas</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Expandir tarjetas guardadas</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Contraer la lista de tarjetas de crédito sugeridas</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Contraer tarjetas guardadas</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Administrar tarjetas de crédito</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Administrar tarjetas</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">¿Guardar esta tarjeta de forma segura?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">¿Actualizar la fecha de caducidad de la tarjeta?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">El número de tarjeta será cifrado. El código de seguridad no se guardará.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s cifra tu número de tarjeta. Tu código de seguridad no se guardará.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Seleccionar dirección</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Expandir direcciones sugeridas</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Expandir direcciones guardadas</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Contraer direcciones sugeridas</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Contraer direcciones guardadas</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Administrar direcciones</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Imagen de la cuenta</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Elegir un proveedor de inicio de sesión</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Conéctate con una cuenta de %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Usar %1$s como proveedor de inicio de sesión</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ Iniciar sesión en %1$s con una cuenta %2$s está sujeto a la <a href="%3$s">Política de privacidad</a> y a los <a href="%4$s">Términos de servicio</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Continuar</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Cancelar</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-et/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-et/strings.xml
new file mode 100644
index 0000000000..5d0f71851a
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-et/strings.xml
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Loobu</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Sellel lehel keelatakse lisanduvate dialoogide loomine</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Vali</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Tühjenda</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Logi sisse</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Kasutajanimi</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Parool</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Ära salvesta</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Mitte praegu</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Ära salvesta kunagi</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Mitte praegu</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Salvesta</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Ära uuenda</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Mitte praegu</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Uuenda</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Parooli väli ei tohi olla tühi</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Sisesta parool</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Kasutajatunnuste salvestamine pole võimalik</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Parooli ei saa salvestada</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Kas salvestada need kasutajatunnused?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Salvesta parool?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Kas uuendada kasutajatunnused?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Uuenda parool?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Kas lisada salvestatud paroolile kasutajanimi?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Nimetus sisestuskasti tekstiväljale</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Värvi valimine</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Luba</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Keela</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Kas oled kindel?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Kas soovid sellelt saidilt lahkuda? Sisestatud andmeid ei pruugita salvestada</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Jää</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Lahku</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Vali kuu</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">jaan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">veebr</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">mär</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">apr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">mai</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">juun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">juul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">aug</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">sept</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">okt</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">dets</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Aja määramine</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Halda kasutajakontosid</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Halda paroole</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Laienda soovitatud kasutajakontosid</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Laienda salvestatud paroolid</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Ahenda soovitatud kasutajakontod</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Ahenda salvestatud paroolid</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Soovitatud kasutajakontod</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Salvestatud paroolid</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Soovita tugevat parooli</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Soovita tugevat parooli</string>
+
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Kasuta tugevat parooli %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Kas saata andmed sellele saidile uuesti?</string>
+ <string name="mozac_feature_prompt_repost_message">Selle lehe värskendamine võib dubleerida hiljutisi toiminguid, nagu makse saatmine või kommentaari postitamine.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Saada andmed uuesti</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Loobu</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Vali krediitkaart</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Kasuta salvestatud kaarti</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Laienda soovitatud krediitkaarte</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Laienda salvestatud kaardid</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Ahenda soovitatud krediitkaarte</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Ahenda salvestatud kaardid</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Halda krediitkaarte</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Halda kaarte</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Kas salvestada see kaart turvaliselt?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Kas uuendada kaardi aegumiskuupäeva?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Kaardi number krüptitakse. Turvakoodi ei salvestata.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s krüpteerib kaardi numbri. Turvakoodi ei salvestata.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Vali aadress</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Laienda soovitatud aadressid</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Laienda salvestatud aadressid</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Ahenda soovitatud aadressid</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Ahenda salvestatud aadressid</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Halda aadresse</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Konto pilt</string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Jätka</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Loobu</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-eu/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-eu/strings.xml
new file mode 100644
index 0000000000..3782fee0a2
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-eu/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Ados</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Utzi</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Eragotzi orri honi elkarrizketa-koadro gehiago sortzea</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Ezarri</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Garbitu</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Hasi saioa</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Erabiltzaile-izena</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Pasahitza</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Ez gorde</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Une honetan ez</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Ez gorde inoiz</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Une honetan ez</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Gorde</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Ez eguneratu</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Une honetan ez</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Eguneratu</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Pasahitzaren eremuak ezin du hutsik egon</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Idatzi pasahitz bat</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Ezin da saio-hasiera gorde</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Ezin da pasahitza gorde</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Gorde saio-hasiera hau?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Gorde pasahitza?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Eguneratu saio-hasiera hau?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Eguneratu pasahitza?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Gehitu erabiltzaile-izena gordetako pasahitzari?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Testua idazteko eremua sartzeko etiketa</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Aukeratu kolore bat</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Baimendu</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Ukatu</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Ziur zaude?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Gune hau utzi nahi duzu? Sartu dituzun datuak gal litezke</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Jarraitu hemen</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Utzi</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Hautatu hilabetea</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Urt</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Ots</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Api</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Mai</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Eka</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Uzt</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Abu</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Ira</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Urr</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Aza</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Abe</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Ezarri denbora</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Kudeatu saio-hasierak</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Kudeatu pasahitzak</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Zabaldu iradokitako saio-hasierak</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Zabaldu gordetako pasahitzak</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Tolestu iradokitako saio-hasierak</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Tolestu gordetako pasahitzak</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Iradokitako saio-hasierak</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Gordetako pasahitzak</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Gomendatu pasahitz sendoa</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Gomendatu pasahitz sendoa</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Erabili pasahitz sendoa: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Birbidali datuak gune honetara?</string>
+ <string name="mozac_feature_prompt_repost_message">Orri hau berritzeak azken ekintzak bikoiztea eragin lezake, adibidez ordainketa bat egitea edo iruzkin bat birritan bidaltzea.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Birbidali datuak</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Utzi</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Hautatu kreditu-txartela</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Erabili gordetako txartela</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Zabaldu iradokitako kreditu-txartelak</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Zabaldu gordetako txartelak</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Tolestu iradokitako kreditu-txartelak</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Tolestu gordetako txartelak</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Kudeatu kreditu-txartelak</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Kudeatu txartelak</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Gorde txartela modu seguruan?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Eguneratu txartelaren iraungitze-data?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Txartel-zenbakia zifratu egingo da. Segurtasun-kodea ez da gordeko.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s(e)k zure txartel-zenbakia zifratzen du. Zure segurtasun-kodea ez da gordeko.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Hautatu helbidea</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Zabaldu iradokitako helbideak</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Zabaldu gordetako helbideak</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Tolestu iradokitako helbideak</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Tolestu gordetako helbideak</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Kudeatu helbideak</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Kontuaren argazkia</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Aukeratu saio-hasiera hornitzailea</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Hasi saioa %1$s kontuarekin</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Erabili %1$s saio-hasiera hornitzaile gisa</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[%1$s hornitzailean %2$s kontuarekin saioa hastea bere <a href="%3$s">pribatutasun-politika</a> eta <a href="%4$s">zerbitzuaren baldintzen</a> menpe dago]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Jarraitu</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Utzi</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-fa/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-fa/strings.xml
new file mode 100644
index 0000000000..d827812d36
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-fa/strings.xml
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">تأیید</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">لغو</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">از ایجاد پنجره‌های جدید توسط این صفحه جلوگیری شود.</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">تنظیم</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">پاک کردن</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">ورود</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">نام کاربری</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">گذرواژه</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">ذخیره نشود</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">هرگز ذخیره نکن</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">اکنون نه</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">ذخیره</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">بروزرسانی نکن</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">بروزرسانی</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">خانهٔ گذرواژه نباید خالی باشد</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">ذخیره ورود امکان پذیر نیست</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">ذخیره این ورود؟</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">بروزرسانی این ورود؟</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">افزودن نام‌کاربری به گذرواژه ذخیره شده؟</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">برچسب برای وارد کردن یک خانهٔ ورودی متنی</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">یک رنگ انتخاب کنید</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">اجازه دادن</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">رد کردن</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">آیا اطمینان دارید؟</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">می خواهید این پایگاه را ترک کنید؟ اطلاعاتی که وارد کردید ممکن است ذخیره نشود</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">ماندن</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">ترک کردن</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">یک ماه انتخاب کنید</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">ژانویه</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">فوریه</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">مارس</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">آوریل</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">مه</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">ژوئن</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">ژوئیه</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">اوت</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">سپتامبر</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">اکتبر</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">نوامبر</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">دسامبر</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">تنظیم زمان</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">مدیریت ورودها</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">ورودهای پیشنهادی را گسترش دهید</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">ورودهای پیشنهادی را گسترش دهید</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">ورود‌های پیشنهاد شده</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">ارسال دوباره داده به این پایگاه؟</string>
+ <string name="mozac_feature_prompt_repost_message">بازخوانی این صفحه می‌تواند کنش‌های اخیر مانند پرداخت یا ارسال نظر را دوباره تکرار کند.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">ارسال دوبارهٔ داده‌ها</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">لغو</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">انتخاب کارت اعتباری</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">کارت‌های اعتباری بیشتر</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">کارت‌های اعتباری کم‌تر</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">مدیریت کارت‌های اعتباری</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">این کارت به صورت ایمن ذخیره شود؟</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">تاریخ انقضای کارت به‌روز شود؟</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">شماره کارت رمزگذاری خواهد شد. رمز امنیتی ذخیره نخواهد شد.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">گزینش نشانی</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">گسترش نشانی‌های پیشنهادی</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">جمع کردن نشانی‌های پیشنهادی</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">مدیریت نشانی‌ها</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">تصویر حساب</string>
+ <!-- Title of the Identity Credential provider dialog choose. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">انتخاب یک فراهم‌کنندهٔ ورود</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">استفاده از %1$s به عنوان یک فراهم‌کننده</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ورود به %1$s با یک حساب %2$s تحت <a href="%3$s">سیاست حفظ محرمانگی</a> و <a href="%4$s">شرایط ارائهٔ خدمات</a> آن‌هاست]]></string>
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-ff/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ff/strings.xml
new file mode 100644
index 0000000000..1316ca2667
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ff/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Moƴƴii</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Haaytu</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Haɗ ngoo hello sosde kaalde goɗɗe</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Teelto</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Momtu</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Seŋo</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Innde kuutoro</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Finnde</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Hoto danndu</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Hoto danndu abada</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Danndu</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Hesɗitin</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Gallol finnde fotaani wonde mehol</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Horiima danndude seŋorde</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Ɓeydu innde kuutoro e finnde danndaade?</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Yamir</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Haɗ</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Suɓo lewru</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Siilo</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Colte</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mbooy</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Duujal</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Seeɗto</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Korse</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Morso</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Juko</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Siilto</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Yarkomaa</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Jolal</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Bowte</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Laɓo kartal banke</string>
+
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Uddit karte banke basiyaaɗe</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Uddu karte banke basiyaaɗe</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Toppito karte banke</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Danndu ngal kartal e kisnal?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Hesɗitin ñalngu kiiɗtugol kartal?</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-fi/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-fi/strings.xml
new file mode 100644
index 0000000000..c0c777120e
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-fi/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Peruuta</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Estä tätä sivua luomasta lisäikkunoita</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Aseta</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Tyhjennä</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Kirjaudu sisään</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Käyttäjätunnus</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Salasana</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Älä tallenna</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Ei nyt</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Älä tallenna koskaan</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Ei nyt</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Tallenna</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Älä päivitä</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Ei nyt</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Päivitä</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Salasanakenttä ei saa olla tyhjä</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Kirjoita salasana</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Kirjautumistietojen tallennus epäonnistui</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Salasanaa ei voi tallentaa</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Tallennetaanko tämä kirjautumistieto?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Tallennetaanko salasana?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Päivitetäänkö tämä kirjautumistieto?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Päivitetäänkö salasana?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Lisätäänkö käyttäjänimi tallennettuun salasanaan?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Selite tekstin kirjoittamiselle tekstikenttään</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Valitse väri</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Salli</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Estä</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Oletko varma?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Haluatko poistua tältä sivustolta? Kirjoittamasi tiedot eivät välttämättä tallennu</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Pysy</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Poistu</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Valitse kuukausi</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">tammi</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">helmi</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">maalis</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">huhti</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">touko</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">kesä</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">heinä</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">elo</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">syys</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">loka</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">marras</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">joulu</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Aseta aika</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Hallitse kirjautumistietoja</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Hallitse salasanoja</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Laajenna ehdotetut kirjautumistiedot</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Laajenna tallennetut salasanat</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Supista ehdotetut kirjautumistiedot</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Supista tallennetut salasanat</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Ehdotetut kirjautumistiedot</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Tallennetut salasanat</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Ehdota vahvaa salasanaa</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Ehdota vahvaa salasanaa</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Käytä vahvaa salasanaa: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Lähetetäänkö tiedot uudelleen tälle sivustolle?</string>
+ <string name="mozac_feature_prompt_repost_message">Tämän sivun päivittäminen saattaa kahdentaa viimeisimmät toiminnot, kuten maksun suorittamisen tai kommentin lähettämisen kahdesti.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Lähetä tiedot uudelleen</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Peruuta</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Valitse luottokortti</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Käytä tallennettua korttia</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Laajenna ehdotetut luottokortit</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Laajenna tallennetut kortit</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Supista ehdotetut luottokortit</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Supista tallennetut kortit</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Hallitse luottokortteja</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Hallitse kortteja</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Tallennetaanko tämä kortti turvallisesti?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Päivitetäänkö kortin viimeinen voimassaolopäivä?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Kortin numero salataan. Suojakoodia ei tallenneta.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s salaa korttisi numeron. Turvakoodiasi ei tallenneta.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Valitse osoite</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Laajenna ehdotetut osoitteet</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Laajenna tallennetut osoitteet</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Supista ehdotetut osoitteet</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Supista tallennetut osoitteet</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Hallitse osoitteita</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Tilin kuva</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Valitse kirjautumispalvelu</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Kirjaudu sisään %1$s-tilillä</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Käytä palvelua %1$s kirjautumiseen</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ Kirjautuminen palvelun %1$s tilillä %2$s on kyseisen palvelun <a href="%3$s">tietosuojakäytännön</a> ja <a href="%4$s">käyttöehtojen</a> alaista]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Jatka</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Peruuta</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-fr/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-fr/strings.xml
new file mode 100644
index 0000000000..4dfffcad53
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-fr/strings.xml
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Annuler</string>
+
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Empêcher cette page d’ouvrir des dialogues supplémentaires</string>
+
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Valider</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Effacer</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Se connecter</string>
+
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Nom d’utilisateur</string>
+
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Mot de passe</string>
+
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Ne pas enregistrer</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Plus tard</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Ne jamais enregistrer</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Pas pour cette fois</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Enregistrer</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Ne pas mettre à jour</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Plus tard</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Mettre à jour</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Le champ mot de passe ne doit pas être vide</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Saisissez un mot de passe</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Impossible d’enregistrer l’identifiant</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Impossible d’enregistrer le mot de passe</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Enregistrer ces identifiants ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Enregistrer le mot de passe ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Mettre à jour cet identifiant ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Mettre à jour le mot de passe ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Ajouter un nom d’utilisateur au mot de passe enregistré ?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Libellé pour la création d’un champ de saisie de texte</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Choisir une couleur</string>
+
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Autoriser</string>
+
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Refuser</string>
+
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Confirmation</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Voulez-vous quitter ce site ? Des données saisies peuvent être perdues</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Rester</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Quitter</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Choisir un mois</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">janv.</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">févr.</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">mars</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">avr.</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">mai</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">juin</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">juil.</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">août</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">sept.</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">oct.</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">nov.</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">déc.</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Choisir l’heure</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Gérer les identifiants</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Gérer les mots de passe</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Développer les identifiants suggérés</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Développer les mots de passe enregistrés</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Réduire les identifiants suggérés</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Réduire les mots de passe enregistrés</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Identifiants suggérés</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Mots de passe enregistrés</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Suggérer un mot de passe fort</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Suggérer un mot de passe fort</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Utiliser un mot de passe fort : %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Renvoyer les données à ce site ?</string>
+ <string name="mozac_feature_prompt_repost_message">Actualiser cette page pourrait répéter des actions récentes, telles que l’envoi d’un paiement ou la publication d’un commentaire.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Renvoyer les données</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Annuler</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Sélectionner une carte bancaire</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Utiliser une carte enregistrée</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Développer les cartes bancaires suggérées</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Développer les cartes enregistrées</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Réduire les cartes bancaires suggérées</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Réduire les cartes enregistrées</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Gérer les cartes bancaires</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Gérer les cartes</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Enregistrer cette carte en toute sécurité ?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Mettre à jour la date d’expiration de la carte ?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Le numéro de carte sera chiffré. Le code de sécurité ne sera pas enregistré.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s chiffre votre numéro de carte. Votre code de sécurité ne sera pas enregistré.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Sélectionner une adresse</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Développer les adresses suggérées</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Développer les adresses enregistrées</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Réduire les adresses suggérées</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Réduire les adresses enregistrées</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Gérer les adresses</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Photo du profil</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Choisir un fournisseur de connexion</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Connectez-vous avec un compte %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Utiliser %1$s comme fournisseur de connexion</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[Se connecter à %1$s avec un compte %2$s est soumis à la <a href="%3$s">politique de confidentialité</a> et aux <a href="%4$s">conditions d’utilisation</a> de ce dernier.]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Continuer</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Annuler</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-fur/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-fur/strings.xml
new file mode 100644
index 0000000000..0e81b65ce8
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-fur/strings.xml
@@ -0,0 +1,190 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Va ben</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Anule</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Impedìs a cheste pagjine di creâ altris dialics</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Stabilìs</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Nete</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Jentre</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Non utent</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Password</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">No sta salvâ</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">No cumò</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">No sta salvâ mai</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">No cumò</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Salve</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">No sta inzornâ</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">No cumò</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Inzorne</string>
+
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Il cjamp de password nol à di sei vueit</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Inserìs une password</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Impussibil salvâ lis credenziâls</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Impussibil salvâ la password</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Salvâ cheste credenziâl?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Salvâ la password?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Inzornâ cheste credenziâl?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Inzornâ la password?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Zontâ il non utent ae password salvade?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Etichete associade a un cjamp pal inseriment di test</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Sielç un colôr</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Permet</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Dinee</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Bandonâ pardabon?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Desideristu bandonâ chest sît? I dâts inserîts a podaressin lâ pierdûts</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Reste</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Bandone</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Selezione un mês</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Zen</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Fev</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Avr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Mai</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Jug</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Lui</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Avo</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Set</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Otu</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dic</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Stabilìs ore</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Gjestìs credenziâls</string>
+
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Gjestìs passwords</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Slargje lis credenziâls sugjeridis</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Slargje lis passwords salvadis</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Comprim lis credenziâls sugjeridis</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Strenç lis passwords salvadis</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Credenziâls sugjeridis</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Passwords salvadis</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Sugjerìs password complesse</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Sugjerìs password complesse</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Dopre password complesse: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Tornâ a inviâ i dâts a chest sît?</string>
+ <string name="mozac_feature_prompt_repost_message">Se tu tornis a cjariâ cheste pagjine tu podaressis causâ la ripetizion des azions resintis, come l’inviament di un paiament o publicâ un coment dôs voltis.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Torne invie i dâts</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Anule</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Selezione cjarte di credit</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Dopre cjarte salvade</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Slargje la liste des cjartis di credit sugjeridis</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Slargje lis cjartis salvadis</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Comprim la liste des cjartis di credit sugjeridis</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Strenç lis cjartis salvadis</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Gjestìs cjartis di credit</string>
+
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Gjestìs cjartis</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Salvâ cheste cjarte in maniere sigure?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Inzornâ la date di scjadince de cjarte?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Il numar de cjarte al sarà cifrât. Il codiç di sigurece nol vignarà salvât.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s al cifre il numar de tô cjarte. Il codiç di sigurece nol vignarà salvât.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Selezione recapit</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Slargje i recapits sugjerîts</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Slargje lis direzions salvadis</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Comprim recapits sugjerîts</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Strenç lis direzions salvadis</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Gjestìs recapits</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Imagjin pal account</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Sielç un furnidôr di acès</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Jentre cuntun account %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Dopre %1$s come furnidôr di acès</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[L’acès a %1$s cuntun account %2$s al sotstà ae <a href="%3$s">Informative su la riservatece</a> e ai <a href="%4$s">Tiermins dal servizi</a> di chest ultin]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Continue</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Anule</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-fy-rNL/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-fy-rNL/strings.xml
new file mode 100644
index 0000000000..648aa71c19
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-fy-rNL/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Annulearje</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Foarkomme dat dizze side ekstra dialoochfinsters makket</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Ynstelle</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Wiskje</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Oanmelde</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Brûkersnamme</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Wachtwurd</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Net bewarje</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">No net</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Nea bewarje</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">No net</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Bewarje</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Net bywurkje</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">No net</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Bywurkje</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Wachtwurdfjild mei net leech wêze</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Folje in wachtwurd yn</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Kin oanmelding net bewarje</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Kin wachtwurd net bewarje</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Dizze oanmelding bewarje?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Wachtwurd bewarje?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Dizze oanmelding bywurkje?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Wachtwurd bywurkje?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Brûkersnamme oan bewarre wachtwurd tafoegje?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Label foar it ynfieren fan in tekstynfierfjild</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Kies in kleur</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Tastean</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Wegerje</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Binne jo wis?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Wolle jo dizze website ferlitte? Ynfierde gegevens wurde mooglik net bewarre</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Bliuwe</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Ferlitte</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Kies in moanne</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">jan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">mrt</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">apr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">maa</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">jun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">jul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">aug</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">sep</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">okt</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">des</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Tiid ynstelle</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Oanmeldingen beheare</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Wachtwurden beheare</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Foarstelde oanmeldingen útklappe</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Bewarre wachtwurden te útklappe</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Foarstelde oanmeldingen ynklappe</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Bewarre wachtwurden ynklappe</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Foarstelde oanmeldingen</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Bewarre wachtwurden</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Sterk wachtwurd foarstelle</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Sterk wachtwurd foarstelle</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Sterk wachtwurd brûke: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Gegevens opnij nei dizze website ferstjoere?</string>
+ <string name="mozac_feature_prompt_repost_message">It opnij laden fan dizze side kin resinte aksjes duplisearje, lykas it ferstjoeren fan in betelling of it twa kear pleatsen fan in berjocht.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Gegevens opnij ferstjoere</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Annulearje</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Selektearje creditcard</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Bewarre kaart brûke</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Foarstelde creditcards útklappe</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Bewarre kaarten te útklappe</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Foarstelde creditcards ynklappe</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Bewarre kaarten ynklappe</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Creditcards beheare</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Kaarten beheare</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Dizze kaart feilich bewarje?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Ferrindatum kaart bywurkje?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">It kaartnûmer sil fersifere wurde. De befeiligingskoade wurdt net bewarre.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s fersiferet jo kaartnûmer. Jo befeiligingskoade wurdt net bewarre.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Adres selektearje</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Foarstelde adressen útklappe</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Bewarre adressen útklappe</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Foarstelde adressen ynklappe</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Bewarre adressen ynklappe</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Adressen beheare</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Accountôfbylding</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Kies in oanmeldprovider</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Meld jo oan mei in %1$s-account</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">%1$s as oanmeldprovider brûke</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[Oanmelding by %1$s mei in %2$s-account falt ûnder harren <a href="%3$s">Privacybelied</a> en <a href="%4$s">Tsjinstbetingsten</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Trochgean</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Annulearje</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-ga-rIE/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ga-rIE/strings.xml
new file mode 100644
index 0000000000..ce1fcab220
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ga-rIE/strings.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Cealaigh</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Ná lig don leathanach seo tuilleadh dialóg a chruthú</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Socraigh</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Glan</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Logáil isteach</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Ainm úsáideora</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Focal Faire</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Ná sábháil</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Sábháil</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Nuashonraigh</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Ní cheadaítear focal faire folamh</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Níorbh fhéidir an focal faire a shábháil</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Lipéad do réimse ionchurtha téacs</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Roghnaigh dath</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Ceadaigh</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Diúltaigh</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Roghnaigh mí</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Ean</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Fea</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Már</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Aib</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Bea</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Mei</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Iúil</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Lún</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">MFó</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">DFó</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Samh</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Nol</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-gd/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-gd/strings.xml
new file mode 100644
index 0000000000..5ad7782f05
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-gd/strings.xml
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Ceart ma-thà</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Sguir dheth</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Na leig leis an duilleag seo còmhraidhean eile a chruthachadh</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Suidhich</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Falamhaich</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Clàraich a-steach</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Ainm-cleachdaiche</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Facal-faire</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Na sàbhail</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Na sàbhail idir</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Chan ann an-dràsta</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Sàbhail</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Na ùraich</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Ùraich</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Chan fhaod raon an fhacail-fhaire a bhith bàn</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Cha ghabh an clàradh a-steach a shàbhaladh</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">A bheil thu airson an clàradh a-steach seo a shàbhaladh?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">A bheil thu airson an clàradh a-steach seo ùrachadh?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">A bheil thu airson an t-ainm-cleachdaiche seo a chur ris an fhacal-fhaire a shàbhail thu?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Leubail airson raon ion-chur teacsa a chur a-steach</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Tagh dath</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Ceadaich</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Diùlt</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">A bheil thu cinnteach?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">A bheil thu airson an làrach seo fhàgail? Dh‘fhaoidte nach deach dàta a chuir thu a-steach a shàbhaladh fhathast</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Fuirich</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Fàg an-seo</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Tagh mìos</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Faoi</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Gearr</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Màrt</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Gibl</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Cèit</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Ògmh</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Iuch</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Lùna</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sult</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Dàmh</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Samh</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dùbh</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Suidhich àm</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Stiùirich na clàraidhean a-steach</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Leudaich na mholar de chlàraidhean a-steach</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Co-theannaich na mholar de chlàraidhean a-steach</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Clàraidhean a-steach a mholamaid</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">A bheil thu airson an dàta a chur gun làrach seo a-rithist?</string>
+ <string name="mozac_feature_prompt_repost_message">Ma nì thu ath-nuadhachadh air an duilleag seo, dh’fhaoidte gun dèid gnìomhan a rinn thu o chionn goirid, can pàigheadh a chur thu no beachd a phostaich thu, a dhèanamh a-rithist.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Cuir an dàta a-rithist</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Sguir dheth</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Tagh cairt-chreideis</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Leudaich na cairtean-creideis a mholamaid</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Co-theannaich na cairtean-creideis a mholamaid</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Stiùirich na cairtean-creideis</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">A bheil thu airson a’ chairt seo a shàbhaladh air dòigh thèarainte?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">A bheil thu airson an latha a dh’fhalbhas an ùine air a’ chairt ùrachadh?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Thèid àireamh na cairte a chrioptachadh. Cha tèid an còd tèarainteachd a shàbhaladh.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Tagh seòladh</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Leudaich na seòlaidhean a tha gam moladh</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Co-theannaich na seòlaidhean a tha gam moladh</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Stiùirich na seòlaidhean</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-gl/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-gl/strings.xml
new file mode 100644
index 0000000000..785542bd46
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-gl/strings.xml
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Aceptar</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Cancelar</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Evitar que esta páxina cree diálogos adicionais</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Estabelecer</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Limpar</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Acceder</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Nome de usuario</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Contrasinal</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save" moz:removedIn="125" tools:ignore="UnusedResources">Non gardar</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2">Agora non</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Non gardar nunca</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Agora non</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Gardar</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update" moz:removedIn="125" tools:ignore="UnusedResources">Non actualizar</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2">Agora non</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Actualizar</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password" moz:removedIn="125" tools:ignore="UnusedResources">O campo de contrasinal non debe estar baleiro</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2">Introduza un contrasinal</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause" moz:removedIn="125" tools:ignore="UnusedResources">Non foi posíbel gardar o acceso</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2">Non se pode gardar o contrasinal</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline" moz:removedIn="125" tools:ignore="UnusedResources">Gardar esta identificación?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2">Gardar o contrasinal?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline" moz:removedIn="125" tools:ignore="UnusedResources">Actualizar esta identificación?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2">Actualizar o contrasinal?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Engadir nome de usuario ao contrasinal gardado?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Etiqueta para introducir un campo de entrada de texto</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Escolla unha cor</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Permitir</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Denegar</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Confirma?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Desexa abandonar este sitio? Pode que os datos introducidos non se garden</string>
+
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Permanecer</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Abandonar</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Escolla un mes</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Xan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Abr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Maio</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Xuñ</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Xul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Ago</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Set</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Out</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dec</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Establecer a hora</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins" moz:removedIn="125" tools:ignore="UnusedResources">Xestionar as identificacións</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2">Xestionar os contrasinais</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Expandir os inicios de sesión suxeridos</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2">Expandir os contrasinais gardados</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Contraer os inicios de sesión suxeridos</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2">Contraer os contrasinais gardados</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins" moz:removedIn="125" tools:ignore="UnusedResources">Inicios de sesión suxeridos</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2">Contrasinais gardados</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Suxerir contrasinais fortes</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Suxerir contrasinais fortes</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Usar un contrasinal forte: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Reenviar os datos a este sitio?</string>
+ <string name="mozac_feature_prompt_repost_message">Actualizar esta páxina pode duplicar accións recentes, como enviar un pago ou publicar un comentario dúas veces.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Reenviar datos</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Cancelar</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card" moz:removedIn="125" tools:ignore="UnusedResources">Seleccionar a tarxeta de crédito</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2">Usar unha tarxeta gardada</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Ampliar as tarxetas de crédito suxeridas</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2">Expandir as tarxetas gardadas</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Contraer as tarxetas de crédito suxeridas</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2">Contraer as tarxetas gardadas</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards" moz:removedIn="125" tools:ignore="UnusedResources">Xestionar as tarxetas de crédito</string>
+
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2">Xestionar tarxetas</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Gardar esta tarxeta de forma segura?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Actualizar a data de caducidade da tarxeta?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body" moz:removedIn="125" tools:ignore="UnusedResources">O número de tarxeta cifrarase. O código de seguridade non se gardará.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2">%s cifra o seu número de tarxeta. O seu código de seguranza non se gardará.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Seleccione o enderezo</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Expandir os enderezos suxeridos</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2">Amplíe os enderezos gardados</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Contraer os enderezos suxeridos</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2">Contraer os enderezos gardados</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Xestionar enderezos</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Imaxe da conta</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Escolla un provedor de inicio de sesión</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Iniciar sesión cunha conta %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Use %1$s como provedor de inicio de sesión</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ Iniciar sesión en %1$s cunha conta de %2$s está suxeito á súa <a href="%3$s">Política de privacidade</a> e ás súas <a href="%4$s">Condicións de servizo </a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Continuar</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Cancelar</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-gn/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-gn/strings.xml
new file mode 100644
index 0000000000..ed14962d6b
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-gn/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">MONEĨ</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Heja</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Ani emoneĩ ko kuatiaroguépe omoheñóivo ñomongeta</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Mboheko</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Mopotĩ</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Eñepyrũ tembiapo</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Poruhára réra</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Ñe’ẽñemi</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save" moz:removedIn="125" tools:ignore="UnusedResources">Ani eñongatu</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2">Ani ko’ág̃a</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Aníke eñongatu</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Ani ko’ág̃a</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Ñongatu</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update" moz:removedIn="125" tools:ignore="UnusedResources">Ani embohekopyahu</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2">Ani ko’ág̃a</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Mbohekopyahu</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password" moz:removedIn="125" tools:ignore="UnusedResources">Pe ñe’ẽñemi kora ndopytaiva’erã nandi</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2">Emoinge ñe’ẽñemi</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause" moz:removedIn="125" tools:ignore="UnusedResources">Nereñongatukuaái tembiapo ñepyrũ</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2">Noñeñongatúi ñe’ẽñemi</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline" moz:removedIn="125" tools:ignore="UnusedResources">¿Tembiapo ñepyrũ ñongatu?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2">¿Eñongatu ñe’ẽñemi?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline" moz:removedIn="125" tools:ignore="UnusedResources">¿Tembiapo ñepyrũ mbohekopyahu?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2">¿Embohekopyahu ñe’ẽñemi?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">¿Embojuaju poruhára réra ñe’ẽñemi ñongatupyrépe?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Teramoĩ eike hag̃ua moñe’ẽrã jeikeha korápe</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Eiporavo sa’y</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Moneĩ</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Mbotove</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">¿Eikuaaporãpa?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">¿Esẽse ko tendágui? Umi mba’ekuaarã emoingéva oñeñongatu’ỹva</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Pyta</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Ñesẽ</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Eiporavo peteĩ jasy</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Jasyteĩ</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Jasykõi</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Jasyapy</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Jasyrundy</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Jasypo</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Jasypoteĩ</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Jasypokõi</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Jasypoapy</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Jasyporundy</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Jasypa</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Jasypateĩ</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Jasypakõi</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Emoĩ aravo</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins" moz:removedIn="125" tools:ignore="UnusedResources">Tembiapo ñepyrũ ñangarekohára</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2">Eñangareko ñe’ẽñemíre</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Emoasãi tembiapo ñepyrũ je’epyre</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2">Emyasãi ñe’ẽñemi ñongatupyre</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Emomichĩ tembiapo ñepyrũ je’epyre</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2">Emoñynỹi ñe’ẽñemi ñongatupyre</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins" moz:removedIn="125" tools:ignore="UnusedResources">Tembiapo ñepyrũ je’epyre</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2">Ñe’ẽñemi ñongatupyre</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Eikuave’ẽ ñe’ẽñemi hekorosãva</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Eikuave’ẽ ñe’ẽñemi hekorosãva</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Eiporu ñe’ẽñemi hekorosãva: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">¿Emondojey mba’ekuaarã ko tendápe?</string>
+ <string name="mozac_feature_prompt_repost_message">Emyanyhẽjeývo ko kuatiarogue ombohetakuaa ejaporamóva, omondokuaa jehepyme’ẽ térã omoherakuãjo’a nde jehaipy.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Emondojey mba’ekuaarã</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Heja</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card" moz:removedIn="125" tools:ignore="UnusedResources">Eiporavo kuatia’atã ñemurã</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2">Eiporu kuatia’atã ñongatupyre</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Emoasãi kuatia’atã ñemurã rysýi je’epyre</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2">Emyasãi kuatia’atã ñongatupyre</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Eñomi kuatia’atã ñemurã je’epyre</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2">Emoñynỹi kuatia’atã ñongatupyre</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards" moz:removedIn="125" tools:ignore="UnusedResources">Eñangareko kuatia’atã ñemurãre</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2">Eñangareko kuatia’atã</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">¿Eñongatu ko kuatia’atã oĩ porã hag̃uáme?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">¿Embohekopyahu kuatia’atã arange paha?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body" moz:removedIn="125" tools:ignore="UnusedResources">Kuatia’atã papapy ipe’ahañemíta. Pe’ahañemi noñeñongatumo’ãi.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2">%s ombopapapy nde kuatia’atã. Nde rekorosãrã ayvu noñeñongatumo’ãi.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Eiporavo kundaharape</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Emoasãi kundaharape je’epyréva</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2">Emyasãi kundaharape ñongatupyre</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Emomichĩ kundaharape je’epyréva</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2">Emoñynỹi kundaharape ñongatupyre</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Eñangareko kundaharapére</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Mba’ete ra’ãnga</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Eiporavo tembiapo ñepyrũ me’ẽhára</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Eñepyrũ tembiapo %1$s mba’etépe</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Eiporu %1$s tembiapo ñepyrũ me’ẽhárõ</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[Emba’apo %1$s peteĩ mba’ete %2$s ndive ojokupytýva <a href="%3$s">Porureko ñemigua</a> ha avei <a href="%4$s">Mba’epytyvõrã ñemboguata</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Eku’ejey</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Heja</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-gu-rIN/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-gu-rIN/strings.xml
new file mode 100644
index 0000000000..fd199216f6
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-gu-rIN/strings.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">રદ કરો</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">આ પૃષ્ઠને અતિરિક્ત સંવાદો બનાવવાથી રોકો</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">ગોઠવો</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">સાફ કરો</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">સાઇન ઇન કરો</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">વપરાશકર્તા નામ</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">પાસવર્ડ</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">સાચવો નહીં</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">સાચવો</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">અપડેટ કરશો નહીં</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">અપડેટ કરો</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">પાસવર્ડની જગ્યા ખાલી ન હોવો જોઈએ</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">લાૅગ-ઇન સાચવવામાં અસમર્થ</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">તમે આ લૉગિનને સાચવવા માંગો છો?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">તમે આ લૉગિનને અપડેટ કરવા માંગો છો?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">શું તમે સાચવેલા પાસવર્ડમાં વપરાશકર્તા નામ ઉમેરવા માંગો છો?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">ટેક્સ્ટ ઇનપુટ ક્ષેત્ર દાખલ કરવા માટેનું લેબલ</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">રંગ પસંદ કરો</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">પરવાનગી આપો</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">નકારો</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">શું તમે ચોક્કસ છો?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">શું તમે આ સાઇટ છોડવા માંગો છો? તમે દાખલ કરેલો ડેટા સાચવવામાં આવશે નહીં</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">રહો</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">છોડો</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">મહિનો પસંદ કરો</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">જાન્યુઆરી</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">ફેબ્રુઆરી</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">માર્ચ</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">એપ્રિલ</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">મે</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">જૂન</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">જુલાઈ</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">ઑગસ્ટ</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">સપ્ટેમ્બર</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">ઑક્ટોબર</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">નવેમ્બર</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">ડિસેમ્બર</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-hi-rIN/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-hi-rIN/strings.xml
new file mode 100644
index 0000000000..c4c9f6ae09
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-hi-rIN/strings.xml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">ठीक है</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">रद्द करें</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">इस पृष्ठ को अतरिक्त सूचना प्रदान करने से रोकें</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">सेट करें</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">मिटाएं</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">साइन इन करें</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">उपयोगकर्ता नाम</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">पासवर्ड</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">मत सहेजें‌</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">कभी नहीं सहेजें</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">सहेजें</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">अपडेट न करें</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">अद्यतित करें</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">पासवर्ड क्षेत्र रिक्त नहीं होनी चाहिए</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">लॉगिन जानकारी सजेहने में असफल</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">इस लॉगिन को सहेजना चाहते हैं?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">इस लॉगिन को अपडेट करना चाहते हैं?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">सहेजे गए पासवर्ड में उपयोगकर्ता नाम जोड़ना चाहते हैं?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">पाठ इनपुट क्षेत्र दर्ज करने के लिए लेबल</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">एक रंग चुनें</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">अनुमति दें</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">अस्वीकार करें</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">क्या आपको यकीन है?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">क्या आप इस साइट को छोड़ना चाहते हैं? आपके द्वारा दर्ज किया गया डेटा सहेजा नहीं जा सकता है</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">रुकें</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">छोड़ें</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">एक महीना चुनें</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">जनवरी</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">फरवरी</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">मार्च</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">अप्रैल</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">मई</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">जून</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">जुलाई</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">अगस्त</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">सितंबर</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">अक्टूबर</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">नवंबर</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">दिसंबर</string>
+
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">लॉगिन प्रबंधित करें</string>
+
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">सुझाए गए लॉगिन का विस्तार करें</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">सुझाए गए लॉगिन संक्षिप्त करें</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">सुझाए गए लॉगिन</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">इस साइट पर डेटा फिर से भेजें?</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">डेटा फिर से भेजें</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">रद्द करें</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">क्रेडिट कार्ड चुनें</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">सुझाए गए क्रेडिट कार्ड का विस्तार करें</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings -->
+ <string name="mozac_feature_prompts_manage_credit_cards">क्रेडिट कार्ड प्रबंधित करें</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-hil/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-hil/strings.xml
new file mode 100644
index 0000000000..2647f4d9b5
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-hil/strings.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Sige</string>
+
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Password</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Save</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Magapabilin</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Magpili sang bulan</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Enero</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Pebrero</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Marso</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Abril</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Mayo</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Hunyo</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Hulyo</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Agosto</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Setiyembre</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Oktubre</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nobiyembre</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Disiyembre</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-hr/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-hr/strings.xml
new file mode 100644
index 0000000000..b23b6aba5b
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-hr/strings.xml
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">U redu</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Odustani</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Onemogući ovoj stranici stvaranje dodatnih dijaloga</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Postavi</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Izbriši</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Prijavi se</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Korisničko ime</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Lozinka</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Nemoj spremiti</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Nikad ne spremaj</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Ne sada</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Spremi</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Nemoj aktualizirati</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Aktualiziraj</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Polje lozinke ne smije biti prazno</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Nije moguće spremiti prijavu</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Spremiti ovu prijavu?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Aktualizirati ovu prijavu?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Dodati korisničko ime spremljenoj lozinki?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Oznaka za unašanje polja za unos teksta</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Odaberi boju</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Dozvoli</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Zabrani</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Sigurno?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Želiš napustiti ovu stranicu? Upisani podaci se možda neće spremiti</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Ostani</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Napusti</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Odaberi mjesec</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Sij</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Velj</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Ožu</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Tra</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Svi</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Lip</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Srp</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Kol</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Ruj</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Lis</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Stu</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Pro</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Postavi vrijeme</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Upravljaj prijavama</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Proširi predložene prijave</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Sažmi predložene prijave</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Predložene prijave</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Ponovno poslati podatke ovoj stranici?</string>
+ <string name="mozac_feature_prompt_repost_message">Osvježavanje ove stranice moglo bi ponoviti nedavne radnje, kao što su dvostruko plaćanje ili komentiranje.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Ponovno pošalji podatke</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Odustani</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Odaberi kreditnu karticu</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Proširi predložene kreditne kartice</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Sažmi predložene kreditne kartice</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Upravljaj kreditnim karticama</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Sigurno spremi ovu karticu?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Ažuriraj datum isteka kartice?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Broj kartice će biti šifriran. Sigurnosni kod neće biti spremljen.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Odaberite adresu</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Proširi predložene adrese</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Sažmi predložene adrese</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Upravljanje adresama</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Slika računa</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Odaberite davatelja usluge prijave</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Prijavite se s računom %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Koristite %1$s kao davatelja usluge prijave</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[Prijava u %1$s s %2$s računom podliježe njihovoj <a href="%3$s">politici privatnosti</a> i <a href="%4$s">Uvjetima usluge</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Nastavi</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Odustani</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-hsb/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-hsb/strings.xml
new file mode 100644
index 0000000000..23d8daba55
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-hsb/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">W porjadku</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Přetorhnyć</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Tutu stronu při wutworjenju přidatnych dialogow haćić</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Nastajić</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Zhašeć</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Přizjewić</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Wužiwarske mjeno</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Hesło</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Njeskładować</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Nic nětko</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Ženje njeskładować</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Nic nětko</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Składować</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Njeaktualizować</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Nic nětko</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Aktualizować</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Hesłowe polo njesmě prózdne być</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Hesło zapodać</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Přizjewjenje njeda so składować</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Hesło njeda so składować</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Tute přizjewjenje składować?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Hesło składować?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Tute přizjewjenje aktualizować?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Hesło aktualizować?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Wužiwarske mjeno składowanemu hesłu přidać?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Popis za zapodaće do tekstoweho pola</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Wubjerće barbu</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Dowolić</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Wotpokazać</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Sće wěsty?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Chceće tute sydło wopušćić? Zapodate daty njebudu so snano składować</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Wostać</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Wopušćić</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Měsac wubrać</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Jan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Měr</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Apr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Mej</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Jun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Jul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Awg</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sep</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Okt</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Now</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dec</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Čas nastajić</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Přizjewjenja rjadować</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Hesła rjadować</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Namjetowane přizjewjenja pokazać</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Składowane hesła pokazać</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Namjetowane přizjewjenja schować</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Składowane hesła schować</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Namjetowane přizjewjenja</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Składowane hesła</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Sylne hesło namjetować</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Sylne hesło namjetować</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Sylne hesło wužiwać: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Daty k tutomu sydłu znowa pósłać?</string>
+ <string name="mozac_feature_prompt_repost_message">Aktualizowanje tuteje strony móhło najnowše akcije podwojić, na přikład słanje płaćenja abo dwójne wotesyłanje komentara.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Daty znowa pósłać</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Přetorhnyć</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Kreditnu kartu wubrać</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Składowanu kartu wužiwać</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Namjetowane kreditne karty pokazać</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Składowane karty pokazać</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Namjetowane kreditne karty schować</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Składowane karty schować</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Kreditne karty rjadować</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Karty rjadować</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Tutu kartu wěsće składować?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Datum spadnjenja karty aktualizować?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Čisło karty budźe so zaklučować. Wěstotny kod njebudźe so składować.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s waše kartowe čisło zaklučuje. Waš wěstotny kod njebudźe so składować.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Adresu wubrać</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Namjetowane adresy pokazać</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Składowane adresy pokazać</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Namjetowane adresy schować</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Składowane adresy schować</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Adresy rjadować</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Kontowy wobraz</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Wubjerće přizjewjenskeho poskićowarja</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">So z kontom %1$s přizjewić</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">%1$s jako přizjewjenskeho poskićowarja wužiwać</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[Přizjewjenje pola %1$s z kontom %2$s jeho <a href="%3$s">prawidłam priwatnosće</a> a <a href="%4$s">wužiwanskim wuměnjenjam</a> podleži]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Dale</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Přetorhnyć</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-hu/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-hu/strings.xml
new file mode 100644
index 0000000000..a480fe2bdd
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-hu/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Rendben</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Mégse</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Az oldal ne hozhasson létre további párbeszédablakokat</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Beállítás</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Törlés</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Bejelentkezés</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Felhasználónév</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Jelszó</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Ne mentse</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Most nem</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Sose mentse</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Most nem</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Mentés</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Ne frissítse</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Most nem</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Frissítés</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">A jelszómező nem lehet üres</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Adjon meg egy jelszót</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">A bejelentkezés nem menthető</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">A jelszó nem menthető</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Menti ezt a bejelentkezést?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Menti a jelszót?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Frissíti ezt a bejelentkezést?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Jelszó frissítése?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Hozzáadja a felhasználónevet a mentett jelszóhoz?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Címke a szövegbeviteli mezőhöz</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Válasszon színt</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Engedélyezés</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Tiltás</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Biztos benne?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Elhagyja ezt az oldalt? A bevitt adatok lehet, hogy nem lettek elmentve.</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Maradás</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Távozás</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Válasszon hónapot</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">jan.</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">febr.</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">márc.</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">ápr.</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">máj.</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">jún.</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">júl.</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">aug.</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">szept.</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">okt.</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">nov.</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">dec.</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Idő beállítása</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Bejelentkezések kezelése</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Jelszavak kezelése</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Javasolt bejelentkezések kibontása</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Mentett jelszavak kibontása</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Javasolt bejelentkezések összecsukása</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Mentett jelszavak összecsukása</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Javasolt bejelentkezések</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Mentett jelszavak</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Erős jelszó javaslata</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Erős jelszó javaslata</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Erős jelszó használata: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Újraküldi az adatokat ennek a webhelynek?</string>
+ <string name="mozac_feature_prompt_repost_message">Az oldal frissítése megismételheti a legutóbbi műveleteket, például újra fizethet vagy még egyszer elküldheti ugyanazt a hozzászólást.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Adatok újraküldése</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Mégse</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Válasszon bankkártyát</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Mentett kártya használata</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Javasolt bankkártyák kibontása</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Mentett kártyák kibontása</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Javasolt bankkártyák összecsukása</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Mentett kártyák összecsukása</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Bankkártyák kezelése</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Kártyák kezelése</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Elmenti biztonságosan ezt a kártyát?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Frissíti a kártya lejárati dátumát?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">A kártyaszám titkosítva lesz. A biztonsági kód nem kerül mentésre.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">A %s titkosítja a kártyaszámát. A biztonsági kód nem lesz mentve.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Cím kiválasztása</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Javasolt címek kibontása</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Mentett címek kibontása</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Javasolt címek összecsukása</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Mentett címek összecsukása</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Címek kezelése</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Fiók képe</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Válasszon bejelentkezési szolgáltatót</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Jelentkezzen be a %1$s-fiókjába</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">A(z) %1$s használata bejelentkezési szolgáltatóként</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[A(z) %2$s fiókkal a(z) %1$s szolgáltatásba való bejelentkezésre az <a href="%3$s">Adatvédelmi irányelvek</a> és a <a href="%4$s">Szolgáltatási feltételei</a> vonatkoznak]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Folytatás</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Mégse</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-hy-rAM/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-hy-rAM/strings.xml
new file mode 100644
index 0000000000..8190f8d45b
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-hy-rAM/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Լավ</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Չեղարկել</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Կասեցնել այս էջը հավելյալ երկխոսություններ ստեղծելուց</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Կայել</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Մաքրել</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Մուտք գործել</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Օգտվողի անուն</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Գաղտնաբառ</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Չպահպանել</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Ոչ հիմա</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Երբեք չպահպանել</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Ոչ հիմա</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Պահպանել</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Չթարմացնել</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Ոչ հիմա</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Թարմացնել</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Գաղտնաբառի դաշտը չպետք է դատարկ լինի</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Մուտքագրեք գաղտնաբառ</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Անհնար է պահել մուտքանունը</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Հնարավոր չէ պահել գաղտնաբառը</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Պահպանե՞լ մուտքանունը</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Պահե՞լ գաղտնաբառը</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Թարմացնե՞լ մուտքանունը:</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Թարմացնե՞լ գաղտնաբառը:</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Ավելացնե՞լ օգտվողի անունը գաղտնաբառին:</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Պիտակ`գրվածքի մուտքի դաշտ մուտքագրելու համար</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Ընտրեք գույնը</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Թույլատրել</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Արգելել</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Համոզվա՞ծ եք</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Ցանկանո՞ւմ եք լքել այս կայքը: Ձեր մուտքագրած տվյալները, հնարավոր է, չպահպանվեն:</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Մնալ</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Լքել</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Ընտրեք ամիսը</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Հուն</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Փետ</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Մարտ</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Ապր</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Մայիս</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Հուն</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Հուլ</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Օգս</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Սեպ</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Հոկ</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Նոյ</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Դեկ</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Կայել ժամանակ</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Կառավարել մուտքանունները</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Կառավարել գաղտնաբառերը</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Ընդլայնել առաջարկվող մուտքանունները</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Ընդարձակել պահված գաղտնաբառերը</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Կոծկել առաջարկվող մուտքանունները</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Կոծկել պահված գաղտնաբառերը</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Առաջարկվող մուտքանուններ</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Պահված գաղտնաբառեր</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Առաջարկել ուժեղ գաղտնաբառ</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Առաջարկել ուժեղ գաղտնաբառ</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Օգտագործեք ուժեղ գաղտնաբառ՝ %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Կրկին ուղարկել տվյալները այս կայքի համար:</string>
+ <string name="mozac_feature_prompt_repost_message">Տվյալ էջի թարմացումը կարող է կրկնօրինակել վերջին գործողությունները, ինչպես օրինակ՝ վճարումը կամ մեկնաբանության կրկնակի հրապարակումը:</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Կրկին ուղարկել</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Չեղարկել</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Ընտրեք բանկային քարտ</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Օգտագործել պահված քարտը</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Ընդարձակել առաջարկվող բանկային քարտերը</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Ընդարձակել պահված քարտերը</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Կոծկել առաջարկվող բանկային քարտերը</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Կոծկել պահված քարտերը</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Կառավարել բանկային քարտերը</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Կառավարել քարտերը</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Ապահով պահե՞լ այս քարտը:</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Թարմացնե՞լ քարտի գործողության ժամկետը:</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Քարտի համարը կկոդավորվի: Անվտանգության կոդը չի պահվի:</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s-ը գաղտնագրում է ձեր քարտի համարը: Անվտանգության ձեր կոդը չի պահպանվի:</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Ընտրեք հասցե</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Ընդլայնել առաջարկվող հասցեները</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Ընդարձակել պահված հասցեները</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Կոծկել առաջարկվող հասցեները</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Կոծկել պահված հասցեները</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Կառավարել հասցեները</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Հաշվի նկար</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Ընտրեք մուտքի մատակարար</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Մուտք գործեք %1$s հաշիվով</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Օգտագործեք %1$s որպես մուտքի մատակարար</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[%1$s մուտք գործելը %2$s հաշվով ենթակա է իրենց <a href="%3$s">Գաղտնիության դրույթներին</a> և <a href="%4$s">Ծառայության պայմաններին</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Շարունակել</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Չեղարկել</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-ia/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ia/strings.xml
new file mode 100644
index 0000000000..d81b6b52e4
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ia/strings.xml
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Cancellar</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Impedir iste pagina de crear altere dialogos</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Definir</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Vacuar</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Aperir session</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Nomine de usator</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Contrasigno</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Non salvar</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Non ora</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Non salvar mais</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Non ora</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Salvar</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Non actualisar</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Non ora</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Actualisar</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Le campo del contrasigno non debe esser vacue</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Insere un contrasigno</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Impossibile salvar le credentiales</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Impossibile salvar le contrasigno</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Salvar iste credentiales?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Salvar le contrasigno?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Actualisar iste credentiales?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Actualisar le contrasigno?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Adder le nomine de usator al contrasigno salvate?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Etiquetta pro introduction de un texto de campo de entrata</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Eliger un color</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Permitter</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Denegar</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Es tu secur?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Vole tu lassar iste sito? Le datos que tu ha inserite non pote esser salvate</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Remaner</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Quitar</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Elige un mense</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">jan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">apr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Maio</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">jun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">jul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">aug</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">sep</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">oct</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">dec</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Adjustar le hora</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Gerer credentiales</string>
+
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Gerer contrasignos</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Expander le credentiales suggerite</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Expander le contrasignos salvate</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Collaber le credentiales suggerite</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Comprimer le contrasignos salvate</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Credentiales suggerite</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Contrasignos salvate</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Suggerer contrasigno complexe</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Suggerer contrasigno complexe</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Usa contrasigno forte: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Reinviar le datos a iste sito?</string>
+ <string name="mozac_feature_prompt_repost_message">Actualisar iste pagina pote duplicar activitates recente, tal como inviar un pagamento o un commento duo vices.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Reinviar datos</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Cancellar</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Eliger le carta de credito</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Usar un carta salvate</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Expander le cartas de credito suggerite</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Expander le cartas salvate</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Collaber le cartas de credito suggerite</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Comprimer le cartas salvate</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Gerer le cartas de credito</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Gerer le cartas</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Securmente salveguardar iste carta?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Actualisar le data de expiration del carta?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Le numero de carta sera cryptate. Le codice de securitate non sera salvate.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s crypta tu numero de carta. Tu codice de securitate non sera salvate.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Seliger adress</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Expander adresses suggerite</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Expander adresses salvate</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Collaber adresses suggerite</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Collaber adresses salvate</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Gerer adresses</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Imagine del conto</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Selige un fornitor de accesso</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Aperir session con un conto %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Usar %1$s como fornitor de accesso</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[Le accesso a %1$s con un conto %2$s es subjecte a lor <a href="%3$s">Politica de confidentialitate</a> e <a href="%4$s">Terminos de servicio</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Continuar</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Cancellar</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-in/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-in/strings.xml
new file mode 100644
index 0000000000..7f0fdf319c
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-in/strings.xml
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Oke</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Batal</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Cegah laman ini membuat dialog lainnya</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Setel</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Hapus</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Masuk</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Nama Pengguna</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Sandi</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Jangan simpan</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Jangan pernah simpan</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Tidak sekarang</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Simpan</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Jangan perbarui</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Perbarui</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Bidang kata sandi tidak boleh kosong</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Gagal menyimpan info masuk</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Simpan info masuk ini?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Perbarui info masuk ini?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Tambahkan nama pengguna ke kata sandi yang disimpan?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Label untuk memasukkan input teks</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Pilih warna</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Izinkan</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Tolak</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Yakin?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Apakah Anda ingin meninggalkan situs ini? Data yang Anda masukkan mungkin tidak disimpan</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Tetap di sini</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Tinggalkan</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Pilih bulan</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Jan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Apr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Mei</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Jun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Jul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Agu</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sep</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Okt</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Des</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Atur waktu</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Kelola info masuk</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Perlihatkan log masuk yang disarankan</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Ciutkan log masuk yang disarankan</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Log masuk yang disarankan</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Kirim ulang data ke situs ini?</string>
+ <string name="mozac_feature_prompt_repost_message">Menyegarkan halaman ini dapat mengulang tindakan yang baru saja dilakukan, seperti melakukan pembayaran atau mengirim komentar dua kali</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Kirim ulang data</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Batal</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Pilih kartu kredit</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Perluas kartu kredit yang disarankan</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Ciutkan kartu kredit yang disarankan</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Kelola kartu kredit</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Simpan kartu ini dengan aman?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Perbarui tanggal kedaluwarsa kartu?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Nomor kartu akan dienkripsi. Kode keamanan tidak akan disimpan.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Pilih alamat</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Bentangkan alamat yang disarankan</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Ciutkan alamat yang disarankan</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Kelola alamat</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Gambar akun</string>
+ <!-- Title of the Identity Credential provider dialog choose. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Pilih penyedia log masuk</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Pilih %1$s sebagai penyedia info masuk</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[Masuk ke %1$s dengan akun %2$s tunduk pada <a href="%3$s">Kebijakan Privasi</a> dan <a href="%4$s">Ketentuan Layanan</a>]]></string>
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-is/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-is/strings.xml
new file mode 100644
index 0000000000..790b620f4d
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-is/strings.xml
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Í lagi</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Hætta við</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Koma í veg fyrir að þessi síða búi til fleiri glugga</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Stilla</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Hreinsa</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Innskráning</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Notendanafn</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Lykilorð</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Ekki vista</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Ekki núna</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Aldrei vista</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Ekki núna</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Vista</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Ekki uppfæra</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Ekki núna</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Uppfæra</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Lykilorðareiturinn má ekki vera tómur</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Settu inn lykilorð</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Gat ekki vistað innskráningarupplýsingar</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Get ekki vistað lykilorð</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Vista þessa innskráningu?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Vista lykilorð?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Uppfæra þessa innskráningu?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Uppfæra lykilorð?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Bæta notandanafni við vistað lykilorð?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Svæði til þess að setja heiti á innsláttartexta svæði</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Velja lit</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Leyfa</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Hafna</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Ertu viss?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Viltu yfirgefa þessa síðu? Ekki er víst að gögnin sem þú hefur slegið inn séu vistuð</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Vera áfram</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Yfirgefa</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Veldu mánuð</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Jan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Apr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Maí</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Jún</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Júl</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Ágú</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sep</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Okt</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nóv</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Des</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Stilla tíma</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Sýsla með innskráningar</string>
+
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Sýsla með lykilorð</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Fletta út tillögum að innskráningu</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Fletta út vistuð lykilorð</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Fella saman tillögur að innskráningu</string>
+
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Fella saman vistuð lykilorð</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Tillögur að innskráningu</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Vistuð lykilorð</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Stinga upp á sterku lykilorði</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Stinga upp á sterku lykilorði</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Notaðu sterkt lykilorð: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Senda gögn til baka á þetta vefsvæði?</string>
+ <string name="mozac_feature_prompt_repost_message">Ef þú endurlest þessa síðu gæti það endurtekið nýlegar aðgerðir, eins og að senda greiðslu eða setja inn athugasemd tvisvar.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Endursenda gögn</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Hætta við</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Veldu greiðslukort</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Nota vistað kort</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Fletta út tillögum að greiðslukortum</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Fletta út vistuð greiðslukort</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Fella saman tillögur að greiðslukortum</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Fella saman vistuð greiðslukort</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Sýsla með greiðslukort</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Sýsla með greiðslukort</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Vista þetta kort á öruggan hátt?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Uppfæra gildistíma korts?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Kortanúmer verður dulritað. Öryggiskóði verður ekki vistaður.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s dulkóðar kortanúmerið þitt. Öryggiskóðinn þinn verður ekki vistaður.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Veldu póstfang</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Fletta út tillögum að póstföngum</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Fletta út vistuðum heimilisföngum</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Fella saman tillögur að póstföngum</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Fella saman vistuð heimilisföng</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Sýsla með póstföng</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Mynd fyrir notandaaðgang</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Veldu innskráningarveitu</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Skráðu þig inn með %1$s reikningi</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Nota %1$s sem innskráningarveitu</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[Innskráning á %1$s með %2$s reikningi er háð <a href="%3$s">persónuverndarstefnu</a> og <a href="%4$s">þjónustuskilmálum þeirra </a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Halda áfram</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Hætta við</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-it/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-it/strings.xml
new file mode 100644
index 0000000000..55f0558393
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-it/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Annulla</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Impedisci a questa pagina di aprire ulteriori finestre di dialogo</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Imposta</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Annulla</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Accedi</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Nome utente</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Password</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Non salvare</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Non adesso</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Non salvare mai</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Non adesso</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Salva</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Non aggiornare</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Non adesso</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Aggiorna</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">È necessario inserire una password</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Inserisci una password</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Impossibile salvare le credenziali</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Impossibile salvare la password</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Salvare queste credenziali?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Salvare la password?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Aggiornare queste credenziali?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Aggiornare la password?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Aggiungere il nome utente alle credenziali salvate?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Etichetta associata a un campo per l’inserimento di testo</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Scegli un colore</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Permetti</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Nega</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Abbandonare la pagina?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Vuoi abbandonare questo sito? I dati inseriti potrebbero non essere stati salvati</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Non abbandonare</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Abbandona</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Seleziona mese</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Gen</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Apr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Mag</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Giu</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Lug</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Ago</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Set</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Ott</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dic</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Imposta ora</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Gestione credenziali</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Gestisci password</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Espandi le credenziali suggerite</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Espandi le password salvate</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Comprimi le credenziali suggerite</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Comprimi le password salvate</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Credenziali suggerite</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Password salvate</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Suggerisci password complessa</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Suggerisci password complessa</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Utilizza password complessa: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Inviare nuovamente i dati a questo sito?</string>
+ <string name="mozac_feature_prompt_repost_message">Il ricaricamento può causare la ripetizione di azioni recenti svolte sulla pagina, generando, per esempio, pagamenti o commenti duplicati.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Reinvia i dati</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Annulla</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Seleziona carta di credito</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Utilizza carta salvata</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Espandi l’elenco delle carte di credito suggerite</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Espandi le carte salvate</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Comprimi l’elenco delle carte di credito suggerite</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Comprimi le carte salvate</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Gestisci carte di credito</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Gestisci carte</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Salvare questa carta in modo sicuro?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Aggiornare la data di scadenza della carta?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Il numero della carta sarà crittato. Il codice di sicurezza non verrà salvato.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s critta il numero della tua carta. Il codice di sicurezza non verrà salvato.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Seleziona indirizzo</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Espandi gli indirizzi suggeriti</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Espandi gli indirizzi salvati</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Comprimi gli indirizzi suggeriti</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Comprimi gli indirizzi salvati</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Gestisci indirizzi</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Immagine per l’account</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Scegli un provider di accesso</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Accedi con un account %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Utilizza %1$s come provider di accesso</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[L’accesso a %1$s con un account %2$s è soggetto all’<a href="%3$s">Informativa sulla privacy</a> e alle <a href="%4$s">Condizioni di utilizzo del servizio</a> di quest’ultimo.]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Continua</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Annulla</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-iw/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-iw/strings.xml
new file mode 100644
index 0000000000..879dd4dcc2
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-iw/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">אישור</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">ביטול</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">למנוע מדף זה ליצור תיבות דו־שיח נוספות</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">הגדרה</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">ניקוי</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">כניסה</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">שם משתמש</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">ססמה</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">לא לשמור</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">לא כעת</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">לעולם לא לשמור</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">לא כעת</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">לשמור</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">לא לעדכן</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">לא כעת</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">עדכון</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">שדה הססמה לא יכול להישאר ריק</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">נא להכניס ססמה</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">לא ניתן לשמור את הכניסה</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">לא ניתן לשמור את הססמה</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">לשמור כניסה זו?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">לשמור את הססמה?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">לעדכן כניסה זו?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">לעדכן את הססמה?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">להוסיף שם משתמש לססמה השמורה?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">תווית להזנת שדה קלט טקסט</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">בחירת צבע</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">לאפשר</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">לדחות</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">להמשיך?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">האם ברצונך לעזוב את האתר הזה? ייתכן שנתונים שהזנת לא יישמרו</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">להישאר</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">לעזוב</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">בחירת חודש</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">ינו׳</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">פבר׳</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">מרץ</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">אפר׳</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">מאי</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">יונ׳</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">יול׳</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">אוג׳</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">ספט׳</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">אוק׳</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">נוב׳</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">דצמ׳</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">הגדרת זמן</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">ניהול כניסות</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">ניהול ססמאות</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">הרחבת הכניסות המוצעות</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">הרחבת ססמאות שמורות</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">צמצום הכניסות המוצעות</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">צמצום ססמאות שמורות</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">כניסות מוצעות</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">ססמאות שמורות</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">קבלת הצעה לססמה חזקה</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">קבלת הצעה לססמה חזקה</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">שימוש בססמה חזקה: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">לשלוח את הנתונים לאתר הזה שוב?</string>
+ <string name="mozac_feature_prompt_repost_message">רענון העמוד הזה עשוי להוביל לשכפול הפעולות האחרונות, כגון ביצוע תשלום או פרסום תגובה פעמיים.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">שליחת נתונים מחדש</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">ביטול</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">בחירת כרטיס אשראי</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">שימוש בכרטיס השמור</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">הרחבת כרטיסי האשראי המוצעים</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">הרחבת כרטיסים שמורים</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">צמצום כרטיסי האשראי המוצעים</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">צמצום כרטיסים שמורים</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">ניהול כרטיסי אשראי</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">ניהול כרטיסים</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">לשמור את הכרטיס הזה באופן מאובטח?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">לעדכן את תאריך התפוגה של הכרטיס?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">מספר הכרטיס יוצפן. קוד האבטחה לא יישמר.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">‏%s מצפין את מספר הכרטיס שלך. קוד האבטחה שלך לא יישמר.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">בחירת כתובת</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">הרחבת הכתובות המוצעות</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">הרחבת כתובות דוא״ל</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">צמצום הכתובות המוצעות</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">צמצום כתובות דוא״ל</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">ניהול כתובות</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">תמונת חשבון</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">בחירת ספק התחברות</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">כניסה עם חשבון %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">שימוש ב־%1$s כספק התחברות</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[הכניסה ל־%1$s עם חשבון %2$s כפופה ל<a href="%3$s">מדיניות הפרטיות</a> ול<a href="%4$s">תנאי השימוש</a> שלהם]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">המשך</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">ביטול</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-ja/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ja/strings.xml
new file mode 100644
index 0000000000..9b0ba18b32
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ja/strings.xml
@@ -0,0 +1,199 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">キャンセル</string>
+
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">このページによる追加のダイアログ表示を抑止する</string>
+
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">設定</string>
+
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">消去</string>
+
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">ログイン</string>
+
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">ユーザー名</string>
+
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">パスワード</string>
+
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">保存しない</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">後で</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">保存しない</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">今はしない</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">保存する</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">更新しない</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">後で</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">更新</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">パスワードを入力してください</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">パスワードを入力してください</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">ログイン情報を保存できません</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">パスワードを保存できません</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">このログイン情報を保存しますか?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">パスワードを保存しますか?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">このログイン情報を更新しますか?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">パスワードを更新しますか?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">保存されたパスワードにユーザー名を追加しますか?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">テキスト入力フィールドに入力するためのラベル</string>
+
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">色を選択</string>
+
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">許可</string>
+
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">拒否</string>
+
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">本当によろしいですか?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">このサイトを離れますか? 入力したデータが保存されない可能性があります</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">留まる</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">移動する</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">月を選択してください</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">1月</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">2月</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">3月</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">4月</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">5月</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">6月</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">7月</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">8月</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">9月</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">10月</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">11月</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">12月</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">時刻の設定</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">ログイン情報の管理</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">パスワードを管理</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">提案されたログイン情報を展開</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">保存したパスワードを展開</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">提案されたログイン情報を折りたたむ</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">保存したパスワードを折りたたむ</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">提案されたログイン情報</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">保存されたパスワード</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">強固なパスワードを提案する</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">強固なパスワードを提案する</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">強固なパスワードを使用してください: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">このサイトにデータを再送信しますか?</string>
+ <string name="mozac_feature_prompt_repost_message">このページを更新すると、支払いの送信やコメントの投稿が 2 回行われるなど、直前の操作が重複する可能性があります。</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">データを再送信</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">キャンセル</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">クレジットカードを選択</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">保存したカード情報を使用</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">提案されたクレジットカード情報を展開する</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">保存したカード情報を展開</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">提案されたクレジットカード情報を折りたたむ</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">保存したカード情報を折りたたむ</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">クレジットカードを管理</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">カード情報を管理</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">このカードの情報を安全に保存しますか?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">カードの有効期限を更新しますか?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">カード番号は暗号化されます。セキュリティコードは保存されません。</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s がカード番号を暗号化します。セキュリティコードは保存しません。</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">アドレスの選択</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">提案されたアドレス情報を展開する</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">保存したアドレス情報を展開</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">提案されたアドレス情報を折りたたむ</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">保存したアドレス情報を折りたたむ</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">アドレスの管理</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">アカウント写真</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">ログインプロバイダーを選択してください</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">%1$s アカウントでログイン</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">ログインプロバイダーとして %1$s を使用する</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[%2$s アカウントで %1$s にログインすると、その <a href="%3$s">プライバシー ポリシー</a> と <a href="%4$s">サービス利用規約</a> に同意したものとみなされます]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">続ける</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">キャンセル</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-ka/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ka/strings.xml
new file mode 100644
index 0000000000..4f60984371
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ka/strings.xml
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">კარგი</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">გაუქმება</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">მომდევნო ამომხტომი სარკმლების შეზღუდვა</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">დაყენება</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">გასუფთავება</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">შესვლა</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">მომხმარებლის სახელი</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">პაროლი</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">შენახვის გარეშე</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">არასოდეს შეინახოს</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">ახლა არა</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">შენახვა</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">არ განახლდეს</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">განახლება</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">პაროლის ველი ვერ იქნება ცარიელი</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">მონაცემების შენახვა ვერ მოხერხდა</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">შეინახოს ეს მონაცემები?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">განახლდეს ეს მონაცემები?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">დაემატოს სახელი შენახულ პაროლს?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">წარწერა ტექსტის შესაყვანი ველისთვის</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">ფერის შერჩევა</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">დაშვება</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">უარყოფა</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">დარწმუნებული ხართ?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">გსურთ დატოვოთ ეს საიტი? თქვენ მიერ შეყვანილი მონაცემები არ შეინახება</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">დარჩენა</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">დატოვება</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">თვის შერჩევა</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">იან</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">თებ</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">მარ</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">აპრ</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">მაი</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">ივნ</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">ივლ</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">აგვ</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">სექ</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">ოქტ</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">ნოე</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">დეკ</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">დროის მითითება</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">ანგარიშების მართვა</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">შემოთავაზებების გაშლა</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">შემოთავაზებების აკეცვა</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">შემოთავაზებული ანგარიშები</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">ხელახლა გაეგზავნოს მონაცემები ამ საიტს?</string>
+ <string name="mozac_feature_prompt_repost_message">გვერდის გაახლებით, შესაძლოა გამეორდეს ბოლო მოქმედება, მაგალითად თანხის ჩამოჭრა ან კომენტარის დატოვება.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">კვლავ გაგზავნა</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">გაუქმება</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">საკრედიტო ბარათის არჩევა</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">შემოთავაზებული საკრედიტო ბარათების ჩამოშლა</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">შემოთავაზებული საკრედიტო ბარათების აკეცვა</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">საკრედიტო ბარათების მართვა</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">შეინახოს ეს ბარათი უსაფრთხოდ?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">განახლდეს ბარათის ვადის თარიღი?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">ბარათის ნომერი დაიშიფრება. უსაფრთხოების კოდი არ შეინახება.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">მისამართის შერჩევა</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">შემოთავაზებების გაშლა</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">შემოთავაზებების აკეცვა</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">მისამართების მართვა</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">ანგარიშის სურათი</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">აირჩიეთ შესვლის უზრუნველმყოფი</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">შესვლისთვის გამოიყენეთ %1$s-ანგარიში</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">გამოიყენეთ %1$s ანგარიშის უზრუნველმყოფად</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[შესვლისთვის როცა %1$s გამოიყენება %2$s ანგარიშით, ექვემდებარება მათს <a href="%3$s">პირადულობის დებულებასა</a> და <a href="%4$s">მომსახურების პირობებს</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">განაგრძეთ</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">გაუქმება</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-kaa/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-kaa/strings.xml
new file mode 100644
index 0000000000..4c58d61726
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-kaa/strings.xml
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">YAQSHI</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Biykarlaw</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Bul bette qosımsha dialog aynalar jaratılıwına tıyım salıw</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Ornatıw</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Tazalaw</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Kiriw</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Paydalanıwshı atı</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Parol</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Saqlamaw</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Heshqashan saqlamaw</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Házir emes</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Saqlaw</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Jańalanbasın</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Jańalaw</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Parol qatarı bos bolmawı kerek</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Logindi saqlaw múmkin emes</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Logindi saqlayıq pa?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Bul login jańalansın ba?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Saqlaǵan parolge paydalanıwshı atı qosılsın ba?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Tekst kirgiziw maydanı ushın belgi</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Reńdi tańlań</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Ruqsat beriw</string>
+
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Biykarlaw</string>
+
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Isenimińiz kámil me?</string>
+
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Bul sayttan shıǵıwdı qáleysiz be? Siz kirgizgen maǵlıwmat saqlanbawı múmkin</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Qalıw</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Shıǵıp ketiw</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Aydı tańlań</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Dáliw</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Hút</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Hamal</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Sáwir</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Jawza</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Saratan</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Áset</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Súmbile</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Miyzan</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Aqırap</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Qawıs</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Jeddi</string>
+
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Waqıttı ornatıw</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Loginlerdi basqarıw</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Usınıs etilgen loginlerdi keńeytiw</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Usınıs etilgen loginlerdi qısqartıw</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Usınıs etilgen loginler</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Bul saytqa maǵlıwmatlar qayta jiberilsin be?</string>
+ <string name="mozac_feature_prompt_repost_message">Bul betti jańalaw nátiyjesinde pikir jazıw yamasa tólemdi jiberiw sıyaqlı sóńǵı háreketler qaytalanıwı múmkin.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Maǵlıwmatlardı qayta jiberiw</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Biykarlaw</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Bank kartasın tańlań</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Usınıs etilgen bank kartaların keńeytiw</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Usınıs etilgen bank kartaların qısqartıw</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Bank kartaların basqarıw</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Bul karta qáwipsiz saqlansın ba?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Karta ámel qılıw múddeti jańalansın ba?</string>
+
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Karta nomeri shifrlenedi. Qupıyalıq kodı saqlanbaydı.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Mánzildi tańlań</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Usınıs etilgen mánzillerdi keńeytiriw</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Usınıs etilgen mánzillerdi qısqartıw</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Mánzillerdi basqarıw</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-kab/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-kab/strings.xml
new file mode 100644
index 0000000000..dc9067b13a
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-kab/strings.xml
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">IH</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Sefsex</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Sewḥel asebter-agi seg ulday n tnaka n udiwenni nniḍen</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Sbadu</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Sfeḍ</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Kcem</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Isem n useqdac</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Awal uffir</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save" moz:removedIn="125" tools:ignore="UnusedResources">Ur seklas ara</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2">Mačči tura</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Urǧin sekles</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Mačči tura</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Sekles</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update" moz:removedIn="125" tools:ignore="UnusedResources">Ur leqqem ara</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2">Mačči tura</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Leqqem</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password" moz:removedIn="125" tools:ignore="UnusedResources">Urti n wawal uffir ur ilaq ara ad yili d ilem</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2">Sekcem awal uffir</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause" moz:removedIn="125" tools:ignore="UnusedResources">Ur yezmir ara ad isekles anekcum</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2">Ur sseklas ara awal uffir</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline" moz:removedIn="125" tools:ignore="UnusedResources">Sekles anekcum-agi?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2">Sekles awal uffir?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline" moz:removedIn="125" tools:ignore="UnusedResources">Leqqem anekcum-agi?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2">Leqqem awal uffir?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Rnu isem n useqdac ɣer wawal uffir yettwaskelsen?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Tacreḍt i tmerna n wurti n tira n uḍris</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Fren ini</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Sireg</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Gdel</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">S tidet?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Teffɣeḍ ad teffɣeḍ seg usmel-a? Isefka i teskecmeḍ yezmer ur ttwaseklasen ara</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Qqim</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Ffeɣ</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Fren aggur</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Yen</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Fuṛ</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Meɣ</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Yeb</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Maggu</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Yun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Yul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Ɣuc</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Cta</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Tub</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Wam</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Duj</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Sbadu akud</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins" moz:removedIn="125" tools:ignore="UnusedResources">Sefrek inekcam</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2">Sefrek awalen uffiren</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Sken-d inekcam isumar</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Ffer inekcam isumar</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins" moz:removedIn="125" tools:ignore="UnusedResources">Inekcam yettwasumren</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2">Awalen uffiren yettwakelsen</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">SuƔer awal uffir iǧehden</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Sumer awal uffir iǧehden</string>
+
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Seqdec awan n uεeddi iǧehden: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Ales tuzna n yisefka ɣer usmel-a?</string>
+ <string name="mozac_feature_prompt_repost_message">Asmiren n usebter-a yezmer ad d-yerr tigawin n melmi kan, am tuzna n lexlaṣ neɣ asuffeɣ n uwennit snat tikkal.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Ales tuzna n yisefka</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Sefsex</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card" moz:removedIn="125" tools:ignore="UnusedResources">Fren takarḍa n usmad</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2">Seqdec tkarḍa yettwaskelsen</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Semɣer tikerḍiwin n usmad i d-yettusumren</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Fneẓ tikerḍiwin n usmad i d-yettusumren</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards" moz:removedIn="125" tools:ignore="UnusedResources">Sefrektikarḍiwin n usmad</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2">Sefrek tikarḍiwin</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Asekles n tkarḍa-a s wudem aɣellsan?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Leqqem azemz n keffu n tkarḍa?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body" moz:removedIn="125" tools:ignore="UnusedResources">Uṭṭun n tkarḍa ad yettwawgelhen. Tangalt n tɣellist ur tettwaseklas ara.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Fren tansa</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Snefli tansiwin d-yettwasumren</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Fneẓ tansiwin d-yettwasumren</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2">Fneẓ tansiwin i yettwaskelsen</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Sefrek tansiwin</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Tugna n umiḍan</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Fren asaǧǧăw n unekcum</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Qqen s umidan %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Seqdec %1$s am usaǧǧaw n tuqqna</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[Tuqqna ɣer %1$s s umiḍan %2$s ad yili ddaw <a href="%3$s">Tsertit tabaḍnit</a> d <a href="%4$s">Tewtilin n useqdec</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Kemmel</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Sefsex</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-kk/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-kk/strings.xml
new file mode 100644
index 0000000000..2dc4c617a5
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-kk/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">ОК</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Бас тарту</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Бұл параққа қосымша сұхбаттарды жасауға тыйым салу</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Орнату</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Тазарту</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Кіру</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Пайдаланушы аты</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Пароль</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Сақтамау</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Қазір емес</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Ешқашан сақтамау</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Қазір емес</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Сақтау</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Жаңартпау</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Қазір емес</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Жаңарту</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Пароль өрісі бос болмауы тиіс</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Парольді енгізіңіз</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Логинді сақтау мүмкін емес</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Парольді сақтау мүмкін емес</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Бұл логинді сақтау керек пе?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Парольді сақтау керек пе?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Бұл логинді жаңарту керек пе?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Парольді жаңарту керек пе?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Пайдаланушы атын сақталған парольге қосу керек пе?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Мәтінді енгізу өрісінің белгісі</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Түсті таңдау</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Рұқсат ету</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Тыйым салу</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Сіз сенімдісіз бе?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Осы сайттан кеткіңіз келе ме? Сіз енгізген деректер сақталмауы мүмкін</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Қалу</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Кету</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Айды таңдау</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Қаң</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Ақп</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Нау</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Сәу</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Мам</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Мау</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Шіл</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Там</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Қыр</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Қаз</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Қар</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Жел</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Уақытты орнату</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Логиндерді басқару</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Парольдерді басқару</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Ұсынылған логиндерді жазық қылу</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Сақталған парольдерді жазық қылу</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Ұсынылған логиндерді қайыру</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Сақталған парольдерді бүктеу</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Ұсынылған логиндер</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Сақталған парольдер</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Мықты парольді ұсыну</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Мықты парольді ұсыну</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Мықты парольді қолдану: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Осы сайтқа деректерді қайта жіберу керек пе?</string>
+ <string name="mozac_feature_prompt_repost_message">Бұл парақты жаңарту төлемдерді жіберу немесе пікірді екі рет жіберу сияқты соңғы әрекеттерді қайталауы мүмкін.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Деректерді қайта жіберу</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Бас тарту</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Несиелік картаны таңдау</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Сақталған картаны пайдалану</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Ұсынылған несиелік карталарды жаю</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Сақталған карталарды жазық қылу</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Ұсынылған несиелік карталарды жию</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Сақталған карталарды бүктеу</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Несиелік карталарды басқару</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Карталарды басқару</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Бұл картаны қауіпсіз сақтау керек пе?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Картаның жарамдылық мерзімін жаңарту керек пе?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Карта нөмірі шифрленеді. Қауіпсіздік коды сақталмайды.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%sкартаңыздың нөмірін шифрлейді. Қауіпсіздік кодыңыз сақталмайтын болады.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Адресті таңдау</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Ұсынылған адрестерді жазық қылу</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Сақталған адрестерді жазық қылу</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Ұсынылған адрестерді бүктеу</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Сақталған адрестерді бүктеу</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Адрестерді басқару</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Тіркелгі суреті</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Жүйеге кіру провайдерін таңдау</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">%1$s тіркелгісімен кіру</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Жүйеге кіру провайдері ретінде %1$s қолдану</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ %2$s тіркелгісімен %1$s ішіне кіру олардың <a href="%3$s">Жекелік саясаты</a> және <a href="%4$s">Қолдану шарттарымен</a> реттеледі]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Жалғастыру</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Болдырмау</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-kmr/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-kmr/strings.xml
new file mode 100644
index 0000000000..f8ee9e3735
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-kmr/strings.xml
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Baş e</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Betal bike</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Nehêle ku ev malper diyalogên ekstra çêbike</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Saz bike</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Paqij bike</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Têkeve</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Navê bikarhêner</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Pêborîn</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save" moz:removedIn="125" tools:ignore="UnusedResources">Tomar neke</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2">Ne niha</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Qet tomar neke</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Ne niha</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Tomar bike</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update" moz:removedIn="125" tools:ignore="UnusedResources">Nûve neke</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2">Ne niha</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Nûve bike</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password" moz:removedIn="125" tools:ignore="UnusedResources">Divê qada pêborînê vala nemîne</string>
+
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2">Şîfreyekê binivîse</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause" moz:removedIn="125" tools:ignore="UnusedResources">Hesab nehate tomarkirin</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2">Şîfre nayê tomarkirin</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline" moz:removedIn="125" tools:ignore="UnusedResources">Vî hesabî tomar bike?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2">Şîfreyê tomar bike?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline" moz:removedIn="125" tools:ignore="UnusedResources">Vî hesabî nûve bike?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2">Şîfreyê venû bike?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Navê bikarhêner tevlî pêborîna tomarkirî bike?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Etîketa qada têketina metinê</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Rengekî hilbijêre</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Destûrê bide</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Red bike</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Bi rastî jî?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Tu dixwazî ji vê malperê derkevî? Dibe ku daneyên te têxistine neyên tomarkirin</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Lê bimîne</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Derkeve</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Mehekê hilbijêre</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Rêb</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Sib</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Ada</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Nîs</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Gul</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Hez</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Tîr</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Teb</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Îlo</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Cot</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Mij</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Ber</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Demê eyar bike</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins" moz:removedIn="125" tools:ignore="UnusedResources">Hesaban birêve bibe</string>
+
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2">Şîfreyan bi krê ve bibe</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Hesabên pêşniyarkirî fireh bike</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2">Şîfreyên tomarkirî fireh bike</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Hesabên pêşniyarkirî teng bike</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2">Şîfreyên tomarkirî teng bike</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins" moz:removedIn="125" tools:ignore="UnusedResources">Hesabên pêşniyarkirî</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2">Şîdreyên tomarkirî</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Şîfreyên xurt pêşniyar bike</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Daneyan dîsa ji vê malperê re bişîne?</string>
+ <string name="mozac_feature_prompt_repost_message">Nûkirina vê rûpelê, dibe ku kirinên vê dawiyê ducar bike. (wekî; şandina pereyan an jî şandina şîroveyekê)</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Daneyan dîsa bişîne</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Betal bike</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card" moz:removedIn="125" tools:ignore="UnusedResources">Karta krediyê hilbijêre</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Kartên krediyê yên pêşniyarkirî fireh bike</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Kartên krediyê yên pêşniyarkirî teng bike</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards" moz:removedIn="125" tools:ignore="UnusedResources">Kartên krediyê bi rê ve bibe</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Vê kardê bi awayekî ewle hilînî?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Dîroka dawî ya kardê venû bikin?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body" moz:removedIn="125" tools:ignore="UnusedResources">Hejmara kardê dê bê şîfrekirin. Koda ewlekariyê dê neyê hilanîn.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Navnîşanê hilbijêre</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Navnîşanên pêşniyarkirî berfireh bike</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Hesabên pêşniyarkirî teng bike</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Navnîşanan bi rê ve bibe</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Wêneyê hesabî</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Peydakera têketinê hilbijêre</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Bi hesabekî %1$s têkevê</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">%1$sê wekî peydakera têketinê bi kar bîne</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[Têketina %1$s bi hesabekî %2$s ve girêdayî <a href="%3$s">Siyaseta nepenîtiyê</a> û <a href="%4$s">Şertên karûbarê wan e. </a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Bidomîne</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Betal bike</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-kn/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-kn/strings.xml
new file mode 100644
index 0000000000..57aab051b4
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-kn/strings.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">ರದ್ದು ಮಾಡು</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">ಹೆಚ್ಚುವರಿ ಸಂವಾದ ಚೌಕಗಳನ್ನು ರಚಿಸದಂತೆ ಈ ಪುಟವನ್ನು ತಡೆ</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">ನಿಶ್ಚಯಿಸು</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">ಅಳಿಸು</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">ಸೈನ್ ಇನ್</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">ಬಳಕೆದಾರನ ಹೆಸರು</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">ಗುಪ್ತಪದ</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">ಉಳಿಸಬೇಡ</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">ಎಂದಿಗೂ ಉಳಿಸಬೇಡ</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">ಉಳಿಸು</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">ಪರಿಷ್ಕರಿಸಬೇಡ</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">ಪರಿಷ್ಕರಿಸು</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">ಪಾಸ್ವರ್ಡ್ ಕ್ಷೇತ್ರವು ಖಾಲಿಯಾಗಿರಬಾರದು</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">ಚಿತ್ರವನ್ನು ಉಳಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">ಈ ಲಾಗಿನ್ ಅನ್ನು ಉಳಿಸುವುದೇ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">ಈ ಲಾಗಿನ್ ಅನ್ನು ನವೀಕರಿಸುವುದೇ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">ಉಳಿಸಿದ ಪಾಸ್‌ವರ್ಡ್‌ಗೆ ಬಳಕೆದಾರಹೆಸರನ್ನು ಸೇರಿಸುವುದೇ?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">ಪಠ್ಯ ಇನ್ಪುಟ್ ಕ್ಷೇತ್ರವನ್ನು ನಮೂದಿಸಲು ಲೇಬಲ್</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">ಒಂದು ಬಣ್ಣವನ್ನು ಆರಿಸಿ</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">ಅನುಮತಿಸು</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">ನಿರಾಕರಿಸು</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">ನೀವು ಖಚಿತವೆ?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">ನೀವು ಈ ಸೈಟ್ ಅನ್ನು ಬಿಡಲು ಬಯಸುವಿರಾ? ನೀವು ನಮೂದಿಸಿದ ಡೇಟಾವನ್ನು ಉಳಿಸಲಾಗುವುದಿಲ್ಲ</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">ಉಳಿಯಿರಿ</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">ಹೊರನೆಡೆ</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">ತಿಂಗಳೊಂದನ್ನು ಆರಿಸಿ</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">ಜನವರಿ</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">ಫೆಬ್ರವರಿ</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">ಮಾರ್ಚ್</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">ಎಪ್ರಿಲ್</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">ಮೇ</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">ಜೂನ್</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">ಜುಲೈ</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">ಆಗಸ್ಟ್</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">ಸೆಪ್ಟೆಂಬರ್</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">ಅಕ್ಟೋಬರ್</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">ನವೆಂಬರ್</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">ಡಿಸೆಂಬರ್</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-ko/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ko/strings.xml
new file mode 100644
index 0000000000..69b227b800
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ko/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">확인</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">취소</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">이 페이지에서 추가 대화 상자 생성 막기</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">설정</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">지우기</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">로그인</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">사용자 이름</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">비밀번호</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">저장 안 함</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">나중에</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">저장 안 함</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">나중에</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">저장</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">업데이트 안 함</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">나중에</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">업데이트</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">비밀번호 필드는 비워 둘 수 없습니다</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">비밀번호 입력</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">로그인을 저장할 수 없음</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">비밀번호를 저장할 수 없음</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">이 로그인을 저장하시겠습니까?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">비밀번호를 저장하시겠습니까?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">이 로그인을 업데이트하시겠습니까?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">비밀번호를 업데이트하시겠습니까?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">저장된 비밀번호에 사용자 이름을 추가하시겠습니까?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">텍스트 입력을 위한 라벨</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">색상 선택</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">허용</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">거부</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">계속하시겠습니까?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">이 사이트를 나가시겠습니까? 입력한 데이터가 저장되지 않을 수 있습니다</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">유지</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">나가기</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">월 선택</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">1월</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">2월</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">3월</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">4월</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">5월</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">6월</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">7월</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">8월</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">9월</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">10월</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">11월</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">12월</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">시간 설정</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">로그인 관리</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">비밀번호 관리</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">제안된 로그인 펼치기</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">저장된 비밀번호 펼치기</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">제안된 로그인 접기</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">저장된 비밀번호 접기</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">제안된 로그인</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">저장된 비밀번호</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">강력한 비밀번호 제안</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">강력한 비밀번호 제안</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">강력한 비밀번호 사용: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">이 사이트로 데이터를 다시 보내시겠습니까?</string>
+ <string name="mozac_feature_prompt_repost_message">이 페이지를 새로 고침하면 결제를 두 번 보내거나 댓글을 두 번 게시하는 등 최근 작업이 중복될 수 있습니다.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">데이터 다시 보내기</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">취소</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">신용 카드 선택</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">저장된 카드 사용</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">제안된 신용 카드 펼치기</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">저장된 비밀번호 펼치기</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">제안된 신용 카드 접기</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">저장된 비밀번호 접기</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">신용 카드 관리</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">카드 관리</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">이 카드를 안전하게 저장하시겠습니까?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">카드 유효 기간을 업데이트하시겠습니까?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">카드 번호는 암호화됩니다. 보안 코드는 저장되지 않습니다.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s는 카드 번호를 암호화합니다. 보안 코드는 저장되지 않습니다.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">주소 선택</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">제안된 주소 펼치기</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">저장된 주소 펼치기</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">제안된 주소 접기</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">저장된 주소 접기</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">주소 관리</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">계정 사진</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">로그인 공급자 선택</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">%1$s 계정으로 로그인</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">로그인 공급자로 %1$s 사용</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ %2$s 계정으로 %1$s에 로그인하면 해당 계정의 <a href="%3$s">개인정보처리방침</a> 및 <a href="%4$s">서비스 약관</a>이 적용됩니다.]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">계속</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">취소</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-lij/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-lij/strings.xml
new file mode 100644
index 0000000000..7b1c8bb127
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-lij/strings.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Va ben</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Anulla</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">No fâ arvî atri barcoin de dialogo a sta pagina</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Inpòsta</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Scancella</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Intra</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Nomme utente</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Poula segreta</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">No sarvâ</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Sarva</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">No agiornâ</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Agiorna</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Ti devi scrive \'na poula segreta</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">No pòsso sarvâ l\'acesso</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Sarvâ st\'acesso?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Agiornâ st\'acesso?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Azonze sto nomme utente a-e poule segrete sarvæ?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Etichetta asociâ a un canpo de testo</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Çerni un cô</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Permetti</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">No permette</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">T\'ê seguo?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Ti veu anâ via da-o scito? I dæti inserii porievan no ese sarvæ</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Stanni chi</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Vanni via</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Çerni un meize</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Zen</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Fre</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Arv</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Maz</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Zug</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Lug</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Agó</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Set</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Òtô</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dex</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-lo/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-lo/strings.xml
new file mode 100644
index 0000000000..69dc7e9f93
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-lo/strings.xml
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">ຕົກ​ລົງ</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">ຍົກເລີກ</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">ປ້ອງກັນຫນ້ານີ້ບໍ່ໃຫ້ສະແດງໄດອະລັອກເພີ່ມອີກ</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">ຕັ້ງຄ່າ</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">ລົບລ້າງ</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">ເຂົ້າສູ່ລະບົບ</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">ຊື່ຜູ້ໃຊ້</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">ລະຫັດຜ່ານ</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">ບໍ່ບັນທຶກ</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">ບໍ່ຕ້ອງບັນທຶກ</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">ບໍ່​ແມ່ນ​ຕອນ​ນີ້</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">ບັນທຶກ</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">ບໍ່ຕ້ອງອັບເດດ</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">ອັບເດດ</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">ປ່ອງປ້ອນລະຫັດຜ່ານຈະຕ້ອງບໍ່ຫວ່າງເປົ່າ</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">ບໍ່ສາມາດບັກທຶກການເຂົ້າສູ່ລະບົບໄດ້</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">ບັນທຶກການເຂົ້າສູ່ລະບົບນີ້ໄວ້ບໍ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">ອັບເດດການເຂົ້າສູ່ລະບົບນີ້ບໍ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">ເພີ່ມຊື່ຜູ້ໃຊ້ເພື່ອບັນທຶກລະຫັດຜ່ານໄວ້ບໍ?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">ປ້າຍກຳກັບສຳລັບການປ້ອນຂໍ້ມູນໃສ່ໃນຊ່ອງຂໍ້ຄວາມ</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">ເລືອກສີ</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">ອະນຸຍາດ</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">ປະຕິເສດ</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">ທ່ານແນ່ໃຈແລ້ວບໍ່?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">ທ່ານຕ້ອງການອອກຈາກເວັບໄຊທນີ້ບໍ? ຂໍ້ມູນທີ່ທ່ານໄດ້ປ້ອນໃສ່ອາດຈະບໍ່ໄດ້ຮັບການບັນທຶກ</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">ຢູ່</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">ອອກ</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">ເລືອກເດືອນ</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">ມັງກອນ</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">​ກຸມພາ</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">​ມີນາ</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">​ເມສາ</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">ພຶດສະພາ</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">​ມິຖຸນາ</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">ກໍລະ​ກົດ</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">ສິງຫາ</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">ກັນຍາ</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">ຕຸລາ</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">ພະຈິກ</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">ທັນວາ</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">ກໍານົດເວລາ</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">ຈັດການການເຂົ້າສູ່ລະບົບ</string>
+
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">ຂະຫຍາຍການເຂົ້າສູ່ລະບົບທີ່ແນະນຳ</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">ຍຸບການເຂົ້າສູ່ລະບົບທີ່ແນະນຳ</string>
+
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">ການລັອກອິນທີ່ໄດ້ຮັບການແນະນຳ</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">ສົ່ງຂໍ້ມູນຄືນສູ່ເວັບໄຊທນີ້ອີກບໍ?</string>
+ <string name="mozac_feature_prompt_repost_message">ການລີເຟສຫນ້ານີ້ອາດຈະເຮັດໃຫ້ການກະທຳກ່ອນຫນ້ານີ້ຊໍ້າກັນເຊັ່ນວ່າ: ການສົ່ງລາຍການຈ່າຍເງິນ ຫລື ການໂພສຄອມເມັ້ນ 2 ຄັ້ງ.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">ສົ່ງຂໍ້ມູນຄືນໃຫມ່</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">ຍົກເລີກ</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">ເລືອກບັດເຄດິດ</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">ຂະຫຍາຍການແນະນຳຂອງບັດເຄດິດ</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">ຍຸບການແນະນຳຂອງບັດເຄດິດ</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">ຈັດການບັດເຄດິດ</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">ຕ້ອງການບັນທຶກບັດນີ້ຢ່າງປອດໄພຫລືບໍ?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">ຕ້ອງການອັບເດດວັນໝົດອາຍຸຂອງບັດບໍ?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">ໝາຍເລກບັດຈະຖືກເຂົ້າລະຫັດ. ລະຫັດຄວາມປອດໄພຈະບໍ່ຖືກບັນທຶກໄວ້.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">ເລືອກທີ່ຢູ່</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">ຂະຫຍາຍທີ່ຢູ່ທີ່ແນະນຳ</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">ຫຍໍ້ທີ່ຢູ່ທີ່ແນະນຳ</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">ຈັດການທີ່ຢູ່</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">ຮູບບັນຊີ</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">ເລືອກຜູ້ໃຫ້ບໍລິການເຂົ້າສູ່ລະບົບ</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">ເຂົ້າສູ່ລະບົບດ້ວຍບັນຊີ %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">ໃຊ້ %1$s ເປັນຜູ້ໃຫ້ບໍລິການເຂົ້າສູ່ລະບົບ</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ການເຂົ້າສູ່ລະບົບ %1$s ດ້ວຍບັນຊີ %2$s ແມ່ນຢູ່ພາຍໃຕ້ <a href="%3$s">ນະໂຍບາຍຄວາມເປັນສ່ວນຕົວ</a> ແລະ <a href="%4$s">ເງື່ອນໄຂການໃຫ້ບໍລິການ </a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">ສືບຕໍ່</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">ຍົກເລີກ</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-lt/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-lt/strings.xml
new file mode 100644
index 0000000000..dfba6170a3
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-lt/strings.xml
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Gerai</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Atsisakyti</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Nebeleisti šiam tinklalapiui kurti naujų dialogo langų</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Nustatyti</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Išvalyti</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Prisijunkite</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Naudotojo vardas</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Slaptažodis</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Neįsiminti</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Niekada neįrašyti</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Ne dabar</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Įsiminti</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Neatnaujinti</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Atnaujinti</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Slaptažodžio laukas negali būti tuščias</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Nepavyko įrašyti prisijungimo</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Įrašyti šį prisijungimą?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Atnaujinti šį prisijungimą?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Pridėti naudotojo vardą prie įrašyto slaptažodžio?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Teksto įvesties lauko pavadinimas</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Pasirinkite spalvą</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Leisti</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Drausti</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Ar tikrai to norite?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Ar tikrai norite užverti šią svetainę? Jūsų įvesti duomenys gali būti neįrašyti</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Likti</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Išeiti</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Nurodykite mėnesį</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Sau</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Vas</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Kov</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Bal</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Geg</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Bir</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Lie</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Rgp</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Rgs</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Spa</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Lap</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Grd</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Nustatyti laiką</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Tvarkyti prisijungimus</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Išskleisti siūlomus prisijungimus</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Suskleisti siūlomus prisijungimus</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Siūlomi prisijungimai</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Dar kartą siųsti duomenis į šią svetainę?</string>
+ <string name="mozac_feature_prompt_repost_message">Šio tinklalapio įkėlimas iš naujo gali pakartoti paskiausius veiksmus, tokius kaip mokėjimo nusiuntimas ar komentaro parašymas.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Persiųsti duomenis</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Atsisakyti</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Pasirinkite mokėjimo kortelę</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Išskleisti siūlomas mokėjimo korteles</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Suskleisti siūlomas mokėjimo korteles</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Tvarkyti mokėjimo korteles</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Saugiai išsaugoti šią kortelę?</string>
+
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Atnaujinti kortelės galiojimo datą?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Kortelės numeris bus užšifruotas. Saugos kodas nebus išsaugotas.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Pasirinkite adresą</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Išskleisti siūlomus adresus</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Sutraukti siūlomus adresus</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Tvarkyti adresus</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-mix/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-mix/strings.xml
new file mode 100644
index 0000000000..b81c10ce38
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-mix/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Vaá</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Kunchatu</string>
+
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Stòo</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Tu un seè</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Chika vaá</string>
+
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Yoo u un</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-ml/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ml/strings.xml
new file mode 100644
index 0000000000..3f1aae6abc
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ml/strings.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">ശരി</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">റദ്ദാക്കുക</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">അധിക ഡയലോഗുകൾ സൃഷ്ടിക്കുന്നതിൽ നിന്ന് ഈ പേജിനെ തടയുക</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">ക്രമീകരിക്കുക</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">മായ്ക്കുക</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">പ്രവേശിക്കുക</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">ഉപയോക്തൃനാമം</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">രഹസ്യവാക്ക്</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">സൂക്ഷിക്കേണ്ട</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">സൂക്ഷിക്കുക</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">പുതുക്കേണ്ടതില്ല</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">പുതുക്കുക</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">രഹസ്യവാക്ക് ശൂന്യമായിരിക്കരുത്</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">ലോഗിൻ സൂക്ഷിക്കുവാനായില്ല</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">ഈ ലോഗിൻ സംരക്ഷിക്കണോ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">ഈ ലോഗിൻ പുതുക്കണോ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">സംരക്ഷിച്ച രഹസ്യവാക്കിലേക്ക് ഉപയോക്തൃനാമം ചേർക്കണോ?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">ഒരു വാചക ഇൻപുട്ട് ഫീൽഡ് നൽകുന്നതിനുള്ള ലേബൽ</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">ഒരു നിറം തിരഞ്ഞെടുക്കുക</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">അനുവദിക്കുക</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">നിരസിക്കുക</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">താങ്കൾക്ക് ഉറപ്പാണോ?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">നിങ്ങൾക്ക് ഈ സൈറ്റ് വിടണോ? നിങ്ങൾ നൽകിയ ഡാറ്റ സംരക്ഷിച്ചേക്കില്ല</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">തുടരുക</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">വിടുക</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">ഒരു മാസം തിരഞ്ഞെടുക്കുക</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">ജനു</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">ഫെബ്രു</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">മാർ</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">ഏപ്രി</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">മെയ്</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">ജൂൺ</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">ജൂലൈ</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">ഓഗ</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">സെപ്തം</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">ഒക്ടോ</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">നവം</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">ഡിസം</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-mr/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-mr/strings.xml
new file mode 100644
index 0000000000..984e1ad59f
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-mr/strings.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">ठीक आहे</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">रद्द करा</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">या पृष्ठास अतिरिक्त संवाद तयार करण्यापासून प्रतिबंधित करा</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">निश्चित करा</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">पुसा</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">साइन इन करा</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">वापरकर्ता नाव</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">पासवर्ड</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">जतन करू नका</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">कधीही जतन करू नका</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">जतन करा</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">अद्यावत करू नका</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">अद्ययावत करा</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">पासवर्ड क्षेत्र रिक्त नसावे</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">लॉगिन जतन करण्यात अक्षम</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">हे लॉगिन जतन करायचे?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">हे लॉगिन अद्यतन करायचे?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">जतन केलेल्या संकेतशब्दामध्ये वापरकर्तानाव जोडायचे?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">मजकूर इनपुट फील्ड प्रविष्ट करण्यासाठी लेबल</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">एक रंग निवडा</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">परवानगी द्या</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">नकारा</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">आपणास खात्री आहे का?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">आपण ही साइट सोडू इच्छिता? आपण प्रविष्ट केलेला डेटा कदाचित जतन केला जाणार नाही</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">थांबा</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">सोडा</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">महिना निवडा</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">जाने</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">फेब्रु</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">मार्च</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">एप्रिल</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">मे</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">जून</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">जुलै</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">ऑगस्ट</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">सप्टें</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">ऑक्टो</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">नोव्हें</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">डिसें</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">लॉगिन व्यवस्थापित करा</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">सूचित लॉगिन विस्तृत करा</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">सूचित लॉगिन संकुचित करा</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">सूचित लॉगिन</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">या साइटवर डेटा पुन्हा पाठवायचा?</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">डेटा पुन्हा पाठवा</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">रद्द करा</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-my/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-my/strings.xml
new file mode 100644
index 0000000000..bc07bc46a3
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-my/strings.xml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">အိုကေ</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">ပယ်​ဖျက်ပါ</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">ဤစာမျက်နှာအား နောက်ထပ် ဒိုင်ယာလော့ဂ်များ ဖန်တီးခြင်းမှ ပိတ်ထားမည်</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">သတ်မှတ်ရန်</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">ရှင်းလင်းပါ</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">၀င်ပါ</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">သုံးစွဲသူ အမည်</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">စကားဝှက်</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">မသိမ်းပါနဲ့</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">ဘယ်တော့မျှ မသိမ်းပါ</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">သိမ်းပါ</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">မပြင်ဆင် ပါနှင့်</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">ပြင်ဆင်ပါ</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">လျှို့ဝှက်နံပါတ်ဖြည့်စွက်ပေးပါ</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">လော့အင်ကိုမသိမ်းဆည်းနိုင်ပါ</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">ဤ ဝင်ရောက်မှု ကို သိမ်းမည်လား။</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">ဤ ဝင်ရောက်မှု ကို ပြင်ဆင်မည်လား?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">အခု သုံးဆွဲသူအား သိမ်းထားမည်လား?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">စာသားထည့်သွင်းရန်ပြထားသောလမ်းညွှန်စာသား</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">အရောင်ရွေးပါ</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">ခွင့်ပြုပါ</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">တားမြစ်ပါ</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">သင် သေချာ သလား?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">ဒီ ဆိုက် မှ ထွက်လို သလား? သင် ထည့်သွင်းသော အချက်အလက်များ မသိမ်းရသေးပါ။</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">နေမည်</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">ထွက်ခွာမည်</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">လ အားရွေးပါ</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">ဇန်နဝါရီ</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">ဖေဖော်ဝါရီ</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">မတ်</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">ဧပြီ</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">မေ</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">ဇွန်</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">ဇူလိုင်</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">သြဂုတ်</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">စက်တင်ဘာ</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">အောက်တိုဘာ</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">နိုဝင်ဘာ</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">ဒီဇင်ဘာ</string>
+
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">လော့အင် များ စီမံပါ</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">အကြံပြု လော့အင် များ ကို ဖြန့်ချပါ</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">အကြံပြု လော့အင်များ ကို ပြန်သိမ်းပါ</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">အကြံပြုထားသော လော့အင်များ</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">ဤ ဆိုက် သို့ အချက်အလက်များ ပြန်ပို့မည်လား။</string>
+ <string name="mozac_feature_prompt_repost_message">ဤ စာမျက်နှာအား ပြန်လည်စတင်ခြင်းသည် ငွေပေးချေခြင်း သို့မဟုတ် မှက်ချက်များတင်ခြင်းကဲ့သို့သော လက်တလောလုပ်ဆောင်ချက်များအား နှစ်ကြိမ်ဖြစ်စေနိုင်သည်။</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">အချက်အလက် ပြန်ပို့ ရန်</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">ပယ်​ဖျက်ပါ</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">အကြွေးဝယ်ကဒ် ကိုရွေးပါ။</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">အကြုံပြုထားသော အကြွေးဝယ်ကတ်များကို ဖြန့်ချပါ</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">အကြုံပြုထားသော အကြွေးဝယ်ကတ်များကို ပြန်သိမ်းပါ</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">အကြွေးဝယ်ကတ်များကို စီမံပါ</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-nb-rNO/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-nb-rNO/strings.xml
new file mode 100644
index 0000000000..a35beb81bf
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-nb-rNO/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Avbryt</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Forhindre dette nettstedet fra å lage flere dialoger</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Angi</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Tøm</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Logg inn</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Brukernavn</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Passord</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Ikke lagre</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Ikke nå</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Lagre aldri</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Ikke nå</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Lagre</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Ikke oppdater</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Ikke nå</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Oppdater</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Passordfeltet kan ikke stå tomt</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Skriv inn et passord</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Klarte ikke å lagre innloggingen</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Kan ikke lagre passordet</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Lagre denne innloggingen?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Lagre passord?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Vil du oppdatere denne innloggingen?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Oppdatere passord?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Vil du legge til brukernavn til lagret passord?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Etikett for utfylling av et skrivefelt</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Velg en farge</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Tillat</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Avvis</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Er du sikker?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Vil du forlate dette nettstedet? Data du har lagt inn, blir kanskje ikke lagret</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Bli</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Forlat</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Velg en måned</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Jan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Apr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Mai</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Jun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Jul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Aug</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sep</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Okt</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Des</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Angi tid</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Behandle innlogginger</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Behandle passord</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Utvid foreslåtte innlogginger</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Utvid lagrede passord</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Slå sammen foreslåtte innlogginger</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Skjul lagrede passord</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Foreslåtte innlogginger</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Lagrede passord</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Foreslå sterkt passord</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Foreslå sterkt passord</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Bruk sterkt passord: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Send data på nytt til dette nettstedet?</string>
+ <string name="mozac_feature_prompt_repost_message">Oppdatering av denne siden kan duplisere nylige handlinger, for eksempel å sende en betaling eller legge igjen en kommentar to ganger.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Send data på nytt</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Avbryt</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Velg betalingskort</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Bruk lagret kort</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Utvid foreslåtte betalingskort</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Utvid lagrede kort</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Slå sammen foreslåtte betalingskort</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Skjul lagrede kort</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Behandle betalingskort</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Behandle kort</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Lagre dette kortet trygt?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Oppdatere kortets utløpsdato?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Kortnummer vil bli kryptert. Sikkerhetskoden blir ikke lagret.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s krypterer kortnummeret ditt. Sikkerhetskoden din blir ikke lagret.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Velg adresse</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Utvid foreslåtte adresser</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Utvid lagrede adresser</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Slå sammen foreslåtte adresser</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Skjul lagrede adresser</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Behandle adresser</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Kontobilde</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Velg en innloggingsleverandør</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Logg på med en %1$s-konto</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Bruk %1$s som innloggingsleverandør</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ Å logge på %1$s med en %2$s-konto er underlagt deres <a href="%3$s">personvernbestemmelser</a> og <a href="%4$s">tjenestevilkår</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Fortsett</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Avbryt</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-ne-rNP/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ne-rNP/strings.xml
new file mode 100644
index 0000000000..b47563813a
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ne-rNP/strings.xml
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">टीक छ</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">रद्द गर्नुहोस्</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">यस पृष्ठलाई थप संवादहरू सिर्जना हुनबाट रोक्नुहोस्</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">सेट गर्नुहोस्</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">खाली गर्नुहोस्</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">साइन इन</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">प्रयोगकर्ताको नाम</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">पासवर्ड</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">सेभ नगर्नुहोस्</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">कहिल्यै सेभ नगर्नुहोस्</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">सेभ</string>
+
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">अद्यावधिक नगर्नुहोस्</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">अद्यावधिक</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">पासवर्ड लेख्ने ठाउँ खाली राख्न हुँदैन</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">लगइन सेभ गर्न सकिएन</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">यो लगइन सेभ गर्न चाहानुहुन्छ ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">यो लगइन अद्यावधिक गर्न चाहानुहुन्छ ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">सेभ गरिएको पासवर्डमा प्रयोगकर्ता नाम थप्न चाहानुहुन्छ ?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">अक्षर आगत क्षेत्र प्रविष्ट गर्नको लागि लेबल</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">एउटा रङ्ग छान्नुहोस्</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">अनुमति दिनुहोस्</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">अस्वीकार गर्नुहोस्</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">के तपाईँ निश्चित हुनुहुन्छ ?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">के तपाईं यो साइट छोड्न चाहनुहुन्छ? तपाईंले प्रविष्ट गर्नुभएको डाटा सेभ नहुन पनि सक्छ</string>
+
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">यहि रहनुहोस्</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">छोड्नुहोस्</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">कुनै एउटा महिना छान्नुहोस्</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">जनवरी</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">फेब्रुअरी</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">मार्च</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">अप्रिल</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">मे</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">जुन</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">जुलाई</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">अगस्ट</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">सेप्टेम्बर</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">अक्टोबर</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">नोभेम्बर</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">डिसेम्बर</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">लगइनहरु प्रबन्ध गर्नुहोस्</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">सुझाब गरिएका लगइनहरू विस्तार गर्नुहोस्</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">सुझाब गरिएका लगइनहरू संक्षिप्त गर्नुहोस्</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">सुझाब गरिएका लगइनहरु</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">यस साइटमा डाटा पुन: पठाउन चाहानुहुन्छ?</string>
+ <string name="mozac_feature_prompt_repost_message">यो पृष्ठ ताजा गर्दा अहिलेका कार्यहरू नक्कल हुन सक्छ, जस्तै भुक्तानी पठाउने वा दुई पटक टिप्पणी पोष्ट गर्ने।</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">डाटा पुन: पठाउनुहोस्</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">रद्द गर्नुहोस्</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">क्रेडिट कार्ड छान्नुहोस्</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">सुझाव गरिएका क्रेडिट कार्डहरू विस्तार गर्नुहोस्</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">सुझाव गरिएका क्रेडिट कार्डहरू संक्षिप्त गर्नुहोस्</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings -->
+ <string name="mozac_feature_prompts_manage_credit_cards">क्रेडिट कार्डहरू ब्यवस्थापन गर्नुहोस्</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-nl/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-nl/strings.xml
new file mode 100644
index 0000000000..8f4e475773
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-nl/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Annuleren</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Voorkomen dat deze pagina extra dialoogvensters maakt</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Instellen</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Wissen</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Aanmelden</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Gebruikersnaam</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Wachtwoord</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Niet opslaan</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Niet nu</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Nooit opslaan</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Niet nu</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Opslaan</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Niet bijwerken</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Niet nu</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Bijwerken</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Wachtwoordveld mag niet leeg zijn</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Vul een wachtwoord in</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Kan aanmelding niet opslaan</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Kan wachtwoord niet opslaan</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Deze aanmelding opslaan?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Wachtwoord opslaan?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Deze aanmelding bijwerken?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Wachtwoord bijwerken?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Gebruikersnaam aan opgeslagen wachtwoord toevoegen?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Label voor het invullen van een tekstinvoerveld</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Kies een kleur</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Toestaan</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Weigeren</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Weet u het zeker?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Wilt u deze website verlaten? Ingevoerde gegevens worden mogelijk niet opgeslagen</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Blijven</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Verlaten</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Kies een maand</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">jan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">mrt</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">apr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">mei</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">jun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">jul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">aug</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">sep</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">okt</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">dec</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Tijd instellen</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Aanmeldingen beheren</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Wachtwoorden beheren</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Voorgestelde aanmeldingen uitvouwen</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Opgeslagen wachtwoorden uitvouwen</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Voorgestelde aanmeldingen inklappen</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Opgeslagen wachtwoorden inklappen</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Voorgestelde aanmeldingen</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Opgeslagen wachtwoorden</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Sterk wachtwoord voorstellen</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Sterk wachtwoord voorstellen</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Sterk wachtwoord gebruiken: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Gegevens opnieuw naar deze website verzenden?</string>
+ <string name="mozac_feature_prompt_repost_message">Het opnieuw laden van deze pagina kan recente acties dupliceren, zoals het verzenden van een betaling of het tweemaal plaatsen van een bericht.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Gegevens opnieuw verzenden</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Annuleren</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Selecteer creditcard</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Opgeslagen kaart gebruiken</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Voorgestelde creditcards uitbreiden</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Opgeslagen kaarten uitvouwen</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Voorgestelde creditcards inklappen</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Opgeslagen kaarten inklappen</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Creditcards beheren</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Kaarten beheren</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Deze kaart veilig opslaan?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Vervaldatum kaart bijwerken?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Het kaartnummer wordt versleuteld. De beveiligingscode wordt niet opgeslagen.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s versleutelt uw kaartnummer. Uw beveiligingscode wordt niet opgeslagen.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Adres selecteren</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Voorgestelde adressen uitvouwen</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Opgeslagen adressen uitvouwen</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Voorgestelde adressen inklappen</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Opgeslagen adressen inklappen</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Adressen beheren</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Accountafbeelding</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Kies een aanmeldprovider</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Aanmelden met een %1$s-account</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">%1$s als aanmeldprovider gebruiken</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[Aanmelding bij %1$s met een %2$s-account valt onder hun <a href="%3$s">Privacybeleid</a> en <a href="%4$s">Servicevoorwaarden</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Doorgaan</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Annuleren</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-nn-rNO/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-nn-rNO/strings.xml
new file mode 100644
index 0000000000..6266243205
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-nn-rNO/strings.xml
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Avbryt</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Hindre denne nettsaden frå å lage fleire dialogar</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Spesifiser</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Tøm</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Logg inn</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Brukarnamn</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Passord</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save" moz:removedIn="125" tools:ignore="UnusedResources">Ikkje lagre</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2">Ikkje no</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Lagre aldri</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Ikkje no</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Lagre</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update" moz:removedIn="125" tools:ignore="UnusedResources">Ikkje oppdater</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2">Ikkje no</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Oppdater</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password" moz:removedIn="125" tools:ignore="UnusedResources">Passordfeltet kan ikkje stå tomt</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2">Skriv inn passord</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause" moz:removedIn="125" tools:ignore="UnusedResources">Klarte ikkje å lagre innlogginga</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline" moz:removedIn="125" tools:ignore="UnusedResources">Lagre denne innlogginga?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2">Lagre passord?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline" moz:removedIn="125" tools:ignore="UnusedResources">Vil du oppdatere denne innlogginga?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2">Oppdatere passord?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Leggje brukarnamn til lagra passord?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Etikett for utfylling av eit skrivefelt</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Vel ein farge</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Tillat</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Avvis</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Er du sikker?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Vil du forlate denne nettstaden Data du har lagt inn, vert kanskje ikkje lagra</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Bli</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Forlat</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Vel ein månad</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Jan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Apr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Mai</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Jun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Jul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Aug</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sep</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Okt</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Des</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Oppgi tid</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins" moz:removedIn="125" tools:ignore="UnusedResources">Handsam innloggingar</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2">Handsam passord</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Utvid føreslåtte innloggingar</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2">Utvid lagra passord</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Slå saman føreslåtte innloggingar</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins" moz:removedIn="125" tools:ignore="UnusedResources">Føreslåtte innloggingar</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2">Lagra passord</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Føreslå sterkt passord</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Føreslå sterkt passord</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Bruk sterkt passord: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Sende data på nytt til denne nettstaden?</string>
+ <string name="mozac_feature_prompt_repost_message">Oppdatering av denne sida kan duplisere nylege handlingar, til dømes å sende ei betaling eller leggje igjen ein kommentar to gongar.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Send data på nytt</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Avbryt</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card" moz:removedIn="125" tools:ignore="UnusedResources">Vel betalingskort</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2">Bruk lagra kort</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Utvid føreslått betalingskort</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Minimer føreslått betalingskort</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards" moz:removedIn="125" tools:ignore="UnusedResources">Handsam betalingskort</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2">Handsam kort</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Lagre dette kortet trygt?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Oppdatere siste bruksdato for kortet?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body" moz:removedIn="125" tools:ignore="UnusedResources">Kortnummeret vil bli kryptert. Tryggingskoden vert ikkje lagra.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Vel adresse</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Utvid føreslåtte adresser</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2">Utvid lagra adresser</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Slå saman føreslåtte adresser</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Handsam adresser</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Kontobilde</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Vel ein innloggingsleverandør</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Log inn med ein %1$s-konto</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Bruk %1$s som innloggingsleverandør</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ Å logge på %1$s med ein %2$s-konto er underlagt <a href="%3$s">personvernerklæringa</a> og <a href="%4$s">tenestevilkåra</a> deira]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Fortset</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Avbryt</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-oc/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-oc/strings.xml
new file mode 100644
index 0000000000..f835c12ef6
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-oc/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">D’acòrdi</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Anullar</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Empachar aquesta pagina de dobrir de dialògs suplementaris</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Definir</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Escafar</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Se connectar</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Nom d’utilizaire</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Senhal</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Enregistrar pas</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Pas ara</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Enregistrar pas jamai</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Pas ara</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Enregistrar</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Metre pas a jorn</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Pas ara</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Metre a jorn</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Lo camp senhal pòt pas èsser void</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Picatz un senhal</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Impossible d’enregistrar l’identificant</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Enregistrament de senhal impossible</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Salvar aqueste identificant ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Salvar lo senhal ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Metre a jorn aqueste identificant ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Actualizar lo senhal ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Apondre un nom d’utilizaire al senhal salvat ?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Etiqueta per la creacion d’un camp de picada de tèxt</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Causir una color</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Autorizar</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Refusar</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">O confirmatz ?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Volètz quitar aqueste site ? Las donadas qu’ajatz picadas seràn benlèu pas enregistradas.</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Demorar</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Quitar</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Causir un mes</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Gen</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Març</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Abril</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Mai</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Junh</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Julh</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Ago</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Set</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Oct</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dec</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Causida del temps</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Gerir los identificants</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Gerir los senhals</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Espandir los identificants suggerits</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Desplegar los senhals salvats</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Plegar los identificants suggerits</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Plegar los senhals salvats</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Identificants recomandats</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Senhals salvats</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Suggerir un senhal fòrt</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Suggerir un senhal fòrt</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Utilizar un senhal fòrt : %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Tornar enviar las donadas a aqueste site ?</string>
+ <string name="mozac_feature_prompt_repost_message">L’actualizacion d’aquesta pagina poiriá menar a la duplicacion d’accions recentas coma enviar un pagament o publicar un comentari dos còps.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Tornar enviar</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Anullar</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Seleccionar carta de crèdit</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Utilizar una carta enregistrada</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Espandir las cartas de crèdit suggeridas</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Desplegar las cartas enregistradas</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Plegar las cartas de crèdit suggeridas</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Plegar las cartas enregistradas</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Gerir las cartas de crèdit</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Gerir las cartas</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Salvar d’un biais segur aquesta carta ?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Actualizar la data d’expiracion de la carta ?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Los numèros de carta son chifrats. Se gardarà pas lo còdi de seguretat.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s chifra lo numèro de carta. Lo còdi de seguretat s’enregistrarà pas.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Seleccion d’adreça</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Espandir las adreças suggeridas</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Desplegar las adreças enregistradas</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Plegar las adreças suggeridas</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Plegar las adreças enregistradas</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Gestion de las adreças</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Imatge del compte</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Causir un provesidor d’identificants</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Se connectar amb un compte %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Causir %1$s coma provesidor d’identificants</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[La connexion a %1$s amb un compte %2$s es somesa a la <a href="%3$s">politica de confidencialitat</a> e a las <a href="%4$s">condicions d’utilizacion</a> d’aqueste.]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Contunhar</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Anullar</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-or/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-or/strings.xml
new file mode 100644
index 0000000000..37034a6663
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-or/strings.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">ଠିକ୍ ଅଛି</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">ବାତିଲ କରନ୍ତୁ</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">ଉପଭୋକ୍ତାଙ୍କ ନାମ</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">ପାସ୍‍ୱାର୍ଡ଼</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">ପାସ୍‍ୱାର୍ଡ଼ ଖାଲି ଛଡ଼ାଯିବା ଉଚିତ୍ ନୁହେଁ</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">ସଞ୍ଚିତ ପାସ୍‍ୱାର୍ଡ଼ ପାଇଁ ଉପଭୋକ୍ତାଙ୍କ ନାମ ଯୋଡ଼ିବେ?</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">ଏକ ରଙ୍ଗ ବାଛନ୍ତୁ</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">ଆପଣ ନିଶ୍ଚିତ ଅଛନ୍ତି ତ?</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">ରୁହନ୍ତୁ</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">ଛାଡ଼ନ୍ତୁ</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">ମାସ ବାଛନ୍ତୁ</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">ଜାନୁ</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">ଫେବୃ</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">ମାର୍ଚ୍ଚ</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">ଅପ୍ରେ</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">ମଇ</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">ଜୁନ</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">ଜୁଲା</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">ଅଗଷ୍ଟ</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">ସେପ୍ଟେ</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">ଅକ୍ଟୋ</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">ନଭେ</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">ଡିସେ</string>
+
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">ବାତିଲ କରନ୍ତୁ</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-pa-rIN/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-pa-rIN/strings.xml
new file mode 100644
index 0000000000..8cc587826d
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-pa-rIN/strings.xml
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">ਠੀਕ ਹੈ</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">ਰੱਦ ਕਰੋ</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">ਇਸ ਸਫ਼ੇ ਨੂੰ ਹੋਰ ਡਾਈਲਾਗ ਬਣਾਉਣ ਤੋਂ ਰੋਕੋ</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">ਸੈੱਟ ਕਰੋ</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">ਸਾਫ਼ ਕਰੋ</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">ਸਾਈਨ ਇਨ</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">ਵਰਤੋਂਕਾਰ ਨਾਂ</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">ਪਾਸਵਰਡ</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">ਨਾ ਸੰਭਾਲੋ</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">ਹੁਣੇ ਨਹੀਂ</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">ਕਦੇ ਨਾ ਸੰਭਾਲੋ</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">ਹੁਣੇ ਨਹੀਂ</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">ਸੰਭਾਲੋ</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">ਅੱਪਡੇਟ ਨਾ ਕਰੋ</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">ਹੁਣੇ ਨਹੀਂ</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">ਅੱਪਡੇਟ ਕਰੋ</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">ਪਾਸਵਰਡ ਖੇਤਰ ਖਾਲੀ ਨਹੀਂ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">ਪਾਸਵਰਡ ਦਿਓ</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">ਲਾਗਇਨ ਸੰਭਾਲਣ ਲਈ ਅਸਮਰੱਥ</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">ਪਾਸਵਰਡ ਸੰਭਾਲਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ ਹੈ</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">ਇਹ ਲਾਗਇਨ ਸੰਭਾਲਣਾ ਹੈ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">ਪਾਸਵਰਡ ਸੰਭਾਲਣਾ ਹੈ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">ਇਹ ਲਾਗਇਨ ਅੱਪਡੇਟ ਕਰਨਾ ਹੈ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">ਪਾਸਵਰਡ ਅੱਪਡੇਟ ਕਰਨਾ ਹੈ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">ਵਰਤੋਂਕਾਰ-ਨਾਂ ਨੂੰ ਸੰਭਾਲੇ ਪਾਸਵਰਡ ਵਿੱਚ ਜੋੜਨਾ ਹੈ?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">ਲਿਖਣ ਵਾਲੇ ਖਾਨੇ ਵਿੱਚ ਜਾਣ ਲਈ ਲੇਬਲ</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">ਰੰਗ ਚੁਣੋ</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">ਆਗਿਆ ਦਿਓ</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">ਇਨਕਾਰ ਕਰੋ</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">ਕੀ ਤੁਸੀਂ ਚਾਹੁੰਦੇ ਹੋ?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">ਕੀ ਤੁਸੀਂ ਇਹ ਸਾਈਟ ਛੱਡਣਾ ਚਾਹੁੰਦੇ ਹੋ? ਤੁਹਾਡੇ ਵਲੋਂ ਦਿੱਤਾ ਡਾਟਾ ਸੰਭਾਲਿਆ ਨਹੀਂ ਵੀ ਗਿਆ ਹੋ ਸਕਦਾ ਹੈ</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">ਇੱਥੇ ਹੀ ਰਹੋ</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">ਛੱਡੋ</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">ਮਹੀਨਾ ਚੁਣੋ</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">ਜਨ</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">ਫਰ</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">ਮਾਰਚ</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">ਅਪ</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">ਮਈ</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">ਜੂਨ</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">ਜੁਲ</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">ਅਗ</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">ਸਤੰ</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">ਅਕਤੂ</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">ਨਵੰ</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">ਦਸੰ</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">ਸਮਾਂ ਸੈੱਟ ਕਰੋ</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">ਲਾਗਇਨਾਂ ਦਾ ਇੰਤਜ਼ਾਮ</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">ਪਾਸਵਰਡਾਂ ਦਾ ਇੰਤਜ਼ਾਮ</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">ਸੁਝਾਏ ਲਾਗਇਨ ਫੈਲਾਓ</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">ਸੰਭਾਲੇ ਹੋਏ ਪਾਸਵਰਡਾਂ ਨੂੰ ਫੈਲਾਓ</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">ਸੁਝਾਏ ਲਾਗਇਨ ਸਮੇਟੋ</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">ਸੰਭਾਲੇ ਹੋਏ ਪਾਸਵਰਡਾਂ ਨੂੰ ਸਮੇਟੋ</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">ਸੁਝਾਏ ਗਏ ਲਾਗਇਨ</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">ਸੰਭਾਲੇ ਹੋਏ ਪਾਸਵਰਡ</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">ਮਜ਼ਬੂਤ ਪਾਸਵਰਡ ਲਈ ਸੁਝਾਅ</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">ਮਜ਼ਬੂਤ ਪਾਸਵਰਡ ਲਈ ਸੁਝਾਅ</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">ਮਜ਼ਬੂਤ ਪਾਸਵਰਡ ਨੂੰ ਵਰਤੋਂ: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">ਇਸ ਸਾਈਟ ਲਈ ਡਾਟਾ ਮੁੜ-ਭੇਜਣਾ ਹੈ?</string>
+ <string name="mozac_feature_prompt_repost_message">ਇਸ ਸਫ਼ੇ ਨੂੰ ਮੁੜ-ਤਾਜ਼ਾ ਕਰਨ ਨਾਲ ਤਾਜ਼ਾ ਕਾਰਵਾਈਆਂ ਨੂੰ ਦੁਹਰਾਇਆ ਜਾਵੇਗਾ
+ਜਿਵੇਂ ਕਿ ਭੁਗਤਾਨ ਭੇਜਣ ਜਾਂ ਟਿੱਪਣੀ ਨੂੰ ਦੋ ਵਾਰ ਪੋਸਟ ਕੀਤਾ ਜਾਵੇਗਾ।</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">ਡਾਟਾ ਮੁੜ-ਭੇਜੋ</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">ਰੱਦ ਕਰੋ</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">ਕਰੈਡਿਟ ਕਾਰਡ ਚੁਣੋ</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">ਸੰਭਾਲੇ ਕਾਰਡ ਨੂੰ ਵਰਤੋਂ</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">ਸੁਝਾਏ ਗਏ ਕਰੈਡਿਟ ਕਾਰਡ ਨੂੰ ਫੈਲਾਓ</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">ਸੰਭਾਲੇ ਹੋਏ ਕਾਰਡਾਂ ਨੂੰ ਫੈਲਾਓ</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">ਸੁਝਾਏ ਗਏ ਕਰੈਡਿਟ ਕਾਰਡ ਨੂੰ ਸਮੇਟੋ</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">ਸੰਭਾਲੇ ਹੋਏ ਕਾਰਡਾਂ ਨੂੰ ਸਮੇਟੋ</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">ਕਰੈਡਿਟ ਕਾਰਡਾਂ ਦਾ ਇੰਤਜ਼ਾਮ ਕਰੋ</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">ਕਾਰਡਾਂ ਦਾ ਇੰਤਜ਼ਾਮ ਕਰੋ</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">ਇਹ ਕਾਰਡ ਨੂੰ ਸੁਰੱਖਿਅਤ ਢੰਗ ਨਾਲ ਸੰਭਾਲਣਾ ਹੈ?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">ਕਾਰਡ ਦੀ ਮਿਆਦ ਪੁੱਗਣ ਦੀ ਤਾਰੀਖ ਨੂੰ ਅੱਪਡੇਟ ਕਰਨਾ ਹੈ?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">ਕਾਰਡ ਨੰਬਰ ਨੂੰ ਇੰਕ੍ਰਿਪਟ ਕੀਤਾ ਜਾਵੇਗਾ। ਸੁਰੱਖਿਆ ਕੋਡ ਸੰਭਾਲਿਆ ਨਹੀਂ ਜਾਵੇਗਾ।</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s ਤੁਹਾਡੇ ਕਾਰਡ ਨੂੰ ਇੰਕ੍ਰਿਪਟ ਕਰਦਾ ਹੈ। ਤੁਹਾਡੇ ਸੁਰੱਖਿਆ ਕੋਡ ਨੂੰ ਸੰਭਾਲਿਆ ਨਹੀਂ ਜਾਵੇਗਾ।</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">ਸਿਰਨਾਵਾਂ ਚੁਣੋ</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">ਸੁਝਾਏ ਸਿਰਨਾਵਿਆਂ ਨੂੰ ਫੈਲਾਓ</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">ਸੰਭਾਲੇ ਹੋਏ ਸਿਰਨਾਵਿਆਂ ਨੂੰ ਫੈਲਾਓ</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">ਸੁਝਾਏ ਸਿਰਨਾਵਿਆਂ ਨੂੰ ਸਮੇਟੋ</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">ਸੰਭਾਲੇ ਹੋਏ ਸਿਰਨਾਵਿਆਂ ਨੂੰ ਸਮੇਟੋ</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">ਸਿਰਨਾਵਿਆਂ ਦਾ ਇੰਤਜ਼ਾਮ ਕਰੋ</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">ਖਾਤੇ ਦੀ ਤਸਵੀਰ</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">ਲਾਗਇਨ ਪੂਰਕ ਚੁਣੋ</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">%1$s ਖਾਤੇ ਨਾਲ ਸਾਈਨ ਇਨ ਕਰੋ</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">%1$s ਨੂੰ ਲਾਗਇਨ ਪੂਰਕ ਵਜੋਂ ਵਰਤੋਂ</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[%1$s ਵਿੱਚ %2$s ਖਾਤੇ ਨਾਲ ਲਾਗਇਨ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ, ਜੋ ਕਿ <a href="%3$s">ਪਰਦੇਦਾਰੀ ਨੀਤੀ</a> ਅਤੇ <a href="%4$s">ਸੇਵਾ ਦੀਆਂ ਸ਼ਰਤਾਂ</a> ਦੇ ਅਧੀਨ ਹੈ।]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">ਜਾਰੀ ਰੱਖੋ</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">ਰੱਦ ਕਰੋ</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-pa-rPK/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-pa-rPK/strings.xml
new file mode 100644
index 0000000000..f3e24af90d
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-pa-rPK/strings.xml
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">ٹھیک اے</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">رد کرو</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">ایس صفحے توں کوئی ہور سوال روکو</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">پا لاؤ</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">صاف کرو</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">لوگ این کرو</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">ورتنوالے دا ناں</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">پاس‌ورڈ</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">ایہہ نہ رکھو</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">کدے نہ رکھو</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">ہݨے نہیں</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">سانجھا کرو</string>
+
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">ایہنوں نہ نواں کرو</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">نواں کرو</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">پاس‌ورڈ نہیں پایا</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">پاس‌ورڈ رکھ نہیں سکدا</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">پاس‌ورڈ رکھیو؟</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">ایہنوں نواں کریو؟</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">پاس‌ورڈ نال ورتنوالے دا ناں وی رکھیو؟</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">لکھت دی تھاں لئی تفصیل</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">رنگ چݨو</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">اجازت دیو</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">اجازت نہ دیو</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">تسیں پکے او؟</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">تسیں پکے او، ایس سائٹ توں چھڈݨا چاہیدے؟ کوئی کجھ پاۓ گئے ڈیٹے نہیں رکھےگا۔</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">ایتھوں ای رہو</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">چڈو</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">مہینہ چݨو</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">جنوری</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">فیوری</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">مارچ</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">اپریل</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">مئی</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">جون</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">جولائی</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">اگست</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">سرمبر</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">اکتوبر</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">نومبر</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">دسمبر</string>
+
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">ویلے نوں بدلو</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">پاس‌ورڈاں دا انتظام</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">تجویز دے ویروے ویکھو</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">تجویز لُکاؤ</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">تجویز دے ویروے</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">مضبوط پاس‌ورڈ لئی تجویز کرو</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">مضبوط پاس‌ورڈ لئی تجویز کرو</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">مضبوط پاس‌ورڈ نوں ورتوں: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">فیر بھیجیو؟</string>
+ <string name="mozac_feature_prompt_repost_message">ایس صفحے نوں مڑ تازہ کرن نال تاشہ کاروائیاں نوں دہرایا جاۓگا؛ جیویں کہ بھگتان بھیجݨ یاں ٹپݨی نوں دو وار پا لایا جاۓگا۔</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">آہو، فیر بھیجو</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">رد کرو</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">کریڈٹ کارڈ چݨو</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">تجویز دے کارڈ ویکھو</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">تجویز دے کارڈ لکاؤ</string>
+
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">کریڈٹ کارڈاں دا انتظام کرو</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">سرکھیت نال کارڈ دا نمبر رکھو؟</string>
+
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">تسیں کارڈ دی میاد پگݨ دی تاریخ نوں بدلݨا چاہیدے او؟</string>
+
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">کارڈ نمبر نوں اوہلا پا لا جاۓگا۔ سرکھیا کوڈ رکھ نہیں جاۓگا۔</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">پتہ چݨو</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">ہور پتے ویکھو</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">تجویز دے پتے لکاؤ</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">پتیاں دا انتظام</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">کھاتے دی تصویر</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">لاگ ان دیݨ والا چݨو</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">%1$s کھاتے نال لاگ ان کرو</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">%1$s نوں لاگ ان دیݨ والے وجوں ورتوں</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[%1$s وچ %2$s کھاتے نال لاگ ان کیتا جا رہا اے، جو کہ <a href="%3$s">پردے داری نیتی</a> تے <a href="%4$s">سیوا دیاں شرطاں</a> دے ادھین اے]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">جاری رکھو</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">رد کرو</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-pl/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-pl/strings.xml
new file mode 100644
index 0000000000..92107e968f
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-pl/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Anuluj</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Zabroń tej stronie otwierać kolejne okna dialogowe</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Ustaw</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Wyczyść</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Logowanie</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Nazwa użytkownika</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Hasło</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Nie zachowuj</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Nie teraz</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Nigdy nie zachowuj</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Nie teraz</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Zachowaj</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Nie aktualizuj</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Nie teraz</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Aktualizuj</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Pole hasła nie może być puste</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Wpisz hasło</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Nie można zachować danych logowania</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Nie można zachować hasła</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Czy zachować te dane logowania?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Czy zachować hasło?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Czy zaktualizować te dane logowania?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Czy zaktualizować hasło?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Czy dodać nazwę użytkownika do zachowanego hasła?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Etykieta przechodzenia do pola wprowadzania tekstu</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Wybierz kolor</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Zezwól</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Zabroń</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Potwierdzenie</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Czy chcesz opuścić tę stronę? Wprowadzone dane mogły nie zostać zapisane.</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Zostań</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Opuść</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Wybierz miesiąc</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">sty</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">lut</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">kwi</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">maj</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">cze</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">lip</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">sie</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">wrz</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">paź</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">lis</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">gru</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Ustaw czas</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Zarządzaj danymi logowania</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Zarządzaj hasłami</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Rozwiń podpowiadane dane logowania</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Rozwiń zachowane hasła</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Zwiń podpowiadane dane logowania</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Zwiń zachowane hasła</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Podpowiadane dane logowania</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Zachowane hasła</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Zaproponuj silne hasło</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Zaproponuj silne hasło</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Użyj silnego hasła: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Czy ponownie przesłać dane do tej witryny?</string>
+ <string name="mozac_feature_prompt_repost_message">Odświeżenie tej strony może spowodować powtórzenie ostatnich działań, na przykład jeszcze raz wysłać płatność lub opublikować komentarz dwa razy.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Prześlij ponownie</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Anuluj</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Wybierz kartę płatniczą</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Użyj zachowanej karty</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Rozwiń podpowiadane karty płatnicze</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Rozwiń zachowane karty</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Zwiń podpowiadane karty płatnicze</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Zwiń zachowane karty</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Zarządzaj kartami płatniczymi</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Zarządzaj kartami</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Czy bezpiecznie zachować tę kartę?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Czy zaktualizować datę ważności karty?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Numer karty zostanie zaszyfrowany. Kod zabezpieczający nie zostanie zachowany.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s szyfruje numer karty. Kod zabezpieczający nie zostanie zachowany.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Wybierz adres</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Rozwiń podpowiadane adresy</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Rozwiń zachowane adresy</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Zwiń podpowiadane adresy</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Zwiń zachowane adresy</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Zarządzaj adresami</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Obraz konta</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Wybierz dostawcę logowania</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Zaloguj się za pomocą konta %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Używaj konta %1$s jako dostawcę logowania</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[Logowanie na %1$s za pomocą konta %2$s podlega <a href="%3$s">zasadom ochrony prywatności</a> i <a href="%4$s">regulaminowi usługi</a> danego konta]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Kontynuuj</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Anuluj</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-pt-rBR/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-pt-rBR/strings.xml
new file mode 100644
index 0000000000..de8cab92f6
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-pt-rBR/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Cancelar</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Impedir que esta página crie diálogos adicionais</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Definir</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Limpar</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Entrar</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Nome de usuário</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Senha</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Não salvar</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Agora não</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Nunca salvar</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Agora não</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Salvar</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Não atualizar</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Agora não</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Atualizar</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">O campo da senha não deve ficar vazio</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Digite uma senha</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Não foi possível salvar a conta</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Não foi possível salvar a senha</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Salvar esta conta?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Salvar senha?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Atualizar esta conta?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Atualizar senha?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Adicionar nome de usuário à senha salva?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Etiqueta para inserir um campo de entrada de texto</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Escolha uma cor</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Permitir</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Negar</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Tem certeza?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Quer sair deste site? Os dados que você digitou podem não ser salvos</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Ficar</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Sair</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Escolha um mês</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Jan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Fev</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Abr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Mai</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Jun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Jul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Ago</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Set</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Out</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dez</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Ajustar hora</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Gerenciar contas</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Gerenciar senhas</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Expandir sugestão de contas</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Expandir senhas salvas</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Recolher sugestão de contas</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Recolher senhas salvas</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Sugestão de contas</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Senhas salvas</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Sugerir senha forte</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Sugerir senha forte</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Usar senha forte: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Reenviar dados para este site?</string>
+ <string name="mozac_feature_prompt_repost_message">Atualizar esta página pode duplicar ações recentes, como enviar um pagamento ou publicar um comentário duas vezes.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Reenviar dados</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Cancelar</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Selecionar cartão de crédito</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Usar cartão salvo</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Expandir sugestões de cartão de crédito</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Expandir cartões salvos</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Recolher sugestões de cartão de crédito</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Recolher cartões salvos</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Gerenciar cartões de crédito</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Gerenciar cartões</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Salvar este cartão com segurança?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Atualizar data de validade do cartão?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">O número do cartão será criptografado. O código de segurança não será salvo.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">O %s criptografa o número do seu cartão. O código de segurança não é salvo.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Selecionar endereço</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Expandir endereços sugeridos</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Expandir endereços salvos</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Recolher endereços sugeridos</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Recolher endereços salvos</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Gerenciar endereços</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Imagem da conta</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Escolha um provedor de autenticação</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Entre com uma conta %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Usar %1$s como um provedor acesso a contas</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ Entrar em %1$s com uma conta %2$s está sujeito à sua <a href="%3$s">política de privacidade</a> e seus <a href="%4$s">termos do serviço</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Avançar</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Cancelar</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-pt-rPT/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000000..42564fdfe1
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-pt-rPT/strings.xml
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Cancelar</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Impedir esta página de criar novas janelas</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Definir</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Limpar</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Iniciar sessão</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Nome de utilizador</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Palavra-passe</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Não guardar</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Agora não</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Nunca guardar</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Agora não</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Guardar</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Não atualizar</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Agora não</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Atualizar</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">O campo de palavra-passe não deve estar vazio</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Introduza uma palavra-passe</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Não foi possível guardar a credencial</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Não foi possível guardar a palavra-passe</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Guardar esta credencial?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Guardar palavra-passe?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Atualizar esta credencial?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Atualizar palavra-passe?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Adicionar nome de utilizador à palavra-passe guardada?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Etiqueta para introduzir um campo de entrada de texto</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Escolha uma cor</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Permitir</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Recusar</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Tem a certeza?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Deseja sair deste site? Os dados que introduziu poderão não ser guardados</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Ficar</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Sair</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Selecione um mês</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">jan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Fev</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Abr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Mai</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Jun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Jul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Ago</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Set</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Out</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dez</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Definir hora</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Gerir credenciais</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Gerir palavras-passes</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Expandir credenciais sugeridas</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Expandir palavras-passe guardadas</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Colapsar credenciais sugeridas</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Colapsar palavras-passe guardadas</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Credenciais sugeridas</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Palavras-passe guardadas</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Sugerir palavra-passe forte</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Sugerir palavra-passe forte</string>
+
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Utilizar palavra-passe forte: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Reenviar dados para este site?</string>
+ <string name="mozac_feature_prompt_repost_message">Atualizar esta página pode duplicar ações recentes, tais como enviar um pagamento ou publicar novamente um comentário. </string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Reenviar dados</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Cancelar</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Selecionar cartão de crédito</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Utilizar cartão guardado</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Expandir os cartões de créditos sugeridos</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Expandir cartões guardados</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Colapsar os cartões de crédito sugeridos</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Colapsar cartões guardados</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Gerir cartões de crédito</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Gerir cartões</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Guardar este cartão com segurança?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Atualizar a data de validade do cartão?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">O número do cartão será encriptado. O código de segurança não será guardado.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">O %s encripta o número do seu cartão. O seu código de segurança não será guardado.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Selecionar endereço</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Expandir endereços sugeridos</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Expandir endereços guardados</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Colapsar endereços sugeridas</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Colapsar endereços guardados</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Gerir endereços</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Imagem da conta</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Escolha um fornecedor de autenticação</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Iniciar sessão com uma conta %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Utilizar %1$s como fornecedor de início de sessão</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[Ao iniciar sessão em %1$s com uma conta %2$s está sujeito à sua <a href="%3$s">Política de Privacidade</a> e <a href="%4$s">Termos de Serviço</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Continuar</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Cancelar</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-rm/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-rm/strings.xml
new file mode 100644
index 0000000000..2b7976fc10
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-rm/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Interrumper</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Impedir che questa pagina creeschia ulteriurs dialogs</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Definir</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Svidar</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">S\'annunziar</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Num d\'utilisader</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Pled-clav</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Betg memorisar</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Betg ussa</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Mai memorisar</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Betg ussa</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Memorisar</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Betg actualisar</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Betg ussa</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Actualisar</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Il champ dal pled-clav na dastga betg esser vid</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Endatar in pled-clav</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Impussibel da memorisar las datas d\'annunzia</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Impussibel da memorisar il pled-clav</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Memorisar questa infurmaziun d\'annunzia?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Memorisar il pled-clav?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Actualisar questa infurmaziun d\'annunzia?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Actualisar il pled-clav?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Agiuntar in num d\'utilisader al pled-clav memorisà?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Legenda dad in champ per inserir text</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Tscherner ina colur</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Permetter</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Refusar</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Es ti segir?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Vuls ti propi bandunar questa pagina? Las datas che ti has endatà n\'èn forsa betg memorisadas</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Restar</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Bandunar</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Tscherner in mais</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">schan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">favr</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">mars</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">avr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">matg</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">zercl</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">fan</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">avu</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">sett</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">oct</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">dec</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Drizzar l\'ura</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Administrar las datas d\'annunzia</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Administrar ils pleds-clav</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Expander las datas d\'annunzia proponidas</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Extender ils pleds-clav memorisads</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Reducir las datas d\'annunzia proponidas</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Reducir ils pleds-clav memorisads</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Datas d\'annunzia proponidas</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Pleds-clav memorisads</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Proponer in ferm pled-clav</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Proponer in ferm pled-clav</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Utilisar in ferm pled-clav: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Anc ina giada trametter las datas a questa website?</string>
+ <string name="mozac_feature_prompt_repost_message">Cun actualisar questa pagina vegnan eventualmain duplitgadas acziuns recentas (sco far in pajament u publitgar duas giadas in commentari).</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Trametter anc ina giada</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Interrumper</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Tscherner ina carta da credit</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Utilisar ina carta memorisada</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Expander las cartas da credit proponidas</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Extender las cartas memorisadas</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Reducir las cartas da credit proponidas</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Reducir las cartas memorisadas</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Administrar las cartas da credit</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Administrar las cartas</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Memorisar questa carta a moda segira?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Actualisar la data da scadenza da la carta?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Il numer da la carta vegn criptà. Il code da segirezza na vegn betg memorisà.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s criptescha il numer da tia carta. Tes code da segirezza na vegn betg memorisà.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Tscherner l\'adressa</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Expander las adressas proponidas</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Extender las adressas proponidas</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Cumprimer las adressas proponidas</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Reducir las adressas memorisadas</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Administrar las adressas</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Maletg da conto</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Tscherner in purschider per l\'annunzia</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">T\'annunzia cun in conto %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Utilisar %1$s sco purschider d\'annunzia</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[L\'annunzia tar %1$s cun in conto da %2$s è suttamessa a las <a href="%3$s">Directivas per la protecziun da datas</a> e las <a href="%4$s">Cundiziuns d\'utilisaziun</a> correspundentas]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Cuntinuar</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Interrumper</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-ro/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ro/strings.xml
new file mode 100644
index 0000000000..2459648434
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ro/strings.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Anulare</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Împiedică acestă pagină să creeze dialoguri adiționale</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Setează</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Şterge</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Autentificare</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Nume de utilizator</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Parolă</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Nu salva</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Nu salva niciodată</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Salvează</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Nu actualiza</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Actualizează</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Câmpul de parolă nu trebuie să fie gol</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Datele de autentificare nu au putut fi salvate</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Salvezi aceste date de autentificare?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Actualizezi aceste date de autentificare?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Adaugi numele de utilizator la parola salvată?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Etichetă pentru crearea unui câmp de introducere text</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Alege o culoare</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Permite</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Refuză</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Ești sigur(ă)?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Vrei să ieși de pe acest site? Datele pe care le-ai introdus nu vor fi salvate</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Rămâi</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Ieși</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Alege o lună</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Ian</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Apr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Mai</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Iun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Iul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Aug</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sep</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Oct</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dec</string>
+
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Extinde datele de autentificare sugerate</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Restrânge datele de autentificare sugerate</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Date de autentificare sugerate</string>
+
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Retrimite datele</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Anulează</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-ru/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ru/strings.xml
new file mode 100644
index 0000000000..ca198e6cd5
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ru/strings.xml
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">ОК</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Отмена</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Не давать этой странице создавать дополнительные диалоговые окна</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Установить</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Очистить</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Войти</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Имя пользователя</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Пароль</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Не сохранять</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Не сейчас</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Никогда не сохранять</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Не сейчас</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Сохранить</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Не обновлять</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Не сейчас</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Обновить</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Поле пароля не может быть пустым</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Введите пароль</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Не удалось сохранить логин</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Не удалось сохранить пароль</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Сохранить этот логин?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Сохранить пароль?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Обновить этот логин?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Обновить пароль?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Добавить имя пользователя к сохранённому паролю?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Метка для текстового поля ввода</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Выберите цвет</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Разрешить</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Не разрешать</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Вы уверены?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Вы действительно хотите покинуть этот сайт? Все введённые данные могут быть потеряны</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Остаться</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Уйти</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Выберите месяц</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Янв</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Фев</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Мар</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Апр</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Май</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Июн</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Июл</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Авг</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Сен</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Окт</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Ноя</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Дек</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Установка времени</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Управление паролями</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Управление паролями</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Развернуть предлагаемые пароли</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Развернуть сохранённые пароли</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Свернуть предлагаемые пароли</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Свернуть сохранённые пароли</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Предлагаемые пароли</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Сохранённые пароли</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Предложить надежный пароль</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Предложить надежный пароль</string>
+
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Используйте надежный пароль: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Отправить данные на этот сайт снова?</string>
+ <string name="mozac_feature_prompt_repost_message">Обновление этой страницы может повторить последние выполненные действия, например, снова отправив платёж или комментарий.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Отправить данные снова</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Отмена</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Выберите банковскую карту</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Использовать сохранённую карту</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Развернуть предлагаемые банковские карты</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Развернуть сохранённые карты</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Свернуть предлагаемые банковские карты</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Свернуть сохранённые карты</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Управление банковскими картами</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Управление картами</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Сохранить надёжно эту карту?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Обновить срок действия карты?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Номер карты будет зашифрован. Код безопасности не будет сохранён.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s шифрует номер вашей карты. Ваш код безопасности не будет сохранён.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Выберите адрес</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Развернуть предлагаемые адреса</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Развернуть сохранённые адреса</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Свернуть предлагаемые адреса</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Свернуть сохранённые адреса</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Управление адресами</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Фото аккаунта</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Выберите провайдера входа</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Войти с аккаунтом %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Использовать %1$s в качестве провайдера входа</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ Вход в %1$s с учётной записью %2$s регулируется их <a href="%3$s">Политикой конфиденциальности</a> и <a href="%4$s">Условиями использования</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Продолжить</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Отменить</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-sat/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-sat/strings.xml
new file mode 100644
index 0000000000..b915c490ce
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-sat/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">ᱴᱷᱤᱠ</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">ᱵᱟᱹᱰᱨᱟᱹ</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">ᱱᱚᱶᱟ ᱥᱟᱦᱴᱟ ᱟᱠᱚᱴᱮᱢ ᱵᱟᱹᱲᱛᱤ ᱠᱟᱛᱷᱟ ᱵᱮᱱᱟᱣ ᱠᱷᱚᱱ</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">ᱥᱟᱡᱟᱣ ᱢᱮ</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">ᱯᱷᱟᱨᱪᱟ</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">ᱵᱚᱞᱚᱱ ᱥᱩᱦᱤ</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹᱜ ᱧᱩᱛᱩᱢ</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save" moz:removedIn="125" tools:ignore="UnusedResources">ᱟᱞᱚᱢ ᱥᱟᱺᱪᱟᱣᱜ-ᱟ</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2">ᱱᱤᱛᱚᱜ ᱫᱚ ᱵᱟᱝᱟ</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">ᱛᱤᱥ ᱦᱚᱸ ᱵᱟᱝ ᱥᱟᱺᱪᱟᱣᱜ-ᱟ</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">ᱱᱤᱛᱚᱜ ᱫᱚ ᱵᱟᱝᱟ</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">ᱥᱟᱺᱪᱟᱣ ᱢᱮ</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update" moz:removedIn="125" tools:ignore="UnusedResources">ᱟᱞᱚᱢ ᱦᱟᱹᱞᱤᱭᱟᱜ-ᱟ</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2">ᱱᱤᱛᱚᱜ ᱫᱚ ᱵᱟᱝᱟ</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">ᱦᱟᱹᱞᱤᱭᱟᱹᱜ ᱢᱮ</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password" moz:removedIn="125" tools:ignore="UnusedResources">ᱥᱟᱵᱟᱫᱽ ᱜᱟᱫᱮᱞ ᱠᱷᱟᱹᱞᱤ ᱟᱞᱚ ᱛᱟᱦᱮᱸᱱ ᱢᱟ</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2">ᱢᱤᱫᱴᱟᱹᱝ ᱥᱟᱵᱟᱫ ᱟᱫᱮᱨ ᱢᱮ</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause" moz:removedIn="125" tools:ignore="UnusedResources">ᱞᱚᱜᱤᱱ ᱵᱟᱭ ᱥᱟᱺᱪᱟᱣ ᱫᱟᱲᱮᱭᱟᱜ ᱠᱟᱱᱟ</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2">ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫ ᱥᱟᱧᱪᱟᱣ ᱵᱟᱭ ᱜᱟᱱ ᱞᱮᱱᱟ</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline" moz:removedIn="125" tools:ignore="UnusedResources">ᱱᱚᱶᱟ ᱞᱚᱜᱤᱱ ᱥᱟᱺᱪᱟᱣ ᱢᱮ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2">ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱠᱚ ᱥᱟᱺᱪᱟᱣᱟ ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline" moz:removedIn="125" tools:ignore="UnusedResources">ᱱᱚᱶᱟ ᱞᱚᱜᱤᱱ ᱦᱟᱹᱞᱤᱭᱟᱜ ᱢᱮ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2">ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱦᱟᱹᱞᱤᱭᱟᱹᱠ ᱟ ?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">ᱥᱟᱺᱪᱟᱣᱠᱟᱱ ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱨᱮ ᱵᱮᱵᱷᱟᱨᱤᱡ ᱧᱩᱛᱩᱢ ᱥᱮᱞᱮᱫᱽ ᱟᱢ?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">ᱚᱱᱚᱞ ᱟᱫᱮᱨ ᱡᱟᱭᱜᱟ ᱨᱮᱭᱟᱜ ᱞᱮᱵᱮᱞ</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">ᱨᱚᱝ ᱵᱟᱪᱷᱟᱣ ᱛᱟᱞᱟᱝ ᱢᱮ</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">ᱦᱮᱥᱟᱨᱤᱭᱟᱹ</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">ᱵᱟᱝ ᱦᱮᱥᱟᱨᱭ</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">ᱟᱢ ᱜᱚᱴᱟ ᱛᱮ ᱢᱮᱱᱟᱢ-ᱟ?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">ᱪᱮᱫ ᱟᱢ ᱱᱚᱶᱟ ᱥᱟᱭᱤᱴ ᱵᱟᱹᱜᱤ ᱥᱟᱱᱟᱢ ᱠᱟᱱᱟ? ᱰᱟᱴᱟ ᱡᱟᱦᱸᱟ ᱟᱢ ᱟᱫᱮᱨ ᱞᱮᱫᱟᱢ ᱚᱱᱟ ᱥᱟᱺᱪᱟᱣ ᱵᱟᱝ ᱦᱩᱭᱩᱜ-ᱟ</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">ᱛᱟᱦᱮᱸᱱ ᱢᱮ</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">ᱵᱟᱹᱜᱤ ᱢᱮ</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">ᱪᱟᱸᱫᱚ ᱵᱟᱪᱷᱟᱣ ᱢᱮ</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">ᱯᱩᱥ</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">ᱢᱟᱜ</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">ᱯᱷᱟ</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">ᱪᱟᱹᱛ</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">ᱵᱟᱹᱭ</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">ᱡᱷᱮ</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">ᱟᱥᱟ</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">ᱥᱟᱱ</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">ᱵᱷᱟ</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">ᱟᱥᱤ</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">ᱠᱟᱨ</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">ᱟᱜᱷ</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">ᱚᱠᱛᱚ ᱥᱮᱴ ᱢᱮ</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins" moz:removedIn="125" tools:ignore="UnusedResources">ᱞᱚᱜᱤᱱ ᱵᱮᱵᱚᱥᱛᱷᱟ ᱠᱚ</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2">ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫ ᱢᱮᱱᱮᱡᱽ ᱢᱮ</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">ᱵᱟᱛᱟᱣᱟᱠᱟᱱ ᱞᱚᱜᱤᱱ ᱠᱚ ᱴᱟᱨᱟᱝ ᱪᱷᱚᱭ ᱢᱮ</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2">ᱥᱟᱺᱪᱟᱣ ᱟᱠᱟᱱ ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱠᱚ ᱯᱟᱥᱱᱟᱣ ᱢᱮ</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">ᱵᱟᱛᱟᱣᱟᱠᱟᱱ ᱞᱚᱜᱤᱱ ᱠᱚ ᱠᱟᱹᱴᱤᱡ ᱪᱷᱚᱭ ᱢᱮ</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2">ᱥᱟᱺᱪᱟᱣᱟᱜ ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱠᱚ ᱫᱟᱥᱟᱣ ᱢᱮ</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins" moz:removedIn="125" tools:ignore="UnusedResources">ᱵᱟᱛᱟᱣᱟᱠᱟᱱ ᱞᱚᱜᱤᱱ ᱠᱚ</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2">ᱥᱟᱧᱪᱟᱣ ᱠᱟᱱ ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱠᱚ</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">ᱟᱸᱴ ᱫᱟᱫᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱵᱟᱛᱟᱣ ᱢᱮ …</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">ᱟᱸᱴ ᱫᱟᱫᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱵᱟᱛᱟᱣ ᱢᱮ …</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">ᱟᱹᱴ ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱵᱮᱵᱷᱟᱨ ᱢᱮ ᱺ %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">ᱱᱚᱶᱟ ᱥᱟᱭᱤᱴ ᱞᱟᱹᱜᱤᱫ ᱰᱟᱴᱟ ᱫᱩᱦᱲᱟᱹ ᱵᱷᱮᱡᱟᱭ ᱟᱢ‌ ᱥᱮ?</string>
+ <string name="mozac_feature_prompt_repost_message">ᱥᱟᱦᱴᱟ ᱨᱤᱯᱷᱨᱮᱥ ᱞᱮᱠᱷᱟᱱ ᱱᱤᱛᱚᱜᱟᱜ ᱠᱟᱹᱢᱤ ᱠᱚ ᱰᱩᱯᱞᱤᱠᱮᱴ ᱫᱟᱲᱮᱭᱟᱜᱼᱟᱭ, ᱡᱮᱢᱚᱱ ᱯᱩᱭᱥᱟᱹ ᱵᱷᱮᱡᱟ ᱠᱚ ᱟᱨ ᱵᱟᱝ ᱠᱚᱢᱮᱴ ᱠᱚ ᱵᱟᱨ ᱡᱮᱠᱷᱟ ᱵᱷᱮᱡᱟ ᱠᱚ ᱾</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">ᱰᱟᱴᱟ ᱫᱩᱦᱲᱟ ᱵᱷᱮᱡᱟᱭᱢᱮ</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">ᱵᱟᱹᱰᱨᱟᱹ</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card" moz:removedIn="125" tools:ignore="UnusedResources">ᱠᱨᱮᱰᱤᱴ ᱠᱟᱰ ᱵᱟᱪᱷᱟᱣ ᱢᱮ</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2">ᱥᱟᱧᱪᱟᱣ ᱠᱟᱱ ᱠᱟᱰ ᱵᱮᱵᱷᱟᱨ ᱢᱮ</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">ᱵᱟᱛᱟᱣ ᱟᱠᱟᱱ ᱠᱨᱮᱰᱤᱴ ᱠᱟᱰ ᱡᱷᱟᱹᱞ ᱪᱷᱚᱭ ᱢᱮ</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2">ᱥᱟᱺᱪᱟᱣ ᱟᱠᱟᱱ ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱠᱚ ᱯᱟᱥᱱᱟᱣ ᱢᱮ</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">ᱵᱟᱛᱟᱣ ᱟᱠᱟᱱ ᱠᱨᱮᱰᱤᱴ ᱠᱟᱰ ᱦᱚᱯᱚᱱ ᱪᱷᱚᱭ ᱢᱮ</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2">ᱥᱟᱧᱪᱟᱣ ᱠᱟᱱ ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽᱠᱚ ᱫᱟᱥᱟᱣ ᱢᱮ</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards" moz:removedIn="125" tools:ignore="UnusedResources">ᱠᱨᱮᱰᱤᱴ ᱠᱟᱰ ᱠᱚ ᱢᱮᱱᱮᱡᱽ ᱢᱮ</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2">ᱠᱟᱰ ᱢᱮᱱᱮᱡᱽ ᱢᱮ</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">ᱱᱚᱶᱟ ᱠᱟᱰ ᱫᱚ ᱨᱩᱠᱷᱤᱭᱟᱹ ᱥᱟᱹᱦᱤᱡ ᱫᱚᱦᱚᱭ ᱟᱢ ᱥᱮ ?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">ᱠᱟᱰ ᱪᱟᱵᱟ ᱢᱟᱦᱟᱸ ᱦᱟᱹᱞᱤᱭᱟᱹᱭᱟᱹᱠ ᱟᱢ ᱥᱮ ?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body" moz:removedIn="125" tools:ignore="UnusedResources">ᱠᱟᱰ ᱱᱚᱢᱵᱚᱨ ᱫᱚ ᱨᱩᱠᱷᱤᱭᱟᱹᱜᱼᱟ ᱾ ᱨᱩᱠᱷᱤᱭᱟᱹ ᱠᱳᱰ ᱫᱚ ᱵᱟᱝ ᱥᱟᱧᱪᱟᱣᱜᱼᱟ ᱾</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2">%s ᱫᱚ ᱟᱢᱟᱜ ᱠᱟᱰ ᱱᱚᱢᱵᱚᱨ ᱮ ᱮᱱᱠᱨᱤᱯᱴ ᱟ ᱾ ᱟᱢᱟᱜ ᱥᱤᱠᱭᱚᱨᱤᱴᱤ ᱠᱳᱰ ᱵᱟᱭ ᱥᱟᱧᱪᱟᱣᱜ ᱟ ᱾</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">ᱴᱷᱤᱠᱬᱟᱹ ᱢᱮᱴᱟᱣ ᱢᱮ</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">ᱵᱟᱛᱟᱣᱟᱠᱟᱱ ᱞᱚᱜᱤᱱ ᱠᱚ ᱯᱟᱥᱱᱟᱣ ᱪᱷᱚᱭ ᱢᱮ</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2">ᱥᱟᱧᱪᱟᱣ ᱟᱠᱟᱱ ᱴᱷᱤᱠᱬᱟᱹ ᱠᱚ ᱯᱟᱥᱱᱟᱣ ᱢᱮ</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">ᱵᱟᱛᱟᱣᱟᱠᱟᱱ ᱞᱚᱜᱤᱱ ᱠᱚ ᱦᱚᱯᱚᱱ ᱪᱷᱚᱭ ᱢᱮ</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2">ᱥᱟᱧᱪᱟᱣᱟᱜ ᱴᱷᱤᱠᱬᱟᱹ ᱠᱚ ᱠᱷᱩᱞᱟᱹᱭ ᱢᱮ</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">ᱴᱷᱤᱠᱬᱟᱹᱤᱭᱟᱹ ᱡᱚᱛᱚᱱ ᱮᱢ</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">ᱠᱷᱟᱛᱟ ᱪᱤᱛᱟᱹᱨ</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">ᱢᱤᱫᱴᱟᱝ ᱵᱚᱞᱚ ᱮᱢᱚᱜᱤᱡ ᱵᱟᱪᱷᱟᱣ ᱢᱮ</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">%1$s ᱠᱷᱟᱛᱟ ᱵᱷᱵᱷᱟᱨ ᱟᱛᱮᱫ ᱥᱩᱦᱤ ᱮᱢ ᱢᱮ</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">%1$s ᱫᱚ ᱢᱤᱫᱴᱟᱝ ᱵᱚᱞᱚ ᱮᱢᱤᱡ ᱞᱮᱠᱷᱟ ᱵᱮᱵᱷᱟᱨ ᱢᱮ</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[%1$s ᱨᱮ %2$s ᱠᱷᱟᱛᱟ ᱛᱮ ᱵᱚᱞᱚ ᱠᱟᱛᱮ ᱚᱱᱟ ᱠᱚᱣᱟᱜ <a href="%3$s">ᱯᱨᱟᱭᱵᱷᱮᱥᱤ ᱱᱤᱛᱤ</a> ᱟᱨ <a href="%4$s">ᱠᱟᱹᱢᱤ ᱨᱮᱭᱟᱜ ᱥᱚᱨᱛᱚ</a> ᱨᱮᱭᱟᱜ ᱚᱫᱷᱤᱱ ᱨᱮ ᱢᱮᱱᱟᱜ ᱠᱟᱫᱟ ᱾]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">ᱞᱮᱛᱟᱲ</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">ᱵᱟᱹᱰᱨᱟᱹ</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-sc/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-sc/strings.xml
new file mode 100644
index 0000000000..e4dd91d8c6
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-sc/strings.xml
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">AB</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Annulla</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Èvita chi custa pàgina creet àteros diàlogos</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Cunfigura</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Isbòida</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Identìfica·ti</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Nòmine utente</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Crae</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Non sarves</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Immoe nono</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Non sarves mai</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Immoe nono</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Sarva</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">No atualizes</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Immoe nono</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Atualiza</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Sa crae non podet èssere bòida</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Inserta una crae</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Impossìbile sarvare is credentziales</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Impossìbile sarvare sa crae</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Boles sarvare custa credentziale?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Boles sarvare sa crae?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Boles atualizare custa credentziale?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Boles atualizare sa crae?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Boles agiùnghere su nòmine de utente a sa crae sarvada?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Eticheta pro introduire unu campu de intrada de testu</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Sèbera unu colore</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Permite</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Refuda</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Seguru?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Boles lassare custu situ? Podet dare chi is datos insertados non bèngiant sarvados</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Abarra</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Lassa</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Piga unu mese</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Ghe</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Fre</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Abr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Maj</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Làm</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Arg</string>
+
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Aus</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Cab</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Làd</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">StA</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Ida</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Cunfigura s’ora</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Gesti is credentziales</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Gesti is craes</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Ismànnia is credentziales cussigiadas</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Mìnima is credentziales cussigiadas</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Credentziales cussigiadas</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Craes sarvadas</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Cussìgia una crae segura</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Cussìgia una crae segura</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Imprea una crae segura: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Boles torrare a inviare is datos a su situ?</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Torra a imbiare is datos</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Annulla</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Seletziona una carta de crèditu</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Imprea una carta sarvada</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Ismànnia is cartas de crèditu cussigiadas</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Mìnima is cartas de crèditu cussigiadas</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Gesti is cartas de crèditu</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Gesti is cartas</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Boles sarvare custa carta cun seguresa?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Boles atualizare sa data de iscadèntzia de sa carta?</string>
+
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Su nùmeru de carta at a èssere tzifradu. Su còdighe de seguresa no at a èssere sarvadu.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s tzifrat su nùmeru de sa carta tua. Su còdighe de seguresa no at a èssere sarvadu.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Seletziona un’indiritzu</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Ismànnia is indiritzos cussigiados</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Mìnima is indiritzos cussigiados</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Gesti is indiritzos</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Immàgine de su contu</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Sèbera unu frunidore de atzessu</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Identìfica·ti cun unu contu de %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Imprea %1$s comente frunidore de atzessu</string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Sighi</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Annulla</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-si/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-si/strings.xml
new file mode 100644
index 0000000000..841bbc61d9
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-si/strings.xml
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">හරි</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">අවලංගු</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">මෙම පිටුව අමතර කවුළු සෑදීමෙන් වළක්වන්න</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">සකසන්න</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">මකන්න</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">පිවිසෙන්න</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">පරිශීලක නාමය</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">මුරපදය</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">සුරකින්න එපා</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">දැන් නොවේ</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">කිසිවිට නොසුරකින්න</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">දැන් නොවේ</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">සුරකින්න</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">යාවත්කාල නොකරන්න</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">දැන් නොවේ</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">යාවත්කාල</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">මුරපද ක්‍ෂේත්‍රය හිස් නොවිය යුතුය</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">මුරපදය යොදන්න</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">පිවිසුම සුරැකීමට නොහැකිය</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">මුරපදය සුරැකීමට නොහැකිය</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">මෙම පිවිසුම සුරකින්නද?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">මුරපදය සුරකින්නද?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">පිවිසුම සංශෝධනයක්ද?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">මුරපදය යාවත්කාල කරන්නද?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">සුරැකි මුරපදයට පරි. නාමය එක් කරන්නද?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">පෙළ ආදාන ක්‍ෂේත්‍රයක් ඇතුල් කිරීමට නම්පත</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">වර්ණයක් තෝරන්න</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">ඉඩ දෙන්න</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">ප්‍රතික්‍ෂේප</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">ඔබට විශ්වාස ද?</string>
+
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">ඔබට මෙම අඩවිය හැර යාමට අවශ්‍යද? ඔබ ඇතුල් කළ දත්ත නොසුරැකෙනු ඇත</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">රැඳෙන්න</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">හැරයන්න</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">මාසයක් තෝරන්න</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">දුරුතු</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">නවම්</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">මැදින්</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">බක්</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">වෙසක්</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">පොසොන්</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">ඇසළ</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">නිකිණි</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">බිනර</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">වප්</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">ඉල්</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">උඳු</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">කාලය සකසන්න</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">පිවිසුම් කළමනාකරණය</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">මුරපද කළමනාකරණය</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">යෝජිත පිවිසුම් විහිදන්න</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">සුරැකි මුරපද විහිදන්න</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">යෝජිත පිවිසුම් හකුලන්න</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">සුරැකි මුරපද හකුළන්න</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">යෝජිත පිවිසුම්</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">සුරැකි මුරපද</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">ශක්තිමත් මුරපදයක් යෝජනා කරන්න</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">ශක්තිමත් මුරපදයක් යෝජනා කරන්න</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">ශක්තිමත් මුරපදයක් භාවිතා කරන්න: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">අඩවියට දත්ත යළි යවන්නද?</string>
+ <string name="mozac_feature_prompt_repost_message">මෙම පිටුව නැවුම් කිරීමෙන් ගෙවීමක් යැවීම හෝ අදහසක් පළ කිරීම වැනි මෑත ක්‍රියාමාර්ග දෙවරක් අනුපිටපත් විය හැකිය.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">දත්ත යළි යවන්න</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">අවලංගු</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">ණයපතක් තෝරන්න</string>
+
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">සුරැකි පත යොදාගන්න</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">යෝජිත ණයපත් විහිදන්න</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">සුරැකි පත් විහිදන්න</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">යෝජිත ණයපත් හකුලන්න</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">සුරැකි පත් හකුළන්න</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">ණයපත් කළමනාකරණය</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">පත් කළමනාකරණය</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">මෙම පත ආරක්‍ෂිතව සුරකින්නද?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">පත ඉකුත්වන දිනය යාවත්කාල කරන්නද?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">පතෙහි අංකය සංකේතනය වනු ඇත. ආරක්‍ෂණ කේතය සුරැකෙන්නේ නැත.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s ඔබගේ පතෙහි අංකය සංකේතනය කරයි. ඔබගේ ආරක්‍ෂණ කේතය සුරැකෙන්නේ නැත.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">ලිපිනය තෝරන්න</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">යෝජිත ලිපින විහිදන්න</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">සුරැකි ලිපින විහිදන්න</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">යෝජිත ලිපින හකුලන්න</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">සුරැකි ලිපින හකුළන්න</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">ලිපින කළමනාකරණය</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">ගිණුමේ ඡායාරූපය</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">පිවිසුම් ප්‍රතිපාදකයක් තෝරන්න</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">%1$s ගිණුමකින් පිවිසෙන්න</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">පිවිසුම් ප්‍රතිපාදකයක් ලෙස %1$s යොදාගන්න</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ %2$s ගිණුමක් සමඟින් %1$s වෙත පිවිසීමෙන් ඔවුන්ගේ <a href="%4$s">සේවාවේ නියම</a> සහ <a href="%3$s">රහස්‍යතා ප්‍රතිපත්තියට</a> යටත් වේ]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">ඉදිරියට</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">අවලංගු</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-sk/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-sk/strings.xml
new file mode 100644
index 0000000000..b0d1818daa
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-sk/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Zrušiť</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Zabrániť tejto stránke otvárať ďalšie okná</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Nastaviť</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Vymazať</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Prihlásiť sa</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Používateľské meno</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Heslo</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Neuložiť</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Teraz nie</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Nikdy neukladať</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Teraz nie</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Uložiť</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Neaktualizovať</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Teraz nie</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Aktualizovať</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Pole s heslom nesmie byť prázdne</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Zadajte heslo</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Prihlasovacie údaje sa nepodarilo uložiť</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Heslo nie je možné uložiť</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Chcete uložiť tieto prihlasovacie údaje?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Uložiť heslo?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Chcete aktualizovať tieto prihlasovacie údaje?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Aktualizovať heslo?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Chcete k uloženému heslu pridať používateľské meno?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Štítok na zadanie poľa pre zadávanie textu</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Vyberte farbu</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Povoliť</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Zakázať</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Naozaj?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Chcete zostať na tejto stránke? Zadané údaje nemusia byť uložené</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Zostať</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Odísť</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Výber mesiaca</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Jan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Apr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Máj</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Jún</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Júl</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Aug</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sep</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Okt</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dec</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Nastaviť čas</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Spravovať prihlasovacie údaje</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Spravovať heslá</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Rozbaliť navrhované prihlasovacie údaje</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Rozbaliť uložené heslá</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Zbaliť navrhované prihlasovacie údaje</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Zbaliť uložené heslá</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Navrhované prihlasovacie údaje</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Uložené heslá</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Navrhnúť silné heslo</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Navrhnúť silné heslo</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Použiť silné heslo: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Znova odoslať údaje tejto stránke?</string>
+ <string name="mozac_feature_prompt_repost_message">Obnovením tejto stránky môžete zopakovať posledné akcie, ako je odosielanie platby alebo opätovné uverejnenie komentára.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Znova odoslať údaje</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Zrušiť</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Vyberte platobnú kartu</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Použiť uloženú kartu</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Rozbaliť navrhované platobné karty</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Rozbaliť uložené karty</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Zbaliť navrhované platobné karty</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Zbaliť uložené karty</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Spravovať platobné karty</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Spravovať karty</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Bezpečne uložiť túto kartu?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Aktualizovať dátum vypršania platnosti karty?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Číslo karty bude zašifrované. Bezpečnostný kód sa neuloží.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s zašifruje číslo vašej karty. Váš bezpečnostný kód sa neuloží.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Vyberte adresu</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Rozbaliť navrhované adresy</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Rozbaliť uložené adresy</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Zbaliť navrhované adresy</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Zbaliť uložené adresy</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Spravovať adresy</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Obrázok účtu</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Vyberte poskytovateľa prihlásenia</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Prihláste sa pomocou účtu %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Použite %1$s ako poskytovateľa prihlásenia</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ Na prihlásenie do %1$s pomocou účtu %2$s sa vzťahujú <a href="%3$s">Pravidlá ochrany osobných údajov</a> a <a href="%4$s">Zmluvné podmienky</a> daného účtu]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Pokračovať</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Zrušiť</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-skr/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-skr/strings.xml
new file mode 100644
index 0000000000..66973e343c
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-skr/strings.xml
@@ -0,0 +1,190 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">ٹھیک ہے</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">منسوخ</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">ایں ورقے کوں وادھوں ڈائیلاگ بݨاوݨ کنوں روکو</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">ٹھیک کرو</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">صاف کرو</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">سائن ان</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">ورتݨ ناں</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">پاس ورڈ</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save" moz:removedIn="125" tools:ignore="UnusedResources">محفوظ نہ کرو</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2">ہݨ کائناں</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">کݙاہیں وی محفوظ نہ کرو</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">ہݨ کائناں</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">محفوظ کرو</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update" moz:removedIn="125" tools:ignore="UnusedResources">اپ ڈیٹ نہ کرو</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2">ہݨ کائناں</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">اپ ڈیٹ کرو</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password" moz:removedIn="125" tools:ignore="UnusedResources">پاس ورڈ خانہ خالی کائنی ہووݨاں چاہیدا</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2">پاس ورڈ درج کرو</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause" moz:removedIn="125" tools:ignore="UnusedResources">لاگ ان محفوظ کرݨ کنوں قاصر</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2">پاس ورڈ محفوظ کائنی کر سڳدا</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline" moz:removedIn="125" tools:ignore="UnusedResources">ایہ لاگ ان محفوظ کروں؟</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2">پاس ورڈ محفوظ کروں؟</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline" moz:removedIn="125" tools:ignore="UnusedResources">ایہ لاگ ان اپ ڈیٹ کروں؟</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2">پاس ورڈ اپ ڈیٹ کروں؟</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">محفوظ تھئے پاس ورڈ وچ ورتݨ ناں شامل کروں؟</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">عبارت ان پُٹ خانے وچ درج کرݨ کیتے لیبل</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">رنگ چُݨو</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">اجازت ݙیوو</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">انکار کرو</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">بھلا تہاکوں پک ہے؟</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">بھلا تساں ایہ سائٹ چھوڑݨ چاہندے ہو؟ تھی سڳدے تہاݙا درج تھیا ڈیٹا محفوظ نہ تھیوے</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">راہوو</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">چھوڑو</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">ہک مہینہ چُݨو</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">جنورى</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">فرورى</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">مارچ</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">اپريل</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">مئی</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">جون</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">جولائى</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">اگست</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">ستمبر</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">اکتوبر</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">نومبر</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">دسمبر</string>
+
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">وقت ٹھیک کرو</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins" moz:removedIn="125" tools:ignore="UnusedResources">لاگ ان منیج کرو</string>
+
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2">پاس ورڈز دا بندوبست کرو</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">تجویز تھئے لاگ اناں کوں ودھاؤ</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2">محفوظ تھئے پاس ورڈ کھنڈاؤ</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">تجویز تھئے لاگ اناں کوں کٹھا کرو</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2">محفوظ تھئے پاس ورڈ ولھیٹو</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins" moz:removedIn="125" tools:ignore="UnusedResources">تجویز تھئے لاگ ان</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2">محفوظ تھئے پاس ورڈ</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">تکڑا پاس ورڈ تجویز کرو</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">تکڑا پاس ورڈ تجویز کرو</string>
+
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">تَکڑا پاس ورڈ وَرتو: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">ایں سائٹ تے ڈیٹا ولدا بھیڄوں؟</string>
+ <string name="mozac_feature_prompt_repost_message">ایں ورقے کوں تازہ کرݨ نال حالیہ عملاں دی ݙوجھی نقل بݨ سڳدی ہے۔ جیویں جو پیسیاں دی ادائیگی پٹھݨ یا ݙو واری تبصرہ کرݨ۔</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">ڈیٹا ولدا پٹھو</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">منسوخ</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card" moz:removedIn="125" tools:ignore="UnusedResources">کریڈٹ کارڈ چݨو</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2">محفوظ تھیا کارڈ ورتو</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">تجویز تھئے کریڈٹ کارڈاں کوں ودھاؤ</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2">محفوظ تھئے کارڈ کھنڈاؤ</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">تجویز تھئے کریڈٹ کارڈاں کوں کٹھا کرو</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2">محفوظ تھئے کارڈ ولھیٹو</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards" moz:removedIn="125" tools:ignore="UnusedResources">کریڈیٹ کارڈ منیج کرو</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2">کارڈز منیج کرو</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">ایہ کارڈ حفاظت نال محفوظ کروں؟</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">کارڈ مُکݨ تریخ اپ ڈیٹ کروں؟</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body" moz:removedIn="125" tools:ignore="UnusedResources">کارڈ نمبر دی خفیہ کاری کیتی ویسی۔ حفاظتی کوڈ محفوظ کائناں کیتا ویسی۔</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2">%s تُہاݙے کارڈ نمبر کوں انکرپٹ کرین٘دا ہِے۔ تُہاݙا سیکیورٹی کوڈ محفوظ کائناں تھیسی۔</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">پتہ چُݨو</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">تجویز تھئے پتیاں کوں ودھاؤ</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2">محفوظ تھئے پتے کھنڈاؤ</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">تجویز تھئے پتیاں کوں کٹھا کرو</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2">محفوظ تھئے پتے ولھیٹو</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">پتے منیج کرو</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">کھاتہ تصویر</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">لاگ ان مہیا کار چݨو</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">%1$s کھاتے نال سائن ان تھیوو</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">%1$s کوں لاگ ان مہیاکار دے طور تے ورتو</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ہِک %2$s اکاؤنٹ دے نال %1$s وِچ لاگ اِن کرݨ اِنّھاں دے <a href="%3$s">رازداری پالیسی</a> اَتے <a href="%4$s">خدمت دیاں شرطاں</a>دے تابع ہِے۔]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">جاری</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">منسوخ</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-sl/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-sl/strings.xml
new file mode 100644
index 0000000000..dec932c1c5
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-sl/strings.xml
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">V redu</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Prekliči</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Tej strani prepreči ustvarjanje novih pogovornih oken</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Nastavi</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Počisti</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Prijava</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Uporabniško ime</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Geslo</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Ne shrani</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Ne zdaj</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Nikoli ne shranjuj</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Ne zdaj</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Shrani</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Ne posodobi</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Ne zdaj</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Posodobi</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Polje za geslo ne sme biti prazno</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Vnesite geslo</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Ni mogoče shraniti povezave</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Gesla ni mogoče shraniti</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Shranim to prijavo?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Posodobim to prijavo?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Dodaj shranjenemu geslu uporabniško ime?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Oznaka polja za vnos besedila</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Izberite barvo</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Dovoli</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Zavrni</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Ali ste prepričani?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Ali res želite zapustiti to spletno mesto? Podatki, ki ste jih vnesli, morda ne bodo shranjeni</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Ostani na strani</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Zapusti stran</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Izberi mesec</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Jan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Apr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Maj</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Jun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Jul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Avg</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sep</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Okt</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dec</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Nastavi čas</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Upravljanje prijav</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Upravljanje gesel</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Razširi predlagane prijave</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Prikaži shranjena gesla</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Strni predlagane prijave</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Skrij shranjena gesla</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Predlagane prijave</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Shranjena gesla</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Predlagaj močno geslo</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Predlagaj močno geslo</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Uporabi močno geslo: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Ponovno pošlji podatke spletnemu mestu?</string>
+ <string name="mozac_feature_prompt_repost_message">Osvežitev te strani lahko podvoji nedavna dejanja, kot je pošiljanje plačila ali objava komentarja.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Znova pošlji podatke</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Prekliči</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Izberite kreditno kartico</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Uporabi shranjeno kartico</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Razširi predlagane kreditne kartice</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Prikaži shranjene kartice</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Strni predlagane kreditne kartice</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Skrij shranjene kartice</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Upravljanje kreditnih kartic</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Upravljanje kartic</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Želite varno shraniti to kartico?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Posodobi datum poteka veljavnosti kartice?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Številka kartice bo šifrirana. Varnostna koda ne bo shranjena.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s šifrira številko vaše kartice. Varnostna koda se ne bo shranila.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Izbira naslova</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Razširi predlagane naslove</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Prikaži shranjene naslove</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Strni predlagane naslove</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Skrij shranjene naslove</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Upravljanje naslovov</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Slika računa</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Izberite ponudnika prijave</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Prijava z računom %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Uporabi %1$s kot ponudnika prijave</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[Pri prijavi v %1$s z računom %2$s veljajo njihovi <a href="%4$s">pogoji uporabe</a> in <a href="%3$s">pravilnik o zasebnosti</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Nadaljuj</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Prekliči</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-sq/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-sq/strings.xml
new file mode 100644
index 0000000000..8a5a8bcaff
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-sq/strings.xml
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Anuloje</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Pengoja kësaj faqeje krijimin e dialogëve shtesë</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Vëre</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Spastroje</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Hyni</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Emër përdoruesi</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Fjalëkalim</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Mos e ruaj</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Jo tani</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Mos e ruaj kurrë</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Jo tani</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Ruaje</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Mos e përditëso</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Jo tani</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Përditësoje</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Fusha e fjalëkalimit s’duhet të jetë e zbrazët</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Jepni një fjalëkalim</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">S’arrihet të ruhen kredenciale hyrjesh</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">S’ruhet dot fjalëkalimi</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Të ruhen këto kredenciale hyrjesh?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Të ruhet fjalëkalimi?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Të përditësohen këto kredenciale hyrjesh?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Të përditësohet fjalëkalimi?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Të shtohet emri i përdoruesit te fjalëkalimi i ruajtur?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Etiketë për dhënie te një fushë futjeje tekstesh</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Zgjidhni një ngjyrë</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Lejoje</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Mohoje</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Jeni i sigurt?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Doni ta braktisni këtë sajt? Të dhënat që keni dhënë mund të mos ruhen</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Qëndro</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Braktise</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Zgjidhni një muaj</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Jan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Shk</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Pri</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Maj</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Qer</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Kor</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Gus</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sht</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Tet</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nën</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dhj</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Ujdisni kohën</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Administroni kredenciale hyrjesh</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Administroni fjalëkalime</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Zgjeroji kredencialet e sugjeruara të hyrjeve</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Zgjero fjalëkalimet e ruajtur</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Tkurri kredencialet e sugjeruara të hyrjeve</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Tkurri fjalëkalimet e ruajtur</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Kredenciale të sugjeruara hyrjesh</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Fjalëkalime të ruajtur</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Sugjero fjalëkalim të fuqishëm</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Sugjero fjalëkalim të fuqishëm</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Përdor fjalëkalim të fuqishëm: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Të ridërgohen të dhëna te ky sajt?</string>
+ <string name="mozac_feature_prompt_repost_message">Rifreskimi i kësaj faqeje mund të përsëdytëte veprime tani së fundi, të tilla si dërgimi i një pagese apo postimi i një komenti dy herë.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Ridërgoji të dhënat</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Anuloje</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Përzgjidhni kartë krediti</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Përdor kartë të ruajtur</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Zgjero karta kreditit të sugjeruara</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Zgjero karta të ruajtura</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Tkurri kartat e kreditit të sugjeruara</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Tkurri kartat e ruajtura</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Administroni karta krediti</string>
+
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Administroni karta</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Të ruhet në mënyrë të sigurt kjo kartë?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Të përditësohet data e skadimit të kartës?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Numri i kartës do të fshehtëzohet. Kodi i sigurisë s’do të ruhet.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s-i e fshehtëzon numrin e kartës tuaj. Kodi juaj i sigurisë s’do të ruhet.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Përzgjidhni adresë</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Zgjeroji adresat e sugjeruara</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Zgjeroji adresat e ruajtura</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Tkurri adresat e sugjeruara</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Tkurri adresat e ruajtura</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Administroni adresa</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Foto llogarie</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Zgjidhni një shërbim hyrjesh</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Bëni hyrjen me një llogari %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Përdor %1$s si shërbim hyrjesh</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[Hyrja te %1$s me një llogari %2$s është subjekt i <a href="%3$s">Rregullave të Privatësisë</a> dhe <a href="%4$s">Kushteve të Shërbimit</a> të tyre]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Vazhdo</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Anuloje</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-sr/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-sr/strings.xml
new file mode 100644
index 0000000000..a231fed4e9
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-sr/strings.xml
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">ОК</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Откажи</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Онемогући овој страници да ствара додатне дијалоге</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Постави</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Обриши</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Пријави се</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Корисничко име</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Лозинка</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Немој сачувати</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Никада не чувај</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Не сада</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Сачувај</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Немој ажурирати</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Ажурирај</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Поље за лозинку не сме бити празно</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Није могуће сачувати пријаву</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Сачувати ову пријаву?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Ажурирати ову пријаву?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Додати корисничко име у сачувану лозинку?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Ознака за попуњавање поља за унос текста</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Изаберите боју</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Дозволи</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Забрани</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Да ли сте сигурни?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Да ли желите да напустите ову страницу? Подаци које сте унели се можда неће сачувати</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Остани</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Напусти</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Изаберите месец</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Јан</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Феб</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Мар</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Апр</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Мај</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Јун</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Јул</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Авг</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Сеп</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Окт</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Нов</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Дец</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Постави време</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Управљај пријавама</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Прошири предложене пријаве</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Скупи предложене пријаве</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Предложене пријаве</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Желите ли поново послати податке на ову страницу?</string>
+ <string name="mozac_feature_prompt_repost_message">Освежавање ове странице може резултовати дуплирањем недавних радњи, као што је дупло слање уплате или постављање коментара.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Поново пошаљи податке</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Откажи</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Изабери кредитну картицу</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Рашири препоручене кредитне картице</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Скупи препоручене кредитне картице</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Управљај кредитним картицама</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Безбедно сачувати ову картицу?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Ажурирати датум истека картице?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Број картице биће шифрован. Безбедносни код неће бити сачуван.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Изабери адресу</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Рашири предложене адресе</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Скупи предложене адресе</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Управљај адресама</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Слика налога</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Изаберите добављача за пријаву</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Пријавите се преко %1$s налога</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Користите %1$s као добављач пријављивања</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[Пријављивање на %1$s преко %2$s налога подлеже њиховој <a href="%3$s">политици приватности</a> и <a href="%4$s">условима коришћења</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Настави</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Откажи</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-su/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-su/strings.xml
new file mode 100644
index 0000000000..8069cf1b66
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-su/strings.xml
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">HEUG</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Bolay</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Nyegah ieu kaca tina ngadamel dialog anu sanés</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Setél</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Beresihan</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Asup</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Sandiasma</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Kecap sandi</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Ulah diteundeun</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Ulah diteundeun</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Engké deui</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Teundeun</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Ulah ngapdét</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Apdét</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Widang kecap sandi henteu kaci kosong</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Teu bisa neundeun login</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Teundeun ieu login?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Apdét ieu login?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Tambahkeun sandiasma kana kecap sandi anu diteundeun?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Label pikeun nuliskeun widang input téks</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Pilih kelir</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Idinan</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Tolak</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Anjeun yakin?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Arék ninggalkeun ieu loka? Data anu geus diasupkeun bisa leungit</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Cicing</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Tinggalkeun</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Pilih sasih</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Jan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Péb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Apr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Méi</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Jun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Jul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Agu</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sép</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Okt</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nop</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dés</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Setél wanci</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Kokolakeun login</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Legaan saran login</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Leutikan saran login</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Saran login</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Usulkeun kecap sandi anu wedel</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Usulkeun kecap sandi anu wedel</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Paké kecap sandi anu wedel: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Kirimkeun deui data ka ieu loka?</string>
+ <string name="mozac_feature_prompt_repost_message">Nyegerkeun ieu kaca bisa ngaduplikasi peta panganyarna, contona mayar atawa ngirim koméntar dua kali.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Kirimkeun deui data</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Bolay</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Pilih kartu kiridit</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Legaan kartu kiridit anu disarankeun</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Tilep saran kartu kiridit</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Kokolakeun kartu kiridit</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Teundeun ieu kartu sacara aman?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Mutahirkeun titimangsa kadaluwarsa kartu?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Nomer kartu bakal diénkrip. Kode kaamanan moal diteundeun.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Pilih alamat</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Legaan saran alamat</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Leutikan saran alamat</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Kokolakeun alamat</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Gambar akun</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Pilih panyadia login</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Asup maké akun %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Paké %1$s salaku panyadia login</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[Asup log ka %1$s maké akun %2$s nurut kana <a href="%3$s">Kawijakan Pripasi</a> jeung <a href="%4$s">Katangtuan Layanan.</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Tuluykeun</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Bolay</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-sv-rSE/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-sv-rSE/strings.xml
new file mode 100644
index 0000000000..a4c4cb0a83
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-sv-rSE/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Avbryt</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Förhindra att den här sidan skapar fler dialogrutor</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Ange</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Rensa</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Logga in</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Användarnamn</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Lösenord</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Spara inte</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Inte nu</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Spara aldrig</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Inte nu</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Spara</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Uppdatera inte</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Inte nu</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Uppdatera</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Lösenordsfältet får inte vara tomt</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Ange ett lösenord</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Kunde inte spara inloggningsuppgifter</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Det går inte att spara lösenordet</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Spara den här inloggningen?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Spara lösenord?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Vill du uppdatera den här inloggningen?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Uppdatera lösenord?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Lägg till användarnamn till det sparade lösenordet?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Etikett för att ange ett textinmatningsfält</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Välj en färg</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Tillåt</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Neka</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Är du säker?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Vill du lämna den här webbplatsen? Data du har angett kanske inte sparas</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Stanna</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Lämna</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Välj en månad</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Jan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Apr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Maj</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Jun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Jul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Aug</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sep</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Okt</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dec</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Ange tid</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Hantera inloggningar</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Hantera lösenord</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Expandera föreslagna inloggningar</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Expandera sparade lösenord</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Komprimera föreslagna inloggningar</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Komprimera sparade lösenord</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Föreslagna inloggningar</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Sparade lösenord</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Föreslå ett starkt lösenord</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Föreslå ett starkt lösenord</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Använd starkt lösenord: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Skicka data igen till den här webbplatsen?</string>
+ <string name="mozac_feature_prompt_repost_message">Uppdatering av den här sidan kan duplicera senaste åtgärder, till exempel att skicka en betalning eller lägga upp en kommentar två gånger.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Skicka data igen</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Avbryt</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Välj kreditkort</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Använd sparat kort</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Expandera föreslagna kreditkort</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Expandera sparade kort</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Komprimera föreslagna kreditkort</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Komprimera sparade kort</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Hantera kreditkort</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Hantera kort</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Vill du spara det här kortet säkert?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Uppdatera kortets utgångsdatum?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Kortnummer kommer att krypteras. Säkerhetskoden kommer inte att sparas.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s krypterar ditt kortnummer. Din säkerhetskod kommer inte att sparas.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Välj adress</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Expandera föreslagna adresser</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Expandera sparade adresser</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Komprimera föreslagna adresser</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Komprimera sparade adresser</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Hantera adresser</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Kontobild</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Välj en inloggningsleverantör</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Logga in med ett %1$s-konto</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Använd %1$s som inloggningsleverantör</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ Att logga in på %1$s med ett %2$s-konto omfattas av deras <a href="%3$s">sekretesspolicy</a> och <a href="%4$s">användarvillkor </a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Fortsätt</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Avbryt</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-ta/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ta/strings.xml
new file mode 100644
index 0000000000..c65df4f77b
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ta/strings.xml
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">சரி</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">இரத்து</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">கூடுதல் உரையாடல்களை உருவாக்குவதிலிருந்து இந்தப் பக்கத்தைத் தடுக்கவும்</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">அமை</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">துடை</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">உள்நுழை</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">பயனர்பெயர்</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">கடவுச்சொல்</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">சேமிக்காதே</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">ஒருபோதும் சேமிக்காதே</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">சேமி</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">புதுப்பிக்காதே</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">புதுப்பி</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">கடவுச்சொல் களம் காலியாக இருக்கக்கூடாது</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">புகுபதிகையைச் சேமிக்க இயலவில்லை</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">இப்புகுபதிகையைச் சேமிக்கவா?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">இப்புகுபதிகையைப் புதுப்பிக்கவா?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">சேமிக்கப்பட்ட கடவுச்சொல்லிற்குப் பயனர்பெயரைச் சேர்க்கவா?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">உரை உள்ளீட்டுக் களத்தில் உள்ளிடுவதற்கான அடையாளம்</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">வண்ணத்தைத் தேர்வுசெய்க</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">அனுமதி</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">நிராகரி</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">உறுதியாக?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">இத்தளத்தை விட்டு வெளியேற விரும்புகிறீர்களா? நீங்கள் உள்ளிட்ட தரவு சேமிக்கப்படாமல் போகலாம்</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">இரு</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">வெளியேறு</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">ஒரு மாதத்தை தேர்ந்தெடு</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">ஜன</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">பிப்</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">மார்</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">ஏப்</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">மே</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">யூன்</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">யூலை</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">ஆக</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">செப்</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">அக்</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">நவ</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">டிச</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">உள்நுழைவுகளை நிர்வகி</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">பரிந்துரைத்த உள்நுழைவுகளை விரிவாக்குங்கள்</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">பரிந்துரைத்த உள்நுழைவுகளை விரிவாக்கு</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">பரிந்துரைத்த உள்நுழைவுகள்</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">இத்தளத்திற்குத் தரவை மீண்டும் அனுப்பவா?</string>
+ <string name="mozac_feature_prompt_repost_message">இந்தப் பக்கத்தைப் புதுப்பிப்பது அண்மையச் செயல்களை திரும்பச் செய்யக்கூடும், இருமுறை பணம் அனுப்புதல் அல்லது இருமுறை கருத்திடல் போன்றவை.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">தரவை மீண்டும் அனுப்பு</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">இரத்துசெய்</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-te/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-te/strings.xml
new file mode 100644
index 0000000000..292fec853a
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-te/strings.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">సరే</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">రద్దుచేయి</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">అదనపు డైలాగులు సృష్టించకుండా ఈ పేజీని నివారించు</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">అమర్చు</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">తుడిచివేయి</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">ప్రవేశించు</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">వాడుకరి పేరు</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">సంకేతపదం</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">భద్రపరచవద్దు</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">ఎప్పుడూ భద్రపరచవద్దు</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">ఇప్పుడు కాదు</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">భద్రపరుచు</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">తాజాకరించవద్దు</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">తాజాకరించు</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">సంకేతపదం ఖాళీగా ఉండకూడదు</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">ప్రవేశ వివరాలను భద్రపరచలేకపోతున్నాం</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">ఈ ప్రవేశాన్ని భద్రపరచాలా?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">ఈ ప్రవేశాన్ని తాజాకరించాలా?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">భద్రపరచిన సంకేతపదానికి వాడుకరి పేరును చేర్చాలా?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">పాఠ్య ఖాళీని పూరించడానికి లేబుల్</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">ఒక రంగును ఎంచుకోండి</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">అనుమతించు</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">తిరస్కరించు</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">మీరు నిశ్చితమేనా?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">ఈ సైటును వదిలి వెళ్లాలనుకుంటున్నారా? మీరు నమోదు చేసిన డేటా భద్రపరచబడకపోవచ్చు</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">ఉండు</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">వదలివెళ్ళు</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">ఒక నెల ఎంచుకోండి</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">జన</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">ఫిబ్ర</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">మార్చి</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">ఏప్రి</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">మే</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">జూన్</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">జూలై</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">ఆగ</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">సెప్టెం</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">అక్టో</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">నవం</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">డిసెం</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">ప్రవేశాలను నిర్వహించండి</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">సూచించిన ప్రవేశాలను విస్తరించు</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">సూచించిన ప్రవేశాలను కుదించు</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">సూచించిన ప్రవేశాలు</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">ఈ సైటుకి డేటాని మళ్ళీ పంపాలా?</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">డేటాను మళ్ళీ పంపించు</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">రద్దుచేయి</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-tg/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-tg/strings.xml
new file mode 100644
index 0000000000..58703d132c
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-tg/strings.xml
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">ХУБ</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Бекор кардан</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Ин саҳифаро аз эҷоди равзанаҳои гуфтугӯии иловагӣ пешгирӣ намоед</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Танзим кардан</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Пок кардан</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Ворид шудан</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Номи корбар</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Ниҳонвожа</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Нигоҳ дошта нашавад</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Ҳоло не</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Ҳеҷ гоҳ нигоҳ дошта нашавад</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Ҳоло не</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Нигоҳ доштан</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Навсозӣ карда нашавад</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Ҳоло не</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Навсозӣ кардан</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Ҷойи ниҳонвожа бояд холӣ набошад</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Ниҳонвожаеро ворид намоед</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Нигоҳ доштани маълумоти воридшавӣ ғайриимкон аст</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Ниҳонвожа нигоҳ дошта нашуд</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Маълумоти воридшавии ҷориро нигоҳ медоред?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Ниҳонвожаро нигоҳ медоред?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Маълумоти воридшавии ҷориро аз нав нигоҳ медоред?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Ниҳонвожаро аз нав нигоҳ медоред?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Номи корбарро ба ниҳонвожаи нигоҳдошташуда илова мекунед?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Нишона барои ворид кардани майдони воридкунии матн</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Рангеро интихоб кунед</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Иҷозат додан</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Рад кардан</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Шумо мутмаин ҳастед?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Шумо мехоҳед, ки ин сомонаро тарк намоед? Маълумоте, ки шумо ворид кардед, метавонад нигоҳ дошта нашавад</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Истодан</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Тарк кардан</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Моҳеро интихоб намоед</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Янв</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Фев</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Мар</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Апр</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Май</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Июн</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Июл</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Авг</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Сен</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Окт</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Ноя</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Дек</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Танзими вақт</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Идоракунии воридшавӣ</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Идоракунии ниҳонвожаҳо</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Намоиш додани воридшавиҳои пешниҳодшуда</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Баркушодани ниҳонвожаҳои нигоҳдошташуда</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Пинҳон кардани воридшавиҳои пешниҳодшуда</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Пинҳон кардани ниҳонвожаҳои нигоҳдошташуда</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Воридшавиҳои пешниҳодшуда</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Ниҳонвожаҳои нигоҳдошташуда</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Пешниҳод кардани ниҳонвожаи боқувват</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Пешниҳод кардани ниҳонвожаи боқувват</string>
+
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Аз ниҳонвожаи қавӣ истифода баред: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Маълумотро ба ин сомона аз нав мефиристонед?</string>
+ <string name="mozac_feature_prompt_repost_message">Амали навсозии ин саҳифа метавонад амалҳои охиринро такрор намояд, масалан, амали пардохт ё интишори шарҳ метавонад дубора иҷро карда шавад.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Аз нав фиристодани маълумот</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Бекор кардан</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Корти кредитиро интихоб кунед</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Истифодаи корти нигоҳдошташуда</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Кортҳои кредитии пешниҳодшударо нишон диҳед</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Баркушодани кортҳои нигоҳдошташуда</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Кортҳои кредитии пешниҳодшударо пинҳон кунед</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Пинҳон кардани кортҳои нигоҳдошташуда</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Идоракунии кортҳои кредитӣ</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Идоракунии кортҳо</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Ин кортро ба таври бехатар нигоҳ медоред?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Санаи анҷоми муҳлати кори кортро нав мекунед?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Рақами корт рамзгузорӣ карда мешавад. Рамзи амниятӣ нигоҳ дошта намешавад.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">«%s» рақами корти шуморо рамзгузорӣ мекунад. Рамзи амниятии шумо нигоҳ дошта намешавад.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Интихоб кардани нишонӣ</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Намоиш додани нишониҳои пешниҳодшуда</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Баркушодани нишониҳои нигоҳдошташуда</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Пинҳон кардани нишониҳои пешниҳодшуда</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Пинҳон кардани нишониҳои нигоҳдошташуда</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Идоракунии нишониҳо</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Акси ҳисоб</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Интихоби таъминкунандаи воридшавӣ</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Бо ҳисоби «%1$s» ворид шавед</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Истифода бурдани «%1$s» ҳамчун таъминкунандаи воридшавӣ</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ Вақте ки шумо ба «%1$s» бо ҳисоби «%2$s» ворид мешавед, <a href="%3$s">Сиёсати махфият</a> ва <a href="%4$s">Шартҳои хизматрасонии</a> марбут ба он татбиқ карда мешавад]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Идома додан</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Бекор кардан</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-th/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-th/strings.xml
new file mode 100644
index 0000000000..b8bf2bd77c
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-th/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">ตกลง</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">ยกเลิก</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">ป้องกันไม่ให้หน้านี้แสดงกล่องโต้ตอบเพิ่มอีก</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">ตั้ง</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">ล้าง</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">ลงชื่อเข้า</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">ชื่อผู้ใช้</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">รหัสผ่าน</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">ไม่บันทึก</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">ยังไม่ทำตอนนี้</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">ไม่บันทึกเสมอ</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">ไม่ใช่ตอนนี้</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">บันทึก</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">ไม่อัปเดต</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">ยังไม่ทำตอนนี้</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">อัปเดต</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">ช่องป้อนรหัสผ่านจะต้องไม่ว่างเปล่า</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">ป้อนรหัสผ่าน</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">ไม่สามารถบันทึกการเข้าสู่ระบบ</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">ไม่สามารถบันทึกรหัสผ่านได้</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">บันทึกการเข้าสู่ระบบนี้?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">บันทึกรหัสผ่านหรือไม่?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">อัปเดตการเข้าสู่ระบบนี้?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">ปรับปรุงรหัสผ่านหรือไม่?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">เพิ่มชื่อผู้ใช้ในรหัสผ่านที่บันทึกไว้?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">ป้ายกำกับสำหรับช่องป้อนข้อความ</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">เลือกสี</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">อนุญาต</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">ปฏิเสธ</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">คุณแน่ใจหรือไม่?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">คุณต้องการออกจากไซต์นี้หรือไม่? ข้อมูลที่คุณใส่อาจไม่ถูกบันทึก</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">อยู่ต่อ</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">ออก</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">เลือกเดือน</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">ม.ค.</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">ก.พ.</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">มี.ค.</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">เม.ย.</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">พ.ค.</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">มิ.ย.</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">ก.ค.</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">ส.ค.</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">ก.ย.</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">ต.ค.</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">พ.ย.</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">ธ.ค.</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">ตั้งเวลา</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">จัดการการเข้าสู่ระบบ</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">จัดการรหัสผ่าน</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">ขยายการเข้าสู่ระบบที่เสนอแนะ</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">ขยายรหัสผ่านที่บันทึกไว้</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">ยุบการเข้าสู่ระบบที่เสนอแนะ</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">ยุบรหัสผ่านที่บันทึกไว้</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">การเข้าสู่ระบบที่เสนอแนะ</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">รหัสผ่านที่บันทึกไว้</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">แนะนำรหัสผ่านที่คาดเดายาก</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">แนะนำรหัสผ่านที่คาดเดายาก</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">ใช้รหัสผ่านที่คาดเดายาก: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">ส่งข้อมูลไปยังไซต์นี้อีกครั้งไหม</string>
+ <string name="mozac_feature_prompt_repost_message">การเรียกหน้านี้ใหม่อาจทำให้เกิดการกระทำซ้ำเช่นการส่งการชำระเงินหรือโพสต์ความคิดเห็นซ้ำ</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">ส่งข้อมูลอีกครั้ง</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">ยกเลิก</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">เลือกบัตรเครดิต</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">ใช้บัตรที่บันทึกไว้</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">ขยายบัตรเครดิตที่เสนอแนะ</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">ขยายบัตรที่บันทึกไว้</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">ยุบบัตรเครดิตที่เสนอแนะ</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">ยุบบัตรที่บันทึกไว้</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">จัดการบัตรเครดิต</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">จัดการบัตร</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">ต้องการบันทึกบัตรนี้อย่างปลอดภัยหรือไม่?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">ต้องการปรับปรุงวันหมดอายุบัตรหรือไม่?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">หมายเลขบัตรจะถูกเข้ารหัส รหัสความปลอดภัยจะไม่ถูกบันทึก</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s จะเข้ารหัสหมายเลขบัตรของคุณ รหัสความปลอดภัยของคุณจะไม่ถูกบันทึก</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">เลือกที่อยู่</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">ขยายที่อยู่ที่เสนอแนะ</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">ขยายที่อยู่ที่บันทึกไว้</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">ยุบที่อยู่ที่เสนอแนะ</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">ยุบที่อยู่ที่บันทึกไว้</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">จัดการที่อยู่</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">รูปภาพบัญชี</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">เลือกผู้ให้บริการเข้าสู่ระบบ</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">ลงชื่อเข้าด้วยบัญชี %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">ใช้ %1$s เป็นผู้ให้บริการเข้าสู่ระบบ</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[การลงชื่อเข้าใช้ %1$s ด้วยบัญชี %2$s อยู่ภายใต้<a href="%3$s">นโยบายความเป็นส่วนตัว</a>และ<a href="%4$s">ข้อกำหนดในการให้บริการ</a>ของผู้ให้บริการ]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">ดำเนินการต่อ</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">ยกเลิก</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-tl/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-tl/strings.xml
new file mode 100644
index 0000000000..ac77bdfebf
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-tl/strings.xml
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Kanselahin</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Pigilan ang pahinang ito sa pagpapakita ng mga karagdagang dialog</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Itakda</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Alisin</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Mag-sign in</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Username</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Password</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Huwag i-save</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Huwag kailanman i-save</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Hindi Ngayon</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">i-Save</string>
+
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Huwag i-update</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">I-update</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Hindi dapat blangko ang password field</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Hindi mai-save ang login</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">i-Save ang login na ito?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">i-Update ang pag-login na ito?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Idagdag ang username sa naka-save na password?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Label para sa paglagay sa text input field</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Pumili ng kulay</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Payagan</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Tanggihan</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Sigurado ka ba?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Gusto mo bang umalis sa site na ito? Hindi mase-save ang data na naipasok mo na</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Manatili</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Umalis na</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Pumili ng buwan</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Ene</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Peb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Abr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">May</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Hun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Hul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Ago</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Set</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Okt</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nob</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dis</string>
+
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">i-Manage ang mga login</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Palawakin ang mga minumungkahing login</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Itago ang mga minumungkahing login</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Mga minumungkahing login</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Muling ipadala ang data sa site na ito?</string>
+ <string name="mozac_feature_prompt_repost_message">Ang pag-refresh sa pahinang ito ay maaaring magpadoble ng mga aksyon, gaya ng pagpapadala ng bayad o mag-post ng komento nang dalawang beses.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Ipadala muli ang data</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Kanselahin</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Pumili ng credit card</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Palawakin ang naka-mungkahing mga credit card</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Itago ang mga minungkahing credit card</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Pamahalaan ang mga credit card</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">I save and Card</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">I update and expiration ng card?</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Mamili ng address</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Pamahalaan ang mga address</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-tok/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-tok/strings.xml
new file mode 100644
index 0000000000..888800ee55
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-tok/strings.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">pona</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">ala</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">o ken ala e lipu lili sin tan lipu ni</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">o weka</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">o kama</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">nimi</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">nimi open</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">o awen ala</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">ala la o awen</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">o awen</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">o sin ala</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">o sin</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">o pana e nimi open</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">mi ken ala awen e nimi open</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">o awen ala awen e nimi open ni?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">o sin ala sin e nimi open ni?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">sina pana ala pana e nimi tawa nimi open ni?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">nimi pi poki sitelen</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">o jo e kule</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">o ken</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">o ken ala</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">sina wile ala wile?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">sina weka ala weka tan lipu ni? sona sina li ken awen ala.</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">ala</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">weka</string>
+
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">o ante e nimi open</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">o lukin mute e nimi open</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">o lukin lili e nimi open mute</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">nimi open pi lipu ni</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">o pana ala pana sin e sona tawa lipu ni?</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">pana</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">ala</string>
+
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">o lukin mute e lipu mani</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">o lukin lili e lipu mani</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings -->
+ <string name="mozac_feature_prompts_manage_credit_cards">o ante e lipu mani</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-tr/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-tr/strings.xml
new file mode 100644
index 0000000000..868387a034
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-tr/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Tamam</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">İptal</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Bu sayfanın ek iletişim kutuları oluşturmasının önle</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Ayarlandı</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Temizle</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Giriş yap</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Kullanıcı adı</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Parola</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Kaydetme</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Şimdi değil</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Asla kaydetme</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Şimdi değil</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Kaydet</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Güncelleme</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Şimdi değil</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Güncelle</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Parola alanı boş olmamalıdır</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Parola girin</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Hesap kaydedilemedi</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Parola kaydedilemedi</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Bu hesap kaydedilsin mi?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Parola kaydedilsin mi?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Bu hesap güncellensin mi?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Parola güncellensin mi?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Kayıtlı parolaya kullanıcı adı eklensin mi?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Metin giriş alanı etiketi</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Bir renk seçin</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">İzin ver</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Reddet</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Emin misiniz?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Bu siteden çıkmak istiyor musunuz? Girdiğiniz veriler kaydedilmeyebilir</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Sitede kal</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Çık</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Bir ay seçin</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Oca</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Şub</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Nis</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">May</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Haz</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Tem</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Ağu</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Eyl</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Eki</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Kas</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Ara</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Zamanı ayarla</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Hesapları yönet</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Parolaları yönet</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Önerilen hesapları genişlet</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Kayıtlı parolaları genişlet</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Önerilen hesapları daralt</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Kayıtlı parolaları daralt</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Önerilen hesaplar</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Kayıtlı parolalar</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Güçlü parola öner</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Güçlü parola öner</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Güçlü parola kullan: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Veriler siteye yeniden gönderilsin mi?</string>
+ <string name="mozac_feature_prompt_repost_message">Bu sayfayı tazelemek, son yaptığınız eylemleri (örn. ödeme yapma veya yorum gönderme) tekrarlayabilir.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Verileri yeniden gönder</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">İptal</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Kredi kartı seç</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Kayıtlı kartı kullan</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Önerilen kredi kartlarını genişlet</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Kayıtlı kartları genişlet</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Önerilen kredi kartlarını daralt</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Kayıtlı kartları daralt</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Kredi kartlarını yönet</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Kartları yönet</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Bu kart güvenli bir şekilde kaydedilsin mi?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Kartın son kullanma tarihi güncellensin mi?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Kart numarası şifrelenecektir. Güvenlik kodu kaydedilmeyecektir.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s kart numaranızı şifreler. Güvenlik kodunuz kaydedilmez.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Adres seçin</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Önerilen adresleri genişlet</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Kayıtlı adresleri genişlet</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Önerilen adresleri daralt</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Kayıtlı adresleri daralt</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Adresleri yönet</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Hesap resmi</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Oturum açma sağlayıcısı seç</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">%1$s hesabıyla oturum aç</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Oturum açma sağlayıcısı olarak %1$s kullan</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[%2$s hesabıyla %1$s üzerinde oturum açtığınızda bu sağlayıcının <a href="%3$s">Gizlilik Politikası</a> ve <a href="%4$s">Hizmet Koşulları</a>’na tabi olursunuz]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">İleri</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Vazgeç</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-trs/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-trs/strings.xml
new file mode 100644
index 0000000000..3656a7f581
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-trs/strings.xml
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Gā\'ue</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Dūyichin\'</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Nāgi\'iaj da\' si giri pajinâ nan a\'ngô sa gīrij</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Nāgi\'iaj yītïnj</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Nā\'nïn\'</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Gāyi\'ì sēsiûn</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Si yūguî rè\'</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Da\'nga\' huìi</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Sī na\'nïn sà\'t</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Nitāj āmān nā\'nïnj sà\'t</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Sī ga\'hue akuan\' nïn</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Nā\'nïnj sà\'</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Sī nagi\'iaj nākàt</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Nāgi\'iaj nākà</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Nitāj si da\'ui gūnàj gātsì riña huāj da\'nga\' huìi</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Na\'ue nā\'nïnj sà\'aj riña gayì\'ìt sēsiûn</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Nā\'nïnj sà\'t riña gayì\'ìt sēsiûn nan anj.</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Nāgi\'iaj nākat riña gayì\'ìt sēsiûn nan anj.</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Nūtà\'t si yūguît riña da\'nga\' huì na\'nïn sà\' raj.</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Gāchrūn \'ngō etikêta si ruhuât gātūy hiūj dan</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Nāguī \'ngō kōlô</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Gā\'nïn</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Sī ga\'nïnjt</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Huā nīkā ruhuâ raj.</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Ruhuât gāhuīt riña sitiô nan anj. Ga\'ue nārè\' nej nuguan\' ngà duguatûjt</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Gūnàj gīnut</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Gāhuī riña sîtio</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Nāguī \'ngō ahuii</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Ahui yi\'î hio\'o</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Ahui gūdukuu</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Ahui unu\'</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Ahui ñan\'ānj du\'ui</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Ahui diû huaan</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Ahui numân gumàan</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Ahui hiej</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Ahui yi\'naa</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Ahui umin rikî\'</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Ahui nîma</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Ahui Sāndrisìi</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Ahui hio\' yi</string>
+
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Gānïn ‘ngō diû</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Gīni’hiāj rayi’î riña ayi’ìt sēsiûn</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Nāgi’hiaj nìko nej riña ayi’ìt sesiûn huaa</string>
+
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Gāchrī huì nej riña ayi’ìt sesiûn huaa</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Nej riña ayi’ìt sesiûn huaa</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Nā’nïnjt nej dato riña sitiô nan anj.</string>
+ <string name="mozac_feature_prompt_repost_message">Sisī nāgi’hiaj nākàt pajinâ nan nī gā’hue nāhuin huà’ nej sa gi’hiaj nākàt, dàj rû’ gā’nïnjt ‘ngō san’ānj an asi huà’ gāhuī ‘ngō nuguan’ gā’nïnjt.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Nā’nïnj ñû gān’ānj nej dâto</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Dūyichin\'</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Nāguī tarjeta san’ānj an</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Nāgi’hiaj da’ gatū doj nej tarjeta san’ānj an</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Gāchrī huì nej tarjeta san’ānj huāa</string>
+
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Ni’hiāj dàj gā nej tarjeta san’ānj an</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Nā’nïnj sà’ hue’êt tarjeta nan anj.</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Nāgi’hiāj nākàt diû gisìj gīrè’ tarjeta nan anj</string>
+
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Nāruguì’ da’ga’ nīkāj si tarjetât. Si nanun sà’ da’nga’ gāhui rayi’ij.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Nāguī ‘ngō dīreksiûn</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Nāgi’hiaj nìko nej direksiûn huaa</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Gāchrī huì nej direksiûn huaa</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Ni’hiāj dàj gā nej dīreksiûn</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Ñadu’hua ginù riña kuênda</string>
+ <!-- Title of the Identity Credential provider dialog choose. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Nāna’huì’ ‘ngō sa rūgûñu’ūnj gāyi’ì’ sēsiûn</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Gārasun %1$s da’ rūgûñu’ūnj man gāyi’ìt sēsiûn</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ Gāyi’ì sēsiûn riña %1$s ngà ‘ngō %2$s kuendâ nīkò’ rukû <a href="%3$s">Nuguan’ guendâ gā huì gāchē nunt</a> nī <a href="%4$s">Sa da’huît gīni’înt da’ gā’hue gārasunt</a>]]></string>
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-tt/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-tt/strings.xml
new file mode 100644
index 0000000000..497b129f7f
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-tt/strings.xml
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">ОК</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Баш тарту</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Бу битне өстәмә диалог тәрәзәләрен ачудан тый</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Урнаштыру</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Чистарту</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Керү</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Кулланучы исеме</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Парол</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Сакламау</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Беркайчан да cакламау</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Хәзер түгел</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Саклау</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Яңартмау</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Яңарту</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Серсүз кыры буш булырга тиеш түгел</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Логинны саклап булмый</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Бу логин саклансынмы?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Бу логин яңартылсынмы?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Сакланган серсүз янына кулланучы исеме өстәлсенме?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Текст кертү кырының тамгасы</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Төс сайлау</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Рөхсәт итү</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Кире кагу</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Моны раслыйсызмы?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Сез бу сайттан чыгарга телисезме? Сез керткән мәгълүмат сакланмаган булырга мөмкин</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Калу</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Чыгу</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Айны сайлау</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Гый</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Фев</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Мар</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Апр</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Май</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Июн</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Июл</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Авг</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Сен</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Окт</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Ноя</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Дек</string>
+
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Вакытны билгеләү</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Логиннар белән идарә итү</string>
+
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Тәкъдим ителгән логиннарны киңәйтү</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Тәкъдим ителгән логиннарны төрү</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Тәкъдим ителгән логиннар</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Бу сайтка мәгълүматны яңадан җибәрергәме?</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Мәгълүматны яңадан җибәрү</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Баш тарту</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Кредит картасын сайлау</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Тәкъдим ителгән кредит карталарын җәю</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Тәкъдим ителгән кредит карталарын төрү</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Кредит карталары белән идарә итү</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Бу картаны хәвефсез рәвештә саклансынмы?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Картаның вакыты чыгу датасы яңартылсынмы?</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Адрес сайлау</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Тәкъдим ителгән адресларны ачып салу</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Тәкъдим ителгән адресларны төрү</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Адреслар белән идарә итү</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-tzm/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-tzm/strings.xml
new file mode 100644
index 0000000000..f1f4000754
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-tzm/strings.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">WAXXA</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Sfeḍ</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Kcem</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Isem n unessemres</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Taguri n uzerray</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Sti yan uklu</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">ssureg</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">S tidet?</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Qqim</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Ffeɣ</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Fren yan uyyur</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Yen</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Bṛa</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Maṛ</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Ibr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">May</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Yun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Yul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Ɣuc</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Cut</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Kṭu</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nwa</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Duj</string>
+
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Ssuter ifeska</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-ug/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ug/strings.xml
new file mode 100644
index 0000000000..e044589822
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ug/strings.xml
@@ -0,0 +1,190 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">ماقۇل</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">بىكار قىلىش</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">بۇ بەتنىڭ تېخىمۇ كۆپ سۆزلەشكۈ قۇرۇشىنىڭ ئالدىنى ئالىدۇ</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">تەڭشەك</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">تازىلاش</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">كىرىش</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">ئىشلەتكۈچى</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">پارول</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">ساقلىما</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">ھازىر ئەمەس</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">ھەرگىز ساقلىما</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">ھازىر ئەمەس</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">ساقلا</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">يېڭىلانمىسۇن</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">ھازىر ئەمەس</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">يېڭىلاش</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">ئىم بۆلىكى بوش قالمايدۇ</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">ئىم كىرگۈزۈلىدۇ</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">كىرىش ئۇچۇرىنى ساقلىيالمايدۇ</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">ئىم ساقلىيالمايدۇ</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">بۇ كىرىشنى ساقلامدۇ؟</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">ئىم ساقلامدۇ؟</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">بۇ كىرىشنى يېڭىلامدۇ؟</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">ئىم يېڭىلامدۇ؟</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">ساقلانغان ئىمغا ئىشلەتكۈچى ئاتىنى قوشامدۇ؟</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">تېكىست كىرگۈزۈش بۆلىكىنىڭ بەلگىسى</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">رەڭ تاللىنىدۇ</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">رۇخسەت قىلىش</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">رەت قىلىش</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">جەزملەشتۈرەمسىز؟</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">بۇ تور بېكەتتىن ئايرىلامسىز؟ سىز كىرگۈزگەن سانلىق مەلۇماتلار ساقلانماسلىقى مۇمكىن</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">قېپقال</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">ئايرىل</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">ئاي تاللاڭ</string>
+
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">يانۋار</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">فېۋرال</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">مارت</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">ئاپرېل</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">ماي</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">ئىيۇن</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">ئىيۇل</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">ئاۋغۇست</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">سېنتەبر</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">ئۆكتەبر</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">نويابر</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">دېكابر</string>
+
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">ۋاقىت تەڭشىكى</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">كىرىشنى باشقۇرۇش</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">ئىم باشقۇرۇش</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">تەۋسىيە كىرىشنى كېڭەيتىدۇ</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">ساقلىغان ئىمنى ياي</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">تەۋسىيە كىرىشنى يىغ</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">ساقلىغان ئىمنى يىغ</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">تەۋسىيە كىرىش</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">ساقلانغان ئىم</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">كۈچلۈك ئىم تەۋسىيە قىلىنىدۇ</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">كۈچلۈك ئىم تەۋسىيە قىلىنىدۇ</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">كۈچلۈك ئىم ئىشلىتىش: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">بۇ بېكەتكە سانلىق مەلۇماتنى قايتا يوللامدۇ؟</string>
+ <string name="mozac_feature_prompt_repost_message">بۇ بەت يېڭىلانسا چىقىم قىلىش ياكى ئىنكاسنى ئىككى قېتىم يوللاشقا ئوخشاش يېقىنقى مەشغۇلاتلارنى كۆپەيتىدۇ.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">سانلىق مەلۇماتنى قايتا يوللايدۇ</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">بىكار قىلىش</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">ئىناۋەتلىك كارتا تاللىنىدۇ</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">ساقلانغان كارتىنى ئىشلەت</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">تەۋسىيە قىلىنغان ئىناۋەتلىك كارتىنى كېڭەيتىدۇ</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">ساقلانغان كارتىنى ياي</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">تەۋسىيە قىلىنغان ئىناۋەتلىك كارتىنى يىغىدۇ</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">ساقلانغان كارتىنى يىغ</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">ئىناۋەتلىك كارتا باشقۇرۇش</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">كارتا باشقۇرۇش</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">بۇ كارتىنى بىخەتەر ساقلامدۇ؟</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">كارتىنىڭ مۇددىتى توشۇش قەرەلىنى يېڭىلامدۇ؟</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">كارتا نومۇرى شىفىرلىنىدۇ. بىخەتەرلىك كودى ساقلانمايدۇ.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s كارتا نومۇرىڭىزنى شىفىرلايدۇ. بىخەتەرلىك كودىڭىز ساقلانمايدۇ.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">ئادرېس تاللىنىدۇ</string>
+
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">تەۋسىيە ئادرېسنى كېڭەيتىدۇ</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">ساقلانغان ئادرېسنى ياي</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">تەۋسىيە ئادرېسنى يىغىدۇ</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">ساقلانغان ئادرېسنى يىغ</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">ئادرېس باشقۇرۇش</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">ھېسابات رەسىمى</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">تىزىمغا كىرىشنى تەمىنلىگۈچى تاللىنىدۇ</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">%1$s ھېساباتىدا تىزىمغا كىرىدۇ</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">تىزىمغا كىرىشنى تەمىنلىگۈچىگە %1$s نى ئىشلىتىدۇ</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[بىر %2$s ھېساباتىدا %1$s غا تىزىمغا كىرىشتە ئۇلارنىڭ <a href="%3$s">شەخسىيەت تۈزۈمى</a> ۋە <a href="%4$s">مۇلازىمەت ماددىلىرى</a>غا بويسۇنىدۇ]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">داۋاملاشتۇر</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">ۋاز كەچ</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-uk/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-uk/strings.xml
new file mode 100644
index 0000000000..53c48170b5
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-uk/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Скасувати</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Заборонити цій сторінці створювати додаткові діалогові вікна</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Встановити</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Очистити</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Увійти</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Ім’я користувача</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Пароль</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Не зберігати</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Не зараз</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Ніколи не зберігати</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Не зараз</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Зберегти</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Не оновлювати</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Не зараз</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Оновити</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Поле пароля не повинно бути порожнім</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Введіть пароль</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Не вдається зберегти запис</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Не вдається зберегти пароль</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Зберегти цей пароль?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Зберегти пароль?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Оновити цей пароль?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Оновити пароль?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Додати ім’я користувача до збереженого пароля?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Мітка для введення поля введення тексту</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Оберіть колір</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Дозволити</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Заборонити</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Ви впевнені?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Ви хочете піти з цього сайту? Введені вами дані можуть не зберегтися</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Залишитись</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Піти</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Оберіть місяць</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Січ</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Лют</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Бер</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Кві</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Тра</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Чер</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Лип</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Сер</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Вер</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Жов</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Лис</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Гру</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Налаштувати час</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Керувати паролями</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Керувати паролями</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Розгорнути запропоновані паролі</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Розгорнути збережені паролі</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Згорнути запропоновані паролі</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Згорнути збережені паролі</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Пропоновані паролі</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Збережені паролі</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Запропонувати надійний пароль</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Запропонувати надійний пароль</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Використати надійний пароль: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Надіслати дані на цей сайт повторно?</string>
+ <string name="mozac_feature_prompt_repost_message">Оновлення цієї сторінки може повторити нещодавні дії, наприклад, надіслати платіж або опублікувати коментар двічі.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Повторно надіслати дані</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Скасувати</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Виберіть кредитну картку</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Використати збережену картку</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Розгорнути запропоновані кредитні картки</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Розгорнути збережені картки</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Згорнути запропоновані кредитні картки</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Згорнути збережені картки</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Керувати кредитними картками</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Керувати картками</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Зберегти надійно цю картку?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Оновити термін дії картки?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Номер картки буде зашифровано. Код безпеки не буде збережено.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s шифрує номер вашої картки. Ваш код безпеки не буде збережено.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Вибрати адресу</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Розгорнути пропоновані адреси</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Розгорнути збережені адреси</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Згорнути пропоновані адреси</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Згорнути збережені адреси</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Керувати адресами</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Зображення облікового запису</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Оберіть постачальника послуг входу</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Увійдіть з обліковим записом %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Використовувати %1$s як постачальника авторизації</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ Вхід до %1$s з використанням облікового запису %2$s регулюється <a href="%3$s">Політикою приватності</a> та <a href="%4$s">Умовами надання послуг</a> постачальника послуг авторизації]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Продовжити</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Скасувати</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-ur/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ur/strings.xml
new file mode 100644
index 0000000000..3e5299b140
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-ur/strings.xml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">ٹھیک ہے</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">منسوخ کریں</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">اس صفحہ کو اور مکالمے بنانے سے روکیں</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">سیٹ کریں</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">صاف کریں</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">سائن ان کریں</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">صارف کا نام</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">پاس ورڈ</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">محفوظ مت کریں</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">کبھی بھی محفوظ نہ کریں</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">محفوظ کریں</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">تازہ کاری نا کریں</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">تازہ کاری کریں</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">پاسورڈ فیلڈ خالی نہیں ہونا چاہئے</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">لاگ ان کو محفوظ کرنے سے قاصر</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">اس لاگ ان کو محفوظ کریں؟</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">اس لاگ ان کو تازہ کاری کریں؟</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">صارف نام کو محفوظ کردہ پاسورڈ میں رکھیں؟</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">ایک متنی انپُٹ فیلڈ داخل کرنے کے لئے لیبل</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">رنگ کا انتخاب کریں</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">اجازت دیں</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">انکار کریں</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">کیا آپ کو یقین ہے؟</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">کیا آپ اس سائٹ کو چھوڑنا چاہتے ہیں؟ ہوسکتا ہے کہ آپ نے جو ڈیٹا داخل کیا وہ محفوظ نہ ہو</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">ٹھہریں</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">چھوڑيں</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">ایک مہینہ منتخب کریں</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">جنورى</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">فرورى</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">مارچ</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">اپريل</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">مئی</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">جون</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">جولائى</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">اگست</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">ستمبر</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">اکتوبر</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">نومبر</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">دسمبر</string>
+
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">لاگ ان بندوبست کریں</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">تجویز کردہ لاگ ان کو وسعت دیں</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">تجویز کردہ لاگ ان کو ختم کریں</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">تجویز شدہ لاگ ان</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">اس سائٹ پر ڈیٹا دوبارہ ارسال کریں؟</string>
+ <string name="mozac_feature_prompt_repost_message">اس صفحہ کو ریفریش کرنے سے حالیہ کارروائیوں کی نقل بن سکتی ہے، جیسے کہ پیسوں کی ادائیگی بھیجنا یا دو بار تبصرہ پوسٹ کرنا۔</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">ڈیٹا کو دوبارہ ارسال کریں</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">منسوخ کریں</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">کریڈٹ کارڈ منتخب کریں</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">تجویز کردہ کریڈٹ کارڈز کو وسعت دیں</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">تجویز کردہ کریڈٹ کارڈز کو سکیڑیں</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings -->
+ <string name="mozac_feature_prompts_manage_credit_cards">کریڈٹ کارڈز کا منظم کریں</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-uz/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-uz/strings.xml
new file mode 100644
index 0000000000..8198f89c0f
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-uz/strings.xml
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Bekor qilish</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Bu sahifada qoʻshimcha oynalar yaratishni toʻxtatish</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Oʻrnatish</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Tozalash</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Kirish</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Foydalanuvchi</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Parol</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Saqlanmasin</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Hech qachon saqlanmasin</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Hozir emas</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Saqlash</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Yangilanmasin</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Yangilash</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Parol maydoni boʻsh qolmasligi kerak</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Login saqlanmadi</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Bu login saqlansinmi?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Bu login yangilansinmi?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Saqlangan parolga foydalanuvchi nomi qoʻshilsinmi?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Matn kiritish maydoni uchun yorliq</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Rangni tanlang</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Ruxsat berish</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Rad qilish</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Ishonchingiz komilmi?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Bu saytdan chiqishni xohlaysizmi? Siz kiritgan maʼlumot saqlanmasligi mumkin</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Qolaman</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Ketaman</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Oyni tanlang</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Yan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Fev</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Apr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">May</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Iyun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Iyul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Avg</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sen</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Okt</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Noy</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dek</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Vaqtni kiritish</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Loginlarni boshqarish</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Tavsiya etilgan loginlarni kengaytirish</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Tavsiya etilgan loginlarni yigʻish</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Tavsiya etilgan loginlar</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Bu saytga maʼlumotlar qayta yuborilsinmi?</string>
+ <string name="mozac_feature_prompt_repost_message">Bu sahifani yangilash toʻlovni yuborish yoki ikki marta sharh qoldirish kabi soʻnggi amallarni takrorlashi mumkin.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Maʼlumotlarni qayta yuborish</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Bekor qilish</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Kredit kartani tanlash</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Tavsiya etilgan kredit kartalarni kengaytirish</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Tavsiya etiladigan kredit kartalarni yigʻish</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Kredit kartalarni boshqarish</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Bu karta xavfsiz saqlansinmi?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Karta amal qilish muddati yangilansinmi?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Karta raqami shifrlanadi. Xavfsizlik kodi saqlanmaydi.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Manzilni tanlang</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Tavsiya etilgan manzillarni kengaytirish</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Tavsiya etilgan manzillarni yigʻish</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Manzillarni boshqarish</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-vec/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-vec/strings.xml
new file mode 100644
index 0000000000..3fbe68316e
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-vec/strings.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Anuƚa</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Inpedisi a sta pàgina de vèrxere altre fenèstre de diaƚogo</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Inposta</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Pulisi</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Va rento</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Nòme utente</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Password</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">No stà salvare</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Salva</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Axorna</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Bixogna meter rento na password</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">No xe mìa posibiƚe salvare ƚa password</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Eticheta par meter rento el testo en on canpo</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Seji a coƚore</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Parmeti</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Nega</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Seƚesiona on mexe</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Xan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Avr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Mai</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Xun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Luj</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Ago</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Set</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Oto</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dex</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-vi/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-vi/strings.xml
new file mode 100644
index 0000000000..c3ade7b30b
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-vi/strings.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Hủy bỏ</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Ngăn trang này tạo ra các hộp thoại bổ sung</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Thiết lập</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Xóa</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Đăng nhập</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Tên đăng nhập</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Mật khẩu</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Không lưu</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Không phải bây giờ</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Không bao giờ lưu</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Không phải bây giờ</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Lưu</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Đừng cập nhật</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Không phải bây giờ</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Cập nhật</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Trường mật khẩu không được để trống</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Nhập mật khẩu</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Không thể lưu thông tin đăng nhập</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Không thể lưu mật khẩu</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Lưu thông tin đăng nhập này?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Lưu mật khẩu?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Cập nhật thông tin đăng nhập này?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Cập nhật lại mật khẩu?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Thêm tên người dùng vào mật khẩu đã lưu?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Nhãn để nhập trường văn bản</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Chọn một màu</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Cho phép</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Từ chối</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Bạn có chắc không?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Bạn có muốn rời khỏi trang web này? Dữ liệu bạn đã nhập có thể không được lưu</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Ở lại</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Rời khỏi</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Chọn tháng</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Thg01</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Thg02</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Thg03</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Thg04</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Thg05</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Thg06</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Thg07</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Thg08</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Thg09</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Thg10</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Thg11</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Thg12</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Cài đặt thời gian</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Quản lý đăng nhập</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Quản lý mật khẩu</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Mở rộng thông tin đăng nhập được đề xuất</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Mở rộng mật khẩu đã lưu</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Thu gọn thông tin đăng nhập được đề xuất</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Thu gọn mật khẩu đã lưu</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Thông tin đăng nhập được đề xuất</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Mật khẩu đã lưu</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Đề xuất mật khẩu mạnh</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Đề xuất mật khẩu mạnh</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Sử dụng mật khẩu mạnh: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Gửi lại dữ liệu cho trang web này?</string>
+ <string name="mozac_feature_prompt_repost_message">Việc làm mới trang này có thể trùng lặp với các hành động gần đây, chẳng hạn như gửi thanh toán hoặc đăng nhận xét hai lần.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Gửi lại dữ liệu</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Huỷ bỏ</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Chọn thẻ tín dụng</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Sử dụng thẻ đã lưu</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Mở rộng thẻ tín dụng được đề xuất</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Mở rộng thẻ đã lưu</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Thu gọn thẻ tín dụng được đề xuất</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Thu gọn thẻ đã lưu</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Quản lý thẻ tín dụng</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Quản lý thẻ tín dụng</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Lưu thẻ này một cách an toàn?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Cập nhật ngày hết hạn thẻ?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">Số thẻ sẽ được mã hóa. Mã bảo mật sẽ không được lưu.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s mã hóa số thẻ của bạn. Mã bảo mật của bạn sẽ không được lưu.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Chọn địa chỉ</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Mở rộng các địa chỉ được đề xuất</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Mở rộng địa chỉ đã lưu</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Thu gọn các địa chỉ được đề xuất</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Thu gọn địa chỉ đã lưu</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Quản lý địa chỉ</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Ảnh tài khoản</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Chọn một nhà cung cấp đăng nhập</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Đăng nhập bằng tài khoản %1$s</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Sử dụng %1$s làm nhà cung cấp thông tin đăng nhập</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[ Đăng nhập vào %1$s với tài khoản %2$s phải tuân theo <a href="%3$s">chính sách bảo mật</a> và <a href="%4$s">điều khoản dịch vụ</a> của họ]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Tiếp tục</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Hủy bỏ</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-yo/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-yo/strings.xml
new file mode 100644
index 0000000000..ec27325d62
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-yo/strings.xml
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">Ó DÁA</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Parẹ́</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Ṣe ìdíwọ́ fún ojú-ìwé yìí láti ṣẹ̀dá ìsọ̀rọ̀ńgbèsì mìíràn</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Ṣètò</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Parẹ́</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Wọlé</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Orúkọ aṣàmúlò</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Pásíwọọ̀dù</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">Má fi pamọ́</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Má fi pamọ̀ láéláé</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Kìí ṣe báyìí</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Fipamọ́</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">Má sẹ ìsọdituntun</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Ìsọdituntun</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">Àye pásíwọọ̀dù ò gbọdọ̀ gbófo</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">Kò le fi ohun-ìwọlé pamọ́</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">Fi ohun-ìwọlé yìí pamọ́?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">Ṣe ìsọdituntun fún ohun-ìwọlé yìí?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Ṣe àfikún orúkọ-aṣàmúlò mọ́ ọ̀rọ̀-ìṣínà tó wà ní ìpamọ́?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Lébẹ́ẹ̀lì fún títẹ ọ̀rọ̀ sí</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Yan àwọ̀ kan</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Gbà láàyè</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Kọ̀</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Ṣé ó dá ọ lójú?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Ṣé o fẹ́ fi sáìtì yí sílẹ̀? Dátà tí o tẹ̀ lè má wá sí ní ìpamọ́</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Dúró</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Fi kalẹ̀</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Mú oṣù kan</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Ṣẹrẹ</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Èrèlé</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Ẹrẹ́nà</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Igbe</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">Èbìbí</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Okúdù</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Agẹmọ</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Ògún</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Ọwẹ́wẹ̀</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Ọ̀wàwà</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Béélú</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Ọpẹ́</string>
+
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">Ṣàkóso àwọn ohun-ìwọlé</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">Ṣe ìpọ̀si fún àbá àwọn ohun-ìwọlé</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">Pa àbá àwọn ohun-ìwọlé rẹ́</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">Àbá àwọn ohun-ìwọlé</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Tún dátà ráńṣẹ́ sí sáìtì yí?</string>
+ <string name="mozac_feature_prompt_repost_message">Dídá ojú-ìwé yìí padà lé è sọ àwọn ìṣẹ̀lẹ̀ àìpẹ́ di méjì, gẹ́gẹ́ bíi ka máa fi owó ránṣé tàbí fífi ọ̀rọ̀ àsọyé ránṣẹ́ lẹ́ẹ̀mejì.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Fi dátà ráńṣẹ́ lẹ́ẹ̀kan si</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Parẹ́</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">Yan káàdì ìyáwó</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">Fẹ àwọn káàdì ìyáwó tí a dábàá</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Wó àwọn káàdì ìyáwó tí a dábàá</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">Sàkóso àwọn káàdì ìyáwó</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Fí káàdì yí pamọ́ dáada?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title"> Ṣe ìsọdituntun fún ọjọ́ òpin-ìlò káàdì?</string>
+
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">A ó sọ nọ́ḿbà káàdì di kóòdù. A ò ní ṣe ìfipamọ́ kóòdù ààbò.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Yan àdírẹ́ẹ̀sì</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">Fẹ àwọn adírẹ́sì tí a dábàá</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">Wó àwọn àdírẹ́sì tí a dábàá</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Ṣàkóso àwọn àdírẹ́sì</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-zam/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-zam/strings.xml
new file mode 100644
index 0000000000..e8273d25d2
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-zam/strings.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">ăɁ</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">B-láɁ=y</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Tòmbî</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">-taɁ lélù lèɁn</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Chó lèl</string>
+
+ </resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-zh-rCN/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000000..4287c42133
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-zh-rCN/strings.xml
@@ -0,0 +1,199 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">确定</string>
+
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">取消</string>
+
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">阻止此页面创建更多对话框</string>
+
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">设置</string>
+
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">清除</string>
+
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">登录</string>
+
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">用户名</string>
+
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">密码</string>
+
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">不保存</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">暂时不要</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">永不保存</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">暂时不要</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">保存</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">不更新</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">暂时不要</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">更新</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">密码不能为空</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">请输入密码</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">无法保存登录信息</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">无法保存密码</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">要保存此登录信息吗?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">要保存密码吗?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">要更新此登录信息吗?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">要更新密码吗?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">要将用户名添加到已存密码吗?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">文本输入栏的标签</string>
+
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">选择颜色</string>
+
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">允许</string>
+
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">拒绝</string>
+
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">您确定吗?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">您确定要离开此网站吗?您所输入的数据可能尚未保存</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">留下</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">离开</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">选择月份</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">1 月</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">2 月</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">3 月</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">4 月</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">5 月</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">6 月</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">7 月</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">8 月</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">9 月</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">10 月</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">11 月</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">12 月</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">设置时间</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">管理登录信息</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">管理密码</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">展开推荐的登录信息</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">展开保存的密码</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">折叠推荐的登录信息</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">折叠保存的密码</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">推荐的登录信息</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">保存的密码</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">建议高强度密码</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">建议高强度密码</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">使用高强度密码:%1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">重新发送数据至此网站?</string>
+ <string name="mozac_feature_prompt_repost_message">刷新页面可能会再次执行最近的操作,例如重复付款或发表评论。</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">重新发送数据</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">取消</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">选择信用卡</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">使用保存的信用卡</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">展开建议的信用卡</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">展开保存的信用卡</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">折叠建议的信用卡</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">折叠保存的信用卡</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">管理信用卡</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">管理信用卡</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">安全地保存此卡片?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">是否要更新卡片有效期?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">卡号将被加密,且不会保存安全码。</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s 会将卡号加密保存。安全码不会被保存。</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">选择地址</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">展开建议的地址</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">展开保存的地址</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">折叠建议的地址</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">折叠保存的地址</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">管理地址</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">头像</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">选择一个登录方式</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">使用 %1$s 账户登录</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">使用 %1$s 登录</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[使用 %2$s 账户登录 %1$s 须遵守其<a href="%3$s">隐私政策</a>和<a href="%4$s">服务条款</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">继续</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">取消</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-zh-rTW/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000000..d435190102
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-zh-rTW/strings.xml
@@ -0,0 +1,199 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">確定</string>
+
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">取消</string>
+
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">避免此頁面產生更多對話框</string>
+
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">設定</string>
+
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">清除</string>
+
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">登入</string>
+
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">使用者名稱</string>
+
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">密碼</string>
+
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save">不要儲存</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">現在不要</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">永不儲存</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">現在不要</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">儲存</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update">不要更新</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">現在不要</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">更新</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password">密碼不得為空白</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">輸入密碼</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause">無法儲存登入資訊</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">無法儲存密碼</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline">要儲存這筆登入資訊嗎?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">要儲存密碼嗎?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline">要更新這筆登入資訊嗎?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">要更新密碼嗎?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">要將使用者名稱加進儲存的密碼資訊嗎?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">文字輸入欄位的標籤</string>
+
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">選擇一種色彩</string>
+
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">允許</string>
+
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">拒絕</string>
+
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">您確定嗎?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">您確定要離開此網站嗎?您所輸入的資料可能還沒儲存</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">留下來</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">離開</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">挑選月份</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">1 月</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">2 月</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">3 月</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">4 月</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">5 月</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">6 月</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">7 月</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">8 月</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">9 月</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">10 月</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">11 月</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">12 月</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">設定時間</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins">管理登入密碼</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">管理密碼</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description">展開建議的登入資訊</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">展開儲存的密碼</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description">摺疊建議的登入資訊</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">摺疊儲存的密碼</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins">建議的登入資訊</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">已存密碼</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">建議安全的密碼</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">建議安全的密碼</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">使用安全的密碼:%1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">要重新發送資料到這個網站嗎?</string>
+ <string name="mozac_feature_prompt_repost_message">重新整理頁面可能會再次執行最近的操作,例如重複付款或張貼留言。</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">重送資料</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">取消</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card">選擇信用卡</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">使用儲存的卡片資訊</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description">展開建議的信用卡</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">展開儲存的卡片資訊</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description">摺疊建議的信用卡</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">摺疊儲存的卡片資訊</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards">管理信用卡</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">管理卡片</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">安全地儲存這張卡的資料?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">是否要更新卡片效期?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body">將加密卡號,也不會儲存安全碼。</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s 會加密您的卡號,且不會儲存安全碼。</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">選擇地址</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description">展開建議的地址</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">展開儲存的地址資訊</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description">摺疊建議的地址</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">摺疊儲存的地址資訊</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">管理已存地址</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">帳號圖片</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">選擇登入資訊服務提供者</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">使用 %1$s 帳號登入</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">使用 %1$s 登入</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[使用 %2$s 帳號登入 %1$s 須遵守該登入服務的<a href="%3$s">隱私權保護政策</a>及<a href="%4$s">服務條款</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">繼續</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">取消</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values/attrs.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values/attrs.xml
new file mode 100644
index 0000000000..de216bfa8b
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values/attrs.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<resources>
+ <declare-styleable name="LoginPanelTextInputLayout">
+ <attr name="mozacInputLayoutErrorTextColor" format="reference"/>
+ <attr name="mozacInputLayoutErrorIconColor" format="reference"/>
+ <attr name="mozacPromptLoginEditTextCursorColor" format="reference"/>
+ </declare-styleable>
+
+ <declare-styleable name="LoginSelectBar">
+ <attr name="mozacLoginSelectHeaderTextStyle" format="reference"/>
+ </declare-styleable>
+
+ <declare-styleable name="CreditCardSelectBar">
+ <attr name="mozacSelectCreditCardHeaderTextStyle" format="reference"/>
+ </declare-styleable>
+
+ <declare-styleable name="AddressSelectBar">
+ <attr name="mozacSelectAddressHeaderTextStyle" format="reference"/>
+ </declare-styleable>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values/colors.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values/colors.xml
new file mode 100644
index 0000000000..0cae21eca4
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values/colors.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<resources xmlns:tools="http://schemas.android.com/tools">
+ <array name="mozac_feature_prompts_default_colors">
+ <item>#D73920</item>
+ <item>#FF8605</item>
+ <item>#FFCB13</item>
+ <item>#5FAD47</item>
+ <item>#21A1DE</item>
+ <item>#102457</item>
+ <item>#5B2067</item>
+ <item>#D4DDE4</item>
+ <item>#FFFFFF</item>
+ </array>
+ <color name="mozacBoxStrokeColor">#828282</color>
+ <color tools:override="true" tools:ignore="UnusedResources"
+ name="mtrl_textinput_default_box_stroke_color">@color/mozacBoxStrokeColor</color>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values/ids.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values/ids.xml
new file mode 100644
index 0000000000..9ba0f9c8e8
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values/ids.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<resources>
+ <item name="mozac_feature_prompts_no_more_dialogs_check_box" type="id"/>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values/quarantined_strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values/quarantined_strings.xml
new file mode 100644
index 0000000000..5943e14165
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values/quarantined_strings.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<!-- Strings in this file are not yet ready for localization. -->
+<resources>
+ <!-- Text of the title of a dialog when a page is requesting to open a new window. -->
+ <string name="mozac_feature_prompts_popup_dialog_title">Prevent this site from opening a pop-up window?</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values/strings-no-translatable.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values/strings-no-translatable.xml
new file mode 100644
index 0000000000..b30bbc6b64
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values/strings-no-translatable.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<resources>
+ <!-- Months of the years, used on the month chooser dialog. -->
+ <string-array name="mozac_feature_prompts_months">
+ <item>@string/mozac_feature_prompts_jan</item>
+ <item>@string/mozac_feature_prompts_feb</item>
+ <item>@string/mozac_feature_prompts_mar</item>
+ <item>@string/mozac_feature_prompts_apr</item>
+ <item>@string/mozac_feature_prompts_may</item>
+ <item>@string/mozac_feature_prompts_jun</item>
+ <item>@string/mozac_feature_prompts_jul</item>
+ <item>@string/mozac_feature_prompts_aug</item>
+ <item>@string/mozac_feature_prompts_sep</item>
+ <item>@string/mozac_feature_prompts_oct</item>
+ <item>@string/mozac_feature_prompts_nov</item>
+ <item>@string/mozac_feature_prompts_dec</item>
+ </string-array>
+ <!-- Text used for the millisecond separator in the time picker. -->
+ <string name="mozac_feature_prompts_millisecond_separator">.</string>
+ <!-- Text used for the second separator in the time picker. -->
+ <string name="mozac_feature_prompts_second_separator">:</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values/strings.xml
new file mode 100644
index 0000000000..1f5415543c
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values/strings.xml
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
+ <!-- Text for confirmation for a positive action in dialog -->
+ <string name="mozac_feature_prompts_ok">OK</string>
+ <!-- Text for confirmation for a negative action in dialog. -->
+ <string name="mozac_feature_prompts_cancel">Cancel</string>
+ <!-- When a page shows many dialogs, this checkbox will appear for letting the user choose to prevent showing more dialogs. -->
+ <string name="mozac_feature_prompts_no_more_dialogs">Prevent this page from creating additional dialogs</string>
+ <!-- Text for a positive button, when an user selects a date in date/time picker. -->
+ <string name="mozac_feature_prompts_set_date">Set</string>
+ <!-- Text for a button that clears the selected input in the date/time picker. -->
+ <string name="mozac_feature_prompts_clear">Clear</string>
+ <!-- Text for the title of an authentication dialog. -->
+ <string name="mozac_feature_prompt_sign_in">Sign in</string>
+ <!-- Text for username field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_username_hint">Username</string>
+ <!-- Text for password field in an authentication dialog. -->
+ <string name="mozac_feature_prompt_password_hint">Password</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save" moz:removedIn="125" tools:ignore="UnusedResources">Don’t save</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2">Not now</string>
+ <!-- Negative confirmation that we should never save a login for this site -->
+ <string name="mozac_feature_prompt_never_save">Never save</string>
+ <!-- Negative confirmation that we should not save a credit card for this site -->
+ <string name="mozac_feature_prompt_not_now">Not now</string>
+ <!-- Positive confirmation that we should save the new or updated login -->
+ <string name="mozac_feature_prompt_save_confirmation">Save</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update" moz:removedIn="125" tools:ignore="UnusedResources">Don’t update</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2">Not now</string>
+ <!-- Positive confirmation that we should save the updated login -->
+ <string name="mozac_feature_prompt_update_confirmation">Update</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password" moz:removedIn="125" tools:ignore="UnusedResources">Password field must not be empty</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2">Enter a password</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause" moz:removedIn="125" tools:ignore="UnusedResources">Unable to save login</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2">Can’t save password</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
+ <string name="mozac_feature_prompt_login_save_headline" moz:removedIn="125" tools:ignore="UnusedResources">Save this login?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2">Save password?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_update_headline" moz:removedIn="125" tools:ignore="UnusedResources">Update this login?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2">Update password?</string>
+ <!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
+ <string name="mozac_feature_prompt_login_add_username_headline">Add username to saved password?</string>
+ <!-- Text for a label for the field when prompt requesting a text is shown. -->
+ <!-- For more info take a look here https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt -->
+ <string name="mozac_feature_prompts_content_description_input_label">Label for entering a text input field</string>
+ <!-- Title of a color picker dialog, this text is shown above a color picker. -->
+ <string name="mozac_feature_prompts_choose_a_color">Choose a color</string>
+ <!-- Text of a confirm button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_allow">Allow</string>
+ <!-- Text of a negative button in dialog requesting to open a new window. -->
+ <string name="mozac_feature_prompts_deny">Deny</string>
+ <!-- Title of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_title">Are you sure?</string>
+ <!-- Body text of the dialog shown when a user is leaving a website and there is still data not saved yet. -->
+ <string name="mozac_feature_prompt_before_unload_dialog_body">Do you want to leave this site? Data you have entered may not be saved</string>
+ <!-- Stay button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to stay in the website. -->
+ <string name="mozac_feature_prompts_before_unload_stay">Stay</string>
+ <!-- Leave button of the dialog shown when a user is leaving a website and there is still data not saved yet, this indicates that the user wants to leave in the website. -->
+ <string name="mozac_feature_prompts_before_unload_leave">Leave</string>
+ <!-- Title of the month chooser dialog. -->
+ <string name="mozac_feature_prompts_set_month">Pick a month</string>
+ <!-- January (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jan">Jan</string>
+ <!-- February month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_feb">Feb</string>
+ <!-- March month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_mar">Mar</string>
+ <!-- April month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_apr">Apr</string>
+ <!-- May month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_may">May</string>
+ <!-- June month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jun">Jun</string>
+ <!-- July month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_jul">Jul</string>
+ <!-- August month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_aug">Aug</string>
+ <!-- September month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_sep">Sep</string>
+ <!-- October month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_oct">Oct</string>
+ <!-- November month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_nov">Nov</string>
+ <!-- December month of the year (short description), used on the month chooser dialog. -->
+ <string name="mozac_feature_prompts_dec">Dec</string>
+ <!-- Title of the time picker dialog. -->
+ <string name="mozac_feature_prompts_set_time">Set time</string>
+ <!-- Option in expanded select login prompt that links to login settings -->
+ <string name="mozac_feature_prompts_manage_logins" moz:removedIn="125" tools:ignore="UnusedResources">Manage logins</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2">Manage passwords</string>
+ <!-- Content description for expanding the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Expand suggested logins</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2">Expand saved passwords</string>
+ <!-- Content description for collapsing the saved logins options in the select login prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Collapse suggested logins</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2">Collapse saved passwords</string>
+ <!-- Header for the select login prompt to allow users to fill a form with a saved login -->
+ <string name="mozac_feature_prompts_saved_logins" moz:removedIn="125" tools:ignore="UnusedResources">Suggested logins</string>
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2">Saved passwords</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Suggest strong password</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Suggest strong password</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Use strong password: %1$s</string>
+
+ <!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
+ <string name="mozac_feature_prompt_repost_title">Resend data to this site?</string>
+ <string name="mozac_feature_prompt_repost_message">Refreshing this page could duplicate recent actions, such as sending a payment or posting a comment twice.</string>
+ <!-- Pressing this will dismiss the dialog and reload the page sending again the previous data -->
+ <string name="mozac_feature_prompt_repost_positive_button_text">Resend data</string>
+ <!-- Pressing this will dismiss the dialog and not refresh the webpage -->
+ <string name="mozac_feature_prompt_repost_negative_button_text">Cancel</string>
+
+ <!-- Credit Card Autofill -->
+ <!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
+ <string name="mozac_feature_prompts_select_credit_card" moz:removedIn="125" tools:ignore="UnusedResources">Select credit card</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2">Use saved card</string>
+ <!-- Content description for expanding the select credit card options in the select credit card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Expand suggested credit cards</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2">Expand saved cards</string>
+ <!-- Content description for collapsing the select credit card options in the select credit prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Collapse suggested credit cards</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2">Collapse saved cards</string>
+ <!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards" moz:removedIn="125" tools:ignore="UnusedResources">Manage credit cards</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2">Manage cards</string>
+ <!-- Text for the title of a save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_title">Securely save this card?</string>
+ <!-- Text for the title of an update credit card dialog. -->
+ <string name="mozac_feature_prompts_update_credit_card_prompt_title">Update card expiration date?</string>
+ <!-- Subtitle text displayed under the title of the save credit card dialog. -->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body" moz:removedIn="125" tools:ignore="UnusedResources">Card number will be encrypted. Security code won’t be saved.</string>
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2">%s encrypts your card number. Your security code won’t be saved.</string>
+
+ <!-- Address Autofill -->
+ <!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
+ <string name="mozac_feature_prompts_select_address_2">Select address</string>
+ <!-- Content description for expanding the select addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Expand suggested addresses</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2">Expand saved addresses</string>
+ <!-- Content description for collapsing the select address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Collapse suggested addresses</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2">Collapse saved addresses</string>
+ <!-- Text for the manage addresses button. -->
+ <string name="mozac_feature_prompts_manage_address">Manage addresses</string>
+
+ <!-- Federated Credential Management prompts -->
+ <!--Content description for the Account picture in the Select Account FedCM prompt -->
+ <string name="mozac_feature_prompts_account_picture">Account picture</string>
+ <!-- Title of the Identity Credential provider dialog chooser. -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_provider">Choose a login provider</string>
+ <!-- Title of an account picker dialog for identity credentials. The %1$s will be replaced with the name of the provider -->
+ <string name="mozac_feature_prompts_identity_credentials_choose_account_for_provider">Sign in with a %1$s account</string>
+ <!-- Title of the Identity Credential privacy policy dialog title. The %1$s will be replaced with the name of the provider. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_title">Use %1$s as a login provider</string>
+ <!-- Title of the Identity Credential privacy policy dialog description. The %1$s will be replaced with the name of the provider, %2$s will be replaced with the account, %3$s will be replaced with the privacy policy url and %4$s will be replaced with the terms of service. -->
+ <string name="mozac_feature_prompts_identity_credentials_privacy_policy_description"><![CDATA[Logging in to %1$s with a %2$s account is subject to their <a href="%3$s">Privacy Policy</a> and <a href="%4$s">Terms of Service</a>]]></string>
+ <!-- Text for the positive button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_continue">Continue</string>
+ <!-- Text for the cancel button of the Identity Credential dialogs. -->
+ <string name="mozac_feature_prompts_identity_credentials_cancel">Cancel</string>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values/styles.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values/styles.xml
new file mode 100644
index 0000000000..b883675d27
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values/styles.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<resources>
+ <style name="MozTextInputLayout" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
+ <item name="boxStrokeColor">@color/mozacBoxStrokeColor</item>
+ <item name="boxStrokeWidth">2dp</item>
+ <item name="android:theme">@style/MozacPromptLoginTextInputLayoutCursorAppearance</item>
+ </style>
+ <style name="MozDialogStyle" parent="Theme.Design.Light.BottomSheetDialog">
+ <item name="android:windowIsFloating">false</item>
+ <item name="android:windowSoftInputMode">adjustResize</item>
+ </style>
+ <style name="MozacPromptLoginTextInputLayoutCursorAppearance" parent="ThemeOverlay.MaterialComponents.TextInputEditText.OutlinedBox">
+ <item name="colorControlActivated">?mozacPromptLoginEditTextCursorColor</item>
+ </style>
+</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/xml/feature_prompts_file_paths.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/xml/feature_prompts_file_paths.xml
new file mode 100644
index 0000000000..9ec37fe478
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/xml/feature_prompts_file_paths.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ - You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<paths>
+ <cache-path name="feature-prompts-images" path="." />
+</paths>
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/PromptContainerTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/PromptContainerTest.kt
new file mode 100644
index 0000000000..5da08da439
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/PromptContainerTest.kt
@@ -0,0 +1,76 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts
+
+import android.app.Activity
+import android.content.Context
+import android.content.Intent
+import androidx.fragment.app.Fragment
+import mozilla.components.support.test.mock
+import org.junit.Assert.assertEquals
+import org.junit.Before
+import org.junit.Test
+import org.mockito.ArgumentMatchers.anyInt
+import org.mockito.Mock
+import org.mockito.Mockito.doReturn
+import org.mockito.Mockito.verify
+import org.mockito.MockitoAnnotations.openMocks
+
+class PromptContainerTest {
+
+ @Mock private lateinit var activity: Activity
+
+ @Mock private lateinit var fragment: Fragment
+
+ @Before
+ fun setup() {
+ openMocks(this)
+ }
+
+ @Test
+ fun `get context from activity`() {
+ val container: PromptContainer = PromptContainer.Activity(activity)
+ assertEquals(activity, container.context)
+ }
+
+ @Test
+ fun `get context from fragment`() {
+ val mockContext: Context = mock()
+ val container = PromptContainer.Fragment(fragment)
+ doReturn(mockContext).`when`(fragment).requireContext()
+
+ assertEquals(mockContext, container.context)
+ }
+
+ @Suppress("DEPRECATION")
+ // https://github.com/mozilla-mobile/android-components/issues/10357
+ @Test
+ fun `startActivityForResult must delegate its calls either to an activity or a fragment`() {
+ val intent: Intent = mock()
+ val code = 1
+
+ var container: PromptContainer = PromptContainer.Activity(activity)
+ container.startActivityForResult(intent, code)
+ verify(activity).startActivityForResult(intent, code)
+
+ container = PromptContainer.Fragment(fragment)
+ container.startActivityForResult(intent, code)
+ verify(fragment).startActivityForResult(intent, code)
+ }
+
+ @Test
+ fun `getString must delegate its calls either to an activity or a fragment`() {
+ doReturn("").`when`(activity).getString(anyInt(), *emptyArray())
+ doReturn("").`when`(fragment).getString(anyInt(), *emptyArray())
+
+ var container: PromptContainer = PromptContainer.Activity(activity)
+ container.getString(R.string.mozac_feature_prompts_ok)
+ verify(activity).getString(R.string.mozac_feature_prompts_ok, *emptyArray())
+
+ container = PromptContainer.Fragment(fragment)
+ container.getString(R.string.mozac_feature_prompts_ok)
+ verify(fragment).getString(R.string.mozac_feature_prompts_ok, *emptyArray())
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/PromptFeatureTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/PromptFeatureTest.kt
new file mode 100644
index 0000000000..3c1cfba67c
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/PromptFeatureTest.kt
@@ -0,0 +1,2850 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts
+
+import android.app.Activity
+import android.app.Activity.RESULT_CANCELED
+import android.app.Activity.RESULT_OK
+import android.content.ClipData
+import android.content.ContentResolver
+import android.content.Context
+import android.content.Intent
+import android.graphics.Bitmap
+import android.net.Uri
+import android.view.View
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentTransaction
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import mozilla.components.browser.state.action.ContentAction
+import mozilla.components.browser.state.action.TabListAction
+import mozilla.components.browser.state.state.BrowserState
+import mozilla.components.browser.state.state.ContentState
+import mozilla.components.browser.state.state.TabSessionState
+import mozilla.components.browser.state.state.createCustomTab
+import mozilla.components.browser.state.state.createTab
+import mozilla.components.browser.state.store.BrowserStore
+import mozilla.components.concept.engine.prompt.Choice
+import mozilla.components.concept.engine.prompt.PromptRequest
+import mozilla.components.concept.engine.prompt.PromptRequest.Alert
+import mozilla.components.concept.engine.prompt.PromptRequest.Authentication
+import mozilla.components.concept.engine.prompt.PromptRequest.Authentication.Level.NONE
+import mozilla.components.concept.engine.prompt.PromptRequest.Authentication.Method.HOST
+import mozilla.components.concept.engine.prompt.PromptRequest.Color
+import mozilla.components.concept.engine.prompt.PromptRequest.MenuChoice
+import mozilla.components.concept.engine.prompt.PromptRequest.MultipleChoice
+import mozilla.components.concept.engine.prompt.PromptRequest.SingleChoice
+import mozilla.components.concept.engine.prompt.PromptRequest.TextPrompt
+import mozilla.components.concept.engine.prompt.ShareData
+import mozilla.components.concept.storage.Address
+import mozilla.components.concept.storage.CreditCardEntry
+import mozilla.components.concept.storage.Login
+import mozilla.components.concept.storage.LoginEntry
+import mozilla.components.feature.prompts.address.AddressDelegate
+import mozilla.components.feature.prompts.address.AddressPicker
+import mozilla.components.feature.prompts.concept.SelectablePromptView
+import mozilla.components.feature.prompts.creditcard.CreditCardDelegate
+import mozilla.components.feature.prompts.creditcard.CreditCardPicker
+import mozilla.components.feature.prompts.creditcard.CreditCardSaveDialogFragment
+import mozilla.components.feature.prompts.dialog.ChoiceDialogFragment
+import mozilla.components.feature.prompts.dialog.ConfirmDialogFragment
+import mozilla.components.feature.prompts.dialog.MultiButtonDialogFragment
+import mozilla.components.feature.prompts.dialog.PromptDialogFragment
+import mozilla.components.feature.prompts.dialog.SaveLoginDialogFragment
+import mozilla.components.feature.prompts.facts.CreditCardAutofillDialogFacts
+import mozilla.components.feature.prompts.file.FilePicker.Companion.FILE_PICKER_ACTIVITY_REQUEST_CODE
+import mozilla.components.feature.prompts.login.LoginDelegate
+import mozilla.components.feature.prompts.login.LoginPicker
+import mozilla.components.feature.prompts.share.ShareDelegate
+import mozilla.components.feature.session.SessionUseCases
+import mozilla.components.support.base.Component
+import mozilla.components.support.base.facts.Action
+import mozilla.components.support.base.facts.processor.CollectionProcessor
+import mozilla.components.support.test.any
+import mozilla.components.support.test.eq
+import mozilla.components.support.test.ext.joinBlocking
+import mozilla.components.support.test.libstate.ext.waitUntilIdle
+import mozilla.components.support.test.mock
+import mozilla.components.support.test.robolectric.testContext
+import mozilla.components.support.test.rule.MainCoroutineRule
+import mozilla.components.support.test.whenever
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mockito.doReturn
+import org.mockito.Mockito.never
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.times
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when`
+import org.robolectric.Robolectric
+import java.lang.ref.WeakReference
+import java.security.InvalidParameterException
+import java.util.Date
+
+@RunWith(AndroidJUnit4::class)
+class PromptFeatureTest {
+
+ @get:Rule
+ val coroutinesTestRule = MainCoroutineRule()
+
+ private lateinit var store: BrowserStore
+ private lateinit var fragmentManager: FragmentManager
+ private lateinit var loginPicker: LoginPicker
+ private lateinit var creditCardPicker: CreditCardPicker
+ private lateinit var addressPicker: AddressPicker
+
+ private val tabId = "test-tab"
+ private fun tab(): TabSessionState? {
+ return store.state.tabs.find { it.id == tabId }
+ }
+
+ @Before
+ @ExperimentalCoroutinesApi
+ fun setUp() {
+ store = BrowserStore(
+ BrowserState(
+ tabs = listOf(
+ createTab("https://www.mozilla.org", id = tabId),
+ ),
+ customTabs = listOf(
+ createCustomTab("https://www.mozilla.org", id = "custom-tab"),
+ ),
+ selectedTabId = tabId,
+ ),
+ )
+ loginPicker = mock()
+ creditCardPicker = mock()
+ addressPicker = mock()
+ fragmentManager = mockFragmentManager()
+ }
+
+ @Test
+ fun `PromptFeature acts on the selected session by default`() {
+ val feature = spy(
+ PromptFeature(
+ fragment = mock(),
+ fileUploadsDirCleaner = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ ) { },
+ )
+ feature.start()
+
+ val promptRequest = SingleChoice(arrayOf(), {}, {})
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest)).joinBlocking()
+ verify(feature).onPromptRequested(store.state.tabs.first())
+ }
+
+ @Test
+ fun `PromptFeature acts on a given custom tab session`() {
+ val feature = spy(
+ PromptFeature(
+ fragment = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fileUploadsDirCleaner = mock(),
+ customTabId = "custom-tab",
+ fragmentManager = fragmentManager,
+ ) { },
+ )
+ feature.start()
+
+ val promptRequest = SingleChoice(arrayOf(), {}, {})
+ store.dispatch(ContentAction.UpdatePromptRequestAction("custom-tab", promptRequest))
+ .joinBlocking()
+ verify(feature).onPromptRequested(store.state.customTabs.first())
+ }
+
+ @Test
+ fun `PromptFeature acts on the selected session if there is no custom tab ID`() {
+ val feature = spy(
+ PromptFeature(
+ fragment = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ customTabId = tabId,
+ fileUploadsDirCleaner = mock(),
+ fragmentManager = fragmentManager,
+ ) { },
+ )
+
+ val promptRequest = SingleChoice(arrayOf(), {}, {})
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest)).joinBlocking()
+ feature.start()
+ verify(feature).onPromptRequested(store.state.tabs.first())
+ }
+
+ @Test
+ fun `New promptRequests for selected session will cause fragment transaction`() {
+ val feature =
+ PromptFeature(
+ fragment = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fileUploadsDirCleaner = mock(),
+ fragmentManager = fragmentManager,
+ ) { }
+ feature.start()
+
+ val singleChoiceRequest = SingleChoice(arrayOf(), {}, {})
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, singleChoiceRequest))
+ .joinBlocking()
+ verify(fragmentManager).beginTransaction()
+ }
+
+ @Test
+ fun `New promptRequests for selected session will not cause fragment transaction if feature is stopped`() {
+ val feature =
+ PromptFeature(
+ fragment = mock(),
+ tabsUseCases = mock(),
+ store = store,
+ fileUploadsDirCleaner = mock(),
+ fragmentManager = fragmentManager,
+ ) { }
+ feature.start()
+ feature.stop()
+
+ val singleChoiceRequest = SingleChoice(arrayOf(), {}, {})
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, singleChoiceRequest))
+ .joinBlocking()
+ verify(fragmentManager, never()).beginTransaction()
+ }
+
+ @Test
+ fun `Feature will re-attach to already existing fragment`() {
+ val fragment: ChoiceDialogFragment = mock()
+ doReturn(tabId).`when`(fragment).sessionId
+ doReturn(fragment).`when`(fragmentManager).findFragmentByTag(FRAGMENT_TAG)
+
+ val singleChoiceRequest = SingleChoice(arrayOf(), {}, {})
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, singleChoiceRequest))
+ .joinBlocking()
+
+ val feature =
+ PromptFeature(
+ activity = mock(),
+ tabsUseCases = mock(),
+ store = store,
+ fileUploadsDirCleaner = mock(),
+ fragmentManager = fragmentManager,
+ ) { }
+ feature.start()
+ verify(fragment).feature = feature
+ }
+
+ @Test
+ fun `Existing fragment will be removed if session has no prompt request`() {
+ val fragment: ChoiceDialogFragment = mock()
+ doReturn(tabId).`when`(fragment).sessionId
+ doReturn(fragment).`when`(fragmentManager).findFragmentByTag(FRAGMENT_TAG)
+
+ val transaction: FragmentTransaction = mock()
+ doReturn(transaction).`when`(fragmentManager).beginTransaction()
+ doReturn(transaction).`when`(transaction).remove(any())
+
+ val feature =
+ PromptFeature(
+ activity = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fileUploadsDirCleaner = mock(),
+ fragmentManager = fragmentManager,
+ ) { }
+ feature.start()
+
+ verify(fragment, never()).feature = feature
+ verify(fragmentManager).beginTransaction()
+ verify(transaction).remove(fragment)
+ }
+
+ @Test
+ fun `Existing fragment will be removed if session does not exist anymore`() {
+ val fragment: ChoiceDialogFragment = mock()
+ doReturn("invalid-tab").`when`(fragment).sessionId
+ doReturn(fragment).`when`(fragmentManager).findFragmentByTag(FRAGMENT_TAG)
+
+ val singleChoiceRequest = SingleChoice(arrayOf(), {}, {})
+ store.dispatch(ContentAction.UpdatePromptRequestAction("invalid-tab", singleChoiceRequest))
+ .joinBlocking()
+
+ val transaction: FragmentTransaction = mock()
+ doReturn(transaction).`when`(fragmentManager).beginTransaction()
+ doReturn(transaction).`when`(transaction).remove(any())
+
+ val feature =
+ PromptFeature(
+ activity = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fileUploadsDirCleaner = mock(),
+ fragmentManager = fragmentManager,
+ ) { }
+ feature.start()
+
+ verify(fragment, never()).feature = feature
+ verify(fragmentManager).beginTransaction()
+ verify(transaction).remove(fragment)
+ }
+
+ @Test
+ fun `Calling onStop will attempt to dismiss the select prompts`() {
+ val feature = spy(
+ PromptFeature(
+ mock<Activity>(),
+ store,
+ tabsUseCases = mock(),
+ fileUploadsDirCleaner = mock(),
+ fragmentManager = fragmentManager,
+ ) { },
+ )
+
+ feature.stop()
+
+ verify(feature).dismissSelectPrompts()
+ }
+
+ @Test
+ fun `GIVEN loginPickerView is visible WHEN dismissSelectPrompts THEN dismissCurrentLoginSelect called and true returned`() {
+ // given
+ val loginPickerView: SelectablePromptView<Login> = mock()
+ val feature = spy(
+ PromptFeature(
+ mock<Activity>(),
+ store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ fileUploadsDirCleaner = mock(),
+ loginDelegate = object : LoginDelegate {
+ override val loginPickerView = loginPickerView
+ override val onManageLogins = {}
+ },
+ ) { },
+ )
+ val selectLoginPrompt = mock<PromptRequest.SelectLoginPrompt>()
+ whenever(loginPickerView.asView()).thenReturn(mock())
+ whenever(loginPickerView.asView().visibility).thenReturn(View.VISIBLE)
+ feature.loginPicker = loginPicker
+ feature.activePromptRequest = selectLoginPrompt
+
+ // when
+ val result = feature.dismissSelectPrompts()
+
+ // then
+ verify(feature.loginPicker!!).dismissCurrentLoginSelect(selectLoginPrompt)
+ assertEquals(true, result)
+ }
+
+ @Test
+ fun `GIVEN saveLoginPrompt is visible WHEN prompt is removed from state THEN dismiss saveLoginPrompt`() {
+ // given
+ val loginUsername = "username"
+ val loginPassword = "password"
+ val entry: LoginEntry = mock()
+ `when`(entry.username).thenReturn(loginUsername)
+ `when`(entry.password).thenReturn(loginPassword)
+ val promptRequest = PromptRequest.SaveLoginPrompt(2, listOf(entry), { }, { })
+ val saveLoginPrompt: SaveLoginDialogFragment = mock()
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest))
+ .joinBlocking()
+ store.waitUntilIdle()
+
+ val feature = spy(
+ PromptFeature(
+ mock<Activity>(),
+ store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ fileUploadsDirCleaner = mock(),
+ exitFullscreenUsecase = mock(),
+ isSaveLoginEnabled = { true },
+ loginValidationDelegate = mock(),
+ ) { },
+ )
+
+ feature.start()
+ feature.activePrompt = WeakReference(saveLoginPrompt)
+ feature.activePromptRequest = promptRequest
+
+ // when
+ store.dispatch(ContentAction.ConsumePromptRequestAction(tabId, promptRequest))
+ .joinBlocking()
+
+ // then
+ verify(saveLoginPrompt).dismissAllowingStateLoss()
+ }
+
+ @Test
+ fun `GIVEN isSaveLoginEnabled is false WHEN saveLoginPrompt request is handled THEN dismiss saveLoginPrompt`() {
+ val promptRequest = spy(
+ PromptRequest.SaveLoginPrompt(
+ hint = 2,
+ logins = emptyList(),
+ onConfirm = {},
+ onDismiss = {},
+ ),
+ )
+ val feature = spy(
+ PromptFeature(
+ activity = mock(),
+ store = store,
+ fileUploadsDirCleaner = mock(),
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ isSaveLoginEnabled = { false },
+ ) {},
+ )
+ val session = tab()!!
+
+ feature.handleDialogsRequest(promptRequest, session)
+
+ store.waitUntilIdle()
+
+ verify(feature).dismissDialogRequest(promptRequest, session)
+ }
+
+ @Test
+ fun `GIVEN loginValidationDelegate is null WHEN saveLoginPrompt request is handled THEN dismiss saveLoginPrompt`() {
+ val promptRequest = spy(
+ PromptRequest.SaveLoginPrompt(
+ hint = 2,
+ logins = emptyList(),
+ onConfirm = {},
+ onDismiss = {},
+ ),
+ )
+ val feature = spy(
+ PromptFeature(
+ activity = mock(),
+ store = store,
+ fileUploadsDirCleaner = mock(),
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ isSaveLoginEnabled = { true },
+ ) {},
+ )
+ val session = tab()!!
+
+ feature.handleDialogsRequest(promptRequest, session)
+
+ store.waitUntilIdle()
+
+ verify(feature).dismissDialogRequest(promptRequest, session)
+ }
+
+ @Test
+ fun `WHEN dismissDialogRequest is called THEN dismiss and consume the prompt request`() {
+ val tab = createTab("https://www.mozilla.org", id = tabId)
+ val store = spy(
+ BrowserStore(
+ BrowserState(
+ tabs = listOf(tab),
+ customTabs = listOf(
+ createCustomTab("https://www.mozilla.org", id = "custom-tab"),
+ ),
+ selectedTabId = tabId,
+ ),
+ ),
+ )
+ val feature = PromptFeature(
+ activity = mock(),
+ store = store,
+ fileUploadsDirCleaner = mock(),
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ ) {}
+
+ var onDismissWasCalled = false
+ val promptRequest = PromptRequest.SaveLoginPrompt(
+ hint = 2,
+ logins = emptyList(),
+ onConfirm = {},
+ onDismiss = { onDismissWasCalled = true },
+ )
+
+ feature.dismissDialogRequest(promptRequest, tab)
+
+ store.waitUntilIdle()
+
+ verify(store).dispatch(ContentAction.ConsumePromptRequestAction(tab.id, promptRequest))
+ assertTrue(onDismissWasCalled)
+ }
+
+ @Test
+ fun `GIVEN loginPickerView is not visible WHEN dismissSelectPrompts THEN dismissCurrentLoginSelect called and false returned`() {
+ // given
+ val loginPickerView: SelectablePromptView<Login> = mock()
+ val feature = spy(
+ PromptFeature(
+ mock<Activity>(),
+ store,
+ tabsUseCases = mock(),
+ fileUploadsDirCleaner = mock(),
+ fragmentManager = fragmentManager,
+ loginDelegate = object : LoginDelegate {
+ override val loginPickerView = loginPickerView
+ override val onManageLogins = {}
+ },
+ ) { },
+ )
+ val selectLoginPrompt = mock<PromptRequest.SelectLoginPrompt>()
+ whenever(loginPickerView.asView()).thenReturn(mock())
+ whenever(loginPickerView.asView().visibility).thenReturn(View.GONE)
+ feature.loginPicker = loginPicker
+ feature.activePromptRequest = selectLoginPrompt
+
+ // when
+ val result = feature.dismissSelectPrompts()
+
+ // then
+ assertEquals(false, result)
+ }
+
+ @Test
+ fun `GIVEN PromptFeature WHEN onBackPressed THEN dismissSelectPrompts is called`() {
+ // given
+ val loginPickerView: SelectablePromptView<Login> = mock()
+ val feature = spy(
+ PromptFeature(
+ mock<Activity>(),
+ store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ fileUploadsDirCleaner = mock(),
+ loginDelegate = object : LoginDelegate {
+ override val loginPickerView = loginPickerView
+ override val onManageLogins = {}
+ },
+ ) { },
+ )
+ val selectLoginPrompt = mock<PromptRequest.SelectLoginPrompt>()
+ whenever(loginPickerView.asView()).thenReturn(mock())
+ whenever(loginPickerView.asView().visibility).thenReturn(View.VISIBLE)
+ feature.loginPicker = loginPicker
+ feature.activePromptRequest = selectLoginPrompt
+
+ // when
+ val result = feature.onBackPressed()
+
+ // then
+ verify(feature).dismissSelectPrompts()
+ assertEquals(true, result)
+ }
+
+ @Test
+ fun `Calling dismissSelectPrompts should dismiss the login picker if the login prompt is active`() {
+ val loginPickerView: SelectablePromptView<Login> = mock()
+ val feature = spy(
+ PromptFeature(
+ mock<Activity>(),
+ store,
+ tabsUseCases = mock(),
+ fileUploadsDirCleaner = mock(),
+ fragmentManager = fragmentManager,
+ loginDelegate = object : LoginDelegate {
+ override val loginPickerView = loginPickerView
+ override val onManageLogins = {}
+ },
+ ) { },
+ )
+ val selectLoginPrompt = mock<PromptRequest.SelectLoginPrompt>()
+ whenever(loginPickerView.asView()).thenReturn(mock())
+ whenever(loginPickerView.asView().visibility).thenReturn(View.VISIBLE)
+
+ feature.loginPicker = loginPicker
+ feature.activePromptRequest = mock<SingleChoice>()
+ feature.dismissSelectPrompts()
+ verify(feature.loginPicker!!, never()).dismissCurrentLoginSelect(any())
+
+ feature.loginPicker = loginPicker
+ feature.activePromptRequest = selectLoginPrompt
+ feature.dismissSelectPrompts()
+ verify(feature.loginPicker!!).dismissCurrentLoginSelect(selectLoginPrompt)
+ }
+
+ @Test
+ fun `GIVEN creditCardPickerView is visible WHEN dismissSelectPrompts is called THEN dismissSelectCreditCardRequest returns true`() {
+ val creditCardPickerView: SelectablePromptView<CreditCardEntry> = mock()
+ val feature = spy(
+ PromptFeature(
+ mock<Activity>(),
+ store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ fileUploadsDirCleaner = mock(),
+ creditCardDelegate = object : CreditCardDelegate {
+ override val creditCardPickerView = creditCardPickerView
+ override val onSelectCreditCard = {}
+ override val onManageCreditCards = {}
+ },
+ ) { },
+ )
+ val selectCreditCardRequest = mock<PromptRequest.SelectCreditCard>()
+ feature.creditCardPicker = creditCardPicker
+ feature.activePromptRequest = selectCreditCardRequest
+
+ whenever(creditCardPickerView.asView()).thenReturn(mock())
+ whenever(creditCardPickerView.asView().visibility).thenReturn(View.VISIBLE)
+
+ val result = feature.dismissSelectPrompts()
+
+ verify(feature.creditCardPicker!!).dismissSelectCreditCardRequest(selectCreditCardRequest)
+ assertEquals(true, result)
+ }
+
+ @Test
+ fun `GIVEN creditCardPickerView is not visible WHEN dismissSelectPrompts is called THEN dismissSelectPrompt returns false`() {
+ val creditCardPickerView: SelectablePromptView<CreditCardEntry> = mock()
+ val feature = spy(
+ PromptFeature(
+ mock<Activity>(),
+ store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ fileUploadsDirCleaner = mock(),
+ creditCardDelegate = object : CreditCardDelegate {
+ override val creditCardPickerView = creditCardPickerView
+ override val onSelectCreditCard = {}
+ override val onManageCreditCards = {}
+ },
+ ) { },
+ )
+ val selectCreditCardRequest = mock<PromptRequest.SelectCreditCard>()
+ feature.creditCardPicker = creditCardPicker
+ feature.activePromptRequest = selectCreditCardRequest
+
+ whenever(creditCardPickerView.asView()).thenReturn(mock())
+ whenever(creditCardPickerView.asView().visibility).thenReturn(View.GONE)
+
+ val result = feature.dismissSelectPrompts()
+
+ assertEquals(false, result)
+ }
+
+ @Test
+ fun `GIVEN an active select credit card request WHEN onBackPressed is called THEN dismissSelectPrompts is called`() {
+ val creditCardPickerView: SelectablePromptView<CreditCardEntry> = mock()
+ val feature = spy(
+ PromptFeature(
+ mock<Activity>(),
+ store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ fileUploadsDirCleaner = mock(),
+ creditCardDelegate = object : CreditCardDelegate {
+ override val creditCardPickerView = creditCardPickerView
+ override val onSelectCreditCard = {}
+ override val onManageCreditCards = {}
+ },
+ ) { },
+ )
+ val selectCreditCardRequest = mock<PromptRequest.SelectCreditCard>()
+ feature.creditCardPicker = creditCardPicker
+ feature.activePromptRequest = selectCreditCardRequest
+
+ whenever(creditCardPickerView.asView()).thenReturn(mock())
+ whenever(creditCardPickerView.asView().visibility).thenReturn(View.VISIBLE)
+
+ val result = feature.onBackPressed()
+
+ verify(feature).dismissSelectPrompts()
+ assertEquals(true, result)
+ }
+
+ @Test
+ fun `WHEN dismissSelectPrompts is called THEN the active credit card picker should be dismissed`() {
+ val creditCardPickerView: SelectablePromptView<CreditCardEntry> = mock()
+ val feature = spy(
+ PromptFeature(
+ mock<Activity>(),
+ store,
+ tabsUseCases = mock(),
+ fileUploadsDirCleaner = mock(),
+ fragmentManager = fragmentManager,
+ creditCardDelegate = object : CreditCardDelegate {
+ override val creditCardPickerView = creditCardPickerView
+ override val onSelectCreditCard = {}
+ override val onManageCreditCards = {}
+ },
+ ) { },
+ )
+ feature.creditCardPicker = creditCardPicker
+ feature.activePromptRequest = mock<SingleChoice>()
+
+ whenever(creditCardPickerView.asView()).thenReturn(mock())
+ whenever(creditCardPickerView.asView().visibility).thenReturn(View.VISIBLE)
+
+ feature.dismissSelectPrompts()
+ verify(feature.creditCardPicker!!, never()).dismissSelectCreditCardRequest(any())
+
+ val selectCreditCardRequest = mock<PromptRequest.SelectCreditCard>()
+ feature.activePromptRequest = selectCreditCardRequest
+
+ feature.dismissSelectPrompts()
+
+ verify(feature.creditCardPicker!!).dismissSelectCreditCardRequest(selectCreditCardRequest)
+ }
+
+ @Test
+ fun `WHEN dismissSelectPrompts is called THEN the active addressPicker dismiss should be called`() {
+ val addressPickerView: SelectablePromptView<Address> = mock()
+ val addressDelegate: AddressDelegate = mock()
+ val feature = spy(
+ PromptFeature(
+ mock<Activity>(),
+ store,
+ tabsUseCases = mock(),
+ fileUploadsDirCleaner = mock(),
+ fragmentManager = fragmentManager,
+ addressDelegate = addressDelegate,
+ ) { },
+ )
+ feature.addressPicker = addressPicker
+ feature.activePromptRequest = mock<SingleChoice>()
+
+ whenever(addressDelegate.addressPickerView).thenReturn(addressPickerView)
+ whenever(addressPickerView.asView()).thenReturn(mock())
+ whenever(addressPickerView.asView().visibility).thenReturn(View.VISIBLE)
+
+ feature.dismissSelectPrompts()
+ verify(feature.addressPicker!!, never()).dismissSelectAddressRequest(any())
+
+ val selectAddressPromptRequest = mock<PromptRequest.SelectAddress>()
+ feature.activePromptRequest = selectAddressPromptRequest
+
+ feature.dismissSelectPrompts()
+
+ verify(feature.addressPicker!!).dismissSelectAddressRequest(selectAddressPromptRequest)
+
+ store.waitUntilIdle()
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ }
+
+ @Test
+ fun `GIVEN addressPickerView is not visible WHEN dismissSelectPrompts is called THEN dismissSelectPrompts returns false`() {
+ val addressPickerView: SelectablePromptView<Address> = mock()
+ val addressDelegate: AddressDelegate = mock()
+ val feature = spy(
+ PromptFeature(
+ mock<Activity>(),
+ store,
+ fileUploadsDirCleaner = mock(),
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ addressDelegate = addressDelegate,
+ ) { },
+ )
+ val selectAddressRequest = mock<PromptRequest.SelectAddress>()
+ feature.addressPicker = addressPicker
+ feature.activePromptRequest = selectAddressRequest
+
+ whenever(addressDelegate.addressPickerView).thenReturn(addressPickerView)
+ whenever(addressPickerView.asView()).thenReturn(mock())
+ whenever(addressPickerView.asView().visibility).thenReturn(View.GONE)
+
+ val result = feature.dismissSelectPrompts()
+
+ assertEquals(false, result)
+ }
+
+ @Test
+ fun `Calling onCancel will consume promptRequest`() {
+ val feature =
+ PromptFeature(
+ activity = mock(),
+ store = store,
+ fileUploadsDirCleaner = mock(),
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ ) { }
+
+ val singleChoiceRequest = SingleChoice(arrayOf(), {}, {})
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, singleChoiceRequest))
+ .joinBlocking()
+
+ assertEquals(1, tab()!!.content.promptRequests.size)
+ assertEquals(singleChoiceRequest, tab()!!.content.promptRequests[0])
+ feature.onCancel(tabId, singleChoiceRequest.uid)
+
+ store.waitUntilIdle()
+ assertTrue(tab()?.content?.promptRequests?.isEmpty() ?: false)
+ }
+
+ @Test
+ fun `Selecting an item in a single choice dialog will consume promptRequest`() {
+ val feature =
+ PromptFeature(
+ activity = mock(),
+ store = store,
+ fileUploadsDirCleaner = mock(),
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ ) { }
+ feature.start()
+
+ val singleChoiceRequest = SingleChoice(arrayOf(), {}, {})
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, singleChoiceRequest))
+ .joinBlocking()
+
+ assertEquals(1, tab()!!.content.promptRequests.size)
+ assertEquals(singleChoiceRequest, tab()!!.content.promptRequests[0])
+ feature.onConfirm(tabId, singleChoiceRequest.uid, mock<Choice>())
+
+ store.waitUntilIdle()
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ }
+
+ @Test
+ fun `Selecting an item in a menu choice dialog will consume promptRequest`() {
+ val feature =
+ PromptFeature(
+ activity = mock(),
+ store = store,
+ fileUploadsDirCleaner = mock(),
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ ) { }
+ feature.start()
+
+ val menuChoiceRequest = MenuChoice(arrayOf(), {}, {})
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, menuChoiceRequest))
+ .joinBlocking()
+
+ assertEquals(1, tab()!!.content.promptRequests.size)
+ assertEquals(menuChoiceRequest, tab()!!.content.promptRequests[0])
+ feature.onConfirm(tabId, menuChoiceRequest.uid, mock<Choice>())
+
+ store.waitUntilIdle()
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ }
+
+ @Test
+ fun `Selecting items on multiple choice dialog will consume promptRequest`() {
+ val feature =
+ PromptFeature(
+ activity = mock(),
+ store = store,
+ fileUploadsDirCleaner = mock(),
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ ) { }
+ feature.start()
+
+ val multipleChoiceRequest = MultipleChoice(arrayOf(), {}, {})
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, multipleChoiceRequest))
+ .joinBlocking()
+
+ assertEquals(1, tab()!!.content.promptRequests.size)
+ assertEquals(multipleChoiceRequest, tab()!!.content.promptRequests[0])
+ feature.onConfirm(tabId, multipleChoiceRequest.uid, arrayOf<Choice>())
+
+ store.waitUntilIdle()
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ }
+
+ @Test
+ fun `onNoMoreDialogsChecked will consume promptRequest`() {
+ val feature =
+ PromptFeature(
+ activity = mock(),
+ store = store,
+ fileUploadsDirCleaner = mock(),
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ ) { }
+
+ var onShowNoMoreAlertsWasCalled = false
+ var onDismissWasCalled = false
+
+ val promptRequest = Alert(
+ "title",
+ "message",
+ false,
+ { onShowNoMoreAlertsWasCalled = true },
+ { onDismissWasCalled = true },
+ )
+
+ feature.start()
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest)).joinBlocking()
+ feature.onConfirm(tabId, promptRequest.uid, false)
+ store.waitUntilIdle()
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ assertTrue(onShowNoMoreAlertsWasCalled)
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest)).joinBlocking()
+ feature.onCancel(tabId, promptRequest.uid)
+ store.waitUntilIdle()
+ assertTrue(onDismissWasCalled)
+ }
+
+ @Test
+ fun `Calling onCancel with an alert request will consume promptRequest and call onDismiss`() {
+ val feature =
+ PromptFeature(
+ activity = mock(),
+ store = store,
+ fileUploadsDirCleaner = mock(),
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ ) { }
+ var onDismissWasCalled = false
+ val promptRequest = Alert("title", "message", false, {}, { onDismissWasCalled = true })
+
+ feature.start()
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest)).joinBlocking()
+ feature.onCancel(tabId, promptRequest.uid)
+ store.waitUntilIdle()
+ assertTrue(onDismissWasCalled)
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ }
+
+ @Test
+ fun `onConfirmTextPrompt will consume promptRequest`() {
+ val feature =
+ PromptFeature(
+ activity = mock(),
+ fileUploadsDirCleaner = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ ) { }
+ var onConfirmWasCalled = false
+ var onDismissWasCalled = false
+
+ val promptRequest = TextPrompt(
+ "title",
+ "message",
+ "input",
+ false,
+ { _, _ -> onConfirmWasCalled = true },
+ { onDismissWasCalled = true },
+ )
+
+ feature.start()
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest)).joinBlocking()
+ feature.onConfirm(tabId, promptRequest.uid, false to "")
+ store.waitUntilIdle()
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ assertTrue(onConfirmWasCalled)
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest)).joinBlocking()
+ feature.onCancel(tabId, promptRequest.uid)
+ store.waitUntilIdle()
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ assertTrue(onDismissWasCalled)
+ }
+
+ @Test
+ fun `Calling onCancel with an TextPrompt request will consume promptRequest and call onDismiss`() {
+ val feature =
+ PromptFeature(
+ activity = mock(),
+ fileUploadsDirCleaner = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ ) { }
+ var onDismissWasCalled = false
+
+ val promptRequest = TextPrompt(
+ "title",
+ "message",
+ "value",
+ false,
+ { _, _ -> },
+ { onDismissWasCalled = true },
+ )
+
+ feature.start()
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest)).joinBlocking()
+
+ feature.onCancel(tabId, promptRequest.uid)
+ store.waitUntilIdle()
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ assertTrue(onDismissWasCalled)
+ }
+
+ @Test
+ fun `selecting a time will consume promptRequest`() {
+ val timeSelectionTypes = listOf(
+ PromptRequest.TimeSelection.Type.DATE,
+ PromptRequest.TimeSelection.Type.DATE_AND_TIME,
+ PromptRequest.TimeSelection.Type.TIME,
+ PromptRequest.TimeSelection.Type.MONTH,
+ )
+
+ timeSelectionTypes.forEach { type ->
+ val feature = PromptFeature(
+ activity = mock(),
+ fileUploadsDirCleaner = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ ) { }
+ var onClearWasCalled = false
+ var selectedDate: Date? = null
+ val promptRequest = PromptRequest.TimeSelection(
+ "title",
+ Date(0),
+ null,
+ null,
+ null,
+ type,
+ { date -> selectedDate = date },
+ { onClearWasCalled = true },
+ { },
+ )
+
+ feature.start()
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest))
+ .joinBlocking()
+
+ val now = Date()
+ feature.onConfirm(tabId, promptRequest.uid, now)
+ store.waitUntilIdle()
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+
+ assertEquals(now, selectedDate)
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest))
+ .joinBlocking()
+
+ feature.onClear(tabId, promptRequest.uid)
+ assertTrue(onClearWasCalled)
+ feature.stop()
+ }
+ }
+
+ @Test(expected = InvalidParameterException::class)
+ fun `calling handleDialogsRequest with invalid type will throw an exception`() {
+ val feature =
+ PromptFeature(
+ activity = mock(),
+ fileUploadsDirCleaner = mock(),
+ tabsUseCases = mock(),
+ store = store,
+ fragmentManager = fragmentManager,
+ ) { }
+ feature.handleDialogsRequest(mock<PromptRequest.File>(), mock())
+ }
+
+ @Test
+ fun `onActivityResult with RESULT_OK and isMultipleFilesSelection false will consume PromptRequest`() {
+ var onSingleFileSelectionWasCalled = false
+
+ val onSingleFileSelection: (Context, Uri) -> Unit = { _, _ ->
+ onSingleFileSelectionWasCalled = true
+ }
+
+ val filePickerRequest =
+ PromptRequest.File(emptyArray(), false, onSingleFileSelection, { _, _ -> }) { }
+ val activity = mock<Activity>()
+ doReturn(mock<ContentResolver>()).`when`(activity).contentResolver
+
+ val feature =
+ PromptFeature(
+ activity = activity,
+ fileUploadsDirCleaner = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ ) { }
+ val intent = Intent()
+
+ intent.data = mock()
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, filePickerRequest))
+ .joinBlocking()
+
+ feature.onActivityResult(FILE_PICKER_ACTIVITY_REQUEST_CODE, intent, RESULT_OK)
+ store.waitUntilIdle()
+ assertTrue(onSingleFileSelectionWasCalled)
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ }
+
+ @Test
+ fun `onActivityResult with RESULT_OK and isMultipleFilesSelection true will consume PromptRequest of the actual session`() {
+ var onMultipleFileSelectionWasCalled = false
+
+ val onMultipleFileSelection: (Context, Array<Uri>) -> Unit = { _, _ ->
+ onMultipleFileSelectionWasCalled = true
+ }
+
+ val filePickerRequest =
+ PromptRequest.File(emptyArray(), true, { _, _ -> }, onMultipleFileSelection) {}
+ val activity = mock<Activity>()
+ doReturn(mock<ContentResolver>()).`when`(activity).contentResolver
+
+ val feature =
+ PromptFeature(
+ activity = activity,
+ fileUploadsDirCleaner = mock(),
+ tabsUseCases = mock(),
+ store = store,
+ fragmentManager = fragmentManager,
+ ) { }
+ val intent = Intent()
+
+ intent.clipData = mock()
+ val item = mock<ClipData.Item>()
+
+ doReturn(mock<Uri>()).`when`(item).uri
+
+ intent.clipData?.apply {
+ doReturn(1).`when`(this).itemCount
+ doReturn(item).`when`(this).getItemAt(0)
+ }
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, filePickerRequest))
+ .joinBlocking()
+
+ feature.onActivityResult(FILE_PICKER_ACTIVITY_REQUEST_CODE, intent, RESULT_OK)
+ store.waitUntilIdle()
+ assertTrue(onMultipleFileSelectionWasCalled)
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ }
+
+ @Test
+ fun `onActivityResult with RESULT_CANCELED will consume PromptRequest call onDismiss`() {
+ var onDismissWasCalled = false
+
+ val filePickerRequest =
+ PromptRequest.File(emptyArray(), true, { _, _ -> }, { _, _ -> }) {
+ onDismissWasCalled = true
+ }
+
+ val feature =
+ PromptFeature(
+ activity = mock(),
+ store = store,
+ fileUploadsDirCleaner = mock(),
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ ) { }
+ val intent = Intent()
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, filePickerRequest))
+ .joinBlocking()
+
+ feature.onActivityResult(FILE_PICKER_ACTIVITY_REQUEST_CODE, intent, RESULT_CANCELED)
+ store.waitUntilIdle()
+ assertTrue(onDismissWasCalled)
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ }
+
+ @Test
+ fun `WHEN onActivityResult is called with PIN_REQUEST and RESULT_OK THEN onAuthSuccess) is called`() {
+ val creditCardPickerView: SelectablePromptView<CreditCardEntry> = mock()
+ val feature =
+ PromptFeature(
+ activity = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fileUploadsDirCleaner = mock(),
+ fragmentManager = fragmentManager,
+ creditCardDelegate = object : CreditCardDelegate {
+ override val creditCardPickerView = creditCardPickerView
+ override val onSelectCreditCard = {}
+ override val onManageCreditCards = {}
+ },
+ isCreditCardAutofillEnabled = { true },
+ ) { }
+ feature.creditCardPicker = creditCardPicker
+ val intent = Intent()
+
+ feature.onActivityResult(PromptFeature.PIN_REQUEST, intent, RESULT_OK)
+
+ verify(creditCardPicker).onAuthSuccess()
+ }
+
+ @Test
+ fun `WHEN onActivityResult is called with PIN_REQUEST and RESULT_CANCELED THEN onAuthFailure is called`() {
+ val creditCardPickerView: SelectablePromptView<CreditCardEntry> = mock()
+ val feature =
+ PromptFeature(
+ activity = mock(),
+ store = store,
+ fileUploadsDirCleaner = mock(),
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ creditCardDelegate = object : CreditCardDelegate {
+ override val creditCardPickerView = creditCardPickerView
+ override val onSelectCreditCard = {}
+ override val onManageCreditCards = {}
+ },
+ isCreditCardAutofillEnabled = { true },
+ ) { }
+ feature.creditCardPicker = creditCardPicker
+ val intent = Intent()
+
+ feature.onActivityResult(PromptFeature.PIN_REQUEST, intent, RESULT_CANCELED)
+
+ verify(creditCardPicker).onAuthFailure()
+ }
+
+ @Test
+ fun `GIVEN user successfully authenticates by biometric prompt WHEN onBiometricResult is called THEN onAuthSuccess is called`() {
+ val creditCardPickerView: SelectablePromptView<CreditCardEntry> = mock()
+ val feature =
+ PromptFeature(
+ activity = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ fileUploadsDirCleaner = mock(),
+ creditCardDelegate = object : CreditCardDelegate {
+ override val creditCardPickerView = creditCardPickerView
+ override val onSelectCreditCard = {}
+ override val onManageCreditCards = {}
+ },
+ isCreditCardAutofillEnabled = { true },
+ ) { }
+ feature.creditCardPicker = creditCardPicker
+
+ feature.onBiometricResult(isAuthenticated = true)
+
+ verify(creditCardPicker).onAuthSuccess()
+ }
+
+ @Test
+ fun `GIVEN user fails to authenticate by biometric prompt WHEN onBiometricResult is called THEN onAuthFailure) is called`() {
+ val creditCardPickerView: SelectablePromptView<CreditCardEntry> = mock()
+ val feature =
+ PromptFeature(
+ activity = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fileUploadsDirCleaner = mock(),
+ fragmentManager = fragmentManager,
+ creditCardDelegate = object : CreditCardDelegate {
+ override val creditCardPickerView = creditCardPickerView
+ override val onSelectCreditCard = {}
+ override val onManageCreditCards = {}
+ },
+ isCreditCardAutofillEnabled = { true },
+ ) { }
+ feature.creditCardPicker = creditCardPicker
+
+ feature.onBiometricResult(isAuthenticated = false)
+
+ verify(creditCardPicker).onAuthFailure()
+ }
+
+ @Test
+ fun `Selecting a login confirms the request`() {
+ var onDismissWasCalled = false
+ var confirmedLogin: Login? = null
+
+ val login =
+ Login(guid = "A", origin = "https://www.mozilla.org", username = "username", password = "password")
+ val login2 =
+ Login(guid = "B", origin = "https://www.mozilla.org", username = "username2", password = "password")
+
+ val loginPickerRequest = PromptRequest.SelectLoginPrompt(
+ logins = listOf(login, login2),
+ generatedPassword = null,
+ onConfirm = { confirmedLogin = it },
+ onDismiss = { onDismissWasCalled = true },
+ )
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, loginPickerRequest))
+ .joinBlocking()
+
+ loginPickerRequest.onConfirm(login)
+
+ store.waitUntilIdle()
+
+ assertEquals(confirmedLogin, login)
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, loginPickerRequest))
+ .joinBlocking()
+ loginPickerRequest.onDismiss()
+
+ store.waitUntilIdle()
+
+ assertTrue(onDismissWasCalled)
+ }
+
+ @Test
+ fun `WHEN a credit card is selected THEN confirm the prompt request with the selected credit card`() {
+ val creditCard = CreditCardEntry(
+ guid = "id",
+ name = "Banana Apple",
+ number = "4111111111111110",
+ expiryMonth = "5",
+ expiryYear = "2030",
+ cardType = "amex",
+ )
+ var onDismissCalled = false
+ var onConfirmCalled = false
+ var confirmedCreditCard: CreditCardEntry? = null
+
+ val selectCreditCardRequest = PromptRequest.SelectCreditCard(
+ creditCards = listOf(creditCard),
+ onDismiss = {
+ onDismissCalled = true
+ },
+ onConfirm = {
+ confirmedCreditCard = it
+ onConfirmCalled = true
+ },
+ )
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, selectCreditCardRequest))
+ .joinBlocking()
+
+ selectCreditCardRequest.onConfirm(creditCard)
+
+ store.waitUntilIdle()
+
+ assertEquals(creditCard, confirmedCreditCard)
+ assertTrue(onConfirmCalled)
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, selectCreditCardRequest))
+ .joinBlocking()
+ selectCreditCardRequest.onDismiss()
+
+ store.waitUntilIdle()
+
+ assertTrue(onDismissCalled)
+ }
+
+ @Test
+ fun `Calling onConfirmAuthentication will consume promptRequest`() {
+ val feature =
+ PromptFeature(
+ activity = mock(),
+ fileUploadsDirCleaner = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ ) { }
+
+ var onConfirmWasCalled = false
+ var onDismissWasCalled = false
+
+ val promptRequest = Authentication(
+ uri = "https://www.mozilla.org",
+ title = "title",
+ message = "message",
+ userName = "username",
+ password = "password",
+ method = HOST,
+ level = NONE,
+ onlyShowPassword = false,
+ previousFailed = false,
+ isCrossOrigin = false,
+ onConfirm = { _, _ -> onConfirmWasCalled = true },
+ onDismiss = { onDismissWasCalled = true },
+ )
+
+ feature.start()
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest)).joinBlocking()
+
+ feature.onConfirm(tabId, promptRequest.uid, "" to "")
+ store.waitUntilIdle()
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ assertTrue(onConfirmWasCalled)
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest)).joinBlocking()
+
+ feature.onCancel(tabId, promptRequest.uid)
+ store.waitUntilIdle()
+ assertTrue(onDismissWasCalled)
+ }
+
+ @Test
+ fun `Calling onConfirm on a BeforeUnload request will consume promptRequest`() {
+ val fragment: Fragment = mock()
+ whenever(fragment.getString(R.string.mozac_feature_prompt_before_unload_dialog_title)).thenReturn(
+ "",
+ )
+ whenever(fragment.getString(R.string.mozac_feature_prompt_before_unload_dialog_body)).thenReturn(
+ "",
+ )
+ whenever(fragment.getString(R.string.mozac_feature_prompts_before_unload_stay)).thenReturn("")
+ whenever(fragment.getString(R.string.mozac_feature_prompts_before_unload_leave)).thenReturn(
+ "",
+ )
+
+ val feature =
+ PromptFeature(
+ fragment = fragment,
+ store = store,
+ fileUploadsDirCleaner = mock(),
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ ) { }
+
+ var onLeaveWasCalled = false
+
+ val promptRequest = PromptRequest.BeforeUnload(
+ title = "title",
+ onLeave = { onLeaveWasCalled = true },
+ onStay = { },
+ )
+
+ feature.start()
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest)).joinBlocking()
+
+ feature.onConfirm(tabId, promptRequest.uid, "" to "")
+ store.waitUntilIdle()
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ assertTrue(onLeaveWasCalled)
+ }
+
+ @Test
+ fun `Calling onCancel on a authentication request will consume promptRequest and call onDismiss`() {
+ val feature =
+ PromptFeature(
+ activity = mock(),
+ fileUploadsDirCleaner = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ ) { }
+ var onDismissWasCalled = false
+
+ val promptRequest = Authentication(
+ uri = "https://www.mozilla.org",
+ title = "title",
+ message = "message",
+ userName = "username",
+ password = "password",
+ method = HOST,
+ level = NONE,
+ onlyShowPassword = false,
+ previousFailed = false,
+ isCrossOrigin = false,
+ onConfirm = { _, _ -> },
+ onDismiss = { onDismissWasCalled = true },
+ )
+
+ feature.start()
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest)).joinBlocking()
+
+ feature.onCancel(tabId, promptRequest.uid)
+ store.waitUntilIdle()
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ assertTrue(onDismissWasCalled)
+ }
+
+ @Test
+ fun `Calling onConfirm on a color request will consume promptRequest`() {
+ val feature =
+ PromptFeature(
+ activity = mock(),
+ store = store,
+ fileUploadsDirCleaner = mock(),
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ ) { }
+
+ var onConfirmWasCalled = false
+ var onDismissWasCalled = false
+
+ val promptRequest = Color(
+ "#e66465",
+ {
+ onConfirmWasCalled = true
+ },
+ ) {
+ onDismissWasCalled = true
+ }
+
+ feature.start()
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest)).joinBlocking()
+
+ feature.onConfirm(tabId, promptRequest.uid, "#f6b73c")
+ store.waitUntilIdle()
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ assertTrue(onConfirmWasCalled)
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest)).joinBlocking()
+
+ feature.onCancel(tabId, promptRequest.uid)
+ store.waitUntilIdle()
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ assertTrue(onDismissWasCalled)
+ }
+
+ @Test
+ fun `Calling onConfirm on a popup request will consume promptRequest`() {
+ val fragment: Fragment = mock()
+ whenever(fragment.getString(R.string.mozac_feature_prompts_popup_dialog_title)).thenReturn("")
+ whenever(fragment.getString(R.string.mozac_feature_prompts_allow)).thenReturn("")
+ whenever(fragment.getString(R.string.mozac_feature_prompts_deny)).thenReturn("")
+
+ val feature =
+ PromptFeature(
+ fragment = fragment,
+ store = store,
+ tabsUseCases = mock(),
+ fileUploadsDirCleaner = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ ) { }
+ var onConfirmWasCalled = false
+
+ val promptRequest = PromptRequest.Popup(
+ "http://www.popuptest.com/",
+ { onConfirmWasCalled = true },
+ { },
+ ) {}
+
+ feature.start()
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest)).joinBlocking()
+
+ feature.onConfirm(tabId, promptRequest.uid, true)
+ store.waitUntilIdle()
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ assertTrue(onConfirmWasCalled)
+ }
+
+ @Test
+ fun `Calling onCancel on a popup request will consume promptRequest`() {
+ val fragment: Fragment = mock()
+ whenever(fragment.getString(R.string.mozac_feature_prompts_popup_dialog_title)).thenReturn("")
+ whenever(fragment.getString(R.string.mozac_feature_prompts_allow)).thenReturn("")
+ whenever(fragment.getString(R.string.mozac_feature_prompts_deny)).thenReturn("")
+
+ val feature =
+ PromptFeature(
+ fragment = fragment,
+ fileUploadsDirCleaner = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ ) { }
+ var onCancelWasCalled = false
+
+ val promptRequest = PromptRequest.Popup(
+ "http://www.popuptest.com/",
+ onAllow = { },
+ onDeny = {
+ onCancelWasCalled = true
+ },
+ )
+
+ feature.start()
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest)).joinBlocking()
+
+ feature.onCancel(tabId, promptRequest.uid, true)
+ store.waitUntilIdle()
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ assertTrue(onCancelWasCalled)
+ }
+
+ @Test
+ fun `Calling onCancel on a BeforeUnload request will consume promptRequest`() {
+ val fragment: Fragment = mock()
+ whenever(fragment.getString(R.string.mozac_feature_prompt_before_unload_dialog_title)).thenReturn(
+ "",
+ )
+ whenever(fragment.getString(R.string.mozac_feature_prompt_before_unload_dialog_body)).thenReturn(
+ "",
+ )
+ whenever(fragment.getString(R.string.mozac_feature_prompts_before_unload_stay)).thenReturn("")
+ whenever(fragment.getString(R.string.mozac_feature_prompts_before_unload_leave)).thenReturn(
+ "",
+ )
+
+ val feature =
+ PromptFeature(
+ fragment = fragment,
+ fileUploadsDirCleaner = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ ) { }
+ var onCancelWasCalled = false
+
+ val promptRequest = PromptRequest.BeforeUnload("http://www.test.com/", { }) {
+ onCancelWasCalled = true
+ }
+
+ feature.start()
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest)).joinBlocking()
+
+ feature.onCancel(tabId, promptRequest.uid)
+ store.waitUntilIdle()
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ assertTrue(onCancelWasCalled)
+ }
+
+ @Test
+ fun `Calling onConfirm on a confirm request will consume promptRequest`() {
+ val feature =
+ PromptFeature(
+ activity = mock(),
+ fileUploadsDirCleaner = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ ) { }
+ var onPositiveButtonWasCalled = false
+ var onNegativeButtonWasCalled = false
+ var onNeutralButtonWasCalled = false
+
+ val onConfirmPositiveButton: (Boolean) -> Unit = {
+ onPositiveButtonWasCalled = true
+ }
+
+ val onConfirmNegativeButton: (Boolean) -> Unit = {
+ onNegativeButtonWasCalled = true
+ }
+
+ val onConfirmNeutralButton: (Boolean) -> Unit = {
+ onNeutralButtonWasCalled = true
+ }
+
+ val promptRequest = PromptRequest.Confirm(
+ "title",
+ "message",
+ false,
+ "positive",
+ "negative",
+ "neutral",
+ onConfirmPositiveButton,
+ onConfirmNegativeButton,
+ onConfirmNeutralButton,
+ ) {}
+
+ feature.start()
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest)).joinBlocking()
+ feature.onConfirm(tabId, promptRequest.uid, true to MultiButtonDialogFragment.ButtonType.POSITIVE)
+ store.waitUntilIdle()
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ assertTrue(onPositiveButtonWasCalled)
+
+ feature.promptAbuserDetector.resetJSAlertAbuseState()
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest)).joinBlocking()
+ feature.onConfirm(tabId, promptRequest.uid, true to MultiButtonDialogFragment.ButtonType.NEGATIVE)
+ store.waitUntilIdle()
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ assertTrue(onNegativeButtonWasCalled)
+
+ feature.promptAbuserDetector.resetJSAlertAbuseState()
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest)).joinBlocking()
+ feature.onConfirm(tabId, promptRequest.uid, true to MultiButtonDialogFragment.ButtonType.NEUTRAL)
+ store.waitUntilIdle()
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ assertTrue(onNeutralButtonWasCalled)
+ }
+
+ @Test
+ fun `Calling onCancel on a confirm request will consume promptRequest`() {
+ val feature =
+ PromptFeature(
+ activity = mock(),
+ fileUploadsDirCleaner = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ ) { }
+ var onCancelWasCalled = false
+
+ val onConfirm: (Boolean) -> Unit = { }
+
+ val onDismiss: () -> Unit = {
+ onCancelWasCalled = true
+ }
+
+ val promptRequest = PromptRequest.Confirm(
+ "title",
+ "message",
+ false,
+ "positive",
+ "negative",
+ "neutral",
+ onConfirm,
+ onConfirm,
+ onConfirm,
+ onDismiss,
+ )
+
+ feature.start()
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest)).joinBlocking()
+
+ feature.onCancel(tabId, promptRequest.uid)
+ store.waitUntilIdle()
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ assertTrue(onCancelWasCalled)
+ }
+
+ @Test
+ fun `When dialogs are being abused prompts are not allowed`() {
+ val feature =
+ PromptFeature(
+ activity = mock(),
+ fileUploadsDirCleaner = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ ) { }
+ var onDismissWasCalled: Boolean
+ val onDismiss = { onDismissWasCalled = true }
+ val alertRequest = Alert("", "", false, {}, onDismiss)
+ val textRequest = TextPrompt("", "", "", false, { _, _ -> }, onDismiss)
+ val confirmRequest =
+ PromptRequest.Confirm("", "", false, "+", "-", "", {}, {}, {}, onDismiss)
+
+ val promptRequests = arrayOf<PromptRequest>(alertRequest, textRequest, confirmRequest)
+
+ feature.start()
+ feature.promptAbuserDetector.userWantsMoreDialogs(false)
+
+ promptRequests.forEach { request ->
+ onDismissWasCalled = false
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, request)).joinBlocking()
+ verify(fragmentManager, never()).beginTransaction()
+ assertTrue(onDismissWasCalled)
+ }
+ }
+
+ @Test
+ fun `When dialogs are being abused but the page is refreshed prompts are allowed`() {
+ val feature =
+ PromptFeature(
+ activity = mock(),
+ fileUploadsDirCleaner = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ ) { }
+ var onDismissWasCalled = false
+ val onDismiss = { onDismissWasCalled = true }
+ val alertRequest = Alert("", "", false, {}, onDismiss)
+
+ feature.start()
+ feature.promptAbuserDetector.userWantsMoreDialogs(false)
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, alertRequest)).joinBlocking()
+
+ verify(fragmentManager, never()).beginTransaction()
+ assertTrue(onDismissWasCalled)
+
+ // Simulate reloading page
+ store.dispatch(ContentAction.UpdateLoadingStateAction(tabId, true)).joinBlocking()
+ store.dispatch(ContentAction.UpdateLoadingStateAction(tabId, false)).joinBlocking()
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, alertRequest)).joinBlocking()
+
+ assertTrue(feature.promptAbuserDetector.shouldShowMoreDialogs)
+ verify(fragmentManager).beginTransaction()
+ }
+
+ @Test
+ fun `User can stop further popups from being displayed on the current page`() {
+ val feature = PromptFeature(
+ activity = Robolectric.buildActivity(Activity::class.java).setup().get(),
+ store = store,
+ fileUploadsDirCleaner = mock(),
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ ) { }
+
+ var onDenyCalled = false
+ val onDeny = { onDenyCalled = true }
+ val popupPrompt = PromptRequest.Popup("https://firefox.com", onAllow = { }, onDeny = onDeny)
+
+ feature.start()
+ assertTrue(feature.promptAbuserDetector.shouldShowMoreDialogs)
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, popupPrompt)).joinBlocking()
+ verify(fragmentManager, times(1)).beginTransaction()
+ feature.onCancel(tabId, popupPrompt.uid, true)
+ assertFalse(feature.promptAbuserDetector.shouldShowMoreDialogs)
+ assertTrue(onDenyCalled)
+
+ onDenyCalled = false
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, popupPrompt)).joinBlocking()
+ verify(fragmentManager, times(1)).beginTransaction()
+ assertFalse(feature.promptAbuserDetector.shouldShowMoreDialogs)
+ assertTrue(onDenyCalled)
+ }
+
+ @Test
+ fun `When page is refreshed login dialog is dismissed`() {
+ val loginPickerView: SelectablePromptView<Login> = mock()
+ val feature =
+ PromptFeature(
+ activity = mock(),
+ store = store,
+ fileUploadsDirCleaner = mock(),
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ loginDelegate = object : LoginDelegate {
+ override val loginPickerView = loginPickerView
+ override val onManageLogins = {}
+ },
+ ) { }
+ feature.loginPicker = loginPicker
+ val onLoginDismiss: () -> Unit = {}
+ val onLoginConfirm: (Login) -> Unit = {}
+
+ val login = Login(guid = "A", origin = "origin", username = "username", password = "password")
+ val selectLoginRequest =
+ PromptRequest.SelectLoginPrompt(listOf(login), null, onLoginConfirm, onLoginDismiss)
+
+ whenever(loginPickerView.asView()).thenReturn(mock())
+ whenever(loginPickerView.asView().visibility).thenReturn(View.VISIBLE)
+
+ feature.start()
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, selectLoginRequest))
+ .joinBlocking()
+
+ verify(loginPicker).handleSelectLoginRequest(selectLoginRequest)
+
+ // Simulate reloading page
+ store.dispatch(ContentAction.UpdateLoadingStateAction(tabId, true)).joinBlocking()
+
+ verify(loginPicker).dismissCurrentLoginSelect(selectLoginRequest)
+ }
+
+ @Test
+ fun `WHEN page is refreshed THEN credit card prompt is dismissed`() {
+ val creditCardPickerView: SelectablePromptView<CreditCardEntry> = mock()
+ val feature =
+ PromptFeature(
+ activity = mock(),
+ store = store,
+ fileUploadsDirCleaner = mock(),
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ creditCardDelegate = object : CreditCardDelegate {
+ override val creditCardPickerView = creditCardPickerView
+ override val onSelectCreditCard = {}
+ override val onManageCreditCards = {}
+ },
+ isCreditCardAutofillEnabled = { true },
+ ) { }
+ feature.creditCardPicker = creditCardPicker
+ val onDismiss: () -> Unit = {}
+ val onConfirm: (CreditCardEntry) -> Unit = {}
+ val creditCard = CreditCardEntry(
+ guid = "1",
+ name = "Banana Apple",
+ number = "4111111111111110",
+ expiryMonth = "5",
+ expiryYear = "2030",
+ cardType = "",
+ )
+ val selectCreditCardRequest =
+ PromptRequest.SelectCreditCard(listOf(creditCard), onConfirm, onDismiss)
+
+ whenever(creditCardPickerView.asView()).thenReturn(mock())
+ whenever(creditCardPickerView.asView().visibility).thenReturn(View.VISIBLE)
+
+ feature.start()
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, selectCreditCardRequest))
+ .joinBlocking()
+
+ verify(creditCardPicker).handleSelectCreditCardRequest(selectCreditCardRequest)
+
+ // Simulate reloading page
+ store.dispatch(ContentAction.UpdateLoadingStateAction(tabId, true)).joinBlocking()
+
+ verify(creditCardPicker).dismissSelectCreditCardRequest(selectCreditCardRequest)
+ }
+
+ @Test
+ fun `Share prompt calls ShareDelegate`() {
+ val delegate: ShareDelegate = mock()
+ val activity: Activity = mock()
+ val feature = spy(
+ PromptFeature(
+ activity,
+ store,
+ fileUploadsDirCleaner = mock(),
+ tabsUseCases = mock(),
+ customTabId = "custom-tab",
+ shareDelegate = delegate,
+ fragmentManager = fragmentManager,
+ ) { },
+ )
+ feature.start()
+
+ val promptRequest = PromptRequest.Share(ShareData("Title", "Text", null), {}, {}, {})
+ store.dispatch(ContentAction.UpdatePromptRequestAction("custom-tab", promptRequest))
+ .joinBlocking()
+
+ verify(feature).onPromptRequested(store.state.customTabs.first())
+ verify(delegate).showShareSheet(
+ eq(activity),
+ eq(promptRequest.data),
+ onDismiss = any(),
+ onSuccess = any(),
+ )
+ }
+
+ @Test
+ fun `GIVEN credit card autofill enabled and cards available WHEN getting a SelectCreditCard request THEN that request is handled`() {
+ val feature = spy(
+ PromptFeature(
+ mock<Activity>(),
+ store,
+ tabsUseCases = mock(),
+ customTabId = "custom-tab",
+ fragmentManager = fragmentManager,
+ fileUploadsDirCleaner = mock(),
+ isCreditCardAutofillEnabled = { true },
+ ) { },
+ )
+ feature.creditCardPicker = creditCardPicker
+ feature.start()
+ val selectCreditCardRequest = PromptRequest.SelectCreditCard(listOf(mock()), {}, {})
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction("custom-tab", selectCreditCardRequest))
+ .joinBlocking()
+
+ verify(feature).onPromptRequested(store.state.customTabs.first())
+ verify(creditCardPicker).handleSelectCreditCardRequest(selectCreditCardRequest)
+ }
+
+ @Test
+ fun `GIVEN credit card autofill enabled but no cards available WHEN getting a SelectCreditCard request THEN that request is not acted upon`() {
+ val feature = spy(
+ PromptFeature(
+ mock<Activity>(),
+ store,
+ fileUploadsDirCleaner = mock(),
+ tabsUseCases = mock(),
+ customTabId = "custom-tab",
+ fragmentManager = fragmentManager,
+ isCreditCardAutofillEnabled = { true },
+ ) { },
+ )
+ feature.creditCardPicker = creditCardPicker
+ feature.start()
+ val selectCreditCardRequest = PromptRequest.SelectCreditCard(emptyList(), {}, {})
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction("custom-tab", selectCreditCardRequest))
+ .joinBlocking()
+
+ verify(feature).onPromptRequested(store.state.customTabs.first())
+ verify(creditCardPicker, never()).handleSelectCreditCardRequest(selectCreditCardRequest)
+ }
+
+ @Test
+ fun `GIVEN credit card autofill disabled and cards available WHEN getting a SelectCreditCard request THEN that request is handled`() {
+ val feature = spy(
+ PromptFeature(
+ mock<Activity>(),
+ store,
+ fileUploadsDirCleaner = mock(),
+ tabsUseCases = mock(),
+ customTabId = "custom-tab",
+ fragmentManager = fragmentManager,
+ isCreditCardAutofillEnabled = { false },
+ ) { },
+ )
+ feature.creditCardPicker = creditCardPicker
+ feature.start()
+ val selectCreditCardRequest = PromptRequest.SelectCreditCard(listOf(mock()), {}, {})
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction("custom-tab", selectCreditCardRequest))
+ .joinBlocking()
+
+ verify(feature).onPromptRequested(store.state.customTabs.first())
+ verify(creditCardPicker, never()).handleSelectCreditCardRequest(selectCreditCardRequest)
+ }
+
+ @Test
+ fun `GIVEN a custom tab WHEN a new prompt is requested THEN exit fullscreen`() {
+ val exitFullScreenUseCase: SessionUseCases.ExitFullScreenUseCase = mock()
+ val feature = PromptFeature(
+ fragment = mock(),
+ store = store,
+ fileUploadsDirCleaner = mock(),
+ tabsUseCases = mock(),
+ customTabId = "custom-tab",
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = exitFullScreenUseCase,
+ ) { }
+ val promptRequest: Alert = mock()
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction("custom-tab", promptRequest)).joinBlocking()
+ feature.start()
+
+ verify(exitFullScreenUseCase).invoke("custom-tab")
+ }
+
+ @Test
+ fun `GIVEN a normal tab WHEN a new prompt is requested THEN exit fullscreen`() {
+ val exitFullScreenUseCase: SessionUseCases.ExitFullScreenUseCase = mock()
+ val feature = PromptFeature(
+ fragment = mock(),
+ fileUploadsDirCleaner = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = exitFullScreenUseCase,
+ ) { }
+ val promptRequest: Alert = mock()
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest)).joinBlocking()
+ feature.start()
+
+ verify(exitFullScreenUseCase).invoke(tabId)
+ }
+
+ @Test
+ fun `GIVEN a private tab WHEN a new prompt is requested THEN exit fullscreen`() {
+ val privateTabId = "private-tab"
+ val exitFullScreenUseCase: SessionUseCases.ExitFullScreenUseCase = mock()
+ store = BrowserStore(
+ initialState = store.state.copy(
+ tabs = store.state.tabs + TabSessionState(
+ id = privateTabId,
+ content = ContentState(url = "", private = true),
+ ),
+ selectedTabId = privateTabId,
+ ),
+ )
+ val feature = PromptFeature(
+ fragment = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fileUploadsDirCleaner = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = exitFullScreenUseCase,
+ ) { }
+ val promptRequest: Alert = mock()
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(privateTabId, promptRequest)).joinBlocking()
+ feature.start()
+
+ verify(exitFullScreenUseCase).invoke(privateTabId)
+ }
+
+ @Test
+ fun `GIVEN isCreditCardAutofillEnabled is false WHEN SaveCreditCard request is handled THEN dismiss SaveCreditCard`() {
+ val creditCardEntry = CreditCardEntry(
+ guid = "1",
+ name = "Banana Apple",
+ number = "4111111111111110",
+ expiryMonth = "5",
+ expiryYear = "2030",
+ cardType = "",
+ )
+ val promptRequest = spy(
+ PromptRequest.SaveCreditCard(
+ creditCard = creditCardEntry,
+ onConfirm = {},
+ onDismiss = {},
+ ),
+ )
+ val feature = spy(
+ PromptFeature(
+ activity = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ fileUploadsDirCleaner = mock(),
+ creditCardValidationDelegate = mock(),
+ isCreditCardAutofillEnabled = { false },
+ ) {},
+ )
+ val session = tab()!!
+
+ feature.handleDialogsRequest(promptRequest, session)
+
+ store.waitUntilIdle()
+
+ verify(feature).dismissDialogRequest(promptRequest, session)
+ }
+
+ @Test
+ fun `GIVEN creditCardValidationDelegate is null WHEN SaveCreditCard request is handled THEN dismiss SaveCreditCard`() {
+ val creditCardEntry = CreditCardEntry(
+ guid = "1",
+ name = "Banana Apple",
+ number = "4111111111111110",
+ expiryMonth = "5",
+ expiryYear = "2030",
+ cardType = "",
+ )
+ val promptRequest = spy(
+ PromptRequest.SaveCreditCard(
+ creditCard = creditCardEntry,
+ onConfirm = {},
+ onDismiss = {},
+ ),
+ )
+ val feature = spy(
+ PromptFeature(
+ activity = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ fileUploadsDirCleaner = mock(),
+ creditCardValidationDelegate = null,
+ isCreditCardAutofillEnabled = { true },
+ ) {},
+ )
+ val session = tab()!!
+
+ feature.handleDialogsRequest(promptRequest, session)
+
+ store.waitUntilIdle()
+
+ verify(feature).dismissDialogRequest(promptRequest, session)
+ }
+
+ @Test
+ fun `GIVEN prompt request credit card is invalid WHEN SaveCreditCard request is handled THEN dismiss SaveCreditCard`() {
+ val invalidMonth = ""
+ val invalidYear = ""
+ val creditCardEntry = CreditCardEntry(
+ guid = "1",
+ name = "Banana Apple",
+ number = "4111111111111110",
+ expiryMonth = invalidMonth,
+ expiryYear = invalidYear,
+ cardType = "",
+ )
+ val promptRequest = spy(
+ PromptRequest.SaveCreditCard(
+ creditCard = creditCardEntry,
+ onConfirm = {},
+ onDismiss = {},
+ ),
+ )
+ val feature = spy(
+ PromptFeature(
+ activity = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ creditCardValidationDelegate = mock(),
+ fileUploadsDirCleaner = mock(),
+ isCreditCardAutofillEnabled = { true },
+ ) {},
+ )
+ val session = tab()!!
+
+ feature.handleDialogsRequest(promptRequest, session)
+
+ store.waitUntilIdle()
+
+ verify(feature).dismissDialogRequest(promptRequest, session)
+ }
+
+ @Test
+ fun `Selecting an item in a share dialog will consume promptRequest`() {
+ val delegate: ShareDelegate = mock()
+ val feature = PromptFeature(
+ activity = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ fileUploadsDirCleaner = mock(),
+ exitFullscreenUsecase = mock(),
+ shareDelegate = delegate,
+ ) { }
+ feature.start()
+
+ var onSuccessCalled = false
+
+ val shareRequest = PromptRequest.Share(
+ ShareData("Title", "Text", null),
+ onSuccess = { onSuccessCalled = true },
+ onFailure = {},
+ onDismiss = {},
+ )
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, shareRequest)).joinBlocking()
+
+ assertEquals(1, tab()!!.content.promptRequests.size)
+ assertEquals(shareRequest, tab()!!.content.promptRequests[0])
+ feature.onConfirm(tabId, shareRequest.uid, null)
+
+ store.waitUntilIdle()
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ assertTrue(onSuccessCalled)
+ }
+
+ @Test
+ fun `Dismissing a share dialog will consume promptRequest`() {
+ val delegate: ShareDelegate = mock()
+ val feature = PromptFeature(
+ activity = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fileUploadsDirCleaner = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ shareDelegate = delegate,
+ ) { }
+ feature.start()
+
+ var onDismissCalled = false
+
+ val shareRequest = PromptRequest.Share(
+ ShareData("Title", "Text", null),
+ onSuccess = {},
+ onFailure = {},
+ onDismiss = { onDismissCalled = true },
+ )
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, shareRequest)).joinBlocking()
+
+ assertEquals(1, tab()!!.content.promptRequests.size)
+ assertEquals(shareRequest, tab()!!.content.promptRequests[0])
+ feature.onCancel(tabId, shareRequest.uid)
+
+ store.waitUntilIdle()
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ assertTrue(onDismissCalled)
+ }
+
+ @Test
+ fun `dialog will be dismissed if tab ID changes`() {
+ val feature = spy(
+ PromptFeature(
+ activity = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fileUploadsDirCleaner = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ shareDelegate = mock(),
+ ) { },
+ )
+ feature.start()
+
+ val shareRequest = PromptRequest.Share(
+ ShareData("Title", "Text", null),
+ onSuccess = {},
+ onFailure = {},
+ onDismiss = {},
+ )
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, shareRequest)).joinBlocking()
+
+ val fragment = mock<PromptDialogFragment>()
+ whenever(fragment.shouldDismissOnLoad).thenReturn(true)
+ whenever(fragment.sessionId).thenReturn(tabId)
+ feature.activePrompt = WeakReference(fragment)
+
+ val secondTabId = "second-test-tab"
+ store.dispatch(
+ TabListAction.AddTabAction(
+ TabSessionState(
+ id = secondTabId,
+ content = ContentState(url = "mozilla.org"),
+ ),
+ select = true,
+ ),
+ ).joinBlocking()
+
+ verify(fragment, times(1)).dismiss()
+ }
+
+ @Test
+ fun `dialog will be dismissed if tab changes`() {
+ val feature = spy(
+ PromptFeature(
+ activity = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fileUploadsDirCleaner = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ shareDelegate = mock(),
+ ) { },
+ )
+ feature.start()
+
+ val shareRequest = PromptRequest.Share(
+ ShareData("Title", "Text", null),
+ onSuccess = {},
+ onFailure = {},
+ onDismiss = {},
+ )
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, shareRequest)).joinBlocking()
+
+ val fragment = mock<PromptDialogFragment>()
+ whenever(fragment.shouldDismissOnLoad).thenReturn(true)
+ whenever(fragment.sessionId).thenReturn(tabId)
+ feature.activePrompt = WeakReference(fragment)
+
+ val newTabId = "test-tab-2"
+
+ store.dispatch(TabListAction.SelectTabAction(newTabId)).joinBlocking()
+
+ verify(fragment, times(1)).dismiss()
+ }
+
+ @Test
+ fun `dialog will be dismissed if tab URL changes`() {
+ val feature = spy(
+ PromptFeature(
+ activity = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ fileUploadsDirCleaner = mock(),
+ exitFullscreenUsecase = mock(),
+ shareDelegate = mock(),
+ ) { },
+ )
+ feature.start()
+
+ val shareRequest = PromptRequest.Share(
+ ShareData("Title", "Text", null),
+ onSuccess = {},
+ onFailure = {},
+ onDismiss = {},
+ )
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, shareRequest)).joinBlocking()
+
+ val fragment = mock<PromptDialogFragment>()
+ whenever(fragment.shouldDismissOnLoad).thenReturn(true)
+ feature.activePrompt = WeakReference(fragment)
+
+ store.dispatch(ContentAction.UpdateUrlAction(tabId, "mozilla.org")).joinBlocking()
+ verify(fragment, times(1)).dismiss()
+ }
+
+ @Test
+ fun `prompt will always start the save login dialog with an icon`() {
+ val feature = PromptFeature(
+ activity = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ fileUploadsDirCleaner = mock(),
+ shareDelegate = mock(),
+ isSaveLoginEnabled = { true },
+ loginValidationDelegate = mock(),
+ ) { }
+ val loginUsername = "username"
+ val loginPassword = "password"
+ val entry: LoginEntry = mock()
+ `when`(entry.username).thenReturn(loginUsername)
+ `when`(entry.password).thenReturn(loginPassword)
+ val loginsPrompt = PromptRequest.SaveLoginPrompt(2, listOf(entry), { }, { })
+ val websiteIcon: Bitmap = mock()
+ val contentState: ContentState = mock()
+ val session: TabSessionState = mock()
+ val sessionId = "sessionId"
+ `when`(contentState.icon).thenReturn(websiteIcon)
+ `when`(session.content).thenReturn(contentState)
+ `when`(session.id).thenReturn(sessionId)
+
+ feature.handleDialogsRequest(
+ loginsPrompt,
+ session,
+ )
+
+ // Only interested in the icon, but it doesn't hurt to be sure we show a properly configured dialog.
+ assertTrue(feature.activePrompt!!.get() is SaveLoginDialogFragment)
+ val dialogFragment = feature.activePrompt!!.get() as SaveLoginDialogFragment
+ assertEquals(loginUsername, dialogFragment.username)
+ assertEquals(loginPassword, dialogFragment.password)
+ assertEquals(websiteIcon, dialogFragment.icon)
+ assertEquals(sessionId, dialogFragment.sessionId)
+ }
+
+ @Test
+ fun `save login dialog will not be dismissed on page load`() {
+ val feature = spy(
+ PromptFeature(
+ activity = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fileUploadsDirCleaner = mock(),
+ fragmentManager = fragmentManager,
+ shareDelegate = mock(),
+ ) { },
+ )
+ feature.start()
+
+ val shareRequest = PromptRequest.Share(
+ ShareData("Title", "Text", null),
+ onSuccess = {},
+ onFailure = {},
+ onDismiss = {},
+ )
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, shareRequest)).joinBlocking()
+
+ val fragment = spy(
+ SaveLoginDialogFragment.newInstance(
+ tabId,
+ shareRequest.uid,
+ false,
+ 0,
+ LoginEntry(
+ origin = "https://www.mozilla.org",
+ username = "username",
+ password = "password",
+ ),
+ ),
+ )
+ feature.activePrompt = WeakReference(fragment)
+
+ store.dispatch(ContentAction.UpdateProgressAction(tabId, 0)).joinBlocking()
+ store.dispatch(ContentAction.UpdateProgressAction(tabId, 10)).joinBlocking()
+ store.dispatch(ContentAction.UpdateProgressAction(tabId, 100)).joinBlocking()
+
+ verify(fragment, times(0)).dismiss()
+ }
+
+ @Test
+ fun `confirm dialogs will not be automatically dismissed`() {
+ val feature = spy(
+ PromptFeature(
+ activity = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fileUploadsDirCleaner = mock(),
+ fragmentManager = fragmentManager,
+ shareDelegate = mock(),
+ ) { },
+ )
+ feature.start()
+
+ val promptRequest = PromptRequest.Confirm(
+ "title",
+ "message",
+ false,
+ "positive",
+ "negative",
+ "neutral",
+ { },
+ { },
+ { },
+ { },
+ )
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest)).joinBlocking()
+
+ val prompt = feature.activePrompt?.get()
+ assertNotNull(prompt)
+ assertFalse(prompt!!.shouldDismissOnLoad)
+ }
+
+ @Test
+ fun `A Repost PromptRequest prompt will be shown as a ConfirmDialogFragment`() {
+ val feature = PromptFeature(
+ // Proper activity here to allow for the feature to properly execute "container.context.getString"
+ activity = Robolectric.buildActivity(Activity::class.java).setup().get(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ fileUploadsDirCleaner = mock(),
+ shareDelegate = mock(),
+ isSaveLoginEnabled = { true },
+ loginValidationDelegate = mock(),
+ ) { }
+ val repostPromptRequest: PromptRequest.Repost = mock()
+ doReturn("uid").`when`(repostPromptRequest).uid
+
+ feature.handleDialogsRequest(repostPromptRequest, mock())
+
+ val dialog: ConfirmDialogFragment = feature.activePrompt!!.get() as ConfirmDialogFragment
+ assertEquals(testContext.getString(R.string.mozac_feature_prompt_repost_title), dialog.title)
+ assertEquals(testContext.getString(R.string.mozac_feature_prompt_repost_message), dialog.message)
+ assertEquals(
+ testContext.getString(R.string.mozac_feature_prompt_repost_positive_button_text),
+ dialog.positiveButtonText,
+ )
+ assertEquals(
+ testContext.getString(R.string.mozac_feature_prompt_repost_negative_button_text),
+ dialog.negativeButtonText,
+ )
+ }
+
+ @Test
+ fun `Positive button on a Repost dialog will call onAccept and consume the dialog`() {
+ val feature = PromptFeature(
+ activity = Robolectric.buildActivity(Activity::class.java).setup().get(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ fileUploadsDirCleaner = mock(),
+ exitFullscreenUsecase = mock(),
+ ) { }
+ feature.start()
+
+ var acceptCalled = false
+ val repostRequest = PromptRequest.Repost(
+ { acceptCalled = true },
+ { },
+ )
+ store
+ .dispatch(ContentAction.UpdatePromptRequestAction(tabId, repostRequest))
+ .joinBlocking()
+
+ assertEquals(1, tab()!!.content.promptRequests.size)
+ assertEquals(repostRequest, tab()!!.content.promptRequests[0])
+ feature.onConfirm(tabId, repostRequest.uid, null)
+
+ store.waitUntilIdle()
+ assertTrue(acceptCalled)
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ }
+
+ @Test
+ fun `Negative button on a Repost dialog will call onDismiss and consume the dialog`() {
+ val feature = PromptFeature(
+ activity = Robolectric.buildActivity(Activity::class.java).setup().get(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ fileUploadsDirCleaner = mock(),
+ exitFullscreenUsecase = mock(),
+ ) { }
+ feature.start()
+
+ var dismissCalled = false
+ val repostRequest = PromptRequest.Repost(
+ { },
+ { dismissCalled = true },
+ )
+ store
+ .dispatch(ContentAction.UpdatePromptRequestAction(tabId, repostRequest))
+ .joinBlocking()
+
+ assertEquals(1, tab()!!.content.promptRequests.size)
+ assertEquals(repostRequest, tab()!!.content.promptRequests[0])
+ feature.onCancel(tabId, repostRequest.uid)
+
+ store.waitUntilIdle()
+ assertTrue(dismissCalled)
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ }
+
+ @Test
+ fun `WHEN onConfirm is called on a SaveCreditCard dialog THEN a confirm request will consume the dialog`() {
+ val feature = PromptFeature(
+ activity = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ fileUploadsDirCleaner = mock(),
+ isCreditCardAutofillEnabled = { true },
+ creditCardValidationDelegate = mock(),
+ ) { }
+ val creditCardEntry = CreditCardEntry(
+ guid = "1",
+ name = "Banana Apple",
+ number = "4111111111111110",
+ expiryMonth = "5",
+ expiryYear = "2030",
+ cardType = "",
+ )
+
+ val request = PromptRequest.SaveCreditCard(
+ creditCard = creditCardEntry,
+ onConfirm = {},
+ onDismiss = {},
+ )
+
+ feature.start()
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, request)).joinBlocking()
+
+ assertEquals(1, tab()!!.content.promptRequests.size)
+
+ feature.onConfirm(
+ sessionId = tabId,
+ promptRequestUID = request.uid,
+ value = creditCardEntry,
+ )
+
+ store.waitUntilIdle()
+
+ assertTrue(tab()!!.content.promptRequests.isEmpty())
+ }
+
+ @Test
+ fun `WHEN a credit card is confirmed to save THEN confirm the prompt request with the selected credit card`() {
+ val creditCardEntry = CreditCardEntry(
+ guid = "1",
+ name = "Banana Apple",
+ number = "4111111111111110",
+ expiryMonth = "5",
+ expiryYear = "2030",
+ cardType = "",
+ )
+ var onDismissCalled = false
+ var onConfirmCalled = false
+ var confirmedCreditCard: CreditCardEntry? = null
+
+ val request = PromptRequest.SaveCreditCard(
+ creditCard = creditCardEntry,
+ onConfirm = {
+ confirmedCreditCard = it
+ onConfirmCalled = true
+ },
+ onDismiss = {
+ onDismissCalled = true
+ },
+ )
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, request)).joinBlocking()
+
+ request.onConfirm(creditCardEntry)
+
+ store.waitUntilIdle()
+
+ assertEquals(creditCardEntry, confirmedCreditCard)
+ assertTrue(onConfirmCalled)
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, request)).joinBlocking()
+
+ request.onDismiss()
+
+ store.waitUntilIdle()
+
+ assertTrue(onDismissCalled)
+ }
+
+ @Test
+ fun `WHEN the save credit card dialog fragment is created THEN the credit card entry is passed into the instance`() {
+ val feature = PromptFeature(
+ activity = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ fileUploadsDirCleaner = mock(),
+ isCreditCardAutofillEnabled = { true },
+ creditCardValidationDelegate = mock(),
+ ) { }
+ val creditCardEntry = CreditCardEntry(
+ guid = "1",
+ name = "Banana Apple",
+ number = "4111111111111110",
+ expiryMonth = "5",
+ expiryYear = "2030",
+ cardType = "",
+ )
+ val request = PromptRequest.SaveCreditCard(
+ creditCard = creditCardEntry,
+ onConfirm = {},
+ onDismiss = {},
+ )
+
+ val contentState: ContentState = mock()
+ val session: TabSessionState = mock()
+ val sessionId = "sessionId"
+
+ `when`(session.content).thenReturn(contentState)
+ `when`(session.id).thenReturn(sessionId)
+
+ feature.handleDialogsRequest(
+ promptRequest = request,
+ session = session,
+ )
+
+ assertTrue(feature.activePrompt!!.get() is CreditCardSaveDialogFragment)
+
+ val dialogFragment = feature.activePrompt!!.get() as CreditCardSaveDialogFragment
+
+ assertEquals(sessionId, dialogFragment.sessionId)
+ assertEquals(creditCardEntry, dialogFragment.creditCard)
+ }
+
+ @Test
+ fun `GIVEN SaveCreditCard prompt is shown WHEN prompt is removed from state THEN dismiss SaveCreditCard prompt`() {
+ val creditCardEntry = CreditCardEntry(
+ guid = "1",
+ name = "Banana Apple",
+ number = "4111111111111110",
+ expiryMonth = "5",
+ expiryYear = "2030",
+ cardType = "",
+ )
+ val promptRequest = PromptRequest.SaveCreditCard(
+ creditCard = creditCardEntry,
+ onConfirm = {},
+ onDismiss = {},
+ )
+ val dialogFragment: CreditCardSaveDialogFragment = mock()
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest))
+ .joinBlocking()
+ store.waitUntilIdle()
+
+ val feature = PromptFeature(
+ activity = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ fileUploadsDirCleaner = mock(),
+ isCreditCardAutofillEnabled = { true },
+ creditCardValidationDelegate = mock(),
+ ) { }
+
+ feature.start()
+ feature.activePrompt = WeakReference(dialogFragment)
+ feature.activePromptRequest = promptRequest
+
+ store.dispatch(ContentAction.ConsumePromptRequestAction(tabId, promptRequest))
+ .joinBlocking()
+
+ verify(dialogFragment).dismissAllowingStateLoss()
+ }
+
+ @Test
+ fun `WHEN SaveCreditCard is handled THEN the credit card save prompt shown fact is emitted`() {
+ val feature = PromptFeature(
+ activity = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ fileUploadsDirCleaner = mock(),
+ isCreditCardAutofillEnabled = { true },
+ creditCardValidationDelegate = mock(),
+ ) { }
+ val creditCardEntry = CreditCardEntry(
+ guid = "1",
+ name = "CC",
+ number = "4111111111111110",
+ expiryMonth = "5",
+ expiryYear = "2030",
+ cardType = "",
+ )
+ val request = PromptRequest.SaveCreditCard(
+ creditCard = creditCardEntry,
+ onConfirm = {},
+ onDismiss = {},
+ )
+ val session: TabSessionState = mock()
+ val sessionId = "sessionId"
+ `when`(session.id).thenReturn(sessionId)
+
+ CollectionProcessor.withFactCollection { facts ->
+ feature.handleDialogsRequest(
+ promptRequest = request,
+ session = session,
+ )
+
+ val fact = facts.find { it.item == CreditCardAutofillDialogFacts.Items.AUTOFILL_CREDIT_CARD_SAVE_PROMPT_SHOWN }!!
+ assertEquals(Component.FEATURE_PROMPTS, fact.component)
+ assertEquals(Action.DISPLAY, fact.action)
+ assertEquals(
+ CreditCardAutofillDialogFacts.Items.AUTOFILL_CREDIT_CARD_SAVE_PROMPT_SHOWN,
+ fact.item,
+ )
+ }
+ }
+
+ @Test
+ fun `WHEN choice promptRequest is dismissed by the engine THEN the active prompt will be cleared`() {
+ val feature = spy(
+ PromptFeature(
+ activity = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fileUploadsDirCleaner = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ shareDelegate = mock(),
+ ) { },
+ )
+ feature.start()
+
+ val singleChoicePrompt = SingleChoice(
+ choices = arrayOf(),
+ onConfirm = {},
+ onDismiss = {},
+ )
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, singleChoicePrompt))
+ .joinBlocking()
+ val fragment = mock<ChoiceDialogFragment>()
+ whenever(fragment.isAdded).thenReturn(false)
+
+ store.dispatch(ContentAction.ConsumePromptRequestAction(tabId, singleChoicePrompt))
+ .joinBlocking()
+ assertEquals(null, feature.activePrompt?.get())
+ assertTrue(feature.activePromptsToDismiss.isEmpty())
+ }
+
+ @Test
+ fun `WHEN promptRequest is updated THEN the replaced active prompt will be dismissed`() {
+ val feature = spy(
+ PromptFeature(
+ activity = mock(),
+ fileUploadsDirCleaner = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ shareDelegate = mock(),
+ ) { },
+ )
+ feature.start()
+
+ val previousPrompt = SingleChoice(
+ choices = arrayOf(),
+ onConfirm = {},
+ onDismiss = {},
+ )
+ val updatedPrompt = SingleChoice(
+ choices = arrayOf(),
+ onConfirm = {},
+ onDismiss = {},
+ )
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, previousPrompt)).joinBlocking()
+
+ val fragment = mock<ChoiceDialogFragment>()
+ whenever(fragment.shouldDismissOnLoad).thenReturn(true)
+ whenever(fragment.isAdded).thenReturn(true)
+ feature.activePrompt = WeakReference(fragment)
+
+ store.dispatch(ContentAction.ReplacePromptRequestAction(tabId, previousPrompt.uid, updatedPrompt)).joinBlocking()
+ verify(fragment).dismiss()
+ }
+
+ private fun mockFragmentManager(): FragmentManager {
+ val fragmentManager: FragmentManager = mock()
+ val transaction: FragmentTransaction = mock()
+ doReturn(transaction).`when`(fragmentManager).beginTransaction()
+ doReturn(transaction).`when`(transaction).remove(any())
+ return fragmentManager
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/PromptMiddlewareTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/PromptMiddlewareTest.kt
new file mode 100644
index 0000000000..6e2e9c84da
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/PromptMiddlewareTest.kt
@@ -0,0 +1,111 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts
+
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import mozilla.components.browser.state.action.ContentAction
+import mozilla.components.browser.state.state.BrowserState
+import mozilla.components.browser.state.state.TabSessionState
+import mozilla.components.browser.state.state.createTab
+import mozilla.components.browser.state.store.BrowserStore
+import mozilla.components.concept.engine.prompt.PromptRequest
+import mozilla.components.support.test.ext.joinBlocking
+import mozilla.components.support.test.rule.MainCoroutineRule
+import org.junit.Assert.assertEquals
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.mockito.Mockito.never
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.verify
+
+class PromptMiddlewareTest {
+
+ @get:Rule
+ val coroutinesTestRule = MainCoroutineRule()
+
+ private lateinit var store: BrowserStore
+
+ private val tabId = "test-tab"
+ private fun tab(): TabSessionState? {
+ return store.state.tabs.find { it.id == tabId }
+ }
+
+ @Before
+ @ExperimentalCoroutinesApi
+ fun setUp() {
+ store = BrowserStore(
+ BrowserState(
+ tabs = listOf(
+ createTab("https://www.mozilla.org", id = tabId),
+ ),
+ selectedTabId = tabId,
+ ),
+ middleware = listOf(PromptMiddleware()),
+ )
+ }
+
+ @Test
+ fun `Process only one popup prompt request at a time`() {
+ val onDeny = spy { }
+ val popupPrompt1 = PromptRequest.Popup("https://firefox.com", onAllow = { }, onDeny = onDeny)
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, popupPrompt1)).joinBlocking()
+ assertEquals(1, tab()!!.content.promptRequests.size)
+ assertEquals(popupPrompt1, tab()!!.content.promptRequests[0])
+ verify(onDeny, never()).invoke()
+
+ val popupPrompt2 = PromptRequest.Popup("https://firefox.com", onAllow = { }, onDeny = onDeny)
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, popupPrompt2)).joinBlocking()
+ assertEquals(1, tab()!!.content.promptRequests.size)
+ assertEquals(popupPrompt1, tab()!!.content.promptRequests[0])
+ verify(onDeny).invoke()
+ }
+
+ @Test
+ fun `Process popup followed by other prompt request`() {
+ val onDeny = spy { }
+ val popupPrompt = PromptRequest.Popup("https://firefox.com", onAllow = { }, onDeny = onDeny)
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, popupPrompt)).joinBlocking()
+ assertEquals(1, tab()!!.content.promptRequests.size)
+ assertEquals(popupPrompt, tab()!!.content.promptRequests[0])
+ verify(onDeny, never()).invoke()
+
+ val alert = PromptRequest.Alert("title", "message", false, { }, { })
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, alert)).joinBlocking()
+ assertEquals(2, tab()!!.content.promptRequests.size)
+ assertEquals(popupPrompt, tab()!!.content.promptRequests[0])
+ assertEquals(alert, tab()!!.content.promptRequests[1])
+ }
+
+ @Test
+ fun `Process popup after other prompt request`() {
+ val alert = PromptRequest.Alert("title", "message", false, { }, { })
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, alert)).joinBlocking()
+ assertEquals(1, tab()!!.content.promptRequests.size)
+ assertEquals(alert, tab()!!.content.promptRequests[0])
+
+ val onDeny = spy { }
+ val popupPrompt = PromptRequest.Popup("https://firefox.com", onAllow = { }, onDeny = onDeny)
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, popupPrompt)).joinBlocking()
+ assertEquals(2, tab()!!.content.promptRequests.size)
+ assertEquals(alert, tab()!!.content.promptRequests[0])
+ assertEquals(popupPrompt, tab()!!.content.promptRequests[1])
+ verify(onDeny, never()).invoke()
+ }
+
+ @Test
+ fun `Process other prompt requests`() {
+ val alert = PromptRequest.Alert("title", "message", false, { }, { })
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, alert)).joinBlocking()
+ assertEquals(1, tab()!!.content.promptRequests.size)
+ assertEquals(alert, tab()!!.content.promptRequests[0])
+
+ val beforeUnloadPrompt = PromptRequest.BeforeUnload("title", onLeave = { }, onStay = { })
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, beforeUnloadPrompt)).joinBlocking()
+ assertEquals(2, tab()!!.content.promptRequests.size)
+ assertEquals(alert, tab()!!.content.promptRequests[0])
+ assertEquals(beforeUnloadPrompt, tab()!!.content.promptRequests[1])
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/address/AddressAdapterTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/address/AddressAdapterTest.kt
new file mode 100644
index 0000000000..5423741dab
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/address/AddressAdapterTest.kt
@@ -0,0 +1,82 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.address
+
+import android.view.LayoutInflater
+import android.widget.TextView
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import mozilla.components.concept.storage.Address
+import mozilla.components.feature.prompts.R
+import mozilla.components.support.test.robolectric.testContext
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+class AddressAdapterTest {
+
+ private val address = Address(
+ guid = "1",
+ name = "Jane Marie Doe",
+ organization = "Mozilla",
+ streetAddress = "1230 Main st",
+ addressLevel3 = "Location3",
+ addressLevel2 = "Location2",
+ addressLevel1 = "Location1",
+ postalCode = "90237",
+ country = "USA",
+ tel = "00",
+ email = "email",
+ )
+
+ @Test
+ fun testAddressDiffCallback() {
+ val address2 = address.copy()
+
+ assertTrue(
+ AddressDiffCallback.areItemsTheSame(address, address2),
+ )
+ assertTrue(
+ AddressDiffCallback.areContentsTheSame(address, address2),
+ )
+
+ val address3 = address.copy(guid = "2")
+
+ assertFalse(
+ AddressDiffCallback.areItemsTheSame(address, address3),
+ )
+ assertFalse(
+ AddressDiffCallback.areItemsTheSame(address, address3),
+ )
+ }
+
+ @Test
+ fun `WHEN an address is bound to the adapter THEN set the address display name`() {
+ val view =
+ LayoutInflater.from(testContext)
+ .inflate(R.layout.mozac_feature_prompts_address_list_item, null)
+ val addressName: TextView = view.findViewById(R.id.address_name)
+
+ AddressViewHolder(view, onAddressSelected = {}).bind(address)
+
+ assertEquals(address.addressLabel, addressName.text)
+ }
+
+ @Test
+ fun `WHEN an address item is clicked THEN call the onAddressSelected callback`() {
+ var addressSelected = false
+ val view =
+ LayoutInflater.from(testContext)
+ .inflate(R.layout.mozac_feature_prompts_address_list_item, null)
+ val onAddressSelect: (Address) -> Unit = { addressSelected = true }
+
+ AddressViewHolder(view, onAddressSelect).bind(address)
+ view.performClick()
+
+ assertTrue(addressSelected)
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/address/AddressPickerTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/address/AddressPickerTest.kt
new file mode 100644
index 0000000000..7469f498c4
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/address/AddressPickerTest.kt
@@ -0,0 +1,145 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.address
+
+import mozilla.components.browser.state.state.BrowserState
+import mozilla.components.browser.state.state.ContentState
+import mozilla.components.browser.state.state.CustomTabSessionState
+import mozilla.components.browser.state.state.TabSessionState
+import mozilla.components.browser.state.store.BrowserStore
+import mozilla.components.concept.engine.prompt.PromptRequest
+import mozilla.components.concept.storage.Address
+import mozilla.components.feature.prompts.facts.AddressAutofillDialogFacts
+import mozilla.components.support.base.Component
+import mozilla.components.support.base.facts.Action
+import mozilla.components.support.base.facts.Fact
+import mozilla.components.support.base.facts.FactProcessor
+import mozilla.components.support.base.facts.Facts
+import mozilla.components.support.test.mock
+import mozilla.components.support.test.whenever
+import org.junit.Assert.assertEquals
+import org.junit.Before
+import org.junit.Test
+import org.mockito.Mockito.verify
+
+class AddressPickerTest {
+
+ private lateinit var store: BrowserStore
+ private lateinit var state: BrowserState
+ private lateinit var addressPicker: AddressPicker
+ private lateinit var addressSelectBar: AddressSelectBar
+
+ private val address = Address(
+ guid = "1",
+ name = "Jane Marie Doe",
+ organization = "Mozilla",
+ streetAddress = "1230 Main st",
+ addressLevel3 = "Location3",
+ addressLevel2 = "Location2",
+ addressLevel1 = "Location1",
+ postalCode = "90237",
+ country = "USA",
+ tel = "00",
+ email = "email",
+ )
+
+ private var onDismissCalled = false
+ private var confirmedAddress: Address? = null
+
+ private val promptRequest = PromptRequest.SelectAddress(
+ addresses = listOf(address),
+ onDismiss = { onDismissCalled = true },
+ onConfirm = { confirmedAddress = it },
+ )
+
+ @Before
+ fun setup() {
+ store = mock()
+ state = mock()
+ addressSelectBar = mock()
+ addressPicker = AddressPicker(
+ store = store,
+ addressSelectBar = addressSelectBar,
+ )
+
+ whenever(store.state).thenReturn(state)
+ }
+
+ @Test
+ fun `WHEN onOptionSelect is called with an address THEN selectAddressCallback is invoked and prompt is hidden`() {
+ val content: ContentState = mock()
+ whenever(content.promptRequests).thenReturn(listOf(promptRequest))
+ val selectedTab = TabSessionState("browser-tab", content, mock(), mock())
+ whenever(state.selectedTabId).thenReturn(selectedTab.id)
+ whenever(state.tabs).thenReturn(listOf(selectedTab))
+
+ addressPicker.onOptionSelect(address)
+
+ verify(addressSelectBar).hidePrompt()
+ assertEquals(address, confirmedAddress)
+ }
+
+ @Test
+ fun `GIVEN a prompt request WHEN handleSelectAddressRequest is called THEN the prompt is shown with the provided addresses`() {
+ val facts = mutableListOf<Fact>()
+ Facts.registerProcessor(
+ object : FactProcessor {
+ override fun process(fact: Fact) {
+ facts.add(fact)
+ }
+ },
+ )
+
+ assertEquals(0, facts.size)
+
+ addressPicker.handleSelectAddressRequest(promptRequest)
+
+ assertEquals(1, facts.size)
+ facts[0].apply {
+ assertEquals(Component.FEATURE_PROMPTS, component)
+ assertEquals(Action.INTERACTION, action)
+ assertEquals(AddressAutofillDialogFacts.Items.AUTOFILL_ADDRESS_PROMPT_SHOWN, item)
+ }
+
+ verify(addressSelectBar).showPrompt(promptRequest.addresses)
+ }
+
+ @Test
+ fun `GIVEN a custom tab and a prompt request WHEN handleSelectAddressRequest is called THEN the prompt is shown with the provided addresses`() {
+ val customTabContent: ContentState = mock()
+ val customTab = CustomTabSessionState(id = "custom-tab", content = customTabContent, trackingProtection = mock(), config = mock())
+ whenever(customTabContent.promptRequests).thenReturn(listOf(promptRequest))
+ whenever(state.customTabs).thenReturn(listOf(customTab))
+
+ addressPicker.handleSelectAddressRequest(promptRequest)
+
+ verify(addressSelectBar).showPrompt(promptRequest.addresses)
+ }
+
+ @Test
+ fun `WHEN onManageOptions is called THEN onManageAddresses is invoked and prompt is hidden`() {
+ val facts = mutableListOf<Fact>()
+ Facts.registerProcessor(
+ object : FactProcessor {
+ override fun process(fact: Fact) {
+ facts.add(fact)
+ }
+ },
+ )
+
+ assertEquals(0, facts.size)
+
+ addressPicker.onManageOptions()
+
+ assertEquals(1, facts.size)
+ facts[0].apply {
+ assertEquals(Component.FEATURE_PROMPTS, component)
+ assertEquals(Action.INTERACTION, action)
+ assertEquals(AddressAutofillDialogFacts.Items.AUTOFILL_ADDRESS_PROMPT_DISMISSED, item)
+ }
+
+ verify(addressSelectBar).hidePrompt()
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/address/AddressSelectBarTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/address/AddressSelectBarTest.kt
new file mode 100644
index 0000000000..fbffde17c8
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/address/AddressSelectBarTest.kt
@@ -0,0 +1,141 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.address
+
+import android.widget.LinearLayout
+import androidx.appcompat.widget.AppCompatTextView
+import androidx.core.view.isVisible
+import androidx.recyclerview.widget.RecyclerView
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import mozilla.components.concept.storage.Address
+import mozilla.components.feature.prompts.R
+import mozilla.components.feature.prompts.concept.SelectablePromptView
+import mozilla.components.feature.prompts.facts.AddressAutofillDialogFacts
+import mozilla.components.support.base.Component
+import mozilla.components.support.base.facts.Action
+import mozilla.components.support.base.facts.Fact
+import mozilla.components.support.base.facts.FactProcessor
+import mozilla.components.support.base.facts.Facts
+import mozilla.components.support.test.ext.appCompatContext
+import mozilla.components.support.test.mock
+import mozilla.components.support.test.robolectric.testContext
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNull
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mockito.verify
+
+@RunWith(AndroidJUnit4::class)
+class AddressSelectBarTest {
+
+ private lateinit var addressSelectBar: AddressSelectBar
+
+ private val address = Address(
+ guid = "1",
+ name = "Jane Marie Doe",
+ organization = "Mozilla",
+ streetAddress = "1230 Main st",
+ addressLevel3 = "Location3",
+ addressLevel2 = "Location2",
+ addressLevel1 = "Location1",
+ postalCode = "90237",
+ country = "USA",
+ tel = "00",
+ email = "email",
+ )
+
+ @Before
+ fun setup() {
+ addressSelectBar = AddressSelectBar(appCompatContext)
+ }
+
+ @Test
+ fun `WHEN showPrompt is called THEN the select bar is shown`() {
+ val addresses = listOf(address)
+
+ addressSelectBar.showPrompt(addresses)
+
+ assertTrue(addressSelectBar.isVisible)
+ }
+
+ @Test
+ fun `WHEN hidePrompt is called THEN the select bar is hidden`() {
+ assertTrue(addressSelectBar.isVisible)
+
+ addressSelectBar.hidePrompt()
+
+ assertFalse(addressSelectBar.isVisible)
+ }
+
+ @Test
+ fun `WHEN the selectBar header is clicked two times THEN the list of addresses is shown, then hidden`() {
+ val facts = mutableListOf<Fact>()
+ Facts.registerProcessor(
+ object : FactProcessor {
+ override fun process(fact: Fact) {
+ facts.add(fact)
+ }
+ },
+ )
+
+ addressSelectBar.showPrompt(listOf(address))
+
+ assertEquals(0, facts.size)
+
+ addressSelectBar.findViewById<AppCompatTextView>(R.id.select_address_header).performClick()
+
+ assertEquals(1, facts.size)
+ facts[0].apply {
+ assertEquals(Component.FEATURE_PROMPTS, component)
+ assertEquals(Action.INTERACTION, action)
+ assertEquals(AddressAutofillDialogFacts.Items.AUTOFILL_ADDRESS_PROMPT_EXPANDED, item)
+ }
+
+ assertTrue(addressSelectBar.findViewById<RecyclerView>(R.id.address_list).isVisible)
+
+ addressSelectBar.findViewById<AppCompatTextView>(R.id.select_address_header).performClick()
+
+ assertFalse(addressSelectBar.findViewById<RecyclerView>(R.id.address_list).isVisible)
+ }
+
+ @Test
+ fun `GIVEN a listener WHEN an address is clicked THEN onOptionSelected is called`() {
+ val listener: SelectablePromptView.Listener<Address> = mock()
+
+ assertNull(addressSelectBar.listener)
+
+ addressSelectBar.listener = listener
+
+ val facts = mutableListOf<Fact>()
+ Facts.registerProcessor(
+ object : FactProcessor {
+ override fun process(fact: Fact) {
+ facts.add(fact)
+ }
+ },
+ )
+
+ addressSelectBar.showPrompt(listOf(address))
+ val adapter = addressSelectBar.findViewById<RecyclerView>(R.id.address_list).adapter as AddressAdapter
+ val holder = adapter.onCreateViewHolder(LinearLayout(testContext), 0)
+ adapter.bindViewHolder(holder, 0)
+
+ assertEquals(0, facts.size)
+
+ holder.itemView.performClick()
+
+ assertEquals(1, facts.size)
+ facts[0].apply {
+ assertEquals(Component.FEATURE_PROMPTS, component)
+ assertEquals(Action.INTERACTION, action)
+ assertEquals(AddressAutofillDialogFacts.Items.AUTOFILL_ADDRESS_SUCCESS, item)
+ }
+
+ verify(listener).onOptionSelect(address)
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/creditcard/CreditCardItemViewHolderTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/creditcard/CreditCardItemViewHolderTest.kt
new file mode 100644
index 0000000000..27d49e7026
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/creditcard/CreditCardItemViewHolderTest.kt
@@ -0,0 +1,71 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.creditcard
+
+import android.view.LayoutInflater
+import android.view.View
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import mozilla.components.concept.storage.CreditCardEntry
+import mozilla.components.feature.prompts.R
+import mozilla.components.support.test.mock
+import mozilla.components.support.test.robolectric.testContext
+import mozilla.components.support.utils.CreditCardNetworkType
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNotNull
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+class CreditCardItemViewHolderTest {
+
+ private lateinit var view: View
+ private lateinit var cardLogoView: ImageView
+ private lateinit var cardNumberView: TextView
+ private lateinit var expirationDateView: TextView
+ private lateinit var onCreditCardSelected: (CreditCardEntry) -> Unit
+
+ private val creditCard = CreditCardEntry(
+ guid = "1",
+ name = "Banana Apple",
+ number = "4111111111111111",
+ expiryMonth = "5",
+ expiryYear = "2030",
+ cardType = CreditCardNetworkType.VISA.cardName,
+ )
+
+ @Before
+ fun setup() {
+ view = LayoutInflater.from(testContext).inflate(CreditCardItemViewHolder.LAYOUT_ID, null)
+ cardLogoView = view.findViewById(R.id.credit_card_logo)
+ cardNumberView = view.findViewById(R.id.credit_card_number)
+ expirationDateView = view.findViewById(R.id.credit_card_expiration_date)
+ onCreditCardSelected = mock()
+ }
+
+ @Test
+ fun `GIVEN a credit card item WHEN bind is called THEN set the card number, logo and expiry date`() {
+ CreditCardItemViewHolder(view, onCreditCardSelected).bind(creditCard)
+
+ assertNotNull(cardLogoView.drawable)
+ assertEquals(creditCard.obfuscatedCardNumber, cardNumberView.text)
+ assertEquals("0${creditCard.expiryMonth}/${creditCard.expiryYear}", expirationDateView.text)
+ }
+
+ @Test
+ fun `GIVEN a credit card item WHEN a credit item is clicked THEN onCreditCardSelected is called with the given credit card item`() {
+ var onCreditCardSelectedCalled: CreditCardEntry? = null
+ val onCreditCardSelected = { creditCard: CreditCardEntry ->
+ onCreditCardSelectedCalled = creditCard
+ }
+ CreditCardItemViewHolder(view, onCreditCardSelected).bind(creditCard)
+
+ view.performClick()
+
+ assertEquals(creditCard, onCreditCardSelectedCalled)
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/creditcard/CreditCardPickerTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/creditcard/CreditCardPickerTest.kt
new file mode 100644
index 0000000000..1df4372bcf
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/creditcard/CreditCardPickerTest.kt
@@ -0,0 +1,190 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.creditcard
+
+import mozilla.components.browser.state.action.ContentAction
+import mozilla.components.browser.state.state.BrowserState
+import mozilla.components.browser.state.state.ContentState
+import mozilla.components.browser.state.state.CustomTabSessionState
+import mozilla.components.browser.state.state.TabSessionState
+import mozilla.components.browser.state.store.BrowserStore
+import mozilla.components.concept.engine.prompt.PromptRequest
+import mozilla.components.concept.storage.CreditCardEntry
+import mozilla.components.support.test.any
+import mozilla.components.support.test.mock
+import mozilla.components.support.test.whenever
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNull
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+import org.mockito.Mockito.never
+import org.mockito.Mockito.verify
+
+class CreditCardPickerTest {
+
+ private lateinit var store: BrowserStore
+ private lateinit var state: BrowserState
+ private lateinit var creditCardPicker: CreditCardPicker
+ private lateinit var creditCardSelectBar: CreditCardSelectBar
+
+ private val creditCard = CreditCardEntry(
+ guid = "1",
+ name = "Banana Apple",
+ number = "4111111111111110",
+ expiryMonth = "5",
+ expiryYear = "2030",
+ cardType = "",
+ )
+ var onDismissCalled = false
+ var confirmedCreditCard: CreditCardEntry? = null
+ private val promptRequest = PromptRequest.SelectCreditCard(
+ creditCards = listOf(creditCard),
+ onDismiss = { onDismissCalled = true },
+ onConfirm = { confirmedCreditCard = it },
+ )
+
+ var manageCreditCardsCalled = false
+ var selectCreditCardCalled = false
+ private val manageCreditCardsCallback: () -> Unit = { manageCreditCardsCalled = true }
+ private val selectCreditCardCallback: () -> Unit = { selectCreditCardCalled = true }
+
+ @Before
+ fun setup() {
+ store = mock()
+ state = mock()
+ creditCardSelectBar = mock()
+ creditCardPicker = CreditCardPicker(
+ store = store,
+ creditCardSelectBar = creditCardSelectBar,
+ manageCreditCardsCallback = manageCreditCardsCallback,
+ selectCreditCardCallback = selectCreditCardCallback,
+ )
+
+ whenever(store.state).thenReturn(state)
+ }
+
+ @Test
+ fun `WHEN onOptionSelect is called with a credit card THEN selectCreditCardCallback is invoked and prompt is hidden`() {
+ assertNull(creditCardPicker.selectedCreditCard)
+
+ setupSessionState(promptRequest)
+
+ creditCardPicker.onOptionSelect(creditCard)
+
+ verify(creditCardSelectBar).hidePrompt()
+
+ assertTrue(selectCreditCardCalled)
+ assertEquals(creditCard, creditCardPicker.selectedCreditCard)
+ }
+
+ @Test
+ fun `WHEN onManageOptions is called THEN manageCreditCardsCallback is invoked and prompt is hidden`() {
+ setupSessionState(promptRequest)
+
+ creditCardPicker.onManageOptions()
+
+ verify(creditCardSelectBar).hidePrompt()
+
+ assertTrue(manageCreditCardsCalled)
+ assertTrue(onDismissCalled)
+ }
+
+ @Test
+ fun `GIVEN a prompt request WHEN handleSelectCreditCardRequest is called THEN the prompt is shown with the provided request credit cards`() {
+ creditCardPicker.handleSelectCreditCardRequest(promptRequest)
+
+ verify(creditCardSelectBar).showPrompt(promptRequest.creditCards)
+ }
+
+ @Test
+ fun `GIVEN a custom tab and a prompt request WHEN handleSelectCreditCardRequest is called THEN the prompt is shown with the provided request credit cards`() {
+ val customTabContent: ContentState = mock()
+ val customTab = CustomTabSessionState(id = "custom-tab", content = customTabContent, trackingProtection = mock(), config = mock())
+
+ whenever(customTabContent.promptRequests).thenReturn(listOf(promptRequest))
+ whenever(state.customTabs).thenReturn(listOf(customTab))
+
+ creditCardPicker.handleSelectCreditCardRequest(promptRequest)
+
+ verify(creditCardSelectBar).showPrompt(promptRequest.creditCards)
+ }
+
+ @Test
+ fun `GIVEN a selected credit card WHEN onAuthSuccess is called THEN the confirmed credit card is received`() {
+ assertNull(creditCardPicker.selectedCreditCard)
+
+ setupSessionState(promptRequest)
+
+ creditCardPicker.onOptionSelect(creditCard)
+ creditCardPicker.onAuthSuccess()
+
+ assertEquals(creditCard, confirmedCreditCard)
+ assertNull(creditCardPicker.selectedCreditCard)
+ }
+
+ @Test
+ fun `GIVEN a selected credit card WHEN onAuthFailure is called THEN the prompt request is dismissed`() {
+ assertNull(creditCardPicker.selectedCreditCard)
+
+ setupSessionState(promptRequest)
+
+ creditCardPicker.onOptionSelect(creditCard)
+ creditCardPicker.onAuthFailure()
+
+ assertNull(creditCardPicker.selectedCreditCard)
+ assertTrue(onDismissCalled)
+ }
+
+ @Test
+ fun `WHEN dismissSelectCreditCardRequest is invoked without a parameter THEN the active prompt request is dismissed and removed from the session`() {
+ val session = setupSessionState(promptRequest)
+ creditCardPicker = CreditCardPicker(
+ store = store,
+ creditCardSelectBar = creditCardSelectBar,
+ manageCreditCardsCallback = manageCreditCardsCallback,
+ selectCreditCardCallback = selectCreditCardCallback,
+ sessionId = session.id,
+ )
+
+ verify(store, never()).dispatch(any())
+ creditCardPicker.dismissSelectCreditCardRequest()
+
+ assertTrue(onDismissCalled)
+ verify(store).dispatch(ContentAction.ConsumePromptRequestAction(session.id, promptRequest))
+ }
+
+ @Test
+ fun `WHEN dismissSelectCreditCardRequest is invoked with the active prompt request as parameter THEN the request is dismissed and removed from the session`() {
+ val session = setupSessionState(promptRequest)
+ creditCardPicker = CreditCardPicker(
+ store = store,
+ creditCardSelectBar = creditCardSelectBar,
+ manageCreditCardsCallback = manageCreditCardsCallback,
+ selectCreditCardCallback = selectCreditCardCallback,
+ sessionId = session.id,
+ )
+
+ verify(store, never()).dispatch(any())
+ creditCardPicker.dismissSelectCreditCardRequest(promptRequest)
+
+ assertTrue(onDismissCalled)
+ verify(store).dispatch(ContentAction.ConsumePromptRequestAction(session.id, promptRequest))
+ }
+
+ private fun setupSessionState(request: PromptRequest? = null): TabSessionState {
+ val promptRequest: PromptRequest = request ?: mock()
+ val content: ContentState = mock()
+
+ whenever(content.promptRequests).thenReturn(listOf(promptRequest))
+
+ val selected = TabSessionState("browser-tab", content, mock(), mock())
+
+ whenever(state.selectedTabId).thenReturn(selected.id)
+ whenever(state.tabs).thenReturn(listOf(selected))
+
+ return selected
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/creditcard/CreditCardSaveDialogFragmentTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/creditcard/CreditCardSaveDialogFragmentTest.kt
new file mode 100644
index 0000000000..9d40249e2a
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/creditcard/CreditCardSaveDialogFragmentTest.kt
@@ -0,0 +1,315 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.creditcard
+
+import android.widget.Button
+import android.widget.FrameLayout
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.appcompat.widget.AppCompatTextView
+import androidx.core.view.isVisible
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import mozilla.components.concept.storage.CreditCardEntry
+import mozilla.components.concept.storage.CreditCardValidationDelegate
+import mozilla.components.feature.prompts.PromptFeature
+import mozilla.components.feature.prompts.R
+import mozilla.components.feature.prompts.facts.CreditCardAutofillDialogFacts
+import mozilla.components.support.base.Component
+import mozilla.components.support.base.facts.Action
+import mozilla.components.support.base.facts.processor.CollectionProcessor
+import mozilla.components.support.test.any
+import mozilla.components.support.test.ext.appCompatContext
+import mozilla.components.support.test.mock
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertTrue
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mockito.doAnswer
+import org.mockito.Mockito.doNothing
+import org.mockito.Mockito.doReturn
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.verify
+
+@RunWith(AndroidJUnit4::class)
+class CreditCardSaveDialogFragmentTest {
+
+ private val creditCard = CreditCardEntry(
+ guid = "1",
+ name = "Banana Apple",
+ number = "4111111111111110",
+ expiryMonth = "5",
+ expiryYear = "2030",
+ cardType = "amex",
+ )
+ private val sessionId = "sessionId"
+ private val promptRequestUID = "uid"
+
+ @Test
+ fun `WHEN the credit card save dialog fragment view is created THEN the credit card entry is displayed`() {
+ val fragment = spy(
+ CreditCardSaveDialogFragment.newInstance(
+ sessionId = sessionId,
+ promptRequestUID = promptRequestUID,
+ shouldDismissOnLoad = true,
+ creditCard = creditCard,
+ ),
+ )
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+ doAnswer {
+ FrameLayout(appCompatContext).apply {
+ addView(
+ AppCompatTextView(appCompatContext).apply {
+ id = R.id.save_credit_card_header
+ },
+ )
+ addView(
+ AppCompatTextView(appCompatContext).apply {
+ id = R.id.save_credit_card_message
+ },
+ )
+ addView(Button(appCompatContext).apply { id = R.id.save_confirm })
+ addView(Button(appCompatContext).apply { id = R.id.save_cancel })
+ addView(ImageView(appCompatContext).apply { id = R.id.credit_card_logo })
+ addView(TextView(appCompatContext).apply { id = R.id.credit_card_number })
+ addView(TextView(appCompatContext).apply { id = R.id.credit_card_expiration_date })
+ }
+ }.`when`(fragment).onCreateView(any(), any(), any())
+
+ val view = fragment.onCreateView(mock(), mock(), mock())
+ fragment.onViewCreated(view, mock())
+
+ val cardNumberTextView = view.findViewById<TextView>(R.id.credit_card_number)
+ val iconImageView = view.findViewById<ImageView>(R.id.credit_card_logo)
+ val expiryDateView = view.findViewById<TextView>(R.id.credit_card_expiration_date)
+
+ assertEquals(creditCard.obfuscatedCardNumber, cardNumberTextView.text)
+ assertEquals(creditCard.expiryDate, expiryDateView.text)
+ assertNotNull(iconImageView.drawable)
+ }
+
+ @Test
+ fun `WHEN setViewText is called with new header and button text THEN the header and button text are updated in the view`() {
+ val fragment = spy(
+ CreditCardSaveDialogFragment.newInstance(
+ sessionId = sessionId,
+ promptRequestUID = promptRequestUID,
+ shouldDismissOnLoad = true,
+ creditCard = creditCard,
+ ),
+ )
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+ doAnswer {
+ FrameLayout(appCompatContext).apply {
+ addView(
+ AppCompatTextView(appCompatContext).apply {
+ id = R.id.save_credit_card_header
+ },
+ )
+ addView(
+ AppCompatTextView(appCompatContext).apply {
+ id = R.id.save_credit_card_message
+ },
+ )
+ addView(Button(appCompatContext).apply { id = R.id.save_confirm })
+ addView(Button(appCompatContext).apply { id = R.id.save_cancel })
+ addView(ImageView(appCompatContext).apply { id = R.id.credit_card_logo })
+ addView(TextView(appCompatContext).apply { id = R.id.credit_card_number })
+ addView(TextView(appCompatContext).apply { id = R.id.credit_card_expiration_date })
+ }
+ }.`when`(fragment).onCreateView(any(), any(), any())
+
+ val view = fragment.onCreateView(mock(), mock(), mock())
+ fragment.onViewCreated(view, mock())
+
+ val headerTextView = view.findViewById<AppCompatTextView>(R.id.save_credit_card_header)
+ val messageTextView = view.findViewById<AppCompatTextView>(R.id.save_credit_card_message)
+ val cancelButtonView = view.findViewById<Button>(R.id.save_cancel)
+ val confirmButtonView = view.findViewById<Button>(R.id.save_confirm)
+
+ val header = "header"
+ val cancelButtonText = "cancelButtonText"
+ val confirmButtonText = "confirmButtonText"
+
+ fragment.setViewText(
+ view = view,
+ header = header,
+ cancelButtonText = cancelButtonText,
+ confirmButtonText = confirmButtonText,
+ showMessageBody = false,
+ )
+
+ assertEquals(header, headerTextView.text)
+ assertEquals(cancelButtonText, cancelButtonView.text)
+ assertEquals(confirmButtonText, confirmButtonView.text)
+ assertFalse(messageTextView.isVisible)
+
+ fragment.setViewText(
+ view = view,
+ header = header,
+ cancelButtonText = cancelButtonText,
+ confirmButtonText = confirmButtonText,
+ showMessageBody = true,
+ )
+
+ assertTrue(messageTextView.isVisible)
+ }
+
+ @Test
+ fun `WHEN the confirm button is clicked THEN the prompt feature is notified`() {
+ val mockFeature: PromptFeature = mock()
+ val fragment = spy(
+ CreditCardSaveDialogFragment.newInstance(
+ sessionId = sessionId,
+ promptRequestUID = promptRequestUID,
+ shouldDismissOnLoad = true,
+ creditCard = creditCard,
+ ),
+ )
+
+ fragment.feature = mockFeature
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+ doAnswer {
+ FrameLayout(appCompatContext).apply {
+ addView(
+ AppCompatTextView(appCompatContext).apply {
+ id = R.id.save_credit_card_header
+ },
+ )
+ addView(
+ AppCompatTextView(appCompatContext).apply {
+ id = R.id.save_credit_card_message
+ },
+ )
+ addView(Button(appCompatContext).apply { id = R.id.save_confirm })
+ addView(Button(appCompatContext).apply { id = R.id.save_cancel })
+ addView(ImageView(appCompatContext).apply { id = R.id.credit_card_logo })
+ addView(TextView(appCompatContext).apply { id = R.id.credit_card_number })
+ addView(TextView(appCompatContext).apply { id = R.id.credit_card_expiration_date })
+ }
+ }.`when`(fragment).onCreateView(any(), any(), any())
+ doNothing().`when`(fragment).dismiss()
+
+ val view = fragment.onCreateView(mock(), mock(), mock())
+ fragment.onViewCreated(view, mock())
+
+ val buttonView = view.findViewById<Button>(R.id.save_confirm)
+
+ buttonView.performClick()
+
+ verify(mockFeature).onConfirm(
+ sessionId = sessionId,
+ promptRequestUID = promptRequestUID,
+ value = creditCard,
+ )
+ }
+
+ @Test
+ fun `WHEN the cancel button is clicked THEN the prompt feature is notified`() {
+ val mockFeature: PromptFeature = mock()
+ val fragment = spy(
+ CreditCardSaveDialogFragment.newInstance(
+ sessionId = sessionId,
+ promptRequestUID = promptRequestUID,
+ shouldDismissOnLoad = true,
+ creditCard = creditCard,
+ ),
+ )
+
+ fragment.feature = mockFeature
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+ doAnswer {
+ FrameLayout(appCompatContext).apply {
+ addView(
+ AppCompatTextView(appCompatContext).apply {
+ id = R.id.save_credit_card_header
+ },
+ )
+ addView(
+ AppCompatTextView(appCompatContext).apply {
+ id = R.id.save_credit_card_message
+ },
+ )
+ addView(Button(appCompatContext).apply { id = R.id.save_confirm })
+ addView(Button(appCompatContext).apply { id = R.id.save_cancel })
+ addView(ImageView(appCompatContext).apply { id = R.id.credit_card_logo })
+ addView(TextView(appCompatContext).apply { id = R.id.credit_card_number })
+ addView(TextView(appCompatContext).apply { id = R.id.credit_card_expiration_date })
+ }
+ }.`when`(fragment).onCreateView(any(), any(), any())
+ doNothing().`when`(fragment).dismiss()
+
+ val view = fragment.onCreateView(mock(), mock(), mock())
+ fragment.onViewCreated(view, mock())
+
+ val buttonView = view.findViewById<Button>(R.id.save_cancel)
+
+ buttonView.performClick()
+
+ verify(mockFeature).onCancel(
+ sessionId = sessionId,
+ promptRequestUID = promptRequestUID,
+ )
+ }
+
+ @Test
+ fun `WHEN the confirm save button is clicked THEN the appropriate fact is emitted`() {
+ val fragment = spy(
+ CreditCardSaveDialogFragment.newInstance(
+ sessionId = sessionId,
+ promptRequestUID = promptRequestUID,
+ shouldDismissOnLoad = true,
+ creditCard = creditCard,
+ ),
+ )
+
+ fragment.confirmResult = CreditCardValidationDelegate.Result.CanBeCreated
+
+ CollectionProcessor.withFactCollection { facts ->
+ fragment.emitSaveUpdateFact()
+
+ assertEquals(1, facts.size)
+ val fact = facts.single()
+ assertEquals(Component.FEATURE_PROMPTS, fact.component)
+ assertEquals(Action.CONFIRM, fact.action)
+ assertEquals(
+ CreditCardAutofillDialogFacts.Items.AUTOFILL_CREDIT_CARD_CREATED,
+ fact.item,
+ )
+ }
+ }
+
+ @Test
+ fun `WHEN the confirm update button is clicked THEN the appropriate fact is emitted`() {
+ val fragment = spy(
+ CreditCardSaveDialogFragment.newInstance(
+ sessionId = sessionId,
+ promptRequestUID = promptRequestUID,
+ shouldDismissOnLoad = true,
+ creditCard = creditCard,
+ ),
+ )
+
+ fragment.confirmResult = CreditCardValidationDelegate.Result.CanBeUpdated(mock())
+
+ CollectionProcessor.withFactCollection { facts ->
+ fragment.emitSaveUpdateFact()
+
+ assertEquals(1, facts.size)
+ val fact = facts.single()
+ assertEquals(Component.FEATURE_PROMPTS, fact.component)
+ assertEquals(Action.CONFIRM, fact.action)
+ assertEquals(
+ CreditCardAutofillDialogFacts.Items.AUTOFILL_CREDIT_CARD_UPDATED,
+ fact.item,
+ )
+ }
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/creditcard/CreditCardSelectBarTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/creditcard/CreditCardSelectBarTest.kt
new file mode 100644
index 0000000000..f3b8bcfb8d
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/creditcard/CreditCardSelectBarTest.kt
@@ -0,0 +1,146 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.creditcard
+
+import android.widget.LinearLayout
+import androidx.appcompat.widget.AppCompatTextView
+import androidx.core.view.isVisible
+import androidx.recyclerview.widget.RecyclerView
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import kotlinx.coroutines.test.runTest
+import mozilla.components.concept.storage.CreditCardEntry
+import mozilla.components.feature.prompts.R
+import mozilla.components.feature.prompts.concept.SelectablePromptView
+import mozilla.components.feature.prompts.facts.CreditCardAutofillDialogFacts
+import mozilla.components.support.base.Component
+import mozilla.components.support.base.facts.Action
+import mozilla.components.support.base.facts.Fact
+import mozilla.components.support.base.facts.FactProcessor
+import mozilla.components.support.base.facts.Facts
+import mozilla.components.support.test.ext.appCompatContext
+import mozilla.components.support.test.mock
+import mozilla.components.support.test.robolectric.testContext
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNull
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mockito.verify
+
+@RunWith(AndroidJUnit4::class)
+class CreditCardSelectBarTest {
+
+ private lateinit var creditCardSelectBar: CreditCardSelectBar
+
+ private val creditCard = CreditCardEntry(
+ guid = "1",
+ name = "Banana Apple",
+ number = "4111111111111110",
+ expiryMonth = "5",
+ expiryYear = "2030",
+ cardType = "",
+ )
+
+ @Before
+ fun setup() {
+ creditCardSelectBar = CreditCardSelectBar(appCompatContext)
+ }
+
+ @Test
+ fun `GIVEN a list of credit cards WHEN prompt is shown THEN credit cards are shown`() {
+ val creditCards = listOf(creditCard)
+
+ creditCardSelectBar.showPrompt(creditCards)
+
+ assertTrue(creditCardSelectBar.isVisible)
+ }
+
+ @Test
+ fun `WHEN the prompt is hidden THEN view is hidden`() {
+ creditCardSelectBar.hidePrompt()
+
+ assertFalse(creditCardSelectBar.isVisible)
+ }
+
+ @Test
+ fun `GIVEN a listener WHEN manage credit cards button is clicked THEN onManageOptions is called`() {
+ val listener: SelectablePromptView.Listener<CreditCardEntry> = mock()
+
+ assertNull(creditCardSelectBar.listener)
+
+ creditCardSelectBar.listener = listener
+
+ creditCardSelectBar.showPrompt(listOf(creditCard))
+ creditCardSelectBar.findViewById<AppCompatTextView>(R.id.manage_credit_cards).performClick()
+
+ verify(listener).onManageOptions()
+ }
+
+ @Test
+ fun `GIVEN a listener WHEN a credit card is selected THEN onOptionSelect is called`() = runTest {
+ val listener: SelectablePromptView.Listener<CreditCardEntry> = mock()
+ creditCardSelectBar.listener = listener
+
+ val facts = mutableListOf<Fact>()
+ Facts.registerProcessor(
+ object : FactProcessor {
+ override fun process(fact: Fact) {
+ facts.add(fact)
+ }
+ },
+ )
+
+ creditCardSelectBar.showPrompt(listOf(creditCard))
+
+ val adapter = creditCardSelectBar.findViewById<RecyclerView>(R.id.credit_cards_list).adapter as CreditCardsAdapter
+ val holder = adapter.onCreateViewHolder(LinearLayout(testContext), 0)
+ adapter.bindViewHolder(holder, 0)
+
+ holder.itemView.performClick()
+
+ assertEquals(1, facts.size)
+
+ facts[0].apply {
+ assertEquals(Component.FEATURE_PROMPTS, component)
+ assertEquals(Action.INTERACTION, action)
+ assertEquals(CreditCardAutofillDialogFacts.Items.AUTOFILL_CREDIT_CARD_SUCCESS, item)
+ }
+ verify(listener).onOptionSelect(creditCard)
+ }
+
+ @Test
+ fun `WHEN the header is clicked THEN view is expanded or collapsed`() {
+ val facts = mutableListOf<Fact>()
+ Facts.registerProcessor(
+ object : FactProcessor {
+ override fun process(fact: Fact) {
+ facts.add(fact)
+ }
+ },
+ )
+
+ creditCardSelectBar.showPrompt(listOf(creditCard))
+
+ creditCardSelectBar.findViewById<AppCompatTextView>(R.id.select_credit_card_header).performClick()
+
+ assertTrue(creditCardSelectBar.findViewById<RecyclerView>(R.id.credit_cards_list).isVisible)
+ assertTrue(creditCardSelectBar.findViewById<AppCompatTextView>(R.id.manage_credit_cards).isVisible)
+
+ assertEquals(1, facts.size)
+
+ facts[0].apply {
+ assertEquals(Component.FEATURE_PROMPTS, component)
+ assertEquals(Action.INTERACTION, action)
+ assertEquals(CreditCardAutofillDialogFacts.Items.AUTOFILL_CREDIT_CARD_PROMPT_EXPANDED, item)
+ }
+
+ creditCardSelectBar.findViewById<AppCompatTextView>(R.id.select_credit_card_header).performClick()
+
+ assertFalse(creditCardSelectBar.findViewById<RecyclerView>(R.id.credit_cards_list).isVisible)
+ assertFalse(creditCardSelectBar.findViewById<AppCompatTextView>(R.id.manage_credit_cards).isVisible)
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/creditcard/CreditCardsAdapterTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/creditcard/CreditCardsAdapterTest.kt
new file mode 100644
index 0000000000..6eb7318d87
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/creditcard/CreditCardsAdapterTest.kt
@@ -0,0 +1,49 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.creditcard
+
+import mozilla.components.concept.storage.CreditCardEntry
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Test
+
+class CreditCardsAdapterTest {
+
+ @Test
+ fun testDiffCallback() {
+ val creditCard1 = CreditCardEntry(
+ guid = "1",
+ name = "Banana Apple",
+ number = "4111111111111110",
+ expiryMonth = "5",
+ expiryYear = "2030",
+ cardType = "amex",
+ )
+ val creditCard2 = creditCard1.copy()
+
+ assertTrue(
+ CreditCardsAdapter.DiffCallback.areItemsTheSame(creditCard1, creditCard2),
+ )
+ assertTrue(
+ CreditCardsAdapter.DiffCallback.areContentsTheSame(creditCard1, creditCard2),
+ )
+
+ val creditCard3 = CreditCardEntry(
+ guid = "2",
+ name = "Pineapple Orange",
+ number = "4111111111115555",
+ expiryMonth = "1",
+ expiryYear = "2030",
+ cardType = "amex",
+ )
+
+ assertFalse(
+ CreditCardsAdapter.DiffCallback.areItemsTheSame(creditCard1, creditCard3),
+ )
+ assertFalse(
+ CreditCardsAdapter.DiffCallback.areContentsTheSame(creditCard1, creditCard3),
+ )
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/AlertDialogFragmentTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/AlertDialogFragmentTest.kt
new file mode 100644
index 0000000000..f9e897dc55
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/AlertDialogFragmentTest.kt
@@ -0,0 +1,147 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.dialog
+
+import android.content.DialogInterface.BUTTON_POSITIVE
+import android.os.Looper.getMainLooper
+import android.widget.CheckBox
+import android.widget.TextView
+import androidx.appcompat.app.AlertDialog
+import androidx.core.view.isVisible
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import mozilla.components.feature.prompts.PromptFeature
+import mozilla.components.feature.prompts.R
+import mozilla.components.feature.prompts.R.id
+import mozilla.components.support.test.ext.appCompatContext
+import mozilla.components.support.test.mock
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.doReturn
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.verify
+import org.mockito.MockitoAnnotations.openMocks
+import org.robolectric.Shadows.shadowOf
+import androidx.appcompat.R as appcompatR
+
+@RunWith(AndroidJUnit4::class)
+class AlertDialogFragmentTest {
+
+ @Mock private lateinit var mockFeature: Prompter
+
+ @Before
+ fun setup() {
+ openMocks(this)
+ }
+
+ @Test
+ fun `build dialog`() {
+ val fragment = spy(
+ AlertDialogFragment.newInstance("sessionId", "uid", true, "title", "message", true),
+ )
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+
+ dialog.show()
+
+ val titleTextView = dialog.findViewById<TextView>(appcompatR.id.alertTitle)
+ val messageTextView = dialog.findViewById<TextView>(R.id.message)
+ val checkBox = dialog.findViewById<CheckBox>(id.mozac_feature_prompts_no_more_dialogs_check_box)
+
+ assertEquals(fragment.sessionId, "sessionId")
+ assertEquals(fragment.promptRequestUID, "uid")
+ assertEquals(fragment.message, "message")
+ assertEquals(fragment.hasShownManyDialogs, true)
+
+ assertEquals(titleTextView.text, "title")
+ assertEquals(fragment.title, "title")
+ assertEquals(messageTextView.text.toString(), "message")
+ assertTrue(checkBox.isVisible)
+ }
+
+ @Test
+ fun `Alert with hasShownManyDialogs equals false should not have a checkbox`() {
+ val fragment = spy(
+ AlertDialogFragment.newInstance("sessionId", "uid", false, "title", "message", false),
+ )
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+
+ dialog.show()
+
+ val checkBox = dialog.findViewById<CheckBox>(id.mozac_feature_prompts_no_more_dialogs_check_box)
+
+ assertFalse(checkBox.isVisible)
+ }
+
+ @Test
+ fun `Clicking on positive button notifies the feature`() {
+ val mockFeature: PromptFeature = mock()
+
+ val fragment = spy(
+ AlertDialogFragment.newInstance("sessionId", "uid", true, "title", "message", false),
+ )
+
+ fragment.feature = mockFeature
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+
+ val positiveButton = (dialog as AlertDialog).getButton(BUTTON_POSITIVE)
+ positiveButton.performClick()
+ shadowOf(getMainLooper()).idle()
+
+ verify(mockFeature).onCancel("sessionId", "uid")
+ }
+
+ @Test
+ fun `After checking no more dialogs checkbox feature onNoMoreDialogsChecked must be called`() {
+ val fragment = spy(
+ AlertDialogFragment.newInstance("sessionId", "uid", false, "title", "message", true),
+ )
+
+ fragment.feature = mockFeature
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+
+ val checkBox = dialog.findViewById<CheckBox>(id.mozac_feature_prompts_no_more_dialogs_check_box)
+
+ checkBox.isChecked = true
+
+ val positiveButton = (dialog as AlertDialog).getButton(BUTTON_POSITIVE)
+ positiveButton.performClick()
+ shadowOf(getMainLooper()).idle()
+
+ verify(mockFeature).onConfirm("sessionId", "uid", true)
+ }
+
+ @Test
+ fun `touching outside of the dialog must notify the feature onCancel`() {
+ val fragment = spy(
+ AlertDialogFragment.newInstance("sessionId", "uid", true, "title", "message", true),
+ )
+
+ fragment.feature = mockFeature
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ fragment.onCancel(mock())
+
+ verify(mockFeature).onCancel("sessionId", "uid")
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/AuthenticationDialogFragmentTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/AuthenticationDialogFragmentTest.kt
new file mode 100644
index 0000000000..dc0b8f238c
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/AuthenticationDialogFragmentTest.kt
@@ -0,0 +1,196 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.dialog
+
+import android.content.DialogInterface
+import android.os.Looper.getMainLooper
+import android.view.View.GONE
+import android.widget.TextView
+import androidx.appcompat.app.AlertDialog
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import mozilla.components.feature.prompts.R.id
+import mozilla.components.support.test.ext.appCompatContext
+import mozilla.components.support.test.mock
+import org.junit.Assert.assertEquals
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.doReturn
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.verify
+import org.mockito.MockitoAnnotations.openMocks
+import org.robolectric.Shadows.shadowOf
+import androidx.appcompat.R as appcompatR
+
+@RunWith(AndroidJUnit4::class)
+class AuthenticationDialogFragmentTest {
+
+ @Mock private lateinit var mockFeature: Prompter
+
+ @Before
+ fun setup() {
+ openMocks(this)
+ }
+
+ @Test
+ fun `build dialog`() {
+ val fragment = spy(
+ AuthenticationDialogFragment.newInstance(
+ "sessionId",
+ "uid",
+ true,
+ "title",
+ "message",
+ "username",
+ "password",
+ onlyShowPassword = false,
+ url = "https://mozilla.com",
+ ),
+ )
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+
+ dialog.show()
+
+ val titleTextView = dialog.findViewById<TextView>(appcompatR.id.alertTitle)
+ val messageTextView = dialog.findViewById<TextView>(android.R.id.message)
+ val usernameEditText = dialog.findViewById<AutofillEditText>(id.username)
+ val passwordEditText = dialog.findViewById<AutofillEditText>(id.password)
+
+ assertEquals(fragment.sessionId, "sessionId")
+ assertEquals(fragment.promptRequestUID, "uid")
+ assertEquals(fragment.title, "title")
+ assertEquals(fragment.message, "message")
+ assertEquals(fragment.username, "username")
+ assertEquals(fragment.password, "password")
+ assertEquals(fragment.onlyShowPassword, false)
+
+ assertEquals(titleTextView.text, "title")
+ assertEquals(messageTextView.text, "message")
+ assertEquals(usernameEditText.text.toString(), "username")
+ assertEquals(passwordEditText.text.toString(), "password")
+
+ usernameEditText.setText("new_username")
+ passwordEditText.setText("new_password")
+
+ assertEquals(usernameEditText.text.toString(), "new_username")
+ assertEquals(usernameEditText.url, "https://mozilla.com")
+ assertEquals(passwordEditText.text.toString(), "new_password")
+ assertEquals(passwordEditText.url, "https://mozilla.com")
+ }
+
+ @Test
+ fun `dialog with onlyShowPassword must not have a username field`() {
+ val fragment = spy(
+ AuthenticationDialogFragment.newInstance(
+ "sessionId",
+ "uid",
+ false,
+ "title",
+ "message",
+ "username",
+ "password",
+ true,
+ url = "https://mozilla.com",
+ ),
+ )
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+
+ dialog.show()
+
+ val usernameEditText = dialog.findViewById<AutofillEditText>(id.username)
+
+ assertEquals(usernameEditText.visibility, GONE)
+ }
+
+ @Test
+ fun `when the title is not provided the dialog must has a default value`() {
+ val fragment = spy(
+ AuthenticationDialogFragment.newInstance(
+ "sessionId",
+ "uid",
+ true,
+ "",
+ "message",
+ "username",
+ "password",
+ true,
+ url = "https://mozilla.com",
+ ),
+ )
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+
+ dialog.show()
+
+ val titleTextView = dialog.findViewById<TextView>(appcompatR.id.alertTitle)
+
+ val defaultTitle = appCompatContext.getString(AuthenticationDialogFragment.DEFAULT_TITLE)
+ assertEquals(titleTextView.text.toString(), defaultTitle)
+ }
+
+ @Test
+ fun `Clicking on positive button notifies the feature`() {
+ val fragment = spy(
+ AuthenticationDialogFragment.newInstance(
+ "sessionId",
+ "uid",
+ false,
+ "title",
+ "message",
+ "username",
+ "password",
+ false,
+ url = "https://mozilla.com",
+ ),
+ )
+
+ fragment.feature = mockFeature
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+
+ val positiveButton = (dialog as AlertDialog).getButton(DialogInterface.BUTTON_POSITIVE)
+ positiveButton.performClick()
+ shadowOf(getMainLooper()).idle()
+
+ verify(mockFeature).onConfirm("sessionId", "uid", "username" to "password")
+ }
+
+ @Test
+ fun `touching outside of the dialog must notify the feature onCancel`() {
+ val fragment = spy(
+ AuthenticationDialogFragment.newInstance(
+ "sessionId",
+ "uid",
+ true,
+ "title",
+ "message",
+ "username",
+ "password",
+ false,
+ url = "https://mozilla.com",
+ ),
+ )
+
+ fragment.feature = mockFeature
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ fragment.onCancel(mock())
+
+ verify(mockFeature).onCancel("sessionId", "uid")
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/ChoiceDialogFragmentTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/ChoiceDialogFragmentTest.kt
new file mode 100644
index 0000000000..54500d2c19
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/ChoiceDialogFragmentTest.kt
@@ -0,0 +1,692 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.dialog
+
+import android.content.DialogInterface.BUTTON_NEGATIVE
+import android.content.DialogInterface.BUTTON_POSITIVE
+import android.os.Looper.getMainLooper
+import android.os.Parcelable
+import android.view.LayoutInflater
+import android.widget.LinearLayout
+import android.widget.TextView
+import androidx.appcompat.app.AlertDialog
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import mozilla.components.concept.engine.prompt.Choice
+import mozilla.components.feature.prompts.R
+import mozilla.components.feature.prompts.dialog.ChoiceAdapter.Companion.TYPE_GROUP
+import mozilla.components.feature.prompts.dialog.ChoiceAdapter.Companion.TYPE_MENU
+import mozilla.components.feature.prompts.dialog.ChoiceAdapter.Companion.TYPE_MENU_SEPARATOR
+import mozilla.components.feature.prompts.dialog.ChoiceAdapter.Companion.TYPE_MULTIPLE
+import mozilla.components.feature.prompts.dialog.ChoiceAdapter.Companion.TYPE_SINGLE
+import mozilla.components.feature.prompts.dialog.ChoiceAdapter.GroupViewHolder
+import mozilla.components.feature.prompts.dialog.ChoiceAdapter.MenuViewHolder
+import mozilla.components.feature.prompts.dialog.ChoiceAdapter.MultipleViewHolder
+import mozilla.components.feature.prompts.dialog.ChoiceAdapter.SingleViewHolder
+import mozilla.components.feature.prompts.dialog.ChoiceDialogFragment.Companion.MENU_CHOICE_DIALOG_TYPE
+import mozilla.components.feature.prompts.dialog.ChoiceDialogFragment.Companion.MULTIPLE_CHOICE_DIALOG_TYPE
+import mozilla.components.feature.prompts.dialog.ChoiceDialogFragment.Companion.SINGLE_CHOICE_DIALOG_TYPE
+import mozilla.components.feature.prompts.dialog.ChoiceDialogFragment.Companion.newInstance
+import mozilla.components.support.test.ext.appCompatContext
+import mozilla.components.support.test.robolectric.testContext
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.doNothing
+import org.mockito.Mockito.doReturn
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.times
+import org.mockito.Mockito.verify
+import org.mockito.MockitoAnnotations.openMocks
+import org.robolectric.Shadows.shadowOf
+
+@RunWith(AndroidJUnit4::class)
+class ChoiceDialogFragmentTest {
+
+ @Mock private lateinit var mockFeature: Prompter
+ private val item = Choice(id = "", label = "item1")
+ private val subItem = Choice(id = "", label = "sub-item1")
+ private val separator = Choice(id = "", label = "item1", isASeparator = true)
+
+ @Before
+ fun setup() {
+ openMocks(this)
+ }
+
+ @Test
+ fun `Build single choice dialog`() {
+ val fragment = spy(newInstance(arrayOf(), "sessionId", "uid", true, SINGLE_CHOICE_DIALOG_TYPE))
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+
+ assertNotNull(dialog)
+ }
+
+ @Test
+ fun `cancelling the dialog cancels the feature`() {
+ val fragment = spy(newInstance(arrayOf(), "sessionId", "uid", false, SINGLE_CHOICE_DIALOG_TYPE))
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+
+ fragment.feature = mockFeature
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ doNothing().`when`(fragment).dismiss()
+
+ assertNotNull(dialog)
+
+ dialog.show()
+
+ fragment.onCancel(dialog)
+
+ verify(mockFeature).onCancel("sessionId", "uid")
+ }
+
+ @Test
+ fun `Build menu choice dialog`() {
+ val fragment = spy(newInstance(arrayOf(), "sessionId", "uid", true, MENU_CHOICE_DIALOG_TYPE))
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+
+ assertNotNull(dialog)
+ }
+
+ @Test
+ fun `Build multiple choice dialog`() {
+ val fragment = spy(newInstance(arrayOf(), "sessionId", "uid", false, MULTIPLE_CHOICE_DIALOG_TYPE))
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+
+ assertNotNull(dialog)
+ }
+
+ @Test(expected = Exception::class)
+ fun `Building a unknown dialog type will throw an exception`() {
+ val fragment = spy(newInstance(arrayOf(), "sessionId", "uid", true, -1))
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ fragment.onCreateDialog(null)
+ }
+
+ @Test
+ fun `Will show a single choice item`() {
+ val choices = arrayOf(item)
+
+ val fragment = spy(newInstance(choices, "sessionId", "uid", false, SINGLE_CHOICE_DIALOG_TYPE))
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val adapter = getAdapterFrom(fragment)
+ val holder = adapter.onCreateViewHolder(LinearLayout(testContext), TYPE_SINGLE) as SingleViewHolder
+ val labelView = holder.labelView
+ adapter.bindViewHolder(holder, 0)
+
+ assertEquals(1, adapter.itemCount)
+ assertEquals("item1", labelView.text)
+ }
+
+ @Test
+ fun `Will show a menu choice item`() {
+ val choices = arrayOf(item)
+
+ val fragment = spy(newInstance(choices, "sessionId", "uid", true, MENU_CHOICE_DIALOG_TYPE))
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val adapter = getAdapterFrom(fragment)
+ val holder = adapter.onCreateViewHolder(LinearLayout(testContext), TYPE_MENU) as MenuViewHolder
+ val labelView = holder.labelView
+ adapter.bindViewHolder(holder, 0)
+
+ assertEquals(1, adapter.itemCount)
+ assertEquals("item1", labelView.text)
+ }
+
+ @Test
+ fun `Will show a menu choice separator item`() {
+ val choices = arrayOf(separator)
+
+ val fragment = spy(newInstance(choices, "sessionId", "uid", false, MENU_CHOICE_DIALOG_TYPE))
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val adapter = getAdapterFrom(fragment)
+ val holder = adapter.onCreateViewHolder(LinearLayout(testContext), TYPE_MENU_SEPARATOR)
+ adapter.bindViewHolder(holder, 0)
+
+ assertEquals(1, adapter.itemCount)
+ assertNotNull(holder.itemView)
+ }
+
+ @Test(expected = Exception::class)
+ fun `Will throw an exception to try to create a invalid choice type item`() {
+ val choices = arrayOf(separator)
+
+ val fragment = spy(newInstance(choices, "sessionId", "uid", true, MENU_CHOICE_DIALOG_TYPE))
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val adapter = getAdapterFrom(fragment)
+ adapter.onCreateViewHolder(LinearLayout(testContext), -1)
+ }
+
+ @Test
+ fun `Will adapter will return correct view type `() {
+ val choices = arrayOf(
+ item,
+ Choice(id = "", label = "item1", children = arrayOf()),
+ Choice(id = "", label = "menu", children = arrayOf()),
+ Choice(id = "", label = "separator", children = arrayOf(), isASeparator = true),
+ Choice(id = "", label = "multiple choice"),
+ )
+
+ var fragment = spy(newInstance(choices, "sessionId", "uid", false, SINGLE_CHOICE_DIALOG_TYPE))
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ var adapter = getAdapterFrom(fragment)
+ var type = adapter.getItemViewType(0)
+
+ assertEquals(type, TYPE_SINGLE)
+
+ fragment = spy(newInstance(choices, "sessionId", "uid", true, MULTIPLE_CHOICE_DIALOG_TYPE))
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ adapter = getAdapterFrom(fragment)
+
+ type = adapter.getItemViewType(1)
+ assertEquals(type, TYPE_GROUP)
+
+ fragment = spy(newInstance(choices, "sessionId", "uid", false, MENU_CHOICE_DIALOG_TYPE))
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ adapter = getAdapterFrom(fragment)
+
+ type = adapter.getItemViewType(2)
+ assertEquals(type, TYPE_MENU)
+
+ type = adapter.getItemViewType(3)
+ assertEquals(type, TYPE_MENU_SEPARATOR)
+
+ fragment = spy(newInstance(choices, "sessionId", "uid", true, MULTIPLE_CHOICE_DIALOG_TYPE))
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ adapter = getAdapterFrom(fragment)
+
+ type = adapter.getItemViewType(4)
+ assertEquals(type, TYPE_MULTIPLE)
+ }
+
+ @Test
+ fun `Will show a multiple choice item`() {
+ val choices =
+ arrayOf(Choice(id = "", label = "item1", children = arrayOf(Choice(id = "", label = "sub-item1"))))
+
+ val fragment = spy(newInstance(choices, "sessionId", "uid", false, MULTIPLE_CHOICE_DIALOG_TYPE))
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val adapter = getAdapterFrom(fragment)
+
+ val holder =
+ adapter.onCreateViewHolder(LinearLayout(testContext), TYPE_MULTIPLE) as MultipleViewHolder
+ val groupHolder = adapter.onCreateViewHolder(LinearLayout(testContext), TYPE_GROUP) as GroupViewHolder
+
+ adapter.bindViewHolder(holder, 0)
+ adapter.bindViewHolder(groupHolder, 1)
+
+ assertEquals(2, adapter.itemCount)
+ assertEquals("item1", holder.labelView.text)
+ assertEquals("sub-item1", groupHolder.labelView.text.trim())
+ }
+
+ @Test
+ fun `Will show a multiple choice item with selected element`() {
+ val choices = arrayOf(
+ Choice(
+ id = "",
+ label = "item1",
+ children = arrayOf(Choice(id = "", label = "sub-item1", selected = true)),
+ ),
+ )
+
+ val fragment = spy(newInstance(choices, "sessionId", "uid", true, MULTIPLE_CHOICE_DIALOG_TYPE))
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val adapter = getAdapterFrom(fragment)
+
+ assertEquals(2, adapter.itemCount)
+
+ val groupHolder = adapter.onCreateViewHolder(LinearLayout(testContext), TYPE_GROUP) as GroupViewHolder
+ val holder =
+ adapter.onCreateViewHolder(LinearLayout(testContext), TYPE_MULTIPLE) as MultipleViewHolder
+
+ adapter.bindViewHolder(groupHolder, 0)
+ adapter.bindViewHolder(holder, 1)
+
+ assertEquals("item1", (groupHolder.labelView as TextView).text)
+ assertEquals("sub-item1", holder.labelView.text.trim())
+ assertEquals(true, holder.labelView.isChecked)
+ }
+
+ @Test
+ fun `Clicking on single choice item notifies the feature`() {
+ val choices = arrayOf(item)
+
+ val fragment = spy(newInstance(choices, "sessionId", "uid", false, SINGLE_CHOICE_DIALOG_TYPE))
+
+ fragment.feature = mockFeature
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+ doNothing().`when`(fragment).dismiss()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+
+ val adapter = getAdapterFrom(fragment)
+
+ val holder = adapter.onCreateViewHolder(LinearLayout(testContext), TYPE_SINGLE) as SingleViewHolder
+
+ adapter.bindViewHolder(holder, 0)
+
+ holder.itemView.performClick()
+ shadowOf(getMainLooper()).idle()
+ verify(mockFeature).onConfirm("sessionId", "uid", choices.first())
+
+ dialog.dismiss()
+ shadowOf(getMainLooper()).idle()
+ verify(mockFeature).onCancel("sessionId", "uid")
+ }
+
+ @Test
+ fun `Clicking on menu choice item notifies the feature`() {
+ val choices = arrayOf(item)
+
+ val fragment = spy(newInstance(choices, "sessionId", "uid", true, MENU_CHOICE_DIALOG_TYPE))
+
+ fragment.feature = mockFeature
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+ doNothing().`when`(fragment).dismiss()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+
+ val adapter = getAdapterFrom(fragment)
+
+ val holder = adapter.onCreateViewHolder(LinearLayout(testContext), TYPE_MENU)
+
+ adapter.bindViewHolder(holder, 0)
+
+ holder.itemView.performClick()
+ shadowOf(getMainLooper()).idle()
+
+ verify(mockFeature).onConfirm("sessionId", "uid", choices.first())
+
+ dialog.dismiss()
+ shadowOf(getMainLooper()).idle()
+
+ verify(mockFeature).onCancel("sessionId", "uid")
+ }
+
+ @Test
+ fun `Clicking on multiple choice item notifies the feature`() {
+ val choices =
+ arrayOf(Choice(id = "", label = "item1", children = arrayOf(subItem)))
+ val fragment = spy(newInstance(choices, "sessionId", "uid", false, MULTIPLE_CHOICE_DIALOG_TYPE))
+
+ fragment.feature = mockFeature
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+ doNothing().`when`(fragment).dismiss()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+
+ val adapter = dialog.findViewById<RecyclerView>(R.id.recyclerView).adapter as ChoiceAdapter
+
+ val holder = adapter.onCreateViewHolder(LinearLayout(testContext), TYPE_MULTIPLE)
+
+ adapter.bindViewHolder(holder, 1)
+
+ holder.itemView.performClick()
+
+ assertTrue(fragment.mapSelectChoice.isNotEmpty())
+
+ val positiveButton = (dialog as AlertDialog).getButton(BUTTON_POSITIVE)
+ positiveButton.performClick()
+ shadowOf(getMainLooper()).idle()
+
+ verify(mockFeature).onConfirm("sessionId", "uid", fragment.mapSelectChoice.keys.toTypedArray())
+
+ val negativeButton = dialog.getButton(BUTTON_NEGATIVE)
+ negativeButton.performClick()
+ shadowOf(getMainLooper()).idle()
+
+ verify(mockFeature, times(2)).onCancel("sessionId", "uid")
+ }
+
+ @Test
+ fun `Clicking on selected multiple choice item will notify feature`() {
+ val choices =
+ arrayOf(item.copy(selected = true))
+ val fragment = spy(newInstance(choices, "sessionId", "uid", true, MULTIPLE_CHOICE_DIALOG_TYPE))
+
+ fragment.feature = mockFeature
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+ doNothing().`when`(fragment).dismiss()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+
+ val adapter = dialog.findViewById<RecyclerView>(R.id.recyclerView).adapter as ChoiceAdapter
+
+ val holder =
+ adapter.onCreateViewHolder(LinearLayout(testContext), TYPE_MULTIPLE) as MultipleViewHolder
+
+ adapter.bindViewHolder(holder, 0)
+
+ assertTrue(holder.labelView.isChecked)
+
+ holder.itemView.performClick()
+
+ assertTrue(fragment.mapSelectChoice.isEmpty())
+
+ val positiveButton = (dialog as AlertDialog).getButton(BUTTON_POSITIVE)
+ positiveButton.performClick()
+ shadowOf(getMainLooper()).idle()
+
+ verify(mockFeature).onConfirm("sessionId", "uid", fragment.mapSelectChoice.keys.toTypedArray())
+ }
+
+ @Test
+ fun `single choice item with multiple sub-menu groups`() {
+ val choices = arrayOf(
+ Choice(
+ id = "group1",
+ label = "group1",
+ children = arrayOf(Choice(id = "item_group_1", label = "item group 1")),
+ ),
+ Choice(
+ id = "group2",
+ label = "group2",
+ children = arrayOf(Choice(id = "item_group_2", label = "item group 2")),
+ ),
+ )
+
+ val fragment = spy(newInstance(choices, "sessionId", "uid", false, SINGLE_CHOICE_DIALOG_TYPE))
+ fragment.feature = mockFeature
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+ doNothing().`when`(fragment).dismiss()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+
+ val adapter = dialog.findViewById<RecyclerView>(R.id.recyclerView).adapter as ChoiceAdapter
+
+ val groupViewHolder = adapter.onCreateViewHolder(LinearLayout(testContext), adapter.getItemViewType(0))
+ as GroupViewHolder
+
+ adapter.bindViewHolder(groupViewHolder, 0)
+
+ assertFalse(groupViewHolder.labelView.isEnabled)
+ assertEquals(groupViewHolder.labelView.text, "group1")
+
+ val singleViewHolder =
+ adapter.onCreateViewHolder(LinearLayout(testContext), adapter.getItemViewType(1)) as SingleViewHolder
+
+ adapter.bindViewHolder(singleViewHolder, 1)
+
+ with(singleViewHolder) {
+ assertTrue(labelView.isEnabled)
+
+ val choiceGroup1 = choices[0].children!![0]
+ assertEquals(labelView.text, choiceGroup1.label)
+
+ itemView.performClick()
+ verify(mockFeature).onConfirm("sessionId", "uid", choiceGroup1)
+ }
+ }
+
+ @Test
+ fun `disabled single choice item is not clickable`() {
+ val choices = arrayOf(
+ Choice(id = "item1", label = "Enabled choice"),
+ Choice(id = "item2", enable = false, label = "Disabled choice"),
+ )
+
+ val fragment =
+ spy(newInstance(choices, "sessionId", "uid", false, SINGLE_CHOICE_DIALOG_TYPE))
+ fragment.feature = mockFeature
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+ doNothing().`when`(fragment).dismiss()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+
+ val adapter = dialog.findViewById<RecyclerView>(R.id.recyclerView).adapter as ChoiceAdapter
+
+ // test disabled item
+ val disabledItemViewHolder =
+ adapter.onCreateViewHolder(LinearLayout(testContext), adapter.getItemViewType(1))
+ as SingleViewHolder
+
+ adapter.bindViewHolder(disabledItemViewHolder, 1)
+
+ with(disabledItemViewHolder) {
+ assertEquals(labelView.text, "Disabled choice")
+ assertFalse(labelView.isEnabled)
+ assertFalse(itemView.isClickable)
+ }
+ }
+
+ @Test
+ fun `enabled single choice item is clickable`() {
+ val choices = arrayOf(
+ Choice(id = "item1", label = "Enabled choice"),
+ Choice(id = "item2", enable = false, label = "Disabled choice"),
+ )
+
+ val fragment = spy(newInstance(choices, "sessionId", "uid", false, SINGLE_CHOICE_DIALOG_TYPE))
+ fragment.feature = mockFeature
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+ doNothing().`when`(fragment).dismiss()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+
+ val adapter = dialog.findViewById<RecyclerView>(R.id.recyclerView).adapter as ChoiceAdapter
+
+ // test enabled item
+ val enabledItemViewHolder =
+ adapter.onCreateViewHolder(LinearLayout(testContext), adapter.getItemViewType(0)) as SingleViewHolder
+
+ adapter.bindViewHolder(enabledItemViewHolder, 0)
+
+ with(enabledItemViewHolder) {
+ assertEquals(labelView.text, "Enabled choice")
+ assertTrue(labelView.isEnabled)
+ assertTrue(itemView.isClickable)
+ }
+ }
+
+ @Test
+ fun `disabled multiple choice item is not clickable`() {
+ val choices = arrayOf(
+ Choice(id = "item1", label = "Enabled choice"),
+ Choice(id = "item2", enable = false, label = "Disabled choice"),
+ )
+
+ val fragment =
+ spy(newInstance(choices, "sessionId", "uid", false, MULTIPLE_CHOICE_DIALOG_TYPE))
+ fragment.feature = mockFeature
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+ doNothing().`when`(fragment).dismiss()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+
+ val adapter = dialog.findViewById<RecyclerView>(R.id.recyclerView).adapter as ChoiceAdapter
+
+ // test disabled item
+ val disabledItemViewHolder =
+ adapter.onCreateViewHolder(LinearLayout(testContext), adapter.getItemViewType(1))
+ as MultipleViewHolder
+
+ adapter.bindViewHolder(disabledItemViewHolder, 1)
+
+ with(disabledItemViewHolder) {
+ assertEquals(labelView.text, "Disabled choice")
+ assertFalse(labelView.isEnabled)
+ assertFalse(itemView.isClickable)
+ }
+ }
+
+ @Test
+ fun `enabled multiple choice item is clickable`() {
+ val choices = arrayOf(
+ Choice(id = "item1", label = "Enabled choice"),
+ Choice(id = "item2", enable = false, label = "Disabled choice"),
+ )
+
+ val fragment = spy(newInstance(choices, "sessionId", "uid", false, MULTIPLE_CHOICE_DIALOG_TYPE))
+ fragment.feature = mockFeature
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+ doNothing().`when`(fragment).dismiss()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+
+ val adapter = dialog.findViewById<RecyclerView>(R.id.recyclerView).adapter as ChoiceAdapter
+
+ // test enabled item
+ val enabledItemViewHolder =
+ adapter.onCreateViewHolder(LinearLayout(testContext), adapter.getItemViewType(0)) as MultipleViewHolder
+
+ adapter.bindViewHolder(enabledItemViewHolder, 0)
+
+ with(enabledItemViewHolder) {
+ assertEquals(labelView.text, "Enabled choice")
+ assertTrue(labelView.isEnabled)
+ assertTrue(itemView.isClickable)
+ }
+ }
+
+ @Test
+ fun `disabled menu choice item is not clickable`() {
+ val choices = arrayOf(
+ Choice(id = "item1", label = "Enabled choice"),
+ Choice(id = "item2", enable = false, label = "Disabled choice"),
+ )
+
+ val fragment =
+ spy(newInstance(choices, "sessionId", "uid", false, MENU_CHOICE_DIALOG_TYPE))
+ fragment.feature = mockFeature
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+ doNothing().`when`(fragment).dismiss()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+
+ val adapter = dialog.findViewById<RecyclerView>(R.id.recyclerView).adapter as ChoiceAdapter
+
+ // test disabled item
+ val disabledItemViewHolder =
+ adapter.onCreateViewHolder(LinearLayout(testContext), adapter.getItemViewType(1))
+ as MenuViewHolder
+
+ adapter.bindViewHolder(disabledItemViewHolder, 1)
+
+ with(disabledItemViewHolder) {
+ assertEquals(labelView.text, "Disabled choice")
+ assertFalse(labelView.isEnabled)
+ assertFalse(itemView.isClickable)
+ }
+ }
+
+ @Test
+ fun `enabled menu choice item is clickable`() {
+ val choices = arrayOf(
+ Choice(id = "item1", label = "Enabled choice"),
+ Choice(id = "item2", enable = false, label = "Disabled choice"),
+ )
+
+ val fragment = spy(newInstance(choices, "sessionId", "uid", false, MENU_CHOICE_DIALOG_TYPE))
+ fragment.feature = mockFeature
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+ doNothing().`when`(fragment).dismiss()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+
+ val adapter = dialog.findViewById<RecyclerView>(R.id.recyclerView).adapter as ChoiceAdapter
+
+ // test enabled item
+ val enabledItemViewHolder =
+ adapter.onCreateViewHolder(LinearLayout(testContext), adapter.getItemViewType(0)) as MenuViewHolder
+
+ adapter.bindViewHolder(enabledItemViewHolder, 0)
+
+ with(enabledItemViewHolder) {
+ assertEquals(labelView.text, "Enabled choice")
+ assertTrue(labelView.isEnabled)
+ assertTrue(itemView.isClickable)
+ }
+ }
+
+ @Test
+ fun `scroll to selected item`() {
+ // array of 20 choices; 10th one is selected
+ val choices = Array(20) { index ->
+ if (index == 10) {
+ item.copy(selected = true, label = "selected")
+ } else {
+ item.copy(label = "item$index")
+ }
+ }
+ val fragment = newInstance(choices, "sessionId", "uid", true, SINGLE_CHOICE_DIALOG_TYPE)
+ val inflater = LayoutInflater.from(testContext)
+ val dialog = fragment.createDialogContentView(inflater)
+ val recyclerView = dialog.findViewById<RecyclerView>(R.id.recyclerView)
+ val layoutManager = recyclerView.layoutManager as LinearLayoutManager
+ // these two lines are a bit of a hack to get the layout manager to draw the view.
+ recyclerView.measure(0, 0)
+ recyclerView.layout(0, 0, 100, 250)
+
+ val selectedItemIndex = layoutManager.findLastCompletelyVisibleItemPosition()
+ assertEquals(10, selectedItemIndex)
+ }
+
+ @Test
+ fun `test toArrayOfChoices`() {
+ val parcelables = Array<Parcelable>(1) { Choice(id = "id", label = "label") }
+ val choice = parcelables.toArrayOfChoices()
+ assertNotNull(choice)
+ }
+
+ private fun getAdapterFrom(fragment: ChoiceDialogFragment): ChoiceAdapter {
+ val inflater = LayoutInflater.from(testContext)
+ val view = fragment.createDialogContentView(inflater)
+ val recyclerViewId = R.id.recyclerView
+
+ return view.findViewById<RecyclerView>(recyclerViewId).adapter as ChoiceAdapter
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/ColorPickerDialogFragmentTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/ColorPickerDialogFragmentTest.kt
new file mode 100644
index 0000000000..e452e75897
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/ColorPickerDialogFragmentTest.kt
@@ -0,0 +1,159 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.dialog
+
+import android.content.DialogInterface
+import android.os.Looper.getMainLooper
+import android.widget.LinearLayout
+import android.widget.TextView
+import androidx.appcompat.app.AlertDialog
+import androidx.recyclerview.widget.RecyclerView
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import mozilla.components.feature.prompts.R
+import mozilla.components.support.test.ext.appCompatContext
+import mozilla.components.support.test.mock
+import mozilla.components.support.test.robolectric.testContext
+import org.junit.Assert.assertEquals
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.doReturn
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.verify
+import org.mockito.MockitoAnnotations.openMocks
+import org.robolectric.Shadows.shadowOf
+
+@RunWith(AndroidJUnit4::class)
+class ColorPickerDialogFragmentTest {
+
+ @Mock private lateinit var mockFeature: Prompter
+
+ @Before
+ fun setup() {
+ openMocks(this)
+ }
+
+ @Test
+ fun `build dialog`() {
+ val fragment = spy(
+ ColorPickerDialogFragment.newInstance("sessionId", "uid", true, "#e66465"),
+ )
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+
+ dialog.show()
+
+ assertEquals(fragment.sessionId, "sessionId")
+ assertEquals(fragment.promptRequestUID, "uid")
+ assertEquals(fragment.selectedColor.toHexColor(), "#e66465")
+ }
+
+ @Test
+ fun `clicking on positive button notifies the feature`() {
+ val fragment = spy(
+ ColorPickerDialogFragment.newInstance("sessionId", "uid", false, "#e66465"),
+ )
+
+ fragment.feature = mockFeature
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+
+ fragment.onColorChange("#4f4663".toColor())
+
+ val positiveButton = (dialog as AlertDialog).getButton(DialogInterface.BUTTON_POSITIVE)
+ positiveButton.performClick()
+ shadowOf(getMainLooper()).idle()
+
+ verify(mockFeature).onConfirm("sessionId", "uid", "#4f4663")
+ }
+
+ @Test
+ fun `clicking on negative button notifies the feature`() {
+ val fragment = spy(
+ ColorPickerDialogFragment.newInstance("sessionId", "uid", true, "#e66465"),
+ )
+
+ fragment.feature = mockFeature
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+
+ val negativeButton = (dialog as AlertDialog).getButton(DialogInterface.BUTTON_NEGATIVE)
+ negativeButton.performClick()
+ shadowOf(getMainLooper()).idle()
+
+ verify(mockFeature).onCancel("sessionId", "uid")
+ }
+
+ @Test
+ fun `touching outside of the dialog must notify the feature onCancel`() {
+ val fragment = spy(
+ ColorPickerDialogFragment.newInstance("sessionId", "uid", false, "#e66465"),
+ )
+
+ fragment.feature = mockFeature
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ fragment.onCancel(mock())
+
+ verify(mockFeature).onCancel("sessionId", "uid")
+ }
+
+ @Test
+ fun `will show a color item`() {
+ val fragment = spy(
+ ColorPickerDialogFragment.newInstance("sessionId", "uid", true, "#e66465"),
+ )
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val adapter = getAdapterFrom(fragment)
+ val holder = adapter.onCreateViewHolder(LinearLayout(testContext), 0)
+ adapter.bindViewHolder(holder, 0)
+
+ val selectedColor = appCompatContext.resources
+ .obtainTypedArray(R.array.mozac_feature_prompts_default_colors).let {
+ it.getColor(0, 0)
+ }
+
+ assertEquals(selectedColor, holder.color)
+ }
+
+ @Test
+ fun `clicking on a item will update the selected color`() {
+ val fragment = spy(
+ ColorPickerDialogFragment.newInstance("sessionId", "uid", false, "#e66465"),
+ )
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val adapter = getAdapterFrom(fragment)
+ val holder = adapter.onCreateViewHolder(LinearLayout(testContext), 0)
+ val colorItem = holder.itemView as TextView
+ adapter.bindViewHolder(holder, 0)
+
+ colorItem.performClick()
+
+ val selectedColor = appCompatContext.resources
+ .obtainTypedArray(R.array.mozac_feature_prompts_default_colors).let {
+ it.getColor(0, 0)
+ }
+ assertEquals(fragment.selectedColor, selectedColor)
+ }
+
+ private fun getAdapterFrom(fragment: ColorPickerDialogFragment): BasicColorAdapter {
+ val view = fragment.createDialogContentView()
+ val recyclerViewId = R.id.recyclerView
+
+ return view.findViewById<RecyclerView>(recyclerViewId).adapter as BasicColorAdapter
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/ConfirmDialogFragmentTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/ConfirmDialogFragmentTest.kt
new file mode 100644
index 0000000000..20a1cfc76a
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/ConfirmDialogFragmentTest.kt
@@ -0,0 +1,126 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.dialog
+
+import android.content.DialogInterface
+import android.os.Looper.getMainLooper
+import android.widget.TextView
+import androidx.appcompat.app.AlertDialog
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import mozilla.components.feature.prompts.R
+import mozilla.components.support.test.ext.appCompatContext
+import org.junit.Assert
+import org.junit.Assert.assertEquals
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito
+import org.mockito.Mockito.doReturn
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.verify
+import org.mockito.MockitoAnnotations.openMocks
+import org.robolectric.Shadows.shadowOf
+import androidx.appcompat.R as appcompatR
+
+@RunWith(AndroidJUnit4::class)
+class ConfirmDialogFragmentTest {
+
+ @Mock private lateinit var mockFeature: Prompter
+ private lateinit var fragment: ConfirmDialogFragment
+
+ @Before
+ fun setup() {
+ openMocks(this)
+ fragment = spy(
+ ConfirmDialogFragment.newInstance(
+ "sessionId",
+ "uid",
+ true,
+ "title",
+ "message",
+ "positiveLabel",
+ "negativeLabel",
+ ),
+ )
+ }
+
+ @Test
+ fun `build dialog`() {
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+
+ dialog.show()
+
+ val titleTextView = dialog.findViewById<TextView>(appcompatR.id.alertTitle)
+ val messageTextView = dialog.findViewById<TextView>(R.id.message)
+
+ assertEquals(fragment.sessionId, "sessionId")
+ assertEquals(fragment.promptRequestUID, "uid")
+ assertEquals(fragment.message, "message")
+
+ val positiveButton = (dialog as AlertDialog).getButton(DialogInterface.BUTTON_POSITIVE)
+ val negativeButton = dialog.getButton(DialogInterface.BUTTON_NEGATIVE)
+
+ assertEquals("title", titleTextView.text)
+ assertEquals("message", messageTextView.text.toString())
+ assertEquals("positiveLabel", positiveButton.text)
+ assertEquals("negativeLabel", negativeButton.text)
+ }
+
+ @Test
+ fun `clicking on positive button notifies the feature`() {
+ fragment.feature = mockFeature
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+
+ val positiveButton = (dialog as AlertDialog).getButton(DialogInterface.BUTTON_POSITIVE)
+ positiveButton.performClick()
+ shadowOf(getMainLooper()).idle()
+
+ verify(mockFeature).onConfirm("sessionId", "uid", false)
+ }
+
+ @Test
+ fun `clicking on negative button notifies the feature`() {
+ fragment.feature = mockFeature
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+
+ val negativeButton = (dialog as AlertDialog).getButton(DialogInterface.BUTTON_NEGATIVE)
+ negativeButton.performClick()
+ shadowOf(getMainLooper()).idle()
+
+ verify(mockFeature).onCancel("sessionId", "uid", false)
+ }
+
+ @Test
+ fun `cancelling the dialog cancels the feature`() {
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+
+ fragment.feature = mockFeature
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ Mockito.doNothing().`when`(fragment).dismiss()
+
+ Assert.assertNotNull(dialog)
+
+ dialog.show()
+
+ fragment.onCancel(dialog)
+
+ verify(mockFeature).onCancel("sessionId", "uid", false)
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/MultiButtonDialogFragmentTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/MultiButtonDialogFragmentTest.kt
new file mode 100644
index 0000000000..07e060c578
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/MultiButtonDialogFragmentTest.kt
@@ -0,0 +1,252 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.dialog
+
+import android.content.DialogInterface
+import android.content.DialogInterface.BUTTON_POSITIVE
+import android.os.Looper.getMainLooper
+import android.widget.CheckBox
+import android.widget.TextView
+import androidx.appcompat.app.AlertDialog
+import androidx.core.view.isVisible
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import mozilla.components.feature.prompts.R
+import mozilla.components.feature.prompts.R.id
+import mozilla.components.support.test.ext.appCompatContext
+import mozilla.components.support.test.mock
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.doReturn
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.verify
+import org.mockito.MockitoAnnotations.openMocks
+import org.robolectric.Shadows.shadowOf
+import androidx.appcompat.R as appcompatR
+
+@RunWith(AndroidJUnit4::class)
+class MultiButtonDialogFragmentTest {
+
+ @Mock private lateinit var mockFeature: Prompter
+
+ @Before
+ fun setup() {
+ openMocks(this)
+ }
+
+ @Test
+ fun `Build dialog`() {
+ val fragment = spy(
+ MultiButtonDialogFragment.newInstance(
+ "sessionId",
+ "uid",
+ "title",
+ "message",
+ true,
+ false,
+ "positiveButton",
+ "negativeButton",
+ "neutralButton",
+ ),
+ )
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+
+ dialog.show()
+
+ val titleTextView = dialog.findViewById<TextView>(appcompatR.id.alertTitle)
+ val messageTextView = dialog.findViewById<TextView>(R.id.message)
+ val checkBox = dialog.findViewById<CheckBox>(id.mozac_feature_prompts_no_more_dialogs_check_box)
+ val positiveButton = (dialog as AlertDialog).getButton(BUTTON_POSITIVE)
+ val negativeButton = (dialog).getButton(DialogInterface.BUTTON_NEGATIVE)
+ val neutralButton = (dialog).getButton(DialogInterface.BUTTON_NEUTRAL)
+
+ assertEquals(fragment.sessionId, "sessionId")
+ assertEquals(fragment.promptRequestUID, "uid")
+ assertEquals(fragment.message, "message")
+ assertEquals(fragment.hasShownManyDialogs, true)
+
+ assertEquals(titleTextView.text, "title")
+ assertEquals(fragment.title, "title")
+ assertEquals(messageTextView.text.toString(), "message")
+ assertTrue(checkBox.isVisible)
+
+ assertEquals(positiveButton.text, "positiveButton")
+ assertEquals(negativeButton.text, "negativeButton")
+ assertEquals(neutralButton.text, "neutralButton")
+ }
+
+ @Test
+ fun `Dialog with hasShownManyDialogs equals false should not have a checkbox`() {
+ val fragment = spy(
+ MultiButtonDialogFragment.newInstance(
+ "sessionId",
+ "uid",
+ "title",
+ "message",
+ false,
+ false,
+ "positiveButton",
+ "negativeButton",
+ "neutralButton",
+ ),
+ )
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+
+ dialog.show()
+
+ val checkBox = dialog.findViewById<CheckBox>(id.mozac_feature_prompts_no_more_dialogs_check_box)
+
+ assertFalse(checkBox.isVisible)
+ }
+
+ @Test
+ fun `Clicking on a positive button notifies the feature`() {
+ val fragment = spy(
+ MultiButtonDialogFragment.newInstance(
+ "sessionId",
+ "uid",
+ "title",
+ "message",
+ false,
+ false,
+ "positiveButton",
+ ),
+ )
+
+ fragment.feature = mockFeature
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+
+ val positiveButton = (dialog as AlertDialog).getButton(BUTTON_POSITIVE)
+ positiveButton.performClick()
+ shadowOf(getMainLooper()).idle()
+
+ verify(mockFeature).onConfirm("sessionId", "uid", false to MultiButtonDialogFragment.ButtonType.POSITIVE)
+ }
+
+ @Test
+ fun `Clicking on a negative button notifies the feature`() {
+ val fragment = spy(
+ MultiButtonDialogFragment.newInstance(
+ "sessionId",
+ "uid",
+ "title",
+ "message",
+ false,
+ false,
+ negativeButton = "negative",
+ ),
+ )
+
+ fragment.feature = mockFeature
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+
+ val negativeButton = (dialog as AlertDialog).getButton(DialogInterface.BUTTON_NEGATIVE)
+ negativeButton.performClick()
+ shadowOf(getMainLooper()).idle()
+
+ verify(mockFeature).onConfirm("sessionId", "uid", false to MultiButtonDialogFragment.ButtonType.NEGATIVE)
+ }
+
+ @Test
+ fun `Clicking on a neutral button notifies the feature`() {
+ val fragment = spy(
+ MultiButtonDialogFragment.newInstance(
+ "sessionId",
+ "uid",
+ "title",
+ "message",
+ false,
+ false,
+ neutralButton = "neutral",
+ ),
+ )
+
+ fragment.feature = mockFeature
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+
+ val neutralButton = (dialog as AlertDialog).getButton(DialogInterface.BUTTON_NEUTRAL)
+ neutralButton.performClick()
+ shadowOf(getMainLooper()).idle()
+
+ verify(mockFeature).onConfirm("sessionId", "uid", false to MultiButtonDialogFragment.ButtonType.NEUTRAL)
+ }
+
+ @Test
+ fun `After checking no more dialogs checkbox onConfirm must be called with NoMoreDialogs equals true`() {
+ val fragment = spy(
+ MultiButtonDialogFragment.newInstance(
+ "sessionId",
+ "uid",
+ "title",
+ "message",
+ true,
+ false,
+ positiveButton = "positive",
+ ),
+ )
+
+ fragment.feature = mockFeature
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+
+ val checkBox = dialog.findViewById<CheckBox>(id.mozac_feature_prompts_no_more_dialogs_check_box)
+
+ checkBox.isChecked = true
+
+ val positiveButton = (dialog as AlertDialog).getButton(BUTTON_POSITIVE)
+ positiveButton.performClick()
+ shadowOf(getMainLooper()).idle()
+
+ verify(mockFeature).onConfirm("sessionId", "uid", true to MultiButtonDialogFragment.ButtonType.POSITIVE)
+ }
+
+ @Test
+ fun `Touching outside of the dialog must notify the feature onCancel`() {
+ val fragment = spy(
+ MultiButtonDialogFragment.newInstance(
+ "sessionId",
+ "uid",
+ "title",
+ "message",
+ true,
+ false,
+ positiveButton = "positive",
+ ),
+ )
+
+ fragment.feature = mockFeature
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ fragment.onCancel(mock())
+
+ verify(mockFeature).onCancel("sessionId", "uid")
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/SaveLoginDialogFragmentTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/SaveLoginDialogFragmentTest.kt
new file mode 100644
index 0000000000..3ac2c1404c
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/SaveLoginDialogFragmentTest.kt
@@ -0,0 +1,132 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.dialog
+
+import android.graphics.Bitmap
+import android.graphics.drawable.BitmapDrawable
+import android.widget.FrameLayout
+import android.widget.ImageView
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.google.android.material.textfield.TextInputEditText
+import junit.framework.TestCase
+import mozilla.components.concept.storage.LoginEntry
+import mozilla.components.feature.prompts.R
+import mozilla.components.support.test.any
+import mozilla.components.support.test.ext.appCompatContext
+import mozilla.components.support.test.mock
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mockito.doAnswer
+import org.mockito.Mockito.doReturn
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.times
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when`
+import org.robolectric.Shadows
+import mozilla.components.ui.icons.R as iconsR
+
+@RunWith(AndroidJUnit4::class)
+class SaveLoginDialogFragmentTest : TestCase() {
+ @Test
+ fun `dialog should always set the website icon if it is available`() {
+ val sessionId = "sessionId"
+ val requestUID = "uid"
+ val shouldDismissOnLoad = true
+ val hint = 42
+ val loginUsername = "username"
+ val loginPassword = "password"
+ val entry: LoginEntry = mock() // valid image to be used as favicon
+ `when`(entry.username).thenReturn(loginUsername)
+ `when`(entry.password).thenReturn(loginPassword)
+ val icon: Bitmap = mock()
+ val fragment = spy(
+ SaveLoginDialogFragment.newInstance(
+ sessionId,
+ requestUID,
+ shouldDismissOnLoad,
+ hint,
+ entry,
+ icon,
+ ),
+ )
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+ doAnswer {
+ FrameLayout(appCompatContext).apply {
+ addView(TextInputEditText(appCompatContext).apply { id = R.id.username_field })
+ addView(TextInputEditText(appCompatContext).apply { id = R.id.password_field })
+ addView(ImageView(appCompatContext).apply { id = R.id.host_icon })
+ }
+ }.`when`(fragment).inflateRootView(any())
+
+ val fragmentView = fragment.onCreateView(mock(), mock(), mock())
+
+ verify(fragment).inflateRootView(any())
+ verify(fragment).setupRootView(any())
+ assertEquals(sessionId, fragment.sessionId)
+ assertEquals(requestUID, fragment.promptRequestUID)
+ // Using assertTrue since assertEquals / assertSame would fail here
+ assertTrue(loginUsername == fragmentView.findViewById<TextInputEditText>(R.id.username_field).text.toString())
+ assertTrue(loginPassword == fragmentView.findViewById<TextInputEditText>(R.id.password_field).text.toString())
+
+ // Actually verifying that the provided image is used
+ verify(fragment, times(0)).setImageViewTint(any())
+ assertSame(icon, (fragmentView.findViewById<ImageView>(R.id.host_icon).drawable as BitmapDrawable).bitmap)
+ }
+
+ @Test
+ fun `dialog should use a default tinted icon if favicon is not available`() {
+ val sessionId = "sessionId"
+ val requestUID = "uid"
+ val shouldDismissOnLoad = false
+ val hint = 42
+ val loginUsername = "username"
+ val loginPassword = "password"
+ val entry: LoginEntry = mock()
+ `when`(entry.username).thenReturn(loginUsername)
+ `when`(entry.password).thenReturn(loginPassword)
+ val icon: Bitmap? = null // null favicon
+ val fragment = spy(
+ SaveLoginDialogFragment.newInstance(
+ sessionId,
+ requestUID,
+ shouldDismissOnLoad,
+ hint,
+ entry,
+ icon,
+ ),
+ )
+ val defaultIconResource = iconsR.drawable.mozac_ic_globe_24
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+ doAnswer {
+ FrameLayout(appCompatContext).apply {
+ addView(TextInputEditText(appCompatContext).apply { id = R.id.username_field })
+ addView(TextInputEditText(appCompatContext).apply { id = R.id.password_field })
+ addView(
+ ImageView(appCompatContext).apply {
+ id = R.id.host_icon
+ setImageResource(defaultIconResource)
+ },
+ )
+ }
+ }.`when`(fragment).inflateRootView(any())
+
+ val fragmentView = fragment.onCreateView(mock(), mock(), mock())
+
+ verify(fragment).inflateRootView(any())
+ verify(fragment).setupRootView(any())
+ assertEquals(sessionId, fragment.sessionId)
+ // Using assertTrue since assertEquals / assertSame would fail here
+ assertTrue(loginUsername == fragmentView.findViewById<TextInputEditText>(R.id.username_field).text.toString())
+ assertTrue(loginPassword == fragmentView.findViewById<TextInputEditText>(R.id.password_field).text.toString())
+
+ // Actually verifying that the tinted default image is used
+ val iconView = fragmentView.findViewById<ImageView>(R.id.host_icon)
+ verify(fragment).setImageViewTint(iconView)
+ assertNotNull(iconView.imageTintList)
+ // The icon sent was null, we want the default instead
+ assertNotNull(iconView.drawable)
+ assertEquals(defaultIconResource, Shadows.shadowOf(iconView.drawable).createdFromResId)
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/TextPromptDialogFragmentTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/TextPromptDialogFragmentTest.kt
new file mode 100644
index 0000000000..b0fee5f9a1
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/TextPromptDialogFragmentTest.kt
@@ -0,0 +1,153 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.dialog
+
+import android.content.DialogInterface.BUTTON_POSITIVE
+import android.os.Looper.getMainLooper
+import android.widget.CheckBox
+import android.widget.TextView
+import androidx.appcompat.app.AlertDialog
+import androidx.core.view.isVisible
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import mozilla.components.feature.prompts.R.id
+import mozilla.components.support.test.ext.appCompatContext
+import mozilla.components.support.test.mock
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.doReturn
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.verify
+import org.mockito.MockitoAnnotations
+import org.robolectric.Shadows.shadowOf
+import androidx.appcompat.R as appcompatR
+
+@RunWith(AndroidJUnit4::class)
+class TextPromptDialogFragmentTest {
+
+ @Mock private lateinit var mockFeature: Prompter
+
+ @Before
+ fun setup() {
+ MockitoAnnotations.openMocks(this)
+ }
+
+ @Test
+ fun `build dialog`() {
+ val fragment = spy(
+ TextPromptDialogFragment.newInstance("sessionId", "uid", true, "title", "label", "defaultValue", true),
+ )
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+
+ dialog.show()
+
+ val titleTextView = dialog.findViewById<TextView>(appcompatR.id.alertTitle)
+ val inputLabel = dialog.findViewById<TextView>(id.input_label)
+ val inputValue = dialog.findViewById<TextView>(id.input_value)
+ val checkBox = dialog.findViewById<CheckBox>(id.mozac_feature_prompts_no_more_dialogs_check_box)
+
+ assertEquals(fragment.sessionId, "sessionId")
+ assertEquals(fragment.promptRequestUID, "uid")
+ assertEquals(fragment.title, "title")
+ assertEquals(fragment.labelInput, "label")
+ assertEquals(fragment.defaultInputValue, "defaultValue")
+ assertEquals(fragment.hasShownManyDialogs, true)
+
+ assertEquals(titleTextView.text, "title")
+ assertEquals(fragment.title, "title")
+ assertEquals(inputLabel.text, "label")
+ assertEquals(inputValue.text.toString(), "defaultValue")
+ assertTrue(checkBox.isVisible)
+
+ checkBox.isChecked = true
+ assertTrue(fragment.userSelectionNoMoreDialogs)
+
+ inputValue.text = "NewValue"
+ assertEquals(inputValue.text.toString(), "NewValue")
+ }
+
+ @Test
+ fun `TextPrompt with hasShownManyDialogs equals false should not have a checkbox`() {
+ val fragment = spy(
+ TextPromptDialogFragment.newInstance("sessionId", "uid", false, "title", "label", "defaultValue", false),
+ )
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+
+ dialog.show()
+
+ val checkBox = dialog.findViewById<CheckBox>(id.mozac_feature_prompts_no_more_dialogs_check_box)
+
+ assertFalse(checkBox.isVisible)
+ }
+
+ @Test
+ fun `Clicking on positive button notifies the feature`() {
+ val fragment = spy(
+ TextPromptDialogFragment.newInstance("sessionId", "uid", true, "title", "label", "defaultValue", false),
+ )
+
+ fragment.feature = mockFeature
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+
+ val positiveButton = (dialog as AlertDialog).getButton(BUTTON_POSITIVE)
+ positiveButton.performClick()
+ shadowOf(getMainLooper()).idle()
+
+ verify(mockFeature).onConfirm("sessionId", "uid", false to "defaultValue")
+ }
+
+ @Test
+ fun `After checking no more dialogs checkbox feature onNoMoreDialogsChecked must be called`() {
+ val fragment = spy(
+ TextPromptDialogFragment.newInstance("sessionId", "uid", false, "title", "label", "defaultValue", true),
+ )
+
+ fragment.feature = mockFeature
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+
+ val checkBox = dialog.findViewById<CheckBox>(id.mozac_feature_prompts_no_more_dialogs_check_box)
+
+ checkBox.isChecked = true
+
+ val positiveButton = (dialog as AlertDialog).getButton(BUTTON_POSITIVE)
+ positiveButton.performClick()
+ shadowOf(getMainLooper()).idle()
+
+ verify(mockFeature).onConfirm("sessionId", "uid", true to "defaultValue")
+ }
+
+ @Test
+ fun `touching outside of the dialog must notify the feature onCancel`() {
+ val fragment = spy(
+ TextPromptDialogFragment.newInstance("sessionId", "uid", true, "title", "label", "defaultValue", true),
+ )
+
+ fragment.feature = mockFeature
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ fragment.onCancel(mock())
+
+ verify(mockFeature).onCancel("sessionId", "uid")
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/TimePickerDialogFragmentTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/TimePickerDialogFragmentTest.kt
new file mode 100644
index 0000000000..722c836f80
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/TimePickerDialogFragmentTest.kt
@@ -0,0 +1,284 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.dialog
+
+import android.app.AlertDialog
+import android.app.DatePickerDialog
+import android.app.TimePickerDialog
+import android.content.DialogInterface.BUTTON_NEUTRAL
+import android.content.DialogInterface.BUTTON_POSITIVE
+import android.os.Looper.getMainLooper
+import android.widget.DatePicker
+import android.widget.NumberPicker
+import android.widget.TimePicker
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import mozilla.components.feature.prompts.R
+import mozilla.components.feature.prompts.dialog.TimePickerDialogFragment.Companion.SELECTION_TYPE_DATE_AND_TIME
+import mozilla.components.feature.prompts.dialog.TimePickerDialogFragment.Companion.SELECTION_TYPE_MONTH
+import mozilla.components.feature.prompts.dialog.TimePickerDialogFragment.Companion.SELECTION_TYPE_TIME
+import mozilla.components.feature.prompts.ext.month
+import mozilla.components.feature.prompts.ext.toCalendar
+import mozilla.components.feature.prompts.ext.year
+import mozilla.components.support.ktx.kotlin.toDate
+import mozilla.components.support.test.any
+import mozilla.components.support.test.eq
+import mozilla.components.support.test.ext.appCompatContext
+import mozilla.components.support.test.mock
+import mozilla.components.support.test.robolectric.testContext
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.doReturn
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.verify
+import org.mockito.MockitoAnnotations.openMocks
+import org.robolectric.Shadows.shadowOf
+import java.util.Calendar
+import java.util.Date
+
+@RunWith(AndroidJUnit4::class)
+class TimePickerDialogFragmentTest {
+
+ @Mock private lateinit var mockFeature: Prompter
+
+ @Before
+ fun setup() {
+ openMocks(this)
+ }
+
+ @Test
+ fun `build dialog`() {
+ val initialDate = "2019-11-29".toDate("yyyy-MM-dd")
+ val minDate = "2019-11-28".toDate("yyyy-MM-dd")
+ val maxDate = "2019-11-30".toDate("yyyy-MM-dd")
+ val fragment = spy(
+ TimePickerDialogFragment.newInstance("sessionId", "uid", true, initialDate, minDate, maxDate),
+ )
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+
+ val datePicker = (dialog as DatePickerDialog).datePicker
+ assertEquals("sessionId", fragment.sessionId)
+ assertEquals("uid", fragment.promptRequestUID)
+ assertEquals(2019, datePicker.year)
+ assertEquals(11, datePicker.month + 1)
+ assertEquals(29, datePicker.dayOfMonth)
+ assertEquals(minDate, Date(datePicker.minDate))
+ assertEquals(maxDate, Date(datePicker.maxDate))
+ }
+
+ @Test
+ fun `Clicking on positive, neutral and negative button notifies the feature`() {
+ val initialDate = "2019-11-29".toDate("yyyy-MM-dd")
+ val fragment = spy(
+ TimePickerDialogFragment.newInstance("sessionId", "uid", false, initialDate, null, null),
+ )
+ fragment.feature = mockFeature
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+
+ val positiveButton = (dialog as AlertDialog).getButton(BUTTON_POSITIVE)
+ positiveButton.performClick()
+ shadowOf(getMainLooper()).idle()
+
+ verify(mockFeature).onConfirm(eq("sessionId"), eq("uid"), any())
+
+ val neutralButton = dialog.getButton(BUTTON_NEUTRAL)
+ neutralButton.performClick()
+ shadowOf(getMainLooper()).idle()
+
+ verify(mockFeature).onClear("sessionId", "uid")
+ }
+
+ @Test
+ fun `touching outside of the dialog must notify the feature onCancel`() {
+ val fragment = spy(
+ TimePickerDialogFragment.newInstance("sessionId", "uid", true, Date(), null, null),
+ )
+ fragment.feature = mockFeature
+ doReturn(testContext).`when`(fragment).requireContext()
+ fragment.onCancel(mock())
+ verify(mockFeature).onCancel("sessionId", "uid")
+ }
+
+ @Test
+ fun `onTimeChanged must update the selectedDate`() {
+ val dialogPicker = TimePickerDialogFragment.newInstance("sessionId", "uid", false, Date(), null, null)
+
+ dialogPicker.onTimeChanged(mock(), 1, 12)
+
+ val calendar = dialogPicker.selectedDate.toCalendar()
+
+ assertEquals(calendar.hour, 1)
+ assertEquals(calendar.minutes, 12)
+ }
+
+ @Test
+ fun `building a date and time picker`() {
+ val initialDate = "2018-06-12T19:30".toDate("yyyy-MM-dd'T'HH:mm")
+ val minDate = "2018-06-07T00:00".toDate("yyyy-MM-dd'T'HH:mm")
+ val maxDate = "2018-06-14T00:00".toDate("yyyy-MM-dd'T'HH:mm")
+ val fragment = spy(
+ TimePickerDialogFragment.newInstance(
+ "sessionId",
+ "uid",
+ true,
+ initialDate,
+ minDate,
+ maxDate,
+ SELECTION_TYPE_DATE_AND_TIME,
+ ),
+ )
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+
+ val datePicker = dialog.findViewById<DatePicker>(R.id.date_picker)
+
+ assertEquals(2018, datePicker.year)
+ assertEquals(6, datePicker.month + 1)
+ assertEquals(12, datePicker.dayOfMonth)
+
+ assertEquals(minDate, Date(datePicker.minDate))
+ assertEquals(maxDate, Date(datePicker.maxDate))
+
+ val timePicker = dialog.findViewById<TimePicker>(R.id.datetime_picker)
+
+ assertEquals(19, timePicker.hour)
+ assertEquals(30, timePicker.minute)
+ }
+
+ @Test
+ fun `building a month picker`() {
+ val initialDate = "2018-06".toDate("yyyy-MM")
+ val minDate = "2018-04".toDate("yyyy-MM")
+ val maxDate = "2018-09".toDate("yyyy-MM")
+
+ val initialDateCal = initialDate.toCalendar()
+ val minCal = minDate.toCalendar()
+ val maxCal = maxDate.toCalendar()
+
+ val fragment = spy(
+ TimePickerDialogFragment.newInstance(
+ "sessionId",
+ "uid",
+ false,
+ initialDate,
+ minDate,
+ maxDate,
+ SELECTION_TYPE_MONTH,
+ ),
+ )
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+
+ val monthPicker = dialog.findViewById<NumberPicker>(R.id.month_chooser)
+ val yearPicker = dialog.findViewById<NumberPicker>(R.id.year_chooser)
+
+ assertEquals(initialDateCal.year, yearPicker.value)
+ assertEquals(initialDateCal.month, monthPicker.value)
+
+ assertEquals(minCal.year, yearPicker.minValue)
+ assertEquals(minCal.month, monthPicker.minValue)
+
+ assertEquals(maxCal.year, yearPicker.maxValue)
+ assertEquals(maxCal.month, monthPicker.maxValue)
+
+ fragment.onDateSet(mock(), 8, 2019)
+ val selectedDate = fragment.selectedDate.toCalendar()
+
+ assertEquals(2019, selectedDate.year)
+ assertEquals(7, selectedDate.month)
+ }
+
+ @Test
+ fun `building a time picker`() {
+ val initialDate = "2018-06-12T19:30".toDate("yyyy-MM-dd'T'HH:mm")
+ val minDate = "2018-06-07T00:00".toDate("yyyy-MM-dd'T'HH:mm")
+ val maxDate = "2018-06-14T00:00".toDate("yyyy-MM-dd'T'HH:mm")
+ val fragment = spy(
+ TimePickerDialogFragment.newInstance(
+ "sessionId",
+ "uid",
+ true,
+ initialDate,
+ minDate,
+ maxDate,
+ SELECTION_TYPE_TIME,
+ ),
+ )
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+ assertTrue(dialog is TimePickerDialog)
+ }
+
+ @Test(expected = IllegalArgumentException::class)
+ fun `creating a TimePickerDialogFragment with an invalid type selection will throw an exception`() {
+ val initialDate = "2018-06-12T19:30".toDate("yyyy-MM-dd'T'HH:mm")
+ val minDate = "2018-06-07T00:00".toDate("yyyy-MM-dd'T'HH:mm")
+ val maxDate = "2018-06-14T00:00".toDate("yyyy-MM-dd'T'HH:mm")
+ val fragment = spy(
+ TimePickerDialogFragment.newInstance(
+ "sessionId",
+ "uid",
+ false,
+ initialDate,
+ minDate,
+ maxDate,
+ -223,
+ ),
+ )
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+ }
+
+ @Test(expected = IllegalArgumentException::class)
+ fun `creating a TimePickerDialogFragment with empty title and an invalid type selection will throw an exception `() {
+ val initialDate = "2018-06-12T19:30".toDate("yyyy-MM-dd'T'HH:mm")
+ val minDate = "2018-06-07T00:00".toDate("yyyy-MM-dd'T'HH:mm")
+ val maxDate = "2018-06-14T00:00".toDate("yyyy-MM-dd'T'HH:mm")
+ val fragment = spy(
+ TimePickerDialogFragment.newInstance(
+ "sessionId",
+ "uid",
+ true,
+ initialDate,
+ minDate,
+ maxDate,
+ -223,
+ ),
+ )
+
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null)
+ dialog.show()
+ }
+
+ private val Calendar.minutes: Int
+ get() = get(Calendar.MINUTE)
+ private val Calendar.hour: Int
+ get() = get(Calendar.HOUR_OF_DAY)
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/ext/EditTextTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/ext/EditTextTest.kt
new file mode 100644
index 0000000000..5e82b01242
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/ext/EditTextTest.kt
@@ -0,0 +1,44 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.ext
+
+import android.view.inputmethod.EditorInfo
+import android.widget.EditText
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import mozilla.components.support.test.robolectric.testContext
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mockito.never
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.verify
+
+@RunWith(AndroidJUnit4::class)
+class EditTextTest {
+ private val onDonePressed: () -> Unit = spy {}
+
+ @Test
+ fun `GIVEN a callback, WHEN action done is performed - IME_ACTION_DONE -, THEN onDonePress should be called`() {
+ val view = EditText(testContext)
+ val editorInfo = EditorInfo()
+ val inputConnection = view.onCreateInputConnection(editorInfo)
+
+ view.onDone(false, onDonePressed)
+ inputConnection.performEditorAction(EditorInfo.IME_ACTION_DONE)
+
+ verify(onDonePressed).invoke()
+ }
+
+ @Test
+ fun `GIVEN a callback, WHEN a different action is performed - IME_ACTION_SEARCH -, THEN onDonePress shouldn't be called `() {
+ val view = EditText(testContext)
+ val editorInfo = EditorInfo()
+ val inputConnection = view.onCreateInputConnection(editorInfo)
+
+ view.onDone(false, onDonePressed)
+ inputConnection.performEditorAction(EditorInfo.IME_ACTION_SEARCH)
+
+ verify(onDonePressed, never()).invoke()
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/ext/PromptRequestTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/ext/PromptRequestTest.kt
new file mode 100644
index 0000000000..07e3d50b24
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/ext/PromptRequestTest.kt
@@ -0,0 +1,55 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.ext
+
+import mozilla.components.concept.engine.prompt.PromptRequest
+import mozilla.components.concept.engine.prompt.PromptRequest.Alert
+import mozilla.components.concept.engine.prompt.PromptRequest.Confirm
+import mozilla.components.concept.engine.prompt.PromptRequest.Popup
+import mozilla.components.concept.engine.prompt.PromptRequest.SingleChoice
+import mozilla.components.concept.engine.prompt.PromptRequest.TextPrompt
+import mozilla.components.support.test.mock
+import org.junit.Assert.assertEquals
+import org.junit.Test
+import kotlin.reflect.KClass
+
+class PromptRequestTest {
+ @Test
+ fun `GIVEN only a subset of prompts should be shown in fullscreen WHEN checking which are not THEN return the expected result`() {
+ val expected = listOf<KClass<out PromptRequest>>(
+ Alert::class,
+ TextPrompt::class,
+ Confirm::class,
+ Popup::class,
+ )
+
+ assertEquals(expected, PROMPTS_TO_EXIT_FULLSCREEN_FOR)
+ }
+
+ @Test
+ fun `GIVEN a prompt which should not be shown in fullscreen WHEN trying to execute code such prompts THEN execute the code`() {
+ var invocations = 0
+ val alert: Alert = mock()
+ val text: TextPrompt = mock()
+ val confirm: Confirm = mock()
+ val popup: Popup = mock()
+ val windowedPrompts = listOf(alert, text, confirm, popup)
+
+ windowedPrompts.forEachIndexed { index, prompt ->
+ prompt.executeIfWindowedPrompt { invocations++ }
+ assertEquals(index + 1, invocations)
+ }
+ }
+
+ @Test
+ fun `GIVEN a prompt which should be shown in fullscreen WHEN trying to execute code for windowed prompts THEN don't do anything`() {
+ var invocations = 0
+ val choice: SingleChoice = mock()
+
+ choice.executeIfWindowedPrompt { invocations++ }
+
+ assertEquals(0, invocations)
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/facts/AddressAutofillDialogFactsTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/facts/AddressAutofillDialogFactsTest.kt
new file mode 100644
index 0000000000..3d990f063b
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/facts/AddressAutofillDialogFactsTest.kt
@@ -0,0 +1,94 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.facts
+
+import mozilla.components.support.base.Component
+import mozilla.components.support.base.facts.Action
+import mozilla.components.support.base.facts.processor.CollectionProcessor
+import org.junit.Assert.assertEquals
+import org.junit.Test
+
+class AddressAutofillDialogFactsTest {
+
+ @Test
+ fun `Emits facts for address autofill form detected events`() {
+ CollectionProcessor.withFactCollection { facts ->
+
+ emitSuccessfulAddressAutofillFormDetectedFact()
+
+ assertEquals(1, facts.size)
+
+ facts[0].apply {
+ assertEquals(Component.FEATURE_PROMPTS, component)
+ assertEquals(Action.INTERACTION, action)
+ assertEquals(AddressAutofillDialogFacts.Items.AUTOFILL_ADDRESS_FORM_DETECTED, item)
+ }
+ }
+ }
+
+ @Test
+ fun `Emits facts for autofill success events`() {
+ CollectionProcessor.withFactCollection { facts ->
+
+ emitSuccessfulAddressAutofillSuccessFact()
+
+ assertEquals(1, facts.size)
+
+ facts[0].apply {
+ assertEquals(Component.FEATURE_PROMPTS, component)
+ assertEquals(Action.INTERACTION, action)
+ assertEquals(AddressAutofillDialogFacts.Items.AUTOFILL_ADDRESS_SUCCESS, item)
+ }
+ }
+ }
+
+ @Test
+ fun `Emits facts for autofill shown events`() {
+ CollectionProcessor.withFactCollection { facts ->
+
+ emitAddressAutofillShownFact()
+
+ assertEquals(1, facts.size)
+
+ facts[0].apply {
+ assertEquals(Component.FEATURE_PROMPTS, component)
+ assertEquals(Action.INTERACTION, action)
+ assertEquals(AddressAutofillDialogFacts.Items.AUTOFILL_ADDRESS_PROMPT_SHOWN, item)
+ }
+ }
+ }
+
+ @Test
+ fun `Emits facts for autofill expanded events`() {
+ CollectionProcessor.withFactCollection { facts ->
+
+ emitAddressAutofillExpandedFact()
+
+ assertEquals(1, facts.size)
+
+ facts[0].apply {
+ assertEquals(Component.FEATURE_PROMPTS, component)
+ assertEquals(Action.INTERACTION, action)
+ assertEquals(AddressAutofillDialogFacts.Items.AUTOFILL_ADDRESS_PROMPT_EXPANDED, item)
+ }
+ }
+ }
+
+ @Test
+ fun `Emits facts for autofill dismissed events`() {
+ CollectionProcessor.withFactCollection { facts ->
+
+ emitAddressAutofillDismissedFact()
+
+ assertEquals(1, facts.size)
+
+ facts[0].apply {
+ assertEquals(Component.FEATURE_PROMPTS, component)
+ assertEquals(Action.INTERACTION, action)
+ assertEquals(AddressAutofillDialogFacts.Items.AUTOFILL_ADDRESS_PROMPT_DISMISSED, item)
+ }
+ }
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/facts/CreditCardAutofillDialogFactsTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/facts/CreditCardAutofillDialogFactsTest.kt
new file mode 100644
index 0000000000..9de04521c3
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/facts/CreditCardAutofillDialogFactsTest.kt
@@ -0,0 +1,147 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.facts
+
+import mozilla.components.support.base.Component
+import mozilla.components.support.base.facts.Action
+import mozilla.components.support.base.facts.processor.CollectionProcessor
+import org.junit.Assert.assertEquals
+import org.junit.Test
+
+class CreditCardAutofillDialogFactsTest {
+
+ @Test
+ fun `Emits facts for autofill form detected events`() {
+ CollectionProcessor.withFactCollection { facts ->
+
+ emitSuccessfulCreditCardAutofillFormDetectedFact()
+
+ assertEquals(1, facts.size)
+
+ facts[0].apply {
+ assertEquals(Component.FEATURE_PROMPTS, component)
+ assertEquals(Action.INTERACTION, action)
+ assertEquals(CreditCardAutofillDialogFacts.Items.AUTOFILL_CREDIT_CARD_FORM_DETECTED, item)
+ }
+ }
+ }
+
+ @Test
+ fun `Emits facts for autofill success events`() {
+ CollectionProcessor.withFactCollection { facts ->
+
+ emitSuccessfulCreditCardAutofillSuccessFact()
+
+ assertEquals(1, facts.size)
+
+ facts[0].apply {
+ assertEquals(Component.FEATURE_PROMPTS, component)
+ assertEquals(Action.INTERACTION, action)
+ assertEquals(CreditCardAutofillDialogFacts.Items.AUTOFILL_CREDIT_CARD_SUCCESS, item)
+ }
+ }
+ }
+
+ @Test
+ fun `Emits facts for autofill shown events`() {
+ CollectionProcessor.withFactCollection { facts ->
+
+ emitCreditCardAutofillShownFact()
+
+ assertEquals(1, facts.size)
+
+ facts[0].apply {
+ assertEquals(Component.FEATURE_PROMPTS, component)
+ assertEquals(Action.INTERACTION, action)
+ assertEquals(CreditCardAutofillDialogFacts.Items.AUTOFILL_CREDIT_CARD_PROMPT_SHOWN, item)
+ }
+ }
+ }
+
+ @Test
+ fun `Emits facts for autofill expanded events`() {
+ CollectionProcessor.withFactCollection { facts ->
+
+ emitCreditCardAutofillExpandedFact()
+
+ assertEquals(1, facts.size)
+
+ facts[0].apply {
+ assertEquals(Component.FEATURE_PROMPTS, component)
+ assertEquals(Action.INTERACTION, action)
+ assertEquals(CreditCardAutofillDialogFacts.Items.AUTOFILL_CREDIT_CARD_PROMPT_EXPANDED, item)
+ }
+ }
+ }
+
+ @Test
+ fun `Emits facts for autofill dismissed events`() {
+ CollectionProcessor.withFactCollection { facts ->
+
+ emitCreditCardAutofillDismissedFact()
+
+ assertEquals(1, facts.size)
+
+ facts[0].apply {
+ assertEquals(Component.FEATURE_PROMPTS, component)
+ assertEquals(Action.INTERACTION, action)
+ assertEquals(CreditCardAutofillDialogFacts.Items.AUTOFILL_CREDIT_CARD_PROMPT_DISMISSED, item)
+ }
+ }
+ }
+
+ @Test
+ fun `Emits facts for autofill confirm and create events`() {
+ CollectionProcessor.withFactCollection { facts ->
+
+ emitCreditCardAutofillCreatedFact()
+
+ assertEquals(1, facts.size)
+
+ val fact = facts.single()
+ assertEquals(Component.FEATURE_PROMPTS, fact.component)
+ assertEquals(Action.CONFIRM, fact.action)
+ assertEquals(
+ CreditCardAutofillDialogFacts.Items.AUTOFILL_CREDIT_CARD_CREATED,
+ fact.item,
+ )
+ }
+ }
+
+ @Test
+ fun `Emits facts for autofill confirm and update events`() {
+ CollectionProcessor.withFactCollection { facts ->
+
+ emitCreditCardAutofillUpdatedFact()
+
+ assertEquals(1, facts.size)
+
+ val fact = facts.single()
+ assertEquals(Component.FEATURE_PROMPTS, fact.component)
+ assertEquals(Action.CONFIRM, fact.action)
+ assertEquals(
+ CreditCardAutofillDialogFacts.Items.AUTOFILL_CREDIT_CARD_UPDATED,
+ fact.item,
+ )
+ }
+ }
+
+ @Test
+ fun `Emits facts for autofill save prompt shown event`() {
+ CollectionProcessor.withFactCollection { facts ->
+ emitCreditCardSaveShownFact()
+
+ assertEquals(1, facts.size)
+
+ val fact = facts.single()
+ assertEquals(Component.FEATURE_PROMPTS, fact.component)
+ assertEquals(Action.DISPLAY, fact.action)
+ assertEquals(
+ CreditCardAutofillDialogFacts.Items.AUTOFILL_CREDIT_CARD_SAVE_PROMPT_SHOWN,
+ fact.item,
+ )
+ }
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/file/FilePickerTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/file/FilePickerTest.kt
new file mode 100644
index 0000000000..4f52501984
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/file/FilePickerTest.kt
@@ -0,0 +1,405 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.file
+
+import android.Manifest
+import android.app.Activity.RESULT_CANCELED
+import android.app.Activity.RESULT_OK
+import android.content.ClipData
+import android.content.Context
+import android.content.Intent
+import android.content.pm.PackageManager.PERMISSION_DENIED
+import android.content.pm.PackageManager.PERMISSION_GRANTED
+import android.net.Uri
+import androidx.core.net.toUri
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import mozilla.components.browser.state.action.ContentAction
+import mozilla.components.browser.state.state.BrowserState
+import mozilla.components.browser.state.state.ContentState
+import mozilla.components.browser.state.state.CustomTabSessionState
+import mozilla.components.browser.state.state.TabSessionState
+import mozilla.components.browser.state.store.BrowserStore
+import mozilla.components.concept.engine.prompt.PromptRequest
+import mozilla.components.feature.prompts.PromptContainer
+import mozilla.components.feature.prompts.file.FilePicker.Companion.FILE_PICKER_ACTIVITY_REQUEST_CODE
+import mozilla.components.support.test.any
+import mozilla.components.support.test.eq
+import mozilla.components.support.test.mock
+import mozilla.components.support.test.robolectric.grantPermission
+import mozilla.components.support.test.robolectric.testContext
+import mozilla.components.support.test.whenever
+import org.junit.Assert.assertArrayEquals
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNull
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mockito.anyInt
+import org.mockito.Mockito.doReturn
+import org.mockito.Mockito.never
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.verifyNoInteractions
+import java.io.File
+
+@RunWith(AndroidJUnit4::class)
+class FilePickerTest {
+
+ private val noopSingle: (Context, Uri) -> Unit = { _, _ -> }
+ private val noopMulti: (Context, Array<Uri>) -> Unit = { _, _ -> }
+ private val request = PromptRequest.File(
+ mimeTypes = emptyArray(),
+ onSingleFileSelected = noopSingle,
+ onMultipleFilesSelected = noopMulti,
+ onDismiss = {},
+ )
+
+ private lateinit var fragment: PromptContainer
+ private lateinit var store: BrowserStore
+ private lateinit var state: BrowserState
+ private lateinit var filePicker: FilePicker
+ private lateinit var fileUploadsDirCleaner: FileUploadsDirCleaner
+
+ @Before
+ fun setup() {
+ fileUploadsDirCleaner = mock()
+ fragment = spy(PromptContainer.TestPromptContainer(testContext))
+ state = mock()
+ store = mock()
+ whenever(store.state).thenReturn(state)
+ filePicker = FilePicker(
+ fragment,
+ store,
+ fileUploadsDirCleaner = fileUploadsDirCleaner,
+ ) { }
+ }
+
+ @Test
+ fun `FilePicker acts on a given (custom tab) session or the selected session`() {
+ val customTabContent: ContentState = mock()
+ whenever(customTabContent.promptRequests).thenReturn(listOf(request))
+ val customTab = CustomTabSessionState(id = "custom-tab", content = customTabContent, trackingProtection = mock(), config = mock())
+
+ whenever(state.customTabs).thenReturn(listOf(customTab))
+ filePicker = FilePicker(
+ fragment,
+ store,
+ customTab.id,
+ fileUploadsDirCleaner = mock(),
+ ) { }
+ filePicker.onActivityResult(FILE_PICKER_ACTIVITY_REQUEST_CODE, 0, null)
+ verify(store).dispatch(ContentAction.ConsumePromptRequestAction(customTab.id, request))
+
+ val selected = prepareSelectedSession(request)
+ filePicker = FilePicker(
+ fragment,
+ store,
+ fileUploadsDirCleaner = mock(),
+ ) { }
+ filePicker.onActivityResult(FILE_PICKER_ACTIVITY_REQUEST_CODE, 0, null)
+ verify(store).dispatch(ContentAction.ConsumePromptRequestAction(selected.id, request))
+ }
+
+ @Test
+ fun `handleFilePickerRequest without the required permission will call askAndroidPermissionsForRequest`() {
+ var onRequestPermissionWasCalled = false
+ val context = ApplicationProvider.getApplicationContext<Context>()
+
+ filePicker = spy(
+ FilePicker(
+ fragment,
+ store,
+ fileUploadsDirCleaner = mock(),
+ ) {
+ onRequestPermissionWasCalled = true
+ },
+ )
+
+ doReturn(context).`when`(fragment).context
+
+ filePicker.handleFileRequest(request)
+
+ assertTrue(onRequestPermissionWasCalled)
+ verify(filePicker).askAndroidPermissionsForRequest(any(), eq(request))
+ verify(fragment, never()).startActivityForResult(Intent(), 1)
+ }
+
+ @Test
+ fun `handleFilePickerRequest with the required permission will call startActivityForResult`() {
+ var onRequestPermissionWasCalled = false
+
+ filePicker = FilePicker(
+ fragment,
+ store,
+ fileUploadsDirCleaner = mock(),
+ ) {
+ onRequestPermissionWasCalled = true
+ }
+
+ grantPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
+
+ filePicker.handleFileRequest(request)
+
+ assertFalse(onRequestPermissionWasCalled)
+ verify(fragment).startActivityForResult(any(), anyInt())
+ }
+
+ @Test
+ fun `onPermissionsGranted will forward call to filePickerRequest`() {
+ stubContext()
+ filePicker = spy(filePicker)
+ filePicker.currentRequest = request
+
+ filePicker.onPermissionsGranted()
+
+ // The original prompt that started the request permission flow is persisted in the store
+ // That should not be accesses / modified in any way.
+ verifyNoInteractions(store)
+ // After the permission is granted we should retry picking a file based on the original request.
+ verify(filePicker).handleFileRequest(eq(request), eq(false))
+ }
+
+ @Test
+ fun `onPermissionsDeny will call onDismiss and consume the file PromptRequest of the actual session`() {
+ var onDismissWasCalled = false
+ val filePickerRequest = request.copy {
+ onDismissWasCalled = true
+ }
+
+ val selected = prepareSelectedSession(filePickerRequest)
+
+ stubContext()
+
+ filePicker.onPermissionsDenied()
+
+ assertTrue(onDismissWasCalled)
+ verify(store).dispatch(ContentAction.ConsumePromptRequestAction(selected.id, filePickerRequest))
+ }
+
+ @Test
+ fun `onActivityResult with RESULT_OK and isMultipleFilesSelection false will consume PromptRequest of the actual session`() {
+ var onSingleFileSelectionWasCalled = false
+
+ val onSingleFileSelection: (Context, Uri) -> Unit = { _, _ ->
+ onSingleFileSelectionWasCalled = true
+ }
+
+ val filePickerRequest = request.copy(onSingleFileSelected = onSingleFileSelection)
+
+ val selected = prepareSelectedSession(filePickerRequest)
+ val intent = Intent()
+
+ intent.data = mock()
+
+ stubContext()
+
+ filePicker.onActivityResult(FILE_PICKER_ACTIVITY_REQUEST_CODE, RESULT_OK, intent)
+
+ assertTrue(onSingleFileSelectionWasCalled)
+ verify(store).dispatch(ContentAction.ConsumePromptRequestAction(selected.id, filePickerRequest))
+ }
+
+ @Test
+ fun `onActivityResult with RESULT_OK and isMultipleFilesSelection true will consume PromptRequest of the actual session`() {
+ var onMultipleFileSelectionWasCalled = false
+
+ val onMultipleFileSelection: (Context, Array<Uri>) -> Unit = { _, _ ->
+ onMultipleFileSelectionWasCalled = true
+ }
+
+ val filePickerRequest = request.copy(
+ isMultipleFilesSelection = true,
+ onMultipleFilesSelected = onMultipleFileSelection,
+ )
+
+ val selected = prepareSelectedSession(filePickerRequest)
+ val intent = Intent()
+
+ intent.clipData = mock()
+ val item = mock<ClipData.Item>()
+
+ doReturn(mock<Uri>()).`when`(item).uri
+
+ intent.clipData?.apply {
+ doReturn(1).`when`(this).itemCount
+ doReturn(item).`when`(this).getItemAt(0)
+ }
+
+ stubContext()
+
+ filePicker.onActivityResult(FILE_PICKER_ACTIVITY_REQUEST_CODE, RESULT_OK, intent)
+
+ assertTrue(onMultipleFileSelectionWasCalled)
+ verify(store).dispatch(ContentAction.ConsumePromptRequestAction(selected.id, filePickerRequest))
+ }
+
+ @Test
+ fun `onActivityResult with not RESULT_OK will consume PromptRequest of the actual session and call onDismiss `() {
+ var onDismissWasCalled = false
+
+ val filePickerRequest = request.copy(isMultipleFilesSelection = true) {
+ onDismissWasCalled = true
+ }
+
+ val selected = prepareSelectedSession(filePickerRequest)
+ val intent = Intent()
+
+ filePicker.onActivityResult(FILE_PICKER_ACTIVITY_REQUEST_CODE, RESULT_CANCELED, intent)
+
+ assertTrue(onDismissWasCalled)
+ verify(store).dispatch(ContentAction.ConsumePromptRequestAction(selected.id, filePickerRequest))
+ }
+
+ @Test
+ fun `onActivityResult will not process any PromptRequest that is not a File request`() {
+ var wasConfirmed = false
+ var wasDismissed = false
+ val onConfirm: (Boolean) -> Unit = { wasConfirmed = true }
+ val onDismiss = { wasDismissed = true }
+ val invalidRequest = PromptRequest.Alert("", "", false, onConfirm, onDismiss)
+ val spiedFilePicker = spy(filePicker)
+ val selected = prepareSelectedSession(invalidRequest)
+ val intent = Intent()
+
+ spiedFilePicker.onActivityResult(FILE_PICKER_ACTIVITY_REQUEST_CODE, RESULT_OK, intent)
+
+ assertFalse(wasConfirmed)
+ assertFalse(wasDismissed)
+ verify(store, never()).dispatch(ContentAction.ConsumePromptRequestAction(selected.id, request))
+ verify(spiedFilePicker, never()).handleFilePickerIntentResult(intent, request)
+ }
+
+ @Test
+ fun `onActivityResult returns false if the request code is not the same`() {
+ val intent = Intent()
+ val result = filePicker.onActivityResult(10101, RESULT_OK, intent)
+
+ assertFalse(result)
+ }
+
+ @Test
+ fun `onRequestPermissionsResult with FILE_PICKER_REQUEST and PERMISSION_GRANTED will call onPermissionsGranted`() {
+ stubContext()
+ filePicker = spy(filePicker)
+ filePicker.currentRequest = request
+
+ filePicker.onPermissionsResult(emptyArray(), IntArray(1) { PERMISSION_GRANTED })
+
+ verify(filePicker).onPermissionsGranted()
+ }
+
+ @Test
+ fun `onRequestPermissionsResult with FILE_PICKER_REQUEST and PERMISSION_DENIED will call onPermissionsDeny`() {
+ filePicker = spy(filePicker)
+ filePicker.onPermissionsResult(emptyArray(), IntArray(1) { PERMISSION_DENIED })
+
+ verify(filePicker).onPermissionsDenied()
+ }
+
+ @Test
+ fun `askAndroidPermissionsForRequest should cache the current request and then ask for permissions`() {
+ val permissions = setOf("PermissionA")
+ var permissionsRequested = emptyArray<String>()
+ filePicker = spy(
+ FilePicker(fragment, store, null, fileUploadsDirCleaner = mock()) { requested ->
+ permissionsRequested = requested
+ },
+ )
+
+ filePicker.askAndroidPermissionsForRequest(permissions, request)
+
+ assertEquals(request, filePicker.currentRequest)
+ assertArrayEquals(permissions.toTypedArray(), permissionsRequested)
+ }
+
+ @Test
+ fun `handleFilePickerIntentResult called with null Intent will make captureUri null`() {
+ stubContext()
+ captureUri = "randomSaveLocationOnDisk".toUri()
+ val onSingleFileSelection: (Context, Uri) -> Unit = { _, _ -> Unit }
+ val promptRequest = mock<PromptRequest.File>()
+ doReturn(onSingleFileSelection).`when`(promptRequest).onSingleFileSelected
+
+ filePicker.handleFilePickerIntentResult(null, promptRequest)
+
+ assertNull(captureUri)
+ }
+
+ @Test
+ fun `handleFilePickerIntentResult called with valid Intent will make captureUri null also if request is dismissed`() {
+ stubContext()
+ captureUri = "randomSaveLocationOnDisk".toUri()
+ val promptRequest = mock<PromptRequest.File>()
+ doReturn({ }).`when`(promptRequest).onDismiss
+ // A private file cannot be picked so the request will be dismissed.
+ val intent = Intent().apply {
+ data = ("file://" + File(testContext.applicationInfo.dataDir, "randomFile").canonicalPath).toUri()
+ }
+
+ filePicker.handleFilePickerIntentResult(intent, promptRequest)
+
+ assertNull(captureUri)
+ }
+
+ @Test
+ fun `handleFilePickerIntentResult for multiple files selection will make captureUri null`() {
+ stubContext()
+ captureUri = "randomSaveLocationOnDisk".toUri()
+ val onMultipleFilesSelected: (Context, Array<Uri>) -> Unit = { _, _ -> Unit }
+ val promptRequest = mock<PromptRequest.File>()
+ doReturn(onMultipleFilesSelected).`when`(promptRequest).onMultipleFilesSelected
+ doReturn(true).`when`(promptRequest).isMultipleFilesSelection
+ val intent = Intent().apply {
+ clipData = (ClipData.newRawUri("Test", "https://www.mozilla.org".toUri()))
+ }
+
+ filePicker.handleFilePickerIntentResult(intent, promptRequest)
+
+ verify(fileUploadsDirCleaner).enqueueForCleanup(any())
+ assertNull(captureUri)
+ }
+
+ @Test
+ fun `handleFilePickerIntentResult for multiple files selection will make captureUri null also if request is dismissed`() {
+ stubContext()
+ captureUri = "randomSaveLocationOnDisk".toUri()
+ val promptRequest = mock<PromptRequest.File>()
+ doReturn({ }).`when`(promptRequest).onDismiss
+ doReturn(true).`when`(promptRequest).isMultipleFilesSelection
+ // A private file cannot be picked so the request will be dismissed.
+ val intent = Intent().apply {
+ clipData = (
+ ClipData.newRawUri(
+ "Test",
+ ("file://" + File(testContext.applicationInfo.dataDir, "randomFile").canonicalPath).toUri(),
+ )
+ )
+ }
+
+ filePicker.handleFilePickerIntentResult(intent, promptRequest)
+
+ assertNull(captureUri)
+ }
+
+ private fun prepareSelectedSession(request: PromptRequest? = null): TabSessionState {
+ val promptRequest: PromptRequest = request ?: mock()
+ val content: ContentState = mock()
+ whenever(content.promptRequests).thenReturn(listOf(promptRequest))
+
+ val selected = TabSessionState("browser-tab", content, mock(), mock())
+ whenever(state.selectedTabId).thenReturn(selected.id)
+ whenever(state.tabs).thenReturn(listOf(selected))
+ return selected
+ }
+
+ private fun stubContext() {
+ val context = ApplicationProvider.getApplicationContext<Context>()
+ doReturn(context).`when`(fragment).context
+ filePicker = FilePicker(fragment, store, fileUploadsDirCleaner = fileUploadsDirCleaner) {}
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/file/FileUploadsDirCleanerMiddlewareTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/file/FileUploadsDirCleanerMiddlewareTest.kt
new file mode 100644
index 0000000000..85fa560102
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/file/FileUploadsDirCleanerMiddlewareTest.kt
@@ -0,0 +1,59 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.file
+
+import mozilla.components.browser.state.action.ContentAction
+import mozilla.components.browser.state.action.TabListAction
+import mozilla.components.browser.state.state.BrowserState
+import mozilla.components.browser.state.state.createTab
+import mozilla.components.browser.state.store.BrowserStore
+import mozilla.components.support.test.ext.joinBlocking
+import mozilla.components.support.test.libstate.ext.waitUntilIdle
+import mozilla.components.support.test.mock
+import mozilla.components.support.test.rule.MainCoroutineRule
+import org.junit.Rule
+import org.junit.Test
+import org.mockito.Mockito.times
+import org.mockito.Mockito.verify
+
+class FileUploadsDirCleanerMiddlewareTest {
+ @get:Rule
+ val coroutinesTestRule = MainCoroutineRule()
+ private val dispatcher = coroutinesTestRule.testDispatcher
+
+ @Test
+ fun `WHEN an action that indicates the user has navigated to another webiste THEN clean up temporary uploads`() {
+ val fileUploadsDirCleaner = mock<FileUploadsDirCleaner>()
+ val tab = createTab("https://www.mozilla.org", id = "test-tab")
+ val store = BrowserStore(
+ middleware = listOf(
+ FileUploadsDirCleanerMiddleware(
+ fileUploadsDirCleaner = fileUploadsDirCleaner,
+ ),
+ ),
+ initialState = BrowserState(
+ tabs = listOf(tab),
+ ),
+ )
+
+ store.dispatch(TabListAction.SelectTabAction("test-tab")).joinBlocking()
+ dispatcher.scheduler.advanceUntilIdle()
+ store.waitUntilIdle()
+
+ verify(fileUploadsDirCleaner).cleanRecentUploads()
+
+ store.dispatch(ContentAction.UpdateLoadRequestAction("test-tab", mock())).joinBlocking()
+ dispatcher.scheduler.advanceUntilIdle()
+ store.waitUntilIdle()
+
+ verify(fileUploadsDirCleaner, times(2)).cleanRecentUploads()
+
+ store.dispatch(ContentAction.UpdateUrlAction("test-tab", "url")).joinBlocking()
+ dispatcher.scheduler.advanceUntilIdle()
+ store.waitUntilIdle()
+
+ verify(fileUploadsDirCleaner, times(3)).cleanRecentUploads()
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/file/FileUploadsDirCleanerTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/file/FileUploadsDirCleanerTest.kt
new file mode 100644
index 0000000000..6f67c2ce9c
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/file/FileUploadsDirCleanerTest.kt
@@ -0,0 +1,87 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.file
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.MainScope
+import mozilla.components.concept.engine.prompt.PromptRequest.File.Companion.DEFAULT_UPLOADS_DIR_NAME
+import mozilla.components.support.test.robolectric.testContext
+import mozilla.components.support.test.rule.MainCoroutineRule
+import mozilla.components.support.test.rule.runTestOnMain
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import java.io.File
+
+@RunWith(AndroidJUnit4::class)
+class FileUploadsDirCleanerTest {
+ private lateinit var fileCleaner: FileUploadsDirCleaner
+
+ @get:Rule
+ val coroutinesTestRule = MainCoroutineRule()
+
+ @Before
+ fun setup() {
+ fileCleaner = FileUploadsDirCleaner(
+ scope = MainScope(),
+ ) {
+ testContext.cacheDir
+ }
+ fileCleaner.fileNamesToBeDeleted = emptyList()
+ fileCleaner.dispatcher = Dispatchers.Main
+ }
+
+ @Test
+ fun `WHEN calling enqueueForCleanup THEN fileName should be added to fileNamesToBeDeleted list`() {
+ val expectedFileName = "my_file.txt"
+ fileCleaner.enqueueForCleanup(expectedFileName)
+ assertEquals(expectedFileName, fileCleaner.fileNamesToBeDeleted.first())
+ }
+
+ @Test
+ fun `WHEN calling cleanRecentUploads THEN all the enqueued files should be deleted and not enqueued files must be kept`() =
+ runTestOnMain {
+ val cachedDir = File(testContext.cacheDir, DEFAULT_UPLOADS_DIR_NAME)
+ assertTrue(cachedDir.mkdir())
+
+ val fileToBeDeleted = File(cachedDir, "my_file.txt")
+ val fileToBeKept = File(cachedDir, "file_to_be_kept.txt")
+
+ assertTrue(fileToBeDeleted.createNewFile())
+ assertTrue(fileToBeKept.createNewFile())
+ assertTrue(fileToBeDeleted.exists())
+ assertTrue(fileToBeKept.exists())
+
+ fileCleaner.enqueueForCleanup(fileToBeDeleted.name)
+
+ fileCleaner.cleanRecentUploads()
+
+ assertTrue(fileCleaner.fileNamesToBeDeleted.isEmpty())
+ assertFalse(fileToBeDeleted.exists())
+ assertTrue(fileToBeKept.exists())
+ }
+
+ @Test
+ fun `WHEN calling cleanUploadsDirectory THEN the uploads directory should emptied`() =
+ runTestOnMain {
+ val cachedDir = File(testContext.cacheDir, DEFAULT_UPLOADS_DIR_NAME)
+ assertTrue(cachedDir.mkdir())
+
+ val fileToBeDeleted = File(cachedDir, "my_file.txt")
+
+ assertTrue(fileToBeDeleted.createNewFile())
+ assertTrue(fileToBeDeleted.exists())
+
+ fileCleaner.cleanUploadsDirectory()
+
+ assertFalse(fileToBeDeleted.exists())
+ assertFalse(cachedDir.exists())
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/file/MimeTypeTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/file/MimeTypeTest.kt
new file mode 100644
index 0000000000..483c108889
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/file/MimeTypeTest.kt
@@ -0,0 +1,392 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.file
+
+import android.content.Context
+import android.content.Intent.ACTION_GET_CONTENT
+import android.content.Intent.CATEGORY_OPENABLE
+import android.content.Intent.EXTRA_ALLOW_MULTIPLE
+import android.content.Intent.EXTRA_MIME_TYPES
+import android.content.pm.ActivityInfo
+import android.content.pm.ApplicationInfo
+import android.content.pm.PackageManager
+import android.content.pm.PackageManager.MATCH_DEFAULT_ONLY
+import android.content.pm.ProviderInfo
+import android.content.pm.ResolveInfo
+import android.net.Uri
+import android.provider.MediaStore.ACTION_IMAGE_CAPTURE
+import android.provider.MediaStore.ACTION_VIDEO_CAPTURE
+import android.provider.MediaStore.Audio.Media.RECORD_SOUND_ACTION
+import android.provider.MediaStore.EXTRA_OUTPUT
+import android.webkit.MimeTypeMap
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import mozilla.components.concept.engine.prompt.PromptRequest
+import mozilla.components.support.test.robolectric.testContext
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNull
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers.anyInt
+import org.mockito.ArgumentMatchers.eq
+import org.mockito.ArgumentMatchers.notNull
+import org.mockito.Mockito.mock
+import org.mockito.Mockito.`when`
+import org.robolectric.Shadows.shadowOf
+
+@RunWith(AndroidJUnit4::class)
+class MimeTypeTest {
+
+ private val request = PromptRequest.File(
+ mimeTypes = emptyArray(),
+ onSingleFileSelected = { _, _ -> },
+ onMultipleFilesSelected = { _, _ -> },
+ onDismiss = {},
+ )
+ private val capture = PromptRequest.File.FacingMode.ANY
+
+ private lateinit var context: Context
+ private lateinit var packageManager: PackageManager
+
+ @Before
+ fun setup() {
+ context = mock(Context::class.java)
+ packageManager = mock(PackageManager::class.java)
+
+ `when`(context.packageManager).thenReturn(packageManager)
+ `when`(context.packageName).thenReturn("org.mozilla.browser")
+ @Suppress("DEPRECATION")
+ `when`(packageManager.resolveActivity(notNull(), eq(MATCH_DEFAULT_ONLY))).thenReturn(null)
+ }
+
+ @Test
+ fun `matches empty list of mime types`() {
+ assertTypes(setOf(MimeType.Wildcard)) {
+ it.matches(emptyArray())
+ }
+ }
+
+ @Test
+ fun `matches varied list of mime types`() {
+ assertTypes(setOf(MimeType.Image(), MimeType.Audio, MimeType.Wildcard)) {
+ it.matches(arrayOf("image/*", "audio/*"))
+ }
+ assertTypes(setOf(MimeType.Audio, MimeType.Video, MimeType.Wildcard)) {
+ it.matches(arrayOf("video/mp4", "audio/*"))
+ }
+ }
+
+ @Test
+ fun `matches image types`() {
+ assertTypes(setOf(MimeType.Image(), MimeType.Wildcard)) {
+ it.matches(arrayOf("image/*"))
+ }
+ assertTypes(setOf(MimeType.Image(), MimeType.Wildcard)) {
+ it.matches(arrayOf("image/jpg"))
+ }
+ assertTypes(setOf(MimeType.Wildcard)) {
+ it.matches(arrayOf(".webp"))
+ }
+ assertTypes(setOf(MimeType.Image(), MimeType.Wildcard)) {
+ it.matches(arrayOf(".jpg", "image/*", ".gif"))
+ }
+ }
+
+ @Test
+ fun `matches video types`() {
+ assertTypes(setOf(MimeType.Video, MimeType.Wildcard)) {
+ it.matches(arrayOf("video/*"))
+ }
+ assertTypes(setOf(MimeType.Video, MimeType.Wildcard)) {
+ it.matches(arrayOf("video/avi"))
+ }
+ assertTypes(setOf(MimeType.Wildcard)) {
+ it.matches(arrayOf(".webm"))
+ }
+ assertTypes(setOf(MimeType.Video, MimeType.Wildcard)) {
+ it.matches(arrayOf("video/*", ".mov", ".mp4"))
+ }
+ }
+
+ @Test
+ fun `matches audio types`() {
+ assertTypes(setOf(MimeType.Audio, MimeType.Wildcard)) {
+ it.matches(arrayOf("audio/*"))
+ }
+ assertTypes(setOf(MimeType.Audio, MimeType.Wildcard)) {
+ it.matches(arrayOf("audio/wav"))
+ }
+ assertTypes(setOf(MimeType.Wildcard)) {
+ it.matches(arrayOf(".mp3"))
+ }
+ assertTypes(setOf(MimeType.Audio, MimeType.Wildcard)) {
+ it.matches(arrayOf(".ogg", "audio/wav", "audio/*"))
+ }
+ }
+
+ @Test
+ fun `matches document types`() {
+ assertTypes(setOf(MimeType.Wildcard)) {
+ it.matches(arrayOf("application/json"))
+ }
+ assertTypes(setOf(MimeType.Wildcard)) {
+ it.matches(arrayOf(".doc"))
+ }
+ assertTypes(setOf(MimeType.Wildcard)) {
+ it.matches(arrayOf(".txt", "text/html"))
+ }
+ }
+
+ @Test
+ fun `shouldCapture empty list of mime types`() {
+ assertTypes(setOf()) {
+ it.shouldCapture(emptyArray(), capture)
+ }
+ }
+
+ @Test
+ fun `shouldCapture varied list of mime types`() {
+ assertTypes(setOf()) {
+ it.shouldCapture(arrayOf("image/*", "video/*"), capture)
+ }
+ }
+
+ @Test
+ fun `shouldCapture image types`() {
+ assertTypes(setOf(MimeType.Image())) {
+ it.shouldCapture(arrayOf("image/*"), capture)
+ }
+ assertTypes(setOf(MimeType.Image())) {
+ it.shouldCapture(arrayOf("image/jpg"), capture)
+ }
+ assertTypes(setOf()) {
+ it.shouldCapture(arrayOf(".webp"), capture)
+ }
+ assertTypes(setOf()) {
+ it.shouldCapture(arrayOf(".jpg", "image/*", ".gif"), capture)
+ }
+ assertTypes(setOf(MimeType.Image())) {
+ it.shouldCapture(arrayOf("image/png", "image/jpg"), capture)
+ }
+ }
+
+ @Test
+ fun `shouldCapture video types`() {
+ assertTypes(setOf(MimeType.Video)) {
+ it.shouldCapture(arrayOf("video/*"), capture)
+ }
+ assertTypes(setOf(MimeType.Video)) {
+ it.shouldCapture(arrayOf("video/avi"), capture)
+ }
+ assertTypes(setOf()) {
+ it.shouldCapture(arrayOf(".webm"), capture)
+ }
+ assertTypes(setOf()) {
+ it.shouldCapture(arrayOf("video/*", ".mov", ".mp4"), capture)
+ }
+ assertTypes(setOf(MimeType.Video)) {
+ it.shouldCapture(arrayOf("video/webm", "video/*"), capture)
+ }
+ }
+
+ @Test
+ fun `shouldCapture audio types`() {
+ assertTypes(setOf(MimeType.Audio)) {
+ it.shouldCapture(arrayOf("audio/*"), capture)
+ }
+ assertTypes(setOf(MimeType.Audio)) {
+ it.shouldCapture(arrayOf("audio/wav"), capture)
+ }
+ assertTypes(setOf()) {
+ it.shouldCapture(arrayOf(".mp3"), capture)
+ }
+ assertTypes(setOf()) {
+ it.shouldCapture(arrayOf(".ogg", "audio/wav", "audio/*"), capture)
+ }
+ assertTypes(setOf(MimeType.Audio)) {
+ it.shouldCapture(arrayOf("audio/wav", "audio/ogg"), capture)
+ }
+ }
+
+ @Test
+ fun `shouldCapture document types`() {
+ assertTypes(setOf()) {
+ it.shouldCapture(arrayOf("application/json"), capture)
+ }
+ assertTypes(setOf()) {
+ it.shouldCapture(arrayOf(".doc"), capture)
+ }
+ assertTypes(setOf()) {
+ it.shouldCapture(arrayOf(".txt", "text/html"), capture)
+ }
+ assertTypes(setOf()) {
+ it.shouldCapture(arrayOf("text/plain", "text/html"), capture)
+ }
+ }
+
+ @Test
+ fun `Image buildIntent`() {
+ assertNull(MimeType.Image().buildIntent(context, request))
+
+ val uri = Uri.parse("context://abcd")
+ val image = MimeType.Image { _, _, _ -> uri }
+
+ @Suppress("DEPRECATION")
+ `when`(
+ packageManager
+ .resolveContentProvider(eq("org.mozilla.browser.fileprovider"), anyInt()),
+ )
+ .thenReturn(mock(ProviderInfo::class.java))
+ mockResolveActivity()
+
+ image.buildIntent(context, request)?.run {
+ assertEquals(action, ACTION_IMAGE_CAPTURE)
+ assertEquals(1, extras?.size())
+
+ @Suppress("DEPRECATION")
+ val photoUri = extras!!.get(EXTRA_OUTPUT) as Uri
+ assertEquals(uri, photoUri)
+ }
+
+ val anyCaptureRequest = request.copy(captureMode = PromptRequest.File.FacingMode.ANY)
+ image.buildIntent(context, anyCaptureRequest)?.run {
+ assertEquals(action, ACTION_IMAGE_CAPTURE)
+ assertEquals(1, extras?.size())
+ }
+
+ val frontCaptureRequest = request.copy(captureMode = PromptRequest.File.FacingMode.FRONT_CAMERA)
+ image.buildIntent(context, frontCaptureRequest)?.run {
+ assertEquals(action, ACTION_IMAGE_CAPTURE)
+ assertEquals(1, extras!!.getInt(MimeType.CAMERA_FACING))
+ assertEquals(1, extras!!.getInt(MimeType.LENS_FACING_FRONT))
+ assertEquals(true, extras!!.getBoolean(MimeType.USE_FRONT_CAMERA))
+ }
+
+ val backCaptureRequest = request.copy(captureMode = PromptRequest.File.FacingMode.BACK_CAMERA)
+ image.buildIntent(context, backCaptureRequest)?.run {
+ assertEquals(action, ACTION_IMAGE_CAPTURE)
+ assertEquals(0, extras!!.getInt(MimeType.CAMERA_FACING))
+ assertEquals(1, extras!!.getInt(MimeType.LENS_FACING_BACK))
+ assertEquals(true, extras!!.getBoolean(MimeType.USE_BACK_CAMERA))
+ }
+ }
+
+ @Test
+ fun `Video buildIntent`() {
+ assertNull(MimeType.Video.buildIntent(context, request))
+
+ mockResolveActivity()
+ MimeType.Video.buildIntent(context, request)?.run {
+ assertEquals(action, ACTION_VIDEO_CAPTURE)
+ assertNull(extras)
+ }
+
+ val anyCaptureRequest = request.copy(captureMode = PromptRequest.File.FacingMode.ANY)
+ MimeType.Video.buildIntent(context, anyCaptureRequest)?.run {
+ assertEquals(action, ACTION_VIDEO_CAPTURE)
+ assertNull(extras)
+ }
+
+ val frontCaptureRequest = request.copy(captureMode = PromptRequest.File.FacingMode.FRONT_CAMERA)
+ MimeType.Video.buildIntent(context, frontCaptureRequest)?.run {
+ assertEquals(action, ACTION_VIDEO_CAPTURE)
+ assertEquals(1, extras!!.getInt(MimeType.CAMERA_FACING))
+ assertEquals(1, extras!!.getInt(MimeType.LENS_FACING_FRONT))
+ assertEquals(true, extras!!.getBoolean(MimeType.USE_FRONT_CAMERA))
+ }
+
+ val backCaptureRequest = request.copy(captureMode = PromptRequest.File.FacingMode.BACK_CAMERA)
+ MimeType.Video.buildIntent(context, backCaptureRequest)?.run {
+ assertEquals(action, ACTION_VIDEO_CAPTURE)
+ assertEquals(0, extras!!.getInt(MimeType.CAMERA_FACING))
+ assertEquals(1, extras!!.getInt(MimeType.LENS_FACING_BACK))
+ assertEquals(true, extras!!.getBoolean(MimeType.USE_BACK_CAMERA))
+ }
+ }
+
+ @Test
+ fun `Audio buildIntent`() {
+ assertNull(MimeType.Audio.buildIntent(context, request))
+
+ mockResolveActivity()
+ MimeType.Audio.buildIntent(context, request)?.run {
+ assertEquals(action, RECORD_SOUND_ACTION)
+ }
+ }
+
+ @Test
+ fun `Wildcard buildIntent`() {
+ // allowMultipleFiles false and empty mimeTypes will create an intent
+ // without EXTRA_ALLOW_MULTIPLE and EXTRA_MIME_TYPES
+ with(MimeType.Wildcard.buildIntent(testContext, request)) {
+ assertEquals(action, ACTION_GET_CONTENT)
+ assertEquals(type, "*/*")
+ assertTrue(categories.contains(CATEGORY_OPENABLE))
+
+ val mimeType = extras!!.getStringArray(EXTRA_MIME_TYPES)
+ assertNull(mimeType)
+
+ val allowMultipleFiles = extras!!.getBoolean(EXTRA_ALLOW_MULTIPLE)
+ assertFalse(allowMultipleFiles)
+ }
+
+ // allowMultipleFiles true and not empty mimeTypes will create an intent
+ // with EXTRA_ALLOW_MULTIPLE and EXTRA_MIME_TYPES
+ val multiJpegRequest = request.copy(
+ mimeTypes = arrayOf("image/jpeg"),
+ isMultipleFilesSelection = true,
+ )
+ with(MimeType.Wildcard.buildIntent(testContext, multiJpegRequest)) {
+ assertEquals(action, ACTION_GET_CONTENT)
+ assertEquals(type, "*/*")
+ assertTrue(categories.contains(CATEGORY_OPENABLE))
+
+ val mimeTypes = extras!!.getStringArray(EXTRA_MIME_TYPES) as Array<*>
+ assertEquals(mimeTypes.first(), "image/jpeg")
+
+ val allowMultipleFiles = extras!!.getBoolean(EXTRA_ALLOW_MULTIPLE)
+ assertTrue(allowMultipleFiles)
+ }
+ }
+
+ @Test
+ fun `Wildcard buildIntent with file extensions`() {
+ shadowOf(MimeTypeMap.getSingleton()).apply {
+ addExtensionMimeTypeMapping(".gif", "image/gif")
+ addExtensionMimeTypeMapping(
+ "docx",
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
+ )
+ }
+
+ val extensionsRequest = request.copy(mimeTypes = arrayOf(".gif", "image/jpeg", "docx", ".fun"))
+
+ with(MimeType.Wildcard.buildIntent(testContext, extensionsRequest)) {
+ assertEquals(action, ACTION_GET_CONTENT)
+
+ val mimeTypes = extras!!.getStringArray(EXTRA_MIME_TYPES) as Array<*>
+ assertEquals(mimeTypes[0], "image/gif")
+ assertEquals(mimeTypes[1], "image/jpeg")
+ assertEquals(mimeTypes[2], "application/vnd.openxmlformats-officedocument.wordprocessingml.document")
+ assertEquals(mimeTypes[3], "*/*")
+ }
+ }
+
+ private fun mockResolveActivity() {
+ val info = ResolveInfo()
+ info.activityInfo = ActivityInfo()
+ info.activityInfo.applicationInfo = ApplicationInfo()
+ info.activityInfo.applicationInfo.packageName = "com.example.app"
+ info.activityInfo.name = "SomeActivity"
+ @Suppress("DEPRECATION")
+ `when`(packageManager.resolveActivity(notNull(), eq(MATCH_DEFAULT_ONLY))).thenReturn(info)
+ }
+
+ private fun assertTypes(valid: Set<MimeType>, func: (MimeType) -> Boolean) {
+ assertEquals(valid, MimeType.values().filter(func).toSet())
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/login/BasicLoginAdapterTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/login/BasicLoginAdapterTest.kt
new file mode 100644
index 0000000000..6050d731ab
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/login/BasicLoginAdapterTest.kt
@@ -0,0 +1,64 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.login
+
+import android.widget.FrameLayout
+import android.widget.TextView
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import mozilla.components.concept.storage.Login
+import mozilla.components.feature.prompts.R
+import mozilla.components.support.test.robolectric.testContext
+import org.junit.Assert
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@ExperimentalCoroutinesApi
+@RunWith(AndroidJUnit4::class)
+class BasicLoginAdapterTest {
+
+ val login =
+ Login(guid = "A", origin = "https://www.mozilla.org", username = "username", password = "password")
+ val login2 =
+ Login(guid = "B", origin = "https://www.mozilla.org", username = "username2", password = "password")
+
+ @Test
+ fun `getItemCount should return the number of logins`() {
+ var onLoginSelected: (Login) -> Unit = { }
+
+ val adapter = BasicLoginAdapter(onLoginSelected)
+
+ Assert.assertEquals(0, adapter.itemCount)
+
+ adapter.submitList(
+ listOf(login, login2),
+ )
+ Assert.assertEquals(2, adapter.itemCount)
+ }
+
+ @Test
+ fun `creates and binds login viewholder`() {
+ var confirmedLogin: Login? = null
+ var onLoginSelected: (Login) -> Unit = { confirmedLogin = it }
+
+ val adapter = BasicLoginAdapter(onLoginSelected)
+
+ adapter.submitList(listOf(login, login2))
+
+ val holder = adapter.createViewHolder(FrameLayout(testContext), 0)
+ adapter.bindViewHolder(holder, 0)
+
+ Assert.assertEquals(login, holder.login)
+ val userName = holder.itemView.findViewById<TextView>(R.id.username)
+ Assert.assertEquals("username", userName.text)
+ val password = holder.itemView.findViewById<TextView>(R.id.password)
+ Assert.assertEquals("password".length, password.text.length)
+ Assert.assertTrue(holder.itemView.isClickable)
+
+ holder.itemView.performClick()
+
+ Assert.assertEquals(confirmedLogin, login)
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/login/LoginPickerTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/login/LoginPickerTest.kt
new file mode 100644
index 0000000000..b8dae6b473
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/login/LoginPickerTest.kt
@@ -0,0 +1,142 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.login
+
+import mozilla.components.browser.state.action.ContentAction
+import mozilla.components.browser.state.state.BrowserState
+import mozilla.components.browser.state.state.ContentState
+import mozilla.components.browser.state.state.CustomTabSessionState
+import mozilla.components.browser.state.state.TabSessionState
+import mozilla.components.browser.state.store.BrowserStore
+import mozilla.components.concept.engine.prompt.PromptRequest
+import mozilla.components.concept.storage.Login
+import mozilla.components.support.test.any
+import mozilla.components.support.test.mock
+import mozilla.components.support.test.whenever
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+import org.mockito.Mockito.never
+import org.mockito.Mockito.verify
+
+class LoginPickerTest {
+ val login =
+ Login(guid = "A", origin = "https://www.mozilla.org", username = "username", password = "password")
+ val login2 =
+ Login(guid = "B", origin = "https://www.mozilla.org", username = "username2", password = "password")
+
+ var onDismissWasCalled = false
+ var confirmedLogin: Login? = null
+ private val request = PromptRequest.SelectLoginPrompt(
+ logins = listOf(login, login2),
+ generatedPassword = null,
+ onConfirm = { confirmedLogin = it },
+ onDismiss = { onDismissWasCalled = true },
+ )
+
+ var manageLoginsCalled = false
+ private lateinit var store: BrowserStore
+ private lateinit var state: BrowserState
+ private lateinit var loginPicker: LoginPicker
+ private lateinit var loginSelectBar: LoginSelectBar
+ private var onManageLogins: () -> Unit = { manageLoginsCalled = true }
+
+ @Before
+ fun setup() {
+ state = mock()
+ store = mock()
+ loginSelectBar = mock()
+ whenever(store.state).thenReturn(state)
+ loginPicker = LoginPicker(store, loginSelectBar, onManageLogins)
+ }
+
+ @Test
+ fun `LoginPicker shows the login select bar on a custom tab`() {
+ val customTabContent: ContentState = mock()
+ whenever(customTabContent.promptRequests).thenReturn(listOf(request))
+ val customTab = CustomTabSessionState(id = "custom-tab", content = customTabContent, trackingProtection = mock(), config = mock())
+
+ whenever(state.customTabs).thenReturn(listOf(customTab))
+ loginPicker = LoginPicker(store, loginSelectBar, onManageLogins, customTab.id)
+ loginPicker.handleSelectLoginRequest(request)
+ verify(loginSelectBar).showPrompt(request.logins)
+ }
+
+ @Test
+ fun `LoginPicker shows the login select bar on a selected tab`() {
+ prepareSelectedSession(request)
+ loginPicker = LoginPicker(store, loginSelectBar, onManageLogins)
+ loginPicker.handleSelectLoginRequest(request)
+ verify(loginSelectBar).showPrompt(request.logins)
+ }
+
+ @Test
+ fun `LoginPicker selects and login through the request and hides view`() {
+ prepareSelectedSession(request)
+ loginPicker = LoginPicker(store, loginSelectBar, onManageLogins)
+
+ loginPicker.handleSelectLoginRequest(request)
+
+ loginPicker.onOptionSelect(login)
+
+ assertEquals(confirmedLogin, login)
+ verify(loginSelectBar).hidePrompt()
+ }
+
+ @Test
+ fun `LoginPicker invokes manage logins and hides view`() {
+ manageLoginsCalled = false
+ onDismissWasCalled = false
+
+ prepareSelectedSession(request)
+ loginPicker = LoginPicker(store, loginSelectBar, onManageLogins)
+
+ loginPicker.handleSelectLoginRequest(request)
+
+ loginPicker.onManageOptions()
+
+ assertTrue(manageLoginsCalled)
+ assertTrue(onDismissWasCalled)
+ verify(loginSelectBar).hidePrompt()
+ }
+
+ @Test
+ fun `WHEN dismissCurrentLoginSelect is called without a parameter THEN the active login prompt is dismissed`() {
+ val selectedSession = prepareSelectedSession(request)
+ loginPicker = LoginPicker(store, loginSelectBar, onManageLogins, selectedSession.id)
+
+ verify(store, never()).dispatch(any())
+ loginPicker.dismissCurrentLoginSelect()
+
+ assertTrue(onDismissWasCalled)
+ verify(store).dispatch(ContentAction.ConsumePromptRequestAction(selectedSession.id, request))
+ verify(loginSelectBar).hidePrompt()
+ }
+
+ @Test
+ fun `WHEN dismissCurrentLoginSelect is called with the active login prompt passed as parameter THEN the prompt is dismissed`() {
+ val selectedSession = prepareSelectedSession(request)
+ loginPicker = LoginPicker(store, loginSelectBar, onManageLogins, selectedSession.id)
+
+ verify(store, never()).dispatch(any())
+ loginPicker.dismissCurrentLoginSelect(request)
+
+ assertTrue(onDismissWasCalled)
+ verify(store).dispatch(ContentAction.ConsumePromptRequestAction(selectedSession.id, request))
+ verify(loginSelectBar).hidePrompt()
+ }
+
+ private fun prepareSelectedSession(request: PromptRequest? = null): TabSessionState {
+ val promptRequest: PromptRequest = request ?: mock()
+ val content: ContentState = mock()
+ whenever(content.promptRequests).thenReturn(listOf(promptRequest))
+
+ val selected = TabSessionState("browser-tab", content, mock(), mock())
+ whenever(state.selectedTabId).thenReturn(selected.id)
+ whenever(state.tabs).thenReturn(listOf(selected))
+ return selected
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/login/LoginSelectBarTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/login/LoginSelectBarTest.kt
new file mode 100644
index 0000000000..1a5855b4a2
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/login/LoginSelectBarTest.kt
@@ -0,0 +1,104 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.login
+
+import android.view.View
+import android.widget.LinearLayout
+import androidx.appcompat.widget.AppCompatTextView
+import androidx.core.view.isVisible
+import androidx.recyclerview.widget.RecyclerView
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import mozilla.components.concept.storage.Login
+import mozilla.components.feature.prompts.R
+import mozilla.components.feature.prompts.concept.SelectablePromptView
+import mozilla.components.support.test.ext.appCompatContext
+import mozilla.components.support.test.mock
+import mozilla.components.support.test.robolectric.testContext
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNull
+import org.junit.Assert.assertTrue
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.verify
+
+@RunWith(AndroidJUnit4::class)
+class LoginSelectBarTest {
+ val login =
+ Login(guid = "A", origin = "https://www.mozilla.org", username = "username", password = "password")
+ val login2 =
+ Login(guid = "B", origin = "https://www.mozilla.org", username = "username2", password = "password")
+
+ @Test
+ fun `showPicker updates visibility`() {
+ val bar = LoginSelectBar(appCompatContext)
+
+ bar.showPrompt(listOf(login, login2))
+
+ assertTrue(bar.isVisible)
+ }
+
+ @Test
+ fun `hidePicker updates visibility`() {
+ val bar = spy(LoginSelectBar(appCompatContext))
+
+ bar.hidePrompt()
+
+ verify(bar).visibility = View.GONE
+ }
+
+ @Test
+ fun `listener is invoked when clicking manage logins option`() {
+ val bar = LoginSelectBar(appCompatContext)
+ val listener: SelectablePromptView.Listener<Login> = mock()
+
+ assertNull(bar.listener)
+
+ bar.listener = listener
+ bar.showPrompt(listOf(login, login2))
+
+ bar.findViewById<AppCompatTextView>(R.id.manage_logins).performClick()
+
+ verify(listener).onManageOptions()
+ }
+
+ @Test
+ fun `listener is invoked when clicking a login option`() {
+ val bar = LoginSelectBar(appCompatContext)
+ val listener: SelectablePromptView.Listener<Login> = mock()
+
+ assertNull(bar.listener)
+
+ bar.listener = listener
+ bar.showPrompt(listOf(login, login2))
+
+ val adapter = bar.findViewById<RecyclerView>(R.id.logins_list).adapter as BasicLoginAdapter
+ val holder = adapter.onCreateViewHolder(LinearLayout(testContext), 0)
+ adapter.bindViewHolder(holder, 0)
+
+ holder.itemView.performClick()
+
+ verify(listener).onOptionSelect(login)
+ }
+
+ @Test
+ fun `view is expanded when clicking header`() {
+ val bar = LoginSelectBar(appCompatContext)
+
+ bar.showPrompt(listOf(login, login2))
+
+ bar.findViewById<AppCompatTextView>(R.id.saved_logins_header).performClick()
+
+ // Expanded
+ assertTrue(bar.findViewById<RecyclerView>(R.id.logins_list).isVisible)
+ assertTrue(bar.findViewById<AppCompatTextView>(R.id.manage_logins).isVisible)
+
+ bar.findViewById<AppCompatTextView>(R.id.saved_logins_header).performClick()
+
+ // Hidden
+ assertFalse(bar.findViewById<RecyclerView>(R.id.logins_list).isVisible)
+ assertFalse(bar.findViewById<AppCompatTextView>(R.id.manage_logins).isVisible)
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/login/StrongPasswordPromptViewListenerTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/login/StrongPasswordPromptViewListenerTest.kt
new file mode 100644
index 0000000000..454b362e5d
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/login/StrongPasswordPromptViewListenerTest.kt
@@ -0,0 +1,143 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package mozilla.components.feature.prompts.login
+
+import mozilla.components.browser.state.action.ContentAction
+import mozilla.components.browser.state.state.BrowserState
+import mozilla.components.browser.state.state.ContentState
+import mozilla.components.browser.state.state.CustomTabSessionState
+import mozilla.components.browser.state.state.TabSessionState
+import mozilla.components.browser.state.store.BrowserStore
+import mozilla.components.concept.engine.prompt.PromptRequest
+import mozilla.components.concept.storage.Login
+import mozilla.components.support.test.any
+import mozilla.components.support.test.mock
+import mozilla.components.support.test.whenever
+import org.junit.Assert
+import org.junit.Before
+import org.junit.Test
+import org.mockito.Mockito
+
+class StrongPasswordPromptViewListenerTest {
+ private val suggestedPassword = "generatedPassword123#"
+
+ private val login =
+ Login(
+ guid = "A",
+ origin = "https://www.mozilla.org",
+ username = "username",
+ password = "password",
+ )
+ private val login2 =
+ Login(
+ guid = "B",
+ origin = "https://www.mozilla.org",
+ username = "username2",
+ password = "password",
+ )
+
+ private var onDismissWasCalled = false
+ private var confirmedLogin: Login? = null
+
+ private val request = PromptRequest.SelectLoginPrompt(
+ logins = listOf(login, login2),
+ generatedPassword = suggestedPassword,
+ onConfirm = { confirmedLogin = it },
+ onDismiss = { onDismissWasCalled = true },
+ )
+
+ private lateinit var store: BrowserStore
+ private lateinit var state: BrowserState
+
+ private lateinit var suggestStrongPasswordPromptViewListener: StrongPasswordPromptViewListener
+ private lateinit var suggestStrongPasswordBar: SuggestStrongPasswordBar
+
+ private val onSaveLoginWithGeneratedPass: (String, String) -> Unit = mock()
+ private val url = "https://www.mozilla.org"
+
+ @Before
+ fun setup() {
+ state = mock()
+ store = mock()
+ suggestStrongPasswordBar = mock()
+ whenever(store.state).thenReturn(state)
+ suggestStrongPasswordPromptViewListener = StrongPasswordPromptViewListener(store, suggestStrongPasswordBar)
+ }
+
+ @Test
+ fun `StrongPasswordGenerator shows the suggest strong password bar on a custom tab`() {
+ val customTabContent: ContentState = mock()
+ whenever(customTabContent.promptRequests).thenReturn(listOf(request))
+ val customTab = CustomTabSessionState(
+ id = "custom-tab",
+ content = customTabContent,
+ trackingProtection = mock(),
+ config = mock(),
+ )
+
+ whenever(state.customTabs).thenReturn(listOf(customTab))
+
+ suggestStrongPasswordPromptViewListener = StrongPasswordPromptViewListener(store, suggestStrongPasswordBar)
+ suggestStrongPasswordPromptViewListener.handleSuggestStrongPasswordRequest(request, url, onSaveLoginWithGeneratedPass)
+ Mockito.verify(suggestStrongPasswordBar).showPrompt(suggestedPassword, url, onSaveLoginWithGeneratedPass)
+ }
+
+ @Test
+ fun `StrongPasswordGenerator shows the suggest strong password bar on a selected tab`() {
+ prepareSelectedSession(request)
+ suggestStrongPasswordPromptViewListener = StrongPasswordPromptViewListener(store, suggestStrongPasswordBar)
+ suggestStrongPasswordPromptViewListener.handleSuggestStrongPasswordRequest(request, url, onSaveLoginWithGeneratedPass)
+ Mockito.verify(suggestStrongPasswordBar).showPrompt(suggestedPassword, url, onSaveLoginWithGeneratedPass)
+ }
+
+ @Test
+ fun `StrongPasswordGenerator invokes use the suggested password and hides view`() {
+ prepareSelectedSession(request)
+ suggestStrongPasswordPromptViewListener = StrongPasswordPromptViewListener(store, suggestStrongPasswordBar)
+ suggestStrongPasswordPromptViewListener.handleSuggestStrongPasswordRequest(request, "") { _, _ -> }
+ suggestStrongPasswordPromptViewListener.onUseGeneratedPassword(suggestedPassword, "") { _, _ -> }
+ Mockito.verify(suggestStrongPasswordBar).hidePrompt()
+ }
+
+ @Test
+ fun `WHEN dismissCurrentSuggestStrongPassword is called without a parameter THEN the active login prompt is dismissed`() {
+ val selectedSession = prepareSelectedSession(request)
+ suggestStrongPasswordPromptViewListener =
+ StrongPasswordPromptViewListener(store, suggestStrongPasswordBar, selectedSession.id)
+
+ Mockito.verify(store, Mockito.never()).dispatch(any())
+ suggestStrongPasswordPromptViewListener.dismissCurrentSuggestStrongPassword()
+
+ Assert.assertTrue(onDismissWasCalled)
+ Mockito.verify(store)
+ .dispatch(ContentAction.ConsumePromptRequestAction(selectedSession.id, request))
+ Mockito.verify(suggestStrongPasswordBar).hidePrompt()
+ }
+
+ @Test
+ fun `WHEN dismissCurrentSuggestStrongPassword is called with the active login prompt passed as parameter THEN the prompt is dismissed`() {
+ val selectedSession = prepareSelectedSession(request)
+ suggestStrongPasswordPromptViewListener =
+ StrongPasswordPromptViewListener(store, suggestStrongPasswordBar, selectedSession.id)
+
+ Mockito.verify(store, Mockito.never()).dispatch(any())
+ suggestStrongPasswordPromptViewListener.dismissCurrentSuggestStrongPassword(request)
+
+ Assert.assertTrue(onDismissWasCalled)
+ Mockito.verify(store)
+ .dispatch(ContentAction.ConsumePromptRequestAction(selectedSession.id, request))
+ Mockito.verify(suggestStrongPasswordBar).hidePrompt()
+ }
+
+ private fun prepareSelectedSession(request: PromptRequest? = null): TabSessionState {
+ val promptRequest: PromptRequest = request ?: mock()
+ val content: ContentState = mock()
+ whenever(content.promptRequests).thenReturn(listOf(promptRequest))
+
+ val selected = TabSessionState("browser-tab", content, mock(), mock())
+ whenever(state.selectedTabId).thenReturn(selected.id)
+ whenever(state.tabs).thenReturn(listOf(selected))
+ return selected
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/login/SuggestStrongPasswordBarTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/login/SuggestStrongPasswordBarTest.kt
new file mode 100644
index 0000000000..1c1278ebc1
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/login/SuggestStrongPasswordBarTest.kt
@@ -0,0 +1,61 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.login
+
+import android.view.View
+import androidx.appcompat.widget.AppCompatTextView
+import androidx.core.view.isVisible
+import androidx.recyclerview.widget.RecyclerView
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import mozilla.components.feature.prompts.R
+import mozilla.components.feature.prompts.concept.PasswordPromptView
+import mozilla.components.support.test.ext.appCompatContext
+import mozilla.components.support.test.mock
+import org.junit.Assert
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mockito
+
+@RunWith(AndroidJUnit4::class)
+class SuggestStrongPasswordBarTest {
+
+ @Test
+ fun `hide prompt updates visibility`() {
+ val bar = Mockito.spy(SuggestStrongPasswordBar(appCompatContext))
+ bar.hidePrompt()
+ Mockito.verify(bar).visibility = View.GONE
+ }
+
+ @Test
+ fun `listener is invoked when clicking use strong password option`() {
+ val bar = SuggestStrongPasswordBar(appCompatContext)
+ val listener: PasswordPromptView.Listener = mock()
+ val suggestedPassword = "generatedPassword123#"
+ val url = "https://wwww.abc.com"
+ val onSaveLoginWithGeneratedPass: (String, String) -> Unit = mock()
+ Assert.assertNull(bar.listener)
+ bar.listener = listener
+ bar.showPrompt(suggestedPassword, url, onSaveLoginWithGeneratedPass)
+ bar.findViewById<AppCompatTextView>(R.id.use_strong_password).performClick()
+ Mockito.verify(listener)
+ .onUseGeneratedPassword(suggestedPassword, url, onSaveLoginWithGeneratedPass)
+ }
+
+ @Test
+ fun `view is expanded when clicking header`() {
+ val bar = SuggestStrongPasswordBar(appCompatContext)
+ val suggestedPassword = "generatedPassword123#"
+
+ bar.showPrompt(suggestedPassword, "") { _, _ -> }
+
+ bar.findViewById<AppCompatTextView>(R.id.suggest_strong_password_header).performClick()
+ // Expanded
+ Assert.assertTrue(bar.findViewById<RecyclerView>(R.id.use_strong_password).isVisible)
+
+ bar.findViewById<AppCompatTextView>(R.id.suggest_strong_password_header).performClick()
+ // Hidden
+ Assert.assertFalse(bar.findViewById<RecyclerView>(R.id.use_strong_password).isVisible)
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/share/DefaultShareDelegateTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/share/DefaultShareDelegateTest.kt
new file mode 100644
index 0000000000..fb21601947
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/share/DefaultShareDelegateTest.kt
@@ -0,0 +1,70 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.share
+
+import android.content.ActivityNotFoundException
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import mozilla.components.concept.engine.prompt.ShareData
+import mozilla.components.support.test.any
+import mozilla.components.support.test.robolectric.testContext
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mockito.doNothing
+import org.mockito.Mockito.doThrow
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.verify
+
+@RunWith(AndroidJUnit4::class)
+class DefaultShareDelegateTest {
+
+ private lateinit var shareDelegate: ShareDelegate
+
+ @Before
+ fun setup() {
+ shareDelegate = DefaultShareDelegate()
+ }
+
+ @Test
+ fun `calls onSuccess after starting share chooser`() {
+ val context = spy(testContext)
+ doNothing().`when`(context).startActivity(any())
+
+ var dismissed = false
+ var succeeded = false
+
+ shareDelegate.showShareSheet(
+ context,
+ ShareData(title = "Title", text = "Text", url = null),
+ onDismiss = { dismissed = true },
+ onSuccess = { succeeded = true },
+ )
+
+ verify(context).startActivity(any())
+ assertFalse(dismissed)
+ assertTrue(succeeded)
+ }
+
+ @Test
+ fun `calls onDismiss after share chooser throws error`() {
+ val context = spy(testContext)
+ doThrow(ActivityNotFoundException()).`when`(context).startActivity(any())
+
+ var dismissed = false
+ var succeeded = false
+
+ shareDelegate.showShareSheet(
+ context,
+ ShareData(title = null, text = "Text", url = "https://example.com"),
+ onDismiss = { dismissed = true },
+ onSuccess = { succeeded = true },
+ )
+
+ assertTrue(dismissed)
+ assertFalse(succeeded)
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/widget/MonthAndYearPickerTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/widget/MonthAndYearPickerTest.kt
new file mode 100644
index 0000000000..12dd30c808
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/widget/MonthAndYearPickerTest.kt
@@ -0,0 +1,196 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.widget
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import mozilla.components.feature.prompts.ext.month
+import mozilla.components.feature.prompts.ext.now
+import mozilla.components.feature.prompts.ext.toCalendar
+import mozilla.components.feature.prompts.ext.year
+import mozilla.components.feature.prompts.widget.MonthAndYearPicker.Companion.DEFAULT_MAX_YEAR
+import mozilla.components.feature.prompts.widget.MonthAndYearPicker.Companion.DEFAULT_MIN_YEAR
+import mozilla.components.support.ktx.kotlin.toDate
+import mozilla.components.support.test.robolectric.testContext
+import org.junit.Assert.assertEquals
+import org.junit.Test
+import org.junit.runner.RunWith
+import java.util.Calendar.DECEMBER
+import java.util.Calendar.FEBRUARY
+import java.util.Calendar.JANUARY
+
+@RunWith(AndroidJUnit4::class)
+class MonthAndYearPickerTest {
+
+ @Test
+ fun `WHEN picker widget THEN initial values must be displayed`() {
+ val initialDate = "2018-06".toDate("yyyy-MM").toCalendar()
+ val minDate = "2018-04".toDate("yyyy-MM").toCalendar()
+ val maxDate = "2018-09".toDate("yyyy-MM").toCalendar()
+
+ val monthAndYearPicker = MonthAndYearPicker(
+ context = testContext,
+ selectedDate = initialDate,
+ minDate = minDate,
+ maxDate = maxDate,
+ )
+
+ with(monthAndYearPicker.monthView) {
+ assertEquals(initialDate.month, value)
+ assertEquals(minDate.month, minValue)
+ assertEquals(maxDate.month, maxValue)
+ }
+
+ with(monthAndYearPicker.yearView) {
+ assertEquals(initialDate.year, value)
+ assertEquals(minDate.year, minValue)
+ assertEquals(maxDate.year, maxValue)
+ }
+ }
+
+ @Test
+ fun `WHEN selectedDate is a year less than maxDate THEN month picker MUST allow selecting until the last month of the year`() {
+ val initialDate = "2018-06".toDate("yyyy-MM").toCalendar()
+ val minDate = "2018-04".toDate("yyyy-MM").toCalendar()
+ val maxDate = "2019-09".toDate("yyyy-MM").toCalendar()
+
+ val monthAndYearPicker = MonthAndYearPicker(
+ context = testContext,
+ selectedDate = initialDate,
+ minDate = minDate,
+ maxDate = maxDate,
+ )
+
+ with(monthAndYearPicker.monthView) {
+ assertEquals(initialDate.month, value)
+ assertEquals(minDate.month, minValue)
+ assertEquals(DECEMBER, maxValue)
+ }
+
+ with(monthAndYearPicker.yearView) {
+ assertEquals(initialDate.year, value)
+ assertEquals(minDate.year, minValue)
+ assertEquals(maxDate.year, maxValue)
+ }
+ }
+
+ @Test
+ fun `WHEN changing month picker from DEC to JAN THEN year picker MUST be increased by 1`() {
+ val initialDate = "2018-06".toDate("yyyy-MM")
+ val initialCal = "2018-06".toDate("yyyy-MM").toCalendar()
+
+ val monthAndYearPicker = MonthAndYearPicker(
+ context = testContext,
+ selectedDate = initialDate.toCalendar(),
+ )
+
+ val yearView = monthAndYearPicker.yearView
+ assertEquals(initialCal.year, yearView.value)
+
+ monthAndYearPicker.onValueChange(monthAndYearPicker.monthView, DECEMBER, JANUARY)
+
+ assertEquals(initialCal.year + 1, yearView.value)
+ }
+
+ @Test
+ fun `WHEN changing month picker from JAN to DEC THEN year picker MUST be decreased by 1`() {
+ val initialDate = "2018-06".toDate("yyyy-MM")
+ val initialCal = "2018-06".toDate("yyyy-MM").toCalendar()
+
+ val monthAndYearPicker = MonthAndYearPicker(
+ context = testContext,
+ selectedDate = initialDate.toCalendar(),
+ )
+
+ val yearView = monthAndYearPicker.yearView
+ assertEquals(initialCal.year, yearView.value)
+
+ monthAndYearPicker.onValueChange(monthAndYearPicker.monthView, JANUARY, DECEMBER)
+
+ assertEquals(initialCal.year - 1, yearView.value)
+ }
+
+ @Test
+ fun `WHEN selecting a month or a year THEN dateSetListener MUST be notified`() {
+ val initialDate = "2018-06".toDate("yyyy-MM")
+ val initialCal = "2018-06".toDate("yyyy-MM").toCalendar()
+
+ val monthAndYearPicker = MonthAndYearPicker(
+ context = testContext,
+ selectedDate = initialDate.toCalendar(),
+ )
+
+ var newMonth = 0
+ var newYear = 0
+
+ monthAndYearPicker.dateSetListener = object : MonthAndYearPicker.OnDateSetListener {
+ override fun onDateSet(picker: MonthAndYearPicker, month: Int, year: Int) {
+ newMonth = month
+ newYear = year
+ }
+ }
+
+ assertEquals(0, newMonth)
+ assertEquals(0, newYear)
+
+ val yearView = monthAndYearPicker.yearView
+ val monthView = monthAndYearPicker.monthView
+
+ monthAndYearPicker.onValueChange(yearView, initialCal.year - 1, initialCal.year + 1)
+
+ assertEquals(initialCal.year + 1, newYear)
+
+ monthAndYearPicker.onValueChange(monthView, JANUARY, FEBRUARY)
+
+ assertEquals(FEBRUARY + 1, newMonth) // Month is zero based
+ }
+
+ @Test
+ fun `WHEN max or min date are in a illogical range THEN picker must allow to select the default values for max and min`() {
+ val initialDate = "2018-06".toDate("yyyy-MM").toCalendar()
+ val minDate = "2019-04".toDate("yyyy-MM").toCalendar()
+ val maxDate = "2018-09".toDate("yyyy-MM").toCalendar()
+
+ val monthAndYearPicker = MonthAndYearPicker(
+ context = testContext,
+ selectedDate = initialDate,
+ minDate = minDate,
+ maxDate = maxDate,
+ )
+
+ with(monthAndYearPicker.monthView) {
+ assertEquals(JANUARY, minValue)
+ assertEquals(DECEMBER, maxValue)
+ }
+
+ with(monthAndYearPicker.yearView) {
+ assertEquals(DEFAULT_MIN_YEAR, minValue)
+ assertEquals(DEFAULT_MAX_YEAR, maxValue)
+ }
+ }
+
+ @Test
+ fun `WHEN selecting a date that is before or after min or max date THEN selectDate will be set to min date`() {
+ val minDate = "2018-04".toDate("yyyy-MM").toCalendar()
+ val maxDate = "2018-09".toDate("yyyy-MM").toCalendar()
+ val initialDate = now()
+
+ initialDate.year = minDate.year - 1
+
+ val monthAndYearPicker = MonthAndYearPicker(
+ context = testContext,
+ selectedDate = initialDate,
+ minDate = minDate,
+ maxDate = maxDate,
+ )
+
+ with(monthAndYearPicker.monthView) {
+ assertEquals(minDate.month, value)
+ }
+
+ with(monthAndYearPicker.yearView) {
+ assertEquals(minDate.year, value)
+ }
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/widget/TimePrecisionPickerTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/widget/TimePrecisionPickerTest.kt
new file mode 100644
index 0000000000..43e462b679
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/widget/TimePrecisionPickerTest.kt
@@ -0,0 +1,106 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.prompts.widget
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import mozilla.components.feature.prompts.ext.hour
+import mozilla.components.feature.prompts.ext.millisecond
+import mozilla.components.feature.prompts.ext.minute
+import mozilla.components.feature.prompts.ext.now
+import mozilla.components.feature.prompts.ext.second
+import mozilla.components.feature.prompts.ext.toCalendar
+import mozilla.components.support.ktx.kotlin.toDate
+import mozilla.components.support.test.robolectric.testContext
+import org.junit.Assert.assertEquals
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+class TimePrecisionPickerTest {
+ private val initialTime = "12:00".toDate("HH:mm").toCalendar()
+ private var minTime = "10:30".toDate("HH:mm").toCalendar()
+ private var maxTime = "18:45".toDate("HH:mm").toCalendar()
+ private val stepValue = 0.1f
+
+ @Test
+ fun `WHEN picker widget THEN initial values must be displayed`() {
+ val timePicker = TimePrecisionPicker(
+ context = testContext,
+ selectedTime = initialTime,
+ stepValue = stepValue,
+ )
+
+ assertEquals(initialTime.hour, timePicker.hourView.value)
+ assertEquals(initialTime.minute, timePicker.minuteView.value)
+ }
+
+ @Test
+ fun `WHEN selectedTime is outside the bounds of min and max time THEN the displayed time is minTime`() {
+ minTime = "14:30".toDate("HH:mm").toCalendar()
+ val timePicker = TimePrecisionPicker(
+ context = testContext,
+ selectedTime = initialTime,
+ minTime = minTime,
+ maxTime = maxTime,
+ stepValue = stepValue,
+ )
+
+ assertEquals(minTime.hour, timePicker.hourView.value)
+ assertEquals(minTime.minute, timePicker.minuteView.value)
+ }
+
+ @Test
+ fun `WHEN minTime and maxTime are in illogical order AND selectedTime is outside limits THEN the min and max limits are ignored when initializing the time`() {
+ minTime = "15:30".toDate("HH:mm").toCalendar()
+ maxTime = "09:30".toDate("HH:mm").toCalendar()
+ val timePicker = TimePrecisionPicker(
+ context = testContext,
+ selectedTime = initialTime,
+ minTime = minTime,
+ maxTime = maxTime,
+ stepValue = stepValue,
+ )
+
+ assertEquals(initialTime.hour, timePicker.hourView.value)
+ assertEquals(initialTime.minute, timePicker.minuteView.value)
+ }
+
+ @Test
+ fun `WHEN changing the selected time THEN timeSetListener MUST be notified`() {
+ val updatedTime = now()
+
+ val timePicker = TimePrecisionPicker(
+ context = testContext,
+ selectedTime = initialTime,
+ minTime = minTime,
+ maxTime = maxTime,
+ stepValue = stepValue,
+ timeSetListener = object : TimePrecisionPicker.OnTimeSetListener {
+ override fun onTimeSet(
+ picker: TimePrecisionPicker,
+ hour: Int,
+ minute: Int,
+ second: Int,
+ millisecond: Int,
+ ) {
+ updatedTime.hour = hour
+ updatedTime.minute = minute
+ updatedTime.second = second
+ updatedTime.millisecond = millisecond
+ }
+ },
+ )
+
+ timePicker.onValueChange(timePicker.hourView, initialTime.hour, 13)
+ timePicker.onValueChange(timePicker.minuteView, initialTime.minute, 20)
+ timePicker.onValueChange(timePicker.secondView, initialTime.second, 30)
+ timePicker.onValueChange(timePicker.millisecondView, initialTime.millisecond, 100)
+
+ assertEquals(13, updatedTime.hour)
+ assertEquals(20, updatedTime.minute)
+ assertEquals(30, updatedTime.second)
+ assertEquals(100, updatedTime.millisecond)
+ }
+}
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/mobile/android/android-components/components/feature/prompts/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 0000000000..cf1c399ea8
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1,2 @@
+mock-maker-inline
+// This allows mocking final classes (classes are final by default in Kotlin)
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/resources/robolectric.properties b/mobile/android/android-components/components/feature/prompts/src/test/resources/robolectric.properties
new file mode 100644
index 0000000000..932b01b9eb
--- /dev/null
+++ b/mobile/android/android-components/components/feature/prompts/src/test/resources/robolectric.properties
@@ -0,0 +1 @@
+sdk=28