From d5c04123d919dfa393013590df817b578b5f2578 Mon Sep 17 00:00:00 2001 From: Patrick Honkonen <1883101+SaintPatrck@users.noreply.github.com> Date: Thu, 22 May 2025 16:31:12 -0400 Subject: [PATCH 01/34] [PM-21888] Migrate icon buttons to ui module (#5241) --- .../CompleteRegistrationScreen.kt | 3 +- .../account/BitwardenAccountActionItem.kt | 2 +- .../BitwardenPlaceholderAccountItem.kt | 2 +- .../appbar/BitwardenMediumTopAppBar.kt | 2 +- .../appbar/BitwardenSearchTopAppBar.kt | 2 +- .../components/appbar/BitwardenTopAppBar.kt | 2 +- .../action/BitwardenOverflowActionItem.kt | 2 +- .../action/BitwardenSearchActionItem.kt | 2 +- .../button/BitwardenFilledButton.kt | 6 +- .../button/BitwardenFilledErrorButton.kt | 6 +- .../button/BitwardenOutlinedButton.kt | 6 +- .../button/BitwardenOutlinedErrorButton.kt | 6 +- .../button/BitwardenTextSelectionButton.kt | 1 + .../components/card/BitwardenActionCard.kt | 2 +- .../coachmark/CoachMarkContainer.kt | 2 +- .../dialog/BitwardenTimePickerDialog.kt | 2 +- .../dropdown/EnvironmentSelector.kt | 2 +- .../field/BitwardenPasswordField.kt | 2 +- .../components/field/BitwardenTextField.kt | 2 +- .../components/listitem/BitwardenListItem.kt | 2 +- .../components/row/BitwardenRowOfActions.kt | 6 +- .../components/snackbar/BitwardenSnackbar.kt | 2 +- .../components/stepper/BitwardenStepper.kt | 2 +- .../components/toggle/BitwardenSwitch.kt | 2 +- .../components/tooltip/BitwardenToolTip.kt | 2 +- .../feature/generator/GeneratorScreen.kt | 2 +- .../PasswordHistoryListItem.kt | 2 +- .../addedit/VaultAddEditCustomField.kt | 2 +- .../addedit/VaultAddEditItemContent.kt | 2 +- .../feature/addedit/VaultAddEditLoginItems.kt | 2 +- .../feature/addedit/VaultAddEditUriItem.kt | 2 +- .../feature/attachments/AttachmentsContent.kt | 2 +- .../item/VaultItemAttachmentContent.kt | 2 +- .../feature/item/VaultItemCardContent.kt | 2 +- .../feature/item/VaultItemIdentityContent.kt | 2 +- .../feature/item/VaultItemLoginContent.kt | 2 +- .../item/VaultItemSecureNoteContent.kt | 2 +- .../feature/item/VaultItemSshKeyContent.kt | 2 +- .../item/component/VaultItemCustomField.kt | 2 +- .../ui/vault/feature/vault/VaultFilter.kt | 2 +- .../verificationcode/VerificationCodeItem.kt | 2 +- .../button/BitwardenStandardIconButton.kt | 58 ------------------- .../button/BitwardenFilledIconButton.kt | 8 +-- .../button/BitwardenStandardIconButton.kt | 8 +-- .../button/BitwardenTonalIconButton.kt | 8 +-- .../button/color/BitwardenIconButtonColors.kt | 2 +- .../platform/resource/BitwardenResources.kt | 6 ++ .../main/res/drawable/ic_question_circle.xml | 0 48 files changed, 71 insertions(+), 121 deletions(-) delete mode 100644 authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/button/BitwardenStandardIconButton.kt rename {app/src/main/kotlin/com/x8bit => ui/src/main/kotlin/com}/bitwarden/ui/platform/components/button/BitwardenFilledIconButton.kt (86%) rename {app/src/main/kotlin/com/x8bit => ui/src/main/kotlin/com}/bitwarden/ui/platform/components/button/BitwardenStandardIconButton.kt (91%) rename {app/src/main/kotlin/com/x8bit => ui/src/main/kotlin/com}/bitwarden/ui/platform/components/button/BitwardenTonalIconButton.kt (86%) rename {app/src/main/kotlin/com/x8bit => ui/src/main/kotlin/com}/bitwarden/ui/platform/components/button/color/BitwardenIconButtonColors.kt (96%) create mode 100644 ui/src/main/kotlin/com/bitwarden/ui/platform/resource/BitwardenResources.kt rename {app => ui}/src/main/res/drawable/ic_question_circle.xml (100%) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/completeregistration/CompleteRegistrationScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/completeregistration/CompleteRegistrationScreen.kt index 6332a91cb2..a63b264384 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/completeregistration/CompleteRegistrationScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/completeregistration/CompleteRegistrationScreen.kt @@ -40,6 +40,7 @@ import com.bitwarden.ui.platform.base.util.standardHorizontalMargin 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.theme.BitwardenTheme import com.bitwarden.ui.platform.util.rememberWindowSize import com.x8bit.bitwarden.R @@ -211,7 +212,7 @@ private fun CompleteRegistrationContent( ) Spacer(modifier = Modifier.height(24.dp)) BitwardenActionCardSmall( - actionIcon = rememberVectorPainter(id = R.drawable.ic_question_circle), + actionIcon = rememberVectorPainter(id = BitwardenDrawable.ic_question_circle), actionText = stringResource(id = R.string.what_makes_a_password_strong), callToActionText = stringResource(id = R.string.learn_more), callToActionTextColor = BitwardenTheme.colorScheme.text.interaction, diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/account/BitwardenAccountActionItem.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/account/BitwardenAccountActionItem.kt index 989ad6a91e..7dd04c2ca6 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/account/BitwardenAccountActionItem.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/account/BitwardenAccountActionItem.kt @@ -16,10 +16,10 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.base.util.toSafeOverlayColor 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.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.button.color.bitwardenStandardIconButtonColors /** * Displays an icon representing a Bitwarden account with the user's initials superimposed. diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/account/BitwardenPlaceholderAccountItem.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/account/BitwardenPlaceholderAccountItem.kt index 9951e53dde..6057de5ecb 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/account/BitwardenPlaceholderAccountItem.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/account/BitwardenPlaceholderAccountItem.kt @@ -8,11 +8,11 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.semantics import androidx.compose.ui.semantics.testTag import androidx.compose.ui.tooling.preview.Preview +import com.bitwarden.ui.platform.components.button.color.bitwardenStandardIconButtonColors import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.bitwarden.ui.platform.feature.settings.appearance.model.AppTheme import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.button.color.bitwardenStandardIconButtonColors /** * A placeholder item to be used to represent an account. diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/BitwardenMediumTopAppBar.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/BitwardenMediumTopAppBar.kt index 88caa806cb..9defa51a42 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/BitwardenMediumTopAppBar.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/BitwardenMediumTopAppBar.kt @@ -21,10 +21,10 @@ import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.base.util.bottomDivider import com.bitwarden.ui.platform.base.util.mirrorIfRtl import com.bitwarden.ui.platform.base.util.scrolledContainerBottomDivider +import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R import com.x8bit.bitwarden.ui.platform.components.appbar.color.bitwardenTopAppBarColors -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.x8bit.bitwarden.ui.platform.components.model.TopAppBarDividerStyle /** diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/BitwardenSearchTopAppBar.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/BitwardenSearchTopAppBar.kt index cae11e16aa..42e4d145da 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/BitwardenSearchTopAppBar.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/BitwardenSearchTopAppBar.kt @@ -25,10 +25,10 @@ import androidx.compose.ui.text.input.ImeAction import com.bitwarden.ui.platform.base.util.bottomDivider import com.bitwarden.ui.platform.base.util.mirrorIfRtl import com.bitwarden.ui.platform.base.util.tabNavigation +import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R import com.x8bit.bitwarden.ui.platform.components.appbar.color.bitwardenTopAppBarColors -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.x8bit.bitwarden.ui.platform.components.field.color.bitwardenTextFieldColors /** diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/BitwardenTopAppBar.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/BitwardenTopAppBar.kt index 02244dca54..accd9fd507 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/BitwardenTopAppBar.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/BitwardenTopAppBar.kt @@ -29,11 +29,11 @@ import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.base.util.bottomDivider import com.bitwarden.ui.platform.base.util.mirrorIfRtl import com.bitwarden.ui.platform.base.util.scrolledContainerBottomDivider +import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R import com.x8bit.bitwarden.ui.platform.components.appbar.color.bitwardenTopAppBarColors -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.x8bit.bitwarden.ui.platform.components.model.TopAppBarDividerStyle /** diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/action/BitwardenOverflowActionItem.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/action/BitwardenOverflowActionItem.kt index 9deed7967f..0cc47f9c2e 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/action/BitwardenOverflowActionItem.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/action/BitwardenOverflowActionItem.kt @@ -23,10 +23,10 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.base.util.nullableTestTag +import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R import com.x8bit.bitwarden.ui.platform.components.appbar.color.bitwardenMenuItemColors -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/action/BitwardenSearchActionItem.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/action/BitwardenSearchActionItem.kt index dfd6db614e..33d1f5d495 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/action/BitwardenSearchActionItem.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/action/BitwardenSearchActionItem.kt @@ -5,8 +5,8 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag import androidx.compose.ui.tooling.preview.Preview +import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton /** * Represents the Bitwarden search action item. diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenFilledButton.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenFilledButton.kt index 18bbb1d3ff..3e607356c0 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenFilledButton.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenFilledButton.kt @@ -17,8 +17,8 @@ import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.base.util.cardStyle 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.theme.BitwardenTheme -import com.x8bit.bitwarden.R import com.x8bit.bitwarden.ui.platform.components.button.color.bitwardenFilledButtonColors /** @@ -85,7 +85,7 @@ private fun BitwardenFilledButton_preview() { BitwardenFilledButton( label = "Label", onClick = {}, - icon = rememberVectorPainter(id = R.drawable.ic_question_circle), + icon = rememberVectorPainter(id = BitwardenDrawable.ic_question_circle), isEnabled = true, ) BitwardenFilledButton( @@ -97,7 +97,7 @@ private fun BitwardenFilledButton_preview() { BitwardenFilledButton( label = "Label", onClick = {}, - icon = rememberVectorPainter(id = R.drawable.ic_question_circle), + icon = rememberVectorPainter(id = BitwardenDrawable.ic_question_circle), isEnabled = false, ) } diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenFilledErrorButton.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenFilledErrorButton.kt index d3f06efc67..95153cd290 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenFilledErrorButton.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenFilledErrorButton.kt @@ -7,7 +7,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.tooling.preview.Preview import com.bitwarden.ui.platform.components.util.rememberVectorPainter -import com.x8bit.bitwarden.R +import com.bitwarden.ui.platform.resource.BitwardenDrawable import com.x8bit.bitwarden.ui.platform.components.button.color.bitwardenFilledErrorButtonColors /** @@ -50,7 +50,7 @@ private fun BitwardenErrorButton_preview() { BitwardenFilledErrorButton( label = "Label", onClick = {}, - icon = rememberVectorPainter(id = R.drawable.ic_question_circle), + icon = rememberVectorPainter(id = BitwardenDrawable.ic_question_circle), isEnabled = true, ) BitwardenFilledErrorButton( @@ -62,7 +62,7 @@ private fun BitwardenErrorButton_preview() { BitwardenFilledErrorButton( label = "Label", onClick = {}, - icon = rememberVectorPainter(id = R.drawable.ic_question_circle), + icon = rememberVectorPainter(id = BitwardenDrawable.ic_question_circle), isEnabled = false, ) } diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenOutlinedButton.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenOutlinedButton.kt index fa8f37b00c..226b495d41 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenOutlinedButton.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenOutlinedButton.kt @@ -20,8 +20,8 @@ import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.base.util.cardStyle 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.theme.BitwardenTheme -import com.x8bit.bitwarden.R import com.x8bit.bitwarden.ui.platform.components.button.color.bitwardenOutlinedButtonColors /** @@ -107,7 +107,7 @@ private fun BitwardenOutlinedButton_preview() { BitwardenOutlinedButton( label = "Label", onClick = {}, - icon = rememberVectorPainter(id = R.drawable.ic_question_circle), + icon = rememberVectorPainter(id = BitwardenDrawable.ic_question_circle), isEnabled = true, ) BitwardenOutlinedButton( @@ -119,7 +119,7 @@ private fun BitwardenOutlinedButton_preview() { BitwardenOutlinedButton( label = "Label", onClick = {}, - icon = rememberVectorPainter(id = R.drawable.ic_question_circle), + icon = rememberVectorPainter(id = BitwardenDrawable.ic_question_circle), isEnabled = false, ) } diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenOutlinedErrorButton.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenOutlinedErrorButton.kt index 80f51e954f..688bb055cd 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenOutlinedErrorButton.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenOutlinedErrorButton.kt @@ -7,8 +7,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.tooling.preview.Preview import com.bitwarden.ui.platform.components.util.rememberVectorPainter +import com.bitwarden.ui.platform.resource.BitwardenDrawable import com.bitwarden.ui.platform.theme.BitwardenTheme -import com.x8bit.bitwarden.R import com.x8bit.bitwarden.ui.platform.components.button.color.bitwardenOutlinedButtonColors /** @@ -55,7 +55,7 @@ private fun BBitwardenOutlinedErrorButton_preview() { BitwardenOutlinedErrorButton( label = "Label", onClick = {}, - icon = rememberVectorPainter(id = R.drawable.ic_question_circle), + icon = rememberVectorPainter(id = BitwardenDrawable.ic_question_circle), isEnabled = true, ) BitwardenOutlinedErrorButton( @@ -67,7 +67,7 @@ private fun BBitwardenOutlinedErrorButton_preview() { BitwardenOutlinedErrorButton( label = "Label", onClick = {}, - icon = rememberVectorPainter(id = R.drawable.ic_question_circle), + icon = rememberVectorPainter(id = BitwardenDrawable.ic_question_circle), isEnabled = false, ) } diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenTextSelectionButton.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenTextSelectionButton.kt index c82729be89..d376dfa771 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenTextSelectionButton.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenTextSelectionButton.kt @@ -29,6 +29,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.base.util.cardStyle import com.bitwarden.ui.platform.base.util.nullableTestTag +import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.bitwarden.ui.platform.theme.BitwardenTheme diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/card/BitwardenActionCard.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/card/BitwardenActionCard.kt index 862db16ea6..92a37a59a5 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/card/BitwardenActionCard.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/card/BitwardenActionCard.kt @@ -19,12 +19,12 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview 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.theme.BitwardenTheme import com.x8bit.bitwarden.R import com.x8bit.bitwarden.ui.platform.components.badge.NotificationBadge import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledButton -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.x8bit.bitwarden.ui.platform.components.card.color.bitwardenCardColors /** diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/coachmark/CoachMarkContainer.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/coachmark/CoachMarkContainer.kt index ef3e03dd4a..18b6858ae8 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/coachmark/CoachMarkContainer.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/coachmark/CoachMarkContainer.kt @@ -31,10 +31,10 @@ import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview 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.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.x8bit.bitwarden.ui.platform.components.coachmark.model.CoachMarkHighlightShape import com.x8bit.bitwarden.ui.platform.components.text.BitwardenClickableText import kotlinx.coroutines.launch diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/dialog/BitwardenTimePickerDialog.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/dialog/BitwardenTimePickerDialog.kt index abaef003ea..867d488b7c 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/dialog/BitwardenTimePickerDialog.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/dialog/BitwardenTimePickerDialog.kt @@ -31,9 +31,9 @@ import androidx.compose.ui.semantics.testTagsAsResourceId import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties +import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.x8bit.bitwarden.ui.platform.components.button.BitwardenTextButton /** diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/dropdown/EnvironmentSelector.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/dropdown/EnvironmentSelector.kt index b7163998ed..55be8f8844 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/dropdown/EnvironmentSelector.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/dropdown/EnvironmentSelector.kt @@ -21,10 +21,10 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp 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.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton 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 diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/field/BitwardenPasswordField.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/field/BitwardenPasswordField.kt index 3f4ef5f9cb..08df21e1c7 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/field/BitwardenPasswordField.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/field/BitwardenPasswordField.kt @@ -41,10 +41,10 @@ import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.base.util.cardStyle import com.bitwarden.ui.platform.base.util.nullableTestTag import com.bitwarden.ui.platform.base.util.tabNavigation +import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.x8bit.bitwarden.ui.platform.components.divider.BitwardenHorizontalDivider import com.x8bit.bitwarden.ui.platform.components.field.color.bitwardenTextFieldColors import com.x8bit.bitwarden.ui.platform.components.field.toolbar.BitwardenCutCopyTextToolbar diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/field/BitwardenTextField.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/field/BitwardenTextField.kt index 6db1078c3f..1e202bf7dd 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/field/BitwardenTextField.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/field/BitwardenTextField.kt @@ -54,11 +54,11 @@ import com.bitwarden.ui.platform.base.util.cardStyle import com.bitwarden.ui.platform.base.util.nullableTestTag import com.bitwarden.ui.platform.base.util.toPx import com.bitwarden.ui.platform.base.util.withLineBreaksAtWidth +import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R import com.x8bit.bitwarden.ui.platform.components.appbar.color.bitwardenMenuItemColors -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.x8bit.bitwarden.ui.platform.components.divider.BitwardenHorizontalDivider import com.x8bit.bitwarden.ui.platform.components.field.color.bitwardenTextFieldColors import com.x8bit.bitwarden.ui.platform.components.field.toolbar.BitwardenCutCopyTextToolbar diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/listitem/BitwardenListItem.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/listitem/BitwardenListItem.kt index 6fdebe6c57..41f616accc 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/listitem/BitwardenListItem.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/listitem/BitwardenListItem.kt @@ -24,10 +24,10 @@ import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.base.util.cardStyle import com.bitwarden.ui.platform.base.util.nullableTestTag import com.bitwarden.ui.platform.base.util.orNullIfBlank +import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenSelectionDialog import com.x8bit.bitwarden.ui.platform.components.dialog.row.BitwardenBasicDialogRow import com.x8bit.bitwarden.ui.platform.components.icon.BitwardenIcon diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/row/BitwardenRowOfActions.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/row/BitwardenRowOfActions.kt index ca8875138f..0296b8ec54 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/row/BitwardenRowOfActions.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/row/BitwardenRowOfActions.kt @@ -10,8 +10,8 @@ import androidx.compose.ui.Modifier 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.theme.BitwardenTheme -import com.x8bit.bitwarden.R /** * A composable function to display a row of actions. @@ -41,12 +41,12 @@ private fun BitwardenRowOfIconButtons_preview() { BitwardenTheme { BitwardenRowOfActions { Icon( - painter = rememberVectorPainter(id = R.drawable.ic_question_circle), + painter = rememberVectorPainter(id = BitwardenDrawable.ic_question_circle), contentDescription = "Icon 1", modifier = Modifier.size(24.dp), ) Icon( - painter = rememberVectorPainter(id = R.drawable.ic_question_circle), + painter = rememberVectorPainter(id = BitwardenDrawable.ic_question_circle), contentDescription = "Icon 2", modifier = Modifier.size(24.dp), ) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/snackbar/BitwardenSnackbar.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/snackbar/BitwardenSnackbar.kt index 118c4c34c8..a216ff9414 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/snackbar/BitwardenSnackbar.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/snackbar/BitwardenSnackbar.kt @@ -25,11 +25,11 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton 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.button.BitwardenOutlinedButton -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.x8bit.bitwarden.ui.platform.components.button.color.bitwardenOutlinedButtonColors /** diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/stepper/BitwardenStepper.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/stepper/BitwardenStepper.kt index 977336aa84..3780e59c00 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/stepper/BitwardenStepper.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/stepper/BitwardenStepper.kt @@ -10,10 +10,10 @@ import androidx.compose.ui.platform.testTag import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.base.util.orNullIfBlank +import com.bitwarden.ui.platform.components.button.BitwardenFilledIconButton import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledIconButton import com.x8bit.bitwarden.ui.platform.components.field.BitwardenTextField import com.x8bit.bitwarden.ui.platform.components.field.color.bitwardenTextFieldColors diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/toggle/BitwardenSwitch.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/toggle/BitwardenSwitch.kt index aaeb27c8a4..5b49147b76 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/toggle/BitwardenSwitch.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/toggle/BitwardenSwitch.kt @@ -31,10 +31,10 @@ import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.base.util.cardStyle import com.bitwarden.ui.platform.base.util.toAnnotatedString +import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.x8bit.bitwarden.ui.platform.components.divider.BitwardenHorizontalDivider import com.x8bit.bitwarden.ui.platform.components.model.TooltipData import com.x8bit.bitwarden.ui.platform.components.row.BitwardenRowOfActions diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/tooltip/BitwardenToolTip.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/tooltip/BitwardenToolTip.kt index c251cf4271..085d6621fd 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/tooltip/BitwardenToolTip.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/tooltip/BitwardenToolTip.kt @@ -19,10 +19,10 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.DpSize 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.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton private val MIN_TOOLTIP_WIDTH = 312.dp diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorScreen.kt index d8c69c511c..3311742c40 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorScreen.kt @@ -41,6 +41,7 @@ import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.LifecycleEventEffect import com.bitwarden.ui.platform.base.util.scrolledContainerBottomDivider import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.bitwarden.ui.platform.theme.BitwardenTheme @@ -54,7 +55,6 @@ import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem import com.x8bit.bitwarden.ui.platform.components.appbar.action.OverflowMenuItemData import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledButton -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.x8bit.bitwarden.ui.platform.components.button.BitwardenTextButton import com.x8bit.bitwarden.ui.platform.components.card.BitwardenActionCard import com.x8bit.bitwarden.ui.platform.components.card.BitwardenInfoCalloutCard diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/generator/passwordhistory/PasswordHistoryListItem.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/generator/passwordhistory/PasswordHistoryListItem.kt index ea1de42613..bedce8dec6 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/generator/passwordhistory/PasswordHistoryListItem.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/generator/passwordhistory/PasswordHistoryListItem.kt @@ -20,10 +20,10 @@ import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.base.util.cardStyle import com.bitwarden.ui.platform.base.util.withLineBreaksAtWidth import com.bitwarden.ui.platform.base.util.withVisualTransformation +import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.x8bit.bitwarden.ui.platform.components.util.nonLetterColorVisualTransformation /** diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditCustomField.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditCustomField.kt index 05079afc8e..b9d7c483cc 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditCustomField.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditCustomField.kt @@ -11,9 +11,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp +import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.components.model.CardStyle import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenSelectionDialog import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenTextEntryDialog import com.x8bit.bitwarden.ui.platform.components.dialog.row.BitwardenBasicDialogRow diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditItemContent.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditItemContent.kt index ffcfebc00f..53cc2036b8 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditItemContent.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditItemContent.kt @@ -17,9 +17,9 @@ import androidx.compose.ui.platform.testTag 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.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.components.model.CardStyle import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.x8bit.bitwarden.ui.platform.components.button.BitwardenTextSelectionButton import com.x8bit.bitwarden.ui.platform.components.card.BitwardenActionCard import com.x8bit.bitwarden.ui.platform.components.card.BitwardenInfoCalloutCard diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditLoginItems.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditLoginItems.kt index 644c4a8770..b1c7fec8da 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditLoginItems.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditLoginItems.kt @@ -21,12 +21,12 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.base.util.cardStyle import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.components.model.CardStyle 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.button.BitwardenStandardIconButton import com.x8bit.bitwarden.ui.platform.components.coachmark.CoachMarkActionText import com.x8bit.bitwarden.ui.platform.components.coachmark.CoachMarkScope import com.x8bit.bitwarden.ui.platform.components.coachmark.model.CoachMarkHighlightShape diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditUriItem.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditUriItem.kt index a2426030cb..b36a4f1067 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditUriItem.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditUriItem.kt @@ -8,9 +8,9 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.stringResource +import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.components.model.CardStyle import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenSelectionDialog import com.x8bit.bitwarden.ui.platform.components.dialog.row.BitwardenBasicDialogRow import com.x8bit.bitwarden.ui.platform.components.dialog.row.BitwardenSelectionRow diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/attachments/AttachmentsContent.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/attachments/AttachmentsContent.kt index 78d81b0ecc..289d2234be 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/attachments/AttachmentsContent.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/attachments/AttachmentsContent.kt @@ -26,11 +26,11 @@ import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.base.util.cardStyle import com.bitwarden.ui.platform.base.util.standardHorizontalMargin import com.bitwarden.ui.platform.base.util.toListItemCardStyle +import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R import com.x8bit.bitwarden.ui.platform.components.button.BitwardenOutlinedButton -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenTwoButtonDialog import com.x8bit.bitwarden.ui.platform.components.header.BitwardenListHeaderText import com.x8bit.bitwarden.ui.vault.feature.attachments.handlers.AttachmentsHandlers diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemAttachmentContent.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemAttachmentContent.kt index ca65371750..520c142e3e 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemAttachmentContent.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemAttachmentContent.kt @@ -18,10 +18,10 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.base.util.cardStyle +import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.x8bit.bitwarden.ui.platform.components.button.BitwardenTextButton import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenTwoButtonDialog diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemCardContent.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemCardContent.kt index d48c1a3392..6dd0da4f07 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemCardContent.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemCardContent.kt @@ -19,10 +19,10 @@ 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.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.x8bit.bitwarden.ui.platform.components.field.BitwardenPasswordField import com.x8bit.bitwarden.ui.platform.components.field.BitwardenTextField import com.x8bit.bitwarden.ui.platform.components.header.BitwardenListHeaderText diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemIdentityContent.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemIdentityContent.kt index 5012d355b5..0182fe98b4 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemIdentityContent.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemIdentityContent.kt @@ -20,10 +20,10 @@ 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.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.x8bit.bitwarden.ui.platform.components.field.BitwardenTextField import com.x8bit.bitwarden.ui.platform.components.header.BitwardenListHeaderText import com.x8bit.bitwarden.ui.platform.components.model.IconData diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemLoginContent.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemLoginContent.kt index a160ac4d8d..a55fdbdc0b 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemLoginContent.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemLoginContent.kt @@ -20,10 +20,10 @@ 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.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.x8bit.bitwarden.ui.platform.components.field.BitwardenHiddenPasswordField import com.x8bit.bitwarden.ui.platform.components.field.BitwardenPasswordField import com.x8bit.bitwarden.ui.platform.components.field.BitwardenTextField diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemSecureNoteContent.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemSecureNoteContent.kt index 1f21a8c3cb..a787cfa202 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemSecureNoteContent.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemSecureNoteContent.kt @@ -22,10 +22,10 @@ import androidx.compose.ui.semantics.semantics import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.base.util.standardHorizontalMargin import com.bitwarden.ui.platform.base.util.toListItemCardStyle +import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.x8bit.bitwarden.ui.platform.components.field.BitwardenTextField import com.x8bit.bitwarden.ui.platform.components.header.BitwardenListHeaderText import com.x8bit.bitwarden.ui.platform.components.model.IconData diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemSshKeyContent.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemSshKeyContent.kt index 6cc6a07faa..215df676c2 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemSshKeyContent.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemSshKeyContent.kt @@ -19,10 +19,10 @@ 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.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.x8bit.bitwarden.ui.platform.components.field.BitwardenPasswordField import com.x8bit.bitwarden.ui.platform.components.field.BitwardenTextField import com.x8bit.bitwarden.ui.platform.components.header.BitwardenListHeaderText diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/component/VaultItemCustomField.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/component/VaultItemCustomField.kt index 5192b7d9fb..22fd83f10a 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/component/VaultItemCustomField.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/component/VaultItemCustomField.kt @@ -4,10 +4,10 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.stringResource +import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.util.asText import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.x8bit.bitwarden.ui.platform.components.field.BitwardenPasswordField import com.x8bit.bitwarden.ui.platform.components.field.BitwardenTextField import com.x8bit.bitwarden.ui.platform.components.model.IconData diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultFilter.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultFilter.kt index ccfbd64fbf..557c059848 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultFilter.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultFilter.kt @@ -26,9 +26,9 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.base.util.scrolledContainerBackground import com.bitwarden.ui.platform.base.util.scrolledContainerBottomDivider +import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenSelectionDialog import com.x8bit.bitwarden.ui.platform.components.dialog.row.BitwardenSelectionRow import com.x8bit.bitwarden.ui.vault.feature.vault.model.VaultFilterType diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/verificationcode/VerificationCodeItem.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/verificationcode/VerificationCodeItem.kt index 4e65eb6ecd..e3f997d884 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/verificationcode/VerificationCodeItem.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/verificationcode/VerificationCodeItem.kt @@ -16,10 +16,10 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.base.util.cardStyle +import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.x8bit.bitwarden.ui.platform.components.icon.BitwardenIcon import com.x8bit.bitwarden.ui.platform.components.indicator.BitwardenCircularCountdownIndicator import com.x8bit.bitwarden.ui.platform.components.model.IconData diff --git a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/button/BitwardenStandardIconButton.kt b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/button/BitwardenStandardIconButton.kt deleted file mode 100644 index 34e77bc782..0000000000 --- a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/button/BitwardenStandardIconButton.kt +++ /dev/null @@ -1,58 +0,0 @@ -package com.bitwarden.authenticator.ui.platform.components.button - -import androidx.compose.material3.FilledIconButton -import androidx.compose.material3.Icon -import androidx.compose.material3.IconButtonColors -import androidx.compose.material3.MaterialTheme -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.semantics.semantics -import androidx.compose.ui.tooling.preview.Preview -import com.bitwarden.authenticator.R -import com.bitwarden.authenticator.ui.platform.components.model.IconResource -import com.bitwarden.ui.platform.components.util.rememberVectorPainter - -/** - * An icon button that displays an icon from the provided [IconResource]. - * - * @param iconRes Icon to display on the button. - * @param onClick Callback for when the icon button is clicked. - * @param isEnabled Whether or not the button should be enabled. - * @param modifier A [Modifier] for the composable. - */ -@Composable -fun BitwardenIconButtonWithResource( - iconRes: IconResource, - onClick: () -> Unit, - modifier: Modifier = Modifier, - isEnabled: Boolean = true, -) { - FilledIconButton( - modifier = modifier.semantics(mergeDescendants = true) {}, - onClick = onClick, - colors = IconButtonColors( - containerColor = MaterialTheme.colorScheme.secondaryContainer, - contentColor = MaterialTheme.colorScheme.onSecondaryContainer, - disabledContainerColor = MaterialTheme.colorScheme.onSurface.copy(alpha = .12f), - disabledContentColor = MaterialTheme.colorScheme.onSecondaryContainer, - ), - enabled = isEnabled, - ) { - Icon( - painter = iconRes.iconPainter, - contentDescription = iconRes.contentDescription, - ) - } -} - -@Preview(showBackground = true) -@Composable -private fun BitwardenIconButtonWithResource_preview() { - BitwardenIconButtonWithResource( - iconRes = IconResource( - iconPainter = rememberVectorPainter(id = R.drawable.ic_tooltip), - contentDescription = "Sample Icon", - ), - onClick = {}, - ) -} diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenFilledIconButton.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/button/BitwardenFilledIconButton.kt similarity index 86% rename from app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenFilledIconButton.kt rename to ui/src/main/kotlin/com/bitwarden/ui/platform/components/button/BitwardenFilledIconButton.kt index ce6582453a..7123bcaadb 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenFilledIconButton.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/button/BitwardenFilledIconButton.kt @@ -1,4 +1,4 @@ -package com.x8bit.bitwarden.ui.platform.components.button +package com.bitwarden.ui.platform.components.button import androidx.annotation.DrawableRes import androidx.compose.material3.FilledIconButton @@ -8,10 +8,10 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.semantics.contentDescription import androidx.compose.ui.semantics.semantics import androidx.compose.ui.tooling.preview.Preview +import com.bitwarden.ui.platform.components.button.color.bitwardenFilledIconButtonColors import com.bitwarden.ui.platform.components.util.rememberVectorPainter +import com.bitwarden.ui.platform.resource.BitwardenDrawable import com.bitwarden.ui.platform.theme.BitwardenTheme -import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.button.color.bitwardenFilledIconButtonColors /** * A filled icon button that displays an icon. @@ -50,7 +50,7 @@ fun BitwardenFilledIconButton( private fun BitwardenFilledIconButton_preview() { BitwardenTheme { BitwardenFilledIconButton( - vectorIconRes = R.drawable.ic_question_circle, + vectorIconRes = BitwardenDrawable.ic_question_circle, contentDescription = "Sample Icon", onClick = {}, ) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenStandardIconButton.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/button/BitwardenStandardIconButton.kt similarity index 91% rename from app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenStandardIconButton.kt rename to ui/src/main/kotlin/com/bitwarden/ui/platform/components/button/BitwardenStandardIconButton.kt index f3994fa62b..3c3d0e8ffa 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenStandardIconButton.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/button/BitwardenStandardIconButton.kt @@ -1,4 +1,4 @@ -package com.x8bit.bitwarden.ui.platform.components.button +package com.bitwarden.ui.platform.components.button import androidx.annotation.DrawableRes import androidx.compose.material3.Icon @@ -10,10 +10,10 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.semantics.contentDescription import androidx.compose.ui.semantics.semantics import androidx.compose.ui.tooling.preview.Preview +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.theme.BitwardenTheme -import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.button.color.bitwardenStandardIconButtonColors /** * A standard icon button that displays an icon. @@ -81,7 +81,7 @@ fun BitwardenStandardIconButton( private fun BitwardenStandardIconButton_preview() { BitwardenTheme { BitwardenStandardIconButton( - vectorIconRes = R.drawable.ic_question_circle, + vectorIconRes = BitwardenDrawable.ic_question_circle, contentDescription = "Sample Icon", onClick = {}, ) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenTonalIconButton.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/button/BitwardenTonalIconButton.kt similarity index 86% rename from app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenTonalIconButton.kt rename to ui/src/main/kotlin/com/bitwarden/ui/platform/components/button/BitwardenTonalIconButton.kt index df8a52a269..b03df0155b 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenTonalIconButton.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/button/BitwardenTonalIconButton.kt @@ -1,4 +1,4 @@ -package com.x8bit.bitwarden.ui.platform.components.button +package com.bitwarden.ui.platform.components.button import androidx.annotation.DrawableRes import androidx.compose.material3.FilledIconButton @@ -8,10 +8,10 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.semantics.contentDescription import androidx.compose.ui.semantics.semantics import androidx.compose.ui.tooling.preview.Preview +import com.bitwarden.ui.platform.components.button.color.bitwardenTonalIconButtonColors import com.bitwarden.ui.platform.components.util.rememberVectorPainter +import com.bitwarden.ui.platform.resource.BitwardenDrawable import com.bitwarden.ui.platform.theme.BitwardenTheme -import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.button.color.bitwardenTonalIconButtonColors /** * A tonal icon button that displays an icon. @@ -50,7 +50,7 @@ fun BitwardenTonalIconButton( private fun BitwardenTonalIconButton_preview() { BitwardenTheme { BitwardenTonalIconButton( - vectorIconRes = R.drawable.ic_question_circle, + vectorIconRes = BitwardenDrawable.ic_question_circle, contentDescription = "Sample Icon", onClick = {}, ) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/color/BitwardenIconButtonColors.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/button/color/BitwardenIconButtonColors.kt similarity index 96% rename from app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/color/BitwardenIconButtonColors.kt rename to ui/src/main/kotlin/com/bitwarden/ui/platform/components/button/color/BitwardenIconButtonColors.kt index 9a8c5c3240..e577abe9cc 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/color/BitwardenIconButtonColors.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/button/color/BitwardenIconButtonColors.kt @@ -1,4 +1,4 @@ -package com.x8bit.bitwarden.ui.platform.components.button.color +package com.bitwarden.ui.platform.components.button.color import androidx.compose.material3.IconButtonColors import androidx.compose.runtime.Composable diff --git a/ui/src/main/kotlin/com/bitwarden/ui/platform/resource/BitwardenResources.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/resource/BitwardenResources.kt new file mode 100644 index 0000000000..52895028de --- /dev/null +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/resource/BitwardenResources.kt @@ -0,0 +1,6 @@ +package com.bitwarden.ui.platform.resource + +/** + * A type alias for the drawable resources in the Bitwarden UI module. + */ +typealias BitwardenDrawable = com.bitwarden.ui.R.drawable diff --git a/app/src/main/res/drawable/ic_question_circle.xml b/ui/src/main/res/drawable/ic_question_circle.xml similarity index 100% rename from app/src/main/res/drawable/ic_question_circle.xml rename to ui/src/main/res/drawable/ic_question_circle.xml From 6d976bea4cdc6e7186be1895288a6e6e44d5f1fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Bispo?= Date: Thu, 22 May 2025 23:09:17 +0100 Subject: [PATCH 02/34] [PM-21577] Handle organization limitItemDeletion from sync response. (#5244) --- .../auth/repository/model/Organization.kt | 3 ++ .../util/SyncResponseJsonExtensions.kt | 1 + .../feature/addedit/VaultAddEditViewModel.kt | 14 +++++- .../vault/feature/item/VaultItemViewModel.kt | 10 +++++ .../feature/util/CollectionViewExtensions.kt | 19 +++++++- .../auth/repository/AuthRepositoryTest.kt | 5 +++ .../addedit/VaultAddEditViewModelTest.kt | 37 +++++++++++---- .../util/CollectionViewExtensionsTest.kt | 45 ++++++++++++++++++- .../network/model/SyncResponseJson.kt | 4 ++ .../network/model/SyncResponseProfileUtil.kt | 2 + 10 files changed, 127 insertions(+), 13 deletions(-) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/model/Organization.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/model/Organization.kt index ddbc4fa48f..244be1bfde 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/model/Organization.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/model/Organization.kt @@ -12,6 +12,8 @@ import com.bitwarden.network.model.OrganizationType * @property shouldUseKeyConnector Indicates that the organization uses a key connector. * @property role The user's role in the organization. * @property keyConnectorUrl The key connector domain (if applicable). + * @property userIsClaimedByOrganization Indicates that the user is claimed by the organization. + * @property limitItemDeletion Indicates that the organization limits item deletion. */ data class Organization( val id: String, @@ -21,4 +23,5 @@ data class Organization( val role: OrganizationType, val keyConnectorUrl: String?, val userIsClaimedByOrganization: Boolean, + val limitItemDeletion: Boolean = false, ) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/util/SyncResponseJsonExtensions.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/util/SyncResponseJsonExtensions.kt index f64bfa775e..d889c26451 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/util/SyncResponseJsonExtensions.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/auth/repository/util/SyncResponseJsonExtensions.kt @@ -24,6 +24,7 @@ fun SyncResponseJson.Profile.Organization.toOrganization(): Organization = shouldManageResetPassword = this.permissions.shouldManageResetPassword, keyConnectorUrl = this.keyConnectorUrl, userIsClaimedByOrganization = this.userIsClaimedByOrganization, + limitItemDeletion = this.limitItemDeletion, ) /** diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt index 998f6f63d0..ad7f1cbb5a 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt @@ -1754,9 +1754,21 @@ class VaultAddEditViewModel @Inject constructor( ) { cipherView.permissions?.delete == true } else { + val needsManagePermission = cipherView + ?.organizationId + ?.let { orgId -> + currentAccount + .organizations + .firstOrNull { it.id == orgId } + ?.limitItemDeletion + } + internalVaultData .collectionViewList - .hasDeletePermissionInAtLeastOneCollection(cipherView?.collectionIds) + .hasDeletePermissionInAtLeastOneCollection( + collectionIds = cipherView?.collectionIds, + needsManagePermission = needsManagePermission == true, + ) } val canAssignToCollections = internalVaultData diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModel.kt index d849b74b9a..29e5431c9e 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModel.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModel.kt @@ -138,8 +138,18 @@ class VaultItemViewModel @Inject constructor( ) { cipherView.permissions?.delete == true } else { + val needsManagePermission = cipherView + ?.organizationId + ?.let { orgId -> + userState + ?.activeAccount + ?.organizations + ?.firstOrNull { it.id == orgId } + ?.limitItemDeletion + } collectionsState.data.hasDeletePermissionInAtLeastOneCollection( collectionIds = cipherView?.collectionIds, + needsManagePermission = needsManagePermission == true, ) } diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/util/CollectionViewExtensions.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/util/CollectionViewExtensions.kt index 72bd105d5e..223ffe1946 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/util/CollectionViewExtensions.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/util/CollectionViewExtensions.kt @@ -93,17 +93,32 @@ fun String.toCollectionDisplayName(list: List): String { /** * Checks if the user has delete permission in at least one collection. * - * Deletion is allowed when the item is in any collection that the user has "manage" permission for. + * Deletion is allowed when the item is in any collection that the user has "manage" permission for + * if [needsManagePermission] is true. Otherwise, deletion is allowed when the item is in any with + * manage or edit permission. */ fun List?.hasDeletePermissionInAtLeastOneCollection( collectionIds: List?, + needsManagePermission: Boolean = false, ): Boolean { if (this.isNullOrEmpty() || collectionIds.isNullOrEmpty()) return true return this .any { collectionView -> collectionIds .contains(collectionView.id) - .let { isInCollection -> isInCollection && collectionView.manage } + .let { isInCollection -> + if (!isInCollection) { + return false + } + + if (needsManagePermission) { + return collectionView.manage + } + + return collectionView.manage || + collectionView.permission == CollectionPermission.EDIT || + collectionView.permission == CollectionPermission.EDIT_EXCEPT_PASSWORD + } } } diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryTest.kt index 4ceb6d15f4..d0b747ad10 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryTest.kt @@ -4752,6 +4752,7 @@ class AuthRepositoryTest { every { type } returns OrganizationType.USER every { keyConnectorUrl } returns null every { userIsClaimedByOrganization } returns false + every { limitItemDeletion } returns false }, ) fakeAuthDiskSource.storeOrganizations(userId = USER_ID_1, organizations = organizations) @@ -4782,6 +4783,7 @@ class AuthRepositoryTest { every { type } returns OrganizationType.USER every { keyConnectorUrl } returns url every { userIsClaimedByOrganization } returns false + every { limitItemDeletion } returns false }, ) fakeAuthDiskSource.storeOrganizations(userId = USER_ID_1, organizations = organizations) @@ -4820,6 +4822,7 @@ class AuthRepositoryTest { every { type } returns OrganizationType.USER every { keyConnectorUrl } returns url every { userIsClaimedByOrganization } returns false + every { limitItemDeletion } returns false }, ) fakeAuthDiskSource.storeOrganizations(userId = USER_ID_1, organizations = organizations) @@ -4861,6 +4864,7 @@ class AuthRepositoryTest { every { type } returns OrganizationType.USER every { keyConnectorUrl } returns url every { userIsClaimedByOrganization } returns false + every { limitItemDeletion } returns false }, ) fakeAuthDiskSource.storeOrganizations(userId = USER_ID_1, organizations = organizations) @@ -4901,6 +4905,7 @@ class AuthRepositoryTest { every { type } returns OrganizationType.USER every { keyConnectorUrl } returns url every { userIsClaimedByOrganization } returns false + every { limitItemDeletion } returns false }, ) fakeAuthDiskSource.storeOrganizations(userId = USER_ID_1, organizations = organizations) diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt index 04b26aab1d..0d1bfe2b8f 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt @@ -416,7 +416,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { specialCircumstanceManager.specialCircumstance = SpecialCircumstance.ProviderCreateCredential( createCredentialRequest = createCredentialRequest, - ) + ) val fido2ContentState = createCredentialRequest.toDefaultAddTypeContent( attestationOptions = createMockPasskeyAttestationOptions(number = 1), isIndividualVaultDisabled = false, @@ -1467,8 +1467,28 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { @Suppress("MaxLineLength") @Test - fun `in edit mode, canDelete should be false when cipher is in a collection the user cannot manage`() = + fun `in edit mode, canDelete should be false when cipher is in a collection the user cannot manage and org has limitItemDeletion`() = runTest { + val userState = createUserState().copy( + accounts = listOf( + createUserState().accounts.first().copy( + organizations = listOf( + Organization( + id = "mockOrganizationId-1", + name = "Mock Organization Name 1", + shouldManageResetPassword = false, + shouldUseKeyConnector = false, + role = OrganizationType.ADMIN, + keyConnectorUrl = null, + userIsClaimedByOrganization = false, + limitItemDeletion = true, + ), + ), + ), + ), + ) + mutableUserStateFlow.value = userState + val cipherView = createMockCipherView(1) val vaultAddEditType = VaultAddEditType.EditItem(DEFAULT_EDIT_ITEM_ID) val stateWithName = createVaultAddItemState( @@ -2115,7 +2135,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { specialCircumstanceManager.specialCircumstance = SpecialCircumstance.ProviderCreateCredential( createCredentialRequest = mockFido2CredentialRequest, - ) + ) setupFido2CreateRequest() @@ -2174,7 +2194,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { specialCircumstanceManager.specialCircumstance = SpecialCircumstance.ProviderCreateCredential( createCredentialRequest = mockFidoRequest, - ) + ) setupFido2CreateRequest( mockCallingAppInfo = mockCallingAppInfo, mockCreatePublicKeyCredentialRequest = mockCreatePublicKeyCredentialRequest, @@ -2254,7 +2274,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { specialCircumstanceManager.specialCircumstance = SpecialCircumstance.ProviderCreateCredential( createCredentialRequest = mockFidoRequest, - ) + ) setupFido2CreateRequest() @@ -4501,7 +4521,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { specialCircumstanceManager.specialCircumstance = SpecialCircumstance.ProviderCreateCredential( createCredentialRequest = mockRequest, - ) + ) setupFido2CreateRequest() every { authRepository.activeUserId } returns "activeUserId" coEvery { @@ -4529,7 +4549,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { specialCircumstanceManager.specialCircumstance = SpecialCircumstance.ProviderCreateCredential( createCredentialRequest = mockRequest, - ) + ) every { authRepository.activeUserId } returns "activeUserId" coEvery { bitwardenCredentialManager.registerFido2Credential( @@ -4577,7 +4597,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { specialCircumstanceManager.specialCircumstance = SpecialCircumstance.ProviderCreateCredential( createCredentialRequest = mockRequest, - ) + ) setupFido2CreateRequest() every { authRepository.activeUserId } returns "activeUserId" coEvery { @@ -4780,6 +4800,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { role = OrganizationType.ADMIN, keyConnectorUrl = null, userIsClaimedByOrganization = false, + limitItemDeletion = false, ), ), isBiometricsEnabled = true, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/util/CollectionViewExtensionsTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/util/CollectionViewExtensionsTest.kt index f18ec2e919..a379afe47b 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/util/CollectionViewExtensionsTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/util/CollectionViewExtensionsTest.kt @@ -93,7 +93,7 @@ class CollectionViewExtensionsTest { @Suppress("MaxLineLength") @Test - fun `hasDeletePermissionInAtLeastOneCollection should return false if the user does not have manage permission in at least one collection`() { + fun `hasDeletePermissionInAtLeastOneCollection should return false if the user does not have manage permission in at least one collection and org has limitItemDeletion active`() { val collectionList: List = listOf( createEditCollectionView(number = 1), createEditExceptPasswordsCollectionView(number = 2), @@ -101,7 +101,48 @@ class CollectionViewExtensionsTest { createViewExceptPasswordsCollectionView(number = 4), ) val collectionIds = collectionList.mapNotNull { it.id } - assertFalse(collectionList.hasDeletePermissionInAtLeastOneCollection(collectionIds)) + assertFalse( + collectionList.hasDeletePermissionInAtLeastOneCollection( + collectionIds = collectionIds, + needsManagePermission = true, + ), + ) + } + + @Suppress("MaxLineLength") + @Test + fun `hasDeletePermissionInAtLeastOneCollection should return true if the user does not have manage permission in at least one collection and org has limitItemDeletion off and has edit permissions`() { + val collectionList: List = listOf( + createEditCollectionView(number = 1), + createEditExceptPasswordsCollectionView(number = 2), + createViewCollectionView(number = 3), + createViewExceptPasswordsCollectionView(number = 4), + ) + val collectionIds = collectionList.mapNotNull { it.id } + assertTrue( + collectionList.hasDeletePermissionInAtLeastOneCollection( + collectionIds = collectionIds, + needsManagePermission = false, + ), + ) + } + + @Suppress("MaxLineLength") + @Test + fun `hasDeletePermissionInAtLeastOneCollection should return false if ids don't match any collection`() { + val collectionList: List = listOf( + createEditCollectionView(number = 1), + createEditExceptPasswordsCollectionView(number = 2), + createViewCollectionView(number = 3), + createViewExceptPasswordsCollectionView(number = 4), + ) + val collectionIds = listOf("notInCollectionId") + assertFalse( + collectionList.hasDeletePermissionInAtLeastOneCollection( + collectionIds = collectionIds, + needsManagePermission = false, + ), + ) } @Suppress("MaxLineLength") diff --git a/network/src/main/kotlin/com/bitwarden/network/model/SyncResponseJson.kt b/network/src/main/kotlin/com/bitwarden/network/model/SyncResponseJson.kt index 2469fa199b..150556589c 100644 --- a/network/src/main/kotlin/com/bitwarden/network/model/SyncResponseJson.kt +++ b/network/src/main/kotlin/com/bitwarden/network/model/SyncResponseJson.kt @@ -250,6 +250,7 @@ data class SyncResponseJson( * @property familySponsorshipValidUntil The family sponsorship valid until * of the organization (nullable). * @property status The status of the organization. + * @property limitItemDeletion If the organization limits item deletion. */ @Serializable data class Organization( @@ -347,6 +348,9 @@ data class SyncResponseJson( @SerialName("userIsClaimedByOrganization") val userIsClaimedByOrganization: Boolean = false, + + @SerialName("limitItemDeletion") + val limitItemDeletion: Boolean = false, ) /** diff --git a/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseProfileUtil.kt b/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseProfileUtil.kt index 49c85ed118..527713709b 100644 --- a/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseProfileUtil.kt +++ b/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseProfileUtil.kt @@ -93,6 +93,7 @@ fun createMockOrganization( familySponsorshipValidUntil: ZonedDateTime? = ZonedDateTime.parse("2023-10-27T12:00:00Z"), status: OrganizationStatusType = OrganizationStatusType.ACCEPTED, userIsClaimedByOrganization: Boolean = false, + limitItemDeletion: Boolean = false, ): SyncResponseJson.Profile.Organization = SyncResponseJson.Profile.Organization( shouldUsePolicies = shouldUsePolicies, @@ -126,6 +127,7 @@ fun createMockOrganization( familySponsorshipValidUntil = familySponsorshipValidUntil, status = status, userIsClaimedByOrganization = userIsClaimedByOrganization, + limitItemDeletion = limitItemDeletion, ) /** From 3551e755969dcb0403dab7e73e5501e80c92b01d Mon Sep 17 00:00:00 2001 From: David Perez Date: Thu, 22 May 2025 17:10:46 -0500 Subject: [PATCH 03/34] PM-16705: Improve the node validation logic (#5250) --- .../BitwardenAccessibilityProcessorImpl.kt | 55 +++++++------- .../BitwardenAccessibilityProcessorTest.kt | 71 ++++++++++--------- 2 files changed, 67 insertions(+), 59 deletions(-) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/accessibility/processor/BitwardenAccessibilityProcessorImpl.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/accessibility/processor/BitwardenAccessibilityProcessorImpl.kt index 342c408516..12cadf3448 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/accessibility/processor/BitwardenAccessibilityProcessorImpl.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/accessibility/processor/BitwardenAccessibilityProcessorImpl.kt @@ -33,14 +33,13 @@ class BitwardenAccessibilityProcessorImpl( ) { // Only process the event if the tile was clicked val accessibilityAction = accessibilityAutofillManager.accessibilityAction ?: return - val eventNode = event.source ?: return // Prevent clearing the action until we receive a processable event in case unprocessable // events are still being received from the device. This can happen on slower devices or if // screen transitions are still being performed. - if (!eventNode.shouldProcessEvent(rootAccessibilityNodeInfoProvider)) { - return - } + val eventNode = event + .getValidNode(rootAccessibilityNodeInfoProvider = rootAccessibilityNodeInfoProvider) + ?: return // Clear the action since we are now acting on a supported node. accessibilityAutofillManager.accessibilityAction = null @@ -53,35 +52,43 @@ class BitwardenAccessibilityProcessorImpl( } } - private fun AccessibilityNodeInfo.shouldProcessEvent( + private fun AccessibilityEvent.getValidNode( rootAccessibilityNodeInfoProvider: () -> AccessibilityNodeInfo?, - ): Boolean { + ): AccessibilityNodeInfo? { + val eventNode = this + .source + ?: run { + Timber.w("Accessibility event source is null, attempting root node") + // We only call for the root node once, after verifying that the there is an action + // to be filled. This is because it is a significant performance hit. + // Additionally, we do not use the root node if it does not have the same package + // as the triggering event. + rootAccessibilityNodeInfoProvider()?.takeIf { it.packageName == this.packageName } + } + ?: run { + Timber.w("Root node was also null, skipping this event") + return null + } + // Ignore the event when the phone is inactive. - if (!powerManager.isInteractive) return false + if (!powerManager.isInteractive) return null // We skip if the system package. - if (this.isSystemPackage) { - Timber.d("Skipping autofill for system package $packageName.") - return false + if (eventNode.isSystemPackage) { + Timber.d("Skipping autofill for system package ${eventNode.packageName}.") + return null } // We skip any package that is explicitly blocked. - if (this.shouldSkipPackage) { - Timber.d("Skipping autofill on block-listed package $packageName.") - return false + if (eventNode.shouldSkipPackage) { + Timber.d("Skipping autofill on block-listed package ${eventNode.packageName}.") + return null } // We skip any package that is a launcher. - if (launcherPackageNameManager.launcherPackages.any { it == this.packageName }) { - Timber.d("Skipping autofill on launcher package $packageName.") - return false + if (launcherPackageNameManager.launcherPackages.any { it == eventNode.packageName }) { + Timber.d("Skipping autofill on launcher package ${eventNode.packageName}.") + return null } - // We only call for the root node once, after all other checks have passed, because it is a - // significant performance hit. - if (rootAccessibilityNodeInfoProvider()?.packageName != this.packageName) { - Timber.d("Skipping autofill due to package name mismatch.") - return false - } - - return true + return eventNode } private fun handleAttemptParseUri(rootNode: AccessibilityNodeInfo) { diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/autofill/accessibility/processor/BitwardenAccessibilityProcessorTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/autofill/accessibility/processor/BitwardenAccessibilityProcessorTest.kt index abd1d4f001..1151e9b6da 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/autofill/accessibility/processor/BitwardenAccessibilityProcessorTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/autofill/accessibility/processor/BitwardenAccessibilityProcessorTest.kt @@ -77,7 +77,7 @@ class BitwardenAccessibilityProcessorTest { } @Test - fun `processAccessibilityEvent with null event source should return`() { + fun `processAccessibilityEvent with null event source and root node should return`() { val event = mockk { every { source } returns null } @@ -89,6 +89,41 @@ class BitwardenAccessibilityProcessorTest { } } + @Test + fun `processAccessibilityEvent with null event source and invalid root node should return`() { + val event = mockk { + every { source } returns null + every { packageName } returns "event_package" + } + val rootNode = mockk { + every { packageName } returns "other_package" + } + + bitwardenAccessibilityProcessor.processAccessibilityEvent(event = event) { rootNode } + + verify(exactly = 0) { + powerManager.isInteractive + } + } + + @Test + fun `processAccessibilityEvent with null event source and valid root node should continue`() { + val event = mockk { + every { source } returns null + every { packageName } returns "package" + } + val rootNode = mockk { + every { packageName } returns "package" + } + every { powerManager.isInteractive } returns false + + bitwardenAccessibilityProcessor.processAccessibilityEvent(event = event) { rootNode } + + verify(exactly = 1) { + powerManager.isInteractive + } + } + @Test fun `processAccessibilityEvent with powerManager not interactive should return`() { val event = mockk { @@ -184,40 +219,6 @@ class BitwardenAccessibilityProcessorTest { } } - @Test - fun `processAccessibilityEvent with mismatched package name should return`() { - val testPackageName = "com.android.chrome" - val rootNode = mockk { - every { packageName } returns "other.package.name" - } - val node = mockk { - every { isSystemPackage } returns false - every { shouldSkipPackage } returns false - every { packageName } returns testPackageName - } - val event = mockk { - every { source } returns node - every { packageName } returns testPackageName - } - every { powerManager.isInteractive } returns true - every { launcherPackageNameManager.launcherPackages } returns emptyList() - every { - accessibilityAutofillManager.accessibilityAction - } returns AccessibilityAction.AttemptParseUri - every { accessibilityAutofillManager.accessibilityAction = null } just runs - every { accessibilityParser.parseForUriOrPackageName(rootNode = node) } returns null - - bitwardenAccessibilityProcessor.processAccessibilityEvent(event = event) { rootNode } - - verify(exactly = 1) { - powerManager.isInteractive - node.isSystemPackage - node.shouldSkipPackage - launcherPackageNameManager.launcherPackages - accessibilityAutofillManager.accessibilityAction - } - } - @Test fun `processAccessibilityEvent with AttemptParseUri and a invalid uri should show a toast`() { val testPackageName = "com.android.chrome" From 1a091e198c0ebdafb241476d288799b1ee3f2918 Mon Sep 17 00:00:00 2001 From: "bw-ghapp[bot]" <178206702+bw-ghapp[bot]@users.noreply.github.com> Date: Fri, 23 May 2025 11:05:23 -0500 Subject: [PATCH 04/34] Autosync Crowdin Translations (#5252) Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com> --- app/src/main/res/values-af-rZA/strings.xml | 5 +- app/src/main/res/values-ar-rSA/strings.xml | 39 ++-- app/src/main/res/values-az-rAZ/strings.xml | 5 +- app/src/main/res/values-be-rBY/strings.xml | 5 +- app/src/main/res/values-bg-rBG/strings.xml | 5 +- app/src/main/res/values-bn-rBD/strings.xml | 5 +- app/src/main/res/values-bs-rBA/strings.xml | 5 +- app/src/main/res/values-ca-rES/strings.xml | 5 +- app/src/main/res/values-cs-rCZ/strings.xml | 7 +- app/src/main/res/values-cy-rGB/strings.xml | 5 +- app/src/main/res/values-da-rDK/strings.xml | 5 +- app/src/main/res/values-de-rDE/strings.xml | 11 +- app/src/main/res/values-el-rGR/strings.xml | 5 +- app/src/main/res/values-en-rGB/strings.xml | 5 +- app/src/main/res/values-en-rIN/strings.xml | 5 +- app/src/main/res/values-es-rES/strings.xml | 209 ++++++++++---------- app/src/main/res/values-et-rEE/strings.xml | 5 +- app/src/main/res/values-eu-rES/strings.xml | 5 +- app/src/main/res/values-fa-rIR/strings.xml | 127 ++++++------ app/src/main/res/values-fi-rFI/strings.xml | 13 +- app/src/main/res/values-fil-rPH/strings.xml | 5 +- app/src/main/res/values-fr-rFR/strings.xml | 5 +- app/src/main/res/values-gl-rES/strings.xml | 5 +- app/src/main/res/values-hi-rIN/strings.xml | 5 +- app/src/main/res/values-hr-rHR/strings.xml | 5 +- app/src/main/res/values-hu-rHU/strings.xml | 9 +- app/src/main/res/values-in-rID/strings.xml | 5 +- app/src/main/res/values-it-rIT/strings.xml | 109 +++++----- app/src/main/res/values-iw-rIL/strings.xml | 5 +- app/src/main/res/values-ja-rJP/strings.xml | 5 +- app/src/main/res/values-ka-rGE/strings.xml | 5 +- app/src/main/res/values-kn-rIN/strings.xml | 5 +- app/src/main/res/values-ko-rKR/strings.xml | 5 +- app/src/main/res/values-lt-rLT/strings.xml | 5 +- app/src/main/res/values-lv-rLV/strings.xml | 5 +- app/src/main/res/values-ml-rIN/strings.xml | 5 +- app/src/main/res/values-mr-rIN/strings.xml | 5 +- app/src/main/res/values-my-rMM/strings.xml | 5 +- app/src/main/res/values-nb-rNO/strings.xml | 5 +- app/src/main/res/values-ne-rNP/strings.xml | 5 +- app/src/main/res/values-nl-rNL/strings.xml | 5 +- app/src/main/res/values-nn-rNO/strings.xml | 5 +- app/src/main/res/values-or-rIN/strings.xml | 5 +- app/src/main/res/values-pl-rPL/strings.xml | 5 +- app/src/main/res/values-pt-rBR/strings.xml | 17 +- app/src/main/res/values-pt-rPT/strings.xml | 5 +- app/src/main/res/values-ro-rRO/strings.xml | 5 +- app/src/main/res/values-ru-rRU/strings.xml | 19 +- app/src/main/res/values-si-rLK/strings.xml | 5 +- app/src/main/res/values-sk-rSK/strings.xml | 5 +- app/src/main/res/values-sl-rSI/strings.xml | 5 +- app/src/main/res/values-sr-rSP/strings.xml | 19 +- app/src/main/res/values-sv-rSE/strings.xml | 5 +- app/src/main/res/values-ta-rIN/strings.xml | 5 +- app/src/main/res/values-te-rIN/strings.xml | 5 +- app/src/main/res/values-th-rTH/strings.xml | 5 +- app/src/main/res/values-tr-rTR/strings.xml | 5 +- app/src/main/res/values-uk-rUA/strings.xml | 5 +- app/src/main/res/values-vi-rVN/strings.xml | 25 +-- app/src/main/res/values-zh-rCN/strings.xml | 7 +- app/src/main/res/values-zh-rTW/strings.xml | 5 +- 61 files changed, 517 insertions(+), 334 deletions(-) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index a9ea5741a7..3a2cc7cb1f 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -642,7 +642,10 @@ Skandering gebeur outomaties. Send-skakel Deursoek Sends Wysig Send - Voeg Send toe + Edit file Send + Edit text Send + New file Send + New text Send Is u seker u wil hierdie Send skrap? Send is geskrap. Send bygewerk. diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index 4187d3a798..f526f95214 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -642,7 +642,10 @@ إرسال رابط بحث عن الإرسالات عدّل الإرسال - إضافة إرسال + Edit file Send + Edit text Send + New file Send + New text Send هل أنت متأكد من أنك تريد حذف هذا الإرسال؟ تم حذف الإرسال. تم تحديث الإرسال. @@ -1256,21 +1259,21 @@ تشغيل مسجل الطيران مسجل الطيران سوف يكون نشطاً حتى %1$s عند %2$s. العودة إلى الإعدادات لإلغاء تنشيط الآن. اذهب إلى الإعدادات - All logs deleted - Log deleted - App settings - Replace existing certificate? - A certificate with this alias \"%s\" already exists. Do you want to replace it?\nReplace the certificate may impact your connection to any environments currently using it. - Replace certificate - Unable to read certificate. - Cannot delete your account - This action cannot be completed because your account is owned by an organization. Contact your organization administrator for additional details. - This account will soon be deleted. Log in at %1$s to continue using Bitwarden. - View file Send - View text Send - Delete send - Missing Send re-sync your vault - Dynamic colors - Apply dynamic colors based on your wallpaper - Dynamic colors uses the system colors and may not meet all accessibility guidelines. + تم حذف جميع السجلات + تم حذف السجل + إعدادات التطبيق + استبدال الشهادة الحالية؟ + توجد شهادة بهذا الاسم المستعار \"%s\" موجودة بالفعل. هل تريد استبدالها؟ \nقد يؤثر استبدال الشهادة على اتصالك بأي بيئات تستخدمها حالياً. + استبدال الشهادة + غير قادر على قراءة الشهادة. + لا يمكن حذف حسابك + لا يمكن إكمال هذا الإجراء لأن حسابك مملوك من قبل منظمة. اتصل بمسؤول مؤسستك للحصول على تفاصيل إضافية. + سيتم حذف هذا الحساب قريباً. سجل الدخول على %1$s لمتابعة استخدام Bitwarden. + عرض مِلَفّ الإرسال + عرض إرسال النص + حذف الإرسال + مفقود أرسل إعادة مزامنة المخزن الخاص بك + الألوان الديناميكية + تطبيق الألوان الديناميكية استناداً إلى الخلفية الخاصة بك + الألوان الديناميكية تستخدم ألوان النظام وقد لا تفي بجميع المبادئ التوجيهية المتعلقة بإمكانية الوصول. diff --git a/app/src/main/res/values-az-rAZ/strings.xml b/app/src/main/res/values-az-rAZ/strings.xml index a04b3d5e08..b272b26014 100644 --- a/app/src/main/res/values-az-rAZ/strings.xml +++ b/app/src/main/res/values-az-rAZ/strings.xml @@ -642,7 +642,10 @@ Skan prosesi avtomatik baş tutacaq. \"Send\" bağlantısı \"Send\"ləri axtar \"Send\"ə düzəliş et - \"Send\" əlavə et + Send faylına düzəliş et + Send mətninə düzəliş et + Yeni Send faylı + Yeni Send mətni Bu \"Send\"i silmək istədiyinizə əminsiniz? \"Send\" silindi. \"Send\" güncəlləndi. diff --git a/app/src/main/res/values-be-rBY/strings.xml b/app/src/main/res/values-be-rBY/strings.xml index 5967de0e29..f7127d2300 100644 --- a/app/src/main/res/values-be-rBY/strings.xml +++ b/app/src/main/res/values-be-rBY/strings.xml @@ -641,7 +641,10 @@ Спасылка на Send Пошук у Send\'ах Рэдагаваць Send - Дадаць Send + Edit file Send + Edit text Send + New file Send + New text Send Вы сапраўды хочаце выдаліць гэты Send? Send быў выдалены. Send абноўлены. diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml index 0a8db8be8e..94dd520970 100644 --- a/app/src/main/res/values-bg-rBG/strings.xml +++ b/app/src/main/res/values-bg-rBG/strings.xml @@ -642,7 +642,10 @@ Изпращане на връзката Търсене в изпратените Редактиране на изпращане - Добавяне на изпращане + Редактиране на файловото Изпращане + Редактиране на текстовото Изпращане + Ново файлово Изпращане + Ново текстово Изпращане Сигурни ли сте, че искате да изтриете това изпращане? Изпратеното е изтрито. Изпратеното е редактирано. diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml index 05bb6a5251..6e4a645483 100644 --- a/app/src/main/res/values-bn-rBD/strings.xml +++ b/app/src/main/res/values-bn-rBD/strings.xml @@ -642,7 +642,10 @@ Scanning will happen automatically. Send link Search Sends Edit Send - New Send + Edit file Send + Edit text Send + New file Send + New text Send Are you sure you want to delete this Send? Send deleted Send saved diff --git a/app/src/main/res/values-bs-rBA/strings.xml b/app/src/main/res/values-bs-rBA/strings.xml index 78fdbc3f6c..5628667bdb 100644 --- a/app/src/main/res/values-bs-rBA/strings.xml +++ b/app/src/main/res/values-bs-rBA/strings.xml @@ -642,7 +642,10 @@ Skeniranje će biti izvršeno automatski. Link od Send-a Pretraži Send-ove Uredi Send - Dodaj Send + Edit file Send + Edit text Send + New file Send + New text Send Sigurno želiš izbrisati ovaj Send? Send izbrisan. Send ažuriran. diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index 78e4c5510c..58bb2b063e 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -642,7 +642,10 @@ L\'escaneig es farà automàticament. Enllaç Send Cerca Sends Edita Send - Afig Send + Edit file Send + Edit text Send + New file Send + New text Send Esteu segur que voleu suprimir aquest Send? S\'ha suprimit el Send. S\'ha guardat el Send diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 49ee597a91..15fbf23921 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -627,7 +627,7 @@ Načtení proběhne automaticky. Maximální počet přístupů Je-li nastaveno, uživatelé již nebudou mít přístup k tomuto Send, jakmile bude dosaženo maximálního počtu přístupů. Dosažen maximální počet přístupů - Aktuální počet přístupů + Aktuální počet přístupů: %s Nové heslo Vyžadovat totot heslo pro přístup k tomuto Send. Odebrat heslo @@ -642,7 +642,10 @@ Načtení proběhne automaticky. Odkaz tohoto Send Prohledat Sends Upravit Send - Nový Send + Upravit soubor ze Send + Upravit text ze Send + Odeslat Send se soubory + Odeslat textový Send Opravdu chcete smazat tento Send? Send byl smazán Send byl uložen diff --git a/app/src/main/res/values-cy-rGB/strings.xml b/app/src/main/res/values-cy-rGB/strings.xml index 1352228049..821711b7db 100644 --- a/app/src/main/res/values-cy-rGB/strings.xml +++ b/app/src/main/res/values-cy-rGB/strings.xml @@ -642,7 +642,10 @@ Scanning will happen automatically. Send link Search Sends Edit Send - Send newydd + Edit file Send + Edit text Send + New file Send + New text Send Are you sure you want to delete this Send? Send deleted Send saved diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index 4dfd2b68aa..935680418d 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -642,7 +642,10 @@ Skanning vil ske automatisk. Send link Søg i Sends Redigér Send - Ny Send + Edit file Send + Edit text Send + New file Send + New text Send Sikker på, at denne Send skal slettes? Send slettet Send gemt diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 62150d5838..626e9bd6a2 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -627,7 +627,7 @@ Das Scannen erfolgt automatisch. Maximale Zugriffsanzahl Falls aktiviert, können Benutzer nicht mehr auf dieses Send zugreifen, sobald die maximale Zugriffsanzahl erreicht ist. Maximale Zugriffsanzahl erreicht - Aktuelle Zugriffsanzahl + Aktuelle Zugriffsanzahl: %s Neues Passwort Optional ein Passwort verlangen, damit Benutzer auf dieses Send zugreifen können. Passwort entfernen @@ -642,7 +642,10 @@ Das Scannen erfolgt automatisch. Send-Link Sends suchen Send bearbeiten - Neues Send + Datei-Send bearbeiten + Text-Send bearbeiten + Neues Datei-Send + Neues Text-Send Bist du sicher, dass du dieses Send löschen möchtest? Send gelöscht Send gespeichert @@ -1073,7 +1076,7 @@ Möchtest du zu diesem Konto wechseln? Speicher und schütze deine Daten Der Tresor schützt mehr als nur Passwörter. Speicher hier sicher Zugangsdaten, Ausweise, Karten und Notizen. Neue Zugangsdaten - Teile Dateien und Daten sicher mit jedem auf jeder Plattform. Deine Informationen bleiben End-zu-Ende-Verschlüsselt, während die Verbreitung begrenzt wird. + Teile Dateien und Daten sicher mit jedem auf jeder Plattform. Deine Informationen bleiben Ende-zu-Ende-Verschlüsselt, während die Verbreitung begrenzt wird. Sensible Informationen sicher versenden Gespeicherte Zugangsdaten importieren Verwende einen Computer, um Zugangsdaten von einem bestehenden Passwort-Manager zu importieren @@ -1268,7 +1271,7 @@ Möchtest du zu diesem Konto wechseln? Datei-Send anzeigen Text-Send anzeigen Send löschen - Missing Send re-sync your vault + Fehlendes Send. Synchronisiere deinen Tresor erneut Dynamische Farben Dynamische Farben auf Basis deines Hintergrunds anwenden Dynamische Farben verwenden die Systemfarben und erfüllen möglicherweise nicht alle Richtlinien zur Barrierefreiheit. diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index b8a61f4b29..a569408cec 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -642,7 +642,10 @@ Σύνδεσμος Send Αναζήτηση Sends Επεξεργασία Send - Προσθήκη Send + Edit file Send + Edit text Send + New file Send + New text Send Είστε βέβαιοι ότι θέλετε να διαγράψετε το Send; Το send έχει διαγραφεί. Το send ενημερώθηκε. diff --git a/app/src/main/res/values-en-rGB/strings.xml b/app/src/main/res/values-en-rGB/strings.xml index 0dd9cd02d6..104ab4b81b 100644 --- a/app/src/main/res/values-en-rGB/strings.xml +++ b/app/src/main/res/values-en-rGB/strings.xml @@ -642,7 +642,10 @@ Scanning will happen automatically. Send link Search Sends Edit Send - New Send + Edit file Send + Edit text Send + New file Send + New text Send Are you sure you want to delete this Send? Send deleted Send saved diff --git a/app/src/main/res/values-en-rIN/strings.xml b/app/src/main/res/values-en-rIN/strings.xml index 0718d34134..ddbf86d5e2 100644 --- a/app/src/main/res/values-en-rIN/strings.xml +++ b/app/src/main/res/values-en-rIN/strings.xml @@ -642,7 +642,10 @@ Scanning will happen automatically. Send link Search Sends Edit Send - Add Send + Edit file Send + Edit text Send + New file Send + New text Send Are you sure you want to delete this Send? Send has been deleted. Send updated. diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index e750a04c46..0175a0ed3a 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -40,7 +40,7 @@ Contraseña maestra no válida. Inténtelo de nuevo. PIN no válido. Prueba de nuevo. Iniciar - Log in + Iniciar sesión Identificarse Cerrar sesión ¿Estás seguro de querer cerrar sesión? @@ -49,8 +49,8 @@ Cuenta ya añadida ¿Te gustaría cambiar a esa cuenta ahora? Contraseña maestra - Master password (required) - New master password (required) + Contraseña maestra (requerido) + Nueva contraseña maestra (requerido) Más Mi caja fuerte Autenticador @@ -59,7 +59,7 @@ "Send name (required)" No Notas - Private notes + Notas privadas Aceptar Contraseña Guardar @@ -73,7 +73,7 @@ Gracias Herramientas URI - Website (URI) + Página web (URI) Usar huella dactilar para desbloquear Usuario El campo %1$s es obligatorio. @@ -88,7 +88,7 @@ Si Cuenta ¡Tu nueva cuenta ha sido creada! Ahora puedes acceder. - Your new account has been created! + ¡Tu nueva cuenta ha sido creada! Añadir un elemento Extensión de Aplicación Utiliza el servicio de accesibilidad de Bitwarden para autorellenar entradas entre aplicaciones y sitios web. @@ -106,13 +106,13 @@ Cerrar Continuar Crear cuenta - Create an account + Crear una cuenta Creando cuenta... Editar elemento - Edit login - Edit card - Edit identity - Edit note + Editar inicio de sesión + Editar tarjeta + Editar identidad + Editar nota Edit passkey Habilitar sincronización automática Introduce el correo electrónico de tu cuenta para recibir la pista de tu contraseña maestra. @@ -127,7 +127,7 @@ Pulsa en el icono de Bitwarden del menú para iniciar la extensión. Para activar Bitwarden en Safari y otras aplicaciones, pulsa en el icono \"más\" de la última fila del menú. Favorito - Unfavorite + Eliminar favorito Huella dactilar Generar contraseña Obtener pista de la contraseña maestra @@ -146,7 +146,7 @@ Acción de tiempo de espera de la caja fuerte Cerrar sesión quitará todo el acceso a su caja fuerte y requiere autenticación en línea después del tiempo de espera. ¿Está seguro de que quiere usar este ajuste? Iniciando sesión... - Log in to Bitwarden + Iniciar sesión en Bitwarden Gestionar La confirmación de la contraseña no es correcta. La contraseña maestra es la clave que utilizas para acceder a tu caja fuerte. Es muy importante que no olvides tu contraseña maestra. No hay forma de recuperarla si la olvidas. @@ -162,19 +162,19 @@ No hay favoritos en tu caja fuerte. No hay elementos en tu caja fuerte. No hay elementos en tu caja fuerte para este sitio web o aplicación. Pulsa para añadir uno. - There are no cards in your vault. - New card - There are no logins in your vault. - There are no identities in your vault. - New identity - There are no notes in your vault. - New note + No hay tarjetas en tu caja fuerte. + Nueva tarjeta + No hay inicios de sesión en tu caja fuerte. + No hay identidades en tu caja fuerte. + Nueva identidad + No hay notas en tu caja fuerte. + Nueva nota New passkey - New item - New SSH key + Nuevo elemento + Nueva clave SSH There are no text Sends in your vault. There are no file Sends in your vault. - There are no SSH keys in your vault. + No hay claves SSH en tu caja fuerte. New text Send New file Send No Username @@ -201,7 +201,7 @@ Establecer PIN Introduce un PIN de 4 dígitos para desbloquear la aplicación con él. Información del elemento - Item details + Detalles del elemento Elemento guardado Enviando... Sincronizando... @@ -215,10 +215,10 @@ Validando Código de verificación Ver elemento - View login - View card - View identity - View note + Ver inicio de sesión + Ver tarjeta + Ver identidad + Ver nota View passkey Caja fuerte web de Bitwarden ¿Has perdido la autenticación en dos pasos? @@ -257,8 +257,8 @@ Inicio de sesión no disponible Esta cuenta tiene configuración de inicio de sesión en dos pasos, sin embargo, ninguno de los proveedores de dos pasos configurados son soportados en este dispositivo. Por favor, utilice un dispositivo soportado y/o añada proveedores adicionales que sean mejor soportados entre los dispositivos (como una aplicación de autenticación). Código de recuperación - Remember - Remember email + Recordar + Recordar correo electrónico Reenviar código de verificación por correo electrónico Opciones de inicio de sesión en dos pasos Utilizar otro método de autenticación en dos pasos @@ -300,7 +300,7 @@ El escaneo se realizará automáticamente. URL del servidor de la API Client certificate (mTLS) Certificate used for client authentication. - Use system certificate + Usar certificado del sistema Entorno personalizado Para usuarios avanzados. Puedes especificar la URL base de cada servicio de forma independiente. Las URLs del entorno han sido guardadas. @@ -392,7 +392,7 @@ El escaneo se realizará automáticamente. ¿Que tipo de campo personalizado quieres añadir? Eliminar Nueva URI - Add website + Añadir página web URI %1$s Dominio base Por defecto @@ -427,11 +427,11 @@ El escaneo se realizará automáticamente. Dirección de correo electrónico inválida. Tarjetas Identidades - Identification + Identificación Inicios de sesión Notas seguras - Personal Details - Contact Info + Datos Personales + Información de Contacto Todos los elementos URIs Comprobando contraseña... @@ -606,7 +606,7 @@ El escaneo se realizará automáticamente. Todos los Sends Sends Texto - Text to share + Texto a compartir Texto Al acceder a este Envío, ocultar este texto por defecto Archivo @@ -621,7 +621,7 @@ El escaneo se realizará automáticamente. Eliminación pendiente Caducó Expires at %s - Expires tomorrow + Expira mañana Expires on %s Stops logging on %1$s at %2$s Número máximo de accesos @@ -642,7 +642,10 @@ El escaneo se realizará automáticamente. Enlace Send Buscar Sends Editar Send - Nuevo Send + Edit file Send + Edit text Send + New file Send + New text Send ¿Seguro que quieres eliminar este Send? Send eliminado Send guardado @@ -777,7 +780,7 @@ seleccione Agregar TOTP para almacenar la clave de forma segura Alias de correo reenviado Palabra aleatoria Email (obligatorio) - domain name + nombre de dominio Nombre de dominio (requerido) API key Clave API (requerida) @@ -808,7 +811,7 @@ seleccione Agregar TOTP para almacenar la clave de forma segura Intento de inicio de sesión desde: %1$s ¿Desea cambiar a esta cuenta? - New to Bitwarden? + ¿Nuevo en Bitwarden? Obtener pista de contraseña maestra Iniciando sesión como %1$s en %2$s ¿No eres tú? @@ -854,7 +857,7 @@ seleccione Agregar TOTP para almacenar la clave de forma segura Región de datos Región Su contraseña maestra no cumple con una o más de las políticas de su organización. Para acceder a la caja fuerte, debe actualizar su contraseña maestra ahora. Proceder le desconectará de su sesión actual, requiriendo que vuelva a iniciar sesión. Las sesiones activas en otros dispositivos pueden seguir estando activas durante hasta una hora. - Current master password (required) + Contraseña maestra actual (requerido) Conectado Aprobar con mi otro dispositivo Solicitar aprobación del administrador @@ -981,7 +984,7 @@ seleccione Agregar TOTP para almacenar la clave de forma segura Confirm file password File password Password Protected - This password will be used to export and import this file + Esta contraseña se usará para exportar e importar este archivo Autofill suggestion Continue to complete WebAuthn verification. Launch WebAuthn @@ -989,18 +992,18 @@ seleccione Agregar TOTP para almacenar la clave de forma segura Self-hosted server URL Passkey operation failed because user could not be verified. User verification - Create account on - Create account on: - Follow the instructions in the email sent to %1$s to continue creating your account. - We sent an email to %1$s. - By continuing, you agree to the Terms of Service and Privacy Policy - By activating this switch, you agree to the Terms of Service and Privacy Policy - Set password + Crea una cuenta en + Crea una cuenta en: + Sigue las instrucciones del correo electrónico enviado a %1$s para continuar creando tu cuenta. + Hemos enviado un correo electrónico a %1$s. + Al continuar, aceptas los Términos de Servicio y la Política de Privacidad + Al activar este interruptor, aceptas los Términos de Servicio y la Política de Privacidad + Establecer contraseña Unsubscribe - Check your email - Open email app - Go back - Email verified + Comprueba tu correo electrónico + Abrir aplicación de correo electrónico + Volver + Correo electrónico verificado No email? Go back to edit your email address. Or log in, you may already have an account. Get emails from Bitwarden for announcements, advice, and research opportunities. Unsubscribe at any time. @@ -1019,19 +1022,19 @@ seleccione Agregar TOTP para almacenar la clave de forma segura A secure, memorable password The longer your password, the more difficult it is to hack. The minimum for account creation is 12 characters but if you do 14 characters, the time to crack your password would be centuries! The strongest passwords are usually: - 12 or more characters + 12 o más caracteres Random and complex, using numbers and special characters Totally different from your other passwords Use the generator to create a strong, unique password - Try it out - Account setup + Pruébalo + Configuración de la cuenta Set up unlock - Set up later + Configurar más tarde Set up unlock later? You can return to complete this step anytime from Account Security in Settings. - Confirm + Confirmar Set up biometrics or choose a PIN code to quickly access your vault and Autofill your logins. - Never lose access to your vault + Nunca pierdas acceso a tu caja fuerte The best way to make sure you can always access your vault is to set up safeguards from the start. One of the best ways to create a secure and memorable password is to use a passphrase. \nHere’s how: Create a hint @@ -1039,22 +1042,22 @@ seleccione Agregar TOTP para almacenar la clave de forma segura Write your password down Be careful to keep your written password somewhere secret and safe. Prevent account lockout - Generate master password - Generate + Generar contraseña maestra + Generar Write this password down and keep it somewhere safe. Learn about other ways to prevent account lockout Learn about ways to prevent account lockout Help with server geolocations. - Email address (required) + Dirección de correo electrónico (requerido) "Select the link in the email to verify your email address and continue creating your account. " - Change email address - Next + Cambiar dirección de correo electrónico + Siguiente Bitwarden cannot recover a lost or forgotten master password. Bitwarden cannot reset a lost or forgotten master password. - Choose your master password - Choose a unique and strong password to keep your information safe. + Elige tu contraseña maestra + Elige una contraseña fuerte y única para mantener tu información segura. %1$s characters - Expired link + Enlace expirado Please restart registration or try logging in. You may already have an account. Restart registration Authenticator Sync @@ -1062,7 +1065,7 @@ seleccione Agregar TOTP para almacenar la clave de forma segura There was an issue validating the registration token. Turn on autofill Use autofill to log into your accounts with a single tap. - Turn on later + Activar más tarde Turn on autofill later? You can return to complete this step anytime in Settings. You can now explore everything Bitwarden has to offer and start managing your passwords securely. @@ -1074,7 +1077,7 @@ seleccione Agregar TOTP para almacenar la clave de forma segura Get started Save and protect your data The vault protects more than just passwords. Store secure logins, IDs, cards and notes securely here. - New login + Nuevo inicio de sesión Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure. Send sensitive information, safely Import saved logins @@ -1082,9 +1085,9 @@ seleccione Agregar TOTP para almacenar la clave de forma segura You can return to complete this step anytime in Vault Settings. Import logins later Import logins later? - Do you have a computer available? + ¿Tienes un ordenador disponible? The following instructions will guide you through importing logins from your desktop or laptop computer - Import Logins + Importar Inicios de Sesión From your computer, follow these instructions to export saved passwords from your browser or other password manager. Then, safely import them to Bitwarden. Give your vault a head start Unlock with biometrics requires strong biometric authentication and may not be compatible with all biometric options on this device. @@ -1092,14 +1095,14 @@ seleccione Agregar TOTP para almacenar la clave de forma segura On your computer, log in to your current browser or password manager. Export your passwords. This option is usually found in your settings. Select Import data in the web app, then Done below to finish syncing. - Step 1 of 3 + Paso 1 de 3 Export your saved logins You’ll delete this file after import is complete. On your computer, open a new browser tab and go to %1$s Log in to the Bitwarden web app. - Step 2 of 3 - Log in to Bitwarden - Step 3 of 3 + Paso 2 de 3 + Iniciar sesión en Bitwarden + Paso 3 de 3 Import logins to Bitwarden In the Bitwarden navigation, find the Tools option and select Import data. Fill out the form and import your saved password file. @@ -1107,29 +1110,29 @@ seleccione Agregar TOTP para almacenar la clave de forma segura Need help? Check out import help. Save the exported file somewhere on your computer you can find easily. This is not a recognized Bitwarden server. You may need to check with your provider or update your server. - Syncing logins... + Sincronizando inicios de sesión... Download the browser extension Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. Use the web app Log in at bitwarden.com to easily manage your account and update settings. - Autofill passwords + Autocompletar contraseñas Set up autofill on all your devices to login with a single tap anywhere. Import Successful! Manage your logins from anywhere with Bitwarden tools for web and desktop. - Bitwarden Tools + Herramientas de Bitwarden Got it No logins were imported - Import error + Error de importación Verified SSO Domain Endpoint Logins imported Remember to delete your imported password file from your computer - SSH key - Public key - Private key - SSH keys - Copy public key + Clave SSH + Clave pública + Clave privada + Claves SSH + Copiar clave pública Copy fingerprint - Enable notifications + Habilitar notificaciones Log in quickly and easily across devices Bitwarden can notify you each time you receive a new login request from another device. Skip for now @@ -1154,7 +1157,7 @@ seleccione Agregar TOTP para almacenar la clave de forma segura Put the words together in any order to form your passphrase. Use hyphens, spaces, or leave them as one long word—your choice! Make it yours Add a number or symbol to make it even stronger. Now you have a unique, secure, and memorable passphrase! - "Need some inspiration?" + "¿Necesitas inspiración?" "Check out the passphrase generator" Copied to clipboard. We couldn’t verify the server’s certificate. The certificate chain or proxy settings on your device or your Bitwarden server may not be set up correctly. @@ -1163,10 +1166,10 @@ seleccione Agregar TOTP para almacenar la clave de forma segura Login Credentials Autofill Options Use this button to generate a new unique password. - 1 OF 3 - 2 OF 3 + 1 DE 3 + 2 DE 3 You’ll only need to set up Authenticator Key for logins that require two-factor authentication with a code. The key will continuously generate six-digit codes you can use to log in. - 3 OF 3 + 3 DE 3 You must add a web address to use autofill to access this account. Mutual TLS Single tap passkey creation @@ -1218,10 +1221,10 @@ seleccione Agregar TOTP para almacenar la clave de forma segura Use Chrome autofill integration Use Chrome autofill integration (Beta) Improves login filling for supported websites on Chrome. Once enabled, you’ll be directed to Chrome settings to enable third-party autofill. - Show more + Mostrar más No folder - Show less - Add field + Mostrar menos + Añadir campo %s... Share error details Flight recorder @@ -1236,22 +1239,22 @@ seleccione Agregar TOTP para almacenar la clave de forma segura Logs will be automatically deleted after 30 days. Bitwarden is only able to access your log data when you share it. For details on what is and isn’t logged, visit the\nBitwarden help center. Logging duration - 1 hour - 8 hours - 24 hours - 1 week - Delete all - Share all - Unable to share + 1 hora + 8 horas + 24 horas + 1 semana + Eliminar todo + Compartir todo + No se puede compartir Please try again or select a different log. The log file you are trying to share has been removed. - Delete log - Do you really want to delete this log? - Delete logs + Eliminar registro + ¿Estás seguro de que realmente quieres eliminar este registro? + Eliminar registros Do you really want to delete all recorded logs? Confirm Key Connector domain Key Connector domain: - Organization: + Organización: A master password is no longer required for members of the following organization. Please confirm the domain below with your organization administrator. Please confirm the domain below with your organization administrator.\n\nKey Connector domain:\n%1$s Flight recorder on diff --git a/app/src/main/res/values-et-rEE/strings.xml b/app/src/main/res/values-et-rEE/strings.xml index e031379045..e3283bf022 100644 --- a/app/src/main/res/values-et-rEE/strings.xml +++ b/app/src/main/res/values-et-rEE/strings.xml @@ -642,7 +642,10 @@ Skaneerimine toimub automaatselt. Sendi link Otsi Sende Muuda Sendi - Lisa Send + Edit file Send + Edit text Send + New file Send + New text Send Soovid tõesti selle Sendi kustutada? Send on kustutatud. Send on uuendatud. diff --git a/app/src/main/res/values-eu-rES/strings.xml b/app/src/main/res/values-eu-rES/strings.xml index 556712e9b6..713f2e2154 100644 --- a/app/src/main/res/values-eu-rES/strings.xml +++ b/app/src/main/res/values-eu-rES/strings.xml @@ -641,7 +641,10 @@ Send esteka Send-ak bilatu Editatu Send-a - Gehitu Send-a + Edit file Send + Edit text Send + New file Send + New text Send Ziur al zaude Send hau ezabatu nahi duzula? Send-a ezabatu da. Send-a eguneratu da. diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index 37db53ace5..bb0f9939fb 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -268,7 +268,7 @@ کلید امنیتی YubiKey افزودن پیوست جدید پیوست‌ها - نمی‌توان پرونده را دانلود کرد. + نمی‌توان پرونده را بارگیری کرد. دستگاهتان قادر به باز کردن این نوع از پرونده نیست. در حال بارگیری... حجم این پیوست %1$s است. آیا مایل به بارگیری این پرونده در دستگاهتان هستید؟ @@ -298,9 +298,9 @@ انتقال کلید رمزگذاری مورد نیاز است. لطفاً از طریق گاوصندوق وب وارد شوید تا کلید رمزگذاری خود را به روز کنید. بیشتر بدانید نشانی اینترنتی سرور API - گواهی مشتری (mTLS) - گواهی استفاده شده برای احراز هویت مشتری. - استفاده از گواهی سیستم + گواهی‌نامه مشتری (mTLS) + گواهی‌نامه استفاده شده برای احراز هویت مشتری. + استفاده از گواهی‌نامه سیستم محیط سفارشی برای کاربران پیشرفته. شما می‌توانید نشانی اینترنتی پایه هر سرویس را مستقلاً تعیین کنید. نشانی‌های اینترنتی محیط ذخیره شد. @@ -643,7 +643,10 @@ ارسال پیوند جستجوی ارسال‌ها ویرایش ارسال - ارسال جدید + ویرایش پرونده ارسال + ویرایش متن ارسال + پرونده جدید ارسال + متن جدید ارسال آیا مطمئن هستید که می‌خواهید این ارسال را حذف کنید؟ ارسال حذف شد. ارسال ذخیره شد @@ -660,7 +663,7 @@ درباره ارسال نشانی ایمیلم را از گیرندگان مخفی کن یک یا چند سیاست سازمان بر گزینه‌های ارسال شما تأثیر می‌گذارد. - حساب‌های کاربری رایگان فقط می‌توانند متن را به اشتراک بگذارند. برای استفاده از قابلیت ارسال فایل‌ها، به عضویت پریمیوم نیاز دارید. + حساب‌های کاربری رایگان فقط می‌توانند متن را به اشتراک بگذارند. برای استفاده از قابلیت ارسال پرونده‌ها، به عضویت پریمیوم نیاز دارید. برای استفاده از پرونده‌ها با \"ارسال\" باید ایمیل خود را تأیید کنید. درخواست مجدد کلمه عبور اصلی تأیید کلمه عبور اصلی @@ -857,29 +860,29 @@ کلمه عبور اصلی شما با یک یا چند سیاست سازمان‌تان مطابقت ندارد. برای دسترسی به گاوصندوق، باید همین حالا کلمه عبور اصلی خود را به‌روزرسانی کنید. در صورت ادامه، شما از نشست فعلی خود خارج می‌شوید و باید دوباره وارد سیستم شوید. نشست فعال در دستگاه های دیگر ممکن است تا یک ساعت همچنان فعال باقی بمانند. کلمه عبور اصلی فعلی (الزامی) وارد شده! - تایید با دستگاه دیگرم - درخواست تایید مدیر - تایید با کلمه عبور اصلی - اگر از دستگاه عمومی استفاده میکنید خاموش کنید + تأیید با دستگاه دیگرم + درخواست تأیید مدیر + تأیید با کلمه عبور اصلی + اگر از دستگاه عمومی استفاده می‌کنید خاموش کنید این دستگاه را به خاطر بسپار کلید عبور کلیدهای عبور - درخواست + اپلیکیشن شما نمی‌توانید برنامه کلید عبور را ویرایش کنید زیرا باعث بی اعتباری کلید عبور می‌شود کلید عبور کپی نمی‌شود کلید عبور در مورد شبیه سازی شده کپی نمی‌شود. آیا می‌خواهید به شبیه سازی این مورد ادامه دهید؟ درخواست را کپی کنید برای ورود دو مرحله ای موجود است راهنمای درخواست مجدد کلمه عبور اصلی - بازگشایی ممکن است به دلیل حافظه ناکافی انجام نشود. برای انجام تنظیمات حافظه KDF خود را کاهش دهید یا از بازگشایی زیست‌سنجی استفاده کنید. + باز کردن قفل ممکن است به دلیل حافظه ناکافی انجام نشود. برای انجام تنظیمات حافظه KDF خود را کاهش دهید یا از باز کردن قفل بیومتریک استفاده کنید. کلید API نامعتبر توکن API نامعتبر - تایید مدیر در خواست شد + تأیید مدیر درخواست شد درخواست شما به مدیرتان فرستاده شد. - به محض تایید مطلع خواهید شد. + به محض تأیید مطلع خواهید شد. در ورود مشکلی دارید؟ ورود به عنوان %1$s - اقدام پایان زمان گاوصندوق به خروج تغییر کرد + اقدام پس از پایان زمان گاوصندوق به خروج تغییر کرد پر کردن خودکار را مسدود کنید پر کردن خودکار برای این نشانی‌های اینترنتی ارائه نمی‌شود. نشانی اینترنتی مسدود شده جدید @@ -928,7 +931,7 @@ به تنظیمات دستگاه ادامه دهید؟ با راه‌اندازی ورود دو مرحله‌ای در برنامه وب Bitwarden، حساب کاربری خود را ایمن‌تر کنید. می‌توانید کلمه عبور اصلی خود را در برنامه وب Bitwarden تغییر دهید. - می‌توانید داده‌ها را در %1$s به گاوصندوق خود وارد کنید. + می‌توانید داده‌ها را در %1$s به گاوصندوق خود درون ریزی کنید. درباره نحوه استفاده از Bitwarden در مرکز راهنمایی بیشتر بیاموزید. چیزی را که به دنبالش هستید پیدا نمی‌کنید؟ با پشتیبانی Bitwarden در bitwarden.com تماس بگیرید. سیاست حفظ حریم خصوصی ما را در bitwarden.com بررسی کنید. @@ -940,8 +943,8 @@ تلاش‌ها بیش از حد مجاز بود حساب کاربری از سیستم خارج شد. مجوزهای سازمان شما به‌روزرسانی شد، باید یک کلمه عبور اصلی تنظیم کنید. - سازمان شما از شما می‌خواهد که یک کلمه عبور اصلی تنظیم کنید. - یک گزینه بازگشایی برای پایان زمان مجاز تنظیم کنید. + سازمانتان از شما می‌خواهد که یک کلمه عبور اصلی تنظیم کنید. + یک گزینه باز کردن قفل برای پایان زمان مجاز راه‌اندازی کنید. یک ورود برای ذخیره این کلید عبور انتخاب کنید کلید عبور را به عنوان ورود جدید ذخیره کن ذخیره کلید عبور @@ -952,8 +955,8 @@ ورود دو مرحله ای Duo برای حساب کاربری شما لازم است. مراحل Duo را دنبال کنید تا وارد سیستم شوید. اجرای Duo - تایید لازم است توسط %1$s - تأیید برای این اقدام لازم است. برای ادامه، یک روش باز کردن قفل را در Bitwarden تنظیم کنید. + تأیید لازم است توسط %1$s + تأیید برای این اقدام لازم است. برای ادامه، یک روش باز کردن قفل را در Bitwarden راه‌اندازی کنید. خطا در ایجاد کلید عبور خطا در خواندن کلید عبور مشکلی در ایجاد کلمه عبور برای %1$s وجود داشت. بعداً دوباره امتحان کنید. @@ -961,7 +964,7 @@ در حال تأیید هویت... کلمه‌های عبور حساب کاربری نامشخص - راه‌اندازی تکمیل خودکار + راه‌اندازی پر کردن خودکار به کلمات و کلید‌های عبورتان دسترسی سریع داشته باشید! برای راه‌اندازی پر کردن خودکار کلمه عبور و مدیریت کلید عبور، Bitwarden را به عنوان ارائه‌دهنده ترجیحی خود در تنظیمات iOS تنظیم کنید. ۱. به تنظیمات دستگاه خود بروید > کلمه‌های عبور > گزینه‌های کلمه عبور @@ -1026,13 +1029,13 @@ آن را امتحان کنید راه‌اندازی حساب کاربری راه‌اندازی باز کردن قفل - بعداً تنظیم شود - باز کردن قفل بعداً تنظیم شود؟ + بعداً راه‌اندازی شود + باز کردن قفل بعداً راه‌اندازی شود؟ می‌توانید هر زمان برای تکمیل این مرحله از بخش امنیت حساب کاربری در تنظیمات بازگردید. تأیید راه‌اندازی بیومتریک یا انتخاب کد PIN برای دسترسی سریع به گاوصندوق و پر کردن خودکار ورودهای شما. دسترسی به گاوصندوق خود را هرگز از دست ندهید - بهترین راه برای اطمینان از اینکه همیشه به گاوصندوق خود دسترسی دارید، این است که از همان ابتدا اقدامات امنیتی لازم را تنظیم کنید. + بهترین راه برای اطمینان از اینکه همیشه به گاوصندوق خود دسترسی دارید، این است که از همان ابتدا اقدامات امنیتی لازم را راه‌اندازی کنید. یکی از بهترین روش‌ها برای ساخت یک کلمه عبور امن و قابل یادآوری، استفاده از یک عبارت عبور است. \nدر ادامه نحوه انجام آن آمده است: ایجاد یک یادآور یادآور شما هنگام درخواست از طریق ایمیل برایتان ارسال خواهد شد. @@ -1057,7 +1060,7 @@ پیوند منقضی شد لطفاً ثبت‌نام را دوباره آغاز کنید یا سعی کنید وارد حساب کاربری خود شوید. ممکن است از قبل حساب کاربری داشته باشید. ثبت‌نام را دوباره آغاز کنید - همگام‌سازی احراز هویت + همگام‌سازی احراز کننده هویت اجازه دهید همگام‌سازی احراز هویت انجام شود در تأیید توکن ثبت‌نام مشکلی پیش آمده است. پر کردن خودکار را فعال کنید @@ -1075,40 +1078,40 @@ داده‌های خود را ذخیره و از آن‌ها محافظت کنید گاوصندوق تنها کلمات عبور را محافظت نمی‌کند. ورودهای امن، شناسه‌ها، کارت‌ها و یادداشت‌ها را نیز به صورت امن در اینجا ذخیره کنید. ورود جدید - فایل‌ها و داده‌های خود را به‌صورت امن با هر کسی، در هر پلتفرمی به اشتراک بگذارید. اطلاعات شما در حین اشتراک‌گذاری به‌طور کامل رمزگذاری انتها به انتها باقی خواهد ماند و میزان افشا محدود می‌شود. + پرونده‌ها و داده‌های خود را به‌صورت امن با هر کسی، در هر پلتفرمی به اشتراک بگذارید. اطلاعات شما در حین اشتراک‌گذاری به‌طور کامل رمزگذاری انتها به انتها باقی خواهد ماند و میزان افشا محدود می‌شود. اطلاعات حساس را به‌صورت ایمن ارسال کنید - ورودهای ذخیره‌شده را وارد کنید - از یک کامپیوتر برای وارد کردن ورودهای ذخیره‌شده از یک مدیر کلمه عبور موجود استفاده کنید + ورودهای ذخیره‌شده را درون ریزی کنید + از یک رایانه برای درون ریزی ورودهای ذخیره‌شده از یک مدیر کلمه عبور موجود استفاده کنید می‌توانید هر زمان برای تکمیل این مرحله به بخش تنظیمات گاوصندوق مراجعه کنید. - ورودها را بعداً وارد کنید - ورودها را بعداً وارد می‌کنید؟ - آیا به یک کامپیوتر دسترسی دارید؟ - دستورالعمل‌های زیر شما را در وارد کردن ورودها از رایانه دسکتاپ یا لپ‌تاپ راهنمایی می‌کنند - وارد کردن ورودها - از طریق کامپیوتر خود، این دستورالعمل‌ها را دنبال کنید تا کلمات عبور ذخیره‌شده را از مرورگر یا مدیر کلمه عبور دیگری صادر کنید. سپس آن‌ها را به‌صورت ایمن به Bitwarden وارد نمایید. + ورودها را بعداً درون ریزی کنید + ورودها را بعداً درون ریزی می‌کنید؟ + آیا به یک رایانه دسترسی دارید؟ + دستورالعمل‌های زیر شما را در درون ریزی ورودها از رایانه دسکتاپ یا لپ‌تاپ راهنمایی می‌کنند + درون ریزی ورودها + از طریق رایانه خود، این دستورالعمل‌ها را دنبال کنید تا کلمات عبور ذخیره‌شده را از مرورگر یا مدیر کلمه عبور دیگری برون ریزی کنید. سپس آن‌ها را به‌صورت ایمن به Bitwarden درون ریزی نمایید. به گاوصندوق خود یک شروع قدرتمند بدهید - باز کردن با بیومتریک نیاز به احراز هویت بیومتریک قوی دارد و ممکن است با تمام گزینه‌های بیومتریک موجود در این دستگاه سازگار نباشد. - باز کردن با بیومتریک نیاز به احراز هویت بیومتریک قوی دارد و با گزینه‌های بیومتریک موجود در این دستگاه سازگار نیست. - روی کامپیوتر خود، وارد مرورگر فعلی یا مدیر کلمه عبور خود شوید. + باز کردن قفل با بیومتریک نیاز به احراز هویت بیومتریک قوی دارد و ممکن است با تمام گزینه‌های بیومتریک موجود در این دستگاه سازگار نباشد. + باز کردن قفل با بیومتریک نیاز به احراز هویت بیومتریک قوی دارد و با گزینه‌های بیومتریک موجود در این دستگاه سازگار نیست. + روی رایانه خود، وارد مرورگر فعلی یا مدیر کلمه عبور خود شوید. کلمات عبور خود را برون ریزی کنید. این گزینه معمولاً در بخش تنظیمات یافت می‌شود. - گزینه «وارد کردن داده‌ها» را در اپلیکیشن تحت وب انتخاب کنید، سپس برای اتمام همگام‌سازی روی انجام شد در پایین کلیک کنید. + گزینه «درون ریزی داده‌ها» را در اپلیکیشن تحت وب انتخاب کنید، سپس برای اتمام همگام‌سازی روی انجام شد در پایین کلیک کنید. مرحلهٔ ۱ از ۳ ورودهای ذخیره‌شده را برون ریزی کنید - پس از پایان وارد کردن، این فایل را حذف خواهید کرد. - روی کامپیوتر خود، یک تب جدید در مرورگر باز کنید و به %1$s بروید + پس از اتمام درون ریزی، این پرونده را حذف خواهید کرد. + روی رایانه خود، یک تب جدید در مرورگر باز کنید و به %1$s بروید به اپلیکیشن وب Bitwarden وارد شوید. مرحلهٔ ۲ از ۳ وارد Bitwarden شوید مرحلهٔ ۳ از ۳ - ورودها را به Bitwarden وارد کنید - در ناوبری Bitwarden، گزینه ابزارها را پیدا کرده و وارد کردن داده‌ها را انتخاب کنید - فرم را پر کرده و فایل کلمه عبور ذخیره شده خود را وارد کنید. - برای امنیت خود، حتماً فایل کلمه عبور ذخیره شده خود را حذف کنید. + ورودها را به Bitwarden درون ریزی کنید + در ناوبری Bitwarden، گزینه ابزارها را پیدا کرده و درون ریزی داده‌ها را انتخاب کنید + فرم را پر کرده و پرونده کلمه عبور ذخیره شده خود را درون ریزی کنید. + برای امنیت خود، حتماً پرونده کلمه عبور ذخیره شده خود را حذف کنید. نیاز به کمک دارید؟ به راهنمای درون ریزی مراجعه کنید. - پرونده برون ریزی شده را ذخیره کنید در مکانی روی کامپیوترتان که به‌راحتی بتوانید آن را پیدا کنید. + پرونده برون ریزی شده را ذخیره کنید در مکانی روی رایانه‌تان که به‌راحتی بتوانید آن را پیدا کنید. این یک سرور معتبر Bitwarden نیست. ممکن است لازم باشد با ارائه‌دهنده خود بررسی کنید یا سرور را به‌روزرسانی نمایید. همگام‌سازی ورودها... - افزونه مرورگر را دانلود کنید + افزونه مرورگر را بارگیری کنید به نشانی bitwarden.com/download بروید تا Bitwarden را در مرورگر مورد علاقه‌تان یکپارچه‌سازی کنید و تجربه‌ای روان داشته باشید. از برنامه وب استفاده کنید در bitwarden.com وارد شوید تا به‌راحتی حساب کاربری خود را مدیریت کرده و تنظیمات را به‌روزرسانی کنید. @@ -1122,7 +1125,7 @@ خطای درون ریزی نقطه پایانی دامنه SSO تأیید شده ورودها درون ریزی شد - فراموش نکنید پرونده کلمات عبور درون ریزی شده را از کامپیوتر خود حذف کنید + فراموش نکنید پرونده کلمات عبور درون ریزی شده را از رایانه خود حذف کنید کلید SSH کلید عمومی کلید خصوصی @@ -1136,7 +1139,7 @@ انجام شد %1$s از %2$s کپی نام هویت - کپی سازمان + کپی شرکت کپی شماره کد ملی کپی شماره گذرنامه کپی شماره گواهینامه @@ -1153,7 +1156,7 @@ آن کلمات را کنار هم قرار دهید و ترکیب کنید کلمات را به هر ترتیبی کنار هم بگذارید تا عبارت عبور خود را بسازید. می‌توانید از خط فاصله، فاصله یا به‌صورت یک کلمه بلند استفاده کنید— انتخاب با شماست! آن را به سبک خودتان بسازید - یک عدد یا نماد اضافه کنید تا عبارت عبور شما قوی‌تر شود. حالا یک عبارت عبور منحصربه‌فرد، امن و به‌خاطرسپردنی دارید! + یک عدد یا نماد اضافه کنید تا عبارت عبور شما قوی‌تر شود. حالا یک عبارت عبور منحصربه‌فرد، امن و به‌خاطر سپردنی دارید! "نیاز به کمی الهام دارید؟" "از تولیدکننده عبارت عبور دیدن کنید" کپی در حافظهٔ موقت. @@ -1193,8 +1196,8 @@ خطا در بارگذاری گواهی‌نامه نام مستعار گواهی‌نامه وارد کردن گواهی‌نامه - انتخاب گواهی سیستم - گواهی نصب شد + انتخاب گواهی‌نامه سیستم + گواهی‌نامه نصب شد نصب گواهی‌نامه با خطا مواجه شد انتخاب گواهی‌نامه با خطا مواجه شد نوع گواهی‌نامه پشتیبانی نمی‌شود @@ -1217,17 +1220,17 @@ نشانی اینترنتی سرور خود میزبان استفاده از قابلیت پر کردن خودکار کروم استفاده از قابلیت پرکردن خودکار کروم (نسخه بتا) - پر کردن خودکار ورود به حساب برای وب‌سایت‌های پشتیبانی‌شده در کروم را بهبود می‌بخشد. پس از فعال‌سازی، به تنظیمات کروم هدایت می‌شوید تا پر کردن خودکار از سوی شخص ثالث را فعال کنید. + پر کردن خودکار ورود به حساب برای وب‌سایت‌های پشتیبانی شده در کروم را بهبود می‌بخشد. پس از فعال‌سازی، به تنظیمات کروم هدایت می‌شوید تا پر کردن خودکار از سوی شخص ثالث را فعال کنید. نمایش بیشتر بدون پوشه نمایش کمتر افزودن فیلد %s... اشتراک‌گذاری جزئیات خطا - ضبط‌کننده پرواز - راهنمای ضبط‌کننده پرواز + ضبط‌ کننده پرواز + راهنمای ضبط‌ کننده پرواز مشاهده گزارش‌های ضبط شده - فعال‌سازی ضبط‌کننده پرواز + فعال‌سازی ضبط‌ کننده پرواز گزارش‌های ضبط شده هیچ گزارشی ضبط نشده است مشکلی پیش آمده؟ @@ -1244,9 +1247,9 @@ هم‌رسانی همه امکان اشتراک‌گذاری وجود ندارد لطفاً دوباره تلاش کنید یا گزارش دیگری را انتخاب کنید. - پرونده گزارش که می‌خواهید به اشتراک بگذارید حذف شده است. + پرونده گزارشی که می‌خواهید به اشتراک بگذارید حذف شده است. حذف گزارش - آیا واقعاً می خواهید این گزارش را حذف کنید؟ + آیا واقعاً می‌خواهید این گزارش را حذف کنید؟ حذف گزارش‌ها آیا واقعاً می‌خواهید تمام گزارش‌های ثبت‌شده را حذف کنید؟ تأیید دامنه رابط کلید @@ -1254,14 +1257,14 @@ سازمان: برای اعضای سازمان زیر، کلمه عبور اصلی دیگر لازم نیست. لطفاً دامنه زیر را با مدیر سازمان خود تأیید کنید. لطفاً دامنه زیر را با مدیر سازمان خود تأیید کنید.\n\nدامنه رابط کلید:\n%1$s - ضبط‌کننده پرواز روشن است - ضبط‌کننده پرواز تا %1$s در %2$s فعال خواهد بود. برای غیرفعال کردن آن اکنون به تنظیمات بازگردید. + ضبط‌ کننده پرواز روشن است + ضبط‌ کننده پرواز تا %1$s در %2$s فعال خواهد بود. برای غیرفعال کردن آن اکنون به تنظیمات بازگردید. رفتن به تنظیمات تمامی لاگ‌ها حذف شدند - لاگ حذف شد + گزارش‌ حذف شد تنظیمات برنامه آیا می‌خواهید گواهی‌نامه موجود را جایگزین کنید؟ - گواهی با این نام مستعار \"%s\" از قبل وجود دارد. آیا می‌خواهید آن را جایگزین کنید؟\nتعویض گواهی ممکن است بر اتصال شما به محیط هایی که در حال حاضر از آن استفاده می‌کند تأثیر بگذارد. + یک گواهی‌نامه با این نام مستعار \"%s\" از قبل وجود دارد. آیا می‌خواهید آن را جایگزین کنید؟\nتعویض گواهی ممکن است بر اتصال شما به محیط هایی که در حال حاضر از آن استفاده می‌کند تأثیر بگذارد. جایگزینی گواهی‌نامه ناتوانی در خواندن گواهی‌نامه. قادر به حذف حساب کاربری شما نیستیم @@ -1270,7 +1273,7 @@ مشاهده پرونده جدید مشاهده متن ارسال حذف ارسال - گزینه «ارسال» برای همگام‌سازی مجدد گاوصندوق شما مفقود است + گزینه ارسال برای همگام‌سازی مجدد گاوصندوق شما مفقود است رنگ‌های پویا رنگ‌های پویا را بر اساس کاغذ دیواری خود اعمال کنید رنگ‌های پویا از رنگ‌های سیستم استفاده می‌کنند و ممکن است تمام دستورالعمل‌های دسترسی را رعایت نکنند. diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index 33a0abd5d7..b609ad0139 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -642,7 +642,10 @@ Koodi skannataan automaattisesti. Send-linkki Etsi Sendeistä Muokkaa Sendiä - Uusi Send + Edit file Send + Edit text Send + New file Send + New text Send Haluatko varmasti poistaa Sendin? Send poistettiin Send tallennettiin @@ -1266,11 +1269,11 @@ Haluatko vaihtaa tähän tiliin? Cannot delete your account This action cannot be completed because your account is owned by an organization. Contact your organization administrator for additional details. This account will soon be deleted. Log in at %1$s to continue using Bitwarden. - View file Send - View text Send - Delete send + Näytä tiedosto-Send + Näytä teksti-Send + Poista Send Missing Send re-sync your vault - Dynamic colors + Dynaamiset värit Apply dynamic colors based on your wallpaper Dynamic colors uses the system colors and may not meet all accessibility guidelines. diff --git a/app/src/main/res/values-fil-rPH/strings.xml b/app/src/main/res/values-fil-rPH/strings.xml index c7d30ed19e..2b20c8e3ea 100644 --- a/app/src/main/res/values-fil-rPH/strings.xml +++ b/app/src/main/res/values-fil-rPH/strings.xml @@ -642,7 +642,10 @@ Awtomatikong itong magsa-scan. Link ng Send Maghanap ng Mga Send Baguhin ang Send - Bagong Send + Edit file Send + Edit text Send + New file Send + New text Send Sigurado ka bang gusto mong burahin ang Send na ito? Nabura ang Send Na-save ang Send diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index b4f613004c..dfbaef0f07 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -642,7 +642,10 @@ La numérisation se fera automatiquement. Lien du Send Rechercher dans les Sends Modifier le Send - Ajouter un Send + Edit file Send + Edit text Send + New file Send + New text Send Êtes-vous sûr de vouloir supprimer ce Send ? Send supprimé Send sauvegardé diff --git a/app/src/main/res/values-gl-rES/strings.xml b/app/src/main/res/values-gl-rES/strings.xml index 52d5d770d0..a3b6960819 100644 --- a/app/src/main/res/values-gl-rES/strings.xml +++ b/app/src/main/res/values-gl-rES/strings.xml @@ -642,7 +642,10 @@ Escanearase automaticamente. Ligazón Send Buscar Sends Editar Send - Novo Send + Edit file Send + Edit text Send + New file Send + New text Send Seguro que queres eliminar este Send? Send eliminado Send gardado diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 423fb57cd9..777d460274 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -641,7 +641,10 @@ लिंक सेंड करें सेंड सर्च करें सेंड बदलें - नया सेंड + Edit file Send + Edit text Send + New file Send + New text Send Are you sure you want to delete this Send? सेंड हटाया गया सेंड सेव किया गया diff --git a/app/src/main/res/values-hr-rHR/strings.xml b/app/src/main/res/values-hr-rHR/strings.xml index fd4b37e6cf..b9995e7a07 100644 --- a/app/src/main/res/values-hr-rHR/strings.xml +++ b/app/src/main/res/values-hr-rHR/strings.xml @@ -641,7 +641,10 @@ Veza na Send Pretraži Sendove Uredi Send - Novi Send + Edit file Send + Edit text Send + New file Send + New text Send Sigurno želiš izbrisati ovaj Send? Send izbrisan Send ažuriran diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 96ec5d0fd9..01ea32f983 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -641,7 +641,10 @@ Send hivatkozás Send elemek keresése Send szerkesztése - Send hozzáadása + Send fájl szerkesztése + Send szöveg szerkesztése + Új fájl Send elem + Új szöveges Send elem Biztosan törlésre kerüljön ez a Send elem? A Send elem törlésre került. A Send elem frissítésre került. @@ -1262,8 +1265,8 @@ Szeretnénk átváltani erre a fiókra? Már létezik egy tanúsítvány ilyen álnévvel: \"%s\". Szeretnénk lecserélni?\nA tanúsítvány cseréje hatással lehet a jelenleg azt használó környezetekhez fűződő kapcsolatra. Tanúsítvány csere Nem sikerült beolvasni a tanúsítványt. - Cannot delete your account - This action cannot be completed because your account is owned by an organization. Contact your organization administrator for additional details. + Saját fiókját nem törölheti + Ez a művelet nem végezhető el, mert a fiókja egy szervezethez tartozik. További részletekért vegye fel a kapcsolatot az adminisztrátorral. Ez a fiók hamarosan törlésre kerül. A Bitwarden használatának folytatásához jelentkezzünk be: %1$s. Send fájl megtekintése Szöveges Send elem megtekintése diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index 8725db5e74..390ef9a667 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -642,7 +642,10 @@ Proses pindai akan terjadi secara otomatis. Tautan Send Pencarian Send Edit Send - Tambahkan Send + Edit file Send + Edit text Send + New file Send + New text Send Anda yakin ingin menghapus Send ini? Send telah dihapus. Send diperbarui. diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 5e737b733f..7c32dbaf58 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -623,7 +623,7 @@ La scansione è automatica. Scade alle %s Scade domani Scade il %s - Stops logging on %1$s at %2$s + Ferma il tracciamento su %1$s a %2$s Numero massimo di accessi Il numero di accessi complessivi consentiti al Send. Numero massimo di accessi raggiunto @@ -642,7 +642,10 @@ La scansione è automatica. Link del Send Cerca Send Modifica il Send - Aggiungi un Send + Modifica file Send + Modifica testo Send + Nuovo file Send + Nuovo testo Send Vuoi davvero eliminare questo Send? Send eliminato Send salvato @@ -777,7 +780,7 @@ usa \'Aggiungi TOTP\' per salvarla in modo sicuro. Alias Parola casuale Indirizzo email (necessario) - domain name + nome dominio Nome dominio (necessario) Chiave API Chiave API (necessaria) @@ -1212,7 +1215,7 @@ Vuoi passare a questo account? Operazione parola d\'accesso non riuscita perché la richiesta non è valida. Operazione chiave d\'accesso non riuscita perché i tentativi di verifica dell\'utente sono stati superati. Operazione chiave d\'accesso non riuscita perché nessun elemento è stato selezionato. - Passkey operation failed because the request is unsupported. + Operazione passkey non riuscita perché la richiesta non è supportata. URL server autogestito Usa l\'integrazione di riempimento automatico Chrome Usa l\'integrazione di riempimento automatico Chrome (Beta) @@ -1223,54 +1226,54 @@ Vuoi passare a questo account? Aggiungi campo %s… Condividi dettagli dell\'errore - Flight recorder - Flight recorder help - View recorded logs - Enable flight recorder - Recorded logs - No logs recorded - Experiencing an issue? - Enable temporary logging to collect and inspect logs locally. When enabled, application states and network calls may be logged—never sensitive vault information. - To get started, set a logging duration. Logging 
will automatically turn off after this period, giving you time to capture activity while reproducing 
any issues. + Tracciamento (log) + Come usare il tracciamento + Visualizza tracciamento (log) + Abilita tracciamento (log) + Tracciamenti (log) registrati + Nessun tracciamento (log) registrato + Hai un problema con l\'app Bitwarden? + Abilita il tracciamento (log) temporaneo di stati dell\'app e chiamate di rete, che saranno memorizzati localmente: se richiesti, potrai inviarli all\'assistenza per la risoluzione di problemi. Non saranno memorizzati o inviati dati sensibili né contenuti della cassaforte. + Per iniziare, imposta una durata della registrazione. Questa si disattiverà automaticamente dopo il periodo indicato, dandoti il tempo di acquisire informazioni durante la riproduzione del problema. I file di log verranno automaticamente eliminati dopo 30 giorni. Bitwarden può accedere ai dati dei log solo quando li condividi. - For details on what is and isn’t logged, visit the\nBitwarden help center. - Logging duration - 1 hour - 8 hours - 24 hours - 1 week - Delete all - Share all - Unable to share - Please try again or select a different log. - The log file you are trying to share has been removed. - Delete log - Do you really want to delete this log? - Delete logs - Do you really want to delete all recorded logs? - Confirm Key Connector domain - Key Connector domain: - Organization: - A master password is no longer required for members of the following organization. Please confirm the domain below with your organization administrator. - Please confirm the domain below with your organization administrator.\n\nKey Connector domain:\n%1$s - Flight recorder on - Flight recorder will be active until %1$s at %2$s. Return to settings to deactivate now. - Go to settings - All logs deleted - Log deleted - App settings - Replace existing certificate? - A certificate with this alias \"%s\" already exists. Do you want to replace it?\nReplace the certificate may impact your connection to any environments currently using it. - Replace certificate - Unable to read certificate. - Cannot delete your account - This action cannot be completed because your account is owned by an organization. Contact your organization administrator for additional details. - This account will soon be deleted. Log in at %1$s to continue using Bitwarden. - View file Send - View text Send - Delete send - Missing Send re-sync your vault - Dynamic colors - Apply dynamic colors based on your wallpaper - Dynamic colors uses the system colors and may not meet all accessibility guidelines. + Per maggiori dettagli sui dati memorizzati dal tracciamento, visita il centro di aiuto\nBitwarden. + Durata del tracciamento (log) + 1 ora + 8 ore + 24 ore + 1 settimana + Elimina tutto + Condividi tutto + Impossibile condividere + Riprova o seleziona un\'altra registrazione. + La registrazione che stai cercando di condividere è stata rimossa. + Elimina registrazione (log) + Vuoi davvero eliminare questa registrazione? + Elimina registrazioni + Vuoi davvero eliminare tutte le registrazioni? + Conferma dominio Key Connector + Dominio Key Connector: + Organizzazione: + La password principale non è più richiesta per i membri dell\'organizzazione. Per favore, conferma il dominio qui sotto con l\'amministratore. + Per favore, conferma il dominio qui sotto con l\'amministratore dell\'organizzazione.\n\nDominio Key Connector:\n%1$s + Tracciamento (log) attivo + Il tracciamento (log) sarà attivo fino a %1$s alle %2$s. Torna alle impostazioni se vuoi disattivarlo prima. + Vai alle impostazioni + Tutte le registrazioni (log) sono state eliminate + Registrazione eliminata + Impostazioni app + Vuoi sostituire il certificato esistente? + Esiste già un certificato con l\'alias \"%s\". Vuoi sostituirlo?\nSostituire il certificato potrebbe influire sulla connessione a qualsiasi ambiente che lo utilizza. + Sostituisci certificato + Impossibile leggere il certificato. + Impossibile eliminare l\'account + Non è possibile procedere, perché il tuo account è di proprietà di un\'organizzazione. Contatta l\'amministratore dell\'organizzazione per maggiori dettagli. + Questo account sarà eliminato a breve. Accedi a %1$s per continuare a utilizzare Bitwarden. + Visualizza il file Send + Visualizza il testo Send + Elimina Send + File Send mancante: ri-sincronizza la cassaforte + Colori dinamici + Applica colori dinamici in base allo sfondo + I colori dinamici utilizzano i colori di sistema e potrebbero non soddisfare tutte le linee guida di accessibilità. diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index e69f737922..975899fa41 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -642,7 +642,10 @@ קישור סֵנְד חפש סֵנְדים ערוך סֵנְד - סֵנְד חדש + Edit file Send + Edit text Send + New file Send + New text Send האם אתה בטוח שברצונך למחוק סֵנְד זה? הסֵנְד נמחק סֵנְד נשמר diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 4c90d76862..0194c52fdf 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -642,7 +642,10 @@ Send リンク Send を検索 Send を編集 - Send を追加 + Edit file Send + Edit text Send + New file Send + New text Send この Send を削除してもよろしいですか? Send を削除しました。 Send を更新しました。 diff --git a/app/src/main/res/values-ka-rGE/strings.xml b/app/src/main/res/values-ka-rGE/strings.xml index be702fb43d..77f12bc2f2 100644 --- a/app/src/main/res/values-ka-rGE/strings.xml +++ b/app/src/main/res/values-ka-rGE/strings.xml @@ -642,7 +642,10 @@ Scanning will happen automatically. Send link Search Sends Edit Send - New Send + Edit file Send + Edit text Send + New file Send + New text Send Are you sure you want to delete this Send? Send deleted Send saved diff --git a/app/src/main/res/values-kn-rIN/strings.xml b/app/src/main/res/values-kn-rIN/strings.xml index 7ceac51157..086ef41338 100644 --- a/app/src/main/res/values-kn-rIN/strings.xml +++ b/app/src/main/res/values-kn-rIN/strings.xml @@ -642,7 +642,10 @@ Scanning will happen automatically. ಲಿಂಕ್ ಕಳುಹಿಸಿ ಹುಡುಕಾಟ ಕಳುಹಿಸುತ್ತದೆ ಕಳುಹಿಸು ಸಂಪಾದಿಸಿ - ಕಳುಹಿಸು ಸೇರಿಸಿ + Edit file Send + Edit text Send + New file Send + New text Send ಈ ಕಳುಹಿಸುವಿಕೆಯನ್ನು ಅಳಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ? ಕಳುಹಿಸು ಅಳಿಸಲಾಗಿದೆ. ನವೀಕರಿಸಲಾಗಿದೆ ಕಳುಹಿಸಿ. diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index fe02494a31..a4f8e1b950 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -642,7 +642,10 @@ Send 링크 Send 검색 Send 편집 - Send 추가 + Edit file Send + Edit text Send + New file Send + New text Send 정말 이 Send를 삭제하시겠습니까? Send가 삭제되었습니다. Send 업데이트됨. diff --git a/app/src/main/res/values-lt-rLT/strings.xml b/app/src/main/res/values-lt-rLT/strings.xml index 40d8b1cba9..73fa20ba65 100644 --- a/app/src/main/res/values-lt-rLT/strings.xml +++ b/app/src/main/res/values-lt-rLT/strings.xml @@ -642,7 +642,10 @@ Nuskaitymas vyks automatiškai. Siųsti nuorodą Ieškoti Siuntinių Pakeisti Siuntinį - Naujas Siuntinys + Edit file Send + Edit text Send + New file Send + New text Send Ar tikrai norite ištrinti šį Siuntinį? Siuntinys ištrintas Siuntinys išsaugotas diff --git a/app/src/main/res/values-lv-rLV/strings.xml b/app/src/main/res/values-lv-rLV/strings.xml index 06dacc0b90..a23945c25c 100644 --- a/app/src/main/res/values-lv-rLV/strings.xml +++ b/app/src/main/res/values-lv-rLV/strings.xml @@ -642,7 +642,10 @@ Nolasīšana notiks automātiski. Send saite Meklēt Send Labot Send - Jauns Send + Labot datnes Send + Labot teksta Send + Jauns datnes Send + Jauns teksta Send Vai tiešām izdzēst šo Send? Send izdzēsts Send saglabāts diff --git a/app/src/main/res/values-ml-rIN/strings.xml b/app/src/main/res/values-ml-rIN/strings.xml index 8eb6318dfb..8f4b04d6c8 100644 --- a/app/src/main/res/values-ml-rIN/strings.xml +++ b/app/src/main/res/values-ml-rIN/strings.xml @@ -642,7 +642,10 @@ ലിങ്ക് അയയ്‌ക്കുക Send-കൾ തിരയുക Send തിരുത്തുക - Send ചേർക്കുക + Edit file Send + Edit text Send + New file Send + New text Send ഈ Send ഇല്ലാതാക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ? Send ഇല്ലാതാക്കി Send പുതുക്കി. diff --git a/app/src/main/res/values-mr-rIN/strings.xml b/app/src/main/res/values-mr-rIN/strings.xml index 1f94229442..515f4baeee 100644 --- a/app/src/main/res/values-mr-rIN/strings.xml +++ b/app/src/main/res/values-mr-rIN/strings.xml @@ -642,7 +642,10 @@ Scanning will happen automatically. Send link Search Sends Edit Send - New Send + Edit file Send + Edit text Send + New file Send + New text Send Are you sure you want to delete this Send? Send deleted Send saved diff --git a/app/src/main/res/values-my-rMM/strings.xml b/app/src/main/res/values-my-rMM/strings.xml index be702fb43d..77f12bc2f2 100644 --- a/app/src/main/res/values-my-rMM/strings.xml +++ b/app/src/main/res/values-my-rMM/strings.xml @@ -642,7 +642,10 @@ Scanning will happen automatically. Send link Search Sends Edit Send - New Send + Edit file Send + Edit text Send + New file Send + New text Send Are you sure you want to delete this Send? Send deleted Send saved diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 76981340dd..d2e3557bf1 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -642,7 +642,10 @@ Skanning skjer automatisk. Send lenke Søk i Send-ene Rediger Send - Legg til Send + Edit file Send + Edit text Send + New file Send + New text Send Er du sikker på at du vil slette denne Send-en? Send-en har blitt slettet. Send-en er oppdatert. diff --git a/app/src/main/res/values-ne-rNP/strings.xml b/app/src/main/res/values-ne-rNP/strings.xml index be702fb43d..77f12bc2f2 100644 --- a/app/src/main/res/values-ne-rNP/strings.xml +++ b/app/src/main/res/values-ne-rNP/strings.xml @@ -642,7 +642,10 @@ Scanning will happen automatically. Send link Search Sends Edit Send - New Send + Edit file Send + Edit text Send + New file Send + New text Send Are you sure you want to delete this Send? Send deleted Send saved diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index c49ea00490..d8ea3ad76b 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -642,7 +642,10 @@ Het scannen gebeurt automatisch. Send-link Sends zoeken Send bewerken - Send toevoegen + Send (bestand) bewerken + Send (tekst) bewerken + Nieuwe Send (bestand) + Nieuwe Send (tekst) Weet je zeker dat je deze Send wilt verwijderen? Send is verwijderd. Send bijgewerkt. diff --git a/app/src/main/res/values-nn-rNO/strings.xml b/app/src/main/res/values-nn-rNO/strings.xml index 57d13b7c21..02133e4242 100644 --- a/app/src/main/res/values-nn-rNO/strings.xml +++ b/app/src/main/res/values-nn-rNO/strings.xml @@ -642,7 +642,10 @@ Skanning skjer automatisk. Send-lekk Leita i Send-ane Rediger Send - Legg til Send + Edit file Send + Edit text Send + New file Send + New text Send Er du trygg på at du vil sletta denne Send-en? Send-en er vorten fjerna. Send-en er retta. diff --git a/app/src/main/res/values-or-rIN/strings.xml b/app/src/main/res/values-or-rIN/strings.xml index b4145cdd3f..c0d7c02b10 100644 --- a/app/src/main/res/values-or-rIN/strings.xml +++ b/app/src/main/res/values-or-rIN/strings.xml @@ -642,7 +642,10 @@ Scanning will happen automatically. Send link Search Sends Edit Send - New Send + Edit file Send + Edit text Send + New file Send + New text Send Are you sure you want to delete this Send? Send deleted Send saved diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 0062e0c10e..d5684c939f 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -642,7 +642,10 @@ Skanowanie nastąpi automatycznie. Link wysyłki Szukaj w wysyłkach Edytuj wysyłkę - Nowa wysyłka + Edytuj wysłany plik + Edytuj wysłany tekst + Nowa wysyłka pliku + Nowa wysyłka tekstu Czy na pewno chcesz usunąć tę wysyłkę? Wysyłka została usunięta Wysyłka została zapisana diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index a1ba744144..49bfb99d04 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -642,7 +642,10 @@ A leitura será feita automaticamente. Link do Send Pesquisar Sends Editar Send - Adicionar Send + Edit file Send + Edit text Send + New file Send + New text Send Você tem certeza que deseja excluir este Send? Send excluído Send atualizado @@ -1266,11 +1269,11 @@ Você deseja mudar para esta conta? Não é possível excluir sua conta Esta ação não pode ser concluída porque sua conta pertence a uma organização. Entre em contato com o administrador da sua organização para obter mais detalhes. Esta conta será excluída em breve. Inicie sessão em %1$s para continuar usando o Bitwarden. - View file Send - View text Send - Delete send + Ver Envio de arquivo + Ver Envio de texto + Excluir Envio Missing Send re-sync your vault - Dynamic colors - Apply dynamic colors based on your wallpaper - Dynamic colors uses the system colors and may not meet all accessibility guidelines. + Cores dinâmicas + Aplicar cores dinâmicas com base no seu papel de parede + As cores dinâmicas usam as cores do sistema e podem não atender todas as diretrizes de acessibilidade. diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 042cb85fd2..4d3e83f475 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -642,7 +642,10 @@ A leitura será efetuada automaticamente. Link do Send Procurar Sends Editar Send - Novo Send + Editar Send de ficheiro + Editar Send de texto + Novo Send de ficheiro + Novo Send de texto Tem a certeza de que pretende eliminar este Send? Send eliminado Send guardado diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 7d1be198fc..c42d0e70e5 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -642,7 +642,10 @@ Scanarea se va face automat. Trimitere link Căutare Send-uri Editare Send - Adăugare Send + Edit file Send + Edit text Send + New file Send + New text Send Sigur doriți să ștergeți acest Send? Send-ul a fost șters Send salvat diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index e5663ebdd9..2cc64c2328 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -111,7 +111,7 @@ Изменение элемента Изменить логин Редактировать карту - Редактировать личность + Редактировать личную информацию Редактировать заметку Редактировать passkey Разрешить автоматическую синхронизацию @@ -165,8 +165,8 @@ В вашем хранилище нет карт. Новая карта В вашем хранилище нет логинов. - В вашем хранилище нет личностей. - Новая личность + В вашем хранилище нет личной информации. + Новая личная информация В вашем хранилище нет заметок. Новая заметка Новый passkey @@ -217,7 +217,7 @@ Просмотр элемента Просмотр логина Просмотр карты - Просмотр личности + Просмотр личной информации Просмотр заметки Просмотр passkey Веб-хранилище Bitwarden @@ -317,7 +317,7 @@ Номер Код безопасности Карта - Личность + Личная информация Логин Защищенная заметка Строка адреса 1 @@ -426,7 +426,7 @@ Самый простой способ добавлять новые логины в хранилище - использовать расширение автозаполнения паролей Bitwarden. Дополнительные сведения об использовании расширения автозаполнения паролей Bitwarden находятся в разделе \'Настройки\'. Неверный адрес email. Карты - Личные данные + Личная информация Идентификация Логины Защищенные заметки @@ -642,7 +642,10 @@ Ссылка на Send Поиск Send’ов Изменить Send - Новая Send + Изменить файловую Send + Изменить тестовую Send + Новая файловая Send + Новая текстовая Send Вы действительно хотите удалить эту Send? Send удалена Send сохранена @@ -1007,7 +1010,7 @@ Получайте электронные письма от Bitwarden с анонсами, советами и возможностями для исследований. Отписаться можно в любое время. Получайте советы, объявления и исследования от Bitwarden в свой почтовый ящик. Отписаться можно в любое время. Безопасность, приоритет - Сохраняйте логины, карты и личные данные в своем защищенном хранилище. Bitwarden использует сквозное шифрование, чтобы защитить то, что для вас важно. + Сохраняйте логины, карты и личную информацию в своем защищенном хранилище. Bitwarden использует сквозное шифрование, чтобы защитить то, что для вас важно. Настройте биометрическую разблокировку и автозаполнение, чтобы входить в свои аккаунты, не набирая ни одной буквы. Быстрая и простая авторизация Сделайте авторизацию еще проще diff --git a/app/src/main/res/values-si-rLK/strings.xml b/app/src/main/res/values-si-rLK/strings.xml index 91e57b4bfe..ad46675b7c 100644 --- a/app/src/main/res/values-si-rLK/strings.xml +++ b/app/src/main/res/values-si-rLK/strings.xml @@ -642,7 +642,10 @@ Scanning will happen automatically. Send link Search Sends Edit Send - New Send + Edit file Send + Edit text Send + New file Send + New text Send Are you sure you want to delete this Send? Send deleted Send saved diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index 98a75283fe..afb75c4ada 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -642,7 +642,10 @@ Skenovanie prebehne automaticky. Odkaz na Send Hľadať Sendy Upraviť Send - Pridať Send + Upraviť súborový Send + Upraviť textový Send + Nový súborový Send + Nový textový Send Naozaj chcete odstrániť tento Send? Send bol odstránený. Send bol aktualizovaný. diff --git a/app/src/main/res/values-sl-rSI/strings.xml b/app/src/main/res/values-sl-rSI/strings.xml index e83bf5254e..ccce89f5b3 100644 --- a/app/src/main/res/values-sl-rSI/strings.xml +++ b/app/src/main/res/values-sl-rSI/strings.xml @@ -642,7 +642,10 @@ Scanning will happen automatically. Povezava pošiljke Išči med pošiljkami Uredi pošiljko - Nova pošiljka + Edit file Send + Edit text Send + New file Send + New text Send Ali želite izbrisati to pošiljko? Pošiljka je bila izbrisana. Pošiljka shranjena. diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index a6d6e64d01..3ca6cc01cc 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -642,7 +642,10 @@ Пошаљи повезницу Претражи слања Уреди слање - Додај слање + Уред датотеке Send + Уред текст Send + Нова датотека Send + Нови текст Send Да ли си сигуран да желиш да избришеш ово слање? Слање је избрисано Слање је сачувано @@ -1265,12 +1268,12 @@ Није могуће прочитати сертификат. Није могуће избрисати Ваш налог Ова радња се не може довршити јер је ваш налог у власништву организације. Обратите се администратору своје организације за додатне детаље. - This account will soon be deleted. Log in at %1$s to continue using Bitwarden. - View file Send - View text Send - Delete send + Овај рачун ће ускоро бити избрисан. Пријавити се на %1$s да анставите са употребом Bitwarden-а. + Преглед датотеке Send + Преглед текст Send + Избриши „Send“ Missing Send re-sync your vault - Dynamic colors - Apply dynamic colors based on your wallpaper - Dynamic colors uses the system colors and may not meet all accessibility guidelines. + Динамичке боје + Примените динамичке боје на основу позадине + Динамичне боје користе боје система и не могу да испуне све смернице за приступачност. diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 433a6a81d1..d5cf4e92ef 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -643,7 +643,10 @@ Skanningen sker automatiskt. Send-länk Sök bland Send Redigera Send - Ny Send + Edit file Send + Edit text Send + New file Send + New text Send Är du säker på att du vill radera denna Send? Send har raderats Send har sparats diff --git a/app/src/main/res/values-ta-rIN/strings.xml b/app/src/main/res/values-ta-rIN/strings.xml index 5c84d760ed..832421ce84 100644 --- a/app/src/main/res/values-ta-rIN/strings.xml +++ b/app/src/main/res/values-ta-rIN/strings.xml @@ -642,7 +642,10 @@ Send தொடுப்பு Sends தேடு Send திருத்து - புதிய Send + Edit file Send + Edit text Send + New file Send + New text Send இந்த Send ஐ அழிக்க உறுதியா? Send அழிக்கப்பட்டது Send சேமிக்கப்பட்டது diff --git a/app/src/main/res/values-te-rIN/strings.xml b/app/src/main/res/values-te-rIN/strings.xml index be702fb43d..77f12bc2f2 100644 --- a/app/src/main/res/values-te-rIN/strings.xml +++ b/app/src/main/res/values-te-rIN/strings.xml @@ -642,7 +642,10 @@ Scanning will happen automatically. Send link Search Sends Edit Send - New Send + Edit file Send + Edit text Send + New file Send + New text Send Are you sure you want to delete this Send? Send deleted Send saved diff --git a/app/src/main/res/values-th-rTH/strings.xml b/app/src/main/res/values-th-rTH/strings.xml index c2a347c0ad..f40639e75b 100644 --- a/app/src/main/res/values-th-rTH/strings.xml +++ b/app/src/main/res/values-th-rTH/strings.xml @@ -642,7 +642,10 @@ Scanning will happen automatically. Send link Search Sends Edit Send - New Send + Edit file Send + Edit text Send + New file Send + New text Send Are you sure you want to delete this Send? Send deleted Send saved diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index b0998c8267..5b2a1dc993 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -642,7 +642,10 @@ Kod otomatik olarak taranacaktır. Send bağlantısı Send\'lerde ara Send\'i düzenle - Yeni Send + Send dosyasını düzenle + Send metnini düzenle + Yeni Send dosyası + Yeni Send metni Bu Send\'i silmek istediğinizden emin misiniz? Send silindi Send kaydedildi diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 487238b7c9..b80a4d23f0 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -642,7 +642,10 @@ Посилання на відправлення Шукати відправлення Редагування - Нове відправлення + Edit file Send + Edit text Send + New file Send + New text Send Ви дійсно хочете видалити це відправлення? Відправлення видалено Відправлення збережено diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index c4e773ff5a..cfec59e253 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -56,7 +56,7 @@ Xác thực Tên mục Tên mục (bắt buộc) - "Tên người gửi (bắt buộc)" + "Tên mục Gửi (bắt buộc)" Không Ghi chú Ghi chú riêng @@ -172,11 +172,11 @@ Mã khoá mới Thêm mục Mã SSH mới - Không có mục Gửi Văn bản nào trong kho của bạn. - Không có mục Gửi File nào trong kho của bạn. + Không có văn bản Gửi trong kho của bạn. + Không có tập tin Gửi trong kho của bạn. Không có mã SSH nào trong kho của bạn. - Gửi văn bản - Gửi file + Văn bản Gửi mới + Tập tin Gửi mới Không có tên đăng nhập Thông tin đăng nhập này không có tên người dùng hoặc mật khẩu được định cấu hình. Ok, tôi đã hiểu! @@ -259,7 +259,7 @@ Mã khôi phục Lưu Lưu email - Gửi lại email chứa mã xác nhận + Gửi lại mã Tùy chọn xác minh 2 bước Sử dụng phương pháp xác thực hai lớp khác Không thể gửi email xác minh. Thử lại. @@ -602,7 +602,7 @@ Quá trình quét sẽ diễn ra tự động. Do chính sách của tổ chức, bạn không được lưu trữ mục trong kho mật khẩu cá nhân. Chính sách của tổ chức đang ảnh hưởng đến các tùy chọn quyền sở hữu của bạn. Gửi - Chi tiết gửi + Chi tiết Gửi Tất cả mục Gửi Gửi Văn bản @@ -636,13 +636,16 @@ Quá trình quét sẽ diễn ra tự động. Mật khẩu đã được xóa. Ghi chú riêng tư về mục Gửi này. Không có mục Gửi trong tài khoản của bạn. - Thêm mục Gửi + Mục Gửi mới Sao chép liên kết Chia sẻ liên kết Liên kết Gửi Tìm kiếm mục Gửi Sửa mục Gửi - Mục Gửi mới + Chỉnh sửa tập tin Gửi + Chỉnh sửa văn bản Gửi + Tập tin Gửi mới + Văn bản Gửi mới Bạn có chắc muốn mục Gửi này? Đã xóa mục Gửi Đã lưu mục Gửi @@ -1256,7 +1259,7 @@ bất kỳ sự cố nào. Mật khẩu chính không còn cần thiết đối với các thành viên của tổ chức. Vui lòng xác nhận tên miền bên dưới với quản trị viên tổ chức của bạn. Vui lòng xác nhận tên miền bên dưới với quản trị viên tổ chức của bạn.\n\nTên miền kết nối khóa:\n%1$s Bộ lưu chuyến bay - Bộ lưu chuyến bay sẽ kích hoạt cho tới %1$s vào %2$s. Đến cài đặt để hủy kích hoạt ngay. + Bộ lưu chuyến bay sẽ kích hoạt cho tới %1$s vào %2$s. Đến Cài đặt để hủy kích hoạt ngay. Chuyển đến Cài đặt Đã xóa tất cả nhật ký Đã xóa nhật ký @@ -1268,7 +1271,7 @@ bất kỳ sự cố nào. Không thể xóa tài khoản Không thể thực hiện hành động này vì tài khoản của bạn thuộc sở hữu của một tổ chức. Liên hệ với quản trị viên tổ chức của bạn để biết thêm thông tin chi tiết. Tài khoản này sẽ sớm bị xóa. Đăng nhập %1$s để tiếp tục sử dụng Bitwarden. - Xem file Gửi + Xem tập tin Gửi Xem văn bản Gửi Xóa Gửi Thiếu Gửi, đồng bộ lại kho của bạn diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 25323ee4a8..c0f1f8df4e 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -642,7 +642,10 @@ Send 链接 搜索 Send 编辑 Send - 新增 Send + 编辑文件 Send + 编辑文本 Send + 新增文件 Send + 新增文本 Send 确定要删除此 Send 吗? Send 已删除 Send 已保存 @@ -1265,7 +1268,7 @@ 无法读取证书。 无法删除您的账户 此操作无法完成,因为您的账户归组织所有。请联系您的组织管理员获取详细信息。 - 此账户将很快被删除。请在 %1$s 前登录以继续使用 Bitwarden。 + 此账户即将被删除。请在 %1$s 前登录以继续使用 Bitwarden。 查看文件 Send 查看文本 Send 删除 Send diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 24feb6a58a..a1e38a8a5f 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -642,7 +642,10 @@ Send 連結 搜尋 Send 編輯 Send - 建立新 Send + Edit file Send + Edit text Send + New file Send + New text Send 您確定要刪除此 Send 嗎? 已刪除 Send 已更新 Send。 From 4cd603006fc06e3f65b297ed03076e0a0e1a967e Mon Sep 17 00:00:00 2001 From: Amy Galles <9685081+AmyLGalles@users.noreply.github.com> Date: Fri, 23 May 2025 11:37:25 -0700 Subject: [PATCH 05/34] [BRE-768] Creating stub workflow for testing (#5259) --- .github/workflows/publish.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .github/workflows/publish.yml diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000000..7aa31e1c68 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,14 @@ + +name: Publish + +on: + workflow_dispatch: + +jobs: + publish: + runs-on: ubuntu-24.04 + name: Promote build to Production in Play Store + + steps: + - name: TEST STEP + run: exit 0 From 29e789952542170c56f049d97c2c2150ffe5b3b8 Mon Sep 17 00:00:00 2001 From: aj-rosado <109146700+aj-rosado@users.noreply.github.com> Date: Fri, 23 May 2025 20:41:00 +0100 Subject: [PATCH 06/34] [PM-21537] Fix remove individual vault collection selection (#5262) --- .../feature/addedit/VaultAddEditViewModel.kt | 3 +- .../addedit/VaultAddEditViewModelTest.kt | 52 +++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt index ad7f1cbb5a..e24a4c6dfb 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt @@ -960,11 +960,12 @@ class VaultAddEditViewModel @Inject constructor( ) { updateCommonContent { currentCommonContentState -> currentCommonContentState.copy( + selectedOwnerId = currentCommonContentState.selectedOwner?.id, availableOwners = currentCommonContentState .availableOwners .toUpdatedOwners( selectedCollectionId = action.collection.id, - selectedOwnerId = currentCommonContentState.selectedOwnerId, + selectedOwnerId = currentCommonContentState.selectedOwner?.id, ), ) } diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt index 0d1bfe2b8f..01206c13fe 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt @@ -4076,6 +4076,58 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { assertEquals(expectedState, viewModel.stateFlow.value) } + @Suppress("MaxLineLength") + @Test + fun `CollectionSelect should update selectedOwnerId when isIndividualVaultDisabled is true`() = + runTest { + every { + policyManager.getActivePolicies(type = PolicyTypeJson.PERSONAL_OWNERSHIP) + } returns listOf( + SyncResponseJson.Policy( + organizationId = "Test Org", + id = "testId", + type = PolicyTypeJson.PERSONAL_OWNERSHIP, + isEnabled = true, + data = null, + ), + ) + + val vaultAddEditType = VaultAddEditType.AddItem + val vaultItemCipherType = VaultItemCipherType.LOGIN + mutableVaultDataFlow.value = DataState.Loaded( + data = createVaultData(), + ) + + val viewModel = createAddVaultItemViewModel( + savedStateHandle = createSavedStateHandleWithState( + state = null, + vaultAddEditType = vaultAddEditType, + vaultItemCipherType = vaultItemCipherType, + ), + ) + + val action = collectionSelectAction() + viewModel.trySendAction(action) + + val expectedState = vaultAddItemInitialState.copy( + viewState = VaultAddEditState.ViewState.Content( + common = createCommonContentViewState( + availableOwners = listOf( + VaultAddEditState.Owner( + id = "organizationId", + name = "organizationName", + collections = emptyList(), + ), + ), + selectedOwnerId = "organizationId", + ), + isIndividualVaultDisabled = true, + type = createLoginTypeContentViewState(), + ), + ) + assertEquals(expectedState, viewModel.stateFlow.value) + } + @Suppress("MaxLineLength") @Test fun `UserVerificationLockout should set isUserVerified to false and display Fido2ErrorDialog`() { From 2a6813e4a23f31dbce53bd6dd0133e81f0c8f402 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lison=20Fernandes?= Date: Mon, 26 May 2025 15:21:16 +0100 Subject: [PATCH 07/34] [PM-21336] CI restructuring #1 - Consolidate Crowdin pull and push workflows (#5253) --- .../workflows/crowdin-pull-authenticator.yml | 59 ------------------- .github/workflows/crowdin-pull.yml | 32 ++++++---- .../workflows/crowdin-push-authenticator.yml | 32 ---------- .github/workflows/crowdin-push.yml | 25 +++++--- crowdin.yml => crowdin-bwpm.yml | 0 5 files changed, 39 insertions(+), 109 deletions(-) delete mode 100644 .github/workflows/crowdin-pull-authenticator.yml delete mode 100644 .github/workflows/crowdin-push-authenticator.yml rename crowdin.yml => crowdin-bwpm.yml (100%) diff --git a/.github/workflows/crowdin-pull-authenticator.yml b/.github/workflows/crowdin-pull-authenticator.yml deleted file mode 100644 index 0221afec05..0000000000 --- a/.github/workflows/crowdin-pull-authenticator.yml +++ /dev/null @@ -1,59 +0,0 @@ -name: Crowdin Sync - Authenticator - -on: - workflow_dispatch: - inputs: {} - schedule: - - cron: '0 0 * * 5' - -jobs: - crowdin-sync: - name: Autosync - runs-on: ubuntu-24.04 - permissions: - contents: write - pull-requests: write - env: - _CROWDIN_PROJECT_ID: "673718" - steps: - - name: Check out repo - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - - name: Log in to Azure - CI Subscription - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 - with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} - - - name: Retrieve secrets - id: retrieve-secrets - uses: bitwarden/gh-actions/get-keyvault-secrets@main - with: - keyvault: "bitwarden-ci" - secrets: "github-gpg-private-key, github-gpg-private-key-passphrase" - - - name: Generate GH App token - uses: actions/create-github-app-token@3ff1caaa28b64c9cc276ce0a02e2ff584f3900c5 # v2.0.2 - id: app-token - with: - app-id: ${{ secrets.BW_GHAPP_ID }} - private-key: ${{ secrets.BW_GHAPP_KEY }} - - - name: Download translations - uses: crowdin/github-action@b8012bd5491b8aa8578b73ab5b5f5e7c94aaa6e2 # v2.7.0 - env: - GITHUB_TOKEN: ${{ steps.app-token.outputs.token }} - CROWDIN_API_TOKEN: ${{ secrets.CROWDIN_API_TOKEN }} - with: - config: crowdin-bwa.yml - upload_sources: false - upload_translations: false - download_translations: true - github_user_name: "bitwarden-devops-bot" - github_user_email: "106330231+bitwarden-devops-bot@users.noreply.github.com" - commit_message: "Autosync the updated translations" - localization_branch_name: crowdin-auto-sync - create_pull_request: true - pull_request_title: "Autosync Crowdin Translations" - pull_request_body: "Autosync the updated translations" - gpg_private_key: ${{ steps.retrieve-secrets.outputs.github-gpg-private-key }} - gpg_passphrase: ${{ steps.retrieve-secrets.outputs.github-gpg-private-key-passphrase }} diff --git a/.github/workflows/crowdin-pull.yml b/.github/workflows/crowdin-pull.yml index 9aec4c130e..3603d059b1 100644 --- a/.github/workflows/crowdin-pull.yml +++ b/.github/workflows/crowdin-pull.yml @@ -1,20 +1,29 @@ -name: Crowdin Sync +name: Cron / Crowdin Pull +run-name: Crowdin Pull - ${{ github.event_name == 'workflow_dispatch' && 'Manual' || 'Scheduled' }} on: workflow_dispatch: - inputs: {} schedule: - cron: '0 0 * * 5' jobs: crowdin-sync: - name: Autosync + name: Crowdin Pull - ${{ matrix.name }} - ${{ github.event_name }} runs-on: ubuntu-24.04 permissions: contents: write pull-requests: write - env: - _CROWDIN_PROJECT_ID: "269690" + strategy: + matrix: + include: + - name: Password Manager + project_id: 269690 + config: crowdin-bwpm.yml + branch: crowdin-pull-bwpm + - name: Authenticator + project_id: 673718 + config: crowdin-bwa.yml + branch: crowdin-pull-bwa steps: - name: Checkout repo uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 @@ -38,22 +47,23 @@ jobs: app-id: ${{ secrets.BW_GHAPP_ID }} private-key: ${{ secrets.BW_GHAPP_KEY }} - - name: Download translations + - name: Download translations for ${{ matrix.name }} uses: crowdin/github-action@b8012bd5491b8aa8578b73ab5b5f5e7c94aaa6e2 # v2.7.0 env: GITHUB_TOKEN: ${{ steps.app-token.outputs.token }} CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }} + _CROWDIN_PROJECT_ID: ${{ matrix.project_id }} with: - config: crowdin.yml + config: ${{ matrix.config }} upload_sources: false upload_translations: false download_translations: true github_user_name: "bitwarden-devops-bot" github_user_email: "106330231+bitwarden-devops-bot@users.noreply.github.com" - commit_message: "Autosync the updated translations" - localization_branch_name: crowdin-auto-sync + commit_message: "Crowdin Pull - ${{ matrix.name }}" + localization_branch_name: ${{ matrix.branch }} create_pull_request: true - pull_request_title: "Autosync Crowdin Translations" - pull_request_body: "Autosync the updated translations" + pull_request_title: "Crowdin Pull - ${{ matrix.name }}" + pull_request_body: ":inbox_tray: New translations for ${{ matrix.name }} received!" gpg_private_key: ${{ steps.retrieve-secrets.outputs.github-gpg-private-key }} gpg_passphrase: ${{ steps.retrieve-secrets.outputs.github-gpg-private-key-passphrase }} diff --git a/.github/workflows/crowdin-push-authenticator.yml b/.github/workflows/crowdin-push-authenticator.yml deleted file mode 100644 index 7191407ac2..0000000000 --- a/.github/workflows/crowdin-push-authenticator.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: Crowdin Push - Authenticator - -on: - workflow_dispatch: - push: - branches: - - "main" -env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - JAVA_VERSION: 17 - -jobs: - crowdin-push: - name: Crowdin Push - runs-on: ubuntu-24.04 - permissions: - contents: read - env: - _CROWDIN_PROJECT_ID: "673718" - steps: - - name: Check out repo - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - - name: Upload sources - uses: crowdin/github-action@b8012bd5491b8aa8578b73ab5b5f5e7c94aaa6e2 # v2.7.0 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - CROWDIN_API_TOKEN: ${{ secrets.CROWDIN_API_TOKEN }} - with: - config: crowdin-bwa.yml - upload_sources: true - upload_translations: false diff --git a/.github/workflows/crowdin-push.yml b/.github/workflows/crowdin-push.yml index 64c1b66640..923384bf5e 100644 --- a/.github/workflows/crowdin-push.yml +++ b/.github/workflows/crowdin-push.yml @@ -1,19 +1,18 @@ -name: Crowdin Push +name: CI / Crowdin Push +run-name: Crowdin Push - ${{ github.event_name == 'workflow_dispatch' && 'Manual' || 'CI' }} on: workflow_dispatch: push: branches: - - "main" + - main jobs: crowdin-push: - name: Crowdin Push + name: Crowdin Push - ${{ github.event_name }} runs-on: ubuntu-24.04 permissions: contents: read - env: - _CROWDIN_PROJECT_ID: "269690" steps: - name: Check out repo uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 @@ -30,12 +29,24 @@ jobs: keyvault: "bitwarden-ci" secrets: "crowdin-api-token" - - name: Upload sources + - name: Upload sources for Password Manager uses: crowdin/github-action@b8012bd5491b8aa8578b73ab5b5f5e7c94aaa6e2 # v2.7.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }} + _CROWDIN_PROJECT_ID: "269690" with: - config: crowdin.yml + config: crowdin-bwpm.yml + upload_sources: true + upload_translations: false + + - name: Upload sources for Authenticator + uses: crowdin/github-action@b8012bd5491b8aa8578b73ab5b5f5e7c94aaa6e2 # v2.7.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }} + _CROWDIN_PROJECT_ID: "673718" + with: + config: crowdin-bwa.yml upload_sources: true upload_translations: false diff --git a/crowdin.yml b/crowdin-bwpm.yml similarity index 100% rename from crowdin.yml rename to crowdin-bwpm.yml From 97b6bccd724b2450a3292d5af42512bfb858b5fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Ch=C4=99ci=C5=84ski?= Date: Tue, 27 May 2025 15:26:01 +0200 Subject: [PATCH 08/34] Add stub for publishing releases workflow (#5268) --- .github/workflows/publish-github-release.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .github/workflows/publish-github-release.yml diff --git a/.github/workflows/publish-github-release.yml b/.github/workflows/publish-github-release.yml new file mode 100644 index 0000000000..b08e068508 --- /dev/null +++ b/.github/workflows/publish-github-release.yml @@ -0,0 +1,12 @@ +name: Publish GitHub Release as newest + +on: + workflow_dispatch: + +jobs: + stub: + runs-on: ubuntu-24.04 + name: Stub + steps: + - name: Stub + run: echo "This is a stub job to trigger the workflow." \ No newline at end of file From 8d8dee51716ef97503c341db8b1639a88f0f31b6 Mon Sep 17 00:00:00 2001 From: David Perez Date: Tue, 27 May 2025 08:46:38 -0500 Subject: [PATCH 09/34] PM-21916: Move the FAB to the UI module (#5251) --- .../settings/autofill/blockautofill/BlockAutoFillScreen.kt | 2 +- .../ui/platform/feature/settings/folders/FoldersScreen.kt | 2 +- .../com/x8bit/bitwarden/ui/tools/feature/send/SendScreen.kt | 2 +- .../bitwarden/ui/tools/feature/send/viewsend/ViewSendScreen.kt | 2 +- .../x8bit/bitwarden/ui/vault/feature/item/VaultItemScreen.kt | 2 +- .../ui/vault/feature/itemlisting/VaultItemListingScreen.kt | 2 +- .../com/x8bit/bitwarden/ui/vault/feature/vault/VaultScreen.kt | 2 +- .../ui/platform/components/fab/BitwardenFloatingActionButton.kt | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) rename {app/src/main/kotlin/com/x8bit => ui/src/main/kotlin/com}/bitwarden/ui/platform/components/fab/BitwardenFloatingActionButton.kt (97%) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/blockautofill/BlockAutoFillScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/blockautofill/BlockAutoFillScreen.kt index 7508d8d421..20a0241c4e 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/blockautofill/BlockAutoFillScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/blockautofill/BlockAutoFillScreen.kt @@ -39,12 +39,12 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.bottomDivider +import com.bitwarden.ui.platform.components.fab.BitwardenFloatingActionButton import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.button.BitwardenOutlinedButton -import com.x8bit.bitwarden.ui.platform.components.fab.BitwardenFloatingActionButton import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold /** diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/FoldersScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/FoldersScreen.kt index 26fb4da79e..3726df0e02 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/FoldersScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/FoldersScreen.kt @@ -29,13 +29,13 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin import com.bitwarden.ui.platform.base.util.toListItemCardStyle +import com.bitwarden.ui.platform.components.fab.BitwardenFloatingActionButton import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.content.BitwardenErrorContent import com.x8bit.bitwarden.ui.platform.components.content.BitwardenLoadingContent -import com.x8bit.bitwarden.ui.platform.components.fab.BitwardenFloatingActionButton import com.x8bit.bitwarden.ui.platform.components.row.BitwardenTextRow import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold import com.x8bit.bitwarden.ui.platform.feature.settings.folders.model.FolderDisplayItem diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/SendScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/SendScreen.kt index de344f2097..b6fd339a32 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/SendScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/SendScreen.kt @@ -20,6 +20,7 @@ import androidx.core.net.toUri import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect +import com.bitwarden.ui.platform.components.fab.BitwardenFloatingActionButton import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.x8bit.bitwarden.R import com.x8bit.bitwarden.data.platform.manager.model.AppResumeScreenData @@ -35,7 +36,6 @@ 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.BitwardenSelectionDialog import com.x8bit.bitwarden.ui.platform.components.dialog.row.BitwardenBasicDialogRow -import com.x8bit.bitwarden.ui.platform.components.fab.BitwardenFloatingActionButton import com.x8bit.bitwarden.ui.platform.components.model.rememberBitwardenPullToRefreshState import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold import com.x8bit.bitwarden.ui.platform.composition.LocalAppResumeStateManager diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/viewsend/ViewSendScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/viewsend/ViewSendScreen.kt index b7e3cca124..83e5d52ac7 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/viewsend/ViewSendScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/viewsend/ViewSendScreen.kt @@ -46,6 +46,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.cardStyle import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.fab.BitwardenFloatingActionButton import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.bitwarden.ui.platform.theme.BitwardenTheme @@ -61,7 +62,6 @@ import com.x8bit.bitwarden.ui.platform.components.content.BitwardenLoadingConten 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 -import com.x8bit.bitwarden.ui.platform.components.fab.BitwardenFloatingActionButton import com.x8bit.bitwarden.ui.platform.components.field.BitwardenTextField import com.x8bit.bitwarden.ui.platform.components.header.BitwardenExpandingHeader import com.x8bit.bitwarden.ui.platform.components.header.BitwardenListHeaderText diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreen.kt index 2555850f02..5cf8144d01 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreen.kt @@ -22,6 +22,7 @@ import androidx.core.net.toUri import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect +import com.bitwarden.ui.platform.components.fab.BitwardenFloatingActionButton import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.x8bit.bitwarden.R import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar @@ -34,7 +35,6 @@ 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 import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenTwoButtonDialog -import com.x8bit.bitwarden.ui.platform.components.fab.BitwardenFloatingActionButton import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold import com.x8bit.bitwarden.ui.platform.composition.LocalIntentManager import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingScreen.kt index 1131adcda1..8afdf94ff6 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingScreen.kt @@ -21,6 +21,7 @@ import androidx.core.net.toUri import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect +import com.bitwarden.ui.platform.components.fab.BitwardenFloatingActionButton import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.bitwarden.ui.util.Text import com.x8bit.bitwarden.R @@ -39,7 +40,6 @@ import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenLoadingDialog import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenMasterPasswordDialog import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenOverwritePasskeyConfirmationDialog import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenPinDialog -import com.x8bit.bitwarden.ui.platform.components.fab.BitwardenFloatingActionButton import com.x8bit.bitwarden.ui.platform.components.model.BitwardenPullToRefreshState import com.x8bit.bitwarden.ui.platform.components.model.rememberBitwardenPullToRefreshState import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultScreen.kt index 6a871f50e2..300edbec0f 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultScreen.kt @@ -31,6 +31,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.LifecycleEventEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.fab.BitwardenFloatingActionButton import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.x8bit.bitwarden.R import com.x8bit.bitwarden.ui.platform.components.account.BitwardenAccountActionItem @@ -48,7 +49,6 @@ 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 import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenTwoButtonDialog -import com.x8bit.bitwarden.ui.platform.components.fab.BitwardenFloatingActionButton import com.x8bit.bitwarden.ui.platform.components.model.BitwardenPullToRefreshState import com.x8bit.bitwarden.ui.platform.components.model.TopAppBarDividerStyle import com.x8bit.bitwarden.ui.platform.components.model.rememberBitwardenPullToRefreshState diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/fab/BitwardenFloatingActionButton.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/fab/BitwardenFloatingActionButton.kt similarity index 97% rename from app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/fab/BitwardenFloatingActionButton.kt rename to ui/src/main/kotlin/com/bitwarden/ui/platform/components/fab/BitwardenFloatingActionButton.kt index d431648886..ee923683ba 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/fab/BitwardenFloatingActionButton.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/fab/BitwardenFloatingActionButton.kt @@ -1,4 +1,4 @@ -package com.x8bit.bitwarden.ui.platform.components.fab +package com.bitwarden.ui.platform.components.fab import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.WindowInsetsSides From 0e3e6069fa79af8af5524de6e2f4c1bead07a3a9 Mon Sep 17 00:00:00 2001 From: David Perez Date: Tue, 27 May 2025 08:46:55 -0500 Subject: [PATCH 10/34] Update Retrofit BOM to 3.0.0 (#5258) --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 20c6753058..f18a12ccb2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -47,7 +47,7 @@ kotlinxKover = "0.9.1" ksp = "2.1.21-2.0.1" mockk = "1.14.2" okhttp = "4.12.0" -retrofitBom = "2.11.0" +retrofitBom = "3.0.0" robolectric = "4.14.1" sonarqube = "6.0.1.5171" testng = "7.11.0" From 21b8ef92bad17f46724d2d1240e5d8c139ce4425 Mon Sep 17 00:00:00 2001 From: David Perez Date: Tue, 27 May 2025 08:48:07 -0500 Subject: [PATCH 11/34] PM-21952: Move navigation package to UI module (#5260) --- .../ui/platform/components/card/BitwardenActionCard.kt | 2 +- .../ui/platform/components/model/ScaffoldNavigationData.kt | 1 + .../ui/platform/components/row/BitwardenPushRow.kt | 2 +- .../ui/platform/components/scaffold/BitwardenScaffold.kt | 4 ++-- .../settings/accountsecurity/AccountSecurityScreen.kt | 2 +- .../ui/platform/feature/settings/autofill/AutoFillScreen.kt | 2 +- .../platform/feature/settings/vault/VaultSettingsScreen.kt | 2 +- .../vaultunlockednavbar/VaultUnlockedNavBarScreen.kt | 2 +- .../vaultunlockednavbar/model/VaultUnlockedNavBarTab.kt | 2 +- ui/build.gradle.kts | 1 + .../ui/platform/components/badge/NotificationBadge.kt | 2 +- .../platform/components/navigation/BitwardenBottomAppBar.kt | 4 ++-- .../components/navigation/BitwardenNavigationBarItem.kt | 6 +++--- .../components/navigation/BitwardenNavigationRail.kt | 4 ++-- .../components/navigation/BitwardenNavigationRailItem.kt | 6 +++--- .../navigation/color/BitwardenNavigationBarItemColors.kt | 2 +- .../navigation/color/BitwardenNavigationRailItemColors.kt | 2 +- .../platform/components/navigation}/model/NavigationItem.kt | 2 +- 18 files changed, 25 insertions(+), 23 deletions(-) rename {app/src/main/kotlin/com/x8bit => ui/src/main/kotlin/com}/bitwarden/ui/platform/components/badge/NotificationBadge.kt (97%) rename {app/src/main/kotlin/com/x8bit => ui/src/main/kotlin/com}/bitwarden/ui/platform/components/navigation/BitwardenBottomAppBar.kt (92%) rename {app/src/main/kotlin/com/x8bit => ui/src/main/kotlin/com}/bitwarden/ui/platform/components/navigation/BitwardenNavigationBarItem.kt (91%) rename {app/src/main/kotlin/com/x8bit => ui/src/main/kotlin/com}/bitwarden/ui/platform/components/navigation/BitwardenNavigationRail.kt (96%) rename {app/src/main/kotlin/com/x8bit => ui/src/main/kotlin/com}/bitwarden/ui/platform/components/navigation/BitwardenNavigationRailItem.kt (91%) rename {app/src/main/kotlin/com/x8bit => ui/src/main/kotlin/com}/bitwarden/ui/platform/components/navigation/color/BitwardenNavigationBarItemColors.kt (92%) rename {app/src/main/kotlin/com/x8bit => ui/src/main/kotlin/com}/bitwarden/ui/platform/components/navigation/color/BitwardenNavigationRailItemColors.kt (92%) rename {app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components => ui/src/main/kotlin/com/bitwarden/ui/platform/components/navigation}/model/NavigationItem.kt (93%) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/card/BitwardenActionCard.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/card/BitwardenActionCard.kt index 92a37a59a5..5a7c7c27f5 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/card/BitwardenActionCard.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/card/BitwardenActionCard.kt @@ -19,11 +19,11 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import com.bitwarden.ui.platform.components.badge.NotificationBadge import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.badge.NotificationBadge import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledButton import com.x8bit.bitwarden.ui.platform.components.card.color.bitwardenCardColors diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/model/ScaffoldNavigationData.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/model/ScaffoldNavigationData.kt index 6cf3b6c42f..68c9e14b0c 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/model/ScaffoldNavigationData.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/model/ScaffoldNavigationData.kt @@ -1,5 +1,6 @@ package com.x8bit.bitwarden.ui.platform.components.model +import com.bitwarden.ui.platform.components.navigation.model.NavigationItem import kotlinx.collections.immutable.ImmutableList /** diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/row/BitwardenPushRow.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/row/BitwardenPushRow.kt index c1be8c2697..5d5a7ac1d6 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/row/BitwardenPushRow.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/row/BitwardenPushRow.kt @@ -17,11 +17,11 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.base.util.cardStyle import com.bitwarden.ui.platform.base.util.mirrorIfRtl +import com.bitwarden.ui.platform.components.badge.NotificationBadge import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.badge.NotificationBadge import com.x8bit.bitwarden.ui.platform.components.icon.BitwardenIcon import com.x8bit.bitwarden.ui.platform.components.model.IconData diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/scaffold/BitwardenScaffold.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/scaffold/BitwardenScaffold.kt index c7d57cf63f..3688ab5012 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/scaffold/BitwardenScaffold.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/scaffold/BitwardenScaffold.kt @@ -40,14 +40,14 @@ import androidx.compose.ui.semantics.testTagsAsResourceId import androidx.compose.ui.unit.dp import androidx.compose.ui.zIndex import com.bitwarden.ui.platform.base.util.toDp +import com.bitwarden.ui.platform.components.navigation.BitwardenBottomAppBar +import com.bitwarden.ui.platform.components.navigation.BitwardenNavigationRail import com.bitwarden.ui.platform.model.WindowSize import com.bitwarden.ui.platform.theme.BitwardenTheme import com.bitwarden.ui.platform.util.rememberWindowSize import com.x8bit.bitwarden.ui.platform.components.model.BitwardenPullToRefreshState import com.x8bit.bitwarden.ui.platform.components.model.ScaffoldNavigationData import com.x8bit.bitwarden.ui.platform.components.model.rememberBitwardenPullToRefreshState -import com.x8bit.bitwarden.ui.platform.components.navigation.BitwardenBottomAppBar -import com.x8bit.bitwarden.ui.platform.components.navigation.BitwardenNavigationRail import com.x8bit.bitwarden.ui.platform.components.scrim.BitwardenAnimatedScrim /** diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityScreen.kt index 7fd7ee78f3..58ec21f72d 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityScreen.kt @@ -35,6 +35,7 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.badge.NotificationBadge import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.bitwarden.ui.platform.theme.BitwardenTheme @@ -44,7 +45,6 @@ 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.appbar.BitwardenTopAppBar -import com.x8bit.bitwarden.ui.platform.components.badge.NotificationBadge import com.x8bit.bitwarden.ui.platform.components.button.BitwardenTextButton import com.x8bit.bitwarden.ui.platform.components.card.BitwardenActionCard import com.x8bit.bitwarden.ui.platform.components.card.BitwardenInfoCalloutCard diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillScreen.kt index 92e1b5b3f0..1c6568f932 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillScreen.kt @@ -31,12 +31,12 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.badge.NotificationBadge import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.x8bit.bitwarden.R import com.x8bit.bitwarden.data.platform.repository.model.UriMatchType import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar -import com.x8bit.bitwarden.ui.platform.components.badge.NotificationBadge import com.x8bit.bitwarden.ui.platform.components.card.BitwardenActionCard import com.x8bit.bitwarden.ui.platform.components.card.actionCardExitAnimation import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsScreen.kt index b9353daee0..bb6ddb6e0b 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsScreen.kt @@ -28,11 +28,11 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.badge.NotificationBadge import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.x8bit.bitwarden.R import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar -import com.x8bit.bitwarden.ui.platform.components.badge.NotificationBadge import com.x8bit.bitwarden.ui.platform.components.card.BitwardenActionCard import com.x8bit.bitwarden.ui.platform.components.card.actionCardExitAnimation import com.x8bit.bitwarden.ui.platform.components.row.BitwardenExternalLinkRow diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/vaultunlockednavbar/VaultUnlockedNavBarScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/vaultunlockednavbar/VaultUnlockedNavBarScreen.kt index 96acb52e8d..4debcfcbd9 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/vaultunlockednavbar/VaultUnlockedNavBarScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/vaultunlockednavbar/VaultUnlockedNavBarScreen.kt @@ -20,8 +20,8 @@ import androidx.navigation.compose.NavHost import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.navOptions import com.bitwarden.ui.platform.base.util.EventsEffect +import com.bitwarden.ui.platform.components.navigation.model.NavigationItem import com.bitwarden.ui.platform.theme.RootTransitionProviders -import com.x8bit.bitwarden.ui.platform.components.model.NavigationItem import com.x8bit.bitwarden.ui.platform.components.model.ScaffoldNavigationData import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold import com.x8bit.bitwarden.ui.platform.components.util.rememberBitwardenNavController diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/vaultunlockednavbar/model/VaultUnlockedNavBarTab.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/vaultunlockednavbar/model/VaultUnlockedNavBarTab.kt index 00b740a63d..ba416384e5 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/vaultunlockednavbar/model/VaultUnlockedNavBarTab.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/vaultunlockednavbar/model/VaultUnlockedNavBarTab.kt @@ -1,9 +1,9 @@ package com.x8bit.bitwarden.ui.platform.feature.vaultunlockednavbar.model import android.os.Parcelable +import com.bitwarden.ui.platform.components.navigation.model.NavigationItem import com.bitwarden.ui.platform.util.toObjectNavigationRoute import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.model.NavigationItem import com.x8bit.bitwarden.ui.platform.feature.settings.SettingsGraphRoute import com.x8bit.bitwarden.ui.platform.feature.settings.SettingsRoute import com.x8bit.bitwarden.ui.tools.feature.generator.GeneratorGraphRoute diff --git a/ui/build.gradle.kts b/ui/build.gradle.kts index 88bdcd6617..83ec5a9ef4 100644 --- a/ui/build.gradle.kts +++ b/ui/build.gradle.kts @@ -61,6 +61,7 @@ dependencies { implementation(libs.androidx.navigation.compose) implementation(libs.kotlinx.serialization) implementation(libs.kotlinx.coroutines.core) + implementation(libs.kotlinx.collections.immutable) // For now we are restricted to running Compose tests for debug builds only debugImplementation(libs.androidx.compose.ui.test.manifest) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/badge/NotificationBadge.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/badge/NotificationBadge.kt similarity index 97% rename from app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/badge/NotificationBadge.kt rename to ui/src/main/kotlin/com/bitwarden/ui/platform/components/badge/NotificationBadge.kt index d078fa2eae..c155a84968 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/badge/NotificationBadge.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/badge/NotificationBadge.kt @@ -1,4 +1,4 @@ -package com.x8bit.bitwarden.ui.platform.components.badge +package com.bitwarden.ui.platform.components.badge import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.fadeIn diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/navigation/BitwardenBottomAppBar.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/navigation/BitwardenBottomAppBar.kt similarity index 92% rename from app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/navigation/BitwardenBottomAppBar.kt rename to ui/src/main/kotlin/com/bitwarden/ui/platform/components/navigation/BitwardenBottomAppBar.kt index 51da53cb12..6e95312b61 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/navigation/BitwardenBottomAppBar.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/navigation/BitwardenBottomAppBar.kt @@ -1,4 +1,4 @@ -package com.x8bit.bitwarden.ui.platform.components.navigation +package com.bitwarden.ui.platform.components.navigation import androidx.compose.foundation.layout.WindowInsets import androidx.compose.material3.BottomAppBar @@ -8,8 +8,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.testTag import com.bitwarden.ui.platform.base.util.topDivider +import com.bitwarden.ui.platform.components.navigation.model.NavigationItem import com.bitwarden.ui.platform.theme.BitwardenTheme -import com.x8bit.bitwarden.ui.platform.components.model.NavigationItem import kotlinx.collections.immutable.ImmutableList /** diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/navigation/BitwardenNavigationBarItem.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/navigation/BitwardenNavigationBarItem.kt similarity index 91% rename from app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/navigation/BitwardenNavigationBarItem.kt rename to ui/src/main/kotlin/com/bitwarden/ui/platform/components/navigation/BitwardenNavigationBarItem.kt index 9ca27b87c6..1c8158e619 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/navigation/BitwardenNavigationBarItem.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/navigation/BitwardenNavigationBarItem.kt @@ -1,4 +1,4 @@ -package com.x8bit.bitwarden.ui.platform.components.navigation +package com.bitwarden.ui.platform.components.navigation import androidx.annotation.DrawableRes import androidx.annotation.StringRes @@ -12,9 +12,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow +import com.bitwarden.ui.platform.components.badge.NotificationBadge +import com.bitwarden.ui.platform.components.navigation.color.bitwardenNavigationBarItemColors import com.bitwarden.ui.platform.components.util.rememberVectorPainter -import com.x8bit.bitwarden.ui.platform.components.badge.NotificationBadge -import com.x8bit.bitwarden.ui.platform.components.navigation.color.bitwardenNavigationBarItemColors /** * A custom Bitwarden-themed bottom app bar. diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/navigation/BitwardenNavigationRail.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/navigation/BitwardenNavigationRail.kt similarity index 96% rename from app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/navigation/BitwardenNavigationRail.kt rename to ui/src/main/kotlin/com/bitwarden/ui/platform/components/navigation/BitwardenNavigationRail.kt index f3bfc6b9fb..d64a283304 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/navigation/BitwardenNavigationRail.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/navigation/BitwardenNavigationRail.kt @@ -1,4 +1,4 @@ -package com.x8bit.bitwarden.ui.platform.components.navigation +package com.bitwarden.ui.platform.components.navigation import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -26,8 +26,8 @@ import androidx.compose.ui.platform.testTag import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.base.util.endDivider import com.bitwarden.ui.platform.base.util.toDp +import com.bitwarden.ui.platform.components.navigation.model.NavigationItem import com.bitwarden.ui.platform.theme.BitwardenTheme -import com.x8bit.bitwarden.ui.platform.components.model.NavigationItem import kotlinx.collections.immutable.ImmutableList /** diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/navigation/BitwardenNavigationRailItem.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/navigation/BitwardenNavigationRailItem.kt similarity index 91% rename from app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/navigation/BitwardenNavigationRailItem.kt rename to ui/src/main/kotlin/com/bitwarden/ui/platform/components/navigation/BitwardenNavigationRailItem.kt index 843cd28414..c652aa3732 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/navigation/BitwardenNavigationRailItem.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/navigation/BitwardenNavigationRailItem.kt @@ -1,4 +1,4 @@ -package com.x8bit.bitwarden.ui.platform.components.navigation +package com.bitwarden.ui.platform.components.navigation import androidx.annotation.DrawableRes import androidx.annotation.StringRes @@ -12,9 +12,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow +import com.bitwarden.ui.platform.components.badge.NotificationBadge +import com.bitwarden.ui.platform.components.navigation.color.bitwardenNavigationRailItemColors import com.bitwarden.ui.platform.components.util.rememberVectorPainter -import com.x8bit.bitwarden.ui.platform.components.badge.NotificationBadge -import com.x8bit.bitwarden.ui.platform.components.navigation.color.bitwardenNavigationRailItemColors /** * A custom Bitwarden-themed bottom app bar. diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/navigation/color/BitwardenNavigationBarItemColors.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/navigation/color/BitwardenNavigationBarItemColors.kt similarity index 92% rename from app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/navigation/color/BitwardenNavigationBarItemColors.kt rename to ui/src/main/kotlin/com/bitwarden/ui/platform/components/navigation/color/BitwardenNavigationBarItemColors.kt index 48a803bda7..7f67373d5a 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/navigation/color/BitwardenNavigationBarItemColors.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/navigation/color/BitwardenNavigationBarItemColors.kt @@ -1,4 +1,4 @@ -package com.x8bit.bitwarden.ui.platform.components.navigation.color +package com.bitwarden.ui.platform.components.navigation.color import androidx.compose.material3.NavigationBarItemColors import androidx.compose.runtime.Composable diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/navigation/color/BitwardenNavigationRailItemColors.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/navigation/color/BitwardenNavigationRailItemColors.kt similarity index 92% rename from app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/navigation/color/BitwardenNavigationRailItemColors.kt rename to ui/src/main/kotlin/com/bitwarden/ui/platform/components/navigation/color/BitwardenNavigationRailItemColors.kt index f7ff9d15d8..27527fe2f3 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/navigation/color/BitwardenNavigationRailItemColors.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/navigation/color/BitwardenNavigationRailItemColors.kt @@ -1,4 +1,4 @@ -package com.x8bit.bitwarden.ui.platform.components.navigation.color +package com.bitwarden.ui.platform.components.navigation.color import androidx.compose.material3.NavigationRailItemColors import androidx.compose.runtime.Composable diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/model/NavigationItem.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/navigation/model/NavigationItem.kt similarity index 93% rename from app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/model/NavigationItem.kt rename to ui/src/main/kotlin/com/bitwarden/ui/platform/components/navigation/model/NavigationItem.kt index c88ec80ad5..ec1ef55c8b 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/model/NavigationItem.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/navigation/model/NavigationItem.kt @@ -1,4 +1,4 @@ -package com.x8bit.bitwarden.ui.platform.components.model +package com.bitwarden.ui.platform.components.navigation.model /** * Represents a user-interactable item to navigate a user via the bottom app bar or navigation rail. From 3015b768c66230d849322affa914ab56e9d43d0d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 27 May 2025 10:40:24 -0400 Subject: [PATCH 12/34] [deps]: Update org.jetbrains.kotlinx:kotlinx-collections-immutable to v0.4.0 (#5265) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f18a12ccb2..d0cb7d0c86 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -40,7 +40,7 @@ junit5 = "5.12.2" jvmTarget = "17" # kotlin and ksp **must** use compatible versions, do not update either without the other. kotlin = "2.1.21" -kotlinxCollectionsImmutable = "0.3.8" +kotlinxCollectionsImmutable = "0.4.0" kotlinxCoroutines = "1.10.2" kotlinxSerialization = "1.8.1" kotlinxKover = "0.9.1" From e553d7a01585cb904b089a8c6bea07685943056f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 27 May 2025 09:54:55 -0500 Subject: [PATCH 13/34] [deps]: Lock file maintenance (#5267) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 211b33de60..c40257f1d1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -10,18 +10,18 @@ GEM artifactory (3.0.17) atomos (0.1.3) aws-eventstream (1.3.2) - aws-partitions (1.1102.0) - aws-sdk-core (3.223.0) + aws-partitions (1.1107.0) + aws-sdk-core (3.224.0) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.992.0) aws-sigv4 (~> 1.9) base64 jmespath (~> 1, >= 1.6.1) logger - aws-sdk-kms (1.100.0) + aws-sdk-kms (1.101.0) aws-sdk-core (~> 3, >= 3.216.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.185.0) + aws-sdk-s3 (1.186.1) aws-sdk-core (~> 3, >= 3.216.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) @@ -165,7 +165,7 @@ GEM httpclient (2.9.0) mutex_m jmespath (1.6.2) - json (2.11.3) + json (2.12.2) jwt (2.10.1) base64 logger (1.7.0) From 3908827a14b26161c47778d3ba0b205e7195409a Mon Sep 17 00:00:00 2001 From: David Perez Date: Tue, 27 May 2025 10:21:19 -0500 Subject: [PATCH 14/34] PM-17660: Improve the way we remember the annotated string (#5257) --- .../feature/checkemail/CheckEmailScreen.kt | 20 +++---- .../createaccount/CreateAccountScreen.kt | 22 ++++---- .../MasterPasswordGuidanceScreen.kt | 15 +++-- .../StartRegistrationScreen.kt | 32 +++++------ .../components/text/BitwardenHyperTextLink.kt | 16 +++--- .../importlogins/ImportLoginsScreen.kt | 47 +++++++++------- .../components/ImportLoginsInstructionStep.kt | 9 +-- .../feature/qrcodescan/QrCodeScanScreen.kt | 16 +++--- .../feature/settings/SettingsScreen.kt | 26 ++++----- .../ui/platform/base/util/SpanStyleUtil.kt | 38 +++++++++++++ .../platform/base/util/StringResExtensions.kt | 56 +++++++------------ .../ui/platform/base/util/StringUtil.kt | 36 ++++++++++++ 12 files changed, 202 insertions(+), 131 deletions(-) create mode 100644 ui/src/main/kotlin/com/bitwarden/ui/platform/base/util/StringUtil.kt diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/checkemail/CheckEmailScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/checkemail/CheckEmailScreen.kt index 83f5d47b70..621838fda9 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/checkemail/CheckEmailScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/checkemail/CheckEmailScreen.kt @@ -31,8 +31,8 @@ import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect +import com.bitwarden.ui.platform.base.util.annotatedStringResource import com.bitwarden.ui.platform.base.util.standardHorizontalMargin -import com.bitwarden.ui.platform.base.util.toAnnotatedString import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R @@ -136,16 +136,16 @@ private fun CheckEmailContent( ) Spacer(modifier = Modifier.height(8.dp)) - val descriptionAnnotatedString = R.string.we_sent_an_email_to.toAnnotatedString( - args = arrayOf(email), - emphasisHighlightStyle = SpanStyle( - color = BitwardenTheme.colorScheme.text.primary, - fontSize = BitwardenTheme.typography.bodyMedium.fontSize, - fontWeight = FontWeight.Bold, - ), - ) Text( - text = descriptionAnnotatedString, + text = annotatedStringResource( + id = R.string.we_sent_an_email_to, + args = arrayOf(email), + emphasisHighlightStyle = SpanStyle( + color = BitwardenTheme.colorScheme.text.primary, + fontSize = BitwardenTheme.typography.bodyMedium.fontSize, + fontWeight = FontWeight.Bold, + ), + ), textAlign = TextAlign.Center, style = BitwardenTheme.typography.bodyMedium, modifier = Modifier diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/createaccount/CreateAccountScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/createaccount/CreateAccountScreen.kt index 7debaf7003..6c7c734c02 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/createaccount/CreateAccountScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/createaccount/CreateAccountScreen.kt @@ -27,15 +27,14 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.CustomAccessibilityAction import androidx.compose.ui.semantics.customActions import androidx.compose.ui.semantics.semantics -import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp import androidx.core.net.toUri import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect +import com.bitwarden.ui.platform.base.util.annotatedStringResource import com.bitwarden.ui.platform.base.util.standardHorizontalMargin -import com.bitwarden.ui.platform.base.util.toAnnotatedString import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.bitwarden.ui.platform.theme.BitwardenTheme @@ -296,14 +295,6 @@ private fun TermsAndPrivacySwitch( ) { val strTerms = stringResource(id = R.string.terms_of_service) val strPrivacy = stringResource(id = R.string.privacy_policy) - val annotatedLinkString: AnnotatedString = R.string - .by_activating_this_switch_you_agree_to_the_terms_of_service_and_privacy_policy - .toAnnotatedString { - when (it) { - "termsOfService" -> onTermsClick() - "privacyPolicy" -> onPrivacyPolicyClick() - } - } BitwardenSwitch( modifier = modifier.semantics(mergeDescendants = true) { customActions = listOf( @@ -323,7 +314,16 @@ private fun TermsAndPrivacySwitch( ), ) }, - label = annotatedLinkString, + label = annotatedStringResource( + id = R.string + .by_activating_this_switch_you_agree_to_the_terms_of_service_and_privacy_policy, + onAnnotationClick = { + when (it) { + "termsOfService" -> onTermsClick() + "privacyPolicy" -> onPrivacyPolicyClick() + } + }, + ), isChecked = isChecked, contentDescription = "AcceptPoliciesToggle", onCheckedChange = onCheckedChange, diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/masterpasswordguidance/MasterPasswordGuidanceScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/masterpasswordguidance/MasterPasswordGuidanceScreen.kt index ecb036f5ea..bd12795948 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/masterpasswordguidance/MasterPasswordGuidanceScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/masterpasswordguidance/MasterPasswordGuidanceScreen.kt @@ -23,6 +23,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import com.bitwarden.ui.platform.base.util.EventsEffect +import com.bitwarden.ui.platform.base.util.annotatedStringResource import com.bitwarden.ui.platform.base.util.standardHorizontalMargin import com.bitwarden.ui.platform.base.util.toAnnotatedString import com.bitwarden.ui.platform.components.util.rememberVectorPainter @@ -137,20 +138,24 @@ private fun MasterPasswordGuidanceContentBlocks(modifier: Modifier = Modifier) { ContentBlockData( headerText = stringResource(R.string.choose_three_or_four_random_words) .toAnnotatedString(), - subtitleText = R.string.pick_three_or_four_random_unrelated_words.toAnnotatedString(), + subtitleText = annotatedStringResource( + id = R.string.pick_three_or_four_random_unrelated_words, + ), iconVectorResource = R.drawable.ic_number1, ), ContentBlockData( headerText = stringResource(R.string.combine_those_words_together) .toAnnotatedString(), - subtitleText = R.string.put_the_words_together_in_any_order_to_form_your_passphrase - .toAnnotatedString(), + subtitleText = annotatedStringResource( + id = R.string.put_the_words_together_in_any_order_to_form_your_passphrase, + ), iconVectorResource = R.drawable.ic_number2, ), ContentBlockData( headerText = stringResource(R.string.make_it_yours).toAnnotatedString(), - subtitleText = R.string.add_a_number_or_symbol_to_make_it_even_stronger - .toAnnotatedString(), + subtitleText = annotatedStringResource( + id = R.string.add_a_number_or_symbol_to_make_it_even_stronger, + ), iconVectorResource = R.drawable.ic_number3, ), ), diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/startregistration/StartRegistrationScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/startregistration/StartRegistrationScreen.kt index 4fa5675529..b2eadce915 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/startregistration/StartRegistrationScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/startregistration/StartRegistrationScreen.kt @@ -32,7 +32,6 @@ import androidx.compose.ui.semantics.CustomAccessibilityAction import androidx.compose.ui.semantics.customActions import androidx.compose.ui.semantics.semantics import androidx.compose.ui.semantics.testTag -import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview @@ -43,8 +42,8 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.data.repository.model.Environment import com.bitwarden.ui.platform.base.util.EventsEffect +import com.bitwarden.ui.platform.base.util.annotatedStringResource import com.bitwarden.ui.platform.base.util.standardHorizontalMargin -import com.bitwarden.ui.platform.base.util.toAnnotatedString import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.bitwarden.ui.platform.theme.BitwardenTheme @@ -293,13 +292,6 @@ private fun TermsAndPrivacyText( ) { val strTerms = stringResource(id = R.string.terms_of_service) val strPrivacy = stringResource(id = R.string.privacy_policy) - val annotatedLinkString: AnnotatedString = - R.string.by_continuing_you_agree_to_the_terms_of_service_and_privacy_policy.toAnnotatedString { - when (it) { - "termsOfService" -> onTermsClick() - "privacyPolicy" -> onPrivacyPolicyClick() - } - } Row( horizontalArrangement = Arrangement.Start, verticalAlignment = Alignment.CenterVertically, @@ -327,7 +319,15 @@ private fun TermsAndPrivacyText( .fillMaxWidth(), ) { Text( - text = annotatedLinkString, + text = annotatedStringResource( + id = R.string.by_continuing_you_agree_to_the_terms_of_service_and_privacy_policy, + onAnnotationClick = { + when (it) { + "termsOfService" -> onTermsClick() + "privacyPolicy" -> onPrivacyPolicyClick() + } + }, + ), style = BitwardenTheme.typography.bodyMedium.copy( textAlign = TextAlign.Center, ), @@ -356,14 +356,14 @@ private fun ReceiveMarketingEmailsSwitch( }, ), ) - }, - label = R.string.get_emails_from_bitwarden_for_announcements_advices_and_research_opportunities_unsubscribe_any_time - .toAnnotatedString { - onUnsubscribeClick() - }, + } + .testTag(tag = "ReceiveMarketingEmailsToggle"), + label = annotatedStringResource( + id = R.string.get_emails_from_bitwarden_for_announcements_advices_and_research_opportunities_unsubscribe_any_time, + onAnnotationClick = { onUnsubscribeClick() }, + ), isChecked = isChecked, onCheckedChange = onCheckedChange, - contentDescription = "ReceiveMarketingEmailsToggle", cardStyle = CardStyle.Full, ) } diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/text/BitwardenHyperTextLink.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/text/BitwardenHyperTextLink.kt index 13bbfa26fe..61f065b44e 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/text/BitwardenHyperTextLink.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/text/BitwardenHyperTextLink.kt @@ -10,8 +10,8 @@ import androidx.compose.ui.semantics.customActions import androidx.compose.ui.semantics.semantics import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.style.TextAlign +import com.bitwarden.ui.platform.base.util.annotatedStringResource import com.bitwarden.ui.platform.base.util.spanStyleOf -import com.bitwarden.ui.platform.base.util.toAnnotatedString import com.bitwarden.ui.platform.theme.BitwardenTheme /** @@ -31,14 +31,16 @@ fun BitwardenHyperTextLink( color: Color = BitwardenTheme.colorScheme.text.secondary, ) { Text( - text = annotatedResId.toAnnotatedString( + text = annotatedStringResource( + id = annotatedResId, args = args, style = spanStyleOf(color = color, textStyle = style), - ) { key -> - when (key) { - annotationKey -> onClick() - } - }, + onAnnotationClick = { key -> + when (key) { + annotationKey -> onClick() + } + }, + ), style = style, color = color, textAlign = TextAlign.Center, diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsScreen.kt index 8b7d58f6f5..808b0e331f 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsScreen.kt @@ -39,6 +39,7 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.annotation.OmitFromCoverage import com.bitwarden.ui.platform.base.util.EventsEffect +import com.bitwarden.ui.platform.base.util.annotatedStringResource import com.bitwarden.ui.platform.base.util.bitwardenBoldSpanStyle import com.bitwarden.ui.platform.base.util.standardHorizontalMargin import com.bitwarden.ui.platform.base.util.toAnnotatedString @@ -286,13 +287,15 @@ private fun ImportLoginsStepOneContent( onHelpClick: () -> Unit, modifier: Modifier = Modifier, ) { - val instruction1 = - R.string.on_your_computer_log_in_to_your_current_browser_or_password_manager.toAnnotatedString() - val instruction2 = - R.string.export_your_passwords_this_option_is_usually_found_in_your_settings.toAnnotatedString() - val instruction3 = - R.string.save_the_exported_file_somewhere_on_your_computer_you_can_find_easily - .toAnnotatedString() + val instruction1 = annotatedStringResource( + id = R.string.on_your_computer_log_in_to_your_current_browser_or_password_manager, + ) + val instruction2 = annotatedStringResource( + id = R.string.export_your_passwords_this_option_is_usually_found_in_your_settings, + ) + val instruction3 = annotatedStringResource( + id = R.string.save_the_exported_file_somewhere_on_your_computer_you_can_find_easily, + ) ImportLoginsInstructionStep( stepText = stringResource(R.string.step_1_of_3), stepTitle = stringResource(R.string.export_your_saved_logins), @@ -329,11 +332,10 @@ private fun ImportLoginsStepTwoContent( onHelpClick: () -> Unit, modifier: Modifier = Modifier, ) { - val instruction1 = - R.string.on_your_computer_open_a_new_browser_tab_and_go_to_vault_bitwarden_com - .toAnnotatedString( - vaultUrl, - ) + val instruction1 = annotatedStringResource( + id = R.string.on_your_computer_open_a_new_browser_tab_and_go_to_vault_bitwarden_com, + args = arrayOf(vaultUrl), + ) val instruction2Text = stringResource(R.string.log_in_to_the_bitwarden_web_app) val instruction2 = buildAnnotatedString { withStyle(bitwardenBoldSpanStyle) { @@ -370,15 +372,18 @@ private fun ImportLoginsStepThreeContent( onHelpClick: () -> Unit, modifier: Modifier = Modifier, ) { - val instruction1 = - R.string.in_the_bitwarden_navigation_find_the_tools_option_and_select_import_data - .toAnnotatedString() - val instruction2 = R.string.fill_out_the_form_and_import_your_saved_password_file - .toAnnotatedString() - val instruction3 = R.string.select_import_data_in_the_web_app_then_done_to_finish_syncing - .toAnnotatedString() - val instruction4 = R.string.for_your_security_be_sure_to_delete_your_saved_password_file - .toAnnotatedString() + val instruction1 = annotatedStringResource( + id = R.string.in_the_bitwarden_navigation_find_the_tools_option_and_select_import_data, + ) + val instruction2 = annotatedStringResource( + id = R.string.fill_out_the_form_and_import_your_saved_password_file, + ) + val instruction3 = annotatedStringResource( + id = R.string.select_import_data_in_the_web_app_then_done_to_finish_syncing, + ) + val instruction4 = annotatedStringResource( + id = R.string.for_your_security_be_sure_to_delete_your_saved_password_file, + ) ImportLoginsInstructionStep( stepText = stringResource(R.string.step_3_of_3), stepTitle = stringResource(R.string.import_logins_to_bitwarden), diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/importlogins/components/ImportLoginsInstructionStep.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/importlogins/components/ImportLoginsInstructionStep.kt index 4101a5df61..caa26e1ed1 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/importlogins/components/ImportLoginsInstructionStep.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/importlogins/components/ImportLoginsInstructionStep.kt @@ -19,6 +19,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.withStyle import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import com.bitwarden.ui.platform.base.util.annotatedStringResource import com.bitwarden.ui.platform.base.util.standardHorizontalMargin import com.bitwarden.ui.platform.base.util.toAnnotatedString import com.bitwarden.ui.platform.theme.BitwardenTheme @@ -66,10 +67,10 @@ fun ImportLoginsInstructionStep( ) Spacer(Modifier.height(24.dp)) Text( - text = R.string.need_help_check_out_import_help - .toAnnotatedString { - onHelpClick() - }, + text = annotatedStringResource( + id = R.string.need_help_check_out_import_help, + onAnnotationClick = { onHelpClick() }, + ), style = BitwardenTheme.typography.bodySmall, color = BitwardenTheme.colorScheme.text.secondary, modifier = Modifier.standardHorizontalMargin(), diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/qrcodescan/QrCodeScanScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/qrcodescan/QrCodeScanScreen.kt index d5cf814b6b..bbef2a37c9 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/qrcodescan/QrCodeScanScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/qrcodescan/QrCodeScanScreen.kt @@ -52,7 +52,7 @@ import androidx.core.content.ContextCompat import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.LocalLifecycleOwner import com.bitwarden.ui.platform.base.util.EventsEffect -import com.bitwarden.ui.platform.base.util.toAnnotatedString +import com.bitwarden.ui.platform.base.util.annotatedStringResource import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.bitwarden.ui.platform.model.WindowSize import com.bitwarden.ui.platform.theme.BitwardenTheme @@ -411,13 +411,15 @@ private fun EnterKeyManuallyText( modifier: Modifier = Modifier, ) { val enterKeyManuallyString = stringResource(R.string.enter_key_manually) - val annotatedLinkString = R.string.cannot_scan_qr_code_enter_key_manually.toAnnotatedString { - when (it) { - "enterKeyManually" -> onEnterKeyManuallyClick() - } - } Text( - text = annotatedLinkString, + text = annotatedStringResource( + id = R.string.cannot_scan_qr_code_enter_key_manually, + onAnnotationClick = { + when (it) { + "enterKeyManually" -> onEnterKeyManuallyClick() + } + }, + ), style = BitwardenTheme.typography.bodySmall, color = Color.White, textAlign = TextAlign.Center, diff --git a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/settings/SettingsScreen.kt b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/settings/SettingsScreen.kt index f254c18c3a..46fd1e5ed3 100644 --- a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/settings/SettingsScreen.kt +++ b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/settings/SettingsScreen.kt @@ -64,9 +64,9 @@ import com.bitwarden.authenticator.ui.platform.manager.intent.IntentManager import com.bitwarden.authenticator.ui.platform.theme.AuthenticatorTheme import com.bitwarden.authenticator.ui.platform.util.displayLabel import com.bitwarden.ui.platform.base.util.EventsEffect +import com.bitwarden.ui.platform.base.util.annotatedStringResource import com.bitwarden.ui.platform.base.util.mirrorIfRtl import com.bitwarden.ui.platform.base.util.spanStyleOf -import com.bitwarden.ui.platform.base.util.toAnnotatedString import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.bitwarden.ui.platform.feature.settings.appearance.model.AppTheme import com.bitwarden.ui.util.Text @@ -349,22 +349,22 @@ private fun VaultSettings( Spacer(modifier = Modifier.height(8.dp)) BitwardenTextRow( text = stringResource(id = R.string.sync_with_bitwarden_app), - description = R.string - .this_feature_is_not_not_yet_available_for_self_hosted_users - .toAnnotatedString( - style = spanStyleOf( - color = MaterialTheme.colorScheme.onSurfaceVariant, - textStyle = MaterialTheme.typography.bodyMedium, - ), - linkHighlightStyle = spanStyleOf( - color = MaterialTheme.colorScheme.primary, - textStyle = MaterialTheme.typography.labelLarge, - ), - ) { + description = annotatedStringResource( + id = R.string.this_feature_is_not_not_yet_available_for_self_hosted_users, + style = spanStyleOf( + color = MaterialTheme.colorScheme.onSurfaceVariant, + textStyle = MaterialTheme.typography.bodyMedium, + ), + linkHighlightStyle = spanStyleOf( + color = MaterialTheme.colorScheme.primary, + textStyle = MaterialTheme.typography.labelLarge, + ), + onAnnotationClick = { when (it) { "learnMore" -> onSyncLearnMoreClick() } }, + ), onClick = onSyncWithBitwardenClick, modifier = modifier, withDivider = true, diff --git a/ui/src/main/kotlin/com/bitwarden/ui/platform/base/util/SpanStyleUtil.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/base/util/SpanStyleUtil.kt index d2eaebcbc5..cbb4918f02 100644 --- a/ui/src/main/kotlin/com/bitwarden/ui/platform/base/util/SpanStyleUtil.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/base/util/SpanStyleUtil.kt @@ -1,8 +1,11 @@ package com.bitwarden.ui.platform.base.util +import androidx.compose.runtime.Composable +import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.TextStyle +import com.bitwarden.ui.platform.theme.BitwardenTheme /** * Creates a new [SpanStyle] from the specified [color] and [textStyle]. @@ -29,3 +32,38 @@ fun spanStyleOf( platformStyle = textStyle.platformStyle?.spanStyle, drawStyle = textStyle.drawStyle, ) + +/** + * A [SpanStyle] representing "regular" text using the text primary color and label medium font. + */ +val bitwardenDefaultSpanStyle: SpanStyle + @Composable + @ReadOnlyComposable + get() = spanStyleOf( + color = BitwardenTheme.colorScheme.text.primary, + textStyle = BitwardenTheme.typography.labelMedium, + ) + +/** + * A [SpanStyle] representing "bold" text using the text primary color and body medium emphasis + * font. + */ +val bitwardenBoldSpanStyle: SpanStyle + @Composable + @ReadOnlyComposable + get() = spanStyleOf( + color = BitwardenTheme.colorScheme.text.primary, + textStyle = BitwardenTheme.typography.bodyMediumEmphasis, + ) + +/** + * A [SpanStyle] representing "clickable" text using the text interaction color and label medium + * font. + */ +val bitwardenClickableTextSpanStyle: SpanStyle + @Composable + @ReadOnlyComposable + get() = spanStyleOf( + color = BitwardenTheme.colorScheme.text.interaction, + textStyle = BitwardenTheme.typography.labelMedium, + ) diff --git a/ui/src/main/kotlin/com/bitwarden/ui/platform/base/util/StringResExtensions.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/base/util/StringResExtensions.kt index 08501c4537..1ee9e5dbd6 100644 --- a/ui/src/main/kotlin/com/bitwarden/ui/platform/base/util/StringResExtensions.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/base/util/StringResExtensions.kt @@ -1,24 +1,23 @@ package com.bitwarden.ui.platform.base.util +import android.content.res.Resources import android.text.Annotation import android.text.SpannableStringBuilder import android.text.SpannedString import androidx.annotation.StringRes import androidx.compose.runtime.Composable -import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.LinkAnnotation import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.TextLinkStyles import androidx.core.text.getSpans -import com.bitwarden.ui.platform.theme.BitwardenTheme /** * Creates an [AnnotatedString] from a string resource allowing for optional arguments * to be applied. + * * @param args Optional arguments to be applied to the string resource, must already be a * [String] * @param style Style to apply to the entire string @@ -26,6 +25,7 @@ import com.bitwarden.ui.platform.theme.BitwardenTheme * with the "emphasis" annotation. * @param linkHighlightStyle Style to apply to part of the resource that has been annotated with * the "link" annotation. + * @param resources The resources used to access the strings. * @param onAnnotationClick Callback to invoke when a link annotation is clicked. Will pass back * the value of the annotation as a string to allow for delineation if there are multiple callbacks * to be applied. @@ -45,22 +45,28 @@ import com.bitwarden.ui.platform.theme.BitwardenTheme * following custom XML tag: where the value is the index of the argument, * starting at 0. */ -@Suppress("LongMethod") @Composable fun @receiver:StringRes Int.toAnnotatedString( - vararg args: String, + vararg args: CharSequence, style: SpanStyle = bitwardenDefaultSpanStyle, emphasisHighlightStyle: SpanStyle = bitwardenBoldSpanStyle, linkHighlightStyle: SpanStyle = bitwardenClickableTextSpanStyle, + resources: Resources = LocalContext.current.resources, onAnnotationClick: ((annotationKey: String) -> Unit)? = null, -): AnnotatedString { - val resources = LocalContext.current.resources +): AnnotatedString = remember( + this, + args, + style, + emphasisHighlightStyle, + linkHighlightStyle, + onAnnotationClick, +) { // The spannableBuilder is used to help parse through the annotations in the string resource. val spannableBuilder = try { SpannableStringBuilder(resources.getText(this) as SpannedString) - } catch (e: ClassCastException) { + } catch (_: ClassCastException) { // the resource did not contain and valid spans so we just return the raw string. - return stringResource(id = this, *args).toAnnotatedString() + return@remember resources.getString(this, *args).toAnnotatedString() } // Replace any format arguments with the provided arguments. spannableBuilder.applyArgAnnotations(args = args) @@ -101,7 +107,7 @@ fun @receiver:StringRes Int.toAnnotatedString( onAnnotationClick?.invoke(annotation.value.orEmpty()) } annotatedStringBuilder.addLink( - link, + clickable = link, start = start, end = end, ) @@ -110,7 +116,7 @@ fun @receiver:StringRes Int.toAnnotatedString( ValidAnnotationType.ARG -> Unit } } - return remember { annotatedStringBuilder.toAnnotatedString() } + return@remember annotatedStringBuilder.toAnnotatedString() } /** @@ -118,7 +124,7 @@ fun @receiver:StringRes Int.toAnnotatedString( * replaced with the index value in the provided [args]. */ private fun SpannableStringBuilder.applyArgAnnotations( - vararg args: String, + vararg args: CharSequence, ) { val argAnnotations = getSpans() .filter { it.isArgAnnotation() } @@ -127,7 +133,7 @@ private fun SpannableStringBuilder.applyArgAnnotations( val spanStart = getSpanStart(annotation).takeIf { it >= 0 } ?: continue val argIndex = Integer.parseInt(annotation.value) // if no string is available just replace it with an empty string. - val replacementString = args.getOrNull(argIndex).orEmpty() + val replacementString = args.getOrNull(index = argIndex) ?: "" this.replace( spanStart, this.getSpanEnd(annotation), @@ -148,27 +154,3 @@ private enum class ValidAnnotationType { private fun Annotation.isArgAnnotation(): Boolean = this.key.uppercase() == ValidAnnotationType.ARG.name - -val bitwardenDefaultSpanStyle: SpanStyle - @Composable - @ReadOnlyComposable - get() = spanStyleOf( - color = BitwardenTheme.colorScheme.text.primary, - textStyle = BitwardenTheme.typography.labelMedium, - ) - -val bitwardenBoldSpanStyle: SpanStyle - @Composable - @ReadOnlyComposable - get() = spanStyleOf( - color = BitwardenTheme.colorScheme.text.primary, - textStyle = BitwardenTheme.typography.bodyMediumEmphasis, - ) - -val bitwardenClickableTextSpanStyle: SpanStyle - @Composable - @ReadOnlyComposable - get() = spanStyleOf( - color = BitwardenTheme.colorScheme.text.interaction, - textStyle = BitwardenTheme.typography.labelMedium, - ) diff --git a/ui/src/main/kotlin/com/bitwarden/ui/platform/base/util/StringUtil.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/base/util/StringUtil.kt new file mode 100644 index 0000000000..8fe351b5b2 --- /dev/null +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/base/util/StringUtil.kt @@ -0,0 +1,36 @@ +@file:OmitFromCoverage + +package com.bitwarden.ui.platform.base.util + +import android.content.res.Resources +import androidx.annotation.StringRes +import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.SpanStyle +import com.bitwarden.annotation.OmitFromCoverage + +/** + * Creates an [AnnotatedString] from a string from a resource and allows for optional arguments + * to be applied. + * + * @see Int.toAnnotatedString + */ +@Composable +fun annotatedStringResource( + @StringRes id: Int, + vararg args: String, + style: SpanStyle = bitwardenDefaultSpanStyle, + emphasisHighlightStyle: SpanStyle = bitwardenBoldSpanStyle, + linkHighlightStyle: SpanStyle = bitwardenClickableTextSpanStyle, + resources: Resources = LocalContext.current.resources, + onAnnotationClick: ((annotationKey: String) -> Unit)? = null, +): AnnotatedString = + id.toAnnotatedString( + args = args, + style = style, + emphasisHighlightStyle = emphasisHighlightStyle, + linkHighlightStyle = linkHighlightStyle, + resources = resources, + onAnnotationClick = onAnnotationClick, + ) From 61411ca73c62eb2dc2c0cb2f9e0ef331a49cb5b1 Mon Sep 17 00:00:00 2001 From: David Perez Date: Tue, 27 May 2025 11:16:50 -0500 Subject: [PATCH 15/34] Update Compose BOM to 2025.05.01 (#5269) --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d0cb7d0c86..4fec70dd66 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,7 +13,7 @@ androidxActivity = "1.10.1" androidXBiometrics = "1.2.0-alpha05" androidxBrowser = "1.8.0" androidxCamera = "1.4.2" -androidxComposeBom = "2025.05.00" +androidxComposeBom = "2025.05.01" androidxCore = "1.16.0" androidxCredentials = "1.5.0" androidxHiltNavigationCompose = "1.2.0" From 6b12b9757f13660afe43569419068dcab8c3af2b Mon Sep 17 00:00:00 2001 From: Patrick Honkonen <1883101+SaintPatrck@users.noreply.github.com> Date: Tue, 27 May 2025 17:28:12 -0400 Subject: [PATCH 16/34] [PM-17686] Correct body text for "Replace existing certificate" dialog (#5270) --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fe384b83f3..9ae0393ba6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1263,7 +1263,7 @@ Do you want to switch to this account? Log deleted App settings Replace existing certificate? - A certificate with this alias \"%s\" already exists. Do you want to replace it?\nReplace the certificate may impact your connection to any environments currently using it. + A certificate with the alias \"%s\" already exists. Do you want to replace it?\nReplacing the certificate may impact your connection to any environments currently using it. Replace certificate Unable to read certificate. Cannot delete your account From b9a897a9fc6cb5ff3ff8c849b91e2a0af7fe1a5b Mon Sep 17 00:00:00 2001 From: David Perez Date: Tue, 27 May 2025 16:49:17 -0500 Subject: [PATCH 17/34] Update Firebase BOM to v33.14.0 (#5272) --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4fec70dd66..7aad34d0b7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -28,7 +28,7 @@ androidxWork = "2.10.1" bitwardenSdk = "1.0.0-20250418.073303-151" crashlytics = "3.0.3" detekt = "1.23.8" -firebaseBom = "33.13.0" +firebaseBom = "33.14.0" glide = "1.0.0-beta01" googleGuava = "33.4.0-jre" googleProtoBufJava = "4.30.2" From 294ef674bceee4771742bbc6ba50e9b23d4df38a Mon Sep 17 00:00:00 2001 From: David Perez Date: Tue, 27 May 2025 16:49:57 -0500 Subject: [PATCH 18/34] PM-13040: Add known username field for the Disney Plus App (#5271) --- .../autofill/accessibility/util/KnownUsernameFieldUtil.kt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/accessibility/util/KnownUsernameFieldUtil.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/accessibility/util/KnownUsernameFieldUtil.kt index 6e2f057977..b43f061d4d 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/accessibility/util/KnownUsernameFieldUtil.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/accessibility/util/KnownUsernameFieldUtil.kt @@ -187,6 +187,14 @@ private val LEGACY_KNOWN_USERNAME_FIELDS: List = listOf( uriAuthority = "bitly.com", accessOption = AccessOptions(matchValue = "/sso/url_slug", usernameViewId = "url_slug"), ), + KnownUsernameField( + uriAuthority = "com.disney.disneyplus", + accessOption = AccessOptions( + matchValue = "", + matchingStrategy = AccessOptions.MatchingStrategy.CONTAINS_CASE_SENSITIVE, + usernameViewId = "editFieldEditText", + ), + ), KnownUsernameField( uriAuthority = "signin.befr.ebay.be", accessOptions = listOf( From bdd0660e2bd94e2f67bdbed96e65e356cd789e62 Mon Sep 17 00:00:00 2001 From: David Perez Date: Wed, 28 May 2025 10:27:28 -0500 Subject: [PATCH 19/34] PM-21134: Fix send link title (#5275) --- .../bitwarden/ui/tools/feature/send/viewsend/ViewSendScreen.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/viewsend/ViewSendScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/viewsend/ViewSendScreen.kt index 83e5d52ac7..40e363f9ee 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/viewsend/ViewSendScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/viewsend/ViewSendScreen.kt @@ -375,7 +375,7 @@ private fun ShareLinkSection( ), ) { Text( - text = stringResource(id = R.string.share_link), + text = stringResource(id = R.string.send_link), style = BitwardenTheme.typography.titleSmall, color = BitwardenTheme.colorScheme.text.primary, overflow = TextOverflow.Ellipsis, From cf8578f3ef913d1092d2e6c98ae3c14c964f11f9 Mon Sep 17 00:00:00 2001 From: David Perez Date: Wed, 28 May 2025 13:14:26 -0500 Subject: [PATCH 20/34] PM-21135: Fix view send field order (#5277) --- .../feature/send/viewsend/ViewSendScreen.kt | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/viewsend/ViewSendScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/viewsend/ViewSendScreen.kt index 40e363f9ee..3892b4b4ff 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/viewsend/ViewSendScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/viewsend/ViewSendScreen.kt @@ -272,6 +272,17 @@ private fun ViewStateContent( .padding(horizontal = 16.dp), ) Spacer(modifier = Modifier.height(height = 8.dp)) + BitwardenTextField( + label = stringResource(id = R.string.send_name_required), + value = state.sendName, + onValueChange = {}, + readOnly = true, + cardStyle = CardStyle.Full, + modifier = Modifier + .fillMaxWidth() + .standardHorizontalMargin(), + ) + Spacer(modifier = Modifier.height(height = 8.dp)) when (val sendType = state.sendType) { is ViewSendState.ViewState.Content.SendType.FileType -> { FileSendContent( @@ -293,18 +304,6 @@ private fun ViewStateContent( } Spacer(modifier = Modifier.height(height = 8.dp)) - BitwardenTextField( - label = stringResource(id = R.string.send_name_required), - value = state.sendName, - onValueChange = {}, - readOnly = true, - cardStyle = CardStyle.Full, - modifier = Modifier - .fillMaxWidth() - .standardHorizontalMargin(), - ) - Spacer(modifier = Modifier.height(height = 8.dp)) - BitwardenTextField( label = stringResource(id = R.string.deletion_date), value = state.deletionDate, From a4e4d1488b1b43f8184addd8c1f227672fbd8c70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Bispo?= Date: Thu, 29 May 2025 15:16:05 +0100 Subject: [PATCH 21/34] [PM-21577] Fix delete button not showing bug (#5276) --- .../feature/util/CollectionViewExtensions.kt | 27 ++++++++----------- .../util/CollectionViewExtensionsTest.kt | 20 +++++++++++++- 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/util/CollectionViewExtensions.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/util/CollectionViewExtensions.kt index 223ffe1946..9e4c18374d 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/util/CollectionViewExtensions.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/util/CollectionViewExtensions.kt @@ -102,24 +102,19 @@ fun List?.hasDeletePermissionInAtLeastOneCollection( needsManagePermission: Boolean = false, ): Boolean { if (this.isNullOrEmpty() || collectionIds.isNullOrEmpty()) return true - return this - .any { collectionView -> - collectionIds - .contains(collectionView.id) - .let { isInCollection -> - if (!isInCollection) { - return false - } - if (needsManagePermission) { - return collectionView.manage - } - - return collectionView.manage || - collectionView.permission == CollectionPermission.EDIT || - collectionView.permission == CollectionPermission.EDIT_EXCEPT_PASSWORD - } + val collectionViews = this.filter { it.id in collectionIds } + return if (collectionViews.isEmpty()) { + false + } else if (needsManagePermission) { + collectionViews.any { it.manage } + } else { + collectionViews.any { + it.manage || + it.permission == CollectionPermission.EDIT || + it.permission == CollectionPermission.EDIT_EXCEPT_PASSWORD } + } } /** diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/util/CollectionViewExtensionsTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/util/CollectionViewExtensionsTest.kt index a379afe47b..afc405ab39 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/util/CollectionViewExtensionsTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/util/CollectionViewExtensionsTest.kt @@ -79,10 +79,10 @@ class CollectionViewExtensionsTest { @Test fun `hasDeletePermissionInAtLeastOneCollection should return true if the user has manage permission in at least one collection`() { val collectionList: List = listOf( + createViewCollectionView(number = 4), createManageCollectionView(number = 1), createEditCollectionView(number = 2), createEditExceptPasswordsCollectionView(number = 3), - createViewCollectionView(number = 4), createViewExceptPasswordsCollectionView(number = 5), ) @@ -183,6 +183,24 @@ class CollectionViewExtensionsTest { ) } + @Suppress("MaxLineLength") + @Test + fun `hasDeletePermissionInAtLeastOneCollection should return false if the user doesn't have any collection with edit or manage permissions`() { + val collectionList: List = listOf( + createViewCollectionView(number = 1), + createViewCollectionView(number = 2), + createViewExceptPasswordsCollectionView(number = 3), + createViewExceptPasswordsCollectionView(number = 4), + ) + val collectionIds = collectionList.mapNotNull { it.id } + assertFalse( + collectionList.hasDeletePermissionInAtLeastOneCollection( + collectionIds = collectionIds, + needsManagePermission = false, + ), + ) + } + @Suppress("MaxLineLength") @Test fun `canAssociateToCollections should return true if the user has edit and manage permission`() { From ef688797786e7aba6c3623cbb4c20e672220655d Mon Sep 17 00:00:00 2001 From: David Perez Date: Thu, 29 May 2025 09:52:15 -0500 Subject: [PATCH 22/34] Clean up lint errors and suppressions (#5281) --- app/src/main/AndroidManifest.xml | 5 +- .../com/x8bit/bitwarden/MainActivity.kt | 82 ++++++++----------- .../feature/item/util/CipherViewExtensions.kt | 5 +- app/src/main/res/values/styles.xml | 2 +- authenticator/src/main/AndroidManifest.xml | 4 +- .../ui/platform/theme/AuthenticatorTheme.kt | 4 +- 6 files changed, 47 insertions(+), 55 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f47f76b2ed..21221c8a78 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -37,14 +37,15 @@ android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" + android:intentMatchingFlags="enforceIntentFilter" android:label="@string/app_name" android:networkSecurityConfig="@xml/network_security_config" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/LaunchTheme" - android:intentMatchingFlags="enforceIntentFilter" + tools:ignore="CredentialDependency" tools:replace="appComponentFactory" - tools:targetApi="33"> + tools:targetApi="36"> - when (event) { - is MainEvent.CompleteAccessibilityAutofill -> { - handleCompleteAccessibilityAutofill(event) - } - - is MainEvent.CompleteAutofill -> handleCompleteAutofill(event) - MainEvent.Recreate -> handleRecreate() - MainEvent.NavigateToDebugMenu -> navController.navigateToDebugMenuScreen() - is MainEvent.ShowToast -> { - Toast - .makeText( - baseContext, - event.message.invoke(resources), - Toast.LENGTH_SHORT, - ) - .show() - } - - is MainEvent.UpdateAppLocale -> { - AppCompatDelegate.setApplicationLocales( - LocaleListCompat.forLanguageTags(event.localeName), - ) - } - - is MainEvent.UpdateAppTheme -> { - AppCompatDelegate.setDefaultNightMode(event.osTheme) - } - } - } + SetupEventsEffect(navController = navController) + val state by mainViewModel.stateFlow.collectAsStateWithLifecycle() updateScreenCapture(isScreenCaptureAllowed = state.isScreenCaptureAllowed) LocalManagerProvider(featureFlagsState = state.featureFlagsState) { ObserveScreenDataEffect( onDataUpdate = remember(mainViewModel) { - { - mainViewModel.trySendAction( - MainAction.ResumeScreenDataReceived(it), - ) - } + { mainViewModel.trySendAction(MainAction.ResumeScreenDataReceived(it)) } }, ) BitwardenTheme( @@ -148,11 +112,7 @@ class MainActivity : AppCompatActivity() { override fun onNewIntent(intent: Intent) { super.onNewIntent(intent) - mainViewModel.trySendAction( - action = MainAction.ReceiveNewIntent( - intent = intent, - ), - ) + mainViewModel.trySendAction(action = MainAction.ReceiveNewIntent(intent = intent)) } override fun onResume() { @@ -199,6 +159,34 @@ class MainActivity : AppCompatActivity() { .takeIf { it } ?: super.dispatchKeyEvent(event) + @Composable + private fun SetupEventsEffect(navController: NavController) { + EventsEffect(viewModel = mainViewModel) { event -> + when (event) { + is MainEvent.CompleteAccessibilityAutofill -> { + handleCompleteAccessibilityAutofill(event) + } + + is MainEvent.CompleteAutofill -> handleCompleteAutofill(event) + MainEvent.Recreate -> handleRecreate() + MainEvent.NavigateToDebugMenu -> navController.navigateToDebugMenuScreen() + is MainEvent.ShowToast -> { + Toast + .makeText(baseContext, event.message.invoke(resources), Toast.LENGTH_SHORT) + .show() + } + + is MainEvent.UpdateAppLocale -> { + AppCompatDelegate.setApplicationLocales( + LocaleListCompat.forLanguageTags(event.localeName), + ) + } + + is MainEvent.UpdateAppTheme -> AppCompatDelegate.setDefaultNightMode(event.osTheme) + } + } + } + private fun sendOpenDebugMenuEvent() { mainViewModel.trySendAction(MainAction.OpenDebugMenu) } diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/util/CipherViewExtensions.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/util/CipherViewExtensions.kt index f46c7f2ea8..a98c3d39c4 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/util/CipherViewExtensions.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/util/CipherViewExtensions.kt @@ -28,6 +28,7 @@ import com.x8bit.bitwarden.ui.vault.model.VaultLinkedFieldType import com.x8bit.bitwarden.ui.vault.model.findVaultCardBrandWithNameOrNull import kotlinx.collections.immutable.ImmutableList import java.time.Clock +import java.util.Locale private const val LAST_UPDATED_DATE_TIME_PATTERN: String = "M/d/yy hh:mm a" private const val FIDO2_CREDENTIAL_CREATION_DATE_PATTERN: String = "M/d/yy" @@ -332,7 +333,9 @@ private val IdentityView.identityName: String? get() = listOfNotNull( title ?.lowercase() - ?.capitalize(), + ?.replaceFirstChar { + if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() + }, firstName, middleName, lastName, diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 4ae391cbeb..67cf371647 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -8,7 +8,7 @@ false true true - default + always @dimen/dialogDimBackgroundAmount diff --git a/authenticator/src/main/AndroidManifest.xml b/authenticator/src/main/AndroidManifest.xml index 3e1aa450ce..16b2c1432c 100644 --- a/authenticator/src/main/AndroidManifest.xml +++ b/authenticator/src/main/AndroidManifest.xml @@ -19,13 +19,13 @@ android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" + android:intentMatchingFlags="enforceIntentFilter" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:taskAffinity="" android:theme="@style/LaunchTheme" - android:intentMatchingFlags="enforceIntentFilter" - tools:targetApi="31"> + tools:targetApi="36"> Date: Thu, 29 May 2025 10:54:49 -0400 Subject: [PATCH 23/34] [PM-22169] Migrate app bar components to ui module (#5279) --- .../accountsetup/SetupAutofillScreen.kt | 7 +++-- .../accountsetup/SetupCompleteScreen.kt | 2 +- .../feature/accountsetup/SetupUnlockScreen.kt | 7 +++-- .../feature/checkemail/CheckEmailScreen.kt | 2 +- .../CompleteRegistrationScreen.kt | 2 +- .../createaccount/CreateAccountScreen.kt | 5 ++-- .../EnterpriseSignOnScreen.kt | 5 ++-- .../feature/environment/EnvironmentScreen.kt | 5 ++-- .../ExpiredRegistrationLinkScreen.kt | 7 +++-- .../ui/auth/feature/landing/LandingScreen.kt | 2 +- .../ui/auth/feature/login/LoginScreen.kt | 10 ++++--- .../loginwithdevice/LoginWithDeviceScreen.kt | 5 ++-- .../MasterPasswordGeneratorScreen.kt | 2 +- .../MasterPasswordGuidanceScreen.kt | 5 ++-- .../MasterPasswordHintScreen.kt | 5 ++-- .../PreventAccountLockoutScreen.kt | 5 ++-- .../removepassword/RemovePasswordScreen.kt | 2 +- .../resetpassword/ResetPasswordScreen.kt | 7 +++-- .../feature/setpassword/SetPasswordScreen.kt | 2 +- .../StartRegistrationScreen.kt | 5 ++-- .../trusteddevice/TrustedDeviceScreen.kt | 7 +++-- .../twofactorlogin/TwoFactorLoginScreen.kt | 10 ++++--- .../feature/vaultunlock/VaultUnlockScreen.kt | 7 +++-- .../bottomsheet/BitwardenModalBottomSheet.kt | 7 +++-- .../button/BitwardenTextSelectionButton.kt | 2 +- .../components/card/BitwardenActionCard.kt | 3 +- .../dialog/BitwardenDateSelectButton.kt | 4 +-- .../dialog/BitwardenTimeSelectButton.kt | 2 +- .../field/BitwardenHiddenPasswordField.kt | 2 +- .../field/BitwardenPasswordField.kt | 2 +- .../components/field/BitwardenTextField.kt | 4 +-- .../components/slider/BitwardenSlider.kt | 2 +- .../components/snackbar/BitwardenSnackbar.kt | 3 +- .../components/stepper/BitwardenStepper.kt | 2 +- .../feature/debugmenu/DebugMenuScreen.kt | 4 +-- .../platform/feature/search/SearchScreen.kt | 5 ++-- .../feature/settings/SettingsScreen.kt | 7 +++-- .../feature/settings/about/AboutScreen.kt | 2 +- .../accountsecurity/AccountSecurityScreen.kt | 2 +- .../deleteaccount/DeleteAccountScreen.kt | 5 ++-- .../DeleteAccountConfirmationScreen.kt | 5 ++-- .../loginapproval/LoginApprovalScreen.kt | 5 ++-- .../pendingrequests/PendingRequestsScreen.kt | 5 ++-- .../settings/appearance/AppearanceScreen.kt | 2 +- .../settings/autofill/AutoFillScreen.kt | 2 +- .../blockautofill/BlockAutoFillScreen.kt | 2 +- .../settings/exportvault/ExportVaultScreen.kt | 5 ++-- .../flightrecorder/FlightRecorderScreen.kt | 5 ++-- .../recordedLogs/RecordedLogsScreen.kt | 11 +++++--- .../feature/settings/folders/FoldersScreen.kt | 5 ++-- .../folders/addedit/FolderAddEditScreen.kt | 10 ++++--- .../feature/settings/other/OtherScreen.kt | 2 +- .../settings/vault/VaultSettingsScreen.kt | 2 +- .../feature/generator/GeneratorScreen.kt | 14 ++++++---- .../passwordhistory/PasswordHistoryScreen.kt | 7 +++-- .../ui/tools/feature/send/SendScreen.kt | 9 +++--- .../feature/send/addedit/AddEditSendScreen.kt | 14 ++++++---- .../feature/send/viewsend/ViewSendScreen.kt | 7 +++-- .../feature/addedit/VaultAddEditLoginItems.kt | 3 +- .../feature/addedit/VaultAddEditScreen.kt | 12 ++++---- .../feature/attachments/AttachmentsScreen.kt | 4 +-- .../importlogins/ImportLoginsScreen.kt | 7 +++-- .../ui/vault/feature/item/VaultItemScreen.kt | 10 ++++--- .../itemlisting/VaultItemListingScreen.kt | 11 ++++---- .../manualcodeentry/ManualCodeEntryScreen.kt | 5 ++-- .../VaultMoveToOrganizationScreen.kt | 5 ++-- .../feature/qrcodescan/QrCodeScanScreen.kt | 5 ++-- .../ui/vault/feature/vault/VaultScreen.kt | 11 ++++---- .../VerificationCodeScreen.kt | 9 +++--- .../feature/edititem/EditItemScreen.kt | 7 +++-- .../itemlisting/FirstTimeSyncSnackbarHost.kt | 3 +- .../feature/itemlisting/ItemListingScreen.kt | 17 +++++------ .../manualcodeentry/ManualCodeEntryScreen.kt | 7 +++-- .../feature/qrcodescan/QrCodeScanScreen.kt | 7 +++-- .../feature/search/ItemSearchScreen.kt | 6 ++-- ...Bar.kt => AuthenticatorMediumTopAppBar.kt} | 10 +++---- ...Bar.kt => AuthenticatorSearchTopAppBar.kt} | 6 ++-- ...TopAppBar.kt => AuthenticatorTopAppBar.kt} | 27 ++++++------------ ...em.kt => AuthenticatorSearchActionItem.kt} | 10 +++---- .../components/card/BitwardenActionCard.kt | 5 ++-- .../feature/debugmenu/DebugMenuScreen.kt | 6 ++-- .../feature/settings/SettingsScreen.kt | 4 +-- .../feature/settings/export/ExportScreen.kt | 7 +++-- .../settings/importing/ImportingScreen.kt | 7 +++-- .../src/main/res/drawable/ic_close.xml | 9 ------ .../src/main/res/drawable/ic_more.xml | 15 ---------- .../appbar/BitwardenMediumTopAppBar.kt | 10 +++---- .../appbar/BitwardenSearchTopAppBar.kt | 14 +++++----- .../components/appbar/BitwardenTopAppBar.kt | 15 +++++----- .../action/BitwardenOverflowActionItem.kt | 28 +++++-------------- .../action/BitwardenSearchActionItem.kt | 6 ++-- .../appbar/color/BitwardenMenuItemColors.kt | 2 +- .../appbar/color/BitwardenTopAppBarColors.kt | 2 +- .../appbar/model/OverflowMenuItemData.kt | 18 ++++++++++++ .../field/color/BitwardenTextFieldColors.kt | 2 +- .../components/model/TopAppBarDividerStyle.kt | 4 +-- .../src/main/res/drawable/ic_clear.xml | 0 .../src/main/res/drawable/ic_close.xml | 0 .../res/drawable/ic_ellipsis_vertical.xml | 0 .../src/main/res/drawable/ic_search.xml | 0 100 files changed, 326 insertions(+), 296 deletions(-) rename authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/appbar/{BitwardenMediumTopAppBar.kt => AuthenticatorMediumTopAppBar.kt} (92%) rename authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/appbar/{BitwardenSearchTopAppBar.kt => AuthenticatorSearchTopAppBar.kt} (94%) rename authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/appbar/{BitwardenTopAppBar.kt => AuthenticatorTopAppBar.kt} (87%) rename authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/appbar/action/{BitwardenSearchActionItem.kt => AuthenticatorSearchActionItem.kt} (85%) delete mode 100644 authenticator/src/main/res/drawable/ic_close.xml delete mode 100644 authenticator/src/main/res/drawable/ic_more.xml rename {app/src/main/kotlin/com/x8bit => ui/src/main/kotlin/com}/bitwarden/ui/platform/components/appbar/BitwardenMediumTopAppBar.kt (93%) rename {app/src/main/kotlin/com/x8bit => ui/src/main/kotlin/com}/bitwarden/ui/platform/components/appbar/BitwardenSearchTopAppBar.kt (89%) rename {app/src/main/kotlin/com/x8bit => ui/src/main/kotlin/com}/bitwarden/ui/platform/components/appbar/BitwardenTopAppBar.kt (94%) rename {app/src/main/kotlin/com/x8bit => ui/src/main/kotlin/com}/bitwarden/ui/platform/components/appbar/action/BitwardenOverflowActionItem.kt (84%) rename {app/src/main/kotlin/com/x8bit => ui/src/main/kotlin/com}/bitwarden/ui/platform/components/appbar/action/BitwardenSearchActionItem.kt (87%) rename {app/src/main/kotlin/com/x8bit => ui/src/main/kotlin/com}/bitwarden/ui/platform/components/appbar/color/BitwardenMenuItemColors.kt (92%) rename {app/src/main/kotlin/com/x8bit => ui/src/main/kotlin/com}/bitwarden/ui/platform/components/appbar/color/BitwardenTopAppBarColors.kt (92%) create mode 100644 ui/src/main/kotlin/com/bitwarden/ui/platform/components/appbar/model/OverflowMenuItemData.kt rename {app/src/main/kotlin/com/x8bit => ui/src/main/kotlin/com}/bitwarden/ui/platform/components/field/color/BitwardenTextFieldColors.kt (98%) rename {app/src/main/kotlin/com/x8bit => ui/src/main/kotlin/com}/bitwarden/ui/platform/components/model/TopAppBarDividerStyle.kt (55%) rename {app => ui}/src/main/res/drawable/ic_clear.xml (100%) rename {app => ui}/src/main/res/drawable/ic_close.xml (100%) rename {app => ui}/src/main/res/drawable/ic_ellipsis_vertical.xml (100%) rename {app => ui}/src/main/res/drawable/ic_search.xml (100%) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupAutofillScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupAutofillScreen.kt index c10bc3d4b2..a0aa69e9c1 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupAutofillScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupAutofillScreen.kt @@ -31,15 +31,16 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar +import com.bitwarden.ui.platform.components.appbar.NavigationIcon 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.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.appbar.BitwardenTopAppBar -import com.x8bit.bitwarden.ui.platform.components.appbar.NavigationIcon import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledButton import com.x8bit.bitwarden.ui.platform.components.button.BitwardenTextButton import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog @@ -118,7 +119,7 @@ fun SetupAutoFillScreen( null } else { NavigationIcon( - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupCompleteScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupCompleteScreen.kt index 2467b142d7..2149f90b38 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupCompleteScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupCompleteScreen.kt @@ -25,10 +25,10 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledButton import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupUnlockScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupUnlockScreen.kt index a060195176..8034e3ca4a 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupUnlockScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupUnlockScreen.kt @@ -35,15 +35,16 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar +import com.bitwarden.ui.platform.components.appbar.NavigationIcon 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.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.appbar.BitwardenTopAppBar -import com.x8bit.bitwarden.ui.platform.components.appbar.NavigationIcon import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledButton import com.x8bit.bitwarden.ui.platform.components.button.BitwardenTextButton import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog @@ -116,7 +117,7 @@ fun SetupUnlockScreen( null } else { NavigationIcon( - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/checkemail/CheckEmailScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/checkemail/CheckEmailScreen.kt index 621838fda9..6d3939a63e 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/checkemail/CheckEmailScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/checkemail/CheckEmailScreen.kt @@ -33,11 +33,11 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.annotatedStringResource import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.bitwarden.ui.platform.components.util.rememberVectorPainter 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.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledButton import com.x8bit.bitwarden.ui.platform.components.button.BitwardenOutlinedButton import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/completeregistration/CompleteRegistrationScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/completeregistration/CompleteRegistrationScreen.kt index a63b264384..9993328cc2 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/completeregistration/CompleteRegistrationScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/completeregistration/CompleteRegistrationScreen.kt @@ -37,6 +37,7 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.bitwarden.ui.platform.model.WindowSize @@ -46,7 +47,6 @@ 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.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledButton import com.x8bit.bitwarden.ui.platform.components.button.BitwardenTextButton import com.x8bit.bitwarden.ui.platform.components.card.BitwardenActionCardSmall diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/createaccount/CreateAccountScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/createaccount/CreateAccountScreen.kt index 6c7c734c02..aa60ed975f 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/createaccount/CreateAccountScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/createaccount/CreateAccountScreen.kt @@ -35,8 +35,10 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.annotatedStringResource import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar 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.theme.BitwardenTheme import com.x8bit.bitwarden.R import com.x8bit.bitwarden.ui.auth.feature.completeregistration.PasswordStrengthIndicator @@ -54,7 +56,6 @@ import com.x8bit.bitwarden.ui.auth.feature.createaccount.CreateAccountAction.Sub import com.x8bit.bitwarden.ui.auth.feature.createaccount.CreateAccountAction.TermsClick import com.x8bit.bitwarden.ui.auth.feature.createaccount.CreateAccountEvent.NavigateToPrivacyPolicy import com.x8bit.bitwarden.ui.auth.feature.createaccount.CreateAccountEvent.NavigateToTerms -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.button.BitwardenTextButton import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenLoadingDialog @@ -155,7 +156,7 @@ fun CreateAccountScreen( BitwardenTopAppBar( title = stringResource(id = R.string.create_account), scrollBehavior = scrollBehavior, - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { viewModel.trySendAction(CloseClick) } diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/enterprisesignon/EnterpriseSignOnScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/enterprisesignon/EnterpriseSignOnScreen.kt index f0c4efe998..d07b9907a0 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/enterprisesignon/EnterpriseSignOnScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/enterprisesignon/EnterpriseSignOnScreen.kt @@ -26,11 +26,12 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar 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.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.button.BitwardenTextButton import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenLoadingDialog @@ -98,7 +99,7 @@ fun EnterpriseSignOnScreen( BitwardenTopAppBar( title = stringResource(id = R.string.app_name), scrollBehavior = scrollBehavior, - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { viewModel.trySendAction(EnterpriseSignOnAction.CloseButtonClick) } diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/environment/EnvironmentScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/environment/EnvironmentScreen.kt index 016c40c5db..fb0bc9125d 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/environment/EnvironmentScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/environment/EnvironmentScreen.kt @@ -29,11 +29,12 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar 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.BuildConfig import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledButton import com.x8bit.bitwarden.ui.platform.components.button.BitwardenOutlinedButton import com.x8bit.bitwarden.ui.platform.components.button.BitwardenTextButton @@ -189,7 +190,7 @@ fun EnvironmentScreen( BitwardenTopAppBar( title = stringResource(id = R.string.settings), scrollBehavior = scrollBehavior, - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { viewModel.trySendAction(EnvironmentAction.CloseClick) } diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/expiredregistrationlink/ExpiredRegistrationLinkScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/expiredregistrationlink/ExpiredRegistrationLinkScreen.kt index d6d0f783d7..8d0403c6dc 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/expiredregistrationlink/ExpiredRegistrationLinkScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/expiredregistrationlink/ExpiredRegistrationLinkScreen.kt @@ -22,11 +22,12 @@ import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +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.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar -import com.x8bit.bitwarden.ui.platform.components.appbar.NavigationIcon import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledButton import com.x8bit.bitwarden.ui.platform.components.button.BitwardenOutlinedButton import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold @@ -65,7 +66,7 @@ fun ExpiredRegistrationLinkScreen( title = stringResource(id = R.string.create_account), scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(), navigationIcon = NavigationIcon( - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = sendCloseClicked, ), diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/landing/LandingScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/landing/LandingScreen.kt index d29c8560d6..51a795dcb0 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/landing/LandingScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/landing/LandingScreen.kt @@ -38,13 +38,13 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.data.repository.model.Environment import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.components.util.rememberVectorPainter 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.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledButton import com.x8bit.bitwarden.ui.platform.components.button.BitwardenTextButton import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/login/LoginScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/login/LoginScreen.kt index 7f7c866b13..f5c2958ff9 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/login/LoginScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/login/LoginScreen.kt @@ -34,15 +34,16 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar +import com.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem +import com.bitwarden.ui.platform.components.appbar.model.OverflowMenuItemData 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.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.appbar.BitwardenTopAppBar -import com.x8bit.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem -import com.x8bit.bitwarden.ui.platform.components.appbar.action.OverflowMenuItemData import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledButton import com.x8bit.bitwarden.ui.platform.components.button.BitwardenOutlinedButton import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog @@ -124,7 +125,7 @@ fun LoginScreen( BitwardenTopAppBar( title = stringResource(id = R.string.app_name), scrollBehavior = scrollBehavior, - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { viewModel.trySendAction(LoginAction.CloseButtonClick) } @@ -136,6 +137,7 @@ fun LoginScreen( ) } BitwardenOverflowActionItem( + contentDescription = stringResource(R.string.more), menuItemDataList = persistentListOf( OverflowMenuItemData( text = stringResource(id = R.string.get_password_hint), diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/loginwithdevice/LoginWithDeviceScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/loginwithdevice/LoginWithDeviceScreen.kt index 28b1122a06..98bbb56a9b 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/loginwithdevice/LoginWithDeviceScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/loginwithdevice/LoginWithDeviceScreen.kt @@ -32,10 +32,11 @@ import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle 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.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar 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 @@ -93,7 +94,7 @@ fun LoginWithDeviceScreen( BitwardenTopAppBar( title = state.toolbarTitle(), scrollBehavior = scrollBehavior, - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { viewModel.trySendAction(LoginWithDeviceAction.CloseButtonClick) } diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/masterpasswordgenerator/MasterPasswordGeneratorScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/masterpasswordgenerator/MasterPasswordGeneratorScreen.kt index c47717e44f..6ae4630fcd 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/masterpasswordgenerator/MasterPasswordGeneratorScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/masterpasswordgenerator/MasterPasswordGeneratorScreen.kt @@ -28,11 +28,11 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledButton import com.x8bit.bitwarden.ui.platform.components.button.BitwardenTextButton import com.x8bit.bitwarden.ui.platform.components.field.BitwardenTextField diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/masterpasswordguidance/MasterPasswordGuidanceScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/masterpasswordguidance/MasterPasswordGuidanceScreen.kt index bd12795948..625a238290 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/masterpasswordguidance/MasterPasswordGuidanceScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/masterpasswordguidance/MasterPasswordGuidanceScreen.kt @@ -26,10 +26,11 @@ import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.annotatedStringResource import com.bitwarden.ui.platform.base.util.standardHorizontalMargin import com.bitwarden.ui.platform.base.util.toAnnotatedString +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.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar 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.model.ContentBlockData @@ -64,7 +65,7 @@ fun MasterPasswordGuidanceScreen( BitwardenTopAppBar( title = stringResource(id = R.string.master_password), scrollBehavior = scrollBehavior, - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/masterpasswordhint/MasterPasswordHintScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/masterpasswordhint/MasterPasswordHintScreen.kt index 0c626c956e..05c0c8f4d5 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/masterpasswordhint/MasterPasswordHintScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/masterpasswordhint/MasterPasswordHintScreen.kt @@ -22,10 +22,11 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar 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.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.button.BitwardenTextButton import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenLoadingDialog @@ -90,7 +91,7 @@ fun MasterPasswordHintScreen( BitwardenTopAppBar( title = stringResource(id = R.string.password_hint), scrollBehavior = scrollBehavior, - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { viewModel.trySendAction(MasterPasswordHintAction.CloseClick) } diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/preventaccountlockout/PreventAccountLockoutScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/preventaccountlockout/PreventAccountLockoutScreen.kt index 64af1f6e19..529158b3f2 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/preventaccountlockout/PreventAccountLockoutScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/preventaccountlockout/PreventAccountLockoutScreen.kt @@ -24,10 +24,11 @@ import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +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.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.card.BitwardenContentCard import com.x8bit.bitwarden.ui.platform.components.model.ContentBlockData import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold @@ -58,7 +59,7 @@ fun PreventAccountLockoutScreen( BitwardenTopAppBar( title = stringResource(R.string.prevent_account_lockout), scrollBehavior = scrollBehavior, - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/removepassword/RemovePasswordScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/removepassword/RemovePasswordScreen.kt index c35af540e3..cf3b99969e 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/removepassword/RemovePasswordScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/removepassword/RemovePasswordScreen.kt @@ -24,11 +24,11 @@ import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.bitwarden.ui.platform.components.model.CardStyle 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.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledButton import com.x8bit.bitwarden.ui.platform.components.button.BitwardenOutlinedButton import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/resetpassword/ResetPasswordScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/resetpassword/ResetPasswordScreen.kt index c1866c3039..5b79b7657c 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/resetpassword/ResetPasswordScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/resetpassword/ResetPasswordScreen.kt @@ -30,15 +30,15 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar +import com.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem +import com.bitwarden.ui.platform.components.appbar.model.OverflowMenuItemData import com.bitwarden.ui.platform.components.model.CardStyle 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 -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar -import com.x8bit.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem -import com.x8bit.bitwarden.ui.platform.components.appbar.action.OverflowMenuItemData import com.x8bit.bitwarden.ui.platform.components.button.BitwardenTextButton import com.x8bit.bitwarden.ui.platform.components.card.BitwardenInfoCalloutCard import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog @@ -126,6 +126,7 @@ fun ResetPasswordScreen( modifier = Modifier.testTag("SaveButton"), ) BitwardenOverflowActionItem( + contentDescription = stringResource(R.string.more), menuItemDataList = persistentListOf( OverflowMenuItemData( text = stringResource(R.string.log_out), diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/setpassword/SetPasswordScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/setpassword/SetPasswordScreen.kt index 019c5969a8..330b666b08 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/setpassword/SetPasswordScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/setpassword/SetPasswordScreen.kt @@ -26,10 +26,10 @@ import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.button.BitwardenTextButton import com.x8bit.bitwarden.ui.platform.components.card.BitwardenInfoCalloutCard import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/startregistration/StartRegistrationScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/startregistration/StartRegistrationScreen.kt index b2eadce915..4c03869342 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/startregistration/StartRegistrationScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/startregistration/StartRegistrationScreen.kt @@ -44,8 +44,10 @@ import com.bitwarden.data.repository.model.Environment import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.annotatedStringResource import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar 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.theme.BitwardenTheme import com.x8bit.bitwarden.R import com.x8bit.bitwarden.ui.auth.feature.startregistration.StartRegistrationAction.ErrorDialogDismiss @@ -53,7 +55,6 @@ import com.x8bit.bitwarden.ui.auth.feature.startregistration.StartRegistrationEv import com.x8bit.bitwarden.ui.auth.feature.startregistration.StartRegistrationEvent.NavigateToTerms import com.x8bit.bitwarden.ui.auth.feature.startregistration.handlers.StartRegistrationHandler import com.x8bit.bitwarden.ui.auth.feature.startregistration.handlers.rememberStartRegistrationHandler -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledButton import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenLoadingDialog @@ -155,7 +156,7 @@ fun StartRegistrationScreen( BitwardenTopAppBar( title = stringResource(id = R.string.create_account), scrollBehavior = scrollBehavior, - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = handler.onCloseClick, ) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/trusteddevice/TrustedDeviceScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/trusteddevice/TrustedDeviceScreen.kt index bfce010b3e..7da39c6a8e 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/trusteddevice/TrustedDeviceScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/trusteddevice/TrustedDeviceScreen.kt @@ -30,13 +30,14 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar +import com.bitwarden.ui.platform.components.appbar.NavigationIcon 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.theme.BitwardenTheme import com.x8bit.bitwarden.R import com.x8bit.bitwarden.ui.auth.feature.trusteddevice.handlers.TrustedDeviceHandlers -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar -import com.x8bit.bitwarden.ui.platform.components.appbar.NavigationIcon import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledButton import com.x8bit.bitwarden.ui.platform.components.button.BitwardenOutlinedButton import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog @@ -109,7 +110,7 @@ private fun TrustedDeviceScaffold( title = stringResource(id = R.string.log_in_initiated), scrollBehavior = scrollBehavior, navigationIcon = NavigationIcon( - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = handlers.onBackClick, ), diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginScreen.kt index 83888246c7..d734dabb2e 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/twofactorlogin/TwoFactorLoginScreen.kt @@ -41,16 +41,17 @@ import com.bitwarden.network.model.TwoFactorAuthMethod import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.LifecycleEventEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar +import com.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem +import com.bitwarden.ui.platform.components.appbar.model.OverflowMenuItemData 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.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.appbar.BitwardenTopAppBar -import com.x8bit.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem -import com.x8bit.bitwarden.ui.platform.components.appbar.action.OverflowMenuItemData import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledButton import com.x8bit.bitwarden.ui.platform.components.button.BitwardenOutlinedButton import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog @@ -142,7 +143,7 @@ fun TwoFactorLoginScreen( BitwardenTopAppBar( title = title(), scrollBehavior = scrollBehavior, - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { viewModel.trySendAction(TwoFactorLoginAction.CloseButtonClick) } @@ -150,6 +151,7 @@ fun TwoFactorLoginScreen( actions = { if (!state.isNewDeviceVerification) { BitwardenOverflowActionItem( + contentDescription = stringResource(R.string.more), menuItemDataList = state.availableAuthMethods .map { OverflowMenuItemData( diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/vaultunlock/VaultUnlockScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/vaultunlock/VaultUnlockScreen.kt index 0a108fba75..0fd89d9a8f 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/vaultunlock/VaultUnlockScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/vaultunlock/VaultUnlockScreen.kt @@ -38,6 +38,9 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.cardStyle import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar +import com.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem +import com.bitwarden.ui.platform.components.appbar.model.OverflowMenuItemData import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R @@ -52,9 +55,6 @@ import com.x8bit.bitwarden.ui.credentials.manager.model.AssertFido2CredentialRes import com.x8bit.bitwarden.ui.credentials.manager.model.GetCredentialsResult import com.x8bit.bitwarden.ui.platform.components.account.BitwardenAccountActionItem import com.x8bit.bitwarden.ui.platform.components.account.BitwardenAccountSwitcher -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar -import com.x8bit.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem -import com.x8bit.bitwarden.ui.platform.components.appbar.action.OverflowMenuItemData import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledButton import com.x8bit.bitwarden.ui.platform.components.button.BitwardenOutlinedButton import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog @@ -224,6 +224,7 @@ fun VaultUnlockScreen( ) } BitwardenOverflowActionItem( + contentDescription = stringResource(R.string.more), menuItemDataList = persistentListOf( OverflowMenuItemData( text = stringResource(id = R.string.log_out), diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/bottomsheet/BitwardenModalBottomSheet.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/bottomsheet/BitwardenModalBottomSheet.kt index 4583deb4a7..7457a7584d 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/bottomsheet/BitwardenModalBottomSheet.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/bottomsheet/BitwardenModalBottomSheet.kt @@ -14,11 +14,12 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp +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.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar -import com.x8bit.bitwarden.ui.platform.components.appbar.NavigationIcon import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold import kotlinx.coroutines.launch @@ -67,7 +68,7 @@ fun BitwardenModalBottomSheet( BitwardenTopAppBar( title = sheetTitle, navigationIcon = NavigationIcon( - navigationIcon = rememberVectorPainter(R.drawable.ic_close), + navigationIcon = rememberVectorPainter(BitwardenDrawable.ic_close), onNavigationIconClick = animatedOnDismiss, navigationIconContentDescription = stringResource(R.string.close), ), diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenTextSelectionButton.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenTextSelectionButton.kt index d376dfa771..a77c122f3e 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenTextSelectionButton.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/button/BitwardenTextSelectionButton.kt @@ -30,12 +30,12 @@ import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.base.util.cardStyle import com.bitwarden.ui.platform.base.util.nullableTestTag import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton +import com.bitwarden.ui.platform.components.field.color.bitwardenTextFieldButtonColors import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R import com.x8bit.bitwarden.ui.platform.components.divider.BitwardenHorizontalDivider -import com.x8bit.bitwarden.ui.platform.components.field.color.bitwardenTextFieldButtonColors import com.x8bit.bitwarden.ui.platform.components.model.TooltipData import com.x8bit.bitwarden.ui.platform.components.row.BitwardenRowOfActions import com.x8bit.bitwarden.ui.platform.util.persistentListOfNotNull diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/card/BitwardenActionCard.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/card/BitwardenActionCard.kt index 5a7c7c27f5..9e17d6fffc 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/card/BitwardenActionCard.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/card/BitwardenActionCard.kt @@ -22,6 +22,7 @@ import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.components.badge.NotificationBadge 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.theme.BitwardenTheme import com.x8bit.bitwarden.R import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledButton @@ -70,7 +71,7 @@ fun BitwardenActionCard( Spacer(Modifier.weight(1f)) onDismissClick?.let { BitwardenStandardIconButton( - painter = rememberVectorPainter(id = R.drawable.ic_close), + painter = rememberVectorPainter(id = BitwardenDrawable.ic_close), contentDescription = stringResource(id = R.string.close), onClick = it, ) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/dialog/BitwardenDateSelectButton.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/dialog/BitwardenDateSelectButton.kt index de20a1ec5f..00607837e2 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/dialog/BitwardenDateSelectButton.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/dialog/BitwardenDateSelectButton.kt @@ -30,13 +30,13 @@ import androidx.compose.ui.semantics.testTag import androidx.compose.ui.semantics.testTagsAsResourceId import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.base.util.cardStyle +import com.bitwarden.ui.platform.components.field.color.bitwardenTextFieldButtonColors +import com.bitwarden.ui.platform.components.field.color.bitwardenTextFieldColors import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R import com.x8bit.bitwarden.ui.platform.components.button.BitwardenTextButton -import com.x8bit.bitwarden.ui.platform.components.field.color.bitwardenTextFieldButtonColors -import com.x8bit.bitwarden.ui.platform.components.field.color.bitwardenTextFieldColors import com.x8bit.bitwarden.ui.platform.components.row.BitwardenRowOfActions import com.x8bit.bitwarden.ui.platform.util.orNow import com.x8bit.bitwarden.ui.platform.util.toFormattedPattern diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/dialog/BitwardenTimeSelectButton.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/dialog/BitwardenTimeSelectButton.kt index 9b7b7997be..0725b10eda 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/dialog/BitwardenTimeSelectButton.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/dialog/BitwardenTimeSelectButton.kt @@ -20,11 +20,11 @@ import androidx.compose.ui.semantics.contentDescription import androidx.compose.ui.semantics.role import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.base.util.cardStyle +import com.bitwarden.ui.platform.components.field.color.bitwardenTextFieldButtonColors import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.field.color.bitwardenTextFieldButtonColors import com.x8bit.bitwarden.ui.platform.components.row.BitwardenRowOfActions import com.x8bit.bitwarden.ui.platform.util.orNow import com.x8bit.bitwarden.ui.platform.util.toFormattedPattern diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/field/BitwardenHiddenPasswordField.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/field/BitwardenHiddenPasswordField.kt index 038e5c83ad..201871fe60 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/field/BitwardenHiddenPasswordField.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/field/BitwardenHiddenPasswordField.kt @@ -13,9 +13,9 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.base.util.cardStyle import com.bitwarden.ui.platform.base.util.nullableTestTag +import com.bitwarden.ui.platform.components.field.color.bitwardenTextFieldColors import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.theme.BitwardenTheme -import com.x8bit.bitwarden.ui.platform.components.field.color.bitwardenTextFieldColors import com.x8bit.bitwarden.ui.platform.components.field.toolbar.BitwardenEmptyTextToolbar /** diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/field/BitwardenPasswordField.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/field/BitwardenPasswordField.kt index 08df21e1c7..12260d601f 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/field/BitwardenPasswordField.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/field/BitwardenPasswordField.kt @@ -42,11 +42,11 @@ import com.bitwarden.ui.platform.base.util.cardStyle import com.bitwarden.ui.platform.base.util.nullableTestTag import com.bitwarden.ui.platform.base.util.tabNavigation import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton +import com.bitwarden.ui.platform.components.field.color.bitwardenTextFieldColors import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R import com.x8bit.bitwarden.ui.platform.components.divider.BitwardenHorizontalDivider -import com.x8bit.bitwarden.ui.platform.components.field.color.bitwardenTextFieldColors 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 diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/field/BitwardenTextField.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/field/BitwardenTextField.kt index 1e202bf7dd..993775f6db 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/field/BitwardenTextField.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/field/BitwardenTextField.kt @@ -54,13 +54,13 @@ import com.bitwarden.ui.platform.base.util.cardStyle import com.bitwarden.ui.platform.base.util.nullableTestTag import com.bitwarden.ui.platform.base.util.toPx import com.bitwarden.ui.platform.base.util.withLineBreaksAtWidth +import com.bitwarden.ui.platform.components.appbar.color.bitwardenMenuItemColors import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton +import com.bitwarden.ui.platform.components.field.color.bitwardenTextFieldColors import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.color.bitwardenMenuItemColors import com.x8bit.bitwarden.ui.platform.components.divider.BitwardenHorizontalDivider -import com.x8bit.bitwarden.ui.platform.components.field.color.bitwardenTextFieldColors 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.icon.BitwardenIcon diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/slider/BitwardenSlider.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/slider/BitwardenSlider.kt index 75bddd7c0d..da98dd1eeb 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/slider/BitwardenSlider.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/slider/BitwardenSlider.kt @@ -38,10 +38,10 @@ import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.base.util.cardStyle 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.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.field.color.bitwardenTextFieldColors import com.x8bit.bitwarden.ui.platform.components.slider.color.bitwardenSliderColors /** diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/snackbar/BitwardenSnackbar.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/snackbar/BitwardenSnackbar.kt index a216ff9414..a0d1e5fc0f 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/snackbar/BitwardenSnackbar.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/snackbar/BitwardenSnackbar.kt @@ -26,6 +26,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton +import com.bitwarden.ui.platform.resource.BitwardenDrawable import com.bitwarden.ui.platform.theme.BitwardenTheme import com.bitwarden.ui.util.asText import com.x8bit.bitwarden.R @@ -106,7 +107,7 @@ fun BitwardenSnackbar( if (bitwardenSnackbarData.withDismissAction) { BitwardenStandardIconButton( onClick = onDismiss, - vectorIconRes = R.drawable.ic_close, + vectorIconRes = BitwardenDrawable.ic_close, contentDescription = stringResource(R.string.close), contentColor = BitwardenTheme.colorScheme.icon.reversed, modifier = Modifier.offset(x = 12.dp, y = (-12).dp), diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/stepper/BitwardenStepper.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/stepper/BitwardenStepper.kt index 3780e59c00..0e4985c9c3 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/stepper/BitwardenStepper.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/stepper/BitwardenStepper.kt @@ -11,11 +11,11 @@ import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.base.util.orNullIfBlank import com.bitwarden.ui.platform.components.button.BitwardenFilledIconButton +import com.bitwarden.ui.platform.components.field.color.bitwardenTextFieldColors import com.bitwarden.ui.platform.components.model.CardStyle 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.field.color.bitwardenTextFieldColors /** * Displays a stepper that allows the user to increment and decrement an int value. diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/debugmenu/DebugMenuScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/debugmenu/DebugMenuScreen.kt index 1d5cc1435b..ebce5c4b04 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/debugmenu/DebugMenuScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/debugmenu/DebugMenuScreen.kt @@ -27,12 +27,12 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin import com.bitwarden.ui.platform.base.util.toListItemCardStyle +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.theme.BitwardenTheme import com.x8bit.bitwarden.R import com.x8bit.bitwarden.data.platform.manager.model.FlagKey -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar -import com.x8bit.bitwarden.ui.platform.components.appbar.NavigationIcon import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledButton import com.x8bit.bitwarden.ui.platform.components.divider.BitwardenHorizontalDivider import com.x8bit.bitwarden.ui.platform.components.header.BitwardenListHeaderText diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/SearchScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/SearchScreen.kt index 6e66660570..1f410aa477 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/SearchScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/SearchScreen.kt @@ -19,13 +19,13 @@ import androidx.core.net.toUri import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect +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.x8bit.bitwarden.R 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 -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenSearchTopAppBar -import com.x8bit.bitwarden.ui.platform.components.appbar.NavigationIcon import com.x8bit.bitwarden.ui.platform.components.content.BitwardenErrorContent import com.x8bit.bitwarden.ui.platform.components.content.BitwardenLoadingContent import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog @@ -137,6 +137,7 @@ fun SearchScreen( navigationIconContentDescription = stringResource(id = R.string.back), onNavigationIconClick = searchHandlers.onBackClick, ), + clearIconContentDescription = stringResource(id = R.string.clear), ) }, utilityBar = { diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/SettingsScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/SettingsScreen.kt index fa3ba58a69..286a9baac5 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/SettingsScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/SettingsScreen.kt @@ -24,10 +24,11 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin import com.bitwarden.ui.platform.base.util.toListItemCardStyle +import com.bitwarden.ui.platform.components.appbar.BitwardenMediumTopAppBar +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.x8bit.bitwarden.ui.platform.components.appbar.BitwardenMediumTopAppBar -import com.x8bit.bitwarden.ui.platform.components.appbar.NavigationIcon import com.x8bit.bitwarden.ui.platform.components.model.IconData import com.x8bit.bitwarden.ui.platform.components.row.BitwardenPushRow import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold @@ -70,7 +71,7 @@ fun SettingsScreen( scrollBehavior = scrollBehavior, navigationIcon = if (state.shouldShowCloseButton) { NavigationIcon( - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { viewModel.trySendAction(SettingsAction.CloseClick) } diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/about/AboutScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/about/AboutScreen.kt index ecb603190d..42d947b37d 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/about/AboutScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/about/AboutScreen.kt @@ -33,13 +33,13 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.mirrorIfRtl import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.components.util.rememberVectorPainter 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.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.model.TooltipData import com.x8bit.bitwarden.ui.platform.components.row.BitwardenExternalLinkRow import com.x8bit.bitwarden.ui.platform.components.row.BitwardenPushRow diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityScreen.kt index 58ec21f72d..3a54fd109d 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityScreen.kt @@ -35,6 +35,7 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.bitwarden.ui.platform.components.badge.NotificationBadge import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.components.util.rememberVectorPainter @@ -44,7 +45,6 @@ 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.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.button.BitwardenTextButton import com.x8bit.bitwarden.ui.platform.components.card.BitwardenActionCard import com.x8bit.bitwarden.ui.platform.components.card.BitwardenInfoCalloutCard diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/deleteaccount/DeleteAccountScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/deleteaccount/DeleteAccountScreen.kt index b85f66bb39..bbffc7c217 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/deleteaccount/DeleteAccountScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/deleteaccount/DeleteAccountScreen.kt @@ -35,11 +35,12 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.cardStyle import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar 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.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledErrorButton import com.x8bit.bitwarden.ui.platform.components.button.BitwardenOutlinedErrorButton import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog @@ -109,7 +110,7 @@ fun DeleteAccountScreen( BitwardenTopAppBar( title = stringResource(id = R.string.delete_account), scrollBehavior = scrollBehavior, - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { viewModel.trySendAction(DeleteAccountAction.CloseClick) } diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/deleteaccountconfirmation/DeleteAccountConfirmationScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/deleteaccountconfirmation/DeleteAccountConfirmationScreen.kt index b21cfce3de..da551fce72 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/deleteaccountconfirmation/DeleteAccountConfirmationScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/deleteaccountconfirmation/DeleteAccountConfirmationScreen.kt @@ -29,11 +29,12 @@ import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar 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.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledErrorButton import com.x8bit.bitwarden.ui.platform.components.button.BitwardenOutlinedButton import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog @@ -208,7 +209,7 @@ private fun DeleteAccountConfirmationScaffold( BitwardenTopAppBar( title = stringResource(id = R.string.verification_code), scrollBehavior = scrollBehavior, - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = onCloseClick, ) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/loginapproval/LoginApprovalScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/loginapproval/LoginApprovalScreen.kt index fc8207b3f6..8c03e83865 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/loginapproval/LoginApprovalScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/loginapproval/LoginApprovalScreen.kt @@ -30,10 +30,11 @@ import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle 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.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledButton import com.x8bit.bitwarden.ui.platform.components.button.BitwardenOutlinedButton import com.x8bit.bitwarden.ui.platform.components.content.BitwardenErrorContent @@ -96,7 +97,7 @@ fun LoginApprovalScreen( BitwardenTopAppBar( title = stringResource(id = R.string.log_in_requested), scrollBehavior = scrollBehavior, - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { viewModel.trySendAction(LoginApprovalAction.CloseClick) } diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/pendingrequests/PendingRequestsScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/pendingrequests/PendingRequestsScreen.kt index be9fff64dc..8b831aae9c 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/pendingrequests/PendingRequestsScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/pendingrequests/PendingRequestsScreen.kt @@ -47,13 +47,14 @@ import com.bitwarden.ui.platform.base.util.LifecycleEventEffect import com.bitwarden.ui.platform.base.util.cardStyle import com.bitwarden.ui.platform.base.util.standardHorizontalMargin import com.bitwarden.ui.platform.base.util.toListItemCardStyle +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar 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.theme.BitwardenTheme import com.x8bit.bitwarden.R import com.x8bit.bitwarden.data.platform.util.isBuildVersionBelow import com.x8bit.bitwarden.data.platform.util.isFdroid -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.bottomsheet.BitwardenModalBottomSheet import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledButton import com.x8bit.bitwarden.ui.platform.components.button.BitwardenOutlinedButton @@ -141,7 +142,7 @@ fun PendingRequestsScreen( BitwardenTopAppBar( title = stringResource(id = R.string.pending_log_in_requests), scrollBehavior = scrollBehavior, - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { viewModel.trySendAction(PendingRequestsAction.CloseClick) } diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/appearance/AppearanceScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/appearance/AppearanceScreen.kt index a5a3477f16..86e4b62b2a 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/appearance/AppearanceScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/appearance/AppearanceScreen.kt @@ -25,11 +25,11 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.bitwarden.ui.platform.feature.settings.appearance.model.AppTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenTwoButtonDialog import com.x8bit.bitwarden.ui.platform.components.dropdown.BitwardenMultiSelectButton import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillScreen.kt index 1c6568f932..853d63c28e 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillScreen.kt @@ -31,12 +31,12 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.bitwarden.ui.platform.components.badge.NotificationBadge import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.x8bit.bitwarden.R import com.x8bit.bitwarden.data.platform.repository.model.UriMatchType -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.card.BitwardenActionCard import com.x8bit.bitwarden.ui.platform.components.card.actionCardExitAnimation import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/blockautofill/BlockAutoFillScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/blockautofill/BlockAutoFillScreen.kt index 20a0241c4e..d8ea5717da 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/blockautofill/BlockAutoFillScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/blockautofill/BlockAutoFillScreen.kt @@ -39,11 +39,11 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.bottomDivider +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.bitwarden.ui.platform.components.fab.BitwardenFloatingActionButton import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.button.BitwardenOutlinedButton import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/exportvault/ExportVaultScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/exportvault/ExportVaultScreen.kt index a5da2fc7ad..eda3ba0b4c 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/exportvault/ExportVaultScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/exportvault/ExportVaultScreen.kt @@ -32,12 +32,13 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar 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.theme.BitwardenTheme import com.x8bit.bitwarden.R import com.x8bit.bitwarden.ui.auth.feature.completeregistration.PasswordStrengthIndicator -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.button.BitwardenOutlinedButton import com.x8bit.bitwarden.ui.platform.components.card.BitwardenInfoCalloutCard import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog @@ -146,7 +147,7 @@ fun ExportVaultScreen( BitwardenTopAppBar( title = stringResource(id = R.string.export_vault), scrollBehavior = scrollBehavior, - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { viewModel.trySendAction(ExportVaultAction.CloseButtonClick) } diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/flightrecorder/FlightRecorderScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/flightrecorder/FlightRecorderScreen.kt index d8a2926887..7eca8e8f1f 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/flightrecorder/FlightRecorderScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/flightrecorder/FlightRecorderScreen.kt @@ -26,12 +26,13 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar 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.theme.BitwardenTheme import com.x8bit.bitwarden.R import com.x8bit.bitwarden.data.platform.repository.model.FlightRecorderDuration -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.button.BitwardenTextButton import com.x8bit.bitwarden.ui.platform.components.dropdown.BitwardenMultiSelectButton import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold @@ -65,7 +66,7 @@ fun FlightRecorderScreen( topBar = { BitwardenTopAppBar( title = stringResource(id = R.string.enable_flight_recorder_title), - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { viewModel.trySendAction(FlightRecorderAction.BackClick) } diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/flightrecorder/recordedLogs/RecordedLogsScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/flightrecorder/recordedLogs/RecordedLogsScreen.kt index 9240f90ed3..649bb9d901 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/flightrecorder/recordedLogs/RecordedLogsScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/flightrecorder/recordedLogs/RecordedLogsScreen.kt @@ -35,13 +35,14 @@ import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.cardStyle import com.bitwarden.ui.platform.base.util.standardHorizontalMargin import com.bitwarden.ui.platform.base.util.toListItemCardStyle +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar +import com.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem +import com.bitwarden.ui.platform.components.appbar.model.OverflowMenuItemData 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.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar -import com.x8bit.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem -import com.x8bit.bitwarden.ui.platform.components.appbar.action.OverflowMenuItemData import com.x8bit.bitwarden.ui.platform.components.content.BitwardenEmptyContent import com.x8bit.bitwarden.ui.platform.components.content.BitwardenLoadingContent import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog @@ -95,7 +96,7 @@ fun RecordedLogsScreen( topBar = { BitwardenTopAppBar( title = stringResource(id = R.string.recorded_logs_title), - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { viewModel.trySendAction(RecordedLogsAction.BackClick) } @@ -168,6 +169,7 @@ private fun RecordedLogsOverflowMenu( ) } BitwardenOverflowActionItem( + contentDescription = stringResource(R.string.more), modifier = modifier, menuItemDataList = persistentListOf( OverflowMenuItemData( @@ -309,6 +311,7 @@ private fun LogRow( } Spacer(modifier = Modifier.width(width = 12.dp)) BitwardenOverflowActionItem( + contentDescription = stringResource(R.string.more), menuItemDataList = persistentListOf( OverflowMenuItemData( text = stringResource(id = R.string.share), diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/FoldersScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/FoldersScreen.kt index 3726df0e02..075bd6e8c0 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/FoldersScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/FoldersScreen.kt @@ -29,11 +29,12 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin import com.bitwarden.ui.platform.base.util.toListItemCardStyle +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.bitwarden.ui.platform.components.fab.BitwardenFloatingActionButton import com.bitwarden.ui.platform.components.util.rememberVectorPainter +import com.bitwarden.ui.platform.resource.BitwardenDrawable import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.content.BitwardenErrorContent import com.x8bit.bitwarden.ui.platform.components.content.BitwardenLoadingContent import com.x8bit.bitwarden.ui.platform.components.row.BitwardenTextRow @@ -78,7 +79,7 @@ fun FoldersScreen( BitwardenTopAppBar( title = stringResource(id = R.string.folders), scrollBehavior = scrollBehavior, - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { viewModel.trySendAction(FoldersAction.CloseButtonClick) } diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/addedit/FolderAddEditScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/addedit/FolderAddEditScreen.kt index 3c1993e106..1c6f034cb4 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/addedit/FolderAddEditScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/addedit/FolderAddEditScreen.kt @@ -26,13 +26,14 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar +import com.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem +import com.bitwarden.ui.platform.components.appbar.model.OverflowMenuItemData 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.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar -import com.x8bit.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem -import com.x8bit.bitwarden.ui.platform.components.appbar.action.OverflowMenuItemData import com.x8bit.bitwarden.ui.platform.components.button.BitwardenTextButton import com.x8bit.bitwarden.ui.platform.components.content.BitwardenErrorContent import com.x8bit.bitwarden.ui.platform.components.content.BitwardenLoadingContent @@ -99,7 +100,7 @@ fun FolderAddEditScreen( BitwardenTopAppBar( title = state.screenDisplayName.invoke(), scrollBehavior = scrollBehavior, - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { viewModel.trySendAction(FolderAddEditAction.CloseClick) } @@ -114,6 +115,7 @@ fun FolderAddEditScreen( ) if (state.shouldShowOverflowMenu) { BitwardenOverflowActionItem( + contentDescription = stringResource(R.string.more), menuItemDataList = persistentListOf( OverflowMenuItemData( text = stringResource(id = R.string.delete), diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/other/OtherScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/other/OtherScreen.kt index 2f4c6e9922..1c0cb3fe71 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/other/OtherScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/other/OtherScreen.kt @@ -33,13 +33,13 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R import com.x8bit.bitwarden.data.platform.repository.model.ClearClipboardFrequency import com.x8bit.bitwarden.data.platform.repository.util.displayLabel -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.button.BitwardenOutlinedButton import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenLoadingDialog diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsScreen.kt index bb6ddb6e0b..c1505cb552 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsScreen.kt @@ -28,11 +28,11 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.bitwarden.ui.platform.components.badge.NotificationBadge import com.bitwarden.ui.platform.components.model.CardStyle import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.card.BitwardenActionCard import com.x8bit.bitwarden.ui.platform.components.card.actionCardExitAnimation import com.x8bit.bitwarden.ui.platform.components.row.BitwardenExternalLinkRow diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorScreen.kt index 3311742c40..7d0f901b25 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorScreen.kt @@ -41,19 +41,21 @@ import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.LifecycleEventEffect import com.bitwarden.ui.platform.base.util.scrolledContainerBottomDivider import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenMediumTopAppBar +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar +import com.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem +import com.bitwarden.ui.platform.components.appbar.model.OverflowMenuItemData import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.components.model.CardStyle +import com.bitwarden.ui.platform.components.model.TopAppBarDividerStyle import com.bitwarden.ui.platform.components.util.rememberVectorPainter +import com.bitwarden.ui.platform.resource.BitwardenDrawable import com.bitwarden.ui.platform.theme.BitwardenTheme import com.bitwarden.ui.util.asText import com.x8bit.bitwarden.R 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 -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenMediumTopAppBar -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar -import com.x8bit.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem -import com.x8bit.bitwarden.ui.platform.components.appbar.action.OverflowMenuItemData import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledButton import com.x8bit.bitwarden.ui.platform.components.button.BitwardenTextButton import com.x8bit.bitwarden.ui.platform.components.card.BitwardenActionCard @@ -68,7 +70,6 @@ import com.x8bit.bitwarden.ui.platform.components.field.BitwardenPasswordField import com.x8bit.bitwarden.ui.platform.components.field.BitwardenTextField import com.x8bit.bitwarden.ui.platform.components.model.TextToolbarType import com.x8bit.bitwarden.ui.platform.components.model.TooltipData -import com.x8bit.bitwarden.ui.platform.components.model.TopAppBarDividerStyle import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold import com.x8bit.bitwarden.ui.platform.components.segment.BitwardenSegmentedButton import com.x8bit.bitwarden.ui.platform.components.segment.SegmentedButtonOptionContent @@ -310,6 +311,7 @@ private fun DefaultAppBar( dividerStyle = TopAppBarDividerStyle.NONE, actions = { BitwardenOverflowActionItem( + contentDescription = stringResource(R.string.more), menuItemDataList = persistentListOf( OverflowMenuItemData( text = stringResource(id = R.string.password_history), @@ -333,7 +335,7 @@ private fun ModalAppBar( ) { BitwardenTopAppBar( title = stringResource(id = R.string.generator), - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = onCloseClick, scrollBehavior = scrollBehavior, diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/generator/passwordhistory/PasswordHistoryScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/generator/passwordhistory/PasswordHistoryScreen.kt index 61e6c65ed9..69aff8ad03 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/generator/passwordhistory/PasswordHistoryScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/generator/passwordhistory/PasswordHistoryScreen.kt @@ -30,12 +30,12 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin import com.bitwarden.ui.platform.base.util.toListItemCardStyle +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar +import com.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem +import com.bitwarden.ui.platform.components.appbar.model.OverflowMenuItemData import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar -import com.x8bit.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem -import com.x8bit.bitwarden.ui.platform.components.appbar.action.OverflowMenuItemData import com.x8bit.bitwarden.ui.platform.components.indicator.BitwardenCircularProgressIndicator import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold import kotlinx.collections.immutable.persistentListOf @@ -80,6 +80,7 @@ fun PasswordHistoryScreen( actions = { if (state.menuEnabled) { BitwardenOverflowActionItem( + contentDescription = stringResource(R.string.more), menuItemDataList = persistentListOf( OverflowMenuItemData( text = stringResource(id = R.string.clear), diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/SendScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/SendScreen.kt index b6fd339a32..89fd8f2f2d 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/SendScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/SendScreen.kt @@ -20,16 +20,16 @@ import androidx.core.net.toUri import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect +import com.bitwarden.ui.platform.components.appbar.BitwardenMediumTopAppBar +import com.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem +import com.bitwarden.ui.platform.components.appbar.action.BitwardenSearchActionItem +import com.bitwarden.ui.platform.components.appbar.model.OverflowMenuItemData import com.bitwarden.ui.platform.components.fab.BitwardenFloatingActionButton import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.x8bit.bitwarden.R 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 -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenMediumTopAppBar -import com.x8bit.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem -import com.x8bit.bitwarden.ui.platform.components.appbar.action.BitwardenSearchActionItem -import com.x8bit.bitwarden.ui.platform.components.appbar.action.OverflowMenuItemData import com.x8bit.bitwarden.ui.platform.components.content.BitwardenErrorContent import com.x8bit.bitwarden.ui.platform.components.content.BitwardenLoadingContent import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog @@ -155,6 +155,7 @@ fun SendScreen( }, ) BitwardenOverflowActionItem( + contentDescription = stringResource(R.string.more), menuItemDataList = persistentListOf( OverflowMenuItemData( text = stringResource(id = R.string.sync), diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/AddEditSendScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/AddEditSendScreen.kt index 31575b8fa5..bc6532b8e0 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/AddEditSendScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/AddEditSendScreen.kt @@ -17,18 +17,19 @@ import androidx.compose.ui.res.stringResource import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar +import com.bitwarden.ui.platform.components.appbar.NavigationIcon +import com.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem +import com.bitwarden.ui.platform.components.appbar.model.OverflowMenuItemData +import com.bitwarden.ui.platform.components.model.TopAppBarDividerStyle import com.bitwarden.ui.platform.components.util.rememberVectorPainter +import com.bitwarden.ui.platform.resource.BitwardenDrawable import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar -import com.x8bit.bitwarden.ui.platform.components.appbar.NavigationIcon -import com.x8bit.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem -import com.x8bit.bitwarden.ui.platform.components.appbar.action.OverflowMenuItemData import com.x8bit.bitwarden.ui.platform.components.button.BitwardenTextButton import com.x8bit.bitwarden.ui.platform.components.content.BitwardenErrorContent 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 -import com.x8bit.bitwarden.ui.platform.components.model.TopAppBarDividerStyle import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold import com.x8bit.bitwarden.ui.platform.composition.LocalExitManager import com.x8bit.bitwarden.ui.platform.composition.LocalIntentManager @@ -108,7 +109,7 @@ fun AddEditSendScreen( BitwardenTopAppBar( title = state.screenDisplayName(), navigationIcon = NavigationIcon( - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { viewModel.trySendAction(AddEditSendAction.CloseClick) } @@ -128,6 +129,7 @@ fun AddEditSendScreen( ) if (!state.isAddMode) { BitwardenOverflowActionItem( + contentDescription = stringResource(R.string.more), menuItemDataList = persistentListOfNotNull( OverflowMenuItemData( text = stringResource(id = R.string.remove_password), diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/viewsend/ViewSendScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/viewsend/ViewSendScreen.kt index 3892b4b4ff..2dec08b437 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/viewsend/ViewSendScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/viewsend/ViewSendScreen.kt @@ -46,14 +46,15 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.cardStyle import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar +import com.bitwarden.ui.platform.components.appbar.NavigationIcon import com.bitwarden.ui.platform.components.fab.BitwardenFloatingActionButton 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.theme.BitwardenTheme import com.bitwarden.ui.util.asText import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar -import com.x8bit.bitwarden.ui.platform.components.appbar.NavigationIcon import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledButton import com.x8bit.bitwarden.ui.platform.components.button.BitwardenOutlinedButton import com.x8bit.bitwarden.ui.platform.components.button.BitwardenOutlinedErrorButton @@ -126,7 +127,7 @@ fun ViewSendScreen( BitwardenTopAppBar( title = state.screenDisplayName(), navigationIcon = NavigationIcon( - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { viewModel.trySendAction(ViewSendAction.CloseClick) } diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditLoginItems.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditLoginItems.kt index b1c7fec8da..33f34c82e7 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditLoginItems.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditLoginItems.kt @@ -23,6 +23,7 @@ import com.bitwarden.ui.platform.base.util.cardStyle import com.bitwarden.ui.platform.base.util.standardHorizontalMargin import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton import com.bitwarden.ui.platform.components.model.CardStyle +import com.bitwarden.ui.platform.resource.BitwardenDrawable import com.bitwarden.ui.platform.theme.BitwardenTheme import com.bitwarden.ui.util.Text import com.bitwarden.ui.util.asText @@ -369,7 +370,7 @@ private fun TotpRow( actions = { totpKey?.let { BitwardenStandardIconButton( - vectorIconRes = R.drawable.ic_clear, + vectorIconRes = BitwardenDrawable.ic_clear, contentDescription = stringResource(id = R.string.delete), onClick = loginItemTypeHandlers.onClearTotpKeyClick, ) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreen.kt index b64fad3c2e..687942010c 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreen.kt @@ -41,16 +41,17 @@ import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.cardStyle import com.bitwarden.ui.platform.base.util.standardHorizontalMargin import com.bitwarden.ui.platform.base.util.toListItemCardStyle +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar +import com.bitwarden.ui.platform.components.appbar.NavigationIcon +import com.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem +import com.bitwarden.ui.platform.components.appbar.model.OverflowMenuItemData 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.theme.BitwardenTheme import com.bitwarden.ui.util.Text import com.x8bit.bitwarden.R import com.x8bit.bitwarden.ui.credentials.manager.CredentialProviderCompletionManager -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar -import com.x8bit.bitwarden.ui.platform.components.appbar.NavigationIcon -import com.x8bit.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem -import com.x8bit.bitwarden.ui.platform.components.appbar.action.OverflowMenuItemData import com.x8bit.bitwarden.ui.platform.components.bottomsheet.BitwardenModalBottomSheet import com.x8bit.bitwarden.ui.platform.components.button.BitwardenTextButton import com.x8bit.bitwarden.ui.platform.components.coachmark.CoachMarkContainer @@ -325,7 +326,7 @@ fun VaultAddEditScreen( BitwardenTopAppBar( title = state.screenDisplayName(), navigationIcon = NavigationIcon( - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { viewModel.trySendAction(VaultAddEditAction.Common.CloseClick) } @@ -342,6 +343,7 @@ fun VaultAddEditScreen( modifier = Modifier.testTag("SaveButton"), ) BitwardenOverflowActionItem( + contentDescription = stringResource(R.string.more), menuItemDataList = persistentListOfNotNull( OverflowMenuItemData( text = stringResource(id = R.string.attachments), diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/attachments/AttachmentsScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/attachments/AttachmentsScreen.kt index 2e62617380..06b2b5db1a 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/attachments/AttachmentsScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/attachments/AttachmentsScreen.kt @@ -16,10 +16,10 @@ import androidx.compose.ui.res.stringResource import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect +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.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar -import com.x8bit.bitwarden.ui.platform.components.appbar.NavigationIcon import com.x8bit.bitwarden.ui.platform.components.button.BitwardenTextButton import com.x8bit.bitwarden.ui.platform.components.content.BitwardenErrorContent import com.x8bit.bitwarden.ui.platform.components.content.BitwardenLoadingContent diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsScreen.kt index 808b0e331f..a7603e1516 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsScreen.kt @@ -43,11 +43,12 @@ import com.bitwarden.ui.platform.base.util.annotatedStringResource import com.bitwarden.ui.platform.base.util.bitwardenBoldSpanStyle import com.bitwarden.ui.platform.base.util.standardHorizontalMargin import com.bitwarden.ui.platform.base.util.toAnnotatedString +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.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar -import com.x8bit.bitwarden.ui.platform.components.appbar.NavigationIcon import com.x8bit.bitwarden.ui.platform.components.bottomsheet.BitwardenModalBottomSheet import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledButton import com.x8bit.bitwarden.ui.platform.components.button.BitwardenOutlinedButton @@ -119,7 +120,7 @@ fun ImportLoginsScreen( BitwardenTopAppBar( title = stringResource(R.string.import_logins), navigationIcon = NavigationIcon( - navigationIcon = rememberVectorPainter(R.drawable.ic_close), + navigationIcon = rememberVectorPainter(BitwardenDrawable.ic_close), onNavigationIconClick = handler.onCloseClick, navigationIconContentDescription = stringResource(R.string.close), ), diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreen.kt index 5cf8144d01..ed572dd657 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreen.kt @@ -22,12 +22,13 @@ import androidx.core.net.toUri import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar +import com.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem +import com.bitwarden.ui.platform.components.appbar.model.OverflowMenuItemData import com.bitwarden.ui.platform.components.fab.BitwardenFloatingActionButton import com.bitwarden.ui.platform.components.util.rememberVectorPainter +import com.bitwarden.ui.platform.resource.BitwardenDrawable import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar -import com.x8bit.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem -import com.x8bit.bitwarden.ui.platform.components.appbar.action.OverflowMenuItemData import com.x8bit.bitwarden.ui.platform.components.button.BitwardenTextButton import com.x8bit.bitwarden.ui.platform.components.content.BitwardenErrorContent import com.x8bit.bitwarden.ui.platform.components.content.BitwardenLoadingContent @@ -160,7 +161,7 @@ fun VaultItemScreen( BitwardenTopAppBar( title = state.title(), scrollBehavior = scrollBehavior, - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { viewModel.trySendAction(VaultItemAction.Common.CloseClick) } @@ -180,6 +181,7 @@ fun VaultItemScreen( ) } BitwardenOverflowActionItem( + contentDescription = stringResource(R.string.more), menuItemDataList = persistentListOfNotNull( OverflowMenuItemData( text = stringResource(id = R.string.attachments), diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingScreen.kt index 8afdf94ff6..7ce0c3dadc 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingScreen.kt @@ -21,6 +21,11 @@ import androidx.core.net.toUri import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar +import com.bitwarden.ui.platform.components.appbar.NavigationIcon +import com.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem +import com.bitwarden.ui.platform.components.appbar.action.BitwardenSearchActionItem +import com.bitwarden.ui.platform.components.appbar.model.OverflowMenuItemData import com.bitwarden.ui.platform.components.fab.BitwardenFloatingActionButton import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.bitwarden.ui.util.Text @@ -28,11 +33,6 @@ import com.x8bit.bitwarden.R import com.x8bit.bitwarden.ui.credentials.manager.CredentialProviderCompletionManager import com.x8bit.bitwarden.ui.platform.components.account.BitwardenAccountActionItem import com.x8bit.bitwarden.ui.platform.components.account.BitwardenAccountSwitcher -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar -import com.x8bit.bitwarden.ui.platform.components.appbar.NavigationIcon -import com.x8bit.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem -import com.x8bit.bitwarden.ui.platform.components.appbar.action.BitwardenSearchActionItem -import com.x8bit.bitwarden.ui.platform.components.appbar.action.OverflowMenuItemData import com.x8bit.bitwarden.ui.platform.components.content.BitwardenErrorContent import com.x8bit.bitwarden.ui.platform.components.content.BitwardenLoadingContent import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog @@ -476,6 +476,7 @@ private fun VaultItemListingScaffold( ) if (state.shouldShowOverflowMenu) { BitwardenOverflowActionItem( + contentDescription = stringResource(R.string.more), menuItemDataList = persistentListOf( OverflowMenuItemData( text = stringResource(id = R.string.sync), diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/manualcodeentry/ManualCodeEntryScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/manualcodeentry/ManualCodeEntryScreen.kt index a27f43bdb5..3268b31170 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/manualcodeentry/ManualCodeEntryScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/manualcodeentry/ManualCodeEntryScreen.kt @@ -34,11 +34,12 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar 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.theme.BitwardenTheme import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.button.BitwardenFilledButton import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenTwoButtonDialog @@ -130,7 +131,7 @@ fun ManualCodeEntryScreen( topBar = { BitwardenTopAppBar( title = stringResource(id = R.string.authenticator_key_scanner), - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { viewModel.trySendAction(ManualCodeEntryAction.CloseClick) } diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/VaultMoveToOrganizationScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/VaultMoveToOrganizationScreen.kt index d0a13513ea..2cfe1b7925 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/VaultMoveToOrganizationScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/VaultMoveToOrganizationScreen.kt @@ -16,9 +16,10 @@ import androidx.compose.ui.res.stringResource import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle 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.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.button.BitwardenTextButton import com.x8bit.bitwarden.ui.platform.components.content.BitwardenErrorContent import com.x8bit.bitwarden.ui.platform.components.content.BitwardenLoadingContent @@ -102,7 +103,7 @@ private fun VaultMoveToOrganizationScaffold( BitwardenTopAppBar( title = state.appBarText(), scrollBehavior = scrollBehavior, - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = closeClick, actions = { diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/qrcodescan/QrCodeScanScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/qrcodescan/QrCodeScanScreen.kt index bbef2a37c9..2dfc0330d0 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/qrcodescan/QrCodeScanScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/qrcodescan/QrCodeScanScreen.kt @@ -53,14 +53,15 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.LocalLifecycleOwner import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.annotatedStringResource +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar 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.theme.BitwardenTheme import com.bitwarden.ui.platform.theme.LocalBitwardenColorScheme import com.bitwarden.ui.platform.theme.color.darkBitwardenColorScheme import com.bitwarden.ui.platform.util.rememberWindowSize import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold import com.x8bit.bitwarden.ui.vault.feature.qrcodescan.util.QrCodeAnalyzer import com.x8bit.bitwarden.ui.vault.feature.qrcodescan.util.QrCodeAnalyzerImpl @@ -114,7 +115,7 @@ fun QrCodeScanScreen( topBar = { BitwardenTopAppBar( title = stringResource(id = R.string.scan_qr_code), - navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), + navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { viewModel.trySendAction(QrCodeScanAction.CloseClick) } diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultScreen.kt index 300edbec0f..e327f05801 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultScreen.kt @@ -31,16 +31,17 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.LifecycleEventEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.BitwardenMediumTopAppBar +import com.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem +import com.bitwarden.ui.platform.components.appbar.action.BitwardenSearchActionItem +import com.bitwarden.ui.platform.components.appbar.model.OverflowMenuItemData import com.bitwarden.ui.platform.components.fab.BitwardenFloatingActionButton +import com.bitwarden.ui.platform.components.model.TopAppBarDividerStyle import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.x8bit.bitwarden.R import com.x8bit.bitwarden.ui.platform.components.account.BitwardenAccountActionItem import com.x8bit.bitwarden.ui.platform.components.account.BitwardenAccountSwitcher import com.x8bit.bitwarden.ui.platform.components.animation.AnimateNullableContentVisibility -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenMediumTopAppBar -import com.x8bit.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem -import com.x8bit.bitwarden.ui.platform.components.appbar.action.BitwardenSearchActionItem -import com.x8bit.bitwarden.ui.platform.components.appbar.action.OverflowMenuItemData import com.x8bit.bitwarden.ui.platform.components.card.BitwardenActionCard import com.x8bit.bitwarden.ui.platform.components.card.actionCardExitAnimation import com.x8bit.bitwarden.ui.platform.components.content.BitwardenErrorContent @@ -50,7 +51,6 @@ import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenLoadingDialog import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenMasterPasswordDialog import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenTwoButtonDialog import com.x8bit.bitwarden.ui.platform.components.model.BitwardenPullToRefreshState -import com.x8bit.bitwarden.ui.platform.components.model.TopAppBarDividerStyle import com.x8bit.bitwarden.ui.platform.components.model.rememberBitwardenPullToRefreshState import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold import com.x8bit.bitwarden.ui.platform.components.snackbar.BitwardenSnackbar @@ -280,6 +280,7 @@ private fun VaultScreenScaffold( onClick = vaultHandlers.searchIconClickAction, ) BitwardenOverflowActionItem( + contentDescription = stringResource(R.string.more), menuItemDataList = persistentListOf( OverflowMenuItemData( text = stringResource(id = R.string.sync), diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/verificationcode/VerificationCodeScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/verificationcode/VerificationCodeScreen.kt index a4fa46b694..bb96d87da5 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/verificationcode/VerificationCodeScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/verificationcode/VerificationCodeScreen.kt @@ -23,15 +23,15 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin import com.bitwarden.ui.platform.base.util.toListItemCardStyle +import com.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar +import com.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem +import com.bitwarden.ui.platform.components.appbar.action.BitwardenSearchActionItem +import com.bitwarden.ui.platform.components.appbar.model.OverflowMenuItemData import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.x8bit.bitwarden.R 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 -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenTopAppBar -import com.x8bit.bitwarden.ui.platform.components.appbar.action.BitwardenOverflowActionItem -import com.x8bit.bitwarden.ui.platform.components.appbar.action.BitwardenSearchActionItem -import com.x8bit.bitwarden.ui.platform.components.appbar.action.OverflowMenuItemData import com.x8bit.bitwarden.ui.platform.components.content.BitwardenErrorContent import com.x8bit.bitwarden.ui.platform.components.content.BitwardenLoadingContent import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenLoadingDialog @@ -111,6 +111,7 @@ fun VerificationCodeScreen( onClick = verificationCodeHandler.searchIconClick, ) BitwardenOverflowActionItem( + contentDescription = stringResource(R.string.more), menuItemDataList = persistentListOf( OverflowMenuItemData( text = stringResource(id = R.string.sync), diff --git a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/edititem/EditItemScreen.kt b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/edititem/EditItemScreen.kt index 7687e14d64..2bede9710d 100644 --- a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/edititem/EditItemScreen.kt +++ b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/edititem/EditItemScreen.kt @@ -48,7 +48,7 @@ import com.bitwarden.authenticator.R import com.bitwarden.authenticator.data.authenticator.datasource.disk.entity.AuthenticatorItemAlgorithm import com.bitwarden.authenticator.data.authenticator.datasource.disk.entity.AuthenticatorItemType import com.bitwarden.authenticator.ui.authenticator.feature.edititem.model.EditItemData -import com.bitwarden.authenticator.ui.platform.components.appbar.BitwardenTopAppBar +import com.bitwarden.authenticator.ui.platform.components.appbar.AuthenticatorTopAppBar import com.bitwarden.authenticator.ui.platform.components.button.BitwardenTextButton import com.bitwarden.authenticator.ui.platform.components.dialog.BasicDialogState import com.bitwarden.authenticator.ui.platform.components.dialog.BitwardenBasicDialog @@ -64,6 +64,7 @@ import com.bitwarden.authenticator.ui.platform.components.scaffold.BitwardenScaf import com.bitwarden.authenticator.ui.platform.components.stepper.BitwardenStepper import com.bitwarden.authenticator.ui.platform.components.toggle.BitwardenSwitch import com.bitwarden.ui.platform.base.util.EventsEffect +import com.bitwarden.ui.platform.resource.BitwardenDrawable import com.bitwarden.ui.platform.theme.DEFAULT_FADE_TRANSITION_TIME_MS import com.bitwarden.ui.platform.theme.DEFAULT_STAY_TRANSITION_TIME_MS import kotlinx.collections.immutable.toImmutableList @@ -111,12 +112,12 @@ fun EditItemScreen( .fillMaxSize() .nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { - BitwardenTopAppBar( + AuthenticatorTopAppBar( title = stringResource( id = R.string.edit_item, ), scrollBehavior = scrollBehavior, - navigationIcon = painterResource(id = R.drawable.ic_close), + navigationIcon = painterResource(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { diff --git a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/itemlisting/FirstTimeSyncSnackbarHost.kt b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/itemlisting/FirstTimeSyncSnackbarHost.kt index e99a8d5515..939c9b1e9d 100644 --- a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/itemlisting/FirstTimeSyncSnackbarHost.kt +++ b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/itemlisting/FirstTimeSyncSnackbarHost.kt @@ -20,6 +20,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.bitwarden.authenticator.R +import com.bitwarden.ui.platform.resource.BitwardenDrawable /** * Show a snackbar that says "Account synced from Bitwarden app" with a close action. @@ -56,7 +57,7 @@ fun FirstTimeSyncSnackbarHost( onClick = { state.currentSnackbarData?.dismiss() }, ) { Icon( - painter = painterResource(id = R.drawable.ic_close), + painter = painterResource(id = BitwardenDrawable.ic_close), contentDescription = stringResource(id = R.string.close), tint = MaterialTheme.colorScheme.inverseOnSurface, modifier = Modifier diff --git a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/itemlisting/ItemListingScreen.kt b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/itemlisting/ItemListingScreen.kt index 032c26a7f1..969ed33acc 100644 --- a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/itemlisting/ItemListingScreen.kt +++ b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/itemlisting/ItemListingScreen.kt @@ -58,9 +58,9 @@ import com.bitwarden.authenticator.ui.authenticator.feature.itemlisting.model.It import com.bitwarden.authenticator.ui.authenticator.feature.itemlisting.model.SharedCodesDisplayState import com.bitwarden.authenticator.ui.authenticator.feature.itemlisting.model.VaultDropdownMenuAction import com.bitwarden.authenticator.ui.authenticator.feature.itemlisting.model.VerificationCodeDisplayItem -import com.bitwarden.authenticator.ui.platform.components.appbar.BitwardenMediumTopAppBar -import com.bitwarden.authenticator.ui.platform.components.appbar.BitwardenTopAppBar -import com.bitwarden.authenticator.ui.platform.components.appbar.action.BitwardenSearchActionItem +import com.bitwarden.authenticator.ui.platform.components.appbar.AuthenticatorMediumTopAppBar +import com.bitwarden.authenticator.ui.platform.components.appbar.AuthenticatorTopAppBar +import com.bitwarden.authenticator.ui.platform.components.appbar.action.AuthenticatorSearchActionItem import com.bitwarden.authenticator.ui.platform.components.button.BitwardenFilledButton import com.bitwarden.authenticator.ui.platform.components.button.BitwardenFilledTonalButton import com.bitwarden.authenticator.ui.platform.components.button.BitwardenTextButton @@ -84,6 +84,7 @@ import com.bitwarden.authenticator.ui.platform.theme.Typography import com.bitwarden.ui.platform.base.util.EventsEffect 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.util.asText import kotlinx.coroutines.launch @@ -363,11 +364,11 @@ private fun ItemListingContent( .fillMaxSize() .nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { - BitwardenMediumTopAppBar( + AuthenticatorMediumTopAppBar( title = stringResource(id = R.string.verification_codes), scrollBehavior = scrollBehavior, actions = { - BitwardenSearchActionItem( + AuthenticatorSearchActionItem( contentDescription = stringResource(id = R.string.search_codes), onClick = onNavigateToSearch, ) @@ -590,7 +591,7 @@ fun EmptyItemListingContent( .fillMaxSize() .nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { - BitwardenTopAppBar( + AuthenticatorTopAppBar( title = stringResource(id = R.string.verification_codes), scrollBehavior = scrollBehavior, navigationIcon = null, @@ -727,7 +728,7 @@ private fun DownloadBitwardenActionCard( onClick = onDismissClick, ) { Icon( - painter = painterResource(id = R.drawable.ic_close), + painter = painterResource(id = BitwardenDrawable.ic_close), contentDescription = stringResource(id = R.string.close), tint = MaterialTheme.colorScheme.onSurfaceVariant, modifier = Modifier @@ -778,7 +779,7 @@ private fun SyncWithBitwardenActionCard( Spacer(Modifier.width(width = 16.dp)) IconButton(onClick = onDismissClick) { Icon( - painter = painterResource(id = R.drawable.ic_close), + painter = painterResource(id = BitwardenDrawable.ic_close), contentDescription = stringResource(id = R.string.close), tint = MaterialTheme.colorScheme.onSurfaceVariant, modifier = Modifier.size(size = 24.dp), diff --git a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/manualcodeentry/ManualCodeEntryScreen.kt b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/manualcodeentry/ManualCodeEntryScreen.kt index 6db789ee19..634fe82fab 100644 --- a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/manualcodeentry/ManualCodeEntryScreen.kt +++ b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/manualcodeentry/ManualCodeEntryScreen.kt @@ -34,7 +34,7 @@ import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.authenticator.R -import com.bitwarden.authenticator.ui.platform.components.appbar.BitwardenTopAppBar +import com.bitwarden.authenticator.ui.platform.components.appbar.AuthenticatorTopAppBar import com.bitwarden.authenticator.ui.platform.components.dialog.BasicDialogState import com.bitwarden.authenticator.ui.platform.components.dialog.BitwardenBasicDialog import com.bitwarden.authenticator.ui.platform.components.dialog.BitwardenLoadingDialog @@ -49,6 +49,7 @@ import com.bitwarden.authenticator.ui.platform.manager.intent.IntentManager import com.bitwarden.authenticator.ui.platform.manager.permissions.PermissionsManager import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.toAnnotatedString +import com.bitwarden.ui.platform.resource.BitwardenDrawable /** * The screen to manually add a totp code. @@ -145,9 +146,9 @@ fun ManualCodeEntryScreen( BitwardenScaffold( modifier = Modifier.fillMaxSize(), topBar = { - BitwardenTopAppBar( + AuthenticatorTopAppBar( title = stringResource(id = R.string.create_verification_code), - navigationIcon = painterResource(id = R.drawable.ic_close), + navigationIcon = painterResource(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { viewModel.trySendAction(ManualCodeEntryAction.CloseClick) } diff --git a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/qrcodescan/QrCodeScanScreen.kt b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/qrcodescan/QrCodeScanScreen.kt index 76023a846a..f940e04465 100644 --- a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/qrcodescan/QrCodeScanScreen.kt +++ b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/qrcodescan/QrCodeScanScreen.kt @@ -60,13 +60,14 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.authenticator.R import com.bitwarden.authenticator.ui.authenticator.feature.qrcodescan.util.QrCodeAnalyzer import com.bitwarden.authenticator.ui.authenticator.feature.qrcodescan.util.QrCodeAnalyzerImpl -import com.bitwarden.authenticator.ui.platform.components.appbar.BitwardenTopAppBar +import com.bitwarden.authenticator.ui.platform.components.appbar.AuthenticatorTopAppBar import com.bitwarden.authenticator.ui.platform.components.dialog.BasicDialogState import com.bitwarden.authenticator.ui.platform.components.dialog.BitwardenBasicDialog import com.bitwarden.authenticator.ui.platform.components.scaffold.BitwardenScaffold import com.bitwarden.authenticator.ui.platform.theme.LocalNonMaterialColors import com.bitwarden.authenticator.ui.platform.theme.clickableSpanStyle import com.bitwarden.ui.platform.base.util.EventsEffect +import com.bitwarden.ui.platform.resource.BitwardenDrawable import com.bitwarden.ui.util.asText import java.util.concurrent.Executors import kotlin.coroutines.resume @@ -116,9 +117,9 @@ fun QrCodeScanScreen( BitwardenScaffold( modifier = Modifier.fillMaxSize(), topBar = { - BitwardenTopAppBar( + AuthenticatorTopAppBar( title = stringResource(id = R.string.scan_qr_code), - navigationIcon = painterResource(id = R.drawable.ic_close), + navigationIcon = painterResource(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { viewModel.trySendAction(QrCodeScanAction.CloseClick) } diff --git a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/search/ItemSearchScreen.kt b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/search/ItemSearchScreen.kt index 1be6066067..d80969ac44 100644 --- a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/search/ItemSearchScreen.kt +++ b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/search/ItemSearchScreen.kt @@ -21,11 +21,11 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.authenticator.R import com.bitwarden.authenticator.ui.authenticator.feature.search.handlers.SearchHandlers -import com.bitwarden.authenticator.ui.platform.components.appbar.BitwardenSearchTopAppBar -import com.bitwarden.authenticator.ui.platform.components.appbar.NavigationIcon +import com.bitwarden.authenticator.ui.platform.components.appbar.AuthenticatorSearchTopAppBar import com.bitwarden.authenticator.ui.platform.components.scaffold.BitwardenScaffold import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.bottomDivider +import com.bitwarden.ui.platform.components.appbar.NavigationIcon /** * The search screen for authenticator items. @@ -58,7 +58,7 @@ fun ItemSearchScreen( modifier = Modifier .nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { - BitwardenSearchTopAppBar( + AuthenticatorSearchTopAppBar( modifier = Modifier .semantics { testTag = "SearchFieldEntry" } .bottomDivider(), diff --git a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/appbar/BitwardenMediumTopAppBar.kt b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/appbar/AuthenticatorMediumTopAppBar.kt similarity index 92% rename from authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/appbar/BitwardenMediumTopAppBar.kt rename to authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/appbar/AuthenticatorMediumTopAppBar.kt index f8cba80f24..143ead4ec0 100644 --- a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/appbar/BitwardenMediumTopAppBar.kt +++ b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/appbar/AuthenticatorMediumTopAppBar.kt @@ -16,7 +16,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.semantics.semantics import androidx.compose.ui.semantics.testTag import androidx.compose.ui.tooling.preview.Preview -import com.bitwarden.authenticator.R +import com.bitwarden.ui.platform.resource.BitwardenDrawable /** * A custom Bitwarden-themed medium top app bar with support for actions. @@ -35,7 +35,7 @@ import com.bitwarden.authenticator.R */ @OptIn(ExperimentalMaterial3Api::class) @Composable -fun BitwardenMediumTopAppBar( +fun AuthenticatorMediumTopAppBar( title: String, scrollBehavior: TopAppBarScrollBehavior, modifier: Modifier = Modifier, @@ -65,9 +65,9 @@ fun BitwardenMediumTopAppBar( @OptIn(ExperimentalMaterial3Api::class) @Preview(showBackground = true) @Composable -private fun BitwardenMediumTopAppBar_preview() { +private fun AuthenticatorMediumTopAppBar_preview() { MaterialTheme { - BitwardenMediumTopAppBar( + AuthenticatorMediumTopAppBar( title = "Preview Title", scrollBehavior = TopAppBarDefaults .exitUntilCollapsedScrollBehavior( @@ -76,7 +76,7 @@ private fun BitwardenMediumTopAppBar_preview() { actions = { IconButton(onClick = { }) { Icon( - painter = painterResource(id = R.drawable.ic_more), + painter = painterResource(id = BitwardenDrawable.ic_ellipsis_vertical), contentDescription = "", tint = MaterialTheme.colorScheme.onSurface, ) diff --git a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/appbar/BitwardenSearchTopAppBar.kt b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/appbar/AuthenticatorSearchTopAppBar.kt similarity index 94% rename from authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/appbar/BitwardenSearchTopAppBar.kt rename to authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/appbar/AuthenticatorSearchTopAppBar.kt index 49c8d58f01..5351a7b57c 100644 --- a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/appbar/BitwardenSearchTopAppBar.kt +++ b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/appbar/AuthenticatorSearchTopAppBar.kt @@ -26,6 +26,8 @@ import androidx.compose.ui.semantics.testTag import androidx.compose.ui.text.input.ImeAction import com.bitwarden.authenticator.R import com.bitwarden.ui.platform.base.util.mirrorIfRtl +import com.bitwarden.ui.platform.components.appbar.NavigationIcon +import com.bitwarden.ui.platform.resource.BitwardenDrawable /** * Represents a Bitwarden styled [TopAppBar] that assumes the following components: @@ -35,7 +37,7 @@ import com.bitwarden.ui.platform.base.util.mirrorIfRtl */ @OptIn(ExperimentalMaterial3Api::class) @Composable -fun BitwardenSearchTopAppBar( +fun AuthenticatorSearchTopAppBar( searchTerm: String, placeholder: String, onSearchTermChange: (String) -> Unit, @@ -85,7 +87,7 @@ fun BitwardenSearchTopAppBar( onClick = { onSearchTermChange("") }, ) { Icon( - painter = painterResource(id = R.drawable.ic_close), + painter = painterResource(id = BitwardenDrawable.ic_close), contentDescription = stringResource(id = R.string.clear), ) } diff --git a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/appbar/BitwardenTopAppBar.kt b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/appbar/AuthenticatorTopAppBar.kt similarity index 87% rename from authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/appbar/BitwardenTopAppBar.kt rename to authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/appbar/AuthenticatorTopAppBar.kt index bf65478985..ac4763615a 100644 --- a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/appbar/BitwardenTopAppBar.kt +++ b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/appbar/AuthenticatorTopAppBar.kt @@ -22,6 +22,8 @@ import androidx.compose.ui.tooling.preview.Preview import com.bitwarden.authenticator.R import com.bitwarden.authenticator.ui.platform.theme.AuthenticatorTheme import com.bitwarden.ui.platform.base.util.mirrorIfRtl +import com.bitwarden.ui.platform.components.appbar.NavigationIcon +import com.bitwarden.ui.platform.resource.BitwardenDrawable /** * Represents a Bitwarden styled [TopAppBar] that assumes the following components: @@ -35,7 +37,7 @@ import com.bitwarden.ui.platform.base.util.mirrorIfRtl */ @OptIn(ExperimentalMaterial3Api::class) @Composable -fun BitwardenTopAppBar( +fun AuthenticatorTopAppBar( title: String, scrollBehavior: TopAppBarScrollBehavior, navigationIcon: Painter, @@ -44,7 +46,7 @@ fun BitwardenTopAppBar( modifier: Modifier = Modifier, actions: @Composable RowScope.() -> Unit = { }, ) { - BitwardenTopAppBar( + AuthenticatorTopAppBar( title = title, scrollBehavior = scrollBehavior, navigationIcon = NavigationIcon( @@ -68,7 +70,7 @@ fun BitwardenTopAppBar( */ @OptIn(ExperimentalMaterial3Api::class) @Composable -fun BitwardenTopAppBar( +fun AuthenticatorTopAppBar( title: String, scrollBehavior: TopAppBarScrollBehavior, navigationIcon: NavigationIcon?, @@ -116,32 +118,19 @@ fun BitwardenTopAppBar( @OptIn(ExperimentalMaterial3Api::class) @Preview @Composable -private fun BitwardenTopAppBar_preview() { +private fun AuthenticatorTopAppBar_preview() { AuthenticatorTheme { - BitwardenTopAppBar( + AuthenticatorTopAppBar( title = "Title", scrollBehavior = TopAppBarDefaults .exitUntilCollapsedScrollBehavior( rememberTopAppBarState(), ), navigationIcon = NavigationIcon( - navigationIcon = painterResource(id = R.drawable.ic_close), + navigationIcon = painterResource(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = { }, ), ) } } - -/** - * Represents all data required to display a [navigationIcon]. - * - * @property navigationIcon The [Painter] displayed as part of the icon. - * @property navigationIconContentDescription The content description associated with the icon. - * @property onNavigationIconClick The click action that is invoked when the icon is tapped. - */ -data class NavigationIcon( - val navigationIcon: Painter, - val navigationIconContentDescription: String, - val onNavigationIconClick: () -> Unit, -) diff --git a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/appbar/action/BitwardenSearchActionItem.kt b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/appbar/action/AuthenticatorSearchActionItem.kt similarity index 85% rename from authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/appbar/action/BitwardenSearchActionItem.kt rename to authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/appbar/action/AuthenticatorSearchActionItem.kt index 53387b1643..f4c4803eeb 100644 --- a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/appbar/action/BitwardenSearchActionItem.kt +++ b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/appbar/action/AuthenticatorSearchActionItem.kt @@ -10,17 +10,17 @@ import com.bitwarden.authenticator.R import com.bitwarden.ui.platform.components.util.rememberVectorPainter /** - * Represents the Bitwarden search action item. + * Represents the Authenticator search action item. * * This is an [Icon] composable tailored specifically for the search functionality - * in the Bitwarden app. + * in the Authenticator app. * It presents the search icon and offers an `onClick` callback for when the icon is tapped. * * @param contentDescription A description of the UI element, used for accessibility purposes. * @param onClick A callback to be invoked when this action item is clicked. */ @Composable -fun BitwardenSearchActionItem( +fun AuthenticatorSearchActionItem( contentDescription: String, onClick: () -> Unit, ) { @@ -37,8 +37,8 @@ fun BitwardenSearchActionItem( @Preview(showBackground = true) @Composable -private fun BitwardenSearchActionItem_preview() { - BitwardenSearchActionItem( +private fun AuthenticatorSearchActionItem_preview() { + AuthenticatorSearchActionItem( contentDescription = "Search", onClick = {}, ) diff --git a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/card/BitwardenActionCard.kt b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/card/BitwardenActionCard.kt index b327fad440..28d93bed0e 100644 --- a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/card/BitwardenActionCard.kt +++ b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/components/card/BitwardenActionCard.kt @@ -26,6 +26,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.bitwarden.authenticator.R import com.bitwarden.ui.platform.components.util.rememberVectorPainter +import com.bitwarden.ui.platform.resource.BitwardenDrawable /** * A reusable card for displaying actions to the user. @@ -97,7 +98,7 @@ fun BitwardenActionCard( @Composable private fun ActionCardPreview() { BitwardenActionCard( - actionIcon = rememberVectorPainter(id = R.drawable.ic_close), + actionIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), actionText = "This is an action.", callToActionText = "Take action", titleText = "This is a title", @@ -119,7 +120,7 @@ private fun ActionCardWithTrailingPreview() { onClick = {}, ) { Icon( - painter = painterResource(id = R.drawable.ic_close), + painter = painterResource(id = BitwardenDrawable.ic_close), contentDescription = stringResource(id = R.string.close), tint = MaterialTheme.colorScheme.onSurfaceVariant, modifier = Modifier diff --git a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/debugmenu/DebugMenuScreen.kt b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/debugmenu/DebugMenuScreen.kt index 62d4b8ec97..47c9277db7 100644 --- a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/debugmenu/DebugMenuScreen.kt +++ b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/debugmenu/DebugMenuScreen.kt @@ -22,8 +22,7 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.authenticator.R import com.bitwarden.authenticator.data.platform.manager.model.FlagKey -import com.bitwarden.authenticator.ui.platform.components.appbar.BitwardenTopAppBar -import com.bitwarden.authenticator.ui.platform.components.appbar.NavigationIcon +import com.bitwarden.authenticator.ui.platform.components.appbar.AuthenticatorTopAppBar import com.bitwarden.authenticator.ui.platform.components.button.BitwardenFilledButton import com.bitwarden.authenticator.ui.platform.components.divider.BitwardenHorizontalDivider import com.bitwarden.authenticator.ui.platform.components.header.BitwardenListHeaderText @@ -32,6 +31,7 @@ import com.bitwarden.authenticator.ui.platform.feature.debugmenu.components.List import com.bitwarden.authenticator.ui.platform.theme.AuthenticatorTheme import com.bitwarden.ui.platform.base.util.EventsEffect import com.bitwarden.ui.platform.base.util.standardHorizontalMargin +import com.bitwarden.ui.platform.components.appbar.NavigationIcon import com.bitwarden.ui.platform.components.util.rememberVectorPainter /** @@ -57,7 +57,7 @@ fun DebugMenuScreen( .fillMaxSize() .nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { - BitwardenTopAppBar( + AuthenticatorTopAppBar( title = stringResource(R.string.debug_menu), scrollBehavior = scrollBehavior, navigationIcon = NavigationIcon( diff --git a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/settings/SettingsScreen.kt b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/settings/SettingsScreen.kt index 46fd1e5ed3..e2fde7436f 100644 --- a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/settings/SettingsScreen.kt +++ b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/settings/SettingsScreen.kt @@ -48,7 +48,7 @@ import androidx.core.net.toUri import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.authenticator.R -import com.bitwarden.authenticator.ui.platform.components.appbar.BitwardenMediumTopAppBar +import com.bitwarden.authenticator.ui.platform.components.appbar.AuthenticatorMediumTopAppBar import com.bitwarden.authenticator.ui.platform.components.dialog.BitwardenSelectionDialog import com.bitwarden.authenticator.ui.platform.components.dialog.BitwardenSelectionRow import com.bitwarden.authenticator.ui.platform.components.header.BitwardenListHeaderText @@ -138,7 +138,7 @@ fun SettingsScreen( .fillMaxSize() .nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { - BitwardenMediumTopAppBar( + AuthenticatorMediumTopAppBar( title = stringResource(id = R.string.settings), scrollBehavior = scrollBehavior, ) diff --git a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/settings/export/ExportScreen.kt b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/settings/export/ExportScreen.kt index b0eab5a607..2950320d3e 100644 --- a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/settings/export/ExportScreen.kt +++ b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/settings/export/ExportScreen.kt @@ -29,7 +29,7 @@ import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.authenticator.R -import com.bitwarden.authenticator.ui.platform.components.appbar.BitwardenTopAppBar +import com.bitwarden.authenticator.ui.platform.components.appbar.AuthenticatorTopAppBar import com.bitwarden.authenticator.ui.platform.components.button.BitwardenFilledTonalButton import com.bitwarden.authenticator.ui.platform.components.dialog.BasicDialogState import com.bitwarden.authenticator.ui.platform.components.dialog.BitwardenBasicDialog @@ -43,6 +43,7 @@ import com.bitwarden.authenticator.ui.platform.feature.settings.export.model.Exp import com.bitwarden.authenticator.ui.platform.manager.intent.IntentManager import com.bitwarden.authenticator.ui.platform.util.displayLabel import com.bitwarden.ui.platform.base.util.EventsEffect +import com.bitwarden.ui.platform.resource.BitwardenDrawable import kotlinx.collections.immutable.toImmutableList /** @@ -141,10 +142,10 @@ fun ExportScreen( .fillMaxSize() .nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { - BitwardenTopAppBar( + AuthenticatorTopAppBar( title = stringResource(id = R.string.export), scrollBehavior = scrollBehavior, - navigationIcon = painterResource(id = R.drawable.ic_close), + navigationIcon = painterResource(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { diff --git a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/settings/importing/ImportingScreen.kt b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/settings/importing/ImportingScreen.kt index 178b66d733..0404bdcf71 100644 --- a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/settings/importing/ImportingScreen.kt +++ b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/settings/importing/ImportingScreen.kt @@ -28,7 +28,7 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitwarden.authenticator.R import com.bitwarden.authenticator.data.platform.manager.imports.model.ImportFileFormat -import com.bitwarden.authenticator.ui.platform.components.appbar.BitwardenTopAppBar +import com.bitwarden.authenticator.ui.platform.components.appbar.AuthenticatorTopAppBar import com.bitwarden.authenticator.ui.platform.components.button.BitwardenFilledTonalButton import com.bitwarden.authenticator.ui.platform.components.dialog.BitwardenLoadingDialog import com.bitwarden.authenticator.ui.platform.components.dialog.BitwardenTwoButtonDialog @@ -39,6 +39,7 @@ import com.bitwarden.authenticator.ui.platform.composition.LocalIntentManager import com.bitwarden.authenticator.ui.platform.manager.intent.IntentManager import com.bitwarden.authenticator.ui.platform.util.displayLabel import com.bitwarden.ui.platform.base.util.EventsEffect +import com.bitwarden.ui.platform.resource.BitwardenDrawable import kotlinx.collections.immutable.toImmutableList /** @@ -118,10 +119,10 @@ fun ImportingScreen( .fillMaxSize() .nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { - BitwardenTopAppBar( + AuthenticatorTopAppBar( title = stringResource(id = R.string.import_vault), scrollBehavior = scrollBehavior, - navigationIcon = painterResource(id = R.drawable.ic_close), + navigationIcon = painterResource(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = R.string.close), onNavigationIconClick = remember(viewModel) { { diff --git a/authenticator/src/main/res/drawable/ic_close.xml b/authenticator/src/main/res/drawable/ic_close.xml deleted file mode 100644 index 0709d97e4d..0000000000 --- a/authenticator/src/main/res/drawable/ic_close.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/authenticator/src/main/res/drawable/ic_more.xml b/authenticator/src/main/res/drawable/ic_more.xml deleted file mode 100644 index 2cf873f58e..0000000000 --- a/authenticator/src/main/res/drawable/ic_more.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/BitwardenMediumTopAppBar.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/appbar/BitwardenMediumTopAppBar.kt similarity index 93% rename from app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/BitwardenMediumTopAppBar.kt rename to ui/src/main/kotlin/com/bitwarden/ui/platform/components/appbar/BitwardenMediumTopAppBar.kt index 9defa51a42..a2596d05b2 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/BitwardenMediumTopAppBar.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/appbar/BitwardenMediumTopAppBar.kt @@ -1,4 +1,4 @@ -package com.x8bit.bitwarden.ui.platform.components.appbar +package com.bitwarden.ui.platform.components.appbar import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.WindowInsets @@ -21,11 +21,11 @@ import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.base.util.bottomDivider import com.bitwarden.ui.platform.base.util.mirrorIfRtl import com.bitwarden.ui.platform.base.util.scrolledContainerBottomDivider +import com.bitwarden.ui.platform.components.appbar.color.bitwardenTopAppBarColors import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton +import com.bitwarden.ui.platform.components.model.TopAppBarDividerStyle +import com.bitwarden.ui.platform.resource.BitwardenDrawable import com.bitwarden.ui.platform.theme.BitwardenTheme -import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.color.bitwardenTopAppBarColors -import com.x8bit.bitwarden.ui.platform.components.model.TopAppBarDividerStyle /** * A custom Bitwarden-themed medium top app bar with support for actions. @@ -115,7 +115,7 @@ private fun BitwardenMediumTopAppBar_preview() { ), actions = { BitwardenStandardIconButton( - vectorIconRes = R.drawable.ic_ellipsis_vertical, + vectorIconRes = BitwardenDrawable.ic_ellipsis_vertical, contentDescription = "", onClick = { }, ) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/BitwardenSearchTopAppBar.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/appbar/BitwardenSearchTopAppBar.kt similarity index 89% rename from app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/BitwardenSearchTopAppBar.kt rename to ui/src/main/kotlin/com/bitwarden/ui/platform/components/appbar/BitwardenSearchTopAppBar.kt index 42e4d145da..9cca65516b 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/BitwardenSearchTopAppBar.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/appbar/BitwardenSearchTopAppBar.kt @@ -1,4 +1,4 @@ -package com.x8bit.bitwarden.ui.platform.components.appbar +package com.bitwarden.ui.platform.components.appbar import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.WindowInsetsSides @@ -20,16 +20,15 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.platform.testTag -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.ImeAction import com.bitwarden.ui.platform.base.util.bottomDivider import com.bitwarden.ui.platform.base.util.mirrorIfRtl import com.bitwarden.ui.platform.base.util.tabNavigation +import com.bitwarden.ui.platform.components.appbar.color.bitwardenTopAppBarColors import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton +import com.bitwarden.ui.platform.components.field.color.bitwardenTextFieldColors +import com.bitwarden.ui.platform.resource.BitwardenDrawable import com.bitwarden.ui.platform.theme.BitwardenTheme -import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.color.bitwardenTopAppBarColors -import com.x8bit.bitwarden.ui.platform.components.field.color.bitwardenTextFieldColors /** * Represents a Bitwarden styled [TopAppBar] that assumes the following components: @@ -46,6 +45,7 @@ fun BitwardenSearchTopAppBar( onSearchTermChange: (String) -> Unit, scrollBehavior: TopAppBarScrollBehavior, navigationIcon: NavigationIcon?, + clearIconContentDescription: String, modifier: Modifier = Modifier, windowInsets: WindowInsets = TopAppBarDefaults.windowInsets .union(WindowInsets.displayCutout.only(WindowInsetsSides.Horizontal)), @@ -81,8 +81,8 @@ fun BitwardenSearchTopAppBar( onValueChange = onSearchTermChange, trailingIcon = { BitwardenStandardIconButton( - vectorIconRes = R.drawable.ic_clear, - contentDescription = stringResource(id = R.string.clear), + vectorIconRes = BitwardenDrawable.ic_clear, + contentDescription = clearIconContentDescription, onClick = { onSearchTermChange("") }, ) }, diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/BitwardenTopAppBar.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/appbar/BitwardenTopAppBar.kt similarity index 94% rename from app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/BitwardenTopAppBar.kt rename to ui/src/main/kotlin/com/bitwarden/ui/platform/components/appbar/BitwardenTopAppBar.kt index accd9fd507..2200602241 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/BitwardenTopAppBar.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/appbar/BitwardenTopAppBar.kt @@ -1,4 +1,4 @@ -package com.x8bit.bitwarden.ui.platform.components.appbar +package com.bitwarden.ui.platform.components.appbar import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.WindowInsets @@ -21,20 +21,19 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.platform.testTag -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp +import com.bitwarden.ui.R import com.bitwarden.ui.platform.base.util.bottomDivider import com.bitwarden.ui.platform.base.util.mirrorIfRtl import com.bitwarden.ui.platform.base.util.scrolledContainerBottomDivider +import com.bitwarden.ui.platform.components.appbar.color.bitwardenTopAppBarColors import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton +import com.bitwarden.ui.platform.components.model.TopAppBarDividerStyle import com.bitwarden.ui.platform.components.util.rememberVectorPainter import com.bitwarden.ui.platform.theme.BitwardenTheme -import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.color.bitwardenTopAppBarColors -import com.x8bit.bitwarden.ui.platform.components.model.TopAppBarDividerStyle /** * Represents a Bitwarden styled [TopAppBar] that assumes the following components: @@ -197,7 +196,7 @@ private fun BitwardenTopAppBar_preview() { ), navigationIcon = NavigationIcon( navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), - navigationIconContentDescription = stringResource(id = R.string.close), + navigationIconContentDescription = "Close", onNavigationIconClick = { }, ), ) @@ -217,7 +216,7 @@ private fun BitwardenTopAppBarOverflow_preview() { ), navigationIcon = NavigationIcon( navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), - navigationIconContentDescription = stringResource(id = R.string.close), + navigationIconContentDescription = "Close", onNavigationIconClick = { }, ), ) @@ -237,7 +236,7 @@ private fun BitwardenTopAppBarOverflowCutoff_preview() { ), navigationIcon = NavigationIcon( navigationIcon = rememberVectorPainter(id = R.drawable.ic_close), - navigationIconContentDescription = stringResource(id = R.string.close), + navigationIconContentDescription = "Close", onNavigationIconClick = { }, ), ) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/action/BitwardenOverflowActionItem.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/appbar/action/BitwardenOverflowActionItem.kt similarity index 84% rename from app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/action/BitwardenOverflowActionItem.kt rename to ui/src/main/kotlin/com/bitwarden/ui/platform/components/appbar/action/BitwardenOverflowActionItem.kt index 0cc47f9c2e..1c201ac681 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/action/BitwardenOverflowActionItem.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/appbar/action/BitwardenOverflowActionItem.kt @@ -1,4 +1,4 @@ -package com.x8bit.bitwarden.ui.platform.components.appbar.action +package com.bitwarden.ui.platform.components.appbar.action import androidx.annotation.DrawableRes import androidx.compose.foundation.layout.Box @@ -16,17 +16,17 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.testTag -import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.semantics import androidx.compose.ui.semantics.testTagsAsResourceId import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.dp import com.bitwarden.ui.platform.base.util.nullableTestTag +import com.bitwarden.ui.platform.components.appbar.color.bitwardenMenuItemColors +import com.bitwarden.ui.platform.components.appbar.model.OverflowMenuItemData import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton +import com.bitwarden.ui.platform.resource.BitwardenDrawable import com.bitwarden.ui.platform.theme.BitwardenTheme -import com.x8bit.bitwarden.R -import com.x8bit.bitwarden.ui.platform.components.appbar.color.bitwardenMenuItemColors import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf @@ -43,9 +43,9 @@ import kotlinx.collections.immutable.persistentListOf @Composable fun BitwardenOverflowActionItem( menuItemDataList: ImmutableList, + contentDescription: String, modifier: Modifier = Modifier, - @DrawableRes vectorIconRes: Int = R.drawable.ic_ellipsis_vertical, - contentDescription: String = stringResource(id = R.string.more), + @DrawableRes vectorIconRes: Int = BitwardenDrawable.ic_ellipsis_vertical, testTag: String? = "HeaderBarOptionsButton", ) { if (menuItemDataList.isEmpty()) return @@ -107,6 +107,7 @@ fun BitwardenOverflowActionItem( private fun BitwardenOverflowActionItem_preview() { BitwardenTheme { BitwardenOverflowActionItem( + contentDescription = "More", menuItemDataList = persistentListOf( OverflowMenuItemData( text = "Test", @@ -116,18 +117,3 @@ private fun BitwardenOverflowActionItem_preview() { ) } } - -/** - * Data used to populate one row of an overflow dropdown menu. - * - * @param text The text displayed for the item in the menu. - * @param onClick A callback for when the menu item is clicked. - * @param isEnabled Indicates that this overflow item is enabled or not. - * @param color The color of the content. - */ -data class OverflowMenuItemData( - val text: String, - val onClick: () -> Unit, - val isEnabled: Boolean = true, - val color: Color = Color.Unspecified, -) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/action/BitwardenSearchActionItem.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/appbar/action/BitwardenSearchActionItem.kt similarity index 87% rename from app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/action/BitwardenSearchActionItem.kt rename to ui/src/main/kotlin/com/bitwarden/ui/platform/components/appbar/action/BitwardenSearchActionItem.kt index 33d1f5d495..7d6f3461ff 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/action/BitwardenSearchActionItem.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/appbar/action/BitwardenSearchActionItem.kt @@ -1,4 +1,4 @@ -package com.x8bit.bitwarden.ui.platform.components.appbar.action +package com.bitwarden.ui.platform.components.appbar.action import androidx.compose.material3.Icon import androidx.compose.runtime.Composable @@ -6,7 +6,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag import androidx.compose.ui.tooling.preview.Preview import com.bitwarden.ui.platform.components.button.BitwardenStandardIconButton -import com.x8bit.bitwarden.R +import com.bitwarden.ui.platform.resource.BitwardenDrawable /** * Represents the Bitwarden search action item. @@ -24,7 +24,7 @@ fun BitwardenSearchActionItem( onClick: () -> Unit, ) { BitwardenStandardIconButton( - vectorIconRes = R.drawable.ic_search, + vectorIconRes = BitwardenDrawable.ic_search, contentDescription = contentDescription, onClick = onClick, modifier = Modifier.testTag(tag = "SearchButton"), diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/color/BitwardenMenuItemColors.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/appbar/color/BitwardenMenuItemColors.kt similarity index 92% rename from app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/color/BitwardenMenuItemColors.kt rename to ui/src/main/kotlin/com/bitwarden/ui/platform/components/appbar/color/BitwardenMenuItemColors.kt index b50cca78a7..c3d33fe7b7 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/color/BitwardenMenuItemColors.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/appbar/color/BitwardenMenuItemColors.kt @@ -1,4 +1,4 @@ -package com.x8bit.bitwarden.ui.platform.components.appbar.color +package com.bitwarden.ui.platform.components.appbar.color import androidx.compose.material3.MenuItemColors import androidx.compose.runtime.Composable diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/color/BitwardenTopAppBarColors.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/appbar/color/BitwardenTopAppBarColors.kt similarity index 92% rename from app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/color/BitwardenTopAppBarColors.kt rename to ui/src/main/kotlin/com/bitwarden/ui/platform/components/appbar/color/BitwardenTopAppBarColors.kt index 65fde44641..18944282d2 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/appbar/color/BitwardenTopAppBarColors.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/appbar/color/BitwardenTopAppBarColors.kt @@ -1,4 +1,4 @@ -package com.x8bit.bitwarden.ui.platform.components.appbar.color +package com.bitwarden.ui.platform.components.appbar.color import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.TopAppBarColors diff --git a/ui/src/main/kotlin/com/bitwarden/ui/platform/components/appbar/model/OverflowMenuItemData.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/appbar/model/OverflowMenuItemData.kt new file mode 100644 index 0000000000..f771862adb --- /dev/null +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/appbar/model/OverflowMenuItemData.kt @@ -0,0 +1,18 @@ +package com.bitwarden.ui.platform.components.appbar.model + +import androidx.compose.ui.graphics.Color + +/** + * Data used to populate one row of an overflow dropdown menu. + * + * @param text The text displayed for the item in the menu. + * @param onClick A callback for when the menu item is clicked. + * @param isEnabled Indicates that this overflow item is enabled or not. + * @param color The color of the content. + */ +data class OverflowMenuItemData( + val text: String, + val onClick: () -> Unit, + val isEnabled: Boolean = true, + val color: Color = Color.Unspecified, +) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/field/color/BitwardenTextFieldColors.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/field/color/BitwardenTextFieldColors.kt similarity index 98% rename from app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/field/color/BitwardenTextFieldColors.kt rename to ui/src/main/kotlin/com/bitwarden/ui/platform/components/field/color/BitwardenTextFieldColors.kt index 3b0ce27a1d..153521c910 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/field/color/BitwardenTextFieldColors.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/field/color/BitwardenTextFieldColors.kt @@ -1,4 +1,4 @@ -package com.x8bit.bitwarden.ui.platform.components.field.color +package com.bitwarden.ui.platform.components.field.color import androidx.compose.foundation.text.selection.TextSelectionColors import androidx.compose.material3.TextFieldColors diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/model/TopAppBarDividerStyle.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/model/TopAppBarDividerStyle.kt similarity index 55% rename from app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/model/TopAppBarDividerStyle.kt rename to ui/src/main/kotlin/com/bitwarden/ui/platform/components/model/TopAppBarDividerStyle.kt index b44fbe5f5a..b114bb5675 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/model/TopAppBarDividerStyle.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/model/TopAppBarDividerStyle.kt @@ -1,6 +1,4 @@ -package com.x8bit.bitwarden.ui.platform.components.model - -import com.x8bit.bitwarden.ui.platform.components.appbar.BitwardenMediumTopAppBar +package com.bitwarden.ui.platform.components.model /** * Defines the possible display options for a bottom divider on a [BitwardenMediumTopAppBar]. diff --git a/app/src/main/res/drawable/ic_clear.xml b/ui/src/main/res/drawable/ic_clear.xml similarity index 100% rename from app/src/main/res/drawable/ic_clear.xml rename to ui/src/main/res/drawable/ic_clear.xml diff --git a/app/src/main/res/drawable/ic_close.xml b/ui/src/main/res/drawable/ic_close.xml similarity index 100% rename from app/src/main/res/drawable/ic_close.xml rename to ui/src/main/res/drawable/ic_close.xml diff --git a/app/src/main/res/drawable/ic_ellipsis_vertical.xml b/ui/src/main/res/drawable/ic_ellipsis_vertical.xml similarity index 100% rename from app/src/main/res/drawable/ic_ellipsis_vertical.xml rename to ui/src/main/res/drawable/ic_ellipsis_vertical.xml diff --git a/app/src/main/res/drawable/ic_search.xml b/ui/src/main/res/drawable/ic_search.xml similarity index 100% rename from app/src/main/res/drawable/ic_search.xml rename to ui/src/main/res/drawable/ic_search.xml From ab2ac60957a809da65475a8a81c9e0efa0171d95 Mon Sep 17 00:00:00 2001 From: David Perez Date: Thu, 29 May 2025 13:25:23 -0500 Subject: [PATCH 24/34] PM-15229: Update logic for handling edge-to-edge (#5282) --- app/src/main/AndroidManifest.xml | 1 + .../com/x8bit/bitwarden/MainActivity.kt | 3 + app/src/main/res/values/styles.xml | 2 - authenticator/src/main/AndroidManifest.xml | 1 + .../bitwarden/authenticator/MainActivity.kt | 3 + .../ui/platform/theme/AuthenticatorTheme.kt | 18 ----- authenticator/src/main/res/values/styles.xml | 2 - .../ui/platform/theme/BitwardenTheme.kt | 22 +----- .../ui/platform/util/AppThemeExtensions.kt | 15 ++++ .../util/ComponentActivityExtensions.kt | 75 +++++++++++++++++++ .../platform/util/ConfigurationExtensions.kt | 9 +++ .../platform/util/AppThemeExtensionsTest.kt | 30 ++++++++ 12 files changed, 138 insertions(+), 43 deletions(-) create mode 100644 ui/src/main/kotlin/com/bitwarden/ui/platform/util/AppThemeExtensions.kt create mode 100644 ui/src/main/kotlin/com/bitwarden/ui/platform/util/ComponentActivityExtensions.kt create mode 100644 ui/src/main/kotlin/com/bitwarden/ui/platform/util/ConfigurationExtensions.kt create mode 100644 ui/src/test/kotlin/com/bitwarden/ui/platform/util/AppThemeExtensionsTest.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 21221c8a78..000043f60b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,6 +48,7 @@ tools:targetApi="36">