[PM-21357] Migrate ModifierExtensions to ui module (#5215)

This commit is contained in:
Patrick Honkonen
2025-05-19 16:02:52 -04:00
committed by GitHub
parent 183584f678
commit 6719534494
113 changed files with 147 additions and 232 deletions

View File

@@ -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.base.util.bottomDivider
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.scaffold.BitwardenScaffold
import com.bitwarden.ui.platform.base.util.EventsEffect
import com.bitwarden.ui.platform.base.util.bottomDivider
/**
* The search screen for authenticator items.

View File

@@ -1,77 +0,0 @@
package com.bitwarden.authenticator.ui.platform.base.util
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.DividerDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Stable
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.drawWithCache
import androidx.compose.ui.draw.scale
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalLayoutDirection
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
import com.bitwarden.annotation.OmitFromCoverage
import com.bitwarden.authenticator.ui.platform.util.isPortrait
/**
* This is a [Modifier] extension for drawing a divider at the bottom of the composable.
*/
@Stable
@Composable
fun Modifier.bottomDivider(
paddingStart: Dp = 0.dp,
paddingEnd: Dp = 0.dp,
thickness: Dp = DividerDefaults.Thickness,
color: Color = DividerDefaults.color,
enabled: Boolean = true,
): Modifier = drawWithCache {
onDrawWithContent {
drawContent()
if (enabled) {
drawLine(
color = color,
strokeWidth = thickness.toPx(),
start = Offset(
x = paddingStart.toPx(),
y = size.height - thickness.toPx() / 2,
),
end = Offset(
x = size.width - paddingEnd.toPx(),
y = size.height - thickness.toPx() / 2,
),
)
}
}
}
/**
* This is a [Modifier] extension for mirroring the contents of a composable when the layout
* direction is set to [LayoutDirection.Rtl]. Primarily used for directional icons, such as the
* up button and chevrons.
*/
@Stable
@Composable
fun Modifier.mirrorIfRtl(): Modifier =
if (LocalLayoutDirection.current == LayoutDirection.Rtl) {
scale(scaleX = -1f, scaleY = 1f)
} else {
this
}
/**
* This is a [Modifier] extension for ensuring that the content uses the standard horizontal margin.
*/
@OmitFromCoverage
@Stable
@Composable
fun Modifier.standardHorizontalMargin(
portrait: Dp = 16.dp,
landscape: Dp = 48.dp,
): Modifier {
val config = LocalConfiguration.current
return this.padding(horizontal = if (config.isPortrait) portrait else landscape)
}

View File

@@ -25,7 +25,7 @@ import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.semantics.testTag
import androidx.compose.ui.text.input.ImeAction
import com.bitwarden.authenticator.R
import com.bitwarden.authenticator.ui.platform.base.util.mirrorIfRtl
import com.bitwarden.ui.platform.base.util.mirrorIfRtl
/**
* Represents a Bitwarden styled [TopAppBar] that assumes the following components:

View File

@@ -20,8 +20,8 @@ import androidx.compose.ui.semantics.testTag
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import com.bitwarden.authenticator.R
import com.bitwarden.authenticator.ui.platform.base.util.mirrorIfRtl
import com.bitwarden.authenticator.ui.platform.theme.AuthenticatorTheme
import com.bitwarden.ui.platform.base.util.mirrorIfRtl
/**
* Represents a Bitwarden styled [TopAppBar] that assumes the following components:

View File

@@ -11,10 +11,10 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import com.bitwarden.authenticator.R
import com.bitwarden.authenticator.ui.platform.base.util.mirrorIfRtl
import com.bitwarden.authenticator.ui.platform.components.dialog.BitwardenTwoButtonDialog
import com.bitwarden.authenticator.ui.platform.components.util.rememberVectorPainter
import com.bitwarden.authenticator.ui.platform.theme.AuthenticatorTheme
import com.bitwarden.ui.platform.base.util.mirrorIfRtl
/**
* Represents a row of text that can be clicked on and contains an external link.

View File

@@ -22,7 +22,6 @@ 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.base.util.standardHorizontalMargin
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.button.BitwardenFilledButton
@@ -33,6 +32,7 @@ import com.bitwarden.authenticator.ui.platform.components.util.rememberVectorPai
import com.bitwarden.authenticator.ui.platform.feature.debugmenu.components.ListItemContent
import com.bitwarden.authenticator.ui.platform.theme.AuthenticatorTheme
import com.bitwarden.ui.platform.base.util.EventsEffect
import com.bitwarden.ui.platform.base.util.standardHorizontalMargin
/**
* Top level screen for the debug menu.

View File

@@ -48,7 +48,6 @@ 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.base.util.mirrorIfRtl
import com.bitwarden.authenticator.ui.platform.components.appbar.BitwardenMediumTopAppBar
import com.bitwarden.authenticator.ui.platform.components.dialog.BitwardenSelectionDialog
import com.bitwarden.authenticator.ui.platform.components.dialog.BitwardenSelectionRow
@@ -66,6 +65,7 @@ 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.mirrorIfRtl
import com.bitwarden.ui.platform.feature.settings.appearance.model.AppTheme
import com.bitwarden.ui.util.Text
import com.bitwarden.ui.util.asText

View File

@@ -38,25 +38,19 @@ import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Dp
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.base.util.standardHorizontalMargin
import com.bitwarden.authenticator.ui.platform.components.button.BitwardenFilledTonalButton
import com.bitwarden.authenticator.ui.platform.components.button.BitwardenTextButton
import com.bitwarden.authenticator.ui.platform.components.scaffold.BitwardenScaffold
import com.bitwarden.authenticator.ui.platform.components.util.rememberVectorPainter
import com.bitwarden.authenticator.ui.platform.util.isPortrait
import com.bitwarden.ui.platform.base.util.EventsEffect
import com.bitwarden.ui.platform.base.util.standardHorizontalMargin
import kotlinx.coroutines.launch
/**
* The custom horizontal margin that is specific to this screen.
*/
private val LANDSCAPE_HORIZONTAL_MARGIN: Dp = 48.dp
/**
* Top level composable for the tutorial screen.
*/
@@ -144,7 +138,7 @@ private fun TutorialScreenContent(
TutorialScreenLandscape(
state = state.pages[index],
modifier = Modifier
.standardHorizontalMargin(landscape = LANDSCAPE_HORIZONTAL_MARGIN)
.standardHorizontalMargin()
.statusBarsPadding(),
)
}
@@ -165,7 +159,7 @@ private fun TutorialScreenContent(
label = state.actionButtonText,
onClick = { continueClick(state.index) },
modifier = Modifier
.standardHorizontalMargin(landscape = LANDSCAPE_HORIZONTAL_MARGIN)
.standardHorizontalMargin()
.fillMaxWidth(),
)
@@ -174,7 +168,7 @@ private fun TutorialScreenContent(
label = stringResource(id = R.string.skip),
onClick = skipClick,
modifier = Modifier
.standardHorizontalMargin(landscape = LANDSCAPE_HORIZONTAL_MARGIN)
.standardHorizontalMargin()
.fillMaxWidth()
.alpha(if (state.isLastPage) 0f else 1f)
.padding(bottom = 12.dp),