mirror of
https://github.com/bitwarden/android.git
synced 2025-12-10 09:56:45 -06:00
[PM-24111] Copy Password Manager strings to ui module (#5569)
This commit is contained in:
parent
7a578ff2c5
commit
da5dcef41e
@ -6,6 +6,7 @@ import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.bitwarden.ui.platform.base.BaseViewModel
|
||||
import com.bitwarden.ui.platform.feature.settings.appearance.model.AppTheme
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.bitwarden.vault.CipherView
|
||||
@ -452,7 +453,8 @@ class MainViewModel @Inject constructor(
|
||||
message = emailTokenResult
|
||||
.message
|
||||
?.asText()
|
||||
?: R.string.there_was_an_issue_validating_the_registration_token
|
||||
?: BitwardenString
|
||||
.there_was_an_issue_validating_the_registration_token
|
||||
.asText(),
|
||||
),
|
||||
)
|
||||
|
||||
@ -10,7 +10,7 @@ import androidx.core.app.NotificationManagerCompat
|
||||
import com.bitwarden.annotation.OmitFromCoverage
|
||||
import com.bitwarden.data.manager.DispatcherManager
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.x8bit.bitwarden.data.auth.datasource.disk.AuthDiskSource
|
||||
import com.x8bit.bitwarden.data.auth.util.createPasswordlessRequestDataIntent
|
||||
import com.x8bit.bitwarden.data.autofill.util.toPendingIntentMutabilityFlag
|
||||
@ -49,14 +49,14 @@ class AuthRequestNotificationManagerImpl(
|
||||
NOTIFICATION_CHANNEL_ID,
|
||||
NotificationManagerCompat.IMPORTANCE_DEFAULT,
|
||||
)
|
||||
.setName(context.getString(R.string.pending_log_in_requests))
|
||||
.setName(context.getString(BitwardenString.pending_log_in_requests))
|
||||
.build(),
|
||||
)
|
||||
if (!notificationManager.areNotificationsEnabled(NOTIFICATION_CHANNEL_ID)) return
|
||||
// Create the notification
|
||||
val builder = NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID)
|
||||
.setContentIntent(createContentIntent(data))
|
||||
.setContentTitle(context.getString(R.string.log_in_requested))
|
||||
.setContentTitle(context.getString(BitwardenString.log_in_requested))
|
||||
.setContentText(
|
||||
authDiskSource
|
||||
.userState
|
||||
@ -64,8 +64,8 @@ class AuthRequestNotificationManagerImpl(
|
||||
?.get(data.userId)
|
||||
?.profile
|
||||
?.email
|
||||
?.let { context.getString(R.string.confim_log_in_attemp_for_x, it) }
|
||||
?: context.getString(R.string.confirm_log_in),
|
||||
?.let { context.getString(BitwardenString.confim_log_in_attemp_for_x, it) }
|
||||
?: context.getString(BitwardenString.confirm_log_in),
|
||||
)
|
||||
.setSmallIcon(BitwardenDrawable.ic_notification)
|
||||
.setColor(Color.White.value.toInt())
|
||||
|
||||
@ -4,7 +4,7 @@ import androidx.annotation.StringRes
|
||||
import com.bitwarden.core.data.manager.toast.ToastManager
|
||||
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
|
||||
import com.bitwarden.data.manager.DispatcherManager
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.x8bit.bitwarden.data.auth.datasource.disk.AuthDiskSource
|
||||
import com.x8bit.bitwarden.data.auth.manager.model.LogoutEvent
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.LogoutReason
|
||||
@ -48,7 +48,7 @@ class UserLogoutManagerImpl(
|
||||
Timber.d("logout reason=$reason")
|
||||
val isExpired = reason == LogoutReason.SecurityStamp
|
||||
if (isExpired) {
|
||||
showToast(message = R.string.login_expired)
|
||||
showToast(message = BitwardenString.login_expired)
|
||||
}
|
||||
|
||||
val ableToSwitchToNewAccount = switchUserIfAvailable(
|
||||
@ -70,7 +70,7 @@ class UserLogoutManagerImpl(
|
||||
Timber.d("softLogout reason=$reason")
|
||||
val isExpired = reason == LogoutReason.SecurityStamp
|
||||
if (isExpired) {
|
||||
showToast(message = R.string.login_expired)
|
||||
showToast(message = BitwardenString.login_expired)
|
||||
}
|
||||
authDiskSource.storeAccountTokens(
|
||||
userId = userId,
|
||||
@ -140,7 +140,7 @@ class UserLogoutManagerImpl(
|
||||
// Check if there is a new active user
|
||||
return if (updatedAccounts.isNotEmpty()) {
|
||||
if (currentUserId == currentUserState.activeUserId && !isExpired) {
|
||||
showToast(message = R.string.account_switched_automatically)
|
||||
showToast(message = BitwardenString.account_switched_automatically)
|
||||
}
|
||||
|
||||
// If we logged out a non-active user, we want to leave the active user unchanged.
|
||||
|
||||
@ -6,7 +6,7 @@ import android.view.accessibility.AccessibilityEvent
|
||||
import android.view.accessibility.AccessibilityNodeInfo
|
||||
import android.widget.Toast
|
||||
import com.bitwarden.core.data.manager.toast.ToastManager
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.x8bit.bitwarden.data.autofill.accessibility.manager.AccessibilityAutofillManager
|
||||
import com.x8bit.bitwarden.data.autofill.accessibility.manager.LauncherPackageNameManager
|
||||
import com.x8bit.bitwarden.data.autofill.accessibility.model.AccessibilityAction
|
||||
@ -113,7 +113,7 @@ class BitwardenAccessibilityProcessorImpl(
|
||||
}
|
||||
?: run {
|
||||
toastManager.show(
|
||||
messageId = R.string.autofill_tile_uri_not_found,
|
||||
messageId = BitwardenString.autofill_tile_uri_not_found,
|
||||
duration = Toast.LENGTH_LONG,
|
||||
)
|
||||
}
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
package com.x8bit.bitwarden.data.autofill.manager
|
||||
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.bitwarden.vault.CipherView
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
||||
import com.x8bit.bitwarden.data.platform.manager.clipboard.BitwardenClipboardManager
|
||||
import com.x8bit.bitwarden.data.platform.repository.SettingsRepository
|
||||
@ -34,7 +34,7 @@ class AutofillTotpManagerImpl(
|
||||
if (totpResult is GenerateTotpResult.Success) {
|
||||
clipboardManager.setText(
|
||||
text = totpResult.code,
|
||||
toastDescriptorOverride = R.string.verification_code_totp.asText(),
|
||||
toastDescriptorOverride = BitwardenString.verification_code_totp.asText(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@ -9,8 +9,8 @@ import androidx.credentials.provider.PasswordCredentialEntry
|
||||
import androidx.credentials.provider.PublicKeyCredentialEntry
|
||||
import com.bitwarden.fido.Fido2CredentialAutofillView
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.vault.CipherListView
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.autofill.util.login
|
||||
import com.x8bit.bitwarden.data.credentials.processor.GET_PASSKEY_INTENT
|
||||
import com.x8bit.bitwarden.data.credentials.processor.GET_PASSWORD_INTENT
|
||||
@ -71,7 +71,7 @@ class CredentialEntryBuilderImpl(
|
||||
.Builder(
|
||||
context = context,
|
||||
username = fido2AutofillView.userNameForUi
|
||||
?: context.getString(R.string.no_username),
|
||||
?: context.getString(BitwardenString.no_username),
|
||||
pendingIntent = intentManager
|
||||
.createFido2GetCredentialPendingIntent(
|
||||
action = GET_PASSKEY_INTENT,
|
||||
@ -111,7 +111,7 @@ class CredentialEntryBuilderImpl(
|
||||
.Builder(
|
||||
context = context,
|
||||
username = cipherView.login?.username
|
||||
?: context.getString(R.string.no_username),
|
||||
?: context.getString(BitwardenString.no_username),
|
||||
pendingIntent = intentManager
|
||||
.createPasswordGetCredentialPendingIntent(
|
||||
action = GET_PASSWORD_INTENT,
|
||||
|
||||
@ -27,7 +27,7 @@ import androidx.credentials.provider.CreateEntry
|
||||
import androidx.credentials.provider.ProviderClearCredentialStateRequest
|
||||
import com.bitwarden.core.util.isBuildVersionAtLeast
|
||||
import com.bitwarden.data.manager.DispatcherManager
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.UserState
|
||||
import com.x8bit.bitwarden.data.credentials.manager.BitwardenCredentialManager
|
||||
@ -106,7 +106,7 @@ class CredentialProviderProcessorImpl(
|
||||
// Return an unlock action if the current account is locked.
|
||||
if (!userState.activeAccount.isVaultUnlocked) {
|
||||
val authenticationAction = AuthenticationAction(
|
||||
title = context.getString(R.string.unlock),
|
||||
title = context.getString(BitwardenString.unlock),
|
||||
pendingIntent = intentManager.createFido2UnlockPendingIntent(
|
||||
action = UNLOCK_ACCOUNT_INTENT,
|
||||
userId = userState.activeUserId,
|
||||
@ -193,7 +193,7 @@ class CredentialProviderProcessorImpl(
|
||||
)
|
||||
.setDescription(
|
||||
context.getString(
|
||||
R.string.your_passkey_will_be_saved_to_your_bitwarden_vault_for_x,
|
||||
BitwardenString.your_passkey_will_be_saved_to_your_bitwarden_vault_for_x,
|
||||
accountName,
|
||||
),
|
||||
)
|
||||
|
||||
@ -15,8 +15,8 @@ import com.bitwarden.annotation.OmitFromCoverage
|
||||
import com.bitwarden.core.data.manager.toast.ToastManager
|
||||
import com.bitwarden.core.util.isBuildVersionAtLeast
|
||||
import com.bitwarden.ui.platform.base.util.toAnnotatedString
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.platform.repository.SettingsRepository
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
@ -54,10 +54,10 @@ class BitwardenClipboardManagerImpl(
|
||||
)
|
||||
if (!isBuildVersionAtLeast(version = Build.VERSION_CODES.TIRAMISU)) {
|
||||
val descriptor = toastDescriptorOverride
|
||||
?.let { context.resources.getString(R.string.value_has_been_copied, it) }
|
||||
?.let { context.resources.getString(BitwardenString.value_has_been_copied, it) }
|
||||
?: context.resources.getString(
|
||||
R.string.value_has_been_copied,
|
||||
context.resources.getString(R.string.value),
|
||||
BitwardenString.value_has_been_copied,
|
||||
context.resources.getString(BitwardenString.value),
|
||||
)
|
||||
toastManager.show(message = descriptor)
|
||||
}
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
package com.x8bit.bitwarden.data.platform.repository.util
|
||||
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.platform.repository.model.ClearClipboardFrequency
|
||||
|
||||
/**
|
||||
@ -10,12 +10,12 @@ import com.x8bit.bitwarden.data.platform.repository.model.ClearClipboardFrequenc
|
||||
*/
|
||||
val ClearClipboardFrequency.displayLabel: Text
|
||||
get() = when (this) {
|
||||
ClearClipboardFrequency.NEVER -> R.string.never
|
||||
ClearClipboardFrequency.TEN_SECONDS -> R.string.ten_seconds
|
||||
ClearClipboardFrequency.TWENTY_SECONDS -> R.string.twenty_seconds
|
||||
ClearClipboardFrequency.THIRTY_SECONDS -> R.string.thirty_seconds
|
||||
ClearClipboardFrequency.ONE_MINUTE -> R.string.one_minute
|
||||
ClearClipboardFrequency.TWO_MINUTES -> R.string.two_minutes
|
||||
ClearClipboardFrequency.FIVE_MINUTES -> R.string.five_minutes
|
||||
ClearClipboardFrequency.NEVER -> BitwardenString.never
|
||||
ClearClipboardFrequency.TEN_SECONDS -> BitwardenString.ten_seconds
|
||||
ClearClipboardFrequency.TWENTY_SECONDS -> BitwardenString.twenty_seconds
|
||||
ClearClipboardFrequency.THIRTY_SECONDS -> BitwardenString.thirty_seconds
|
||||
ClearClipboardFrequency.ONE_MINUTE -> BitwardenString.one_minute
|
||||
ClearClipboardFrequency.TWO_MINUTES -> BitwardenString.two_minutes
|
||||
ClearClipboardFrequency.FIVE_MINUTES -> BitwardenString.five_minutes
|
||||
}
|
||||
.asText()
|
||||
|
||||
@ -10,8 +10,8 @@ import android.service.quicksettings.TileService
|
||||
import androidx.annotation.Keep
|
||||
import com.bitwarden.annotation.OmitFromCoverage
|
||||
import com.bitwarden.core.util.isBuildVersionAtLeast
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.x8bit.bitwarden.AccessibilityActivity
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.autofill.accessibility.manager.AccessibilityAutofillManager
|
||||
import com.x8bit.bitwarden.data.autofill.accessibility.model.AccessibilityAction
|
||||
import com.x8bit.bitwarden.data.autofill.accessibility.util.isAccessibilityServiceEnabled
|
||||
@ -62,8 +62,8 @@ class BitwardenAutofillTileService : TileService() {
|
||||
|
||||
private fun getAccessibilityServiceRequiredDialog(): Dialog =
|
||||
AlertDialog.Builder(this)
|
||||
.setMessage(R.string.autofill_tile_accessibility_required)
|
||||
.setMessage(BitwardenString.autofill_tile_accessibility_required)
|
||||
.setCancelable(true)
|
||||
.setPositiveButton(R.string.okay) { dialog, _ -> dialog.cancel() }
|
||||
.setPositiveButton(BitwardenString.okay) { dialog, _ -> dialog.cancel() }
|
||||
.create()
|
||||
}
|
||||
|
||||
@ -40,9 +40,9 @@ import com.bitwarden.ui.platform.components.toggle.BitwardenSwitch
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.model.WindowSize
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.bitwarden.ui.platform.util.rememberWindowSize
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.auth.feature.accountsetup.handlers.rememberSetupAutoFillHandler
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenTwoButtonDialog
|
||||
@ -80,17 +80,19 @@ fun SetupAutoFillScreen(
|
||||
is SetupAutoFillDialogState.AutoFillFallbackDialog -> {
|
||||
BitwardenBasicDialog(
|
||||
title = null,
|
||||
message = stringResource(id = R.string.bitwarden_autofill_go_to_settings),
|
||||
message = stringResource(id = BitwardenString.bitwarden_autofill_go_to_settings),
|
||||
onDismissRequest = handler.onDismissDialog,
|
||||
)
|
||||
}
|
||||
|
||||
is SetupAutoFillDialogState.TurnOnLaterDialog -> {
|
||||
BitwardenTwoButtonDialog(
|
||||
title = stringResource(R.string.turn_on_autofill_later),
|
||||
message = stringResource(R.string.return_to_complete_this_step_anytime_in_settings),
|
||||
confirmButtonText = stringResource(id = R.string.confirm),
|
||||
dismissButtonText = stringResource(id = R.string.cancel),
|
||||
title = stringResource(BitwardenString.turn_on_autofill_later),
|
||||
message = stringResource(
|
||||
id = BitwardenString.return_to_complete_this_step_anytime_in_settings,
|
||||
),
|
||||
confirmButtonText = stringResource(id = BitwardenString.confirm),
|
||||
dismissButtonText = stringResource(id = BitwardenString.cancel),
|
||||
onConfirmClick = handler.onConfirmTurnOnLaterClick,
|
||||
onDismissClick = handler.onDismissDialog,
|
||||
onDismissRequest = handler.onDismissDialog,
|
||||
@ -109,9 +111,9 @@ fun SetupAutoFillScreen(
|
||||
BitwardenTopAppBar(
|
||||
title = stringResource(
|
||||
id = if (state.isInitialSetup) {
|
||||
R.string.account_setup
|
||||
BitwardenString.account_setup
|
||||
} else {
|
||||
R.string.turn_on_autofill
|
||||
BitwardenString.turn_on_autofill
|
||||
},
|
||||
),
|
||||
scrollBehavior = scrollBehavior,
|
||||
@ -120,7 +122,9 @@ fun SetupAutoFillScreen(
|
||||
} else {
|
||||
NavigationIcon(
|
||||
navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close),
|
||||
navigationIconContentDescription = stringResource(id = R.string.close),
|
||||
navigationIconContentDescription = stringResource(
|
||||
id = BitwardenString.close,
|
||||
),
|
||||
onNavigationIconClick = remember(viewModel) {
|
||||
{
|
||||
viewModel.trySendAction(SetupAutoFillAction.CloseClick)
|
||||
@ -164,7 +168,7 @@ private fun SetupAutoFillContent(
|
||||
Spacer(modifier = Modifier.height(24.dp))
|
||||
BitwardenSwitch(
|
||||
label = stringResource(
|
||||
R.string.autofill_services,
|
||||
BitwardenString.autofill_services,
|
||||
),
|
||||
isChecked = state.autofillEnabled,
|
||||
onCheckedChange = onAutofillServiceChanged,
|
||||
@ -175,7 +179,7 @@ private fun SetupAutoFillContent(
|
||||
)
|
||||
Spacer(modifier = Modifier.height(24.dp))
|
||||
BitwardenFilledButton(
|
||||
label = stringResource(id = R.string.continue_text),
|
||||
label = stringResource(id = BitwardenString.continue_text),
|
||||
onClick = onContinueClick,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
@ -184,7 +188,7 @@ private fun SetupAutoFillContent(
|
||||
Spacer(modifier = Modifier.height(12.dp))
|
||||
if (state.isInitialSetup) {
|
||||
BitwardenTextButton(
|
||||
label = stringResource(R.string.turn_on_later),
|
||||
label = stringResource(BitwardenString.turn_on_later),
|
||||
onClick = onTurnOnLaterClick,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
@ -243,14 +247,14 @@ private fun OrderedHeaderContent() {
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
) {
|
||||
Text(
|
||||
text = stringResource(R.string.turn_on_autofill),
|
||||
text = stringResource(BitwardenString.turn_on_autofill),
|
||||
style = BitwardenTheme.typography.titleMedium,
|
||||
color = BitwardenTheme.colorScheme.text.primary,
|
||||
textAlign = TextAlign.Center,
|
||||
)
|
||||
Spacer(modifier = Modifier.height(8.dp))
|
||||
Text(
|
||||
text = stringResource(R.string.use_autofill_to_log_into_your_accounts),
|
||||
text = stringResource(BitwardenString.use_autofill_to_log_into_your_accounts),
|
||||
style = BitwardenTheme.typography.bodyMedium,
|
||||
color = BitwardenTheme.colorScheme.text.primary,
|
||||
textAlign = TextAlign.Center,
|
||||
|
||||
@ -29,8 +29,8 @@ import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar
|
||||
import com.bitwarden.ui.platform.components.button.BitwardenFilledButton
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold
|
||||
|
||||
/**
|
||||
@ -55,7 +55,7 @@ fun SetupCompleteScreen(
|
||||
topBar = {
|
||||
BitwardenTopAppBar(
|
||||
scrollBehavior = scrollBehavior,
|
||||
title = stringResource(R.string.account_setup),
|
||||
title = stringResource(BitwardenString.account_setup),
|
||||
navigationIcon = null,
|
||||
)
|
||||
},
|
||||
@ -89,7 +89,7 @@ private fun SetupCompleteContent(
|
||||
)
|
||||
Spacer(Modifier.height(24.dp))
|
||||
Text(
|
||||
text = stringResource(R.string.youre_all_set),
|
||||
text = stringResource(BitwardenString.youre_all_set),
|
||||
style = BitwardenTheme.typography.titleMedium,
|
||||
color = BitwardenTheme.colorScheme.text.primary,
|
||||
textAlign = TextAlign.Center,
|
||||
@ -99,7 +99,7 @@ private fun SetupCompleteContent(
|
||||
)
|
||||
Spacer(Modifier.height(8.dp))
|
||||
Text(
|
||||
text = stringResource(R.string.what_bitwarden_has_to_offer),
|
||||
text = stringResource(BitwardenString.what_bitwarden_has_to_offer),
|
||||
style = BitwardenTheme.typography.bodyMedium,
|
||||
color = BitwardenTheme.colorScheme.text.primary,
|
||||
textAlign = TextAlign.Center,
|
||||
@ -109,7 +109,7 @@ private fun SetupCompleteContent(
|
||||
)
|
||||
Spacer(Modifier.height(24.dp))
|
||||
BitwardenFilledButton(
|
||||
label = stringResource(R.string.continue_text),
|
||||
label = stringResource(BitwardenString.continue_text),
|
||||
onClick = onContinue,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
|
||||
@ -43,9 +43,9 @@ import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.model.WindowSize
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.bitwarden.ui.platform.util.rememberWindowSize
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.auth.feature.accountsetup.handlers.SetupUnlockHandler
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenLoadingDialog
|
||||
@ -107,9 +107,9 @@ fun SetupUnlockScreen(
|
||||
BitwardenTopAppBar(
|
||||
title = stringResource(
|
||||
id = if (state.isInitialSetup) {
|
||||
R.string.account_setup
|
||||
BitwardenString.account_setup
|
||||
} else {
|
||||
R.string.set_up_unlock
|
||||
BitwardenString.set_up_unlock
|
||||
},
|
||||
),
|
||||
scrollBehavior = scrollBehavior,
|
||||
@ -118,7 +118,9 @@ fun SetupUnlockScreen(
|
||||
} else {
|
||||
NavigationIcon(
|
||||
navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close),
|
||||
navigationIconContentDescription = stringResource(id = R.string.close),
|
||||
navigationIconContentDescription = stringResource(
|
||||
id = BitwardenString.close,
|
||||
),
|
||||
onNavigationIconClick = remember(viewModel) {
|
||||
{
|
||||
viewModel.trySendAction(SetupUnlockAction.CloseClick)
|
||||
@ -185,7 +187,7 @@ private fun SetupUnlockScreenContent(
|
||||
|
||||
Spacer(modifier = Modifier.height(height = 24.dp))
|
||||
BitwardenFilledButton(
|
||||
label = stringResource(id = R.string.continue_text),
|
||||
label = stringResource(id = BitwardenString.continue_text),
|
||||
onClick = handler.onContinueClick,
|
||||
isEnabled = state.isContinueButtonEnabled,
|
||||
modifier = Modifier
|
||||
@ -218,12 +220,12 @@ private fun SetUpLaterButton(
|
||||
if (displayConfirmation) {
|
||||
@Suppress("MaxLineLength")
|
||||
BitwardenTwoButtonDialog(
|
||||
title = stringResource(id = R.string.set_up_unlock_later),
|
||||
title = stringResource(id = BitwardenString.set_up_unlock_later),
|
||||
message = stringResource(
|
||||
id = R.string.you_can_return_to_complete_this_step_anytime_from_account_security_in_settings,
|
||||
id = BitwardenString.you_can_return_to_complete_this_step_anytime_from_account_security_in_settings,
|
||||
),
|
||||
confirmButtonText = stringResource(id = R.string.confirm),
|
||||
dismissButtonText = stringResource(id = R.string.cancel),
|
||||
confirmButtonText = stringResource(id = BitwardenString.confirm),
|
||||
dismissButtonText = stringResource(id = BitwardenString.cancel),
|
||||
onConfirmClick = {
|
||||
onConfirmClick()
|
||||
displayConfirmation = false
|
||||
@ -234,7 +236,7 @@ private fun SetUpLaterButton(
|
||||
}
|
||||
|
||||
BitwardenTextButton(
|
||||
label = stringResource(id = R.string.set_up_later),
|
||||
label = stringResource(id = BitwardenString.set_up_later),
|
||||
onClick = { displayConfirmation = true },
|
||||
modifier = modifier.testTag(tag = "SetUpLaterButton"),
|
||||
)
|
||||
@ -254,7 +256,7 @@ private fun ColumnScope.SetupUnlockHeaderCompact() {
|
||||
|
||||
Spacer(modifier = Modifier.height(height = 24.dp))
|
||||
Text(
|
||||
text = stringResource(id = R.string.set_up_unlock),
|
||||
text = stringResource(id = BitwardenString.set_up_unlock),
|
||||
style = BitwardenTheme.typography.titleMedium,
|
||||
color = BitwardenTheme.colorScheme.text.primary,
|
||||
textAlign = TextAlign.Center,
|
||||
@ -267,7 +269,7 @@ private fun ColumnScope.SetupUnlockHeaderCompact() {
|
||||
@Suppress("MaxLineLength")
|
||||
Text(
|
||||
text = stringResource(
|
||||
id = R.string.set_up_biometrics_or_choose_a_pin_code_to_quickly_access_your_vault_and_autofill_your_logins,
|
||||
id = BitwardenString.set_up_biometrics_or_choose_a_pin_code_to_quickly_access_your_vault_and_autofill_your_logins,
|
||||
),
|
||||
style = BitwardenTheme.typography.bodyMedium,
|
||||
color = BitwardenTheme.colorScheme.text.primary,
|
||||
@ -300,7 +302,7 @@ private fun SetupUnlockHeaderMedium(
|
||||
modifier = Modifier.align(alignment = Alignment.CenterVertically),
|
||||
) {
|
||||
Text(
|
||||
text = stringResource(id = R.string.set_up_unlock),
|
||||
text = stringResource(id = BitwardenString.set_up_unlock),
|
||||
style = BitwardenTheme.typography.titleMedium,
|
||||
color = BitwardenTheme.colorScheme.text.primary,
|
||||
textAlign = TextAlign.Center,
|
||||
@ -311,7 +313,7 @@ private fun SetupUnlockHeaderMedium(
|
||||
@Suppress("MaxLineLength")
|
||||
Text(
|
||||
text = stringResource(
|
||||
id = R.string.set_up_biometrics_or_choose_a_pin_code_to_quickly_access_your_vault_and_autofill_your_logins,
|
||||
id = BitwardenString.set_up_biometrics_or_choose_a_pin_code_to_quickly_access_your_vault_and_autofill_your_logins,
|
||||
),
|
||||
style = BitwardenTheme.typography.bodyMedium,
|
||||
color = BitwardenTheme.colorScheme.text.primary,
|
||||
|
||||
@ -4,9 +4,9 @@ import android.os.Parcelable
|
||||
import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.bitwarden.ui.platform.base.BaseViewModel
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus
|
||||
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
||||
import com.x8bit.bitwarden.data.platform.manager.BiometricsEncryptionManager
|
||||
@ -112,8 +112,8 @@ class SetupUnlockViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = SetupUnlockState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.generic_error_message.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.generic_error_message.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -141,7 +141,7 @@ class SetupUnlockViewModel @Inject constructor(
|
||||
) {
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = SetupUnlockState.DialogState.Loading(R.string.saving.asText()),
|
||||
dialogState = SetupUnlockState.DialogState.Loading(BitwardenString.saving.asText()),
|
||||
isUnlockWithBiometricsEnabled = true,
|
||||
)
|
||||
}
|
||||
|
||||
@ -38,8 +38,8 @@ import com.bitwarden.ui.platform.components.button.BitwardenFilledButton
|
||||
import com.bitwarden.ui.platform.components.button.BitwardenOutlinedButton
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.auth.feature.checkemail.handlers.rememberCheckEmailHandler
|
||||
import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold
|
||||
import com.x8bit.bitwarden.ui.platform.composition.LocalIntentManager
|
||||
@ -77,10 +77,10 @@ fun CheckEmailScreen(
|
||||
.nestedScroll(scrollBehavior.nestedScrollConnection),
|
||||
topBar = {
|
||||
BitwardenTopAppBar(
|
||||
title = stringResource(id = R.string.create_account),
|
||||
title = stringResource(id = BitwardenString.create_account),
|
||||
scrollBehavior = scrollBehavior,
|
||||
navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_back),
|
||||
navigationIconContentDescription = stringResource(id = R.string.back),
|
||||
navigationIconContentDescription = stringResource(id = BitwardenString.back),
|
||||
onNavigationIconClick = handler.onBackClick,
|
||||
)
|
||||
},
|
||||
@ -126,7 +126,7 @@ private fun CheckEmailContent(
|
||||
)
|
||||
Spacer(modifier = Modifier.height(32.dp))
|
||||
Text(
|
||||
text = stringResource(id = R.string.check_your_email),
|
||||
text = stringResource(id = BitwardenString.check_your_email),
|
||||
textAlign = TextAlign.Center,
|
||||
style = BitwardenTheme.typography.titleMedium,
|
||||
color = BitwardenTheme.colorScheme.text.primary,
|
||||
@ -139,7 +139,7 @@ private fun CheckEmailContent(
|
||||
|
||||
Text(
|
||||
text = annotatedStringResource(
|
||||
id = R.string.we_sent_an_email_to,
|
||||
id = BitwardenString.we_sent_an_email_to,
|
||||
args = arrayOf(email),
|
||||
emphasisHighlightStyle = SpanStyle(
|
||||
color = BitwardenTheme.colorScheme.text.primary,
|
||||
@ -158,7 +158,7 @@ private fun CheckEmailContent(
|
||||
@Suppress("MaxLineLength")
|
||||
Text(
|
||||
text = stringResource(
|
||||
R.string.select_the_link_in_the_email_to_verify_your_email_address_and_continue_creating_your_account,
|
||||
BitwardenString.select_the_link_in_the_email_to_verify_your_email_address_and_continue_creating_your_account,
|
||||
),
|
||||
style = BitwardenTheme.typography.bodyMedium,
|
||||
color = BitwardenTheme.colorScheme.text.primary,
|
||||
@ -170,7 +170,7 @@ private fun CheckEmailContent(
|
||||
)
|
||||
Spacer(modifier = Modifier.height(32.dp))
|
||||
BitwardenFilledButton(
|
||||
label = stringResource(id = R.string.open_email_app),
|
||||
label = stringResource(id = BitwardenString.open_email_app),
|
||||
onClick = onOpenEmailAppClick,
|
||||
modifier = Modifier
|
||||
.testTag("OpenEmailApp")
|
||||
@ -179,7 +179,7 @@ private fun CheckEmailContent(
|
||||
)
|
||||
Spacer(modifier = Modifier.height(12.dp))
|
||||
BitwardenOutlinedButton(
|
||||
label = stringResource(R.string.change_email_address),
|
||||
label = stringResource(BitwardenString.change_email_address),
|
||||
onClick = onChangeEmailClick,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
|
||||
@ -44,9 +44,9 @@ import com.bitwarden.ui.platform.components.toggle.BitwardenSwitch
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.model.WindowSize
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.bitwarden.ui.platform.util.rememberWindowSize
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.auth.feature.completeregistration.handlers.CompleteRegistrationHandler
|
||||
import com.x8bit.bitwarden.ui.auth.feature.completeregistration.handlers.rememberCompleteRegistrationHandler
|
||||
import com.x8bit.bitwarden.ui.platform.components.card.BitwardenActionCardSmall
|
||||
@ -115,8 +115,8 @@ fun CompleteRegistrationScreen(
|
||||
BitwardenTwoButtonDialog(
|
||||
title = dialog.title(),
|
||||
message = dialog.message(),
|
||||
confirmButtonText = stringResource(id = R.string.yes),
|
||||
dismissButtonText = stringResource(id = R.string.no),
|
||||
confirmButtonText = stringResource(id = BitwardenString.yes),
|
||||
dismissButtonText = stringResource(id = BitwardenString.no),
|
||||
onConfirmClick = handler.onContinueWithBreachedPasswordClick,
|
||||
onDismissClick = handler.onDismissErrorDialog,
|
||||
onDismissRequest = handler.onDismissErrorDialog,
|
||||
@ -124,7 +124,7 @@ fun CompleteRegistrationScreen(
|
||||
}
|
||||
|
||||
CompleteRegistrationDialog.Loading -> {
|
||||
BitwardenLoadingDialog(text = stringResource(id = R.string.create_account))
|
||||
BitwardenLoadingDialog(text = stringResource(id = BitwardenString.create_account))
|
||||
}
|
||||
|
||||
null -> Unit
|
||||
@ -137,10 +137,10 @@ fun CompleteRegistrationScreen(
|
||||
.nestedScroll(scrollBehavior.nestedScrollConnection),
|
||||
topBar = {
|
||||
BitwardenTopAppBar(
|
||||
title = stringResource(id = R.string.create_account),
|
||||
title = stringResource(id = BitwardenString.create_account),
|
||||
scrollBehavior = scrollBehavior,
|
||||
navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_back),
|
||||
navigationIconContentDescription = stringResource(id = R.string.back),
|
||||
navigationIconContentDescription = stringResource(id = BitwardenString.back),
|
||||
onNavigationIconClick = handler.onBackClick,
|
||||
)
|
||||
},
|
||||
@ -159,7 +159,7 @@ fun CompleteRegistrationScreen(
|
||||
isCheckDataBreachesToggled = state.isCheckDataBreachesToggled,
|
||||
handler = handler,
|
||||
nextButtonEnabled = state.validSubmissionReady,
|
||||
callToActionText = stringResource(R.string.next),
|
||||
callToActionText = stringResource(BitwardenString.next),
|
||||
minimumPasswordLength = state.minimumPasswordLength,
|
||||
)
|
||||
Spacer(modifier = Modifier.height(height = 16.dp))
|
||||
@ -194,8 +194,8 @@ private fun CompleteRegistrationContent(
|
||||
Spacer(modifier = Modifier.height(24.dp))
|
||||
BitwardenActionCardSmall(
|
||||
actionIcon = rememberVectorPainter(id = BitwardenDrawable.ic_question_circle),
|
||||
actionText = stringResource(id = R.string.what_makes_a_password_strong),
|
||||
callToActionText = stringResource(id = R.string.learn_more),
|
||||
actionText = stringResource(id = BitwardenString.what_makes_a_password_strong),
|
||||
callToActionText = stringResource(id = BitwardenString.learn_more),
|
||||
callToActionTextColor = BitwardenTheme.colorScheme.text.interaction,
|
||||
colors = bitwardenCardColors(
|
||||
containerColor = BitwardenTheme.colorScheme.background.primary,
|
||||
@ -209,7 +209,7 @@ private fun CompleteRegistrationContent(
|
||||
|
||||
var showPassword by rememberSaveable { mutableStateOf(false) }
|
||||
BitwardenPasswordField(
|
||||
label = stringResource(id = R.string.master_password_required),
|
||||
label = stringResource(id = BitwardenString.master_password_required),
|
||||
showPassword = showPassword,
|
||||
showPasswordChange = { showPassword = it },
|
||||
value = passwordInput,
|
||||
@ -231,7 +231,7 @@ private fun CompleteRegistrationContent(
|
||||
.standardHorizontalMargin(),
|
||||
)
|
||||
BitwardenPasswordField(
|
||||
label = stringResource(id = R.string.retype_master_password_required),
|
||||
label = stringResource(id = BitwardenString.retype_master_password_required),
|
||||
value = confirmPasswordInput,
|
||||
showPassword = showPassword,
|
||||
showPasswordChange = { showPassword = it },
|
||||
@ -245,14 +245,15 @@ private fun CompleteRegistrationContent(
|
||||
)
|
||||
BitwardenTextField(
|
||||
label = stringResource(
|
||||
id = R.string.master_password_hint_not_specified,
|
||||
id = BitwardenString.master_password_hint_not_specified,
|
||||
),
|
||||
value = passwordHintInput,
|
||||
onValueChange = handler.onPasswordHintChange,
|
||||
supportingContent = {
|
||||
Text(
|
||||
text = stringResource(
|
||||
id = R.string.bitwarden_cannot_recover_a_lost_or_forgotten_master_password,
|
||||
id = BitwardenString
|
||||
.bitwarden_cannot_recover_a_lost_or_forgotten_master_password,
|
||||
),
|
||||
style = BitwardenTheme.typography.bodySmall,
|
||||
color = BitwardenTheme.colorScheme.text.secondary,
|
||||
@ -260,7 +261,7 @@ private fun CompleteRegistrationContent(
|
||||
)
|
||||
BitwardenClickableText(
|
||||
label = stringResource(
|
||||
id = R.string.learn_about_other_ways_to_prevent_account_lockout,
|
||||
id = BitwardenString.learn_about_other_ways_to_prevent_account_lockout,
|
||||
),
|
||||
onClick = handler.onLearnToPreventLockout,
|
||||
style = BitwardenTheme.typography.labelMedium,
|
||||
@ -275,7 +276,9 @@ private fun CompleteRegistrationContent(
|
||||
)
|
||||
Spacer(modifier = Modifier.height(height = 8.dp))
|
||||
BitwardenSwitch(
|
||||
label = stringResource(id = R.string.check_known_data_breaches_for_this_password),
|
||||
label = stringResource(
|
||||
id = BitwardenString.check_known_data_breaches_for_this_password,
|
||||
),
|
||||
isChecked = isCheckDataBreachesToggled,
|
||||
onCheckedChange = handler.onCheckDataBreachesToggle,
|
||||
cardStyle = CardStyle.Full,
|
||||
@ -336,7 +339,7 @@ private fun OrderedHeaderContent() {
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
) {
|
||||
Text(
|
||||
text = stringResource(R.string.choose_your_master_password),
|
||||
text = stringResource(BitwardenString.choose_your_master_password),
|
||||
style = BitwardenTheme.typography.titleMedium,
|
||||
color = BitwardenTheme.colorScheme.text.primary,
|
||||
textAlign = TextAlign.Center,
|
||||
@ -344,7 +347,7 @@ private fun OrderedHeaderContent() {
|
||||
Spacer(modifier = Modifier.height(8.dp))
|
||||
Text(
|
||||
text = stringResource(
|
||||
R.string.choose_a_unique_and_strong_password_to_keep_your_information_safe,
|
||||
BitwardenString.choose_a_unique_and_strong_password_to_keep_your_information_safe,
|
||||
),
|
||||
style = BitwardenTheme.typography.bodyMedium,
|
||||
color = BitwardenTheme.colorScheme.text.primary,
|
||||
|
||||
@ -5,9 +5,9 @@ import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.bitwarden.ui.platform.base.BaseViewModel
|
||||
import com.bitwarden.ui.platform.base.util.isValidEmail
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus
|
||||
import com.x8bit.bitwarden.data.auth.datasource.sdk.model.PasswordStrength
|
||||
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
||||
@ -145,7 +145,7 @@ class CompleteRegistrationViewModel @Inject constructor(
|
||||
viewModelScope.launch {
|
||||
sendEvent(
|
||||
CompleteRegistrationEvent.ShowToast(
|
||||
message = R.string.email_verified.asText(),
|
||||
message = BitwardenString.email_verified.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -188,9 +188,9 @@ class CompleteRegistrationViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = CompleteRegistrationDialog.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = registerAccountResult.errorMessage?.asText()
|
||||
?: R.string.generic_error_message.asText(),
|
||||
?: BitwardenString.generic_error_message.asText(),
|
||||
error = registerAccountResult.error,
|
||||
),
|
||||
)
|
||||
@ -217,8 +217,8 @@ class CompleteRegistrationViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = CompleteRegistrationDialog.HaveIBeenPwned(
|
||||
title = R.string.exposed_master_password.asText(),
|
||||
message = R.string.password_found_in_a_data_breach_alert_description.asText(),
|
||||
title = BitwardenString.exposed_master_password.asText(),
|
||||
message = BitwardenString.password_found_in_a_data_breach_alert_description.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -228,8 +228,8 @@ class CompleteRegistrationViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = CompleteRegistrationDialog.HaveIBeenPwned(
|
||||
title = R.string.weak_and_exposed_master_password.asText(),
|
||||
message = R.string.weak_password_identified_and_found_in_a_data_breach_alert_description.asText(),
|
||||
title = BitwardenString.weak_and_exposed_master_password.asText(),
|
||||
message = BitwardenString.weak_password_identified_and_found_in_a_data_breach_alert_description.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -239,8 +239,8 @@ class CompleteRegistrationViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = CompleteRegistrationDialog.HaveIBeenPwned(
|
||||
title = R.string.weak_master_password.asText(),
|
||||
message = R.string.weak_password_identified_use_a_strong_password_to_protect_your_account.asText(),
|
||||
title = BitwardenString.weak_master_password.asText(),
|
||||
message = BitwardenString.weak_password_identified_use_a_strong_password_to_protect_your_account.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -252,7 +252,7 @@ class CompleteRegistrationViewModel @Inject constructor(
|
||||
clearDialogState()
|
||||
sendEvent(
|
||||
CompleteRegistrationEvent.ShowToast(
|
||||
message = R.string.account_created_success.asText(),
|
||||
message = BitwardenString.account_created_success.asText(),
|
||||
),
|
||||
)
|
||||
|
||||
@ -307,9 +307,9 @@ class CompleteRegistrationViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = CompleteRegistrationDialog.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.validation_field_required
|
||||
.asText(R.string.email_address.asText()),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.validation_field_required
|
||||
.asText(BitwardenString.email_address.asText()),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -319,8 +319,8 @@ class CompleteRegistrationViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = CompleteRegistrationDialog.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.invalid_email.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.invalid_email.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -330,8 +330,8 @@ class CompleteRegistrationViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = CompleteRegistrationDialog.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.master_password_length_val_message_x
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.master_password_length_val_message_x
|
||||
.asText(MIN_PASSWORD_LENGTH),
|
||||
),
|
||||
)
|
||||
@ -342,8 +342,8 @@ class CompleteRegistrationViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = CompleteRegistrationDialog.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.master_password_confirmation_val_message.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.master_password_confirmation_val_message.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
@ -29,9 +29,9 @@ import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.R
|
||||
|
||||
/**
|
||||
* Draws a password indicator that displays password strength based on the given [state].
|
||||
@ -75,11 +75,11 @@ fun PasswordStrengthIndicator(
|
||||
)
|
||||
val label = when (state) {
|
||||
PasswordStrengthState.NONE -> "".asText()
|
||||
PasswordStrengthState.WEAK_1 -> R.string.weak.asText()
|
||||
PasswordStrengthState.WEAK_2 -> R.string.weak.asText()
|
||||
PasswordStrengthState.WEAK_3 -> R.string.weak.asText()
|
||||
PasswordStrengthState.GOOD -> R.string.good.asText()
|
||||
PasswordStrengthState.STRONG -> R.string.strong.asText()
|
||||
PasswordStrengthState.WEAK_1 -> BitwardenString.weak.asText()
|
||||
PasswordStrengthState.WEAK_2 -> BitwardenString.weak.asText()
|
||||
PasswordStrengthState.WEAK_3 -> BitwardenString.weak.asText()
|
||||
PasswordStrengthState.GOOD -> BitwardenString.good.asText()
|
||||
PasswordStrengthState.STRONG -> BitwardenString.strong.asText()
|
||||
}
|
||||
Column(
|
||||
modifier = modifier,
|
||||
@ -154,7 +154,7 @@ private fun MinimumCharacterCount(
|
||||
}
|
||||
Spacer(modifier = Modifier.width(2.dp))
|
||||
Text(
|
||||
text = stringResource(R.string.minimum_characters, minimumCharacterCount),
|
||||
text = stringResource(BitwardenString.minimum_characters, minimumCharacterCount),
|
||||
color = BitwardenTheme.colorScheme.text.secondary,
|
||||
style = BitwardenTheme.typography.labelSmall,
|
||||
)
|
||||
|
||||
@ -39,8 +39,8 @@ import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.components.toggle.BitwardenSwitch
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.auth.feature.completeregistration.PasswordStrengthIndicator
|
||||
import com.x8bit.bitwarden.ui.auth.feature.createaccount.CreateAccountAction.AcceptPoliciesToggle
|
||||
import com.x8bit.bitwarden.ui.auth.feature.createaccount.CreateAccountAction.CheckDataBreachesToggle
|
||||
@ -120,8 +120,8 @@ fun CreateAccountScreen(
|
||||
BitwardenTwoButtonDialog(
|
||||
title = dialog.title(),
|
||||
message = dialog.message(),
|
||||
confirmButtonText = stringResource(id = R.string.yes),
|
||||
dismissButtonText = stringResource(id = R.string.no),
|
||||
confirmButtonText = stringResource(id = BitwardenString.yes),
|
||||
dismissButtonText = stringResource(id = BitwardenString.no),
|
||||
onConfirmClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(ContinueWithBreachedPasswordClick) }
|
||||
},
|
||||
@ -135,7 +135,7 @@ fun CreateAccountScreen(
|
||||
}
|
||||
|
||||
CreateAccountDialog.Loading -> {
|
||||
BitwardenLoadingDialog(text = stringResource(id = R.string.create_account))
|
||||
BitwardenLoadingDialog(text = stringResource(id = BitwardenString.create_account))
|
||||
}
|
||||
|
||||
null -> Unit
|
||||
@ -148,16 +148,16 @@ fun CreateAccountScreen(
|
||||
.nestedScroll(scrollBehavior.nestedScrollConnection),
|
||||
topBar = {
|
||||
BitwardenTopAppBar(
|
||||
title = stringResource(id = R.string.create_account),
|
||||
title = stringResource(id = BitwardenString.create_account),
|
||||
scrollBehavior = scrollBehavior,
|
||||
navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close),
|
||||
navigationIconContentDescription = stringResource(id = R.string.close),
|
||||
navigationIconContentDescription = stringResource(id = BitwardenString.close),
|
||||
onNavigationIconClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(CloseClick) }
|
||||
},
|
||||
actions = {
|
||||
BitwardenTextButton(
|
||||
label = stringResource(id = R.string.submit),
|
||||
label = stringResource(id = BitwardenString.submit),
|
||||
onClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(SubmitClick) }
|
||||
},
|
||||
@ -174,7 +174,7 @@ fun CreateAccountScreen(
|
||||
) {
|
||||
Spacer(modifier = Modifier.height(height = 12.dp))
|
||||
BitwardenTextField(
|
||||
label = stringResource(id = R.string.email_address),
|
||||
label = stringResource(id = BitwardenString.email_address),
|
||||
value = state.emailInput,
|
||||
onValueChange = remember(viewModel) {
|
||||
{ viewModel.trySendAction(EmailInputChange(it)) }
|
||||
@ -189,7 +189,7 @@ fun CreateAccountScreen(
|
||||
Spacer(modifier = Modifier.height(height = 8.dp))
|
||||
var showPassword by rememberSaveable { mutableStateOf(false) }
|
||||
BitwardenPasswordField(
|
||||
label = stringResource(id = R.string.master_password),
|
||||
label = stringResource(id = BitwardenString.master_password),
|
||||
showPassword = showPassword,
|
||||
showPasswordChange = { showPassword = it },
|
||||
value = state.passwordInput,
|
||||
@ -217,7 +217,7 @@ fun CreateAccountScreen(
|
||||
.standardHorizontalMargin(),
|
||||
)
|
||||
BitwardenPasswordField(
|
||||
label = stringResource(id = R.string.retype_master_password),
|
||||
label = stringResource(id = BitwardenString.retype_master_password),
|
||||
value = state.confirmPasswordInput,
|
||||
showPassword = showPassword,
|
||||
showPasswordChange = { showPassword = it },
|
||||
@ -232,12 +232,13 @@ fun CreateAccountScreen(
|
||||
.standardHorizontalMargin(),
|
||||
)
|
||||
BitwardenTextField(
|
||||
label = stringResource(id = R.string.master_password_hint),
|
||||
label = stringResource(id = BitwardenString.master_password_hint),
|
||||
value = state.passwordHintInput,
|
||||
onValueChange = remember(viewModel) {
|
||||
{ viewModel.trySendAction(PasswordHintChange(it)) }
|
||||
},
|
||||
supportingText = stringResource(id = R.string.master_password_hint_description),
|
||||
supportingText = stringResource(
|
||||
id = BitwardenString.master_password_hint_description),
|
||||
textFieldTestTag = "MasterPasswordHintLabel",
|
||||
cardStyle = CardStyle.Bottom,
|
||||
modifier = Modifier
|
||||
@ -246,7 +247,8 @@ fun CreateAccountScreen(
|
||||
)
|
||||
Spacer(modifier = Modifier.height(height = 8.dp))
|
||||
BitwardenSwitch(
|
||||
label = stringResource(id = R.string.check_known_data_breaches_for_this_password),
|
||||
label = stringResource(
|
||||
id = BitwardenString.check_known_data_breaches_for_this_password),
|
||||
isChecked = state.isCheckDataBreachesToggled,
|
||||
onCheckedChange = remember(viewModel) {
|
||||
{ newState ->
|
||||
@ -288,8 +290,8 @@ private fun TermsAndPrivacySwitch(
|
||||
onPrivacyPolicyClick: () -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
val strTerms = stringResource(id = R.string.terms_of_service)
|
||||
val strPrivacy = stringResource(id = R.string.privacy_policy)
|
||||
val strTerms = stringResource(id = BitwardenString.terms_of_service)
|
||||
val strPrivacy = stringResource(id = BitwardenString.privacy_policy)
|
||||
BitwardenSwitch(
|
||||
modifier = modifier.semantics(mergeDescendants = true) {
|
||||
customActions = listOf(
|
||||
@ -310,7 +312,7 @@ private fun TermsAndPrivacySwitch(
|
||||
)
|
||||
},
|
||||
label = annotatedStringResource(
|
||||
id = R.string
|
||||
id = BitwardenString
|
||||
.by_activating_this_switch_you_agree_to_the_terms_of_service_and_privacy_policy,
|
||||
onAnnotationClick = {
|
||||
when (it) {
|
||||
|
||||
@ -6,10 +6,10 @@ import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.bitwarden.ui.platform.base.BaseViewModel
|
||||
import com.bitwarden.ui.platform.base.util.isValidEmail
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.bitwarden.ui.util.concat
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.auth.datasource.sdk.model.PasswordStrength
|
||||
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.PasswordStrengthResult
|
||||
@ -142,8 +142,8 @@ class CreateAccountViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = CreateAccountDialog.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.captcha_failed.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.captcha_failed.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -177,9 +177,9 @@ class CreateAccountViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = CreateAccountDialog.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = registerAccountResult.errorMessage?.asText()
|
||||
?: R.string.generic_error_message.asText(),
|
||||
?: BitwardenString.generic_error_message.asText(),
|
||||
error = registerAccountResult.error,
|
||||
),
|
||||
)
|
||||
@ -200,8 +200,8 @@ class CreateAccountViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = CreateAccountDialog.HaveIBeenPwned(
|
||||
title = R.string.exposed_master_password.asText(),
|
||||
message = R.string.password_found_in_a_data_breach_alert_description.asText(),
|
||||
title = BitwardenString.exposed_master_password.asText(),
|
||||
message = BitwardenString.password_found_in_a_data_breach_alert_description.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -211,8 +211,8 @@ class CreateAccountViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = CreateAccountDialog.HaveIBeenPwned(
|
||||
title = R.string.weak_and_exposed_master_password.asText(),
|
||||
message = R.string.weak_password_identified_and_found_in_a_data_breach_alert_description.asText(),
|
||||
title = BitwardenString.weak_and_exposed_master_password.asText(),
|
||||
message = BitwardenString.weak_password_identified_and_found_in_a_data_breach_alert_description.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -222,8 +222,8 @@ class CreateAccountViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = CreateAccountDialog.HaveIBeenPwned(
|
||||
title = R.string.weak_master_password.asText(),
|
||||
message = R.string.weak_password_identified_use_a_strong_password_to_protect_your_account.asText(),
|
||||
title = BitwardenString.weak_master_password.asText(),
|
||||
message = BitwardenString.weak_password_identified_use_a_strong_password_to_protect_your_account.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -295,9 +295,9 @@ class CreateAccountViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = CreateAccountDialog.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.validation_field_required
|
||||
.asText(R.string.email_address.asText()),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.validation_field_required
|
||||
.asText(BitwardenString.email_address.asText()),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -307,8 +307,8 @@ class CreateAccountViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = CreateAccountDialog.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.invalid_email.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.invalid_email.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -318,8 +318,8 @@ class CreateAccountViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = CreateAccountDialog.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.master_password_length_val_message_x
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.master_password_length_val_message_x
|
||||
.asText(MIN_PASSWORD_LENGTH),
|
||||
),
|
||||
)
|
||||
@ -330,8 +330,8 @@ class CreateAccountViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = CreateAccountDialog.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.master_password_confirmation_val_message.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.master_password_confirmation_val_message.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -341,8 +341,8 @@ class CreateAccountViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = CreateAccountDialog.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.accept_policies_error.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.accept_policies_error.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -412,10 +412,10 @@ data class CreateAccountState(
|
||||
// Important: Your master password cannot be recovered if you forget it! 12
|
||||
// characters minimum
|
||||
@Suppress("MaxLineLength")
|
||||
get() = R.string.important.asText()
|
||||
get() = BitwardenString.important.asText()
|
||||
.concat(
|
||||
": ".asText(),
|
||||
R.string.your_master_password_cannot_be_recovered_if_you_forget_it_x_characters_minimum
|
||||
BitwardenString.your_master_password_cannot_be_recovered_if_you_forget_it_x_characters_minimum
|
||||
.asText(MIN_PASSWORD_LENGTH),
|
||||
)
|
||||
|
||||
|
||||
@ -31,6 +31,7 @@ import com.bitwarden.ui.platform.components.button.BitwardenTextButton
|
||||
import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog
|
||||
@ -100,13 +101,13 @@ fun EnterpriseSignOnScreen(
|
||||
title = stringResource(id = R.string.app_name),
|
||||
scrollBehavior = scrollBehavior,
|
||||
navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close),
|
||||
navigationIconContentDescription = stringResource(id = R.string.close),
|
||||
navigationIconContentDescription = stringResource(id = BitwardenString.close),
|
||||
onNavigationIconClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(EnterpriseSignOnAction.CloseButtonClick) }
|
||||
},
|
||||
actions = {
|
||||
BitwardenTextButton(
|
||||
label = stringResource(id = R.string.log_in_verb),
|
||||
label = stringResource(id = BitwardenString.log_in_verb),
|
||||
onClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(EnterpriseSignOnAction.LogInClick) }
|
||||
},
|
||||
@ -140,7 +141,7 @@ private fun EnterpriseSignOnScreenContent(
|
||||
) {
|
||||
Spacer(modifier = Modifier.height(height = 12.dp))
|
||||
Text(
|
||||
text = stringResource(id = R.string.log_in_sso_summary),
|
||||
text = stringResource(id = BitwardenString.log_in_sso_summary),
|
||||
textAlign = TextAlign.Start,
|
||||
style = BitwardenTheme.typography.bodyMedium,
|
||||
color = BitwardenTheme.colorScheme.text.primary,
|
||||
@ -157,7 +158,7 @@ private fun EnterpriseSignOnScreenContent(
|
||||
.fillMaxWidth(),
|
||||
value = state.orgIdentifierInput,
|
||||
onValueChange = onOrgIdentifierInputChange,
|
||||
label = stringResource(id = R.string.org_identifier),
|
||||
label = stringResource(id = BitwardenString.org_identifier),
|
||||
textFieldTestTag = "OrgSSOIdentifierEntry",
|
||||
cardStyle = CardStyle.Full,
|
||||
)
|
||||
@ -190,13 +191,13 @@ private fun EnterpriseSignOnDialogs(
|
||||
|
||||
is EnterpriseSignOnState.DialogState.KeyConnectorDomain -> {
|
||||
BitwardenTwoButtonDialog(
|
||||
title = stringResource(R.string.confirm_key_connector_domain),
|
||||
title = stringResource(BitwardenString.confirm_key_connector_domain),
|
||||
message = stringResource(
|
||||
R.string.please_confirm_domain_with_admin,
|
||||
BitwardenString.please_confirm_domain_with_admin,
|
||||
dialogState.keyConnectorDomain,
|
||||
),
|
||||
confirmButtonText = stringResource(R.string.confirm),
|
||||
dismissButtonText = stringResource(R.string.cancel),
|
||||
confirmButtonText = stringResource(BitwardenString.confirm),
|
||||
dismissButtonText = stringResource(BitwardenString.cancel),
|
||||
onConfirmClick = onConfirmKeyConnectorDomain,
|
||||
onDismissRequest = onDismissKeyConnectorDomain,
|
||||
onDismissClick = onDismissKeyConnectorDomain,
|
||||
|
||||
@ -7,9 +7,9 @@ import androidx.lifecycle.viewModelScope
|
||||
import com.bitwarden.data.repository.util.baseIdentityUrl
|
||||
import com.bitwarden.data.repository.util.baseWebVaultUrlOrDefault
|
||||
import com.bitwarden.ui.platform.base.BaseViewModel
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.LoginResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.PrevalidateSsoResult
|
||||
@ -163,7 +163,7 @@ class EnterpriseSignOnViewModel @Inject constructor(
|
||||
is LoginResult.Error -> {
|
||||
showError(
|
||||
message = loginResult.errorMessage?.asText()
|
||||
?: R.string.login_sso_error.asText(),
|
||||
?: BitwardenString.login_sso_error.asText(),
|
||||
error = loginResult.error,
|
||||
)
|
||||
}
|
||||
@ -171,7 +171,7 @@ class EnterpriseSignOnViewModel @Inject constructor(
|
||||
is LoginResult.UnofficialServerError -> {
|
||||
@Suppress("MaxLineLength")
|
||||
showError(
|
||||
message = R.string
|
||||
message = BitwardenString
|
||||
.this_is_not_a_recognized_bitwarden_server_you_may_need_to_check_with_your_provider_or_update_your_server
|
||||
.asText(),
|
||||
)
|
||||
@ -200,20 +200,22 @@ class EnterpriseSignOnViewModel @Inject constructor(
|
||||
.baseWebVaultUrlOrDefault
|
||||
|
||||
showError(
|
||||
message = R.string
|
||||
message = BitwardenString
|
||||
.this_account_will_soon_be_deleted_log_in_at_x_to_continue_using_bitwarden
|
||||
.asText(vaultUrl.toUriOrNull()?.host ?: vaultUrl),
|
||||
)
|
||||
}
|
||||
|
||||
LoginResult.CertificateError -> {
|
||||
showError(message = R.string.we_couldnt_verify_the_servers_certificate.asText())
|
||||
showError(
|
||||
message = BitwardenString.we_couldnt_verify_the_servers_certificate.asText(),
|
||||
)
|
||||
}
|
||||
|
||||
is LoginResult.NewDeviceVerification -> {
|
||||
showError(
|
||||
message = loginResult.errorMessage?.asText()
|
||||
?: R.string.login_sso_error.asText(),
|
||||
?: BitwardenString.login_sso_error.asText(),
|
||||
)
|
||||
}
|
||||
|
||||
@ -236,7 +238,7 @@ class EnterpriseSignOnViewModel @Inject constructor(
|
||||
action: EnterpriseSignOnAction.Internal.OnSsoPrevalidationFailure,
|
||||
) {
|
||||
showError(
|
||||
message = action.message?.asText() ?: R.string.login_sso_error.asText(),
|
||||
message = action.message?.asText() ?: BitwardenString.login_sso_error.asText(),
|
||||
error = action.error,
|
||||
)
|
||||
}
|
||||
@ -310,8 +312,8 @@ class EnterpriseSignOnViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = EnterpriseSignOnState.DialogState.Error(
|
||||
title = R.string.log_in_denied.asText(),
|
||||
message = R.string.captcha_failed.asText(),
|
||||
title = BitwardenString.log_in_denied.asText(),
|
||||
message = BitwardenString.captcha_failed.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -331,8 +333,8 @@ class EnterpriseSignOnViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = EnterpriseSignOnState.DialogState.Error(
|
||||
title = R.string.internet_connection_required_title.asText(),
|
||||
message = R.string.internet_connection_required_message.asText(),
|
||||
title = BitwardenString.internet_connection_required_title.asText(),
|
||||
message = BitwardenString.internet_connection_required_message.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -342,8 +344,8 @@ class EnterpriseSignOnViewModel @Inject constructor(
|
||||
val organizationIdentifier = state.orgIdentifierInput
|
||||
if (organizationIdentifier.isBlank()) {
|
||||
showError(
|
||||
message = R.string.validation_field_required.asText(
|
||||
R.string.org_identifier.asText(),
|
||||
message = BitwardenString.validation_field_required.asText(
|
||||
BitwardenString.org_identifier.asText(),
|
||||
),
|
||||
)
|
||||
return
|
||||
@ -406,7 +408,9 @@ class EnterpriseSignOnViewModel @Inject constructor(
|
||||
private fun checkOrganizationDomainSsoDetails() {
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = EnterpriseSignOnState.DialogState.Loading(R.string.loading.asText()),
|
||||
dialogState = EnterpriseSignOnState.DialogState.Loading(
|
||||
BitwardenString.loading.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
viewModelScope.launch {
|
||||
@ -451,8 +455,8 @@ class EnterpriseSignOnViewModel @Inject constructor(
|
||||
}
|
||||
|
||||
private fun showError(
|
||||
title: Text = R.string.an_error_has_occurred.asText(),
|
||||
message: Text = R.string.login_sso_error.asText(),
|
||||
title: Text = BitwardenString.an_error_has_occurred.asText(),
|
||||
message: Text = BitwardenString.login_sso_error.asText(),
|
||||
error: Throwable? = null,
|
||||
) {
|
||||
mutableStateFlow.update {
|
||||
@ -470,7 +474,7 @@ class EnterpriseSignOnViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = EnterpriseSignOnState.DialogState.Loading(
|
||||
R.string.logging_in.asText(),
|
||||
BitwardenString.logging_in.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
@ -34,8 +34,8 @@ import com.bitwarden.ui.platform.components.button.BitwardenTextButton
|
||||
import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.x8bit.bitwarden.BuildConfig
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenClientCertificateDialog
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenTwoButtonDialog
|
||||
@ -99,7 +99,7 @@ fun EnvironmentScreen(
|
||||
when (val dialog = state.dialog) {
|
||||
is EnvironmentState.DialogState.Error -> {
|
||||
BitwardenBasicDialog(
|
||||
title = stringResource(id = R.string.an_error_has_occurred),
|
||||
title = stringResource(id = BitwardenString.an_error_has_occurred),
|
||||
message = dialog.message(),
|
||||
onDismissRequest = remember(viewModel) {
|
||||
{ viewModel.trySendAction(EnvironmentAction.DialogDismiss) }
|
||||
@ -134,15 +134,15 @@ fun EnvironmentScreen(
|
||||
is EnvironmentState.DialogState.SystemCertificateWarningDialog -> {
|
||||
@Suppress("MaxLineLength")
|
||||
BitwardenTwoButtonDialog(
|
||||
title = stringResource(R.string.warning),
|
||||
title = stringResource(BitwardenString.warning),
|
||||
message = stringResource(
|
||||
R.string.system_certificates_are_not_as_secure_as_importing_certificates_to_bitwarden,
|
||||
BitwardenString.system_certificates_are_not_as_secure_as_importing_certificates_to_bitwarden,
|
||||
),
|
||||
confirmButtonText = stringResource(R.string.continue_text),
|
||||
confirmButtonText = stringResource(BitwardenString.continue_text),
|
||||
onConfirmClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(EnvironmentAction.ConfirmChooseSystemCertificateClick) }
|
||||
},
|
||||
dismissButtonText = stringResource(R.string.cancel),
|
||||
dismissButtonText = stringResource(BitwardenString.cancel),
|
||||
onDismissClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(EnvironmentAction.DialogDismiss) }
|
||||
},
|
||||
@ -156,8 +156,8 @@ fun EnvironmentScreen(
|
||||
BitwardenTwoButtonDialog(
|
||||
title = dialog.title(),
|
||||
message = dialog.message(),
|
||||
confirmButtonText = stringResource(R.string.replace_certificate),
|
||||
dismissButtonText = stringResource(R.string.cancel),
|
||||
confirmButtonText = stringResource(BitwardenString.replace_certificate),
|
||||
dismissButtonText = stringResource(BitwardenString.cancel),
|
||||
onConfirmClick = remember(viewModel) {
|
||||
{
|
||||
viewModel.trySendAction(
|
||||
@ -185,16 +185,16 @@ fun EnvironmentScreen(
|
||||
.nestedScroll(scrollBehavior.nestedScrollConnection),
|
||||
topBar = {
|
||||
BitwardenTopAppBar(
|
||||
title = stringResource(id = R.string.settings),
|
||||
title = stringResource(id = BitwardenString.settings),
|
||||
scrollBehavior = scrollBehavior,
|
||||
navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close),
|
||||
navigationIconContentDescription = stringResource(id = R.string.close),
|
||||
navigationIconContentDescription = stringResource(id = BitwardenString.close),
|
||||
onNavigationIconClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(EnvironmentAction.CloseClick) }
|
||||
},
|
||||
actions = {
|
||||
BitwardenTextButton(
|
||||
label = stringResource(id = R.string.save),
|
||||
label = stringResource(id = BitwardenString.save),
|
||||
onClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(EnvironmentAction.SaveClick) }
|
||||
},
|
||||
@ -214,7 +214,7 @@ fun EnvironmentScreen(
|
||||
) {
|
||||
Spacer(modifier = Modifier.height(height = 12.dp))
|
||||
BitwardenListHeaderText(
|
||||
label = stringResource(id = R.string.self_hosted_environment),
|
||||
label = stringResource(id = BitwardenString.self_hosted_environment),
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.standardHorizontalMargin()
|
||||
@ -224,10 +224,12 @@ fun EnvironmentScreen(
|
||||
Spacer(modifier = Modifier.height(height = 8.dp))
|
||||
|
||||
BitwardenTextField(
|
||||
label = stringResource(id = R.string.server_url),
|
||||
label = stringResource(id = BitwardenString.server_url),
|
||||
value = state.serverUrl,
|
||||
placeholder = "ex. https://bitwarden.company.com",
|
||||
supportingText = stringResource(id = R.string.self_hosted_environment_footer),
|
||||
supportingText = stringResource(
|
||||
id = BitwardenString.self_hosted_environment_footer,
|
||||
),
|
||||
onValueChange = remember(viewModel) {
|
||||
{ viewModel.trySendAction(EnvironmentAction.ServerUrlChange(it)) }
|
||||
},
|
||||
@ -251,7 +253,7 @@ fun EnvironmentScreen(
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
|
||||
BitwardenListHeaderText(
|
||||
label = stringResource(id = R.string.custom_environment),
|
||||
label = stringResource(id = BitwardenString.custom_environment),
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.standardHorizontalMargin()
|
||||
@ -261,7 +263,7 @@ fun EnvironmentScreen(
|
||||
Spacer(modifier = Modifier.height(height = 8.dp))
|
||||
|
||||
BitwardenTextField(
|
||||
label = stringResource(id = R.string.web_vault_url),
|
||||
label = stringResource(id = BitwardenString.web_vault_url),
|
||||
value = state.webVaultServerUrl,
|
||||
onValueChange = remember(viewModel) {
|
||||
{ viewModel.trySendAction(EnvironmentAction.WebVaultServerUrlChange(it)) }
|
||||
@ -277,7 +279,7 @@ fun EnvironmentScreen(
|
||||
Spacer(modifier = Modifier.height(height = 8.dp))
|
||||
|
||||
BitwardenTextField(
|
||||
label = stringResource(id = R.string.api_url),
|
||||
label = stringResource(id = BitwardenString.api_url),
|
||||
value = state.apiServerUrl,
|
||||
onValueChange = remember(viewModel) {
|
||||
{ viewModel.trySendAction(EnvironmentAction.ApiServerUrlChange(it)) }
|
||||
@ -293,7 +295,7 @@ fun EnvironmentScreen(
|
||||
Spacer(modifier = Modifier.height(height = 8.dp))
|
||||
|
||||
BitwardenTextField(
|
||||
label = stringResource(id = R.string.identity_url),
|
||||
label = stringResource(id = BitwardenString.identity_url),
|
||||
value = state.identityServerUrl,
|
||||
onValueChange = remember(viewModel) {
|
||||
{ viewModel.trySendAction(EnvironmentAction.IdentityServerUrlChange(it)) }
|
||||
@ -309,12 +311,12 @@ fun EnvironmentScreen(
|
||||
Spacer(modifier = Modifier.height(height = 8.dp))
|
||||
|
||||
BitwardenTextField(
|
||||
label = stringResource(id = R.string.icons_url),
|
||||
label = stringResource(id = BitwardenString.icons_url),
|
||||
value = state.iconsServerUrl,
|
||||
onValueChange = remember(viewModel) {
|
||||
{ viewModel.trySendAction(EnvironmentAction.IconsServerUrlChange(it)) }
|
||||
},
|
||||
supportingText = stringResource(id = R.string.custom_environment_footer),
|
||||
supportingText = stringResource(id = BitwardenString.custom_environment_footer),
|
||||
keyboardType = KeyboardType.Uri,
|
||||
textFieldTestTag = "IconsUrlEntry",
|
||||
cardStyle = CardStyle.Full,
|
||||
@ -326,7 +328,7 @@ fun EnvironmentScreen(
|
||||
Spacer(modifier = Modifier.height(height = 16.dp))
|
||||
|
||||
BitwardenListHeaderText(
|
||||
label = stringResource(id = R.string.client_certificate_mtls),
|
||||
label = stringResource(id = BitwardenString.client_certificate_mtls),
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.standardHorizontalMargin()
|
||||
@ -335,10 +337,10 @@ fun EnvironmentScreen(
|
||||
Spacer(modifier = Modifier.height(height = 8.dp))
|
||||
|
||||
BitwardenTextField(
|
||||
label = stringResource(id = R.string.certificate_alias),
|
||||
label = stringResource(id = BitwardenString.certificate_alias),
|
||||
value = state.keyAlias,
|
||||
supportingText = stringResource(
|
||||
id = R.string.certificate_used_for_client_authentication,
|
||||
id = BitwardenString.certificate_used_for_client_authentication,
|
||||
),
|
||||
onValueChange = {},
|
||||
readOnly = true,
|
||||
@ -352,7 +354,7 @@ fun EnvironmentScreen(
|
||||
Spacer(modifier = Modifier.height(height = 16.dp))
|
||||
|
||||
BitwardenFilledButton(
|
||||
label = stringResource(id = R.string.import_certificate),
|
||||
label = stringResource(id = BitwardenString.import_certificate),
|
||||
onClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(EnvironmentAction.ImportCertificateClick) }
|
||||
},
|
||||
@ -365,7 +367,7 @@ fun EnvironmentScreen(
|
||||
Spacer(modifier = Modifier.height(height = 12.dp))
|
||||
|
||||
BitwardenOutlinedButton(
|
||||
label = stringResource(id = R.string.choose_system_certificate),
|
||||
label = stringResource(id = BitwardenString.choose_system_certificate),
|
||||
onClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(EnvironmentAction.ChooseSystemCertificateClick) }
|
||||
},
|
||||
@ -374,7 +376,6 @@ fun EnvironmentScreen(
|
||||
.standardHorizontalMargin()
|
||||
.testTag("ChooseSystemCertificateButton"),
|
||||
)
|
||||
|
||||
Spacer(modifier = Modifier.height(height = 16.dp))
|
||||
Spacer(modifier = Modifier.navigationBarsPadding())
|
||||
}
|
||||
|
||||
@ -11,9 +11,9 @@ import com.bitwarden.ui.platform.base.BaseViewModel
|
||||
import com.bitwarden.ui.platform.base.util.isValidUri
|
||||
import com.bitwarden.ui.platform.base.util.orNullIfBlank
|
||||
import com.bitwarden.ui.platform.base.util.prefixHttpsIfNecessaryOrNull
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.platform.datasource.disk.model.MutualTlsKeyHost
|
||||
import com.x8bit.bitwarden.data.platform.manager.CertificateManager
|
||||
import com.x8bit.bitwarden.data.platform.manager.model.ImportPrivateKeyResult
|
||||
@ -139,7 +139,7 @@ class EnvironmentViewModel @Inject constructor(
|
||||
}
|
||||
|
||||
if (!urlsAreAllNullOrValid) {
|
||||
showErrorDialog(message = R.string.environment_page_urls_error.asText())
|
||||
showErrorDialog(message = BitwardenString.environment_page_urls_error.asText())
|
||||
return
|
||||
}
|
||||
|
||||
@ -161,7 +161,7 @@ class EnvironmentViewModel @Inject constructor(
|
||||
)
|
||||
|
||||
snackbarRelayManager.sendSnackbarData(
|
||||
data = BitwardenSnackbarData(message = R.string.environment_saved.asText()),
|
||||
data = BitwardenSnackbarData(message = BitwardenString.environment_saved.asText()),
|
||||
relay = SnackbarRelay.ENVIRONMENT_SAVED,
|
||||
)
|
||||
sendEvent(EnvironmentEvent.NavigateBack)
|
||||
@ -184,9 +184,9 @@ class EnvironmentViewModel @Inject constructor(
|
||||
) {
|
||||
showSnackbar(
|
||||
message = if (action.success) {
|
||||
R.string.certificate_installed.asText()
|
||||
BitwardenString.certificate_installed.asText()
|
||||
} else {
|
||||
R.string.certificate_installation_failed.asText()
|
||||
BitwardenString.certificate_installation_failed.asText()
|
||||
},
|
||||
)
|
||||
}
|
||||
@ -271,8 +271,8 @@ class EnvironmentViewModel @Inject constructor(
|
||||
) {
|
||||
if (action.password.isBlank()) {
|
||||
showErrorDialog(
|
||||
message = R.string.validation_field_required.asText(
|
||||
R.string.password.asText(),
|
||||
message = BitwardenString.validation_field_required.asText(
|
||||
BitwardenString.password.asText(),
|
||||
),
|
||||
)
|
||||
return
|
||||
@ -280,8 +280,8 @@ class EnvironmentViewModel @Inject constructor(
|
||||
|
||||
if (action.alias.isBlank()) {
|
||||
showErrorDialog(
|
||||
message = R.string.validation_field_required.asText(
|
||||
R.string.alias.asText(),
|
||||
message = BitwardenString.validation_field_required.asText(
|
||||
BitwardenString.alias.asText(),
|
||||
),
|
||||
)
|
||||
return
|
||||
@ -292,9 +292,9 @@ class EnvironmentViewModel @Inject constructor(
|
||||
@Suppress("MaxLineLength")
|
||||
it.copy(
|
||||
dialog = EnvironmentState.DialogState.ConfirmOverwriteAlias(
|
||||
title = R.string.replace_existing_certificate.asText(),
|
||||
title = BitwardenString.replace_existing_certificate.asText(),
|
||||
message =
|
||||
R.string.a_certificate_with_the_alias_x_already_exists_do_you_want_to_replace_it
|
||||
BitwardenString.a_certificate_with_the_alias_x_already_exists_do_you_want_to_replace_it
|
||||
.asText(action.alias),
|
||||
triggeringAction = action,
|
||||
),
|
||||
@ -328,19 +328,19 @@ class EnvironmentViewModel @Inject constructor(
|
||||
}
|
||||
|
||||
is ImportPrivateKeyResult.Error.UnsupportedKey -> {
|
||||
showSnackbar(message = R.string.unsupported_certificate_type.asText())
|
||||
showSnackbar(message = BitwardenString.unsupported_certificate_type.asText())
|
||||
}
|
||||
|
||||
is ImportPrivateKeyResult.Error.KeyStoreOperationFailed -> {
|
||||
showSnackbar(message = R.string.certificate_installation_failed.asText())
|
||||
showSnackbar(message = BitwardenString.certificate_installation_failed.asText())
|
||||
}
|
||||
|
||||
is ImportPrivateKeyResult.Error.UnrecoverableKey -> {
|
||||
showSnackbar(message = R.string.certificate_password_incorrect.asText())
|
||||
showSnackbar(message = BitwardenString.certificate_password_incorrect.asText())
|
||||
}
|
||||
|
||||
is ImportPrivateKeyResult.Error.InvalidCertificateChain -> {
|
||||
showSnackbar(message = R.string.invalid_certificate_chain.asText())
|
||||
showSnackbar(message = BitwardenString.invalid_certificate_chain.asText())
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -369,7 +369,7 @@ class EnvironmentViewModel @Inject constructor(
|
||||
is PrivateKeyAliasSelectionResult.Error -> {
|
||||
sendEvent(
|
||||
EnvironmentEvent.ShowSnackbar(
|
||||
message = R.string.error_loading_certificate.asText(),
|
||||
message = BitwardenString.error_loading_certificate.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -415,7 +415,7 @@ class EnvironmentViewModel @Inject constructor(
|
||||
.fold(
|
||||
onFailure = {
|
||||
EnvironmentAction.Internal.ShowErrorDialog(
|
||||
message = R.string.unable_to_read_certificate.asText(),
|
||||
message = BitwardenString.unable_to_read_certificate.asText(),
|
||||
throwable = it,
|
||||
)
|
||||
},
|
||||
|
||||
@ -28,8 +28,8 @@ import com.bitwarden.ui.platform.components.button.BitwardenFilledButton
|
||||
import com.bitwarden.ui.platform.components.button.BitwardenOutlinedButton
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold
|
||||
|
||||
/**
|
||||
@ -63,11 +63,11 @@ fun ExpiredRegistrationLinkScreen(
|
||||
BitwardenScaffold(
|
||||
topBar = {
|
||||
BitwardenTopAppBar(
|
||||
title = stringResource(id = R.string.create_account),
|
||||
title = stringResource(id = BitwardenString.create_account),
|
||||
scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(),
|
||||
navigationIcon = NavigationIcon(
|
||||
navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close),
|
||||
navigationIconContentDescription = stringResource(id = R.string.close),
|
||||
navigationIconContentDescription = stringResource(id = BitwardenString.close),
|
||||
onNavigationIconClick = sendCloseClicked,
|
||||
),
|
||||
)
|
||||
@ -104,7 +104,7 @@ private fun ExpiredRegistrationLinkContent(
|
||||
) {
|
||||
Spacer(modifier = Modifier.height(8.dp))
|
||||
Text(
|
||||
text = stringResource(R.string.expired_link),
|
||||
text = stringResource(BitwardenString.expired_link),
|
||||
style = BitwardenTheme.typography.titleMedium,
|
||||
color = BitwardenTheme.colorScheme.text.primary,
|
||||
textAlign = TextAlign.Center,
|
||||
@ -114,7 +114,7 @@ private fun ExpiredRegistrationLinkContent(
|
||||
)
|
||||
Spacer(modifier = Modifier.height(8.dp))
|
||||
Text(
|
||||
text = stringResource(R.string.please_restart_registration_or_try_logging_in),
|
||||
text = stringResource(BitwardenString.please_restart_registration_or_try_logging_in),
|
||||
style = BitwardenTheme.typography.bodyMedium,
|
||||
color = BitwardenTheme.colorScheme.text.primary,
|
||||
textAlign = TextAlign.Center,
|
||||
@ -124,7 +124,7 @@ private fun ExpiredRegistrationLinkContent(
|
||||
)
|
||||
Spacer(modifier = Modifier.height(24.dp))
|
||||
BitwardenFilledButton(
|
||||
label = stringResource(R.string.restart_registration),
|
||||
label = stringResource(BitwardenString.restart_registration),
|
||||
onClick = onNavigateToStartRegistration,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
@ -132,7 +132,7 @@ private fun ExpiredRegistrationLinkContent(
|
||||
)
|
||||
Spacer(modifier = Modifier.height(12.dp))
|
||||
BitwardenOutlinedButton(
|
||||
label = stringResource(id = R.string.log_in_verb),
|
||||
label = stringResource(id = BitwardenString.log_in_verb),
|
||||
onClick = onNavigateToLogin,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
|
||||
@ -45,8 +45,8 @@ import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.components.toggle.BitwardenSwitch
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.account.BitwardenAccountSwitcher
|
||||
import com.x8bit.bitwarden.ui.platform.components.account.BitwardenPlaceholderAccountActionItem
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog
|
||||
@ -88,12 +88,12 @@ fun LandingScreen(
|
||||
when (val dialog = state.dialog) {
|
||||
is LandingState.DialogState.AccountAlreadyAdded -> {
|
||||
BitwardenTwoButtonDialog(
|
||||
title = stringResource(id = R.string.account_already_added),
|
||||
title = stringResource(id = BitwardenString.account_already_added),
|
||||
message = stringResource(
|
||||
id = R.string.switch_to_already_added_account_confirmation,
|
||||
id = BitwardenString.switch_to_already_added_account_confirmation,
|
||||
),
|
||||
confirmButtonText = stringResource(id = R.string.yes),
|
||||
dismissButtonText = stringResource(id = R.string.cancel),
|
||||
confirmButtonText = stringResource(id = BitwardenString.yes),
|
||||
dismissButtonText = stringResource(id = BitwardenString.cancel),
|
||||
onConfirmClick = remember(viewModel) {
|
||||
{
|
||||
viewModel.trySendAction(
|
||||
@ -114,7 +114,7 @@ fun LandingScreen(
|
||||
|
||||
is LandingState.DialogState.Error -> {
|
||||
BitwardenBasicDialog(
|
||||
title = stringResource(id = R.string.an_error_has_occurred),
|
||||
title = stringResource(id = BitwardenString.an_error_has_occurred),
|
||||
message = dialog.message(),
|
||||
onDismissRequest = remember(viewModel) {
|
||||
{ viewModel.trySendAction(LandingAction.DialogDismiss) }
|
||||
@ -234,7 +234,7 @@ private fun LandingScreenContent(
|
||||
Spacer(modifier = Modifier.height(height = 12.dp))
|
||||
|
||||
Text(
|
||||
text = stringResource(id = R.string.login_to_bitwarden),
|
||||
text = stringResource(id = BitwardenString.login_to_bitwarden),
|
||||
textAlign = TextAlign.Center,
|
||||
style = BitwardenTheme.typography.headlineSmall,
|
||||
color = BitwardenTheme.colorScheme.text.primary,
|
||||
@ -251,15 +251,15 @@ private fun LandingScreenContent(
|
||||
.fillMaxWidth(),
|
||||
value = state.emailInput,
|
||||
onValueChange = onEmailInputChange,
|
||||
label = stringResource(id = R.string.email_address),
|
||||
label = stringResource(id = BitwardenString.email_address),
|
||||
keyboardType = KeyboardType.Email,
|
||||
textFieldTestTag = "EmailAddressEntry",
|
||||
cardStyle = CardStyle.Full,
|
||||
supportingContentPadding = PaddingValues(),
|
||||
supportingContent = {
|
||||
EnvironmentSelector(
|
||||
labelText = stringResource(id = R.string.logging_in_on_with_colon),
|
||||
dialogTitle = stringResource(id = R.string.logging_in_on),
|
||||
labelText = stringResource(id = BitwardenString.logging_in_on_with_colon),
|
||||
dialogTitle = stringResource(id = BitwardenString.logging_in_on),
|
||||
selectedOption = state.selectedEnvironmentType,
|
||||
onOptionSelected = onEnvironmentTypeSelect,
|
||||
isHelpEnabled = false,
|
||||
@ -274,7 +274,7 @@ private fun LandingScreenContent(
|
||||
Spacer(modifier = Modifier.height(height = 8.dp))
|
||||
|
||||
BitwardenSwitch(
|
||||
label = stringResource(id = R.string.remember_email),
|
||||
label = stringResource(id = BitwardenString.remember_email),
|
||||
isChecked = state.isRememberEmailEnabled,
|
||||
onCheckedChange = onRememberMeToggle,
|
||||
cardStyle = CardStyle.Full,
|
||||
@ -287,7 +287,7 @@ private fun LandingScreenContent(
|
||||
Spacer(modifier = Modifier.height(height = 24.dp))
|
||||
|
||||
BitwardenFilledButton(
|
||||
label = stringResource(id = R.string.continue_text),
|
||||
label = stringResource(id = BitwardenString.continue_text),
|
||||
onClick = onContinueClick,
|
||||
isEnabled = state.isContinueButtonEnabled,
|
||||
modifier = Modifier
|
||||
@ -307,13 +307,13 @@ private fun LandingScreenContent(
|
||||
.wrapContentHeight(),
|
||||
) {
|
||||
Text(
|
||||
text = stringResource(id = R.string.new_to_bitwarden),
|
||||
text = stringResource(id = BitwardenString.new_to_bitwarden),
|
||||
style = BitwardenTheme.typography.bodyMedium,
|
||||
color = BitwardenTheme.colorScheme.text.secondary,
|
||||
)
|
||||
|
||||
BitwardenTextButton(
|
||||
label = stringResource(id = R.string.create_an_account),
|
||||
label = stringResource(id = BitwardenString.create_an_account),
|
||||
onClick = onCreateAccountClick,
|
||||
modifier = Modifier
|
||||
.testTag("CreateAccountLabel"),
|
||||
@ -321,7 +321,7 @@ private fun LandingScreenContent(
|
||||
}
|
||||
Spacer(modifier = Modifier.height(height = 8.dp))
|
||||
BitwardenTextButton(
|
||||
label = stringResource(id = R.string.app_settings),
|
||||
label = stringResource(id = BitwardenString.app_settings),
|
||||
onClick = onAppSettingsClick,
|
||||
icon = rememberVectorPainter(id = BitwardenDrawable.ic_cog),
|
||||
modifier = Modifier
|
||||
|
||||
@ -7,9 +7,9 @@ import com.bitwarden.data.repository.model.Environment
|
||||
import com.bitwarden.ui.platform.base.BackgroundEvent
|
||||
import com.bitwarden.ui.platform.base.BaseViewModel
|
||||
import com.bitwarden.ui.platform.base.util.isValidEmail
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.LogoutReason
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.UserState
|
||||
@ -187,7 +187,7 @@ class LandingViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = LandingState.DialogState.Error(
|
||||
message = R.string.invalid_email.asText(),
|
||||
message = BitwardenString.invalid_email.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
@ -40,6 +40,7 @@ import com.bitwarden.ui.platform.components.button.BitwardenOutlinedButton
|
||||
import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.account.BitwardenAccountSwitcher
|
||||
@ -119,7 +120,7 @@ fun LoginScreen(
|
||||
title = stringResource(id = R.string.app_name),
|
||||
scrollBehavior = scrollBehavior,
|
||||
navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close),
|
||||
navigationIconContentDescription = stringResource(id = R.string.close),
|
||||
navigationIconContentDescription = stringResource(id = BitwardenString.close),
|
||||
onNavigationIconClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(LoginAction.CloseButtonClick) }
|
||||
},
|
||||
@ -130,10 +131,10 @@ fun LoginScreen(
|
||||
)
|
||||
}
|
||||
BitwardenOverflowActionItem(
|
||||
contentDescription = stringResource(R.string.more),
|
||||
contentDescription = stringResource(BitwardenString.more),
|
||||
menuItemDataList = persistentListOf(
|
||||
OverflowMenuItemData(
|
||||
text = stringResource(id = R.string.get_password_hint),
|
||||
text = stringResource(id = BitwardenString.get_password_hint),
|
||||
onClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(LoginAction.MasterPasswordHintClick) }
|
||||
},
|
||||
@ -235,12 +236,12 @@ private fun LoginScreenContent(
|
||||
autoFocus = true,
|
||||
value = state.passwordInput,
|
||||
onValueChange = onPasswordInputChanged,
|
||||
label = stringResource(id = R.string.master_password),
|
||||
label = stringResource(id = BitwardenString.master_password),
|
||||
showPasswordTestTag = "PasswordVisibilityToggle",
|
||||
supportingContentPadding = PaddingValues(),
|
||||
supportingContent = {
|
||||
BitwardenClickableText(
|
||||
label = stringResource(id = R.string.get_master_passwordword_hint),
|
||||
label = stringResource(id = BitwardenString.get_master_passwordword_hint),
|
||||
onClick = onMasterPasswordClick,
|
||||
style = BitwardenTheme.typography.labelMedium,
|
||||
innerPadding = PaddingValues(all = 16.dp),
|
||||
@ -260,7 +261,7 @@ private fun LoginScreenContent(
|
||||
Spacer(modifier = Modifier.height(height = 24.dp))
|
||||
|
||||
BitwardenFilledButton(
|
||||
label = stringResource(id = R.string.log_in_with_master_password),
|
||||
label = stringResource(id = BitwardenString.log_in_with_master_password),
|
||||
onClick = onLoginButtonClick,
|
||||
isEnabled = state.isLoginButtonEnabled,
|
||||
modifier = Modifier
|
||||
@ -273,7 +274,7 @@ private fun LoginScreenContent(
|
||||
|
||||
if (state.shouldShowLoginWithDevice) {
|
||||
BitwardenOutlinedButton(
|
||||
label = stringResource(id = R.string.log_in_with_device),
|
||||
label = stringResource(id = BitwardenString.log_in_with_device),
|
||||
icon = rememberVectorPainter(id = BitwardenDrawable.ic_mobile_small),
|
||||
onClick = onLoginWithDeviceClick,
|
||||
modifier = Modifier
|
||||
@ -286,7 +287,7 @@ private fun LoginScreenContent(
|
||||
}
|
||||
|
||||
BitwardenOutlinedButton(
|
||||
label = stringResource(id = R.string.log_in_sso),
|
||||
label = stringResource(id = BitwardenString.log_in_sso),
|
||||
icon = rememberVectorPainter(id = BitwardenDrawable.ic_enterprise_small),
|
||||
onClick = onSingleSignOnClick,
|
||||
modifier = Modifier
|
||||
@ -299,7 +300,7 @@ private fun LoginScreenContent(
|
||||
|
||||
Text(
|
||||
text = stringResource(
|
||||
id = R.string.logging_in_as_x_on_y,
|
||||
id = BitwardenString.logging_in_as_x_on_y,
|
||||
state.emailAddress,
|
||||
state.environmentLabel,
|
||||
),
|
||||
@ -313,7 +314,7 @@ private fun LoginScreenContent(
|
||||
)
|
||||
|
||||
BitwardenClickableText(
|
||||
label = stringResource(id = R.string.not_you),
|
||||
label = stringResource(id = BitwardenString.not_you),
|
||||
onClick = onNotYouButtonClick,
|
||||
style = BitwardenTheme.typography.labelMedium,
|
||||
innerPadding = PaddingValues(vertical = 8.dp, horizontal = 16.dp),
|
||||
|
||||
@ -8,9 +8,9 @@ import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.bitwarden.data.repository.util.baseWebVaultUrlOrDefault
|
||||
import com.bitwarden.ui.platform.base.BaseViewModel
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.KnownDeviceResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.LoginResult
|
||||
@ -52,7 +52,7 @@ class LoginViewModel @Inject constructor(
|
||||
isLoginButtonEnabled = false,
|
||||
passwordInput = "",
|
||||
environmentLabel = environmentRepository.environment.label,
|
||||
dialogState = LoginState.DialogState.Loading(R.string.loading.asText()),
|
||||
dialogState = LoginState.DialogState.Loading(BitwardenString.loading.asText()),
|
||||
captchaToken = args.captchaToken,
|
||||
accountSummaries = authRepository
|
||||
.userStateFlow
|
||||
@ -178,8 +178,8 @@ class LoginViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = LoginState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString
|
||||
.this_account_will_soon_be_deleted_log_in_at_x_to_continue_using_bitwarden
|
||||
.asText(vaultUrl.toUriOrNull()?.host ?: vaultUrl),
|
||||
),
|
||||
@ -204,9 +204,9 @@ class LoginViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = LoginState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = loginResult.errorMessage?.asText()
|
||||
?: R.string.generic_error_message.asText(),
|
||||
?: BitwardenString.generic_error_message.asText(),
|
||||
error = loginResult.error,
|
||||
),
|
||||
)
|
||||
@ -217,8 +217,8 @@ class LoginViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = LoginState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.this_is_not_a_recognized_bitwarden_server_you_may_need_to_check_with_your_provider_or_update_your_server.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.this_is_not_a_recognized_bitwarden_server_you_may_need_to_check_with_your_provider_or_update_your_server.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -232,8 +232,8 @@ class LoginViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = LoginState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.we_couldnt_verify_the_servers_certificate.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.we_couldnt_verify_the_servers_certificate.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -262,8 +262,8 @@ class LoginViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = LoginState.DialogState.Error(
|
||||
title = R.string.log_in_denied.asText(),
|
||||
message = R.string.captcha_failed.asText(),
|
||||
title = BitwardenString.log_in_denied.asText(),
|
||||
message = BitwardenString.captcha_failed.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -294,7 +294,7 @@ class LoginViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = LoginState.DialogState.Loading(
|
||||
message = R.string.logging_in.asText(),
|
||||
message = BitwardenString.logging_in.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
@ -33,8 +33,8 @@ import com.bitwarden.ui.platform.base.util.EventsEffect
|
||||
import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.content.BitwardenLoadingContent
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenLoadingDialog
|
||||
@ -86,7 +86,7 @@ fun LoginWithDeviceScreen(
|
||||
title = state.toolbarTitle(),
|
||||
scrollBehavior = scrollBehavior,
|
||||
navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close),
|
||||
navigationIconContentDescription = stringResource(id = R.string.close),
|
||||
navigationIconContentDescription = stringResource(id = BitwardenString.close),
|
||||
onNavigationIconClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(LoginWithDeviceAction.CloseButtonClick) }
|
||||
},
|
||||
@ -163,7 +163,7 @@ private fun LoginWithDeviceScreenContent(
|
||||
Spacer(modifier = Modifier.height(24.dp))
|
||||
|
||||
Text(
|
||||
text = stringResource(id = R.string.fingerprint_phrase),
|
||||
text = stringResource(id = BitwardenString.fingerprint_phrase),
|
||||
textAlign = TextAlign.Start,
|
||||
style = BitwardenTheme.typography.titleLarge,
|
||||
color = BitwardenTheme.colorScheme.text.primary,
|
||||
@ -202,7 +202,7 @@ private fun LoginWithDeviceScreenContent(
|
||||
} else {
|
||||
BitwardenClickableText(
|
||||
modifier = Modifier.testTag("ResendNotificationButton"),
|
||||
label = stringResource(id = R.string.resend_notification),
|
||||
label = stringResource(id = BitwardenString.resend_notification),
|
||||
style = BitwardenTheme.typography.labelLarge,
|
||||
innerPadding = PaddingValues(vertical = 8.dp, horizontal = 16.dp),
|
||||
onClick = onResendNotificationClick,
|
||||
@ -225,7 +225,7 @@ private fun LoginWithDeviceScreenContent(
|
||||
|
||||
BitwardenClickableText(
|
||||
modifier = Modifier.testTag("ViewAllLoginOptionsButton"),
|
||||
label = stringResource(id = R.string.view_all_login_options),
|
||||
label = stringResource(id = BitwardenString.view_all_login_options),
|
||||
innerPadding = PaddingValues(vertical = 8.dp, horizontal = 16.dp),
|
||||
style = BitwardenTheme.typography.labelLarge,
|
||||
onClick = onViewAllLogInOptionsClick,
|
||||
|
||||
@ -5,9 +5,9 @@ import android.os.Parcelable
|
||||
import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.bitwarden.ui.platform.base.BaseViewModel
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.auth.manager.model.CreateAuthRequestResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.LoginResult
|
||||
@ -154,8 +154,8 @@ class LoginWithDeviceViewModel @Inject constructor(
|
||||
isResendNotificationLoading = false,
|
||||
),
|
||||
dialogState = LoginWithDeviceState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.generic_error_message.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.generic_error_message.asText(),
|
||||
error = result.error,
|
||||
),
|
||||
)
|
||||
@ -175,7 +175,7 @@ class LoginWithDeviceViewModel @Inject constructor(
|
||||
),
|
||||
dialogState = LoginWithDeviceState.DialogState.Error(
|
||||
title = null,
|
||||
message = R.string.login_request_has_already_expired.asText(),
|
||||
message = BitwardenString.login_request_has_already_expired.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -191,8 +191,8 @@ class LoginWithDeviceViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = LoginWithDeviceState.DialogState.Error(
|
||||
title = R.string.log_in_denied.asText(),
|
||||
message = R.string.captcha_failed.asText(),
|
||||
title = BitwardenString.log_in_denied.asText(),
|
||||
message = BitwardenString.captcha_failed.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -234,11 +234,11 @@ class LoginWithDeviceViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = LoginWithDeviceState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = loginResult
|
||||
.errorMessage
|
||||
?.asText()
|
||||
?: R.string.generic_error_message.asText(),
|
||||
?: BitwardenString.generic_error_message.asText(),
|
||||
error = loginResult.error,
|
||||
),
|
||||
)
|
||||
@ -249,8 +249,8 @@ class LoginWithDeviceViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = LoginWithDeviceState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.this_is_not_a_recognized_bitwarden_server_you_may_need_to_check_with_your_provider_or_update_your_server
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.this_is_not_a_recognized_bitwarden_server_you_may_need_to_check_with_your_provider_or_update_your_server
|
||||
.asText(),
|
||||
),
|
||||
)
|
||||
@ -259,7 +259,7 @@ class LoginWithDeviceViewModel @Inject constructor(
|
||||
|
||||
is LoginResult.Success -> {
|
||||
snackbarRelayManager.sendSnackbarData(
|
||||
data = BitwardenSnackbarData(message = R.string.login_approved.asText()),
|
||||
data = BitwardenSnackbarData(message = BitwardenString.login_approved.asText()),
|
||||
relay = SnackbarRelay.LOGIN_SUCCESS,
|
||||
)
|
||||
mutableStateFlow.update { it.copy(dialogState = null) }
|
||||
@ -269,8 +269,8 @@ class LoginWithDeviceViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = LoginWithDeviceState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.we_couldnt_verify_the_servers_certificate.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.we_couldnt_verify_the_servers_certificate.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -280,11 +280,11 @@ class LoginWithDeviceViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = LoginWithDeviceState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = loginResult
|
||||
.errorMessage
|
||||
?.asText()
|
||||
?: R.string.generic_error_message.asText(),
|
||||
?: BitwardenString.generic_error_message.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -301,7 +301,7 @@ class LoginWithDeviceViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = LoginWithDeviceState.DialogState.Loading(
|
||||
message = R.string.logging_in.asText(),
|
||||
message = BitwardenString.logging_in.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -381,9 +381,9 @@ data class LoginWithDeviceState(
|
||||
get() = when (loginWithDeviceType) {
|
||||
LoginWithDeviceType.OTHER_DEVICE,
|
||||
LoginWithDeviceType.SSO_OTHER_DEVICE,
|
||||
-> R.string.log_in_with_device.asText()
|
||||
-> BitwardenString.log_in_with_device.asText()
|
||||
|
||||
LoginWithDeviceType.SSO_ADMIN_APPROVAL -> R.string.log_in_initiated.asText()
|
||||
LoginWithDeviceType.SSO_ADMIN_APPROVAL -> BitwardenString.log_in_initiated.asText()
|
||||
}
|
||||
|
||||
/**
|
||||
@ -418,10 +418,10 @@ data class LoginWithDeviceState(
|
||||
get() = when (loginWithDeviceType) {
|
||||
LoginWithDeviceType.OTHER_DEVICE,
|
||||
LoginWithDeviceType.SSO_OTHER_DEVICE,
|
||||
-> R.string.log_in_initiated.asText()
|
||||
-> BitwardenString.log_in_initiated.asText()
|
||||
|
||||
LoginWithDeviceType.SSO_ADMIN_APPROVAL,
|
||||
-> R.string.admin_approval_requested.asText()
|
||||
-> BitwardenString.admin_approval_requested.asText()
|
||||
}
|
||||
|
||||
/**
|
||||
@ -431,10 +431,10 @@ data class LoginWithDeviceState(
|
||||
get() = when (loginWithDeviceType) {
|
||||
LoginWithDeviceType.OTHER_DEVICE,
|
||||
LoginWithDeviceType.SSO_OTHER_DEVICE,
|
||||
-> R.string.a_notification_has_been_sent_to_your_device.asText()
|
||||
-> BitwardenString.a_notification_has_been_sent_to_your_device.asText()
|
||||
|
||||
LoginWithDeviceType.SSO_ADMIN_APPROVAL,
|
||||
-> R.string.your_request_has_been_sent_to_your_admin.asText()
|
||||
-> BitwardenString.your_request_has_been_sent_to_your_admin.asText()
|
||||
}
|
||||
|
||||
/**
|
||||
@ -445,10 +445,10 @@ data class LoginWithDeviceState(
|
||||
get() = when (loginWithDeviceType) {
|
||||
LoginWithDeviceType.OTHER_DEVICE,
|
||||
LoginWithDeviceType.SSO_OTHER_DEVICE,
|
||||
-> R.string.please_make_sure_your_vault_is_unlocked_and_the_fingerprint_phrase_matches_on_the_other_device.asText()
|
||||
-> BitwardenString.please_make_sure_your_vault_is_unlocked_and_the_fingerprint_phrase_matches_on_the_other_device.asText()
|
||||
|
||||
LoginWithDeviceType.SSO_ADMIN_APPROVAL,
|
||||
-> R.string.you_will_be_notified_once_approved.asText()
|
||||
-> BitwardenString.you_will_be_notified_once_approved.asText()
|
||||
}
|
||||
|
||||
/**
|
||||
@ -459,9 +459,9 @@ data class LoginWithDeviceState(
|
||||
get() = when (loginWithDeviceType) {
|
||||
LoginWithDeviceType.OTHER_DEVICE,
|
||||
LoginWithDeviceType.SSO_OTHER_DEVICE,
|
||||
-> R.string.log_in_with_device_must_be_set_up_in_the_settings_of_the_bitwarden_app_need_another_option.asText()
|
||||
-> BitwardenString.log_in_with_device_must_be_set_up_in_the_settings_of_the_bitwarden_app_need_another_option.asText()
|
||||
|
||||
LoginWithDeviceType.SSO_ADMIN_APPROVAL -> R.string.trouble_logging_in.asText()
|
||||
LoginWithDeviceType.SSO_ADMIN_APPROVAL -> BitwardenString.trouble_logging_in.asText()
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -34,8 +34,8 @@ import com.bitwarden.ui.platform.components.button.BitwardenTextButton
|
||||
import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.field.BitwardenTextField
|
||||
import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold
|
||||
import com.x8bit.bitwarden.ui.platform.components.snackbar.BitwardenSnackbarData
|
||||
@ -155,19 +155,23 @@ private fun MasterPasswordGeneratorContent(
|
||||
|
||||
Spacer(modifier = Modifier.height(12.dp))
|
||||
BitwardenFilledButton(
|
||||
label = stringResource(R.string.generate_button_label),
|
||||
label = stringResource(BitwardenString.generate_button_label),
|
||||
onClick = onGenerateNewPassword,
|
||||
icon = rememberVectorPainter(id = BitwardenDrawable.ic_generate),
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
)
|
||||
Spacer(modifier = Modifier.height(12.dp))
|
||||
Text(
|
||||
text = stringResource(R.string.write_this_password_down_and_keep_it_somewhere_safe),
|
||||
text = stringResource(
|
||||
BitwardenString.write_this_password_down_and_keep_it_somewhere_safe,
|
||||
),
|
||||
style = BitwardenTheme.typography.bodySmall,
|
||||
color = BitwardenTheme.colorScheme.text.primary,
|
||||
)
|
||||
BitwardenClickableText(
|
||||
label = stringResource(R.string.learn_about_other_ways_to_prevent_account_lockout),
|
||||
label = stringResource(
|
||||
BitwardenString.learn_about_other_ways_to_prevent_account_lockout,
|
||||
),
|
||||
style = BitwardenTheme.typography.labelMedium,
|
||||
onClick = onLearnToPreventLockout,
|
||||
innerPadding = PaddingValues(horizontal = 0.dp, vertical = 4.dp),
|
||||
@ -183,14 +187,14 @@ private fun MasterPasswordGeneratorTopBar(
|
||||
onSaveClick: () -> Unit,
|
||||
) {
|
||||
BitwardenTopAppBar(
|
||||
title = stringResource(R.string.generate_master_password),
|
||||
title = stringResource(BitwardenString.generate_master_password),
|
||||
scrollBehavior = scrollBehavior,
|
||||
navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_back),
|
||||
navigationIconContentDescription = stringResource(id = R.string.back),
|
||||
navigationIconContentDescription = stringResource(id = BitwardenString.back),
|
||||
onNavigationIconClick = onBackClick,
|
||||
actions = {
|
||||
BitwardenTextButton(
|
||||
label = stringResource(id = R.string.save),
|
||||
label = stringResource(id = BitwardenString.save),
|
||||
onClick = onSaveClick,
|
||||
)
|
||||
},
|
||||
|
||||
@ -6,9 +6,9 @@ import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.bitwarden.generators.PassphraseGeneratorRequest
|
||||
import com.bitwarden.ui.platform.base.BaseViewModel
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.PolicyInformation
|
||||
import com.x8bit.bitwarden.data.platform.manager.PolicyManager
|
||||
import com.x8bit.bitwarden.data.platform.manager.util.getActivePolicies
|
||||
@ -94,7 +94,7 @@ class MasterPasswordGeneratorViewModel @Inject constructor(
|
||||
is GeneratedPassphraseResult.InvalidRequest -> {
|
||||
sendEvent(
|
||||
MasterPasswordGeneratorEvent.ShowSnackbar(
|
||||
R.string.an_error_has_occurred.asText(),
|
||||
BitwardenString.an_error_has_occurred.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
@ -30,8 +30,8 @@ import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar
|
||||
import com.bitwarden.ui.platform.components.content.model.ContentBlockData
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.card.BitwardenActionCard
|
||||
import com.x8bit.bitwarden.ui.platform.components.card.BitwardenContentCard
|
||||
import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold
|
||||
@ -63,10 +63,10 @@ fun MasterPasswordGuidanceScreen(
|
||||
.nestedScroll(scrollBehavior.nestedScrollConnection),
|
||||
topBar = {
|
||||
BitwardenTopAppBar(
|
||||
title = stringResource(id = R.string.master_password),
|
||||
title = stringResource(id = BitwardenString.master_password),
|
||||
scrollBehavior = scrollBehavior,
|
||||
navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close),
|
||||
navigationIconContentDescription = stringResource(id = R.string.close),
|
||||
navigationIconContentDescription = stringResource(id = BitwardenString.close),
|
||||
onNavigationIconClick = remember(viewModel) {
|
||||
{
|
||||
viewModel.trySendAction(MasterPasswordGuidanceAction.CloseAction)
|
||||
@ -99,7 +99,7 @@ private fun MasterPasswordGuidanceContent(
|
||||
Column(modifier = modifier) {
|
||||
Spacer(modifier = Modifier.height(24.dp))
|
||||
Text(
|
||||
text = stringResource(R.string.a_secure_memorable_password),
|
||||
text = stringResource(BitwardenString.a_secure_memorable_password),
|
||||
textAlign = TextAlign.Center,
|
||||
style = BitwardenTheme.typography.titleMedium,
|
||||
color = BitwardenTheme.colorScheme.text.primary,
|
||||
@ -110,7 +110,7 @@ private fun MasterPasswordGuidanceContent(
|
||||
Spacer(modifier = Modifier.height(8.dp))
|
||||
Text(
|
||||
text = stringResource(
|
||||
R.string.one_of_the_best_ways_to_create_a_secure_and_memorable_password,
|
||||
BitwardenString.one_of_the_best_ways_to_create_a_secure_and_memorable_password,
|
||||
),
|
||||
textAlign = TextAlign.Center,
|
||||
style = BitwardenTheme.typography.bodyMedium,
|
||||
@ -137,25 +137,25 @@ private fun MasterPasswordGuidanceContentBlocks(modifier: Modifier = Modifier) {
|
||||
BitwardenContentCard(
|
||||
contentItems = persistentListOf(
|
||||
ContentBlockData(
|
||||
headerText = stringResource(R.string.choose_three_or_four_random_words)
|
||||
headerText = stringResource(BitwardenString.choose_three_or_four_random_words)
|
||||
.toAnnotatedString(),
|
||||
subtitleText = annotatedStringResource(
|
||||
id = R.string.pick_three_or_four_random_unrelated_words,
|
||||
id = BitwardenString.pick_three_or_four_random_unrelated_words,
|
||||
),
|
||||
iconVectorResource = BitwardenDrawable.ic_number1,
|
||||
),
|
||||
ContentBlockData(
|
||||
headerText = stringResource(R.string.combine_those_words_together)
|
||||
headerText = stringResource(BitwardenString.combine_those_words_together)
|
||||
.toAnnotatedString(),
|
||||
subtitleText = annotatedStringResource(
|
||||
id = R.string.put_the_words_together_in_any_order_to_form_your_passphrase,
|
||||
id = BitwardenString.put_the_words_together_in_any_order_to_form_your_passphrase,
|
||||
),
|
||||
iconVectorResource = BitwardenDrawable.ic_number2,
|
||||
),
|
||||
ContentBlockData(
|
||||
headerText = stringResource(R.string.make_it_yours).toAnnotatedString(),
|
||||
headerText = stringResource(BitwardenString.make_it_yours).toAnnotatedString(),
|
||||
subtitleText = annotatedStringResource(
|
||||
id = R.string.add_a_number_or_symbol_to_make_it_even_stronger,
|
||||
id = BitwardenString.add_a_number_or_symbol_to_make_it_even_stronger,
|
||||
),
|
||||
iconVectorResource = BitwardenDrawable.ic_number3,
|
||||
),
|
||||
@ -171,8 +171,8 @@ private fun NeedSomeInspirationCard(
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
BitwardenActionCard(
|
||||
cardTitle = stringResource(R.string.need_some_inspiration),
|
||||
actionText = stringResource(R.string.check_out_the_passphrase_generator),
|
||||
cardTitle = stringResource(BitwardenString.need_some_inspiration),
|
||||
actionText = stringResource(BitwardenString.check_out_the_passphrase_generator),
|
||||
onActionClick = onActionClicked,
|
||||
modifier = modifier.fillMaxWidth(),
|
||||
)
|
||||
|
||||
@ -27,7 +27,7 @@ import com.bitwarden.ui.platform.components.button.BitwardenTextButton
|
||||
import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenLoadingDialog
|
||||
import com.x8bit.bitwarden.ui.platform.components.field.BitwardenTextField
|
||||
@ -53,8 +53,8 @@ fun MasterPasswordHintScreen(
|
||||
when (val dialogState = state.dialog) {
|
||||
is MasterPasswordHintState.DialogState.PasswordHintSent -> {
|
||||
BitwardenBasicDialog(
|
||||
title = stringResource(id = R.string.password_hint),
|
||||
message = stringResource(id = R.string.password_hint_alert),
|
||||
title = stringResource(id = BitwardenString.password_hint),
|
||||
message = stringResource(id = BitwardenString.password_hint_alert),
|
||||
onDismissRequest = remember(viewModel) {
|
||||
{ viewModel.trySendAction(MasterPasswordHintAction.DismissDialog) }
|
||||
},
|
||||
@ -70,7 +70,7 @@ fun MasterPasswordHintScreen(
|
||||
title = dialogState
|
||||
.title
|
||||
?.invoke()
|
||||
?: stringResource(id = R.string.an_error_has_occurred),
|
||||
?: stringResource(id = BitwardenString.an_error_has_occurred),
|
||||
message = dialogState.message(),
|
||||
throwable = dialogState.error,
|
||||
onDismissRequest = remember(viewModel) {
|
||||
@ -89,16 +89,16 @@ fun MasterPasswordHintScreen(
|
||||
.nestedScroll(scrollBehavior.nestedScrollConnection),
|
||||
topBar = {
|
||||
BitwardenTopAppBar(
|
||||
title = stringResource(id = R.string.password_hint),
|
||||
title = stringResource(id = BitwardenString.password_hint),
|
||||
scrollBehavior = scrollBehavior,
|
||||
navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close),
|
||||
navigationIconContentDescription = stringResource(id = R.string.close),
|
||||
navigationIconContentDescription = stringResource(id = BitwardenString.close),
|
||||
onNavigationIconClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(MasterPasswordHintAction.CloseClick) }
|
||||
},
|
||||
actions = {
|
||||
BitwardenTextButton(
|
||||
label = stringResource(id = R.string.submit),
|
||||
label = stringResource(id = BitwardenString.submit),
|
||||
onClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(MasterPasswordHintAction.SubmitClick) }
|
||||
},
|
||||
@ -120,10 +120,10 @@ fun MasterPasswordHintScreen(
|
||||
onValueChange = remember(viewModel) {
|
||||
{ viewModel.trySendAction(MasterPasswordHintAction.EmailInputChange(it)) }
|
||||
},
|
||||
label = stringResource(id = R.string.email_address),
|
||||
label = stringResource(id = BitwardenString.email_address),
|
||||
keyboardType = KeyboardType.Email,
|
||||
textFieldTestTag = "MasterPasswordHintEmailField",
|
||||
supportingText = stringResource(id = R.string.enter_email_for_hint),
|
||||
supportingText = stringResource(id = BitwardenString.enter_email_for_hint),
|
||||
cardStyle = CardStyle.Full,
|
||||
)
|
||||
Spacer(modifier = Modifier.height(height = 16.dp))
|
||||
|
||||
@ -4,9 +4,9 @@ import android.os.Parcelable
|
||||
import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.bitwarden.ui.platform.base.BaseViewModel
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.PasswordHintResult
|
||||
import com.x8bit.bitwarden.data.platform.manager.network.NetworkConnectionManager
|
||||
@ -68,8 +68,8 @@ class MasterPasswordHintViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = MasterPasswordHintState.DialogState.Error(
|
||||
title = R.string.internet_connection_required_title.asText(),
|
||||
message = R.string.internet_connection_required_message.asText(),
|
||||
title = BitwardenString.internet_connection_required_title.asText(),
|
||||
message = BitwardenString.internet_connection_required_message.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -80,9 +80,9 @@ class MasterPasswordHintViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = MasterPasswordHintState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.validation_field_required
|
||||
.asText(R.string.email_address.asText()),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.validation_field_required
|
||||
.asText(BitwardenString.email_address.asText()),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -90,11 +90,11 @@ class MasterPasswordHintViewModel @Inject constructor(
|
||||
}
|
||||
|
||||
if (!email.contains("@")) {
|
||||
val errorMessage = R.string.invalid_email.asText()
|
||||
val errorMessage = BitwardenString.invalid_email.asText()
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = MasterPasswordHintState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = errorMessage,
|
||||
),
|
||||
)
|
||||
@ -105,7 +105,7 @@ class MasterPasswordHintViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = MasterPasswordHintState.DialogState.Loading(
|
||||
R.string.submitting.asText(),
|
||||
BitwardenString.submitting.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -130,9 +130,9 @@ class MasterPasswordHintViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = MasterPasswordHintState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = result.message?.asText()
|
||||
?: R.string.generic_error_message.asText(),
|
||||
?: BitwardenString.generic_error_message.asText(),
|
||||
error = result.error,
|
||||
),
|
||||
)
|
||||
|
||||
@ -28,8 +28,8 @@ import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar
|
||||
import com.bitwarden.ui.platform.components.content.model.ContentBlockData
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.card.BitwardenContentCard
|
||||
import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
@ -57,10 +57,10 @@ fun PreventAccountLockoutScreen(
|
||||
.nestedScroll(scrollBehavior.nestedScrollConnection),
|
||||
topBar = {
|
||||
BitwardenTopAppBar(
|
||||
title = stringResource(R.string.prevent_account_lockout),
|
||||
title = stringResource(BitwardenString.prevent_account_lockout),
|
||||
scrollBehavior = scrollBehavior,
|
||||
navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close),
|
||||
navigationIconContentDescription = stringResource(id = R.string.close),
|
||||
navigationIconContentDescription = stringResource(id = BitwardenString.close),
|
||||
onNavigationIconClick = remember(viewModel) {
|
||||
{
|
||||
viewModel.trySendAction(PreventAccountLockoutAction.CloseClickAction)
|
||||
@ -83,7 +83,7 @@ private fun PreventAccountLockoutContent(modifier: Modifier = Modifier) {
|
||||
Column(modifier = modifier) {
|
||||
Spacer(modifier = Modifier.height(24.dp))
|
||||
Text(
|
||||
text = stringResource(R.string.never_lose_access_to_your_vault),
|
||||
text = stringResource(BitwardenString.never_lose_access_to_your_vault),
|
||||
textAlign = TextAlign.Center,
|
||||
style = BitwardenTheme.typography.titleMedium,
|
||||
color = BitwardenTheme.colorScheme.text.primary,
|
||||
@ -94,7 +94,7 @@ private fun PreventAccountLockoutContent(modifier: Modifier = Modifier) {
|
||||
Spacer(modifier = Modifier.height(8.dp))
|
||||
Text(
|
||||
text = stringResource(
|
||||
R.string.the_best_way_to_make_sure_you_can_always_access_your_vault,
|
||||
BitwardenString.the_best_way_to_make_sure_you_can_always_access_your_vault,
|
||||
),
|
||||
textAlign = TextAlign.Center,
|
||||
style = BitwardenTheme.typography.bodyMedium,
|
||||
@ -105,15 +105,15 @@ private fun PreventAccountLockoutContent(modifier: Modifier = Modifier) {
|
||||
BitwardenContentCard(
|
||||
contentItems = persistentListOf(
|
||||
ContentBlockData(
|
||||
headerText = stringResource(R.string.create_a_hint),
|
||||
headerText = stringResource(BitwardenString.create_a_hint),
|
||||
subtitleText = stringResource(
|
||||
R.string.your_hint_will_be_send_to_you_via_email_when_you_request_it,
|
||||
BitwardenString.your_hint_will_be_send_to_you_via_email_when_you_request_it,
|
||||
),
|
||||
iconVectorResource = BitwardenDrawable.ic_light_bulb,
|
||||
),
|
||||
ContentBlockData(
|
||||
headerText = stringResource(R.string.write_your_password_down),
|
||||
subtitleText = stringResource(R.string.keep_it_secret_keep_it_safe),
|
||||
headerText = stringResource(BitwardenString.write_your_password_down),
|
||||
subtitleText = stringResource(BitwardenString.keep_it_secret_keep_it_safe),
|
||||
iconVectorResource = BitwardenDrawable.ic_pencil,
|
||||
),
|
||||
),
|
||||
|
||||
@ -28,9 +28,9 @@ import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar
|
||||
import com.bitwarden.ui.platform.components.button.BitwardenFilledButton
|
||||
import com.bitwarden.ui.platform.components.button.BitwardenOutlinedButton
|
||||
import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenLoadingDialog
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenTwoButtonDialog
|
||||
@ -65,7 +65,7 @@ fun RemovePasswordScreen(
|
||||
.nestedScroll(scrollBehavior.nestedScrollConnection),
|
||||
topBar = {
|
||||
BitwardenTopAppBar(
|
||||
title = stringResource(id = R.string.remove_master_password),
|
||||
title = stringResource(id = BitwardenString.remove_master_password),
|
||||
scrollBehavior = scrollBehavior,
|
||||
navigationIcon = null,
|
||||
)
|
||||
@ -149,7 +149,7 @@ private fun RemovePasswordScreenContent(
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
|
||||
BitwardenPasswordField(
|
||||
label = stringResource(id = R.string.master_password),
|
||||
label = stringResource(id = BitwardenString.master_password),
|
||||
value = state.input,
|
||||
onValueChange = onInputChanged,
|
||||
showPasswordTestTag = "PasswordVisibilityToggle",
|
||||
@ -163,7 +163,7 @@ private fun RemovePasswordScreenContent(
|
||||
Spacer(modifier = Modifier.height(24.dp))
|
||||
|
||||
BitwardenFilledButton(
|
||||
label = stringResource(id = R.string.continue_text),
|
||||
label = stringResource(id = BitwardenString.continue_text),
|
||||
onClick = onContinueClick,
|
||||
isEnabled = state.input.isNotEmpty(),
|
||||
modifier = Modifier
|
||||
@ -175,7 +175,7 @@ private fun RemovePasswordScreenContent(
|
||||
Spacer(modifier = Modifier.height(12.dp))
|
||||
|
||||
BitwardenOutlinedButton(
|
||||
label = stringResource(id = R.string.leave_organization),
|
||||
label = stringResource(id = BitwardenString.leave_organization),
|
||||
onClick = onLeaveOrganizationClick,
|
||||
modifier = Modifier
|
||||
.testTag("LeaveOrganizationButton")
|
||||
@ -209,10 +209,10 @@ private fun RemovePasswordDialogs(
|
||||
|
||||
is RemovePasswordState.DialogState.LeaveConfirmationPrompt -> {
|
||||
BitwardenTwoButtonDialog(
|
||||
title = stringResource(id = R.string.leave_organization),
|
||||
title = stringResource(id = BitwardenString.leave_organization),
|
||||
message = dialogState.message.invoke(),
|
||||
confirmButtonText = stringResource(id = R.string.confirm),
|
||||
dismissButtonText = stringResource(id = R.string.cancel),
|
||||
confirmButtonText = stringResource(id = BitwardenString.confirm),
|
||||
dismissButtonText = stringResource(id = BitwardenString.cancel),
|
||||
onConfirmClick = onConfirmLeaveClick,
|
||||
onDismissClick = onDismissRequest,
|
||||
onDismissRequest = onDismissRequest,
|
||||
|
||||
@ -5,9 +5,9 @@ import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.bitwarden.ui.platform.base.BaseViewModel
|
||||
import com.bitwarden.ui.platform.base.util.orNullIfBlank
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.LeaveOrganizationResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.LogoutReason
|
||||
@ -36,10 +36,10 @@ class RemovePasswordViewModel @Inject constructor(
|
||||
|
||||
RemovePasswordState(
|
||||
input = "",
|
||||
description = R.string.password_no_longer_required_confirm_domain.asText(),
|
||||
labelOrg = R.string.key_connector_organization.asText(),
|
||||
description = BitwardenString.password_no_longer_required_confirm_domain.asText(),
|
||||
labelOrg = BitwardenString.key_connector_organization.asText(),
|
||||
orgName = org?.name?.asText(),
|
||||
labelDomain = R.string.key_connector_domain.asText(),
|
||||
labelDomain = BitwardenString.key_connector_domain.asText(),
|
||||
domainName = org?.keyConnectorUrl?.asText(),
|
||||
dialogState = null,
|
||||
organizationId = org?.id.orNullIfBlank(),
|
||||
@ -71,7 +71,7 @@ class RemovePasswordViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = RemovePasswordState.DialogState.LeaveConfirmationPrompt(
|
||||
message = R.string.leave_organization_name.asText(state.orgName ?: ""),
|
||||
message = BitwardenString.leave_organization_name.asText(state.orgName ?: ""),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -82,9 +82,9 @@ class RemovePasswordViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = RemovePasswordState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.validation_field_required
|
||||
.asText(R.string.master_password.asText()),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.validation_field_required
|
||||
.asText(BitwardenString.master_password.asText()),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -93,7 +93,7 @@ class RemovePasswordViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = RemovePasswordState.DialogState.Loading(
|
||||
title = R.string.deleting.asText(),
|
||||
title = BitwardenString.deleting.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -119,8 +119,8 @@ class RemovePasswordViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = RemovePasswordState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.generic_error_message.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.generic_error_message.asText(),
|
||||
error = result.error,
|
||||
),
|
||||
)
|
||||
@ -131,8 +131,8 @@ class RemovePasswordViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = RemovePasswordState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.invalid_master_password.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.invalid_master_password.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -149,7 +149,7 @@ class RemovePasswordViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = RemovePasswordState.DialogState.Loading(
|
||||
title = R.string.loading.asText(),
|
||||
title = BitwardenString.loading.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -173,8 +173,8 @@ class RemovePasswordViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = RemovePasswordState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.generic_error_message.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.generic_error_message.asText(),
|
||||
error = result.error,
|
||||
),
|
||||
)
|
||||
|
||||
@ -35,8 +35,8 @@ import com.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActio
|
||||
import com.bitwarden.ui.platform.components.appbar.model.OverflowMenuItemData
|
||||
import com.bitwarden.ui.platform.components.button.BitwardenTextButton
|
||||
import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.auth.datasource.disk.model.ForcePasswordResetReason
|
||||
import com.x8bit.bitwarden.ui.auth.feature.completeregistration.PasswordStrengthIndicator
|
||||
import com.x8bit.bitwarden.ui.auth.feature.completeregistration.PasswordStrengthState
|
||||
@ -94,10 +94,10 @@ fun ResetPasswordScreen(
|
||||
}
|
||||
if (shouldShowLogoutConfirmationDialog) {
|
||||
BitwardenTwoButtonDialog(
|
||||
title = stringResource(id = R.string.log_out),
|
||||
message = stringResource(id = R.string.logout_confirmation),
|
||||
confirmButtonText = stringResource(id = R.string.yes),
|
||||
dismissButtonText = stringResource(id = R.string.cancel),
|
||||
title = stringResource(id = BitwardenString.log_out),
|
||||
message = stringResource(id = BitwardenString.logout_confirmation),
|
||||
confirmButtonText = stringResource(id = BitwardenString.yes),
|
||||
dismissButtonText = stringResource(id = BitwardenString.cancel),
|
||||
onConfirmClick = {
|
||||
shouldShowLogoutConfirmationDialog = false
|
||||
onLogoutClicked()
|
||||
@ -114,22 +114,22 @@ fun ResetPasswordScreen(
|
||||
.nestedScroll(scrollBehavior.nestedScrollConnection),
|
||||
topBar = {
|
||||
BitwardenTopAppBar(
|
||||
title = stringResource(id = R.string.update_master_password),
|
||||
title = stringResource(id = BitwardenString.update_master_password),
|
||||
navigationIcon = null,
|
||||
scrollBehavior = scrollBehavior,
|
||||
actions = {
|
||||
BitwardenTextButton(
|
||||
label = stringResource(id = R.string.save),
|
||||
label = stringResource(id = BitwardenString.save),
|
||||
onClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(ResetPasswordAction.SaveClick) }
|
||||
},
|
||||
modifier = Modifier.testTag("SaveButton"),
|
||||
)
|
||||
BitwardenOverflowActionItem(
|
||||
contentDescription = stringResource(R.string.more),
|
||||
contentDescription = stringResource(BitwardenString.more),
|
||||
menuItemDataList = persistentListOf(
|
||||
OverflowMenuItemData(
|
||||
text = stringResource(R.string.log_out),
|
||||
text = stringResource(BitwardenString.log_out),
|
||||
onClick = { shouldShowLogoutConfirmationDialog = true },
|
||||
),
|
||||
),
|
||||
@ -179,9 +179,9 @@ private fun ResetPasswordScreenContent(
|
||||
Spacer(modifier = Modifier.height(height = 12.dp))
|
||||
val instructionsTextId =
|
||||
if (state.resetReason == ForcePasswordResetReason.WEAK_MASTER_PASSWORD_ON_LOGIN) {
|
||||
R.string.update_weak_master_password_warning
|
||||
BitwardenString.update_weak_master_password_warning
|
||||
} else {
|
||||
R.string.update_master_password_warning
|
||||
BitwardenString.update_master_password_warning
|
||||
}
|
||||
BitwardenInfoCalloutCard(
|
||||
text = stringResource(id = instructionsTextId),
|
||||
@ -194,7 +194,7 @@ private fun ResetPasswordScreenContent(
|
||||
|
||||
if (state.resetReason == ForcePasswordResetReason.WEAK_MASTER_PASSWORD_ON_LOGIN) {
|
||||
val passwordPolicyContent = listOf(
|
||||
stringResource(id = R.string.master_password_policy_in_effect),
|
||||
stringResource(id = BitwardenString.master_password_policy_in_effect),
|
||||
)
|
||||
.plus(state.policies.map { it() })
|
||||
.joinToString("\n • ")
|
||||
@ -207,7 +207,7 @@ private fun ResetPasswordScreenContent(
|
||||
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
BitwardenPasswordField(
|
||||
label = stringResource(id = R.string.current_master_password_required),
|
||||
label = stringResource(id = BitwardenString.current_master_password_required),
|
||||
value = state.currentPasswordInput,
|
||||
onValueChange = onCurrentPasswordInputChanged,
|
||||
passwordFieldTestTag = "MasterPasswordField",
|
||||
@ -220,7 +220,7 @@ private fun ResetPasswordScreenContent(
|
||||
|
||||
var isPasswordVisible by rememberSaveable { mutableStateOf(false) }
|
||||
BitwardenPasswordField(
|
||||
label = stringResource(id = R.string.new_master_password_required),
|
||||
label = stringResource(id = BitwardenString.new_master_password_required),
|
||||
value = state.passwordInput,
|
||||
onValueChange = onPasswordInputChanged,
|
||||
showPassword = isPasswordVisible,
|
||||
@ -246,7 +246,7 @@ private fun ResetPasswordScreenContent(
|
||||
)
|
||||
|
||||
BitwardenPasswordField(
|
||||
label = stringResource(id = R.string.retype_new_master_password_required),
|
||||
label = stringResource(id = BitwardenString.retype_new_master_password_required),
|
||||
value = state.retypePasswordInput,
|
||||
onValueChange = onRetypePasswordInputChanged,
|
||||
showPassword = isPasswordVisible,
|
||||
@ -259,24 +259,26 @@ private fun ResetPasswordScreenContent(
|
||||
)
|
||||
|
||||
BitwardenTextField(
|
||||
label = stringResource(id = R.string.new_master_password_hint),
|
||||
label = stringResource(id = BitwardenString.new_master_password_hint),
|
||||
value = state.passwordHintInput,
|
||||
onValueChange = onPasswordHintInputChanged,
|
||||
supportingContent = {
|
||||
Column {
|
||||
Text(
|
||||
text = stringResource(
|
||||
R.string.bitwarden_cannot_reset_a_lost_or_forgotten_master_password,
|
||||
BitwardenString
|
||||
.bitwarden_cannot_reset_a_lost_or_forgotten_master_password,
|
||||
),
|
||||
style = BitwardenTheme.typography.bodySmall,
|
||||
color = BitwardenTheme.colorScheme.text.secondary,
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
)
|
||||
BitwardenHyperTextLink(
|
||||
annotatedResId = R.string.learn_about_ways_to_prevent_account_lockout,
|
||||
annotatedResId =
|
||||
BitwardenString.learn_about_ways_to_prevent_account_lockout,
|
||||
annotationKey = "onPreventAccountLockout",
|
||||
accessibilityString = stringResource(
|
||||
R.string.learn_about_ways_to_prevent_account_lockout,
|
||||
BitwardenString.learn_about_ways_to_prevent_account_lockout,
|
||||
),
|
||||
onClick = onLearnToPreventLockout,
|
||||
)
|
||||
|
||||
@ -5,9 +5,9 @@ import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.bitwarden.ui.platform.base.BaseViewModel
|
||||
import com.bitwarden.ui.platform.base.util.orNullIfBlank
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.auth.datasource.disk.model.ForcePasswordResetReason
|
||||
import com.x8bit.bitwarden.data.auth.datasource.sdk.model.PasswordStrength
|
||||
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
||||
@ -173,9 +173,9 @@ class ResetPasswordViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = ResetPasswordState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.validation_field_required
|
||||
.asText(R.string.master_password.asText()),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.validation_field_required
|
||||
.asText(BitwardenString.master_password.asText()),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -198,8 +198,8 @@ class ResetPasswordViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = ResetPasswordState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.master_password_length_val_message_x
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.master_password_length_val_message_x
|
||||
.asText(MIN_PASSWORD_LENGTH),
|
||||
),
|
||||
)
|
||||
@ -291,8 +291,8 @@ class ResetPasswordViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = ResetPasswordState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.generic_error_message.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.generic_error_message.asText(),
|
||||
error = result.error,
|
||||
),
|
||||
)
|
||||
@ -317,8 +317,8 @@ class ResetPasswordViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = ResetPasswordState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.generic_error_message.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.generic_error_message.asText(),
|
||||
error = result.error,
|
||||
),
|
||||
)
|
||||
@ -331,8 +331,8 @@ class ResetPasswordViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = ResetPasswordState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.invalid_master_password.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.invalid_master_password.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -355,8 +355,9 @@ class ResetPasswordViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = ResetPasswordState.DialogState.Error(
|
||||
title = R.string.master_password_policy_validation_title.asText(),
|
||||
message = R.string.master_password_policy_validation_message.asText(),
|
||||
title = BitwardenString.master_password_policy_validation_title.asText(),
|
||||
message = BitwardenString.master_password_policy_validation_message
|
||||
.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -384,8 +385,8 @@ class ResetPasswordViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = ResetPasswordState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.master_password_confirmation_val_message.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.master_password_confirmation_val_message.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -400,7 +401,7 @@ class ResetPasswordViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = ResetPasswordState.DialogState.Loading(
|
||||
message = R.string.updating_password.asText(),
|
||||
message = BitwardenString.updating_password.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
package com.x8bit.bitwarden.ui.auth.feature.resetpassword.util
|
||||
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.PolicyInformation
|
||||
|
||||
/**
|
||||
@ -13,27 +13,27 @@ fun List<PolicyInformation.MasterPassword>.toDisplayLabels(): List<Text> {
|
||||
val list = mutableListOf<Text>()
|
||||
|
||||
mapNotNull { it.minLength }.maxOrNull()?.let {
|
||||
list.add(R.string.policy_in_effect_min_length.asText(it))
|
||||
list.add(BitwardenString.policy_in_effect_min_length.asText(it))
|
||||
}
|
||||
|
||||
mapNotNull { it.minComplexity }.maxOrNull()?.let {
|
||||
list.add(R.string.policy_in_effect_min_complexity.asText(it))
|
||||
list.add(BitwardenString.policy_in_effect_min_complexity.asText(it))
|
||||
}
|
||||
|
||||
if (mapNotNull { it.requireUpper }.any { it }) {
|
||||
list.add(R.string.policy_in_effect_uppercase.asText())
|
||||
list.add(BitwardenString.policy_in_effect_uppercase.asText())
|
||||
}
|
||||
|
||||
if (mapNotNull { it.requireLower }.any { it }) {
|
||||
list.add(R.string.policy_in_effect_lowercase.asText())
|
||||
list.add(BitwardenString.policy_in_effect_lowercase.asText())
|
||||
}
|
||||
|
||||
if (mapNotNull { it.requireNumbers }.any { it }) {
|
||||
list.add(R.string.policy_in_effect_numbers.asText())
|
||||
list.add(BitwardenString.policy_in_effect_numbers.asText())
|
||||
}
|
||||
|
||||
if (mapNotNull { it.requireSpecial }.any { it }) {
|
||||
list.add(R.string.policy_in_effect_special.asText())
|
||||
list.add(BitwardenString.policy_in_effect_special.asText())
|
||||
}
|
||||
|
||||
return list
|
||||
|
||||
@ -29,8 +29,8 @@ import com.bitwarden.ui.platform.base.util.standardHorizontalMargin
|
||||
import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar
|
||||
import com.bitwarden.ui.platform.components.button.BitwardenTextButton
|
||||
import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.card.BitwardenInfoCalloutCard
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenLoadingDialog
|
||||
@ -61,19 +61,19 @@ fun SetPasswordScreen(
|
||||
.nestedScroll(scrollBehavior.nestedScrollConnection),
|
||||
topBar = {
|
||||
BitwardenTopAppBar(
|
||||
title = stringResource(id = R.string.set_master_password),
|
||||
title = stringResource(id = BitwardenString.set_master_password),
|
||||
navigationIcon = null,
|
||||
scrollBehavior = scrollBehavior,
|
||||
actions = {
|
||||
BitwardenTextButton(
|
||||
label = stringResource(id = R.string.cancel),
|
||||
label = stringResource(id = BitwardenString.cancel),
|
||||
onClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(SetPasswordAction.CancelClick) }
|
||||
},
|
||||
modifier = Modifier.testTag("CancelButton"),
|
||||
)
|
||||
BitwardenTextButton(
|
||||
label = stringResource(id = R.string.submit),
|
||||
label = stringResource(id = BitwardenString.submit),
|
||||
onClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(SetPasswordAction.SubmitClick) }
|
||||
},
|
||||
@ -116,7 +116,7 @@ private fun SetPasswordScreenContent(
|
||||
Spacer(modifier = Modifier.height(height = 12.dp))
|
||||
Text(
|
||||
text = stringResource(
|
||||
id = R.string.your_organization_requires_you_to_set_a_master_password,
|
||||
id = BitwardenString.your_organization_requires_you_to_set_a_master_password,
|
||||
),
|
||||
style = BitwardenTheme.typography.bodyMedium,
|
||||
color = BitwardenTheme.colorScheme.text.primary,
|
||||
@ -128,7 +128,7 @@ private fun SetPasswordScreenContent(
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
|
||||
BitwardenInfoCalloutCard(
|
||||
text = stringResource(id = R.string.reset_password_auto_enroll_invite_warning),
|
||||
text = stringResource(id = BitwardenString.reset_password_auto_enroll_invite_warning),
|
||||
modifier = Modifier
|
||||
.standardHorizontalMargin()
|
||||
.fillMaxWidth(),
|
||||
@ -138,12 +138,12 @@ private fun SetPasswordScreenContent(
|
||||
|
||||
var isPasswordVisible by rememberSaveable { mutableStateOf(false) }
|
||||
BitwardenPasswordField(
|
||||
label = stringResource(id = R.string.master_password),
|
||||
label = stringResource(id = BitwardenString.master_password),
|
||||
value = state.passwordInput,
|
||||
onValueChange = onPasswordInputChanged,
|
||||
showPassword = isPasswordVisible,
|
||||
showPasswordChange = { isPasswordVisible = it },
|
||||
supportingText = stringResource(id = R.string.master_password_description),
|
||||
supportingText = stringResource(id = BitwardenString.master_password_description),
|
||||
passwordFieldTestTag = "NewPasswordField",
|
||||
cardStyle = CardStyle.Top(dividerPadding = 0.dp),
|
||||
modifier = Modifier
|
||||
@ -152,7 +152,7 @@ private fun SetPasswordScreenContent(
|
||||
)
|
||||
|
||||
BitwardenPasswordField(
|
||||
label = stringResource(id = R.string.retype_master_password),
|
||||
label = stringResource(id = BitwardenString.retype_master_password),
|
||||
value = state.retypePasswordInput,
|
||||
onValueChange = onRetypePasswordInputChanged,
|
||||
showPassword = isPasswordVisible,
|
||||
@ -165,10 +165,10 @@ private fun SetPasswordScreenContent(
|
||||
)
|
||||
|
||||
BitwardenTextField(
|
||||
label = stringResource(id = R.string.master_password_hint),
|
||||
label = stringResource(id = BitwardenString.master_password_hint),
|
||||
value = state.passwordHintInput,
|
||||
onValueChange = onPasswordHintInputChanged,
|
||||
supportingText = stringResource(id = R.string.master_password_hint_description),
|
||||
supportingText = stringResource(id = BitwardenString.master_password_hint_description),
|
||||
textFieldTestTag = "MasterPasswordHintLabel",
|
||||
cardStyle = CardStyle.Bottom,
|
||||
modifier = Modifier
|
||||
|
||||
@ -4,9 +4,9 @@ import android.os.Parcelable
|
||||
import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.bitwarden.ui.platform.base.BaseViewModel
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.LogoutReason
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.SetPasswordResult
|
||||
@ -88,9 +88,9 @@ class SetPasswordViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = SetPasswordState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.validation_field_required
|
||||
.asText(R.string.master_password.asText()),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.validation_field_required
|
||||
.asText(BitwardenString.master_password.asText()),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -110,8 +110,8 @@ class SetPasswordViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = SetPasswordState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.master_password_length_val_message_x
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.master_password_length_val_message_x
|
||||
.asText(MIN_PASSWORD_LENGTH),
|
||||
),
|
||||
)
|
||||
@ -122,8 +122,8 @@ class SetPasswordViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = SetPasswordState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.master_password_confirmation_val_message.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.master_password_confirmation_val_message.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -189,8 +189,8 @@ class SetPasswordViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = SetPasswordState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.generic_error_message.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.generic_error_message.asText(),
|
||||
error = result.error,
|
||||
),
|
||||
)
|
||||
@ -215,8 +215,9 @@ class SetPasswordViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = SetPasswordState.DialogState.Error(
|
||||
title = R.string.master_password_policy_validation_title.asText(),
|
||||
message = R.string.master_password_policy_validation_message.asText(),
|
||||
title = BitwardenString.master_password_policy_validation_title.asText(),
|
||||
message =
|
||||
BitwardenString.master_password_policy_validation_message.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -231,7 +232,7 @@ class SetPasswordViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = SetPasswordState.DialogState.Loading(
|
||||
message = R.string.updating_password.asText(),
|
||||
message = BitwardenString.updating_password.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
@ -48,8 +48,8 @@ import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.components.toggle.BitwardenSwitch
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.auth.feature.startregistration.StartRegistrationAction.ErrorDialogDismiss
|
||||
import com.x8bit.bitwarden.ui.auth.feature.startregistration.StartRegistrationEvent.NavigateToPrivacyPolicy
|
||||
import com.x8bit.bitwarden.ui.auth.feature.startregistration.StartRegistrationEvent.NavigateToTerms
|
||||
@ -121,10 +121,10 @@ fun StartRegistrationScreen(
|
||||
.nestedScroll(scrollBehavior.nestedScrollConnection),
|
||||
topBar = {
|
||||
BitwardenTopAppBar(
|
||||
title = stringResource(id = R.string.create_account),
|
||||
title = stringResource(id = BitwardenString.create_account),
|
||||
scrollBehavior = scrollBehavior,
|
||||
navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close),
|
||||
navigationIconContentDescription = stringResource(id = R.string.close),
|
||||
navigationIconContentDescription = stringResource(id = BitwardenString.close),
|
||||
onNavigationIconClick = handler.onCloseClick,
|
||||
)
|
||||
},
|
||||
@ -159,7 +159,7 @@ private fun StartRegistrationDialogs(
|
||||
}
|
||||
|
||||
StartRegistrationDialog.Loading -> {
|
||||
BitwardenLoadingDialog(text = stringResource(id = R.string.create_account))
|
||||
BitwardenLoadingDialog(text = stringResource(id = BitwardenString.create_account))
|
||||
}
|
||||
|
||||
null -> Unit
|
||||
@ -199,7 +199,7 @@ private fun StartRegistrationContent(
|
||||
Spacer(modifier = Modifier.height(12.dp))
|
||||
|
||||
BitwardenTextField(
|
||||
label = stringResource(id = R.string.email_address_required),
|
||||
label = stringResource(id = BitwardenString.email_address_required),
|
||||
value = emailInput,
|
||||
onValueChange = handler.onEmailInputChange,
|
||||
keyboardType = KeyboardType.Email,
|
||||
@ -207,8 +207,8 @@ private fun StartRegistrationContent(
|
||||
supportingContentPadding = PaddingValues(),
|
||||
supportingContent = {
|
||||
EnvironmentSelector(
|
||||
labelText = stringResource(id = R.string.create_account_on_with_colon),
|
||||
dialogTitle = stringResource(id = R.string.create_account_on),
|
||||
labelText = stringResource(id = BitwardenString.create_account_on_with_colon),
|
||||
dialogTitle = stringResource(id = BitwardenString.create_account_on),
|
||||
selectedOption = selectedEnvironmentType,
|
||||
onOptionSelected = handler.onEnvironmentTypeSelect,
|
||||
onHelpClick = handler.onServerGeologyHelpClick,
|
||||
@ -226,7 +226,7 @@ private fun StartRegistrationContent(
|
||||
Spacer(modifier = Modifier.height(8.dp))
|
||||
|
||||
BitwardenTextField(
|
||||
label = stringResource(id = R.string.name),
|
||||
label = stringResource(id = BitwardenString.name),
|
||||
value = nameInput,
|
||||
onValueChange = handler.onNameInputChange,
|
||||
textFieldTestTag = "NameEntry",
|
||||
@ -251,7 +251,7 @@ private fun StartRegistrationContent(
|
||||
Spacer(modifier = Modifier.height(24.dp))
|
||||
|
||||
BitwardenFilledButton(
|
||||
label = stringResource(id = R.string.continue_text),
|
||||
label = stringResource(id = BitwardenString.continue_text),
|
||||
onClick = handler.onContinueClick,
|
||||
isEnabled = isContinueButtonEnabled,
|
||||
modifier = Modifier
|
||||
@ -279,8 +279,8 @@ private fun TermsAndPrivacyText(
|
||||
onPrivacyPolicyClick: () -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
val strTerms = stringResource(id = R.string.terms_of_service)
|
||||
val strPrivacy = stringResource(id = R.string.privacy_policy)
|
||||
val strTerms = stringResource(id = BitwardenString.terms_of_service)
|
||||
val strPrivacy = stringResource(id = BitwardenString.privacy_policy)
|
||||
Row(
|
||||
horizontalArrangement = Arrangement.Start,
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
@ -309,7 +309,8 @@ private fun TermsAndPrivacyText(
|
||||
) {
|
||||
Text(
|
||||
text = annotatedStringResource(
|
||||
id = R.string.by_continuing_you_agree_to_the_terms_of_service_and_privacy_policy,
|
||||
id = BitwardenString
|
||||
.by_continuing_you_agree_to_the_terms_of_service_and_privacy_policy,
|
||||
onAnnotationClick = {
|
||||
when (it) {
|
||||
"termsOfService" -> onTermsClick()
|
||||
@ -331,7 +332,7 @@ private fun ReceiveMarketingEmailsSwitch(
|
||||
onUnsubscribeClick: () -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
val unsubscribeString = stringResource(id = R.string.unsubscribe)
|
||||
val unsubscribeString = stringResource(id = BitwardenString.unsubscribe)
|
||||
@Suppress("MaxLineLength")
|
||||
BitwardenSwitch(
|
||||
modifier = modifier
|
||||
@ -348,7 +349,7 @@ private fun ReceiveMarketingEmailsSwitch(
|
||||
}
|
||||
.testTag(tag = "ReceiveMarketingEmailsToggle"),
|
||||
label = annotatedStringResource(
|
||||
id = R.string.get_emails_from_bitwarden_for_announcements_advices_and_research_opportunities_unsubscribe_any_time,
|
||||
id = BitwardenString.get_emails_from_bitwarden_for_announcements_advices_and_research_opportunities_unsubscribe_any_time,
|
||||
onAnnotationClick = { onUnsubscribeClick() },
|
||||
),
|
||||
isChecked = isChecked,
|
||||
|
||||
@ -8,9 +8,9 @@ import com.bitwarden.data.repository.model.Environment.Type
|
||||
import com.bitwarden.ui.platform.base.BackgroundEvent
|
||||
import com.bitwarden.ui.platform.base.BaseViewModel
|
||||
import com.bitwarden.ui.platform.base.util.isValidEmail
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.RegisterResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.SendVerificationEmailResult
|
||||
@ -194,9 +194,9 @@ class StartRegistrationViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = StartRegistrationDialog.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.validation_field_required
|
||||
.asText(R.string.email_address.asText()),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.validation_field_required
|
||||
.asText(BitwardenString.email_address.asText()),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -206,8 +206,8 @@ class StartRegistrationViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = StartRegistrationDialog.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.invalid_email.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.invalid_email.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -244,11 +244,11 @@ class StartRegistrationViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = StartRegistrationDialog.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = sendVerificationEmailResult
|
||||
.errorMessage
|
||||
?.asText()
|
||||
?: R.string.generic_error_message.asText(),
|
||||
?: BitwardenString.generic_error_message.asText(),
|
||||
error = sendVerificationEmailResult.error,
|
||||
),
|
||||
)
|
||||
|
||||
@ -36,8 +36,8 @@ import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.components.toggle.BitwardenSwitch
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.auth.feature.trusteddevice.handlers.TrustedDeviceHandlers
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenLoadingDialog
|
||||
@ -98,11 +98,11 @@ private fun TrustedDeviceScaffold(
|
||||
.nestedScroll(scrollBehavior.nestedScrollConnection),
|
||||
topBar = {
|
||||
BitwardenTopAppBar(
|
||||
title = stringResource(id = R.string.log_in_initiated),
|
||||
title = stringResource(id = BitwardenString.log_in_initiated),
|
||||
scrollBehavior = scrollBehavior,
|
||||
navigationIcon = NavigationIcon(
|
||||
navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close),
|
||||
navigationIconContentDescription = stringResource(id = R.string.close),
|
||||
navigationIconContentDescription = stringResource(id = BitwardenString.close),
|
||||
onNavigationIconClick = handlers.onBackClick,
|
||||
),
|
||||
)
|
||||
@ -115,8 +115,8 @@ private fun TrustedDeviceScaffold(
|
||||
) {
|
||||
Spacer(modifier = Modifier.height(height = 12.dp))
|
||||
BitwardenSwitch(
|
||||
label = stringResource(id = R.string.remember_this_device),
|
||||
supportingText = stringResource(id = R.string.turn_off_using_public_device),
|
||||
label = stringResource(id = BitwardenString.remember_this_device),
|
||||
supportingText = stringResource(id = BitwardenString.turn_off_using_public_device),
|
||||
isChecked = state.isRemembered,
|
||||
onCheckedChange = handlers.onRememberToggle,
|
||||
cardStyle = CardStyle.Full,
|
||||
@ -129,7 +129,7 @@ private fun TrustedDeviceScaffold(
|
||||
|
||||
if (state.showContinueButton) {
|
||||
BitwardenFilledButton(
|
||||
label = stringResource(id = R.string.continue_text),
|
||||
label = stringResource(id = BitwardenString.continue_text),
|
||||
onClick = handlers.onContinueClick,
|
||||
modifier = Modifier
|
||||
.standardHorizontalMargin()
|
||||
@ -140,7 +140,7 @@ private fun TrustedDeviceScaffold(
|
||||
|
||||
if (state.showOtherDeviceButton) {
|
||||
BitwardenFilledButton(
|
||||
label = stringResource(id = R.string.approve_with_my_other_device),
|
||||
label = stringResource(id = BitwardenString.approve_with_my_other_device),
|
||||
onClick = handlers.onApproveWithDeviceClick,
|
||||
modifier = Modifier
|
||||
.testTag("ApproveWithOtherDeviceButton")
|
||||
@ -152,7 +152,7 @@ private fun TrustedDeviceScaffold(
|
||||
|
||||
if (state.showRequestAdminButton) {
|
||||
BitwardenOutlinedButton(
|
||||
label = stringResource(id = R.string.request_admin_approval),
|
||||
label = stringResource(id = BitwardenString.request_admin_approval),
|
||||
onClick = handlers.onApproveWithAdminClick,
|
||||
modifier = Modifier
|
||||
.standardHorizontalMargin()
|
||||
@ -164,7 +164,7 @@ private fun TrustedDeviceScaffold(
|
||||
|
||||
if (state.showMasterPasswordButton) {
|
||||
BitwardenOutlinedButton(
|
||||
label = stringResource(id = R.string.approve_with_master_password),
|
||||
label = stringResource(id = BitwardenString.approve_with_master_password),
|
||||
onClick = handlers.onApproveWithPasswordClick,
|
||||
modifier = Modifier
|
||||
.testTag("ApproveWithMasterPasswordButton")
|
||||
@ -177,7 +177,7 @@ private fun TrustedDeviceScaffold(
|
||||
Spacer(modifier = Modifier.height(12.dp))
|
||||
Text(
|
||||
text = stringResource(
|
||||
id = R.string.logging_in_as_x_on_y,
|
||||
id = BitwardenString.logging_in_as_x_on_y,
|
||||
state.emailAddress,
|
||||
state.environmentLabel,
|
||||
),
|
||||
@ -191,7 +191,7 @@ private fun TrustedDeviceScaffold(
|
||||
)
|
||||
|
||||
BitwardenClickableText(
|
||||
label = stringResource(id = R.string.not_you),
|
||||
label = stringResource(id = BitwardenString.not_you),
|
||||
onClick = handlers.onNotYouButtonClick,
|
||||
style = BitwardenTheme.typography.labelLarge,
|
||||
innerPadding = PaddingValues(vertical = 8.dp, horizontal = 16.dp),
|
||||
|
||||
@ -4,9 +4,9 @@ import android.os.Parcelable
|
||||
import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.bitwarden.ui.platform.base.BaseViewModel
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.AuthState
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.LogoutReason
|
||||
@ -84,8 +84,8 @@ class TrustedDeviceViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = TrustedDeviceState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.generic_error_message.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.generic_error_message.asText(),
|
||||
error = result.error,
|
||||
),
|
||||
)
|
||||
@ -114,7 +114,9 @@ class TrustedDeviceViewModel @Inject constructor(
|
||||
private fun handleContinueClick() {
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = TrustedDeviceState.DialogState.Loading(R.string.loading.asText()),
|
||||
dialogState = TrustedDeviceState.DialogState.Loading(
|
||||
BitwardenString.loading.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
authRepository.shouldTrustDevice = state.isRemembered
|
||||
|
||||
@ -48,9 +48,9 @@ import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.components.toggle.BitwardenSwitch
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.auth.feature.twofactorlogin.util.description
|
||||
import com.x8bit.bitwarden.ui.auth.feature.twofactorlogin.util.title
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog
|
||||
@ -129,7 +129,7 @@ fun TwoFactorLoginScreen(
|
||||
|
||||
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
|
||||
val title = if (state.isNewDeviceVerification) {
|
||||
R.string.verify_your_identity.asText()
|
||||
BitwardenString.verify_your_identity.asText()
|
||||
} else {
|
||||
state.authMethod.title
|
||||
}
|
||||
@ -142,14 +142,14 @@ fun TwoFactorLoginScreen(
|
||||
title = title(),
|
||||
scrollBehavior = scrollBehavior,
|
||||
navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close),
|
||||
navigationIconContentDescription = stringResource(id = R.string.close),
|
||||
navigationIconContentDescription = stringResource(id = BitwardenString.close),
|
||||
onNavigationIconClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(TwoFactorLoginAction.CloseButtonClick) }
|
||||
},
|
||||
actions = {
|
||||
if (!state.isNewDeviceVerification) {
|
||||
BitwardenOverflowActionItem(
|
||||
contentDescription = stringResource(R.string.more),
|
||||
contentDescription = stringResource(BitwardenString.more),
|
||||
menuItemDataList = state.availableAuthMethods
|
||||
.map {
|
||||
OverflowMenuItemData(
|
||||
@ -202,7 +202,7 @@ private fun TwoFactorLoginDialogs(
|
||||
title = dialogState
|
||||
.title
|
||||
?.invoke()
|
||||
?: stringResource(R.string.an_error_has_occurred),
|
||||
?: stringResource(BitwardenString.an_error_has_occurred),
|
||||
message = dialogState.message(),
|
||||
throwable = dialogState.error,
|
||||
onDismissRequest = onDismissRequest,
|
||||
@ -247,7 +247,7 @@ private fun TwoFactorLoginScreenContent(
|
||||
Spacer(modifier = Modifier.height(height = 12.dp))
|
||||
Text(
|
||||
text = if (state.isNewDeviceVerification) {
|
||||
stringResource(R.string.enter_verification_code_new_device)
|
||||
stringResource(BitwardenString.enter_verification_code_new_device)
|
||||
} else {
|
||||
state.authMethod.description(
|
||||
state.displayEmail,
|
||||
@ -284,7 +284,7 @@ private fun TwoFactorLoginScreenContent(
|
||||
BitwardenPasswordField(
|
||||
value = state.codeInput,
|
||||
onValueChange = onCodeInputChange,
|
||||
label = stringResource(id = R.string.verification_code),
|
||||
label = stringResource(id = BitwardenString.verification_code),
|
||||
keyboardType = KeyboardType.Number,
|
||||
imeAction = ImeAction.Done,
|
||||
autoFocus = true,
|
||||
@ -302,7 +302,7 @@ private fun TwoFactorLoginScreenContent(
|
||||
|
||||
if (!state.isNewDeviceVerification) {
|
||||
BitwardenSwitch(
|
||||
label = stringResource(id = R.string.remember),
|
||||
label = stringResource(id = BitwardenString.remember),
|
||||
isChecked = state.isRememberEnabled,
|
||||
onCheckedChange = onRememberMeToggle,
|
||||
cardStyle = CardStyle.Full,
|
||||
@ -327,7 +327,7 @@ private fun TwoFactorLoginScreenContent(
|
||||
Spacer(modifier = Modifier.height(12.dp))
|
||||
|
||||
BitwardenOutlinedButton(
|
||||
label = stringResource(id = R.string.send_verification_code_again),
|
||||
label = stringResource(id = BitwardenString.send_verification_code_again),
|
||||
onClick = onResendEmailButtonClick,
|
||||
modifier = Modifier
|
||||
.standardHorizontalMargin()
|
||||
|
||||
@ -14,9 +14,9 @@ import com.bitwarden.network.util.preferredAuthMethod
|
||||
import com.bitwarden.network.util.twoFactorDisplayEmail
|
||||
import com.bitwarden.network.util.twoFactorDuoAuthUrl
|
||||
import com.bitwarden.ui.platform.base.BaseViewModel
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.LoginResult
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.ResendEmailResult
|
||||
@ -181,8 +181,8 @@ class TwoFactorLoginViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = TwoFactorLoginState.DialogState.Error(
|
||||
title = R.string.log_in_denied.asText(),
|
||||
message = R.string.captcha_failed.asText(),
|
||||
title = BitwardenString.log_in_denied.asText(),
|
||||
message = BitwardenString.captcha_failed.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -227,8 +227,8 @@ class TwoFactorLoginViewModel @Inject constructor(
|
||||
?: mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = TwoFactorLoginState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.error_connecting_with_the_duo_service_use_a_different_two_step_login_method_or_contact_duo_for_assistance.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.error_connecting_with_the_duo_service_use_a_different_two_step_login_method_or_contact_duo_for_assistance.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -248,19 +248,19 @@ class TwoFactorLoginViewModel @Inject constructor(
|
||||
.baseWebVaultUrlOrDefault,
|
||||
data = it,
|
||||
headerText = resourceManager.getString(
|
||||
resId = R.string.fido2_title,
|
||||
resId = BitwardenString.fido2_title,
|
||||
),
|
||||
buttonText = resourceManager.getString(
|
||||
resId = R.string.fido2_authenticate_web_authn,
|
||||
resId = BitwardenString.fido2_authenticate_web_authn,
|
||||
),
|
||||
returnButtonText = resourceManager.getString(
|
||||
resId = R.string.fido2_return_to_app,
|
||||
resId = BitwardenString.fido2_return_to_app,
|
||||
),
|
||||
)
|
||||
TwoFactorLoginEvent.NavigateToWebAuth(uri = uri)
|
||||
}
|
||||
?: TwoFactorLoginEvent.ShowSnackbar(
|
||||
message = R.string.there_was_an_error_starting_web_authn_two_factor_authentication.asText(),
|
||||
message = BitwardenString.there_was_an_error_starting_web_authn_two_factor_authentication.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -315,9 +315,9 @@ class TwoFactorLoginViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = TwoFactorLoginState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = loginResult.errorMessage?.asText()
|
||||
?: R.string.invalid_verification_code.asText(),
|
||||
?: BitwardenString.invalid_verification_code.asText(),
|
||||
error = loginResult.error,
|
||||
),
|
||||
)
|
||||
@ -328,8 +328,8 @@ class TwoFactorLoginViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = TwoFactorLoginState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.this_is_not_a_recognized_bitwarden_server_you_may_need_to_check_with_your_provider_or_update_your_server
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.this_is_not_a_recognized_bitwarden_server_you_may_need_to_check_with_your_provider_or_update_your_server
|
||||
.asText(),
|
||||
),
|
||||
)
|
||||
@ -340,9 +340,9 @@ class TwoFactorLoginViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = TwoFactorLoginState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = loginResult.errorMessage?.asText()
|
||||
?: R.string.invalid_verification_code.asText(),
|
||||
?: BitwardenString.invalid_verification_code.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -354,8 +354,8 @@ class TwoFactorLoginViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = TwoFactorLoginState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.we_couldnt_verify_the_servers_certificate.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.we_couldnt_verify_the_servers_certificate.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -378,8 +378,8 @@ class TwoFactorLoginViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = TwoFactorLoginState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.generic_error_message.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.generic_error_message.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -423,7 +423,7 @@ class TwoFactorLoginViewModel @Inject constructor(
|
||||
it.copy(
|
||||
dialogState = TwoFactorLoginState.DialogState.Error(
|
||||
message = result.message?.asText()
|
||||
?: R.string.generic_error_message.asText(),
|
||||
?: BitwardenString.generic_error_message.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -451,8 +451,8 @@ class TwoFactorLoginViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = TwoFactorLoginState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.verification_email_not_sent.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.verification_email_not_sent.asText(),
|
||||
error = result.error,
|
||||
),
|
||||
)
|
||||
@ -464,7 +464,7 @@ class TwoFactorLoginViewModel @Inject constructor(
|
||||
if (action.isUserInitiated) {
|
||||
sendEvent(
|
||||
TwoFactorLoginEvent.ShowSnackbar(
|
||||
message = R.string.verification_email_sent.asText(),
|
||||
message = BitwardenString.verification_email_sent.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -510,7 +510,7 @@ class TwoFactorLoginViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = TwoFactorLoginState.DialogState.Loading(
|
||||
message = R.string.submitting.asText(),
|
||||
message = BitwardenString.submitting.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -584,7 +584,7 @@ class TwoFactorLoginViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = TwoFactorLoginState.DialogState.Loading(
|
||||
message = R.string.logging_in.asText(),
|
||||
message = BitwardenString.logging_in.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
@ -3,26 +3,26 @@ package com.x8bit.bitwarden.ui.auth.feature.twofactorlogin.util
|
||||
import androidx.annotation.DrawableRes
|
||||
import com.bitwarden.network.model.TwoFactorAuthMethod
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.bitwarden.ui.util.concat
|
||||
import com.x8bit.bitwarden.R
|
||||
|
||||
/**
|
||||
* Get the title for the given auth method.
|
||||
*/
|
||||
val TwoFactorAuthMethod.title: Text
|
||||
get() = when (this) {
|
||||
TwoFactorAuthMethod.AUTHENTICATOR_APP -> R.string.authenticator_app_title.asText()
|
||||
TwoFactorAuthMethod.DUO -> R.string.duo_title.asText()
|
||||
TwoFactorAuthMethod.DUO_ORGANIZATION -> R.string.duo_org_title.asText(
|
||||
R.string.organization.asText(),
|
||||
TwoFactorAuthMethod.AUTHENTICATOR_APP -> BitwardenString.authenticator_app_title.asText()
|
||||
TwoFactorAuthMethod.DUO -> BitwardenString.duo_title.asText()
|
||||
TwoFactorAuthMethod.DUO_ORGANIZATION -> BitwardenString.duo_org_title.asText(
|
||||
BitwardenString.organization.asText(),
|
||||
)
|
||||
|
||||
TwoFactorAuthMethod.EMAIL -> R.string.email.asText()
|
||||
TwoFactorAuthMethod.RECOVERY_CODE -> R.string.recovery_code_title.asText()
|
||||
TwoFactorAuthMethod.WEB_AUTH -> R.string.fido2_authenticate_web_authn.asText()
|
||||
TwoFactorAuthMethod.YUBI_KEY -> R.string.yubi_key_title.asText()
|
||||
TwoFactorAuthMethod.EMAIL -> BitwardenString.email.asText()
|
||||
TwoFactorAuthMethod.RECOVERY_CODE -> BitwardenString.recovery_code_title.asText()
|
||||
TwoFactorAuthMethod.WEB_AUTH -> BitwardenString.fido2_authenticate_web_authn.asText()
|
||||
TwoFactorAuthMethod.YUBI_KEY -> BitwardenString.yubi_key_title.asText()
|
||||
else -> "".asText()
|
||||
}
|
||||
|
||||
@ -30,18 +30,22 @@ val TwoFactorAuthMethod.title: Text
|
||||
* Get the description for the given auth method.
|
||||
*/
|
||||
fun TwoFactorAuthMethod.description(email: String): Text = when (this) {
|
||||
TwoFactorAuthMethod.AUTHENTICATOR_APP -> R.string.enter_verification_code_app.asText()
|
||||
TwoFactorAuthMethod.DUO -> R.string.follow_the_steps_from_duo_to_finish_logging_in.asText()
|
||||
TwoFactorAuthMethod.AUTHENTICATOR_APP -> BitwardenString.enter_verification_code_app.asText()
|
||||
TwoFactorAuthMethod.DUO -> {
|
||||
BitwardenString.follow_the_steps_from_duo_to_finish_logging_in.asText()
|
||||
}
|
||||
TwoFactorAuthMethod.DUO_ORGANIZATION -> {
|
||||
R.string.duo_two_step_login_is_required_for_your_account
|
||||
BitwardenString.duo_two_step_login_is_required_for_your_account
|
||||
.asText()
|
||||
.concat(" ".asText())
|
||||
.concat(R.string.follow_the_steps_from_duo_to_finish_logging_in.asText())
|
||||
.concat(BitwardenString.follow_the_steps_from_duo_to_finish_logging_in.asText())
|
||||
}
|
||||
|
||||
TwoFactorAuthMethod.EMAIL -> R.string.enter_verification_code_email.asText(email)
|
||||
TwoFactorAuthMethod.WEB_AUTH -> R.string.continue_to_complete_web_authn_verification.asText()
|
||||
TwoFactorAuthMethod.YUBI_KEY -> R.string.yubi_key_instruction.asText()
|
||||
TwoFactorAuthMethod.EMAIL -> BitwardenString.enter_verification_code_email.asText(email)
|
||||
TwoFactorAuthMethod.WEB_AUTH -> {
|
||||
BitwardenString.continue_to_complete_web_authn_verification.asText()
|
||||
}
|
||||
TwoFactorAuthMethod.YUBI_KEY -> BitwardenString.yubi_key_instruction.asText()
|
||||
else -> "".asText()
|
||||
}
|
||||
|
||||
@ -52,7 +56,7 @@ val TwoFactorAuthMethod.button: Text
|
||||
get() = when (this) {
|
||||
TwoFactorAuthMethod.DUO,
|
||||
TwoFactorAuthMethod.DUO_ORGANIZATION,
|
||||
-> R.string.launch_duo.asText()
|
||||
-> BitwardenString.launch_duo.asText()
|
||||
|
||||
TwoFactorAuthMethod.AUTHENTICATOR_APP,
|
||||
TwoFactorAuthMethod.EMAIL,
|
||||
@ -60,9 +64,9 @@ val TwoFactorAuthMethod.button: Text
|
||||
TwoFactorAuthMethod.U2F,
|
||||
TwoFactorAuthMethod.REMEMBER,
|
||||
TwoFactorAuthMethod.RECOVERY_CODE,
|
||||
-> R.string.continue_text.asText()
|
||||
-> BitwardenString.continue_text.asText()
|
||||
|
||||
TwoFactorAuthMethod.WEB_AUTH -> R.string.launch_web_authn.asText()
|
||||
TwoFactorAuthMethod.WEB_AUTH -> BitwardenString.launch_web_authn.asText()
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -42,8 +42,8 @@ import com.bitwarden.ui.platform.components.appbar.model.OverflowMenuItemData
|
||||
import com.bitwarden.ui.platform.components.button.BitwardenFilledButton
|
||||
import com.bitwarden.ui.platform.components.button.BitwardenOutlinedButton
|
||||
import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.auth.feature.vaultunlock.util.inputFieldVisibilityToggleTestTag
|
||||
import com.x8bit.bitwarden.ui.auth.feature.vaultunlock.util.unlockScreenInputLabel
|
||||
import com.x8bit.bitwarden.ui.auth.feature.vaultunlock.util.unlockScreenInputTestTag
|
||||
@ -152,13 +152,13 @@ fun VaultUnlockScreen(
|
||||
)
|
||||
|
||||
VaultUnlockState.VaultUnlockDialog.Loading -> BitwardenLoadingDialog(
|
||||
text = stringResource(id = R.string.loading),
|
||||
text = stringResource(id = BitwardenString.loading),
|
||||
)
|
||||
|
||||
VaultUnlockState.VaultUnlockDialog.BiometricsNoLongerSupported -> {
|
||||
BitwardenBasicDialog(
|
||||
title = stringResource(id = R.string.biometrics_no_longer_supported_title),
|
||||
message = stringResource(id = R.string.biometrics_no_longer_supported),
|
||||
title = stringResource(id = BitwardenString.biometrics_no_longer_supported_title),
|
||||
message = stringResource(id = BitwardenString.biometrics_no_longer_supported),
|
||||
onDismissRequest = remember {
|
||||
{
|
||||
viewModel.trySendAction(
|
||||
@ -215,10 +215,10 @@ fun VaultUnlockScreen(
|
||||
)
|
||||
}
|
||||
BitwardenOverflowActionItem(
|
||||
contentDescription = stringResource(R.string.more),
|
||||
contentDescription = stringResource(BitwardenString.more),
|
||||
menuItemDataList = persistentListOf(
|
||||
OverflowMenuItemData(
|
||||
text = stringResource(id = R.string.log_out),
|
||||
text = stringResource(id = BitwardenString.log_out),
|
||||
onClick = { showLogoutConfirmationDialog = true },
|
||||
),
|
||||
),
|
||||
@ -294,7 +294,7 @@ fun VaultUnlockScreen(
|
||||
}
|
||||
Text(
|
||||
text = stringResource(
|
||||
id = R.string.logged_in_as_on,
|
||||
id = BitwardenString.logged_in_as_on,
|
||||
state.email,
|
||||
state.environmentUrl,
|
||||
),
|
||||
@ -314,7 +314,7 @@ fun VaultUnlockScreen(
|
||||
Spacer(modifier = Modifier.height(24.dp))
|
||||
if (state.showBiometricLogin && biometricsManager.isBiometricsSupported) {
|
||||
BitwardenOutlinedButton(
|
||||
label = stringResource(id = R.string.use_biometrics_to_unlock),
|
||||
label = stringResource(id = BitwardenString.use_biometrics_to_unlock),
|
||||
onClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(VaultUnlockAction.BiometricsUnlockClick) }
|
||||
},
|
||||
@ -325,7 +325,7 @@ fun VaultUnlockScreen(
|
||||
Spacer(modifier = Modifier.height(12.dp))
|
||||
} else if (state.showBiometricInvalidatedMessage) {
|
||||
Text(
|
||||
text = stringResource(R.string.account_biometric_invalidated),
|
||||
text = stringResource(BitwardenString.account_biometric_invalidated),
|
||||
textAlign = TextAlign.Start,
|
||||
style = BitwardenTheme.typography.bodyMedium,
|
||||
color = BitwardenTheme.colorScheme.status.error,
|
||||
@ -335,7 +335,7 @@ fun VaultUnlockScreen(
|
||||
}
|
||||
if (!state.hideInput) {
|
||||
BitwardenFilledButton(
|
||||
label = stringResource(id = R.string.unlock),
|
||||
label = stringResource(id = BitwardenString.unlock),
|
||||
onClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(VaultUnlockAction.UnlockClick) }
|
||||
},
|
||||
|
||||
@ -7,9 +7,9 @@ import androidx.lifecycle.viewModelScope
|
||||
import com.bitwarden.ui.platform.base.BackgroundEvent
|
||||
import com.bitwarden.ui.platform.base.BaseViewModel
|
||||
import com.bitwarden.ui.platform.base.util.hexToColor
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.LogoutReason
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.UserState
|
||||
@ -193,7 +193,8 @@ class VaultUnlockViewModel @Inject constructor(
|
||||
state.getCredentialsRequest != null -> {
|
||||
sendEvent(
|
||||
VaultUnlockEvent.GetCredentialsError(
|
||||
R.string.credential_operation_failed_because_user_could_not_be_verified
|
||||
BitwardenString
|
||||
.credential_operation_failed_because_user_could_not_be_verified
|
||||
.asText(),
|
||||
),
|
||||
)
|
||||
@ -202,7 +203,7 @@ class VaultUnlockViewModel @Inject constructor(
|
||||
state.fido2CredentialAssertionRequest != null -> {
|
||||
sendEvent(
|
||||
VaultUnlockEvent.Fido2CredentialAssertionError(
|
||||
R.string.passkey_operation_failed_because_user_could_not_be_verified
|
||||
BitwardenString.passkey_operation_failed_because_user_could_not_be_verified
|
||||
.asText(),
|
||||
),
|
||||
)
|
||||
@ -282,7 +283,7 @@ class VaultUnlockViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = VaultUnlockState.VaultUnlockDialog.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = it.vaultUnlockType.emptyInputDialogMessage,
|
||||
),
|
||||
)
|
||||
@ -347,9 +348,9 @@ class VaultUnlockViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = VaultUnlockState.VaultUnlockDialog.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = if (action.isBiometricLogin) {
|
||||
R.string.generic_error_message.asText()
|
||||
BitwardenString.generic_error_message.asText()
|
||||
} else {
|
||||
state.vaultUnlockType.unlockScreenErrorMessage
|
||||
},
|
||||
@ -365,8 +366,8 @@ class VaultUnlockViewModel @Inject constructor(
|
||||
it.copy(
|
||||
isBiometricsValid = false,
|
||||
dialog = VaultUnlockState.VaultUnlockDialog.Error(
|
||||
title = R.string.biometrics_failed.asText(),
|
||||
message = R.string.biometrics_decoding_failure.asText(),
|
||||
title = BitwardenString.biometrics_failed.asText(),
|
||||
message = BitwardenString.biometrics_decoding_failure.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -378,8 +379,8 @@ class VaultUnlockViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = VaultUnlockState.VaultUnlockDialog.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.generic_error_message.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.generic_error_message.asText(),
|
||||
throwable = (result as? VaultUnlockResult.InvalidStateError)?.error
|
||||
?: (result as? VaultUnlockResult.GenericError)?.error,
|
||||
),
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
package com.x8bit.bitwarden.ui.auth.feature.vaultunlock.util
|
||||
|
||||
import androidx.compose.ui.text.input.KeyboardType
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.VaultUnlockType
|
||||
|
||||
/**
|
||||
@ -11,8 +11,8 @@ import com.x8bit.bitwarden.data.auth.repository.model.VaultUnlockType
|
||||
*/
|
||||
val VaultUnlockType.unlockScreenTitle: Text
|
||||
get() = when (this) {
|
||||
VaultUnlockType.MASTER_PASSWORD -> R.string.verify_master_password
|
||||
VaultUnlockType.PIN -> R.string.verify_pin
|
||||
VaultUnlockType.MASTER_PASSWORD -> BitwardenString.verify_master_password
|
||||
VaultUnlockType.PIN -> BitwardenString.verify_pin
|
||||
}
|
||||
.asText()
|
||||
|
||||
@ -21,8 +21,8 @@ val VaultUnlockType.unlockScreenTitle: Text
|
||||
*/
|
||||
val VaultUnlockType.unlockScreenMessage: Text
|
||||
get() = when (this) {
|
||||
VaultUnlockType.MASTER_PASSWORD -> R.string.vault_locked_master_password
|
||||
VaultUnlockType.PIN -> R.string.vault_locked_pin
|
||||
VaultUnlockType.MASTER_PASSWORD -> BitwardenString.vault_locked_master_password
|
||||
VaultUnlockType.PIN -> BitwardenString.vault_locked_pin
|
||||
}
|
||||
.asText()
|
||||
|
||||
@ -40,8 +40,8 @@ val VaultUnlockType.unlockScreenInputTestTag: String
|
||||
*/
|
||||
val VaultUnlockType.unlockScreenInputLabel: Text
|
||||
get() = when (this) {
|
||||
VaultUnlockType.MASTER_PASSWORD -> R.string.master_password
|
||||
VaultUnlockType.PIN -> R.string.pin
|
||||
VaultUnlockType.MASTER_PASSWORD -> BitwardenString.master_password
|
||||
VaultUnlockType.PIN -> BitwardenString.pin
|
||||
}
|
||||
.asText()
|
||||
|
||||
@ -59,8 +59,8 @@ val VaultUnlockType.inputFieldVisibilityToggleTestTag: String
|
||||
*/
|
||||
val VaultUnlockType.unlockScreenErrorMessage: Text
|
||||
get() = when (this) {
|
||||
VaultUnlockType.MASTER_PASSWORD -> R.string.invalid_master_password
|
||||
VaultUnlockType.PIN -> R.string.invalid_pin
|
||||
VaultUnlockType.MASTER_PASSWORD -> BitwardenString.invalid_master_password
|
||||
VaultUnlockType.PIN -> BitwardenString.invalid_pin
|
||||
}
|
||||
.asText()
|
||||
|
||||
@ -77,4 +77,4 @@ val VaultUnlockType.unlockScreenKeyboardType: KeyboardType
|
||||
* The message to show when user try to unlock vault with empty or blank input.
|
||||
*/
|
||||
val VaultUnlockType.emptyInputDialogMessage: Text
|
||||
get() = R.string.validation_field_required.asText(unlockScreenInputLabel)
|
||||
get() = BitwardenString.validation_field_required.asText(unlockScreenInputLabel)
|
||||
|
||||
@ -47,9 +47,9 @@ import com.bitwarden.ui.platform.components.button.BitwardenFilledButton
|
||||
import com.bitwarden.ui.platform.components.button.BitwardenOutlinedButton
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.model.WindowSize
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.bitwarden.ui.platform.util.rememberWindowSize
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@ -131,7 +131,7 @@ private fun WelcomeScreenContent(
|
||||
|
||||
HorizontalPager(state = pagerState) { index ->
|
||||
val pageNumberContentDescription =
|
||||
stringResource(R.string.page_number_x_of_y, index + 1, state.pages.size)
|
||||
stringResource(BitwardenString.page_number_x_of_y, index + 1, state.pages.size)
|
||||
val pagerSemanticsModifier = Modifier.semantics(mergeDescendants = true) {
|
||||
contentDescription = pageNumberContentDescription
|
||||
}
|
||||
@ -165,7 +165,7 @@ private fun WelcomeScreenContent(
|
||||
)
|
||||
|
||||
BitwardenFilledButton(
|
||||
label = stringResource(id = R.string.create_account),
|
||||
label = stringResource(id = BitwardenString.create_account),
|
||||
onClick = onCreateAccountClick,
|
||||
modifier = Modifier
|
||||
.standardHorizontalMargin(medium = HORIZONTAL_MARGIN_MEDIUM)
|
||||
@ -174,7 +174,7 @@ private fun WelcomeScreenContent(
|
||||
)
|
||||
|
||||
BitwardenOutlinedButton(
|
||||
label = stringResource(id = R.string.log_in_verb),
|
||||
label = stringResource(id = BitwardenString.log_in_verb),
|
||||
onClick = onLoginClick,
|
||||
modifier = Modifier
|
||||
.standardHorizontalMargin(medium = HORIZONTAL_MARGIN_MEDIUM)
|
||||
|
||||
@ -3,7 +3,7 @@ package com.x8bit.bitwarden.ui.auth.feature.welcome
|
||||
import android.os.Parcelable
|
||||
import com.bitwarden.ui.platform.base.BaseViewModel
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager
|
||||
import com.x8bit.bitwarden.data.platform.manager.model.FlagKey
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
@ -83,8 +83,8 @@ data class WelcomeState(
|
||||
@Parcelize
|
||||
data object CardOne : WelcomeCard() {
|
||||
override val imageRes: Int get() = BitwardenDrawable.img_vault_items
|
||||
override val titleRes: Int get() = R.string.security_prioritized
|
||||
override val messageRes: Int get() = R.string.welcome_message_1
|
||||
override val titleRes: Int get() = BitwardenString.security_prioritized
|
||||
override val messageRes: Int get() = BitwardenString.welcome_message_1
|
||||
}
|
||||
|
||||
/**
|
||||
@ -93,8 +93,8 @@ data class WelcomeState(
|
||||
@Parcelize
|
||||
data object CardTwo : WelcomeCard() {
|
||||
override val imageRes: Int get() = BitwardenDrawable.welcome_2
|
||||
override val titleRes: Int get() = R.string.quick_and_easy_login
|
||||
override val messageRes: Int get() = R.string.welcome_message_2
|
||||
override val titleRes: Int get() = BitwardenString.quick_and_easy_login
|
||||
override val messageRes: Int get() = BitwardenString.welcome_message_2
|
||||
}
|
||||
|
||||
/**
|
||||
@ -103,8 +103,8 @@ data class WelcomeState(
|
||||
@Parcelize
|
||||
data object CardThree : WelcomeCard() {
|
||||
override val imageRes: Int get() = BitwardenDrawable.welcome_3
|
||||
override val titleRes: Int get() = R.string.level_up_your_logins
|
||||
override val messageRes: Int get() = R.string.welcome_message_3
|
||||
override val titleRes: Int get() = BitwardenString.level_up_your_logins
|
||||
override val messageRes: Int get() = BitwardenString.welcome_message_3
|
||||
}
|
||||
|
||||
/**
|
||||
@ -113,8 +113,8 @@ data class WelcomeState(
|
||||
@Parcelize
|
||||
data object CardFour : WelcomeCard() {
|
||||
override val imageRes: Int get() = BitwardenDrawable.welcome_4
|
||||
override val titleRes: Int get() = R.string.your_data_when_and_where_you_need_it
|
||||
override val messageRes: Int get() = R.string.welcome_message_4
|
||||
override val titleRes: Int get() = BitwardenString.your_data_when_and_where_you_need_it
|
||||
override val messageRes: Int get() = BitwardenString.welcome_message_4
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,6 +6,7 @@ import androidx.annotation.DrawableRes
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.toArgb
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.color.BitwardenColorScheme
|
||||
import com.bitwarden.ui.platform.theme.color.darkBitwardenColorScheme
|
||||
import com.bitwarden.ui.platform.theme.color.lightBitwardenColorScheme
|
||||
@ -46,9 +47,9 @@ fun buildVaultItemAutofillRemoteViews(
|
||||
name = autofillAppInfo.context.getString(R.string.app_name),
|
||||
subtitle = autofillAppInfo.context.run {
|
||||
if (isLocked) {
|
||||
getString(R.string.vault_is_locked)
|
||||
getString(BitwardenString.vault_is_locked)
|
||||
} else {
|
||||
getString(R.string.go_to_my_vault)
|
||||
getString(BitwardenString.go_to_my_vault)
|
||||
}
|
||||
},
|
||||
iconRes = BitwardenDrawable.icon,
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package com.x8bit.bitwarden.ui.autofill.util
|
||||
|
||||
import androidx.core.content.ContextCompat
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.x8bit.bitwarden.data.autofill.model.AutofillAppInfo
|
||||
import com.x8bit.bitwarden.data.autofill.model.AutofillCipher
|
||||
|
||||
@ -15,7 +15,7 @@ fun getAutofillSuggestionContentDescription(
|
||||
): String =
|
||||
String.format(
|
||||
"%s, %s, %s, %s",
|
||||
ContextCompat.getString(autofillAppInfo.context, R.string.autofill_suggestion),
|
||||
ContextCompat.getString(autofillAppInfo.context, BitwardenString.autofill_suggestion),
|
||||
getAutofillSuggestionCipherType(
|
||||
autofillCipher = autofillCipher,
|
||||
autofillAppInfo = autofillAppInfo,
|
||||
@ -31,11 +31,11 @@ private fun getAutofillSuggestionCipherType(
|
||||
when (autofillCipher) {
|
||||
is AutofillCipher.Card -> ContextCompat.getString(
|
||||
autofillAppInfo.context,
|
||||
R.string.type_card,
|
||||
BitwardenString.type_card,
|
||||
)
|
||||
|
||||
is AutofillCipher.Login -> ContextCompat.getString(
|
||||
autofillAppInfo.context,
|
||||
R.string.type_login,
|
||||
BitwardenString.type_login,
|
||||
)
|
||||
}
|
||||
|
||||
@ -14,6 +14,7 @@ import androidx.autofill.inline.UiVersions
|
||||
import androidx.autofill.inline.v1.InlineSuggestionUi
|
||||
import androidx.compose.ui.graphics.toArgb
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.autofill.model.AutofillAppInfo
|
||||
import com.x8bit.bitwarden.data.autofill.model.AutofillCipher
|
||||
@ -62,9 +63,9 @@ fun InlinePresentationSpec.createVaultItemInlinePresentationOrNull(
|
||||
autofillCipher = null,
|
||||
title = autofillAppInfo.context.getString(R.string.app_name),
|
||||
subtitle = if (isLocked) {
|
||||
autofillAppInfo.context.getString(R.string.vault_is_locked)
|
||||
autofillAppInfo.context.getString(BitwardenString.vault_is_locked)
|
||||
} else {
|
||||
autofillAppInfo.context.getString(R.string.my_vault)
|
||||
autofillAppInfo.context.getString(BitwardenString.my_vault)
|
||||
},
|
||||
iconRes = BitwardenDrawable.icon,
|
||||
shouldTintIcon = false,
|
||||
|
||||
@ -19,8 +19,8 @@ import com.bitwarden.ui.platform.base.util.toUnscaledTextUnit
|
||||
import com.bitwarden.ui.platform.components.button.color.bitwardenStandardIconButtonColors
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
|
||||
/**
|
||||
* Displays an icon representing a Bitwarden account with the user's initials superimposed.
|
||||
@ -37,7 +37,7 @@ fun BitwardenAccountActionItem(
|
||||
onClick: () -> Unit,
|
||||
) {
|
||||
val iconPainter = rememberVectorPainter(id = BitwardenDrawable.ic_account_initials_container)
|
||||
val contentDescription = stringResource(id = R.string.account)
|
||||
val contentDescription = stringResource(id = BitwardenString.account)
|
||||
|
||||
IconButton(
|
||||
onClick = onClick,
|
||||
|
||||
@ -56,8 +56,8 @@ import com.bitwarden.ui.platform.base.util.toUnscaledTextUnit
|
||||
import com.bitwarden.ui.platform.components.divider.BitwardenHorizontalDivider
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenLogoutConfirmationDialog
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenRemovalConfirmationDialog
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenSelectionDialog
|
||||
@ -384,7 +384,7 @@ private fun LockOrLogoutDialog(
|
||||
selectionItems = {
|
||||
if (accountSummary.isVaultUnlocked) {
|
||||
BitwardenBasicDialogRow(
|
||||
text = stringResource(id = R.string.lock),
|
||||
text = stringResource(id = BitwardenString.lock),
|
||||
onClick = {
|
||||
onLockAccountClick(accountSummary)
|
||||
},
|
||||
@ -392,14 +392,14 @@ private fun LockOrLogoutDialog(
|
||||
}
|
||||
if (accountSummary.isLoggedIn) {
|
||||
BitwardenBasicDialogRow(
|
||||
text = stringResource(id = R.string.log_out),
|
||||
text = stringResource(id = BitwardenString.log_out),
|
||||
onClick = {
|
||||
onLogoutAccountClick(accountSummary)
|
||||
},
|
||||
)
|
||||
} else {
|
||||
BitwardenBasicDialogRow(
|
||||
text = stringResource(id = R.string.remove_account),
|
||||
text = stringResource(id = BitwardenString.remove_account),
|
||||
onClick = {
|
||||
onRemoveAccountClick(accountSummary)
|
||||
},
|
||||
@ -440,7 +440,7 @@ private fun AddAccountItem(
|
||||
Spacer(modifier = Modifier.width(16.dp))
|
||||
|
||||
Text(
|
||||
text = stringResource(id = R.string.add_account),
|
||||
text = stringResource(id = BitwardenString.add_account),
|
||||
style = BitwardenTheme.typography.labelMedium,
|
||||
color = BitwardenTheme.colorScheme.text.interaction,
|
||||
)
|
||||
|
||||
@ -12,8 +12,8 @@ import com.bitwarden.ui.platform.components.button.color.bitwardenStandardIconBu
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.feature.settings.appearance.model.AppTheme
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
|
||||
/**
|
||||
* A placeholder item to be used to represent an account.
|
||||
@ -37,7 +37,7 @@ fun BitwardenPlaceholderAccountActionItem(
|
||||
)
|
||||
Icon(
|
||||
painter = rememberVectorPainter(id = BitwardenDrawable.ic_dots),
|
||||
contentDescription = stringResource(id = R.string.account),
|
||||
contentDescription = stringResource(id = BitwardenString.account),
|
||||
tint = BitwardenTheme.colorScheme.text.interaction,
|
||||
)
|
||||
}
|
||||
|
||||
@ -18,8 +18,8 @@ import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar
|
||||
import com.bitwarden.ui.platform.components.appbar.NavigationIcon
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@ -70,7 +70,7 @@ fun BitwardenModalBottomSheet(
|
||||
navigationIcon = NavigationIcon(
|
||||
navigationIcon = rememberVectorPainter(BitwardenDrawable.ic_close),
|
||||
onNavigationIconClick = animatedOnDismiss,
|
||||
navigationIconContentDescription = stringResource(R.string.close),
|
||||
navigationIconContentDescription = stringResource(BitwardenString.close),
|
||||
),
|
||||
actions = {
|
||||
topBarActions(animatedOnDismiss)
|
||||
|
||||
@ -24,8 +24,8 @@ import com.bitwarden.ui.platform.components.button.BitwardenFilledButton
|
||||
import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.card.color.bitwardenCardColors
|
||||
|
||||
/**
|
||||
@ -72,7 +72,7 @@ fun BitwardenActionCard(
|
||||
onDismissClick?.let {
|
||||
BitwardenStandardIconButton(
|
||||
painter = rememberVectorPainter(id = BitwardenDrawable.ic_close),
|
||||
contentDescription = stringResource(id = R.string.close),
|
||||
contentDescription = stringResource(id = BitwardenString.close),
|
||||
onClick = it,
|
||||
)
|
||||
}
|
||||
|
||||
@ -34,8 +34,8 @@ import androidx.compose.ui.unit.dp
|
||||
import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.coachmark.model.CoachMarkHighlightShape
|
||||
import com.x8bit.bitwarden.ui.platform.components.text.BitwardenClickableText
|
||||
import kotlinx.coroutines.launch
|
||||
@ -203,7 +203,7 @@ private fun BitwardenCoachMarkContainer_preview() {
|
||||
) {
|
||||
BitwardenStandardIconButton(
|
||||
painter = rememberVectorPainter(BitwardenDrawable.ic_puzzle),
|
||||
contentDescription = stringResource(R.string.close),
|
||||
contentDescription = stringResource(BitwardenString.close),
|
||||
onClick = {},
|
||||
)
|
||||
}
|
||||
|
||||
@ -16,8 +16,8 @@ import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.bitwarden.ui.platform.components.button.BitwardenTextButton
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
|
||||
/**
|
||||
* A Bitwarden-themed, re-usable error state.
|
||||
@ -47,7 +47,7 @@ fun BitwardenErrorContent(
|
||||
onTryAgainClick?.let {
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
BitwardenTextButton(
|
||||
label = stringResource(id = R.string.try_again),
|
||||
label = stringResource(id = BitwardenString.try_again),
|
||||
onClick = it,
|
||||
modifier = Modifier.padding(horizontal = 16.dp),
|
||||
)
|
||||
|
||||
@ -11,8 +11,8 @@ import androidx.compose.ui.semantics.testTag
|
||||
import androidx.compose.ui.semantics.testTagsAsResourceId
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.bitwarden.ui.platform.components.button.BitwardenTextButton
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.platform.util.ciBuildInfo
|
||||
import com.x8bit.bitwarden.data.platform.util.deviceData
|
||||
import com.x8bit.bitwarden.data.platform.util.versionData
|
||||
@ -41,7 +41,7 @@ fun BitwardenBasicDialog(
|
||||
onDismissRequest = onDismissRequest,
|
||||
confirmButton = {
|
||||
BitwardenTextButton(
|
||||
label = stringResource(id = R.string.okay),
|
||||
label = stringResource(id = BitwardenString.okay),
|
||||
onClick = onDismissRequest,
|
||||
modifier = Modifier.testTag(tag = "AcceptAlertButton"),
|
||||
)
|
||||
@ -50,7 +50,7 @@ fun BitwardenBasicDialog(
|
||||
?.let { error ->
|
||||
{
|
||||
BitwardenTextButton(
|
||||
label = stringResource(id = R.string.share_error_details),
|
||||
label = stringResource(id = BitwardenString.share_error_details),
|
||||
onClick = {
|
||||
intentManager.shareText(
|
||||
text = StringBuilder()
|
||||
|
||||
@ -22,8 +22,8 @@ import androidx.compose.ui.tooling.preview.PreviewScreenSizes
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.bitwarden.ui.platform.components.button.BitwardenTextButton
|
||||
import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.field.BitwardenPasswordField
|
||||
import com.x8bit.bitwarden.ui.platform.components.field.BitwardenTextField
|
||||
|
||||
@ -47,14 +47,14 @@ fun BitwardenClientCertificateDialog(
|
||||
onDismissRequest = onDismissRequest,
|
||||
dismissButton = {
|
||||
BitwardenTextButton(
|
||||
label = stringResource(id = R.string.cancel),
|
||||
label = stringResource(id = BitwardenString.cancel),
|
||||
onClick = onDismissRequest,
|
||||
modifier = Modifier.testTag("DismissAlertButton"),
|
||||
)
|
||||
},
|
||||
confirmButton = {
|
||||
BitwardenTextButton(
|
||||
label = stringResource(id = R.string.submit),
|
||||
label = stringResource(id = BitwardenString.submit),
|
||||
isEnabled = password.isNotEmpty(),
|
||||
onClick = { onConfirmClick(alias, password) },
|
||||
modifier = Modifier.testTag("AcceptAlertButton"),
|
||||
@ -62,7 +62,7 @@ fun BitwardenClientCertificateDialog(
|
||||
},
|
||||
title = {
|
||||
Text(
|
||||
text = stringResource(R.string.import_client_certificate),
|
||||
text = stringResource(BitwardenString.import_client_certificate),
|
||||
style = BitwardenTheme.typography.headlineSmall,
|
||||
modifier = Modifier.testTag("AlertTitleText"),
|
||||
)
|
||||
@ -70,7 +70,9 @@ fun BitwardenClientCertificateDialog(
|
||||
text = {
|
||||
Column {
|
||||
Text(
|
||||
text = stringResource(R.string.enter_the_client_certificate_password_and_alias),
|
||||
text = stringResource(
|
||||
BitwardenString.enter_the_client_certificate_password_and_alias,
|
||||
),
|
||||
style = BitwardenTheme.typography.bodyMedium,
|
||||
modifier = Modifier.testTag("AlertContentText"),
|
||||
)
|
||||
@ -78,7 +80,7 @@ fun BitwardenClientCertificateDialog(
|
||||
Spacer(modifier = Modifier.height(24.dp))
|
||||
|
||||
BitwardenTextField(
|
||||
label = stringResource(R.string.alias),
|
||||
label = stringResource(BitwardenString.alias),
|
||||
value = alias,
|
||||
onValueChange = { alias = it },
|
||||
autoFocus = true,
|
||||
@ -88,7 +90,7 @@ fun BitwardenClientCertificateDialog(
|
||||
)
|
||||
|
||||
BitwardenPasswordField(
|
||||
label = stringResource(R.string.password),
|
||||
label = stringResource(BitwardenString.password),
|
||||
value = password,
|
||||
onValueChange = { password = it },
|
||||
cardStyle = CardStyle.Bottom,
|
||||
|
||||
@ -2,7 +2,7 @@ package com.x8bit.bitwarden.ui.platform.components.dialog
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.x8bit.bitwarden.ui.platform.components.model.AccountSummary
|
||||
|
||||
/**
|
||||
@ -19,16 +19,16 @@ fun BitwardenLogoutConfirmationDialog(
|
||||
onConfirmClick: () -> Unit,
|
||||
accountSummary: AccountSummary? = null,
|
||||
) {
|
||||
val baseConfirmationMessage = stringResource(id = R.string.logout_confirmation)
|
||||
val baseConfirmationMessage = stringResource(id = BitwardenString.logout_confirmation)
|
||||
val message = accountSummary
|
||||
?.let { "$baseConfirmationMessage\n\n${it.email}\n${it.environmentLabel}" }
|
||||
?: baseConfirmationMessage
|
||||
BitwardenTwoButtonDialog(
|
||||
title = stringResource(id = R.string.log_out),
|
||||
title = stringResource(id = BitwardenString.log_out),
|
||||
message = message,
|
||||
confirmButtonText = stringResource(id = R.string.yes),
|
||||
confirmButtonText = stringResource(id = BitwardenString.yes),
|
||||
onConfirmClick = onConfirmClick,
|
||||
dismissButtonText = stringResource(id = R.string.cancel),
|
||||
dismissButtonText = stringResource(id = BitwardenString.cancel),
|
||||
onDismissClick = onDismissRequest,
|
||||
onDismissRequest = onDismissRequest,
|
||||
)
|
||||
|
||||
@ -21,8 +21,8 @@ import androidx.compose.ui.semantics.testTagsAsResourceId
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.bitwarden.ui.platform.components.button.BitwardenTextButton
|
||||
import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.field.BitwardenPasswordField
|
||||
|
||||
/**
|
||||
@ -42,14 +42,14 @@ fun BitwardenMasterPasswordDialog(
|
||||
onDismissRequest = onDismissRequest,
|
||||
dismissButton = {
|
||||
BitwardenTextButton(
|
||||
label = stringResource(id = R.string.cancel),
|
||||
label = stringResource(id = BitwardenString.cancel),
|
||||
onClick = onDismissRequest,
|
||||
modifier = Modifier.testTag("DismissAlertButton"),
|
||||
)
|
||||
},
|
||||
confirmButton = {
|
||||
BitwardenTextButton(
|
||||
label = stringResource(id = R.string.submit),
|
||||
label = stringResource(id = BitwardenString.submit),
|
||||
isEnabled = masterPassword.isNotEmpty(),
|
||||
onClick = { onConfirmClick(masterPassword) },
|
||||
modifier = Modifier.testTag("AcceptAlertButton"),
|
||||
@ -57,7 +57,7 @@ fun BitwardenMasterPasswordDialog(
|
||||
},
|
||||
title = {
|
||||
Text(
|
||||
text = stringResource(id = R.string.password_confirmation),
|
||||
text = stringResource(id = BitwardenString.password_confirmation),
|
||||
style = BitwardenTheme.typography.headlineSmall,
|
||||
modifier = Modifier.testTag("AlertTitleText"),
|
||||
)
|
||||
@ -65,7 +65,7 @@ fun BitwardenMasterPasswordDialog(
|
||||
text = {
|
||||
Column {
|
||||
Text(
|
||||
text = stringResource(id = R.string.password_confirmation_desc),
|
||||
text = stringResource(id = BitwardenString.password_confirmation_desc),
|
||||
style = BitwardenTheme.typography.bodyMedium,
|
||||
modifier = Modifier.testTag("AlertContentText"),
|
||||
)
|
||||
@ -73,7 +73,7 @@ fun BitwardenMasterPasswordDialog(
|
||||
Spacer(modifier = Modifier.height(8.dp))
|
||||
|
||||
BitwardenPasswordField(
|
||||
label = stringResource(id = R.string.master_password),
|
||||
label = stringResource(id = BitwardenString.master_password),
|
||||
value = masterPassword,
|
||||
onValueChange = { masterPassword = it },
|
||||
keyboardActions = KeyboardActions(
|
||||
|
||||
@ -2,7 +2,7 @@ package com.x8bit.bitwarden.ui.platform.components.dialog
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
|
||||
/**
|
||||
* A reusable dialog for confirming whether or not the user wants to overwrite an existing FIDO 2
|
||||
@ -18,10 +18,10 @@ fun BitwardenOverwritePasskeyConfirmationDialog(
|
||||
onDismissRequest: () -> Unit,
|
||||
) {
|
||||
BitwardenTwoButtonDialog(
|
||||
title = stringResource(id = R.string.overwrite_passkey),
|
||||
message = stringResource(id = R.string.this_item_already_contains_a_passkey_are_you_sure_you_want_to_overwrite_the_current_passkey),
|
||||
confirmButtonText = stringResource(id = R.string.okay),
|
||||
dismissButtonText = stringResource(id = R.string.cancel),
|
||||
title = stringResource(id = BitwardenString.overwrite_passkey),
|
||||
message = stringResource(id = BitwardenString.this_item_already_contains_a_passkey_are_you_sure_you_want_to_overwrite_the_current_passkey),
|
||||
confirmButtonText = stringResource(id = BitwardenString.okay),
|
||||
dismissButtonText = stringResource(id = BitwardenString.cancel),
|
||||
onConfirmClick = onConfirmClick,
|
||||
onDismissClick = onDismissRequest,
|
||||
onDismissRequest = onDismissRequest,
|
||||
|
||||
@ -16,8 +16,8 @@ import androidx.compose.ui.semantics.testTag
|
||||
import androidx.compose.ui.semantics.testTagsAsResourceId
|
||||
import com.bitwarden.ui.platform.components.button.BitwardenTextButton
|
||||
import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.field.BitwardenPasswordField
|
||||
|
||||
/**
|
||||
@ -37,14 +37,14 @@ fun BitwardenPinDialog(
|
||||
onDismissRequest = onDismissRequest,
|
||||
dismissButton = {
|
||||
BitwardenTextButton(
|
||||
label = stringResource(id = R.string.cancel),
|
||||
label = stringResource(id = BitwardenString.cancel),
|
||||
onClick = onDismissRequest,
|
||||
modifier = Modifier.testTag("DismissAlertButton"),
|
||||
)
|
||||
},
|
||||
confirmButton = {
|
||||
BitwardenTextButton(
|
||||
label = stringResource(id = R.string.submit),
|
||||
label = stringResource(id = BitwardenString.submit),
|
||||
isEnabled = pin.isNotEmpty(),
|
||||
onClick = { onConfirmClick(pin) },
|
||||
modifier = Modifier.testTag("AcceptAlertButton"),
|
||||
@ -52,14 +52,14 @@ fun BitwardenPinDialog(
|
||||
},
|
||||
title = {
|
||||
Text(
|
||||
text = stringResource(id = R.string.verify_pin),
|
||||
text = stringResource(id = BitwardenString.verify_pin),
|
||||
style = BitwardenTheme.typography.headlineSmall,
|
||||
modifier = Modifier.testTag("AlertTitleText"),
|
||||
)
|
||||
},
|
||||
text = {
|
||||
BitwardenPasswordField(
|
||||
label = stringResource(id = R.string.pin),
|
||||
label = stringResource(id = BitwardenString.pin),
|
||||
value = pin,
|
||||
onValueChange = { pin = it },
|
||||
autoFocus = true,
|
||||
|
||||
@ -2,7 +2,7 @@ package com.x8bit.bitwarden.ui.platform.components.dialog
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.x8bit.bitwarden.ui.platform.components.model.AccountSummary
|
||||
|
||||
/**
|
||||
@ -20,11 +20,11 @@ fun BitwardenRemovalConfirmationDialog(
|
||||
accountSummary: AccountSummary? = null,
|
||||
) {
|
||||
BitwardenTwoButtonDialog(
|
||||
title = stringResource(id = R.string.remove_account),
|
||||
title = stringResource(id = BitwardenString.remove_account),
|
||||
message = removalConfirmationMessage(accountSummary = accountSummary),
|
||||
confirmButtonText = stringResource(id = R.string.yes),
|
||||
confirmButtonText = stringResource(id = BitwardenString.yes),
|
||||
onConfirmClick = onConfirmClick,
|
||||
dismissButtonText = stringResource(id = R.string.cancel),
|
||||
dismissButtonText = stringResource(id = BitwardenString.cancel),
|
||||
onDismissClick = onDismissRequest,
|
||||
onDismissRequest = onDismissRequest,
|
||||
)
|
||||
@ -32,7 +32,7 @@ fun BitwardenRemovalConfirmationDialog(
|
||||
|
||||
@Composable
|
||||
private fun removalConfirmationMessage(accountSummary: AccountSummary?): String {
|
||||
val baseConfirmationMessage = stringResource(id = R.string.remove_account_confirmation)
|
||||
val baseConfirmationMessage = stringResource(id = BitwardenString.remove_account_confirmation)
|
||||
return accountSummary
|
||||
?.let { "$baseConfirmationMessage\n\n${it.email}\n${it.environmentLabel}" }
|
||||
?: baseConfirmationMessage
|
||||
|
||||
@ -27,8 +27,8 @@ import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.window.Dialog
|
||||
import com.bitwarden.ui.platform.components.button.BitwardenTextButton
|
||||
import com.bitwarden.ui.platform.components.divider.BitwardenHorizontalDivider
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.row.BitwardenSelectionRow
|
||||
import com.x8bit.bitwarden.ui.platform.components.util.maxDialogHeight
|
||||
|
||||
@ -99,7 +99,7 @@ fun BitwardenSelectionDialog(
|
||||
modifier = Modifier
|
||||
.testTag("DismissAlertButton")
|
||||
.padding(24.dp),
|
||||
label = stringResource(id = R.string.cancel),
|
||||
label = stringResource(id = BitwardenString.cancel),
|
||||
onClick = onDismissRequest,
|
||||
)
|
||||
}
|
||||
|
||||
@ -20,8 +20,8 @@ import androidx.compose.ui.semantics.testTag
|
||||
import androidx.compose.ui.semantics.testTagsAsResourceId
|
||||
import com.bitwarden.ui.platform.components.button.BitwardenTextButton
|
||||
import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.field.BitwardenTextField
|
||||
|
||||
/**
|
||||
@ -51,14 +51,14 @@ fun BitwardenTextEntryDialog(
|
||||
onDismissRequest = onDismissRequest,
|
||||
dismissButton = {
|
||||
BitwardenTextButton(
|
||||
label = stringResource(id = R.string.cancel),
|
||||
label = stringResource(id = BitwardenString.cancel),
|
||||
onClick = onDismissRequest,
|
||||
modifier = Modifier.testTag("DismissAlertButton"),
|
||||
)
|
||||
},
|
||||
confirmButton = {
|
||||
BitwardenTextButton(
|
||||
label = stringResource(id = R.string.okay),
|
||||
label = stringResource(id = BitwardenString.okay),
|
||||
onClick = { onConfirmClick(text) },
|
||||
modifier = Modifier.testTag("AcceptAlertButton"),
|
||||
)
|
||||
|
||||
@ -34,8 +34,8 @@ import androidx.compose.ui.window.DialogProperties
|
||||
import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton
|
||||
import com.bitwarden.ui.platform.components.button.BitwardenTextButton
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
|
||||
/**
|
||||
* A custom composable representing a dialog that displays the time picker dialog.
|
||||
@ -68,21 +68,21 @@ fun BitwardenTimePickerDialog(
|
||||
confirmButton = {
|
||||
BitwardenTextButton(
|
||||
modifier = Modifier.testTag(tag = "AcceptAlertButton"),
|
||||
label = stringResource(id = R.string.okay),
|
||||
label = stringResource(id = BitwardenString.okay),
|
||||
onClick = { onTimeSelect(timePickerState.hour, timePickerState.minute) },
|
||||
)
|
||||
},
|
||||
dismissButton = {
|
||||
BitwardenTextButton(
|
||||
modifier = Modifier.testTag(tag = "DismissAlertButton"),
|
||||
label = stringResource(id = R.string.cancel),
|
||||
label = stringResource(id = BitwardenString.cancel),
|
||||
onClick = onDismissRequest,
|
||||
)
|
||||
},
|
||||
inputToggleButton = {
|
||||
BitwardenStandardIconButton(
|
||||
vectorIconRes = BitwardenDrawable.ic_keyboard,
|
||||
contentDescription = stringResource(id = R.string.switch_input_mode),
|
||||
contentDescription = stringResource(id = BitwardenString.switch_input_mode),
|
||||
onClick = { showTimeInput = !showTimeInput },
|
||||
)
|
||||
},
|
||||
@ -159,7 +159,7 @@ private fun TimePickerDialog(
|
||||
.testTag("AlertTitleText")
|
||||
.fillMaxWidth()
|
||||
.padding(bottom = 20.dp),
|
||||
text = stringResource(id = R.string.select_time),
|
||||
text = stringResource(id = BitwardenString.select_time),
|
||||
color = BitwardenTheme.colorScheme.text.secondary,
|
||||
style = BitwardenTheme.typography.labelMedium,
|
||||
)
|
||||
|
||||
@ -24,8 +24,8 @@ import com.bitwarden.data.repository.model.Environment
|
||||
import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenSelectionDialog
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.row.BitwardenSelectionRow
|
||||
import com.x8bit.bitwarden.ui.platform.util.displayLabel
|
||||
@ -89,7 +89,7 @@ fun EnvironmentSelector(
|
||||
)
|
||||
Icon(
|
||||
painter = rememberVectorPainter(id = BitwardenDrawable.ic_chevron_down_small),
|
||||
contentDescription = stringResource(id = R.string.region),
|
||||
contentDescription = stringResource(id = BitwardenString.region),
|
||||
tint = BitwardenTheme.colorScheme.icon.secondary,
|
||||
)
|
||||
}
|
||||
@ -97,7 +97,7 @@ fun EnvironmentSelector(
|
||||
if (isHelpEnabled) {
|
||||
BitwardenStandardIconButton(
|
||||
vectorIconRes = BitwardenDrawable.ic_question_circle_small,
|
||||
contentDescription = stringResource(R.string.help_with_server_geolocations),
|
||||
contentDescription = stringResource(BitwardenString.help_with_server_geolocations),
|
||||
onClick = onHelpClick,
|
||||
contentColor = BitwardenTheme.colorScheme.icon.secondary,
|
||||
// Align with design but keep accessible touch target of IconButton.
|
||||
|
||||
@ -54,8 +54,8 @@ import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.components.model.TooltipData
|
||||
import com.bitwarden.ui.platform.components.row.BitwardenRowOfActions
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.field.toolbar.BitwardenCutCopyTextToolbar
|
||||
import com.x8bit.bitwarden.ui.platform.components.field.toolbar.BitwardenEmptyTextToolbar
|
||||
import com.x8bit.bitwarden.ui.platform.components.model.TextToolbarType
|
||||
@ -215,7 +215,11 @@ fun BitwardenPasswordField(
|
||||
BitwardenDrawable.ic_eye
|
||||
},
|
||||
contentDescription = stringResource(
|
||||
id = if (showPassword) R.string.hide else R.string.show,
|
||||
id = if (showPassword) {
|
||||
BitwardenString.hide
|
||||
} else {
|
||||
BitwardenString.show
|
||||
},
|
||||
),
|
||||
onClick = { showPasswordChange.invoke(!showPassword) },
|
||||
)
|
||||
|
||||
@ -22,8 +22,8 @@ import androidx.compose.ui.semantics.semantics
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
|
||||
/**
|
||||
* Reusable header element that is clickable for expanding or collapsing content.
|
||||
@ -32,12 +32,13 @@ import com.x8bit.bitwarden.R
|
||||
* @param expandedText Text to display when the content is expanded.
|
||||
* @param showExpansionIndicator Whether to show an indicator to expand or collapse the content.
|
||||
*/
|
||||
@Suppress("LongMethod")
|
||||
@Composable
|
||||
fun BitwardenExpandingHeader(
|
||||
isExpanded: Boolean,
|
||||
onClick: () -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
collapsedText: String = stringResource(id = R.string.additional_options),
|
||||
collapsedText: String = stringResource(id = BitwardenString.additional_options),
|
||||
expandedText: String = collapsedText,
|
||||
showExpansionIndicator: Boolean = true,
|
||||
shape: Shape = BitwardenTheme.shapes.content,
|
||||
@ -48,7 +49,11 @@ fun BitwardenExpandingHeader(
|
||||
.clip(shape = shape)
|
||||
.clickable(
|
||||
onClickLabel = stringResource(
|
||||
id = if (isExpanded) R.string.options_expanded else R.string.options_collapsed,
|
||||
id = if (isExpanded) {
|
||||
BitwardenString.options_expanded
|
||||
} else {
|
||||
BitwardenString.options_collapsed
|
||||
},
|
||||
),
|
||||
onClick = onClick,
|
||||
)
|
||||
|
||||
@ -29,8 +29,8 @@ import com.bitwarden.ui.platform.components.icon.BitwardenIcon
|
||||
import com.bitwarden.ui.platform.components.icon.model.IconData
|
||||
import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenSelectionDialog
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.row.BitwardenBasicDialogRow
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
@ -143,7 +143,7 @@ fun BitwardenListItem(
|
||||
if (selectionDataList.isNotEmpty()) {
|
||||
BitwardenStandardIconButton(
|
||||
vectorIconRes = BitwardenDrawable.ic_ellipsis_horizontal,
|
||||
contentDescription = stringResource(id = R.string.options),
|
||||
contentDescription = stringResource(id = BitwardenString.options),
|
||||
onClick = { shouldShowDialog = true },
|
||||
modifier = Modifier.nullableTestTag(tag = optionsTestTag),
|
||||
)
|
||||
|
||||
@ -13,8 +13,8 @@ import com.bitwarden.ui.platform.base.util.mirrorIfRtl
|
||||
import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenTwoButtonDialog
|
||||
|
||||
/**
|
||||
@ -45,8 +45,8 @@ fun BitwardenExternalLinkRow(
|
||||
withDivider: Boolean = true,
|
||||
dialogTitle: String,
|
||||
dialogMessage: String,
|
||||
dialogConfirmButtonText: String = stringResource(id = R.string.continue_text),
|
||||
dialogDismissButtonText: String = stringResource(id = R.string.cancel),
|
||||
dialogConfirmButtonText: String = stringResource(id = BitwardenString.continue_text),
|
||||
dialogDismissButtonText: String = stringResource(id = BitwardenString.cancel),
|
||||
) {
|
||||
var shouldShowDialog by rememberSaveable { mutableStateOf(false) }
|
||||
BitwardenTextRow(
|
||||
|
||||
@ -40,8 +40,8 @@ import com.bitwarden.ui.platform.base.util.nullableTestTag
|
||||
import com.bitwarden.ui.platform.base.util.toDp
|
||||
import com.bitwarden.ui.platform.components.field.color.bitwardenTextFieldColors
|
||||
import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.slider.color.bitwardenSliderColors
|
||||
|
||||
/**
|
||||
@ -85,7 +85,7 @@ fun BitwardenSlider(
|
||||
onValueChange = { },
|
||||
label = {
|
||||
Text(
|
||||
text = stringResource(id = R.string.length),
|
||||
text = stringResource(id = BitwardenString.length),
|
||||
style = BitwardenTheme.typography.bodySmall,
|
||||
modifier = Modifier.onGloballyPositioned { layoutCoordinates ->
|
||||
if (labelTextWidth == Dp.Unspecified) {
|
||||
|
||||
@ -29,9 +29,9 @@ import com.bitwarden.ui.platform.components.button.BitwardenOutlinedButton
|
||||
import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton
|
||||
import com.bitwarden.ui.platform.components.button.color.bitwardenOutlinedButtonColors
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.R
|
||||
|
||||
/**
|
||||
* Custom snackbar for Bitwarden.
|
||||
@ -108,7 +108,7 @@ fun BitwardenSnackbar(
|
||||
BitwardenStandardIconButton(
|
||||
onClick = onDismiss,
|
||||
vectorIconRes = BitwardenDrawable.ic_close,
|
||||
contentDescription = stringResource(R.string.close),
|
||||
contentDescription = stringResource(BitwardenString.close),
|
||||
contentColor = BitwardenTheme.colorScheme.icon.reversed,
|
||||
modifier = Modifier.offset(x = 12.dp, y = (-12).dp),
|
||||
)
|
||||
|
||||
@ -5,7 +5,7 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.components.toggle.BitwardenSwitch
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.x8bit.bitwarden.ui.platform.manager.biometrics.BiometricSupportStatus
|
||||
|
||||
/**
|
||||
@ -28,11 +28,11 @@ fun BitwardenUnlockWithBiometricsSwitch(
|
||||
) {
|
||||
val biometricsDescription: String = when (biometricSupportStatus) {
|
||||
BiometricSupportStatus.CLASS_3_SUPPORTED -> {
|
||||
stringResource(R.string.class_3_biometrics_description)
|
||||
stringResource(BitwardenString.class_3_biometrics_description)
|
||||
}
|
||||
|
||||
BiometricSupportStatus.CLASS_2_SUPPORTED -> {
|
||||
stringResource(R.string.class_2_biometrics_description)
|
||||
stringResource(BitwardenString.class_2_biometrics_description)
|
||||
}
|
||||
|
||||
BiometricSupportStatus.NOT_SUPPORTED -> return
|
||||
@ -40,8 +40,8 @@ fun BitwardenUnlockWithBiometricsSwitch(
|
||||
BitwardenSwitch(
|
||||
modifier = modifier,
|
||||
label = stringResource(
|
||||
id = R.string.unlock_with,
|
||||
stringResource(id = R.string.biometrics),
|
||||
id = BitwardenString.unlock_with,
|
||||
stringResource(id = BitwardenString.biometrics),
|
||||
),
|
||||
isChecked = isChecked,
|
||||
onCheckedChange = { toggled ->
|
||||
|
||||
@ -10,7 +10,7 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.components.toggle.BitwardenSwitch
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenTwoButtonDialog
|
||||
import com.x8bit.bitwarden.ui.platform.feature.settings.accountsecurity.PinInputDialog
|
||||
|
||||
@ -37,7 +37,7 @@ fun BitwardenUnlockWithPinSwitch(
|
||||
var shouldShowPinConfirmationDialog by rememberSaveable { mutableStateOf(value = false) }
|
||||
var pin by remember { mutableStateOf(value = "") }
|
||||
BitwardenSwitch(
|
||||
label = stringResource(id = R.string.unlock_with_pin),
|
||||
label = stringResource(id = BitwardenString.unlock_with_pin),
|
||||
isChecked = isUnlockWithPinEnabled,
|
||||
onCheckedChange = { isChecked ->
|
||||
if (isChecked) {
|
||||
@ -90,10 +90,10 @@ fun BitwardenUnlockWithPinSwitch(
|
||||
|
||||
shouldShowPinConfirmationDialog -> {
|
||||
BitwardenTwoButtonDialog(
|
||||
title = stringResource(id = R.string.require_master_password_on_app_restart),
|
||||
message = stringResource(id = R.string.pin_require_master_password_restart),
|
||||
confirmButtonText = stringResource(id = R.string.yes),
|
||||
dismissButtonText = stringResource(id = R.string.no),
|
||||
title = stringResource(id = BitwardenString.require_master_password_on_app_restart),
|
||||
message = stringResource(id = BitwardenString.pin_require_master_password_restart),
|
||||
confirmButtonText = stringResource(id = BitwardenString.yes),
|
||||
dismissButtonText = stringResource(id = BitwardenString.no),
|
||||
onConfirmClick = {
|
||||
shouldShowPinConfirmationDialog = false
|
||||
onUnlockWithPinToggleAction(
|
||||
|
||||
@ -22,8 +22,8 @@ import androidx.compose.ui.unit.dp
|
||||
import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
|
||||
private val MIN_TOOLTIP_WIDTH = 312.dp
|
||||
|
||||
@ -69,7 +69,7 @@ fun TooltipScope.BitwardenToolTip(
|
||||
onDismiss?.let {
|
||||
BitwardenStandardIconButton(
|
||||
painter = rememberVectorPainter(BitwardenDrawable.ic_close_small),
|
||||
contentDescription = stringResource(R.string.close),
|
||||
contentDescription = stringResource(BitwardenString.close),
|
||||
onClick = it,
|
||||
modifier = Modifier.offset(x = 16.dp),
|
||||
)
|
||||
|
||||
@ -33,8 +33,8 @@ import com.bitwarden.ui.platform.components.button.BitwardenFilledButton
|
||||
import com.bitwarden.ui.platform.components.divider.BitwardenHorizontalDivider
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.platform.manager.model.FlagKey
|
||||
import com.x8bit.bitwarden.ui.platform.components.header.BitwardenListHeaderText
|
||||
import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold
|
||||
@ -66,11 +66,11 @@ fun DebugMenuScreen(
|
||||
.nestedScroll(scrollBehavior.nestedScrollConnection),
|
||||
topBar = {
|
||||
BitwardenTopAppBar(
|
||||
title = stringResource(R.string.debug_menu),
|
||||
title = stringResource(BitwardenString.debug_menu),
|
||||
scrollBehavior = scrollBehavior,
|
||||
navigationIcon = NavigationIcon(
|
||||
navigationIcon = rememberVectorPainter(BitwardenDrawable.ic_back),
|
||||
navigationIconContentDescription = stringResource(id = R.string.back),
|
||||
navigationIconContentDescription = stringResource(id = BitwardenString.back),
|
||||
onNavigationIconClick = remember(viewModel) {
|
||||
{
|
||||
viewModel.trySendAction(DebugMenuAction.NavigateBack)
|
||||
@ -114,7 +114,7 @@ fun DebugMenuScreen(
|
||||
)
|
||||
Spacer(Modifier.height(16.dp))
|
||||
BitwardenFilledButton(
|
||||
label = stringResource(R.string.reset_coach_mark_tour_status),
|
||||
label = stringResource(BitwardenString.reset_coach_mark_tour_status),
|
||||
onClick = remember(viewModel) {
|
||||
{
|
||||
viewModel.trySendAction(DebugMenuAction.ResetCoachMarkTourStatuses)
|
||||
@ -129,14 +129,14 @@ fun DebugMenuScreen(
|
||||
BitwardenHorizontalDivider()
|
||||
Spacer(Modifier.height(height = 16.dp))
|
||||
BitwardenListHeaderText(
|
||||
label = stringResource(R.string.error_reports),
|
||||
label = stringResource(BitwardenString.error_reports),
|
||||
modifier = Modifier
|
||||
.standardHorizontalMargin()
|
||||
.padding(horizontal = 16.dp),
|
||||
)
|
||||
Spacer(modifier = Modifier.height(height = 8.dp))
|
||||
BitwardenFilledButton(
|
||||
label = stringResource(R.string.generate_error_report),
|
||||
label = stringResource(BitwardenString.generate_error_report),
|
||||
onClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(DebugMenuAction.GenerateErrorReportClick) }
|
||||
},
|
||||
@ -147,7 +147,7 @@ fun DebugMenuScreen(
|
||||
)
|
||||
Spacer(modifier = Modifier.height(height = 8.dp))
|
||||
BitwardenFilledButton(
|
||||
label = stringResource(R.string.generate_crash),
|
||||
label = stringResource(BitwardenString.generate_crash),
|
||||
onClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(DebugMenuAction.GenerateCrashClick) }
|
||||
},
|
||||
@ -173,7 +173,7 @@ private fun FeatureFlagContent(
|
||||
modifier = modifier,
|
||||
) {
|
||||
BitwardenListHeaderText(
|
||||
label = stringResource(R.string.feature_flags),
|
||||
label = stringResource(BitwardenString.feature_flags),
|
||||
modifier = Modifier
|
||||
.standardHorizontalMargin()
|
||||
.padding(horizontal = 16.dp),
|
||||
@ -193,7 +193,7 @@ private fun FeatureFlagContent(
|
||||
}
|
||||
Spacer(modifier = Modifier.height(height = 16.dp))
|
||||
BitwardenFilledButton(
|
||||
label = stringResource(R.string.reset_values),
|
||||
label = stringResource(BitwardenString.reset_values),
|
||||
onClick = onResetValues,
|
||||
modifier = Modifier
|
||||
.standardHorizontalMargin()
|
||||
@ -213,14 +213,14 @@ private fun OnboardingOverrideContent(
|
||||
) {
|
||||
Column(modifier) {
|
||||
BitwardenListHeaderText(
|
||||
label = stringResource(R.string.onboarding_override),
|
||||
label = stringResource(BitwardenString.onboarding_override),
|
||||
modifier = Modifier
|
||||
.standardHorizontalMargin()
|
||||
.padding(horizontal = 16.dp),
|
||||
)
|
||||
Spacer(modifier = Modifier.height(8.dp))
|
||||
BitwardenFilledButton(
|
||||
label = stringResource(R.string.restart_onboarding_cta),
|
||||
label = stringResource(BitwardenString.restart_onboarding_cta),
|
||||
onClick = onStartOnboarding,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
@ -228,7 +228,7 @@ private fun OnboardingOverrideContent(
|
||||
)
|
||||
Spacer(modifier = Modifier.height(4.dp))
|
||||
Text(
|
||||
text = stringResource(R.string.restart_onboarding_details),
|
||||
text = stringResource(BitwardenString.restart_onboarding_details),
|
||||
modifier = Modifier
|
||||
.align(Alignment.CenterHorizontally)
|
||||
.standardHorizontalMargin(),
|
||||
@ -238,7 +238,7 @@ private fun OnboardingOverrideContent(
|
||||
)
|
||||
Spacer(Modifier.height(16.dp))
|
||||
BitwardenFilledButton(
|
||||
label = stringResource(R.string.restart_onboarding_carousel),
|
||||
label = stringResource(BitwardenString.restart_onboarding_carousel),
|
||||
onClick = onStartOnboardingCarousel,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
@ -246,7 +246,7 @@ private fun OnboardingOverrideContent(
|
||||
)
|
||||
Spacer(modifier = Modifier.height(4.dp))
|
||||
Text(
|
||||
text = stringResource(R.string.restart_onboarding_carousel_details),
|
||||
text = stringResource(BitwardenString.restart_onboarding_carousel_details),
|
||||
modifier = Modifier
|
||||
.align(Alignment.CenterHorizontally)
|
||||
.standardHorizontalMargin(),
|
||||
|
||||
@ -5,7 +5,7 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.components.toggle.BitwardenSwitch
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.x8bit.bitwarden.data.platform.manager.model.FlagKey
|
||||
|
||||
/**
|
||||
@ -78,22 +78,24 @@ private fun <T : Any> FlagKey<T>.getDisplayLabel(): String = when (this) {
|
||||
FlagKey.DummyString,
|
||||
-> this.keyName
|
||||
|
||||
FlagKey.EmailVerification -> stringResource(R.string.email_verification)
|
||||
FlagKey.ImportLoginsFlow -> stringResource(R.string.import_logins_flow)
|
||||
FlagKey.CredentialExchangeProtocolImport -> stringResource(R.string.cxp_import)
|
||||
FlagKey.CredentialExchangeProtocolExport -> stringResource(R.string.cxp_export)
|
||||
FlagKey.CipherKeyEncryption -> stringResource(R.string.cipher_key_encryption)
|
||||
FlagKey.SingleTapPasskeyCreation -> stringResource(R.string.single_tap_passkey_creation)
|
||||
FlagKey.EmailVerification -> stringResource(BitwardenString.email_verification)
|
||||
FlagKey.ImportLoginsFlow -> stringResource(BitwardenString.import_logins_flow)
|
||||
FlagKey.CredentialExchangeProtocolImport -> stringResource(BitwardenString.cxp_import)
|
||||
FlagKey.CredentialExchangeProtocolExport -> stringResource(BitwardenString.cxp_export)
|
||||
FlagKey.CipherKeyEncryption -> stringResource(BitwardenString.cipher_key_encryption)
|
||||
FlagKey.SingleTapPasskeyCreation -> stringResource(BitwardenString.single_tap_passkey_creation)
|
||||
FlagKey.SingleTapPasskeyAuthentication -> {
|
||||
stringResource(R.string.single_tap_passkey_authentication)
|
||||
stringResource(BitwardenString.single_tap_passkey_authentication)
|
||||
}
|
||||
|
||||
FlagKey.AnonAddySelfHostAlias -> stringResource(R.string.anon_addy_self_hosted_aliases)
|
||||
FlagKey.SimpleLoginSelfHostAlias -> stringResource(R.string.simple_login_self_hosted_aliases)
|
||||
FlagKey.RestrictCipherItemDeletion -> stringResource(R.string.restrict_item_deletion)
|
||||
FlagKey.AnonAddySelfHostAlias -> stringResource(BitwardenString.anon_addy_self_hosted_aliases)
|
||||
FlagKey.SimpleLoginSelfHostAlias -> {
|
||||
stringResource(BitwardenString.simple_login_self_hosted_aliases)
|
||||
}
|
||||
FlagKey.RestrictCipherItemDeletion -> stringResource(BitwardenString.restrict_item_deletion)
|
||||
FlagKey.UserManagedPrivilegedApps -> {
|
||||
stringResource(R.string.user_trusted_privileged_app_management)
|
||||
stringResource(BitwardenString.user_trusted_privileged_app_management)
|
||||
}
|
||||
|
||||
FlagKey.RemoveCardPolicy -> stringResource(R.string.remove_card_policy)
|
||||
FlagKey.RemoveCardPolicy -> stringResource(BitwardenString.remove_card_policy)
|
||||
}
|
||||
|
||||
@ -17,7 +17,7 @@ import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.bitwarden.ui.platform.base.util.standardHorizontalMargin
|
||||
import com.bitwarden.ui.platform.base.util.toListItemCardStyle
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenMasterPasswordDialog
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenSelectionDialog
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenTwoButtonDialog
|
||||
@ -47,10 +47,10 @@ fun SearchContent(
|
||||
when (val option = showConfirmationDialog) {
|
||||
is ListingItemOverflowAction.SendAction.DeleteClick -> {
|
||||
BitwardenTwoButtonDialog(
|
||||
title = stringResource(id = R.string.delete),
|
||||
message = stringResource(id = R.string.are_you_sure_delete_send),
|
||||
confirmButtonText = stringResource(id = R.string.yes),
|
||||
dismissButtonText = stringResource(id = R.string.cancel),
|
||||
title = stringResource(id = BitwardenString.delete),
|
||||
message = stringResource(id = BitwardenString.are_you_sure_delete_send),
|
||||
confirmButtonText = stringResource(id = BitwardenString.yes),
|
||||
dismissButtonText = stringResource(id = BitwardenString.cancel),
|
||||
onConfirmClick = {
|
||||
showConfirmationDialog = null
|
||||
searchHandlers.onOverflowItemClick(option)
|
||||
@ -211,12 +211,12 @@ private fun AutofillSelectionDialog(
|
||||
}
|
||||
}
|
||||
BitwardenSelectionDialog(
|
||||
title = stringResource(id = R.string.autofill_or_view),
|
||||
title = stringResource(id = BitwardenString.autofill_or_view),
|
||||
onDismissRequest = onDismissRequest,
|
||||
selectionItems = {
|
||||
if (AutofillSelectionOption.AUTOFILL in displayItem.autofillSelectionOptions) {
|
||||
BitwardenBasicDialogRow(
|
||||
text = stringResource(id = R.string.autofill),
|
||||
text = stringResource(id = BitwardenString.autofill),
|
||||
onClick = {
|
||||
selectionCallback(
|
||||
displayItem,
|
||||
@ -227,7 +227,7 @@ private fun AutofillSelectionDialog(
|
||||
}
|
||||
if (AutofillSelectionOption.AUTOFILL_AND_SAVE in displayItem.autofillSelectionOptions) {
|
||||
BitwardenBasicDialogRow(
|
||||
text = stringResource(id = R.string.autofill_and_save),
|
||||
text = stringResource(id = BitwardenString.autofill_and_save),
|
||||
onClick = {
|
||||
selectionCallback(
|
||||
displayItem,
|
||||
@ -238,7 +238,7 @@ private fun AutofillSelectionDialog(
|
||||
}
|
||||
if (AutofillSelectionOption.VIEW in displayItem.autofillSelectionOptions) {
|
||||
BitwardenBasicDialogRow(
|
||||
text = stringResource(id = R.string.view),
|
||||
text = stringResource(id = BitwardenString.view),
|
||||
onClick = {
|
||||
onDismissRequest()
|
||||
onViewItemClick(displayItem.id, displayItem.itemType)
|
||||
|
||||
@ -21,7 +21,7 @@ import com.bitwarden.ui.platform.components.appbar.BitwardenSearchTopAppBar
|
||||
import com.bitwarden.ui.platform.components.appbar.NavigationIcon
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.x8bit.bitwarden.data.platform.manager.model.AppResumeScreenData
|
||||
import com.x8bit.bitwarden.data.platform.manager.util.AppResumeStateManager
|
||||
import com.x8bit.bitwarden.data.platform.manager.util.RegisterScreenDataOnLifecycleEffect
|
||||
@ -130,10 +130,10 @@ fun SearchScreen(
|
||||
scrollBehavior = scrollBehavior,
|
||||
navigationIcon = NavigationIcon(
|
||||
navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_back),
|
||||
navigationIconContentDescription = stringResource(id = R.string.back),
|
||||
navigationIconContentDescription = stringResource(id = BitwardenString.back),
|
||||
onNavigationIconClick = searchHandlers.onBackClick,
|
||||
),
|
||||
clearIconContentDescription = stringResource(id = R.string.clear),
|
||||
clearIconContentDescription = stringResource(id = BitwardenString.clear),
|
||||
)
|
||||
},
|
||||
utilityBar = {
|
||||
|
||||
@ -12,13 +12,13 @@ import com.bitwarden.send.SendType
|
||||
import com.bitwarden.ui.platform.base.BackgroundEvent
|
||||
import com.bitwarden.ui.platform.base.BaseViewModel
|
||||
import com.bitwarden.ui.platform.components.icon.model.IconData
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.bitwarden.ui.util.concat
|
||||
import com.bitwarden.vault.CipherType
|
||||
import com.bitwarden.vault.CipherView
|
||||
import com.bitwarden.vault.LoginUriView
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.ValidatePasswordResult
|
||||
import com.x8bit.bitwarden.data.autofill.accessibility.manager.AccessibilitySelectionManager
|
||||
@ -251,7 +251,7 @@ class SearchViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = SearchState.DialogState.Loading(
|
||||
message = R.string.loading.asText(),
|
||||
message = BitwardenString.loading.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -376,13 +376,15 @@ class SearchViewModel @Inject constructor(
|
||||
private fun handleCopyUrlClick(action: ListingItemOverflowAction.SendAction.CopyUrlClick) {
|
||||
clipboardManager.setText(
|
||||
text = action.sendUrl,
|
||||
toastDescriptorOverride = R.string.link.asText(),
|
||||
toastDescriptorOverride = BitwardenString.link.asText(),
|
||||
)
|
||||
}
|
||||
|
||||
private fun handleDeleteClick(action: ListingItemOverflowAction.SendAction.DeleteClick) {
|
||||
mutableStateFlow.update {
|
||||
it.copy(dialogState = SearchState.DialogState.Loading(R.string.deleting.asText()))
|
||||
it.copy(
|
||||
dialogState = SearchState.DialogState.Loading(BitwardenString.deleting.asText()),
|
||||
)
|
||||
}
|
||||
viewModelScope.launch {
|
||||
val result = vaultRepo.deleteSend(action.sendId)
|
||||
@ -423,7 +425,7 @@ class SearchViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = SearchState.DialogState.Loading(
|
||||
message = R.string.removing_send_password.asText(),
|
||||
message = BitwardenString.removing_send_password.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -443,7 +445,7 @@ class SearchViewModel @Inject constructor(
|
||||
?.let {
|
||||
clipboardManager.setText(
|
||||
text = it.notes.orEmpty(),
|
||||
toastDescriptorOverride = R.string.notes.asText(),
|
||||
toastDescriptorOverride = BitwardenString.notes.asText(),
|
||||
)
|
||||
}
|
||||
}
|
||||
@ -457,7 +459,7 @@ class SearchViewModel @Inject constructor(
|
||||
?.let {
|
||||
clipboardManager.setText(
|
||||
text = it.card?.number.orEmpty(),
|
||||
toastDescriptorOverride = R.string.number.asText(),
|
||||
toastDescriptorOverride = BitwardenString.number.asText(),
|
||||
)
|
||||
}
|
||||
}
|
||||
@ -471,7 +473,7 @@ class SearchViewModel @Inject constructor(
|
||||
?.let { cipherView ->
|
||||
clipboardManager.setText(
|
||||
text = cipherView.login?.password.orEmpty(),
|
||||
toastDescriptorOverride = R.string.password.asText(),
|
||||
toastDescriptorOverride = BitwardenString.password.asText(),
|
||||
)
|
||||
organizationEventManager.trackEvent(
|
||||
event = OrganizationEvent.CipherClientCopiedPassword(
|
||||
@ -490,7 +492,7 @@ class SearchViewModel @Inject constructor(
|
||||
?.let { cipherView ->
|
||||
clipboardManager.setText(
|
||||
text = cipherView.card?.code.orEmpty(),
|
||||
toastDescriptorOverride = R.string.security_code.asText(),
|
||||
toastDescriptorOverride = BitwardenString.security_code.asText(),
|
||||
)
|
||||
organizationEventManager.trackEvent(
|
||||
event = OrganizationEvent.CipherClientCopiedCardCode(
|
||||
@ -506,7 +508,7 @@ class SearchViewModel @Inject constructor(
|
||||
) {
|
||||
clipboardManager.setText(
|
||||
text = action.username,
|
||||
toastDescriptorOverride = R.string.username.asText(),
|
||||
toastDescriptorOverride = BitwardenString.username.asText(),
|
||||
)
|
||||
}
|
||||
|
||||
@ -580,8 +582,8 @@ class SearchViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = SearchState.DialogState.Error(
|
||||
title = R.string.decryption_error.asText(),
|
||||
message = R.string.failed_to_decrypt_cipher_contact_support.asText(),
|
||||
title = BitwardenString.decryption_error.asText(),
|
||||
message = BitwardenString.failed_to_decrypt_cipher_contact_support.asText(),
|
||||
throwable = action.error,
|
||||
),
|
||||
)
|
||||
@ -603,8 +605,8 @@ class SearchViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = SearchState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.generic_error_message.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.generic_error_message.asText(),
|
||||
throwable = result.error,
|
||||
),
|
||||
)
|
||||
@ -613,7 +615,7 @@ class SearchViewModel @Inject constructor(
|
||||
|
||||
DeleteSendResult.Success -> {
|
||||
mutableStateFlow.update { it.copy(dialogState = null) }
|
||||
sendEvent(SearchEvent.ShowSnackbar(R.string.send_deleted.asText()))
|
||||
sendEvent(SearchEvent.ShowSnackbar(BitwardenString.send_deleted.asText()))
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -626,7 +628,7 @@ class SearchViewModel @Inject constructor(
|
||||
is GenerateTotpResult.Success -> {
|
||||
clipboardManager.setText(
|
||||
text = result.code,
|
||||
toastDescriptorOverride = R.string.totp.asText(),
|
||||
toastDescriptorOverride = BitwardenString.totp.asText(),
|
||||
)
|
||||
}
|
||||
}
|
||||
@ -640,11 +642,11 @@ class SearchViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialogState = SearchState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = result
|
||||
.errorMessage
|
||||
?.asText()
|
||||
?: R.string.generic_error_message.asText(),
|
||||
?: BitwardenString.generic_error_message.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -652,7 +654,7 @@ class SearchViewModel @Inject constructor(
|
||||
|
||||
is RemovePasswordSendResult.Success -> {
|
||||
mutableStateFlow.update { it.copy(dialogState = null) }
|
||||
sendEvent(SearchEvent.ShowSnackbar(R.string.password_removed.asText()))
|
||||
sendEvent(SearchEvent.ShowSnackbar(BitwardenString.password_removed.asText()))
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -673,7 +675,7 @@ class SearchViewModel @Inject constructor(
|
||||
dialogState = SearchState.DialogState.Error(
|
||||
title = null,
|
||||
message = result.errorMessage?.asText()
|
||||
?: R.string.generic_error_message.asText(),
|
||||
?: BitwardenString.generic_error_message.asText(),
|
||||
throwable = result.error,
|
||||
),
|
||||
)
|
||||
@ -696,7 +698,7 @@ class SearchViewModel @Inject constructor(
|
||||
it.copy(
|
||||
dialogState = SearchState.DialogState.Error(
|
||||
title = null,
|
||||
message = R.string.generic_error_message.asText(),
|
||||
message = BitwardenString.generic_error_message.asText(),
|
||||
throwable = result.error,
|
||||
),
|
||||
)
|
||||
@ -709,7 +711,7 @@ class SearchViewModel @Inject constructor(
|
||||
it.copy(
|
||||
dialogState = SearchState.DialogState.Error(
|
||||
title = null,
|
||||
message = R.string.invalid_master_password.asText(),
|
||||
message = BitwardenString.invalid_master_password.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -796,7 +798,7 @@ class SearchViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
viewState = SearchState.ViewState.Error(
|
||||
message = R.string.generic_error_message.asText(),
|
||||
message = BitwardenString.generic_error_message.asText(),
|
||||
),
|
||||
dialogState = null,
|
||||
)
|
||||
@ -820,11 +822,11 @@ class SearchViewModel @Inject constructor(
|
||||
mutableStateFlow.update { currentState ->
|
||||
currentState.copy(
|
||||
viewState = SearchState.ViewState.Error(
|
||||
message = R.string.internet_connection_required_title
|
||||
message = BitwardenString.internet_connection_required_title
|
||||
.asText()
|
||||
.concat(
|
||||
" ".asText(),
|
||||
R.string.internet_connection_required_message.asText(),
|
||||
BitwardenString.internet_connection_required_message.asText(),
|
||||
),
|
||||
),
|
||||
dialogState = null,
|
||||
@ -1098,21 +1100,21 @@ sealed class SearchTypeData : Parcelable {
|
||||
* Indicates that we should be searching all sends.
|
||||
*/
|
||||
data object All : Sends() {
|
||||
override val title: Text get() = R.string.search_sends.asText()
|
||||
override val title: Text get() = BitwardenString.search_sends.asText()
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates that we should be searching only text sends.
|
||||
*/
|
||||
data object Texts : Sends() {
|
||||
override val title: Text get() = R.string.search_text_sends.asText()
|
||||
override val title: Text get() = BitwardenString.search_text_sends.asText()
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates that we should be searching only file sends.
|
||||
*/
|
||||
data object Files : Sends() {
|
||||
override val title: Text get() = R.string.search_file_sends.asText()
|
||||
override val title: Text get() = BitwardenString.search_file_sends.asText()
|
||||
}
|
||||
}
|
||||
|
||||
@ -1126,7 +1128,7 @@ sealed class SearchTypeData : Parcelable {
|
||||
* Indicates that we should be searching all vault items.
|
||||
*/
|
||||
data object All : Vault() {
|
||||
override val title: Text get() = R.string.search_vault.asText()
|
||||
override val title: Text get() = BitwardenString.search_vault.asText()
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1134,9 +1136,9 @@ sealed class SearchTypeData : Parcelable {
|
||||
*/
|
||||
data object Logins : Vault() {
|
||||
override val title: Text
|
||||
get() = R.string.search.asText()
|
||||
get() = BitwardenString.search.asText()
|
||||
.concat(" ".asText())
|
||||
.concat(R.string.logins.asText())
|
||||
.concat(BitwardenString.logins.asText())
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1144,9 +1146,9 @@ sealed class SearchTypeData : Parcelable {
|
||||
*/
|
||||
data object Cards : Vault() {
|
||||
override val title: Text
|
||||
get() = R.string.search.asText()
|
||||
get() = BitwardenString.search.asText()
|
||||
.concat(" ".asText())
|
||||
.concat(R.string.cards.asText())
|
||||
.concat(BitwardenString.cards.asText())
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1154,9 +1156,9 @@ sealed class SearchTypeData : Parcelable {
|
||||
*/
|
||||
data object Identities : Vault() {
|
||||
override val title: Text
|
||||
get() = R.string.search.asText()
|
||||
get() = BitwardenString.search.asText()
|
||||
.concat(" ".asText())
|
||||
.concat(R.string.identities.asText())
|
||||
.concat(BitwardenString.identities.asText())
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1164,9 +1166,9 @@ sealed class SearchTypeData : Parcelable {
|
||||
*/
|
||||
data object SecureNotes : Vault() {
|
||||
override val title: Text
|
||||
get() = R.string.search.asText()
|
||||
get() = BitwardenString.search.asText()
|
||||
.concat(" ".asText())
|
||||
.concat(R.string.secure_notes.asText())
|
||||
.concat(BitwardenString.secure_notes.asText())
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1174,9 +1176,9 @@ sealed class SearchTypeData : Parcelable {
|
||||
*/
|
||||
data object SshKeys : Vault() {
|
||||
override val title: Text
|
||||
get() = R.string.search.asText()
|
||||
get() = BitwardenString.search.asText()
|
||||
.concat(" ".asText())
|
||||
.concat(R.string.ssh_keys.asText())
|
||||
.concat(BitwardenString.ssh_keys.asText())
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1187,7 +1189,7 @@ sealed class SearchTypeData : Parcelable {
|
||||
val collectionName: String = "",
|
||||
) : Vault() {
|
||||
override val title: Text
|
||||
get() = R.string.search.asText()
|
||||
get() = BitwardenString.search.asText()
|
||||
.concat(" ".asText())
|
||||
.concat(collectionName.asText())
|
||||
}
|
||||
@ -1197,9 +1199,9 @@ sealed class SearchTypeData : Parcelable {
|
||||
*/
|
||||
data object NoFolder : Vault() {
|
||||
override val title: Text
|
||||
get() = R.string.search.asText()
|
||||
get() = BitwardenString.search.asText()
|
||||
.concat(" ".asText())
|
||||
.concat(R.string.folder_none.asText())
|
||||
.concat(BitwardenString.folder_none.asText())
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1210,7 +1212,7 @@ sealed class SearchTypeData : Parcelable {
|
||||
val folderName: String = "",
|
||||
) : Vault() {
|
||||
override val title: Text
|
||||
get() = R.string.search.asText()
|
||||
get() = BitwardenString.search.asText()
|
||||
.concat(" ".asText())
|
||||
.concat(folderName.asText())
|
||||
}
|
||||
@ -1220,9 +1222,9 @@ sealed class SearchTypeData : Parcelable {
|
||||
*/
|
||||
data object Trash : Vault() {
|
||||
override val title: Text
|
||||
get() = R.string.search.asText()
|
||||
get() = BitwardenString.search.asText()
|
||||
.concat(" ".asText())
|
||||
.concat(R.string.trash.asText())
|
||||
.concat(BitwardenString.trash.asText())
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1230,9 +1232,9 @@ sealed class SearchTypeData : Parcelable {
|
||||
*/
|
||||
data object VerificationCodes : Vault() {
|
||||
override val title: Text
|
||||
get() = R.string.search.asText()
|
||||
get() = BitwardenString.search.asText()
|
||||
.concat(" ".asText())
|
||||
.concat(R.string.verification_codes.asText())
|
||||
.concat(BitwardenString.verification_codes.asText())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -10,6 +10,7 @@ import com.bitwarden.send.SendView
|
||||
import com.bitwarden.ui.platform.base.util.removeDiacritics
|
||||
import com.bitwarden.ui.platform.components.icon.model.IconData
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.bitwarden.vault.CipherListView
|
||||
import com.bitwarden.vault.CipherListViewType
|
||||
@ -17,7 +18,6 @@ import com.bitwarden.vault.CipherRepromptType
|
||||
import com.bitwarden.vault.CipherView
|
||||
import com.bitwarden.vault.CollectionView
|
||||
import com.bitwarden.vault.FolderView
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.autofill.util.isActiveWithFido2Credentials
|
||||
import com.x8bit.bitwarden.data.autofill.util.login
|
||||
import com.x8bit.bitwarden.ui.platform.feature.search.SearchState
|
||||
@ -182,7 +182,7 @@ fun List<CipherListView>.toViewState(
|
||||
|
||||
else -> {
|
||||
SearchState.ViewState.Empty(
|
||||
message = R.string.there_are_no_items_that_match_the_search.asText(),
|
||||
message = BitwardenString.there_are_no_items_that_match_the_search.asText(),
|
||||
)
|
||||
}
|
||||
}
|
||||
@ -341,7 +341,7 @@ fun List<SendView>.toViewState(
|
||||
|
||||
else -> {
|
||||
SearchState.ViewState.Empty(
|
||||
message = R.string.there_are_no_items_that_match_the_search.asText(),
|
||||
message = BitwardenString.there_are_no_items_that_match_the_search.asText(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@ -29,7 +29,7 @@ import com.bitwarden.ui.platform.components.appbar.NavigationIcon
|
||||
import com.bitwarden.ui.platform.components.icon.model.IconData
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.x8bit.bitwarden.ui.platform.components.row.BitwardenPushRow
|
||||
import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold
|
||||
|
||||
@ -67,12 +67,14 @@ fun SettingsScreen(
|
||||
BitwardenScaffold(
|
||||
topBar = {
|
||||
BitwardenMediumTopAppBar(
|
||||
title = stringResource(id = R.string.settings),
|
||||
title = stringResource(id = BitwardenString.settings),
|
||||
scrollBehavior = scrollBehavior,
|
||||
navigationIcon = if (state.shouldShowCloseButton) {
|
||||
NavigationIcon(
|
||||
navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close),
|
||||
navigationIconContentDescription = stringResource(id = R.string.close),
|
||||
navigationIconContentDescription = stringResource(
|
||||
id = BitwardenString.close,
|
||||
),
|
||||
onNavigationIconClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(SettingsAction.CloseClick) }
|
||||
},
|
||||
|
||||
@ -7,9 +7,9 @@ import androidx.lifecycle.viewModelScope
|
||||
import com.bitwarden.ui.platform.base.BackgroundEvent
|
||||
import com.bitwarden.ui.platform.base.BaseViewModel
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.platform.manager.FirstTimeActionManager
|
||||
import com.x8bit.bitwarden.data.platform.manager.SpecialCircumstanceManager
|
||||
import com.x8bit.bitwarden.data.platform.manager.model.SpecialCircumstance
|
||||
@ -236,32 +236,32 @@ enum class Settings(
|
||||
val testTag: String,
|
||||
) {
|
||||
ACCOUNT_SECURITY(
|
||||
text = R.string.account_security.asText(),
|
||||
text = BitwardenString.account_security.asText(),
|
||||
vectorIconRes = BitwardenDrawable.ic_locked,
|
||||
testTag = "AccountSecuritySettingsButton",
|
||||
),
|
||||
AUTO_FILL(
|
||||
text = R.string.autofill.asText(),
|
||||
text = BitwardenString.autofill.asText(),
|
||||
vectorIconRes = BitwardenDrawable.ic_check_mark,
|
||||
testTag = "AutofillSettingsButton",
|
||||
),
|
||||
VAULT(
|
||||
text = R.string.vault.asText(),
|
||||
text = BitwardenString.vault.asText(),
|
||||
vectorIconRes = BitwardenDrawable.ic_vault_thin,
|
||||
testTag = "VaultSettingsButton",
|
||||
),
|
||||
APPEARANCE(
|
||||
text = R.string.appearance.asText(),
|
||||
text = BitwardenString.appearance.asText(),
|
||||
vectorIconRes = BitwardenDrawable.ic_paintbrush,
|
||||
testTag = "AppearanceSettingsButton",
|
||||
),
|
||||
OTHER(
|
||||
text = R.string.other.asText(),
|
||||
text = BitwardenString.other.asText(),
|
||||
vectorIconRes = BitwardenDrawable.ic_filter,
|
||||
testTag = "OtherSettingsButton",
|
||||
),
|
||||
ABOUT(
|
||||
text = R.string.about.asText(),
|
||||
text = BitwardenString.about.asText(),
|
||||
vectorIconRes = BitwardenDrawable.ic_info_circle,
|
||||
testTag = "AboutSettingsButton",
|
||||
),
|
||||
|
||||
@ -39,10 +39,10 @@ import com.bitwarden.ui.platform.components.model.TooltipData
|
||||
import com.bitwarden.ui.platform.components.toggle.BitwardenSwitch
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.row.BitwardenExternalLinkRow
|
||||
import com.x8bit.bitwarden.ui.platform.components.row.BitwardenPushRow
|
||||
import com.x8bit.bitwarden.ui.platform.components.row.BitwardenTextRow
|
||||
@ -96,10 +96,10 @@ fun AboutScreen(
|
||||
.nestedScroll(scrollBehavior.nestedScrollConnection),
|
||||
topBar = {
|
||||
BitwardenTopAppBar(
|
||||
title = stringResource(id = R.string.about),
|
||||
title = stringResource(id = BitwardenString.about),
|
||||
scrollBehavior = scrollBehavior,
|
||||
navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_back),
|
||||
navigationIconContentDescription = stringResource(id = R.string.back),
|
||||
navigationIconContentDescription = stringResource(id = BitwardenString.back),
|
||||
onNavigationIconClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(AboutAction.BackClick) }
|
||||
},
|
||||
@ -173,11 +173,11 @@ private fun AboutScreenContent(
|
||||
onViewRecordedLogsClick = onViewRecordedLogsClick,
|
||||
)
|
||||
BitwardenExternalLinkRow(
|
||||
text = stringResource(id = R.string.bitwarden_help_center),
|
||||
text = stringResource(id = BitwardenString.bitwarden_help_center),
|
||||
onConfirmClick = onHelpCenterClick,
|
||||
dialogTitle = stringResource(id = R.string.continue_to_help_center),
|
||||
dialogTitle = stringResource(id = BitwardenString.continue_to_help_center),
|
||||
dialogMessage = stringResource(
|
||||
id = R.string.learn_more_about_how_to_use_bitwarden_on_the_help_center,
|
||||
id = BitwardenString.learn_more_about_how_to_use_bitwarden_on_the_help_center,
|
||||
),
|
||||
withDivider = false,
|
||||
cardStyle = CardStyle.Top(),
|
||||
@ -187,11 +187,11 @@ private fun AboutScreenContent(
|
||||
.testTag(tag = "BitwardenHelpCenterRow"),
|
||||
)
|
||||
BitwardenExternalLinkRow(
|
||||
text = stringResource(id = R.string.privacy_policy),
|
||||
text = stringResource(id = BitwardenString.privacy_policy),
|
||||
onConfirmClick = onPrivacyPolicyClick,
|
||||
dialogTitle = stringResource(id = R.string.continue_to_privacy_policy),
|
||||
dialogTitle = stringResource(id = BitwardenString.continue_to_privacy_policy),
|
||||
dialogMessage = stringResource(
|
||||
id = R.string.privacy_policy_description_long,
|
||||
id = BitwardenString.privacy_policy_description_long,
|
||||
),
|
||||
withDivider = false,
|
||||
cardStyle = CardStyle.Middle(),
|
||||
@ -201,11 +201,11 @@ private fun AboutScreenContent(
|
||||
.testTag(tag = "PrivacyPolicyRow"),
|
||||
)
|
||||
BitwardenExternalLinkRow(
|
||||
text = stringResource(id = R.string.web_vault),
|
||||
text = stringResource(id = BitwardenString.web_vault),
|
||||
onConfirmClick = onWebVaultClick,
|
||||
dialogTitle = stringResource(id = R.string.continue_to_web_app),
|
||||
dialogTitle = stringResource(id = BitwardenString.continue_to_web_app),
|
||||
dialogMessage = stringResource(
|
||||
id = R.string.explore_more_features_of_your_bitwarden_account_on_the_web_app,
|
||||
id = BitwardenString.explore_more_features_of_your_bitwarden_account_on_the_web_app,
|
||||
),
|
||||
withDivider = false,
|
||||
cardStyle = CardStyle.Middle(),
|
||||
@ -215,11 +215,11 @@ private fun AboutScreenContent(
|
||||
.testTag(tag = "BitwardenWebVaultRow"),
|
||||
)
|
||||
BitwardenExternalLinkRow(
|
||||
text = stringResource(id = R.string.learn_org),
|
||||
text = stringResource(id = BitwardenString.learn_org),
|
||||
onConfirmClick = onLearnAboutOrgsClick,
|
||||
dialogTitle = stringResource(id = R.string.continue_to_x, "bitwarden.com"),
|
||||
dialogTitle = stringResource(id = BitwardenString.continue_to_x, "bitwarden.com"),
|
||||
dialogMessage = stringResource(
|
||||
id = R.string.learn_about_organizations_description_long,
|
||||
id = BitwardenString.learn_about_organizations_description_long,
|
||||
),
|
||||
withDivider = false,
|
||||
cardStyle = CardStyle.Middle(),
|
||||
@ -263,8 +263,8 @@ private fun ColumnScope.CrashLogsCard(
|
||||
) {
|
||||
if (!isVisible) return
|
||||
BitwardenSwitch(
|
||||
label = stringResource(id = R.string.submit_crash_logs),
|
||||
contentDescription = stringResource(id = R.string.submit_crash_logs),
|
||||
label = stringResource(id = BitwardenString.submit_crash_logs),
|
||||
contentDescription = stringResource(id = BitwardenString.submit_crash_logs),
|
||||
isChecked = isEnabled,
|
||||
onCheckedChange = onSubmitCrashLogsCheckedChange,
|
||||
cardStyle = CardStyle.Full,
|
||||
@ -285,11 +285,11 @@ private fun ColumnScope.FlightRecorderCard(
|
||||
onViewRecordedLogsClick: () -> Unit,
|
||||
) {
|
||||
BitwardenSwitch(
|
||||
label = stringResource(id = R.string.flight_recorder),
|
||||
label = stringResource(id = BitwardenString.flight_recorder),
|
||||
isChecked = isFlightRecorderEnabled,
|
||||
onCheckedChange = onFlightRecorderCheckedChange,
|
||||
tooltip = TooltipData(
|
||||
contentDescription = stringResource(id = R.string.flight_recorder_help),
|
||||
contentDescription = stringResource(id = BitwardenString.flight_recorder_help),
|
||||
onClick = onFlightRecorderTooltipClick,
|
||||
),
|
||||
subtext = logExpiration?.invoke(),
|
||||
@ -300,7 +300,7 @@ private fun ColumnScope.FlightRecorderCard(
|
||||
.standardHorizontalMargin(),
|
||||
)
|
||||
BitwardenPushRow(
|
||||
text = stringResource(id = R.string.view_recorded_logs),
|
||||
text = stringResource(id = BitwardenString.view_recorded_logs),
|
||||
onClick = onViewRecordedLogsClick,
|
||||
cardStyle = CardStyle.Bottom,
|
||||
modifier = Modifier
|
||||
|
||||
@ -2,9 +2,9 @@ package com.x8bit.bitwarden.ui.platform.feature.settings.about.util
|
||||
|
||||
import com.bitwarden.core.data.util.toFormattedDateStyle
|
||||
import com.bitwarden.core.data.util.toFormattedTimeStyle
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.platform.datasource.disk.model.FlightRecorderDataSet
|
||||
import java.time.Clock
|
||||
import java.time.Instant
|
||||
@ -33,5 +33,5 @@ private fun FlightRecorderDataSet.FlightRecorderData.getStopsLoggingString(
|
||||
timeStyle = FormatStyle.SHORT,
|
||||
clock = clock,
|
||||
)
|
||||
return R.string.stops_logging_on.asText(completionDate, completionTime)
|
||||
return BitwardenString.stops_logging_on.asText(completionDate, completionTime)
|
||||
}
|
||||
|
||||
@ -42,10 +42,10 @@ import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.components.toggle.BitwardenSwitch
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.platform.repository.model.VaultTimeout
|
||||
import com.x8bit.bitwarden.data.platform.repository.model.VaultTimeoutAction
|
||||
import com.x8bit.bitwarden.ui.platform.components.card.BitwardenActionCard
|
||||
@ -161,10 +161,10 @@ fun AccountSecurityScreen(
|
||||
.nestedScroll(scrollBehavior.nestedScrollConnection),
|
||||
topBar = {
|
||||
BitwardenTopAppBar(
|
||||
title = stringResource(id = R.string.account_security),
|
||||
title = stringResource(id = BitwardenString.account_security),
|
||||
scrollBehavior = scrollBehavior,
|
||||
navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_back),
|
||||
navigationIconContentDescription = stringResource(id = R.string.back),
|
||||
navigationIconContentDescription = stringResource(id = BitwardenString.back),
|
||||
onNavigationIconClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(AccountSecurityAction.BackClick) }
|
||||
},
|
||||
@ -183,8 +183,8 @@ fun AccountSecurityScreen(
|
||||
exit = actionCardExitAnimation(),
|
||||
) {
|
||||
BitwardenActionCard(
|
||||
cardTitle = stringResource(id = R.string.set_up_unlock),
|
||||
actionText = stringResource(R.string.get_started),
|
||||
cardTitle = stringResource(id = BitwardenString.set_up_unlock),
|
||||
actionText = stringResource(BitwardenString.get_started),
|
||||
onActionClick = remember(viewModel) {
|
||||
{
|
||||
viewModel.trySendAction(AccountSecurityAction.UnlockActionCardCtaClick)
|
||||
@ -205,7 +205,7 @@ fun AccountSecurityScreen(
|
||||
}
|
||||
|
||||
BitwardenListHeaderText(
|
||||
label = stringResource(id = R.string.approve_login_requests),
|
||||
label = stringResource(id = BitwardenString.approve_login_requests),
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.standardHorizontalMargin()
|
||||
@ -213,7 +213,7 @@ fun AccountSecurityScreen(
|
||||
)
|
||||
Spacer(modifier = Modifier.height(height = 8.dp))
|
||||
BitwardenTextRow(
|
||||
text = stringResource(id = R.string.pending_log_in_requests),
|
||||
text = stringResource(id = BitwardenString.pending_log_in_requests),
|
||||
onClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(AccountSecurityAction.PendingLoginRequestsClick) }
|
||||
},
|
||||
@ -231,7 +231,7 @@ fun AccountSecurityScreen(
|
||||
) {
|
||||
Spacer(Modifier.height(16.dp))
|
||||
BitwardenListHeaderText(
|
||||
label = stringResource(id = R.string.unlock_options),
|
||||
label = stringResource(id = BitwardenString.unlock_options),
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.standardHorizontalMargin()
|
||||
@ -288,7 +288,7 @@ fun AccountSecurityScreen(
|
||||
Spacer(Modifier.height(16.dp))
|
||||
}
|
||||
BitwardenListHeaderText(
|
||||
label = stringResource(id = R.string.session_timeout),
|
||||
label = stringResource(id = BitwardenString.session_timeout),
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.standardHorizontalMargin()
|
||||
@ -344,7 +344,7 @@ fun AccountSecurityScreen(
|
||||
|
||||
Spacer(Modifier.height(16.dp))
|
||||
BitwardenListHeaderText(
|
||||
label = stringResource(id = R.string.other),
|
||||
label = stringResource(id = BitwardenString.other),
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.standardHorizontalMargin()
|
||||
@ -352,7 +352,7 @@ fun AccountSecurityScreen(
|
||||
)
|
||||
Spacer(modifier = Modifier.height(height = 8.dp))
|
||||
BitwardenTextRow(
|
||||
text = stringResource(id = R.string.account_fingerprint_phrase),
|
||||
text = stringResource(id = BitwardenString.account_fingerprint_phrase),
|
||||
onClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(AccountSecurityAction.AccountFingerprintPhraseClick) }
|
||||
},
|
||||
@ -363,13 +363,15 @@ fun AccountSecurityScreen(
|
||||
.fillMaxWidth(),
|
||||
)
|
||||
BitwardenExternalLinkRow(
|
||||
text = stringResource(id = R.string.two_step_login),
|
||||
text = stringResource(id = BitwardenString.two_step_login),
|
||||
onConfirmClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(AccountSecurityAction.TwoStepLoginClick) }
|
||||
},
|
||||
withDivider = false,
|
||||
dialogTitle = stringResource(id = R.string.continue_to_web_app),
|
||||
dialogMessage = stringResource(id = R.string.two_step_login_description_long),
|
||||
dialogTitle = stringResource(id = BitwardenString.continue_to_web_app),
|
||||
dialogMessage = stringResource(
|
||||
id = BitwardenString.two_step_login_description_long,
|
||||
),
|
||||
cardStyle = CardStyle.Middle(),
|
||||
modifier = Modifier
|
||||
.testTag("TwoStepLoginLinkItemView")
|
||||
@ -378,14 +380,14 @@ fun AccountSecurityScreen(
|
||||
)
|
||||
if (state.isUnlockWithPasswordEnabled) {
|
||||
BitwardenExternalLinkRow(
|
||||
text = stringResource(id = R.string.change_master_password),
|
||||
text = stringResource(id = BitwardenString.change_master_password),
|
||||
onConfirmClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(AccountSecurityAction.ChangeMasterPasswordClick) }
|
||||
},
|
||||
withDivider = false,
|
||||
dialogTitle = stringResource(id = R.string.continue_to_web_app),
|
||||
dialogTitle = stringResource(id = BitwardenString.continue_to_web_app),
|
||||
dialogMessage = stringResource(
|
||||
id = R.string.change_master_password_description_long,
|
||||
id = BitwardenString.change_master_password_description_long,
|
||||
),
|
||||
cardStyle = CardStyle.Middle(),
|
||||
modifier = Modifier
|
||||
@ -395,7 +397,7 @@ fun AccountSecurityScreen(
|
||||
}
|
||||
if (state.hasUnlockMechanism) {
|
||||
BitwardenTextRow(
|
||||
text = stringResource(id = R.string.lock_now),
|
||||
text = stringResource(id = BitwardenString.lock_now),
|
||||
onClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(AccountSecurityAction.LockNowClick) }
|
||||
},
|
||||
@ -407,7 +409,7 @@ fun AccountSecurityScreen(
|
||||
)
|
||||
}
|
||||
BitwardenTextRow(
|
||||
text = stringResource(id = R.string.log_out),
|
||||
text = stringResource(id = BitwardenString.log_out),
|
||||
onClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(AccountSecurityAction.LogoutClick) }
|
||||
},
|
||||
@ -418,7 +420,7 @@ fun AccountSecurityScreen(
|
||||
.fillMaxWidth(),
|
||||
)
|
||||
BitwardenTextRow(
|
||||
text = stringResource(id = R.string.delete_account),
|
||||
text = stringResource(id = BitwardenString.delete_account),
|
||||
onClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(AccountSecurityAction.DeleteAccountClick) }
|
||||
},
|
||||
@ -481,17 +483,21 @@ private fun SessionTimeoutPolicyRow(
|
||||
|
||||
// Get the localized version of the action.
|
||||
val action = if (vaultTimeoutPolicyAction == "lock") {
|
||||
R.string.lock.asText()
|
||||
BitwardenString.lock.asText()
|
||||
} else {
|
||||
R.string.log_out.asText()
|
||||
BitwardenString.log_out.asText()
|
||||
}
|
||||
|
||||
val policyText = if (hours == null || minutes == null) {
|
||||
R.string.vault_timeout_action_policy_in_effect.asText(action)
|
||||
BitwardenString.vault_timeout_action_policy_in_effect.asText(action)
|
||||
} else if (vaultTimeoutPolicyAction.isNullOrBlank()) {
|
||||
R.string.vault_timeout_policy_in_effect.asText(hours, minutes)
|
||||
BitwardenString.vault_timeout_policy_in_effect.asText(hours, minutes)
|
||||
} else {
|
||||
R.string.vault_timeout_policy_with_action_in_effect.asText(hours, minutes, action)
|
||||
BitwardenString.vault_timeout_policy_with_action_in_effect.asText(
|
||||
hours,
|
||||
minutes,
|
||||
action,
|
||||
)
|
||||
}
|
||||
|
||||
BitwardenInfoCalloutCard(
|
||||
@ -515,7 +521,7 @@ private fun SessionTimeoutRow(
|
||||
.entries
|
||||
.filter { it.minutes <= (vaultTimeoutPolicyMinutes ?: Int.MAX_VALUE) }
|
||||
BitwardenMultiSelectButton(
|
||||
label = stringResource(id = R.string.session_timeout),
|
||||
label = stringResource(id = BitwardenString.session_timeout),
|
||||
options = vaultTimeoutOptions.map { it.displayLabel() }.toImmutableList(),
|
||||
selectedOption = selectedVaultTimeoutType.displayLabel(),
|
||||
onOptionSelected = { selectedType ->
|
||||
@ -535,10 +541,10 @@ private fun SessionTimeoutRow(
|
||||
|
||||
if (shouldShowNeverTimeoutConfirmationDialog) {
|
||||
BitwardenTwoButtonDialog(
|
||||
title = stringResource(id = R.string.warning),
|
||||
message = stringResource(id = R.string.never_lock_warning),
|
||||
confirmButtonText = stringResource(id = R.string.okay),
|
||||
dismissButtonText = stringResource(id = R.string.cancel),
|
||||
title = stringResource(id = BitwardenString.warning),
|
||||
message = stringResource(id = BitwardenString.never_lock_warning),
|
||||
confirmButtonText = stringResource(id = BitwardenString.okay),
|
||||
dismissButtonText = stringResource(id = BitwardenString.cancel),
|
||||
onConfirmClick = {
|
||||
shouldShowNeverTimeoutConfirmationDialog = false
|
||||
onVaultTimeoutTypeSelect(VaultTimeout.Type.NEVER)
|
||||
@ -561,7 +567,7 @@ private fun SessionCustomTimeoutRow(
|
||||
var shouldShowViolatesPoliciesDialog by remember { mutableStateOf(false) }
|
||||
val vaultTimeoutInMinutes = customVaultTimeout.vaultTimeoutInMinutes
|
||||
BitwardenTextRow(
|
||||
text = stringResource(id = R.string.custom),
|
||||
text = stringResource(id = BitwardenString.custom),
|
||||
onClick = { shouldShowTimePickerDialog = true },
|
||||
cardStyle = CardStyle.Middle(),
|
||||
modifier = modifier,
|
||||
@ -603,8 +609,8 @@ private fun SessionCustomTimeoutRow(
|
||||
|
||||
if (shouldShowViolatesPoliciesDialog) {
|
||||
BitwardenBasicDialog(
|
||||
title = stringResource(id = R.string.warning),
|
||||
message = stringResource(id = R.string.vault_timeout_to_large),
|
||||
title = stringResource(id = BitwardenString.warning),
|
||||
message = stringResource(id = BitwardenString.vault_timeout_to_large),
|
||||
onDismissRequest = {
|
||||
shouldShowViolatesPoliciesDialog = false
|
||||
vaultTimeoutPolicyMinutes?.let {
|
||||
@ -631,7 +637,7 @@ private fun SessionTimeoutActionRow(
|
||||
var shouldShowLogoutActionConfirmationDialog by rememberSaveable { mutableStateOf(false) }
|
||||
BitwardenMultiSelectButton(
|
||||
isEnabled = isEnabled,
|
||||
label = stringResource(id = R.string.session_timeout_action),
|
||||
label = stringResource(id = BitwardenString.session_timeout_action),
|
||||
options = VaultTimeoutAction.entries.map { it.displayLabel() }.toImmutableList(),
|
||||
selectedOption = selectedVaultTimeoutAction.displayLabel(),
|
||||
onOptionSelected = { action ->
|
||||
@ -647,7 +653,7 @@ private fun SessionTimeoutActionRow(
|
||||
}
|
||||
},
|
||||
supportingText = stringResource(
|
||||
id = R.string.set_up_an_unlock_option_to_change_your_vault_timeout_action,
|
||||
id = BitwardenString.set_up_an_unlock_option_to_change_your_vault_timeout_action,
|
||||
)
|
||||
.takeUnless { isEnabled },
|
||||
textFieldTestTag = "SessionTimeoutActionStatusLabel",
|
||||
@ -657,10 +663,12 @@ private fun SessionTimeoutActionRow(
|
||||
|
||||
if (shouldShowLogoutActionConfirmationDialog) {
|
||||
BitwardenTwoButtonDialog(
|
||||
title = stringResource(id = R.string.vault_timeout_log_out_confirmation_title),
|
||||
message = stringResource(id = R.string.vault_timeout_log_out_confirmation_message),
|
||||
confirmButtonText = stringResource(id = R.string.yes),
|
||||
dismissButtonText = stringResource(id = R.string.cancel),
|
||||
title = stringResource(id = BitwardenString.vault_timeout_log_out_confirmation_title),
|
||||
message = stringResource(
|
||||
id = BitwardenString.vault_timeout_log_out_confirmation_message,
|
||||
),
|
||||
confirmButtonText = stringResource(id = BitwardenString.yes),
|
||||
dismissButtonText = stringResource(id = BitwardenString.cancel),
|
||||
onConfirmClick = {
|
||||
shouldShowLogoutActionConfirmationDialog = false
|
||||
onVaultTimeoutActionSelect(VaultTimeoutAction.LOGOUT)
|
||||
@ -681,7 +689,7 @@ private fun ColumnScope.SyncWithAuthenticatorRow(
|
||||
onCheckedChange: (Boolean) -> Unit,
|
||||
) {
|
||||
BitwardenListHeaderText(
|
||||
label = stringResource(R.string.authenticator_sync),
|
||||
label = stringResource(BitwardenString.authenticator_sync),
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.standardHorizontalMargin()
|
||||
@ -689,7 +697,7 @@ private fun ColumnScope.SyncWithAuthenticatorRow(
|
||||
)
|
||||
Spacer(modifier = Modifier.height(height = 8.dp))
|
||||
BitwardenSwitch(
|
||||
label = stringResource(R.string.allow_bitwarden_authenticator_syncing),
|
||||
label = stringResource(BitwardenString.allow_bitwarden_authenticator_syncing),
|
||||
onCheckedChange = onCheckedChange,
|
||||
isChecked = isChecked,
|
||||
cardStyle = CardStyle.Full,
|
||||
@ -709,19 +717,19 @@ private fun FingerPrintPhraseDialog(
|
||||
onDismissRequest = onDismissRequest,
|
||||
dismissButton = {
|
||||
BitwardenTextButton(
|
||||
label = stringResource(id = R.string.close),
|
||||
label = stringResource(id = BitwardenString.close),
|
||||
onClick = onDismissRequest,
|
||||
)
|
||||
},
|
||||
confirmButton = {
|
||||
BitwardenTextButton(
|
||||
label = stringResource(id = R.string.learn_more),
|
||||
label = stringResource(id = BitwardenString.learn_more),
|
||||
onClick = onLearnMore,
|
||||
)
|
||||
},
|
||||
title = {
|
||||
Text(
|
||||
text = stringResource(id = R.string.fingerprint_phrase),
|
||||
text = stringResource(id = BitwardenString.fingerprint_phrase),
|
||||
color = BitwardenTheme.colorScheme.text.primary,
|
||||
style = BitwardenTheme.typography.headlineSmall,
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
@ -730,7 +738,7 @@ private fun FingerPrintPhraseDialog(
|
||||
text = {
|
||||
Column {
|
||||
Text(
|
||||
text = "${stringResource(id = R.string.your_accounts_fingerprint)}:",
|
||||
text = "${stringResource(id = BitwardenString.your_accounts_fingerprint)}:",
|
||||
color = BitwardenTheme.colorScheme.text.primary,
|
||||
style = BitwardenTheme.typography.bodyMedium,
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
|
||||
@ -8,9 +8,9 @@ import com.bitwarden.core.util.isBuildVersionAtLeast
|
||||
import com.bitwarden.data.repository.util.baseWebVaultUrlOrDefault
|
||||
import com.bitwarden.network.model.PolicyTypeJson
|
||||
import com.bitwarden.ui.platform.base.BaseViewModel
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.LogoutReason
|
||||
import com.x8bit.bitwarden.data.auth.repository.model.PolicyInformation
|
||||
@ -242,8 +242,8 @@ class AccountSecurityViewModel @Inject constructor(
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = AccountSecurityDialog.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.generic_error_message.asText(),
|
||||
title = BitwardenString.an_error_has_occurred.asText(),
|
||||
message = BitwardenString.generic_error_message.asText(),
|
||||
),
|
||||
)
|
||||
}
|
||||
@ -327,7 +327,7 @@ class AccountSecurityViewModel @Inject constructor(
|
||||
) {
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
dialog = AccountSecurityDialog.Loading(R.string.saving.asText()),
|
||||
dialog = AccountSecurityDialog.Loading(BitwardenString.saving.asText()),
|
||||
isUnlockWithBiometricsEnabled = true,
|
||||
)
|
||||
}
|
||||
|
||||
@ -34,8 +34,8 @@ import com.bitwarden.ui.platform.components.button.BitwardenFilledButton
|
||||
import com.bitwarden.ui.platform.components.button.BitwardenTextButton
|
||||
import com.bitwarden.ui.platform.components.divider.BitwardenHorizontalDivider
|
||||
import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.field.BitwardenTextField
|
||||
import com.x8bit.bitwarden.ui.platform.components.util.maxDialogHeight
|
||||
|
||||
@ -88,7 +88,7 @@ fun PinInputDialog(
|
||||
.testTag(tag = "AlertTitleText")
|
||||
.padding(horizontal = 24.dp)
|
||||
.fillMaxWidth(),
|
||||
text = stringResource(id = R.string.enter_pin),
|
||||
text = stringResource(id = BitwardenString.enter_pin),
|
||||
color = BitwardenTheme.colorScheme.text.primary,
|
||||
style = BitwardenTheme.typography.headlineSmall,
|
||||
)
|
||||
@ -106,13 +106,13 @@ fun PinInputDialog(
|
||||
modifier = Modifier
|
||||
.testTag(tag = "AlertContentText")
|
||||
.fillMaxWidth(),
|
||||
text = stringResource(id = R.string.set_pin_description),
|
||||
text = stringResource(id = BitwardenString.set_pin_description),
|
||||
color = BitwardenTheme.colorScheme.text.primary,
|
||||
style = BitwardenTheme.typography.bodyMedium,
|
||||
)
|
||||
Spacer(modifier = Modifier.height(height = 16.dp))
|
||||
BitwardenTextField(
|
||||
label = stringResource(id = R.string.pin),
|
||||
label = stringResource(id = BitwardenString.pin),
|
||||
value = pin,
|
||||
autoFocus = true,
|
||||
onValueChange = { newValue ->
|
||||
@ -142,13 +142,13 @@ fun PinInputDialog(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
) {
|
||||
BitwardenTextButton(
|
||||
label = stringResource(id = R.string.cancel),
|
||||
label = stringResource(id = BitwardenString.cancel),
|
||||
onClick = onCancelClick,
|
||||
modifier = Modifier.testTag(tag = "DismissAlertButton"),
|
||||
)
|
||||
|
||||
BitwardenFilledButton(
|
||||
label = stringResource(id = R.string.submit),
|
||||
label = stringResource(id = BitwardenString.submit),
|
||||
isEnabled = isDoneEnabled(),
|
||||
onClick = { onSubmitClick(pin) },
|
||||
modifier = Modifier.testTag(tag = "AcceptAlertButton"),
|
||||
|
||||
@ -39,8 +39,8 @@ import com.bitwarden.ui.platform.components.button.BitwardenOutlinedErrorButton
|
||||
import com.bitwarden.ui.platform.components.model.CardStyle
|
||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.platform.theme.BitwardenTheme
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenLoadingDialog
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenMasterPasswordDialog
|
||||
@ -70,14 +70,16 @@ fun DeleteAccountScreen(
|
||||
when (val dialog = state.dialog) {
|
||||
DeleteAccountState.DeleteAccountDialog.DeleteSuccess -> BitwardenBasicDialog(
|
||||
title = null,
|
||||
message = stringResource(id = R.string.your_account_has_been_permanently_deleted),
|
||||
message = stringResource(
|
||||
id = BitwardenString.your_account_has_been_permanently_deleted,
|
||||
),
|
||||
onDismissRequest = remember(viewModel) {
|
||||
{ viewModel.trySendAction(DeleteAccountAction.AccountDeletionConfirm) }
|
||||
},
|
||||
)
|
||||
|
||||
is DeleteAccountState.DeleteAccountDialog.Error -> BitwardenBasicDialog(
|
||||
title = stringResource(id = R.string.an_error_has_occurred),
|
||||
title = stringResource(id = BitwardenString.an_error_has_occurred),
|
||||
message = dialog.message(),
|
||||
throwable = dialog.error,
|
||||
onDismissRequest = remember(viewModel) {
|
||||
@ -86,7 +88,7 @@ fun DeleteAccountScreen(
|
||||
)
|
||||
|
||||
DeleteAccountState.DeleteAccountDialog.Loading -> BitwardenLoadingDialog(
|
||||
text = stringResource(id = R.string.loading),
|
||||
text = stringResource(id = BitwardenString.loading),
|
||||
)
|
||||
|
||||
null -> Unit
|
||||
@ -99,10 +101,10 @@ fun DeleteAccountScreen(
|
||||
.nestedScroll(scrollBehavior.nestedScrollConnection),
|
||||
topBar = {
|
||||
BitwardenTopAppBar(
|
||||
title = stringResource(id = R.string.delete_account),
|
||||
title = stringResource(id = BitwardenString.delete_account),
|
||||
scrollBehavior = scrollBehavior,
|
||||
navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close),
|
||||
navigationIconContentDescription = stringResource(id = R.string.close),
|
||||
navigationIconContentDescription = stringResource(id = BitwardenString.close),
|
||||
onNavigationIconClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(DeleteAccountAction.CloseClick) }
|
||||
},
|
||||
@ -117,16 +119,18 @@ fun DeleteAccountScreen(
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
if (state.isUserManagedByOrganization) {
|
||||
WarningMessageCard(
|
||||
headerText = stringResource(id = R.string.cannot_delete_your_account),
|
||||
headerText = stringResource(id = BitwardenString.cannot_delete_your_account),
|
||||
subtitleText = stringResource(
|
||||
id = R.string.cannot_delete_your_account_explanation,
|
||||
id = BitwardenString.cannot_delete_your_account_explanation,
|
||||
),
|
||||
modifier = Modifier.standardHorizontalMargin(),
|
||||
)
|
||||
} else {
|
||||
WarningMessageCard(
|
||||
headerText = stringResource(id = R.string.deleting_your_account_is_permanent),
|
||||
subtitleText = stringResource(id = R.string.delete_account_explanation),
|
||||
headerText = stringResource(
|
||||
id = BitwardenString.deleting_your_account_is_permanent,
|
||||
),
|
||||
subtitleText = stringResource(id = BitwardenString.delete_account_explanation),
|
||||
modifier = Modifier.standardHorizontalMargin(),
|
||||
)
|
||||
Spacer(modifier = Modifier.height(24.dp))
|
||||
@ -149,7 +153,7 @@ fun DeleteAccountScreen(
|
||||
)
|
||||
Spacer(modifier = Modifier.height(12.dp))
|
||||
BitwardenOutlinedErrorButton(
|
||||
label = stringResource(id = R.string.cancel),
|
||||
label = stringResource(id = BitwardenString.cancel),
|
||||
onClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(DeleteAccountAction.CancelClick) }
|
||||
},
|
||||
@ -183,7 +187,7 @@ private fun DeleteAccountButton(
|
||||
}
|
||||
|
||||
BitwardenFilledErrorButton(
|
||||
label = stringResource(id = R.string.delete_account),
|
||||
label = stringResource(id = BitwardenString.delete_account),
|
||||
onClick = {
|
||||
if (isUnlockWithPasswordEnabled) {
|
||||
showPasswordDialog = true
|
||||
@ -237,7 +241,7 @@ private fun WarningMessageCard(
|
||||
@Composable
|
||||
private fun WarningMessageCard_preview() {
|
||||
WarningMessageCard(
|
||||
headerText = stringResource(id = R.string.cannot_delete_your_account),
|
||||
subtitleText = stringResource(id = R.string.cannot_delete_your_account_explanation),
|
||||
headerText = stringResource(id = BitwardenString.cannot_delete_your_account),
|
||||
subtitleText = stringResource(id = BitwardenString.cannot_delete_your_account_explanation),
|
||||
)
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user