mirror of
https://github.com/bitwarden/android.git
synced 2024-11-22 01:16:02 +03:00
BIT-544: Apply reskin to LandingScreen (#71)
This commit is contained in:
parent
a1096d21ec
commit
a223e2fed5
7 changed files with 326 additions and 72 deletions
|
@ -2,29 +2,39 @@ package com.x8bit.bitwarden.ui.auth.feature.landing
|
|||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.fillMaxHeight
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.layout.wrapContentHeight
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Switch
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.testTag
|
||||
import androidx.compose.ui.graphics.ColorFilter
|
||||
import androidx.compose.ui.res.painterResource
|
||||
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.hilt.navigation.compose.hiltViewModel
|
||||
import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.base.util.EventsEffect
|
||||
import com.x8bit.bitwarden.ui.platform.components.BitwardenFilledButton
|
||||
import com.x8bit.bitwarden.ui.platform.components.BitwardenSwitch
|
||||
import com.x8bit.bitwarden.ui.platform.components.BitwardenTextButton
|
||||
import com.x8bit.bitwarden.ui.platform.components.BitwardenTextField
|
||||
|
||||
/**
|
||||
|
@ -45,103 +55,109 @@ fun LandingScreen(
|
|||
}
|
||||
}
|
||||
|
||||
val scrollState = rememberScrollState()
|
||||
Column(
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
verticalArrangement = Arrangement.spacedBy(24.dp),
|
||||
modifier = Modifier
|
||||
.background(MaterialTheme.colorScheme.background)
|
||||
.padding(horizontal = 16.dp),
|
||||
.fillMaxHeight()
|
||||
.padding(horizontal = 16.dp)
|
||||
.verticalScroll(scrollState),
|
||||
) {
|
||||
Image(
|
||||
painter = painterResource(id = R.drawable.logo_legacy),
|
||||
painter = painterResource(id = R.drawable.logo),
|
||||
colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.primary),
|
||||
contentDescription = null,
|
||||
modifier = Modifier
|
||||
.padding(start = 48.dp, top = 48.dp, end = 48.dp)
|
||||
.padding(top = 40.dp, bottom = 8.dp)
|
||||
.width(220.dp)
|
||||
.height(74.dp)
|
||||
.fillMaxWidth(),
|
||||
)
|
||||
|
||||
Spacer(modifier = Modifier.weight(1f))
|
||||
|
||||
Text(
|
||||
text = stringResource(id = R.string.login_or_create_new_account),
|
||||
color = MaterialTheme.colorScheme.primary,
|
||||
textAlign = TextAlign.Center,
|
||||
style = MaterialTheme.typography.headlineSmall,
|
||||
color = MaterialTheme.colorScheme.onSurface,
|
||||
modifier = Modifier
|
||||
.align(alignment = Alignment.CenterHorizontally)
|
||||
.padding(horizontal = 24.dp),
|
||||
.padding(8.dp)
|
||||
.wrapContentHeight(),
|
||||
)
|
||||
|
||||
Spacer(modifier = Modifier.weight(1f))
|
||||
|
||||
BitwardenTextField(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.testTag("Email address"),
|
||||
.padding(
|
||||
top = 32.dp,
|
||||
bottom = 10.dp,
|
||||
)
|
||||
.fillMaxWidth(),
|
||||
value = state.emailInput,
|
||||
onValueChange = { viewModel.trySendAction(LandingAction.EmailInputChanged(it)) },
|
||||
onValueChange = remember(viewModel) {
|
||||
{ viewModel.trySendAction(LandingAction.EmailInputChanged(it)) }
|
||||
},
|
||||
label = stringResource(id = R.string.email_address),
|
||||
)
|
||||
|
||||
Row(
|
||||
horizontalArrangement = Arrangement.SpaceBetween,
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.wrapContentHeight()
|
||||
.padding(horizontal = 16.dp),
|
||||
) {
|
||||
Text(
|
||||
text = stringResource(id = R.string.remember_me),
|
||||
color = MaterialTheme.colorScheme.primary,
|
||||
style = MaterialTheme.typography.bodySmall,
|
||||
)
|
||||
|
||||
Switch(
|
||||
modifier = Modifier.testTag("Remember me"),
|
||||
checked = state.isRememberMeEnabled,
|
||||
onCheckedChange = {
|
||||
viewModel.trySendAction(LandingAction.RememberMeToggle(it))
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
Button(
|
||||
onClick = {
|
||||
viewModel.trySendAction(LandingAction.ContinueButtonClick)
|
||||
BitwardenSwitch(
|
||||
label = stringResource(id = R.string.remember_me),
|
||||
isChecked = state.isRememberMeEnabled,
|
||||
onCheckedChange = remember(viewModel) {
|
||||
{ viewModel.trySendAction(LandingAction.RememberMeToggle(it)) }
|
||||
},
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(horizontal = 16.dp)
|
||||
.testTag("Continue button"),
|
||||
enabled = state.isContinueButtonEnabled,
|
||||
) {
|
||||
Text(
|
||||
text = stringResource(id = R.string.continue_text),
|
||||
color = MaterialTheme.colorScheme.onPrimary,
|
||||
style = MaterialTheme.typography.bodyMedium,
|
||||
)
|
||||
}
|
||||
.padding(top = 8.dp)
|
||||
.fillMaxWidth(),
|
||||
)
|
||||
|
||||
BitwardenFilledButton(
|
||||
label = stringResource(id = R.string.continue_text),
|
||||
onClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(LandingAction.ContinueButtonClick) }
|
||||
},
|
||||
isEnabled = state.isContinueButtonEnabled,
|
||||
modifier = Modifier
|
||||
.padding(top = 32.dp)
|
||||
.fillMaxWidth(),
|
||||
)
|
||||
|
||||
Row(
|
||||
horizontalArrangement = Arrangement.Start,
|
||||
horizontalArrangement = Arrangement.Center,
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
modifier = Modifier
|
||||
.padding(
|
||||
top = 8.dp,
|
||||
bottom = 58.dp,
|
||||
)
|
||||
.fillMaxWidth()
|
||||
.wrapContentHeight()
|
||||
.padding(horizontal = 16.dp),
|
||||
.wrapContentHeight(),
|
||||
) {
|
||||
Text(
|
||||
text = stringResource(id = R.string.new_around_here),
|
||||
color = MaterialTheme.colorScheme.primary,
|
||||
style = MaterialTheme.typography.bodySmall,
|
||||
style = MaterialTheme.typography.bodyMedium,
|
||||
color = MaterialTheme.colorScheme.onSurface,
|
||||
)
|
||||
|
||||
Text(
|
||||
modifier = Modifier
|
||||
.clickable {
|
||||
viewModel.trySendAction(LandingAction.CreateAccountClick)
|
||||
}
|
||||
.padding(start = 2.dp),
|
||||
text = stringResource(id = R.string.create_account),
|
||||
color = MaterialTheme.colorScheme.primary,
|
||||
style = MaterialTheme.typography.bodySmall,
|
||||
BitwardenTextButton(
|
||||
label = stringResource(id = R.string.create_account),
|
||||
onClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(LandingAction.CreateAccountClick) }
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
private fun LandingScreen_preview() {
|
||||
LandingScreen(
|
||||
onNavigateToCreateAccount = {},
|
||||
onNavigateToLogin = {},
|
||||
viewModel = LandingViewModel(SavedStateHandle()),
|
||||
)
|
||||
}
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
package com.x8bit.bitwarden.ui.platform.components
|
||||
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
|
||||
/**
|
||||
* Represents a Bitwarden-styled filled [Button].
|
||||
*
|
||||
* @param label The label for the button.
|
||||
* @param onClick The callback when the button is clicked.
|
||||
* @param modifier The [Modifier] to be applied to the button.
|
||||
* @param isEnabled Whether or not the button is enabled.
|
||||
*/
|
||||
@Composable
|
||||
fun BitwardenFilledButton(
|
||||
label: String,
|
||||
onClick: () -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
isEnabled: Boolean = true,
|
||||
) {
|
||||
Button(
|
||||
onClick = onClick,
|
||||
modifier = modifier,
|
||||
enabled = isEnabled,
|
||||
) {
|
||||
Text(
|
||||
text = label,
|
||||
color = MaterialTheme.colorScheme.onPrimary,
|
||||
style = MaterialTheme.typography.bodyMedium,
|
||||
modifier = Modifier.padding(
|
||||
vertical = 10.dp,
|
||||
horizontal = 24.dp,
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
private fun BitwardenFilledButton_preview_isEnabled() {
|
||||
BitwardenFilledButton(
|
||||
label = "Label",
|
||||
onClick = {},
|
||||
isEnabled = true,
|
||||
)
|
||||
}
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
private fun BitwardenFilledButton_preview_isNotEnabled() {
|
||||
BitwardenFilledButton(
|
||||
label = "Label",
|
||||
onClick = {},
|
||||
isEnabled = false,
|
||||
)
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
package com.x8bit.bitwarden.ui.platform.components
|
||||
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.layout.wrapContentHeight
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Switch
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.semantics.semantics
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
|
||||
/**
|
||||
* Represents a Bitwarden-styled [Switch].
|
||||
*
|
||||
* @param label The label for the switch.
|
||||
* @param isChecked Whether or not the switch is currently checked.
|
||||
* @param onCheckedChange A callback for when the checked state changes.
|
||||
* @param modifier The [Modifier] to be applied to the button.
|
||||
*/
|
||||
@Composable
|
||||
fun BitwardenSwitch(
|
||||
label: String,
|
||||
isChecked: Boolean,
|
||||
onCheckedChange: ((Boolean) -> Unit)?,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
Row(
|
||||
horizontalArrangement = Arrangement.Start,
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
modifier = modifier
|
||||
.semantics(mergeDescendants = true) { }
|
||||
.wrapContentHeight(),
|
||||
) {
|
||||
Switch(
|
||||
modifier = Modifier
|
||||
.height(32.dp)
|
||||
.width(52.dp),
|
||||
checked = isChecked,
|
||||
onCheckedChange = onCheckedChange,
|
||||
)
|
||||
|
||||
Text(
|
||||
text = label,
|
||||
style = MaterialTheme.typography.bodyLarge,
|
||||
color = MaterialTheme.colorScheme.onSurface,
|
||||
modifier = Modifier.padding(start = 16.dp),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
private fun BitwardenSwitch_preview_isChecked() {
|
||||
BitwardenSwitch(
|
||||
label = "Label",
|
||||
isChecked = true,
|
||||
onCheckedChange = {},
|
||||
)
|
||||
}
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
private fun BitwardenSwitch_preview_isNotChecked() {
|
||||
BitwardenSwitch(
|
||||
label = "Label",
|
||||
isChecked = false,
|
||||
onCheckedChange = {},
|
||||
)
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
package com.x8bit.bitwarden.ui.platform.components
|
||||
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextButton
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
|
||||
/**
|
||||
* Represents a Bitwarden-styled [TextButton].
|
||||
*
|
||||
* @param label The label for the button.
|
||||
* @param onClick The callback when the button is clicked.
|
||||
* @param modifier The [Modifier] to be applied to the button.
|
||||
*/
|
||||
@Composable
|
||||
fun BitwardenTextButton(
|
||||
label: String,
|
||||
onClick: () -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
TextButton(
|
||||
onClick = onClick,
|
||||
modifier = modifier,
|
||||
) {
|
||||
Text(
|
||||
text = label,
|
||||
color = MaterialTheme.colorScheme.primary,
|
||||
style = MaterialTheme.typography.labelLarge,
|
||||
modifier = Modifier
|
||||
.padding(
|
||||
vertical = 10.dp,
|
||||
horizontal = 12.dp,
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
private fun BitwardenTextButton_preview() {
|
||||
BitwardenTextButton(
|
||||
label = "Label",
|
||||
onClick = {},
|
||||
)
|
||||
}
|
|
@ -46,8 +46,8 @@ fun BitwardenTheme(
|
|||
if (!view.isInEditMode) {
|
||||
SideEffect {
|
||||
val window = (view.context as Activity).window
|
||||
window.statusBarColor = colorScheme.primary.toArgb()
|
||||
WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = darkTheme
|
||||
window.statusBarColor = colorScheme.surface.toArgb()
|
||||
WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = !darkTheme
|
||||
}
|
||||
}
|
||||
|
||||
|
|
44
app/src/main/res/drawable/logo.xml
Normal file
44
app/src/main/res/drawable/logo.xml
Normal file
|
@ -0,0 +1,44 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="220dp"
|
||||
android:height="74dp"
|
||||
android:viewportWidth="220"
|
||||
android:viewportHeight="74">
|
||||
<path
|
||||
android:pathData="M69.38,31.56C68.23,29.97 66.68,29.21 64.68,29.21C62.58,29.21 60.96,30.07 59.91,31.72H59.72C59.85,30.2 59.91,29.09 59.91,28.39V23.5C59.91,23.19 59.66,22.93 59.34,22.93H55.91C55.59,22.93 55.34,23.19 55.34,23.5V45.8C55.34,46.12 55.59,46.37 55.91,46.37H58.45C58.67,46.37 58.9,46.24 58.99,46.02L59.6,44.53H59.91C61.06,45.99 62.58,46.69 64.58,46.69C66.58,46.69 68.17,45.96 69.35,44.41C70.52,42.88 71.09,40.73 71.09,37.94C71.09,35.24 70.52,33.11 69.38,31.56ZM60.71,33.97C61.25,33.27 62.1,32.92 63.22,32.92C64.17,32.92 64.96,33.34 65.53,34.16C66.07,34.99 66.36,36.22 66.36,37.87C66.36,39.49 66.07,40.79 65.53,41.65C64.99,42.53 64.2,42.98 63.28,42.98C62.1,42.98 61.25,42.57 60.71,41.8C60.17,41.04 59.91,39.74 59.91,37.94V37.43C59.91,35.84 60.2,34.67 60.71,33.97Z"
|
||||
android:fillColor="#175DDC"
|
||||
android:fillType="evenOdd"/>
|
||||
<path
|
||||
android:pathData="M75.22,46.4H78.65C78.97,46.4 79.25,46.09 79.22,45.8V30.13C79.22,29.82 78.97,29.56 78.65,29.56H75.22C74.9,29.56 74.65,29.82 74.65,30.13V45.83C74.65,46.15 74.9,46.4 75.22,46.4Z"
|
||||
android:fillColor="#175DDC"/>
|
||||
<path
|
||||
android:pathData="M93.61,42.63C92.65,42.88 91.86,43.01 91.19,43.01C90.62,43.01 90.11,42.85 89.8,42.5C89.45,42.22 89.26,41.71 89.26,41.08V33.02H93.58C93.8,33.02 93.96,32.86 93.96,32.64V29.78C93.96,29.69 93.86,29.59 93.77,29.59H89.22V26.39C89.22,26.17 89.07,26.01 88.84,26.01H86.56C86.4,26.01 86.27,26.11 86.21,26.26L84.97,29.56L82.46,31.05C82.46,31.07 82.45,31.08 82.44,31.1C82.44,31.12 82.43,31.13 82.43,31.15V32.64C82.43,32.86 82.59,33.02 82.81,33.02H84.62V41.11C84.62,42.95 85.06,44.34 85.89,45.26C86.72,46.21 88.05,46.66 89.89,46.66C91.42,46.66 92.78,46.44 93.86,45.99C93.99,45.93 94.08,45.8 94.08,45.64V43.01C94.08,42.76 93.86,42.57 93.61,42.63Z"
|
||||
android:fillColor="#175DDC"/>
|
||||
<path
|
||||
android:pathData="M111.58,45.71C111.77,46.12 112.12,46.4 112.57,46.4H112.69C113.17,46.4 113.55,46.12 113.68,45.67L117.68,30.93C117.81,30.45 117.46,30.01 116.98,30.01C116.66,30.01 116.38,30.23 116.28,30.55L113.9,39.39C113.17,42.25 112.79,44.02 112.69,44.66H112.6C112.44,43.87 112,42.34 111.26,39.97L108.28,30.64C108.15,30.26 107.8,30.01 107.39,30.01C106.94,30.01 106.6,30.26 106.47,30.64L103.26,40.03C102.98,40.82 102.53,42.38 101.96,44.72H101.86C101.67,43.58 101.26,41.87 100.66,39.52L98.18,30.55C98.09,30.23 97.8,30.01 97.48,30.01H97.39C96.88,30.01 96.53,30.48 96.66,30.93L100.88,45.67C101.01,46.12 101.39,46.4 101.83,46.4C102.28,46.4 102.66,46.15 102.79,45.74L106.25,35.49L106.91,33.34L107.23,32.19H107.33C107.41,32.52 107.5,32.83 107.57,33.13C107.83,34.11 108.04,34.9 108.22,35.46L111.58,45.71Z"
|
||||
android:fillColor="#175DDC"/>
|
||||
<path
|
||||
android:pathData="M130.86,45.9C130.89,46.18 131.14,46.4 131.43,46.4C131.75,46.4 132.03,46.09 132.07,45.9V35.59C132.07,33.65 131.62,32.16 130.73,31.24C129.81,30.29 128.48,29.82 126.67,29.82C125.08,29.82 123.52,30.17 121.93,30.8C121.58,30.93 121.43,31.34 121.58,31.69C121.74,32.04 122.16,32.19 122.51,32.04C123.9,31.37 125.24,31.05 126.57,31.05C127.97,31.05 128.95,31.43 129.62,32.23C130.29,33.02 130.6,34.16 130.6,35.75V36.83L127.49,36.92C124.92,36.92 123.01,37.46 121.65,38.35C120.32,39.27 119.62,40.85 119.74,42.5C119.81,43.74 120.25,44.72 121.04,45.45C121.93,46.28 123.17,46.69 124.79,46.69C125.97,46.69 127.02,46.5 127.87,46.05C128.76,45.61 129.59,44.85 130.41,43.8H130.57L130.86,45.9ZM128.99,43.83C128,44.82 126.64,45.32 124.86,45.32C123.71,45.32 122.82,45.04 122.13,44.56C121.52,43.99 121.2,43.17 121.2,42.15C121.2,40.88 121.71,39.9 122.7,39.3C123.71,38.7 125.33,38.32 127.65,38.22L130.51,38.09V39.68C130.51,41.42 130,42.85 128.99,43.83Z"
|
||||
android:fillColor="#175DDC"
|
||||
android:fillType="evenOdd"/>
|
||||
<path
|
||||
android:pathData="M145.15,29.78C144.61,29.72 144.13,29.69 143.66,29.69C142.58,29.69 141.66,29.94 140.93,30.45C140.16,30.93 139.43,31.78 138.77,32.99H138.67L138.54,30.64C138.54,30.29 138.26,30.04 137.91,30.04C137.56,30.04 137.27,30.32 137.27,30.67V45.58C137.27,45.99 137.59,46.31 138,46.31C138.42,46.31 138.73,45.99 138.73,45.58V37.27C138.73,35.49 139.18,33.97 140.07,32.8C140.96,31.62 142.1,31.02 143.5,31.02C143.97,31.02 144.45,31.08 144.93,31.15C145.31,31.21 145.69,30.99 145.75,30.61C145.82,30.23 145.56,29.85 145.15,29.78Z"
|
||||
android:fillColor="#175DDC"/>
|
||||
<path
|
||||
android:pathData="M157.91,30.32C157.06,29.91 156.01,29.69 154.84,29.69C152.55,29.69 150.83,30.45 149.63,31.81C148.42,33.34 147.85,35.49 147.85,38.32C147.85,41.01 148.48,43.04 149.66,44.47C150.9,45.9 152.58,46.59 154.87,46.59C157.18,46.59 158.99,45.67 160.23,43.8H160.36L160.68,45.86C160.71,46.15 160.93,46.34 161.19,46.34C161.47,46.34 161.69,46.12 161.69,45.83V23.66C161.69,23.25 161.38,22.93 160.96,22.93C160.55,22.93 160.23,23.25 160.23,23.66V28.83C160.23,30.04 160.26,31.24 160.33,32.54H160.23C159.57,31.5 158.8,30.74 157.91,30.32ZM150.77,32.96C151.69,31.69 153.02,31.05 154.84,31.05C156.74,31.05 158.11,31.59 158.93,32.73C159.82,33.81 160.23,35.62 160.23,38.16V38.41C160.23,40.88 159.82,42.66 158.93,43.74C158.07,44.82 156.74,45.36 154.87,45.36C151.25,45.36 149.44,43.04 149.44,38.41C149.44,36 149.88,34.19 150.77,32.96Z"
|
||||
android:fillColor="#175DDC"
|
||||
android:fillType="evenOdd"/>
|
||||
<path
|
||||
android:pathData="M168.27,44.47C169.63,45.96 171.48,46.69 173.86,46.69C174.81,46.69 175.67,46.63 176.46,46.4C177.13,46.28 177.86,46.09 178.62,45.77C178.88,45.67 179.03,45.42 179.03,45.17C179.03,44.72 178.59,44.41 178.18,44.56C177.45,44.82 176.84,44.98 176.33,45.07C175.64,45.2 174.78,45.26 173.86,45.26C171.92,45.26 170.46,44.72 169.41,43.52C168.36,42.31 167.85,40.6 167.82,38.35H179.64V37.14C179.64,34.83 179.1,32.99 177.95,31.66C176.87,30.32 175.32,29.66 173.41,29.66C171.22,29.66 169.51,30.45 168.21,32.04C166.9,33.59 166.27,35.68 166.27,38.32C166.27,40.95 166.93,43.01 168.27,44.47ZM169.6,32.58C170.55,31.53 171.82,31.02 173.41,31.02C174.87,31.02 176.02,31.56 176.84,32.61C177.67,33.65 178.08,35.18 178.08,37.05H167.92C168.11,35.11 168.65,33.59 169.6,32.58Z"
|
||||
android:fillColor="#175DDC"
|
||||
android:fillType="evenOdd"/>
|
||||
<path
|
||||
android:pathData="M195.67,45.67C195.67,46.09 195.99,46.4 196.4,46.4C196.79,46.4 197.13,46.05 197.17,45.61V35.65C197.17,31.66 195.29,29.66 191.58,29.66C188.85,29.66 186.97,30.51 185.89,32.23H185.8L185.61,30.58C185.54,30.26 185.29,30.01 184.94,30.01C184.56,30.01 184.27,30.29 184.27,30.67V45.61C184.27,46.02 184.59,46.34 185,46.34C185.42,46.34 185.73,46.02 185.73,45.61V37.3C185.73,35.11 186.24,33.5 187.13,32.51C188.02,31.5 189.45,31.02 191.42,31.02C192.88,31.02 193.93,31.43 194.66,32.16C195.32,32.89 195.67,34.1 195.67,35.75V45.67Z"
|
||||
android:fillColor="#175DDC"/>
|
||||
<path
|
||||
android:pathData="M74.27,25.25C74.27,23.82 75.47,22.68 76.97,22.68C78.43,22.68 79.67,23.82 79.67,25.28V25.5C79.67,26.9 78.43,28.07 76.97,28.07C75.51,28.07 74.27,26.9 74.27,25.5V25.25Z"
|
||||
android:fillColor="#175DDC"/>
|
||||
<path
|
||||
android:pathData="M45.36,37.65V24.04C45.36,23.73 45.25,23.47 45.02,23.24C44.8,23.02 44.53,22.91 44.23,22.91H23.81C23.51,22.91 23.24,23.02 23.02,23.24C22.79,23.47 22.68,23.73 22.68,24.04V37.65C22.68,38.67 22.88,39.67 23.27,40.67C23.67,41.67 24.16,42.55 24.74,43.33C25.33,44.1 26.03,44.86 26.84,45.59C27.64,46.32 28.39,46.93 29.08,47.41C29.76,47.9 30.48,48.35 31.22,48.79C31.97,49.22 32.49,49.51 32.81,49.66C33.12,49.82 33.37,49.93 33.56,50.02C33.7,50.09 33.86,50.12 34.02,50.12C34.19,50.12 34.34,50.09 34.48,50.02C34.67,49.93 34.92,49.82 35.23,49.66C35.55,49.51 36.08,49.22 36.82,48.79C37.56,48.35 38.28,47.9 38.96,47.41C39.65,46.93 40.4,46.32 41.21,45.59C42.01,44.86 42.71,44.1 43.3,43.33C43.88,42.55 44.37,41.67 44.77,40.67C45.16,39.67 45.36,38.67 45.36,37.65ZM41.96,26.31V37.65C41.96,39.73 40.57,41.85 37.79,44.03C36.68,44.9 35.43,45.71 34.02,46.46V26.31H41.96Z"
|
||||
android:fillColor="#175DDC"
|
||||
android:fillType="evenOdd"/>
|
||||
</vector>
|
|
@ -1,8 +1,11 @@
|
|||
package com.x8bit.bitwarden.ui.auth.feature.landing
|
||||
|
||||
import androidx.compose.ui.test.onNodeWithTag
|
||||
import androidx.compose.ui.test.filterToOne
|
||||
import androidx.compose.ui.test.hasClickAction
|
||||
import androidx.compose.ui.test.onChildren
|
||||
import androidx.compose.ui.test.onNodeWithText
|
||||
import androidx.compose.ui.test.performClick
|
||||
import androidx.compose.ui.test.performScrollTo
|
||||
import androidx.compose.ui.test.performTextInput
|
||||
import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest
|
||||
import io.mockk.every
|
||||
|
@ -35,7 +38,7 @@ class LandingScreenTest : BaseComposeTest() {
|
|||
viewModel = viewModel,
|
||||
)
|
||||
}
|
||||
composeTestRule.onNodeWithTag("Continue button").performClick()
|
||||
composeTestRule.onNodeWithText("Continue").performClick()
|
||||
verify {
|
||||
viewModel.trySendAction(LandingAction.ContinueButtonClick)
|
||||
}
|
||||
|
@ -60,7 +63,11 @@ class LandingScreenTest : BaseComposeTest() {
|
|||
viewModel = viewModel,
|
||||
)
|
||||
}
|
||||
composeTestRule.onNodeWithTag("Remember me").performClick()
|
||||
composeTestRule
|
||||
.onNodeWithText("Remember me")
|
||||
.onChildren()
|
||||
.filterToOne(hasClickAction())
|
||||
.performClick()
|
||||
verify {
|
||||
viewModel.trySendAction(LandingAction.RememberMeToggle(true))
|
||||
}
|
||||
|
@ -85,7 +92,7 @@ class LandingScreenTest : BaseComposeTest() {
|
|||
viewModel = viewModel,
|
||||
)
|
||||
}
|
||||
composeTestRule.onNodeWithText("Create account").performClick()
|
||||
composeTestRule.onNodeWithText("Create account").performScrollTo().performClick()
|
||||
verify {
|
||||
viewModel.trySendAction(LandingAction.CreateAccountClick)
|
||||
}
|
||||
|
@ -111,7 +118,7 @@ class LandingScreenTest : BaseComposeTest() {
|
|||
viewModel = viewModel,
|
||||
)
|
||||
}
|
||||
composeTestRule.onNodeWithTag("Email address").performTextInput(input)
|
||||
composeTestRule.onNodeWithText("Email address").performTextInput(input)
|
||||
verify {
|
||||
viewModel.trySendAction(LandingAction.EmailInputChanged(input))
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue