Release prep and refinement (#64)

This commit is contained in:
Patrick Honkonen authored and GitHub committed 2024-04-27 14:49:06 -04:00
1 parent dd4a0a502d
commit c0b04694d9
12 files changed
+164 -115

No files matched your search

@@ -10,7 +10,9 @@ import androidx.compose.foundation.layout.fillMaxSize
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.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
@@ -18,6 +20,7 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
@@ -27,7 +30,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.bitwarden.authenticator.R
import com.bitwarden.authenticator.ui.platform.base.util.EventsEffect
import com.bitwarden.authenticator.ui.platform.base.util.asText
import com.bitwarden.authenticator.ui.platform.components.button.BitwardenOutlinedButton
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
import com.bitwarden.authenticator.ui.platform.components.dialog.BitwardenLoadingDialog
@@ -107,7 +110,7 @@ fun UnlockScreen(
BitwardenScaffold(
modifier = Modifier
.fillMaxSize()
.fillMaxSize(),
) { innerPadding ->
Box {
Column(
@@ -118,11 +121,17 @@ fun UnlockScreen(
horizontalAlignment = Alignment.CenterHorizontally
) {
Image(
modifier = Modifier
.padding(horizontal = 16.dp)
.width(220.dp)
.height(74.dp)
.fillMaxWidth(),
colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.primary),
painter = painterResource(id = R.drawable.ic_logo_horizontal),
contentDescription = stringResource(R.string.bitwarden_authenticator)
contentDescription = stringResource(R.string.bitwarden_authenticator),
)
Spacer(modifier = Modifier.height(12.dp))
BitwardenOutlinedButton(
Spacer(modifier = Modifier.height(32.dp))
BitwardenFilledTonalButton(
label = stringResource(id = R.string.use_biometrics_to_unlock),
onClick = {
biometricsManager.promptBiometrics(
@@ -249,7 +249,7 @@ fun EditItemContent(
modifier = Modifier
.fillMaxSize()
.padding(horizontal = 16.dp),
label = stringResource(id = R.string.secret_key),
label = stringResource(id = R.string.key),
value = viewState.itemData.totpCode,
onValueChange = onTotpCodeTextChange,
singleLine = true,
@@ -320,10 +320,10 @@ private fun ItemListingContent(
onScanQrCodeClick = onScanQrCodeClick,
),
ItemListingExpandableFabAction.EnterSetupKey(
label = R.string.enter_a_setup_key.asText(),
label = R.string.enter_key_manually.asText(),
icon = IconResource(
iconPainter = painterResource(id = R.drawable.ic_keyboard_24px),
contentDescription = stringResource(id = R.string.enter_a_setup_key),
contentDescription = stringResource(id = R.string.enter_key_manually),
testTag = "EnterSetupKeyButton",
),
onEnterSetupKeyClick = onEnterSetupKeyClick
@@ -413,10 +413,10 @@ fun EmptyItemListingContent(
onScanQrCodeClick = onScanQuCodeClick
),
ItemListingExpandableFabAction.EnterSetupKey(
label = R.string.enter_a_setup_key.asText(),
label = R.string.enter_key_manually.asText(),
icon = IconResource(
iconPainter = painterResource(id = R.drawable.ic_keyboard_24px),
contentDescription = stringResource(id = R.string.enter_a_setup_key),
contentDescription = stringResource(id = R.string.enter_key_manually),
testTag = "EnterSetupKeyButton",
),
onEnterSetupKeyClick = onEnterSetupKeyClick,
@@ -35,7 +35,11 @@ import com.bitwarden.authenticator.ui.platform.base.util.EventsEffect
import com.bitwarden.authenticator.ui.platform.base.util.toAnnotatedString
import com.bitwarden.authenticator.ui.platform.components.appbar.BitwardenTopAppBar
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
import com.bitwarden.authenticator.ui.platform.components.dialog.BitwardenLoadingDialog
import com.bitwarden.authenticator.ui.platform.components.dialog.BitwardenTwoButtonDialog
import com.bitwarden.authenticator.ui.platform.components.dialog.LoadingDialogState
import com.bitwarden.authenticator.ui.platform.components.field.BitwardenTextField
import com.bitwarden.authenticator.ui.platform.components.scaffold.BitwardenScaffold
import com.bitwarden.authenticator.ui.platform.manager.intent.IntentManager
@@ -108,11 +112,38 @@ fun ManualCodeEntryScreen(
)
}
when (val dialog = state.dialog) {
is ManualCodeEntryState.DialogState.Error -> {
BitwardenBasicDialog(
visibilityState = BasicDialogState.Shown(
title = dialog.title,
message = dialog.message
),
onDismissRequest = remember(state) {
{ viewModel.trySendAction(ManualCodeEntryAction.DismissDialog) }
}
)
}
is ManualCodeEntryState.DialogState.Loading -> {
BitwardenLoadingDialog(
visibilityState = LoadingDialogState.Shown(
dialog.message
)
)
}
null -> {
Unit
}
}
BitwardenScaffold(
modifier = Modifier.fillMaxSize(),
topBar = {
BitwardenTopAppBar(
title = stringResource(id = R.string.authenticator_key_scanner),
title = stringResource(id = R.string.create_verification_code),
navigationIcon = painterResource(id = R.drawable.ic_close),
navigationIconContentDescription = stringResource(id = R.string.close),
onNavigationIconClick = remember(viewModel) {
@@ -133,22 +164,22 @@ fun ManualCodeEntryScreen(
Spacer(modifier = Modifier.height(8.dp))
BitwardenTextField(
label = stringResource(id = R.string.name),
value = state.issuer,
onValueChange = remember(viewModel) {
{
viewModel.trySendAction(
ManualCodeEntryAction.IssuerTextChange(it),
)
}
},
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp),
value = state.issuer,
onValueChange = remember(viewModel) {
{
viewModel.trySendAction(
ManualCodeEntryAction.IssuerTextChange(it),
)
}
},
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp),
)
Spacer(modifier = Modifier.height(8.dp))
BitwardenTextField(
singleLine = false,
label = stringResource(id = R.string.authenticator_key_scanner),
label = stringResource(id = R.string.key),
value = state.code,
onValueChange = remember(viewModel) {
{
@@ -164,7 +195,7 @@ fun ManualCodeEntryScreen(
Spacer(modifier = Modifier.height(16.dp))
BitwardenFilledTonalButton(
label = stringResource(id = R.string.add_totp),
label = stringResource(id = R.string.add_code),
onClick = remember(viewModel) {
{ viewModel.trySendAction(ManualCodeEntryAction.CodeSubmit) }
},
@@ -185,7 +216,7 @@ fun ManualCodeEntryScreen(
)
Text(
text = stringResource(id = R.string.cannot_add_authenticator_key),
text = stringResource(id = R.string.cannot_add_key),
style = MaterialTheme.typography.bodyMedium,
modifier = Modifier
.fillMaxWidth()
@@ -43,9 +43,17 @@ class ManualCodeEntryViewModel @Inject constructor(
is ManualCodeEntryAction.Internal.CreateItemResultReceive -> {
handleCreateItemReceive(action)
}
ManualCodeEntryAction.DismissDialog -> {
handleDialogDismiss()
}
}
}
private fun handleDialogDismiss() {
mutableStateFlow.update { it.copy(dialog = null) }
}
private fun handleIssuerTextChange(action: ManualCodeEntryAction.IssuerTextChange) {
mutableStateFlow.update {
it.copy(issuer = action.issuer)
@@ -63,6 +71,27 @@ class ManualCodeEntryViewModel @Inject constructor(
}
private fun handleCodeSubmit() {
if (state.code.isBlank()) {
mutableStateFlow.update {
it.copy(
dialog = ManualCodeEntryState.DialogState.Error(
message = R.string.key_is_required.asText()
)
)
}
return
}
if (state.issuer.isBlank()) {
mutableStateFlow.update {
it.copy(
dialog = ManualCodeEntryState.DialogState.Error(
message = R.string.name_is_required.asText()
)
)
}
return
}
viewModelScope.launch {
val result = authenticatorRepository.createItem(
AuthenticatorItemEntity(
@@ -216,4 +245,9 @@ sealed class ManualCodeEntryAction {
* The action for the user clicking the settings button.
*/
data object SettingsClick : ManualCodeEntryAction()
/**
* The user has dismissed the dialog.
*/
data object DismissDialog : ManualCodeEntryAction()
}
@@ -1,34 +1,21 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<group>
<clip-path
android:pathData="M0,0h108v108h-108z"/>
<path
android:pathData="M71.57,34.63L113,76.06L89.71,119.08L40.65,70.02L53.53,77.45L70.88,60.11L71.57,34.63Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="37.85"
android:startY="38.81"
android:endX="89.01"
android:endY="89.97"
android:type="linear">
<item android:offset="0" android:color="#3F000000"/>
<item android:offset="1" android:color="#00000000"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M71.51,34.56C71.15,34.19 70.71,34 70.21,34H36.85C36.35,34 35.92,34.19 35.56,34.56C35.19,34.92 35,35.35 35,35.85V58.09C35,59.75 35.33,61.4 35.97,63.03C36.62,64.66 37.42,66.11 38.38,67.37C39.33,68.64 40.47,69.87 41.8,71.06C43.12,72.26 44.35,73.25 45.47,74.04C46.59,74.83 47.76,75.58 48.97,76.28C50.19,76.98 51.06,77.46 51.57,77.72C52.09,77.97 52.49,78.16 52.8,78.29C53.03,78.41 53.29,78.47 53.55,78.47C53.82,78.47 54.08,78.41 54.31,78.29C54.61,78.15 55.03,77.97 55.54,77.72C56.05,77.47 56.91,76.98 58.13,76.28C59.35,75.58 60.52,74.82 61.64,74.04C62.76,73.25 63.98,72.26 65.31,71.06C66.63,69.86 67.77,68.63 68.73,67.37C69.68,66.1 70.48,64.65 71.13,63.03C71.77,61.39 72.1,59.75 72.1,58.09V35.85C72.07,35.35 71.88,34.92 71.51,34.56ZM67.21,58.3C67.21,66.35 53.53,73.29 53.53,73.29V38.76H67.21C67.21,38.76 67.21,50.25 67.21,58.3Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M55,49C55,47.34 56.34,46 58,46H107C108.66,46 110,47.34 110,49V60C110,61.66 108.66,63 107,63H58C56.34,63 55,61.66 55,60V49Z"
android:fillColor="#2DA49D"/>
<path
android:pathData="M64.22,54.63C64.22,55.6 64.04,56.41 63.67,57.05C63.3,57.7 62.77,58.19 62.07,58.51C61.37,58.84 60.53,59 59.54,59H57.12V50.43H59.81C60.7,50.43 61.48,50.59 62.14,50.91C62.8,51.23 63.32,51.7 63.68,52.33C64.04,52.95 64.22,53.72 64.22,54.63ZM62.34,54.68C62.34,54.05 62.24,53.53 62.06,53.12C61.87,52.71 61.6,52.41 61.24,52.21C60.88,52.02 60.43,51.92 59.9,51.92H58.93V57.5H59.71C60.6,57.5 61.26,57.26 61.69,56.79C62.12,56.32 62.34,55.62 62.34,54.68ZM70.93,59H66V50.43H70.93V51.92H67.82V53.8H70.72V55.29H67.82V57.5H70.93V59ZM79.45,50.43L76.53,59H74.55L71.65,50.43H73.48L75.09,55.53C75.12,55.62 75.16,55.78 75.23,56.02C75.29,56.25 75.35,56.5 75.41,56.77C75.48,57.03 75.53,57.25 75.55,57.42C75.57,57.25 75.61,57.03 75.67,56.77C75.74,56.51 75.8,56.26 75.85,56.02C75.92,55.79 75.96,55.62 75.99,55.53L77.61,50.43H79.45Z"
android:fillColor="#212529"/>
</group>
android:viewportHeight="108"
android:viewportWidth="108">
<path
android:fillColor="#ffffff"
android:pathData="M63.95,56.33V43H54.5V66.69C56.17,65.81 57.67,64.86 58.99,63.83C62.3,61.28 63.95,58.78 63.95,56.33ZM68,40.33V56.33C68,57.53 67.76,58.71 67.29,59.89C66.82,61.06 66.24,62.1 65.54,63.01C64.85,63.92 64.02,64.81 63.05,65.67C62.09,66.53 61.2,67.24 60.39,67.81C59.57,68.38 58.72,68.92 57.83,69.43C56.95,69.93 56.32,70.28 55.94,70.46C55.57,70.64 55.27,70.78 55.05,70.88C54.88,70.96 54.7,71 54.5,71C54.3,71 54.12,70.96 53.95,70.88C53.73,70.78 53.43,70.64 53.06,70.46C52.68,70.28 52.05,69.93 51.17,69.43C50.28,68.92 49.43,68.38 48.61,67.81C47.8,67.24 46.91,66.53 45.95,65.67C44.98,64.81 44.15,63.92 43.46,63.01C42.76,62.1 42.18,61.06 41.71,59.89C41.24,58.71 41,57.53 41,56.33V40.33C41,39.97 41.13,39.66 41.4,39.4C41.67,39.13 41.98,39 42.35,39H66.65C67.02,39 67.33,39.13 67.6,39.4C67.87,39.66 68,39.97 68,40.33Z" />
<path
android:fillColor="#2CDDE9"
android:pathData="M38.02,32C34.69,32 32,34.63 32,37.87V45.91C32,46.57 32.55,47.11 33.23,47.11C33.9,47.11 34.45,46.57 34.45,45.91V37.87C34.45,35.95 36.05,34.39 38.02,34.39H46.26C46.94,34.39 47.48,33.86 47.48,33.2C47.48,32.54 46.94,32 46.26,32H38.02Z" />
<path
android:fillColor="#2CDDE9"
android:pathData="M69.98,32C73.31,32 76,34.63 76,37.87V45.91C76,46.57 75.45,47.11 74.77,47.11C74.1,47.11 73.55,46.57 73.55,45.91V37.87C73.55,35.95 71.95,34.39 69.98,34.39H61.74C61.06,34.39 60.52,33.86 60.52,33.2C60.52,32.54 61.06,32 61.74,32H69.98Z" />
<path
android:fillColor="#2CDDE9"
android:pathData="M32,70.13C32,73.37 34.69,76 38.02,76H46.26C46.94,76 47.48,75.46 47.48,74.8C47.48,74.14 46.94,73.61 46.26,73.61H38.02C36.05,73.61 34.45,72.05 34.45,70.13V62.09C34.45,61.43 33.9,60.89 33.23,60.89C32.55,60.89 32,61.43 32,62.09V70.13Z" />
<path
android:fillColor="#2CDDE9"
android:pathData="M69.98,76C73.31,76 76,73.37 76,70.13V62.09C76,61.43 75.45,60.89 74.77,60.89C74.1,60.89 73.55,61.43 73.55,62.09V70.13C73.55,72.05 71.95,73.61 69.98,73.61H61.74C61.06,73.61 60.52,74.14 60.52,74.8C60.52,75.46 61.06,76 61.74,76H69.98Z" />
</vector>
@@ -1,18 +1,21 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<group>
<clip-path
android:pathData="M0,0h108v108h-108z"/>
<path
android:pathData="M70.21,34C70.71,34 71.15,34.19 71.51,34.56C71.88,34.92 72.07,35.35 72.1,35.85V50.43H71.65L72.1,51.76V58.09C72.1,59.75 71.77,61.39 71.13,63.03C70.48,64.65 69.68,66.1 68.73,67.37C67.77,68.63 66.63,69.86 65.31,71.06C63.98,72.26 62.76,73.25 61.64,74.04C60.52,74.82 59.35,75.58 58.13,76.28C56.91,76.98 56.05,77.47 55.54,77.72C55.03,77.97 54.61,78.15 54.31,78.29C54.08,78.41 53.82,78.47 53.55,78.47C53.29,78.47 53.03,78.41 52.8,78.29C52.53,78.18 52.18,78.01 51.75,77.8C51.69,77.78 51.63,77.75 51.57,77.72C51.06,77.46 50.19,76.98 48.97,76.28C47.76,75.58 46.59,74.83 45.47,74.04C44.35,73.25 43.12,72.26 41.8,71.06C40.47,69.87 39.33,68.64 38.38,67.37C37.42,66.11 36.62,64.66 35.97,63.03C35.33,61.4 35,59.75 35,58.09V35.85C35,35.35 35.19,34.92 35.56,34.56C35.92,34.19 36.35,34 36.85,34H70.21ZM67.18,59C66.43,66.75 53.53,73.29 53.53,73.29V38.76H67.21V50.43H70.93V51.92H67.81V53.8H70.72V55.29H67.81V57.5H70.93V59H67.18Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M58,46C56.34,46 55,47.34 55,49V60C55,61.66 56.34,63 58,63H107C108.66,63 110,61.66 110,60V49C110,47.34 108.66,46 107,46H58ZM63.67,57.05C64.04,56.41 64.22,55.6 64.22,54.63C64.22,53.72 64.04,52.95 63.68,52.33C63.31,51.7 62.8,51.23 62.14,50.91C61.48,50.59 60.7,50.43 59.81,50.43H57.12V59H59.54C60.53,59 61.37,58.84 62.07,58.51C62.77,58.19 63.3,57.7 63.67,57.05ZM62.06,53.12C62.24,53.53 62.34,54.05 62.34,54.68C62.34,55.62 62.12,56.32 61.69,56.79C61.26,57.26 60.6,57.5 59.71,57.5H58.93V51.92H59.9C60.43,51.92 60.88,52.02 61.23,52.21C61.6,52.41 61.87,52.71 62.06,53.12ZM66,59H70.93V57.5H67.81V55.29H70.72V53.8H67.81V51.92H70.93V50.43H66V59ZM76.53,59L79.45,50.43H77.61L75.99,55.53C75.96,55.62 75.92,55.79 75.85,56.02C75.8,56.26 75.73,56.51 75.67,56.77C75.61,57.03 75.57,57.25 75.55,57.42C75.53,57.25 75.48,57.03 75.41,56.77C75.35,56.5 75.29,56.25 75.23,56.02C75.16,55.78 75.12,55.62 75.09,55.53L73.48,50.43H71.65L74.55,59H76.53Z"
android:fillColor="#2DA49D"
android:fillType="evenOdd"/>
</group>
android:viewportHeight="108"
android:viewportWidth="108">
<path
android:fillColor="#ffffff"
android:pathData="M63.95,56.33V43H54.5V66.69C56.17,65.81 57.67,64.86 58.99,63.83C62.3,61.28 63.95,58.78 63.95,56.33ZM68,40.33V56.33C68,57.53 67.76,58.71 67.29,59.89C66.82,61.06 66.24,62.1 65.54,63.01C64.85,63.92 64.02,64.81 63.05,65.67C62.09,66.53 61.2,67.24 60.39,67.81C59.57,68.38 58.72,68.92 57.83,69.43C56.95,69.93 56.32,70.28 55.94,70.46C55.57,70.64 55.27,70.78 55.05,70.88C54.88,70.96 54.7,71 54.5,71C54.3,71 54.12,70.96 53.95,70.88C53.73,70.78 53.43,70.64 53.06,70.46C52.68,70.28 52.05,69.93 51.17,69.43C50.28,68.92 49.43,68.38 48.61,67.81C47.8,67.24 46.91,66.53 45.95,65.67C44.98,64.81 44.15,63.92 43.46,63.01C42.76,62.1 42.18,61.06 41.71,59.89C41.24,58.71 41,57.53 41,56.33V40.33C41,39.97 41.13,39.66 41.4,39.4C41.67,39.13 41.98,39 42.35,39H66.65C67.02,39 67.33,39.13 67.6,39.4C67.87,39.66 68,39.97 68,40.33Z" />
<path
android:fillColor="#2CDDE9"
android:pathData="M38.02,32C34.69,32 32,34.63 32,37.87V45.91C32,46.57 32.55,47.11 33.23,47.11C33.9,47.11 34.45,46.57 34.45,45.91V37.87C34.45,35.95 36.05,34.39 38.02,34.39H46.26C46.94,34.39 47.48,33.86 47.48,33.2C47.48,32.54 46.94,32 46.26,32H38.02Z" />
<path
android:fillColor="#2CDDE9"
android:pathData="M69.98,32C73.31,32 76,34.63 76,37.87V45.91C76,46.57 75.45,47.11 74.77,47.11C74.1,47.11 73.55,46.57 73.55,45.91V37.87C73.55,35.95 71.95,34.39 69.98,34.39H61.74C61.06,34.39 60.52,33.86 60.52,33.2C60.52,32.54 61.06,32 61.74,32H69.98Z" />
<path
android:fillColor="#2CDDE9"
android:pathData="M32,70.13C32,73.37 34.69,76 38.02,76H46.26C46.94,76 47.48,75.46 47.48,74.8C47.48,74.14 46.94,73.61 46.26,73.61H38.02C36.05,73.61 34.45,72.05 34.45,70.13V62.09C34.45,61.43 33.9,60.89 33.23,60.89C32.55,60.89 32,61.43 32,62.09V70.13Z" />
<path
android:fillColor="#2CDDE9"
android:pathData="M69.98,76C73.31,76 76,73.37 76,70.13V62.09C76,61.43 75.45,60.89 74.77,60.89C74.1,60.89 73.55,61.43 73.55,62.09V70.13C73.55,72.05 71.95,73.61 69.98,73.61H61.74C61.06,73.61 60.52,74.14 60.52,74.8C60.52,75.46 61.06,76 61.74,76H69.98Z" />
</vector>
@@ -1,44 +1,17 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="342dp"
android:height="55dp"
android:viewportWidth="342"
android:viewportHeight="55">
android:width="697dp"
android:height="188dp"
android:viewportWidth="697"
android:viewportHeight="188">
<path
android:pathData="M91.6,17.85C89.37,14.74 86.32,13.25 82.41,13.25C78.32,13.25 75.15,14.93 73.1,18.16H72.73C72.98,15.17 73.1,13 73.1,11.63V2.06C73.1,1.44 72.61,0.94 71.99,0.94H65.28C64.66,0.94 64.17,1.44 64.17,2.06V45.75C64.17,46.37 64.66,46.87 65.28,46.87H70.25C70.68,46.87 71.12,46.62 71.3,46.19L72.48,43.26H73.1C75.34,46.12 78.32,47.49 82.23,47.49C86.14,47.49 89.24,46.06 91.54,43.02C93.83,40.03 94.95,35.81 94.95,30.34C94.95,25.06 93.83,20.89 91.6,17.85ZM74.65,22.57C75.71,21.2 77.39,20.52 79.56,20.52C81.42,20.52 82.97,21.33 84.09,22.94C85.14,24.56 85.7,26.98 85.7,30.21C85.7,33.38 85.14,35.93 84.09,37.61C83.03,39.35 81.48,40.22 79.68,40.22C77.39,40.22 75.71,39.41 74.65,37.92C73.6,36.43 73.1,33.88 73.1,30.34V29.34C73.1,26.24 73.66,23.94 74.65,22.57Z"
android:pathData="M136.71,21.43C143.22,21.43 148.29,23.92 152.01,29.12C155.73,34.22 157.59,41.19 157.59,50.03C157.59,59.18 155.73,66.25 151.91,71.25C148.08,76.34 142.91,78.73 136.4,78.73C129.89,78.73 124.92,76.45 121.2,71.66H120.17L118.21,76.55C117.89,77.28 117.17,77.69 116.45,77.69H108.18C107.14,77.69 106.32,76.86 106.32,75.82V2.7C106.32,1.66 107.14,0.83 108.18,0.83H119.34C120.38,0.83 121.2,1.66 121.2,2.7V18.72C121.2,21.01 121,24.65 120.58,29.64H121.2C124.61,24.23 129.89,21.43 136.71,21.43ZM131.95,33.59C128.34,33.59 125.54,34.74 123.79,37.03C122.13,39.32 121.2,43.16 121.2,48.36V50.03C121.2,55.96 122.03,60.22 123.79,62.72C125.54,65.21 128.34,66.57 132.16,66.57C135.16,66.57 137.74,65.11 139.5,62.2C141.26,59.39 142.19,55.12 142.19,49.82C142.19,44.41 141.26,40.36 139.5,37.65C137.64,34.95 135.05,33.59 131.95,33.59ZM182.2,77.8H171.03C170,77.8 169.17,76.97 169.17,75.93V24.44C169.17,23.4 170,22.57 171.03,22.57H182.2C183.23,22.57 184.06,23.4 184.06,24.44V75.82C184.16,76.76 183.23,77.8 182.2,77.8ZM223.03,66.67C225.2,66.67 227.79,66.25 230.89,65.42C231.71,65.21 232.44,65.84 232.44,66.67V75.3C232.44,75.82 232.13,76.24 231.71,76.45C228.2,77.9 223.75,78.63 218.79,78.63C212.79,78.63 208.45,77.17 205.76,74.05C203.08,71.04 201.63,66.46 201.63,60.43V33.91H195.74C195.01,33.91 194.5,33.39 194.5,32.66V27.77C194.5,27.67 194.6,27.56 194.6,27.46L202.77,22.57L206.8,11.75C207.01,11.23 207.42,10.92 207.94,10.92H215.38C216.1,10.92 216.62,11.44 216.62,12.17V22.67H231.4C231.71,22.67 232.02,22.99 232.02,23.3V32.66C232.02,33.39 231.51,33.91 230.78,33.91H216.72V60.33C216.72,62.41 217.34,64.07 218.48,65.01C219.51,66.15 221.17,66.67 223.03,66.67ZM292.6,77.8C291.15,77.8 290.02,76.86 289.4,75.51L278.44,41.92C277.72,39.52 276.79,35.88 275.55,31.2H275.23L274.2,34.95L272.03,42.02L260.76,75.61C260.35,76.97 259.11,77.8 257.66,77.8C256.21,77.8 254.97,76.86 254.56,75.41L240.81,27.04C240.4,25.59 241.53,24.03 243.19,24.03H243.5C244.53,24.03 245.46,24.75 245.77,25.79L253.84,55.23C255.8,62.93 257.14,68.54 257.76,72.29H258.07C259.93,64.59 261.38,59.49 262.31,56.89L272.75,26.11C273.17,24.86 274.3,24.03 275.75,24.03C277.1,24.03 278.23,24.86 278.65,26.11L288.36,56.68C290.74,64.49 292.19,69.48 292.71,72.08H293.02C293.33,70 294.57,64.17 296.94,54.81L304.7,25.79C305.01,24.75 305.94,24.03 306.97,24.03C308.52,24.03 309.66,25.48 309.25,27.04L296.22,75.41C295.81,76.86 294.57,77.8 293.02,77.8H292.6ZM354.01,77.8C353.08,77.8 352.25,77.07 352.15,76.13L351.22,69.27H350.7C348.01,72.7 345.33,75.2 342.43,76.65C339.64,78.11 336.23,78.73 332.4,78.73C327.13,78.73 323.1,77.38 320.2,74.68C317.62,72.29 316.17,69.06 315.97,65.01C315.55,59.6 317.83,54.4 322.17,51.38C326.61,48.47 332.82,46.7 341.19,46.7L351.32,46.39V42.85C351.32,37.65 350.29,33.91 348.12,31.31C345.95,28.71 342.74,27.46 338.19,27.46C333.85,27.46 329.51,28.5 324.96,30.68C323.82,31.2 322.48,30.68 321.96,29.54C321.45,28.39 321.96,27.04 323.1,26.63C328.27,24.55 333.33,23.4 338.5,23.4C344.39,23.4 348.74,24.96 351.73,28.08C354.63,31.1 356.08,35.99 356.08,42.33V76.13C355.97,76.76 355.04,77.8 354.01,77.8ZM332.61,74.26C338.4,74.26 342.84,72.6 346.05,69.37C349.36,66.15 351.01,61.47 351.01,55.75V50.55L341.71,50.96C334.16,51.28 328.89,52.52 325.58,54.5C322.38,56.48 320.72,59.7 320.72,63.86C320.72,67.19 321.76,69.89 323.72,71.77C325.99,73.33 328.89,74.26 332.61,74.26ZM393.81,22.99C395.36,22.99 396.91,23.09 398.67,23.3C400.01,23.51 400.84,24.75 400.63,26C400.42,27.25 399.18,27.98 397.94,27.77C396.39,27.56 394.84,27.35 393.29,27.35C388.74,27.35 385.02,29.33 382.13,33.18C379.23,37.03 377.79,42.02 377.79,47.84V75.09C377.79,76.45 376.75,77.49 375.41,77.49C374.06,77.49 373.03,76.45 373.03,75.09V26.21C373.03,25.07 373.96,24.13 375.1,24.13C376.23,24.13 377.17,24.96 377.17,26.11L377.58,33.8H377.89C380.06,29.85 382.44,27.04 384.92,25.48C387.3,23.82 390.29,22.99 393.81,22.99ZM430.2,22.99C434.02,22.99 437.43,23.71 440.23,25.07C443.12,26.42 445.6,28.91 447.77,32.35H448.08C447.88,28.08 447.77,24.13 447.77,20.18V3.22C447.77,1.87 448.81,0.83 450.15,0.83C451.49,0.83 452.53,1.87 452.53,3.22V75.93C452.53,76.86 451.8,77.59 450.87,77.59C450.05,77.59 449.32,76.97 449.22,76.03L448.19,69.27H447.77C443.74,75.41 437.85,78.42 430.3,78.42C422.86,78.42 417.38,76.13 413.35,71.45C409.52,66.77 407.45,60.12 407.45,51.28C407.45,42.02 409.32,34.95 413.24,29.95C417.17,25.48 422.76,22.99 430.2,22.99ZM430.2,27.46C424.3,27.46 419.96,29.54 416.97,33.7C414.07,37.76 412.62,43.68 412.62,51.59C412.62,66.77 418.52,74.37 430.3,74.37C436.4,74.37 440.74,72.6 443.53,69.06C446.43,65.53 447.77,59.7 447.77,51.59V50.76C447.77,42.44 446.43,36.51 443.53,32.97C440.85,29.23 436.4,27.46 430.2,27.46ZM492.12,78.73C484.37,78.73 478.37,76.34 473.93,71.45C469.58,66.67 467.41,59.91 467.41,51.28C467.41,42.64 469.48,35.78 473.72,30.68C477.96,25.48 483.54,22.88 490.67,22.88C496.88,22.88 501.94,25.07 505.46,29.43C509.18,33.8 510.94,39.84 510.94,47.43V51.38H472.48C472.58,58.77 474.24,64.38 477.65,68.33C481.06,72.29 485.82,74.05 492.12,74.05C495.12,74.05 497.91,73.85 500.18,73.43C501.84,73Line truncated
android:fillColor="#000000"
android:fillType="evenOdd"/>
<path
android:pathData="M103.02,46.93H109.72C110.35,46.93 110.9,46.31 110.84,45.75V15.05C110.84,14.43 110.35,13.93 109.72,13.93H103.02C102.4,13.93 101.9,14.43 101.9,15.05V45.81C101.9,46.43 102.4,46.93 103.02,46.93Z"
android:pathData="M62.76,49.09V11.9H36.92V77.97C41.49,75.53 45.59,72.88 49.2,70.01C58.24,62.88 62.76,55.91 62.76,49.09ZM73.83,4.46V49.09C73.83,52.42 73.19,55.73 71.9,59C70.61,62.27 69.01,65.18 67.11,67.72C65.21,70.25 62.94,72.72 60.3,75.12C57.67,77.53 55.24,79.52 53.01,81.11C50.78,82.7 48.45,84.2 46.03,85.61C43.61,87.03 41.89,87.99 40.87,88.49C39.85,88.99 39.03,89.38 38.42,89.65C37.95,89.88 37.45,90 36.92,90C36.38,90 35.88,89.88 35.42,89.65C34.8,89.38 33.98,88.99 32.96,88.49C31.95,87.99 30.22,87.03 27.8,85.61C25.38,84.2 23.05,82.7 20.82,81.11C18.59,79.52 16.16,77.53 13.53,75.12C10.89,72.72 8.62,70.25 6.72,67.72C4.82,65.18 3.22,62.27 1.93,59C0.64,55.73 0,52.42 0,49.09V4.46C0,3.46 0.37,2.58 1.1,1.85C1.83,1.11 2.69,0.74 3.69,0.74H70.14C71.14,0.74 72,1.11 72.73,1.85C73.47,2.58 73.83,3.46 73.83,4.46Z"
android:fillColor="#000000"/>
<path
android:pathData="M138.96,39.54C137.1,40.03 135.55,40.28 134.24,40.28C133.13,40.28 132.13,39.97 131.51,39.29C130.83,38.73 130.46,37.73 130.46,36.49V20.7H138.9C139.33,20.7 139.64,20.39 139.64,19.96V14.37C139.64,14.18 139.46,13.99 139.27,13.99H130.39V7.72C130.39,7.28 130.08,6.97 129.65,6.97H125.18C124.87,6.97 124.62,7.16 124.5,7.47L122.08,13.93L117.17,16.85C117.17,16.88 117.16,16.91 117.14,16.94C117.13,16.98 117.11,17.01 117.11,17.04V19.96C117.11,20.39 117.42,20.7 117.86,20.7H121.39V36.55C121.39,40.16 122.26,42.89 123.88,44.69C125.49,46.56 128.1,47.43 131.7,47.43C134.68,47.43 137.35,46.99 139.46,46.12C139.71,46 139.89,45.75 139.89,45.44V40.28C139.89,39.78 139.46,39.41 138.96,39.54Z"
android:fillColor="#000000"/>
<path
android:pathData="M174.09,45.56C174.46,46.37 175.15,46.93 176.02,46.93H176.26C177.2,46.93 177.94,46.37 178.19,45.5L186.01,16.6C186.26,15.67 185.57,14.8 184.64,14.8C184.02,14.8 183.46,15.24 183.28,15.86L178.62,33.2C177.2,38.79 176.45,42.27 176.26,43.51H176.08C175.77,41.96 174.9,38.98 173.47,34.32L167.64,16.04C167.39,15.3 166.71,14.8 165.9,14.8C165.03,14.8 164.35,15.3 164.1,16.04L157.83,34.44C157.27,35.99 156.4,39.04 155.29,43.64H155.1C154.73,41.4 153.92,38.04 152.74,33.45L147.9,15.86C147.71,15.24 147.15,14.8 146.53,14.8H146.35C145.35,14.8 144.67,15.73 144.92,16.6L153.17,45.5C153.42,46.37 154.17,46.93 155.04,46.93C155.9,46.93 156.65,46.43 156.9,45.63L163.66,25.55L164.97,21.33L165.59,19.09H165.77C165.95,19.73 166.11,20.34 166.26,20.92C166.77,22.85 167.18,24.39 167.51,25.49L174.09,45.56Z"
android:fillColor="#000000"/>
<path
android:pathData="M211.77,45.94C211.83,46.5 212.33,46.93 212.89,46.93C213.51,46.93 214.07,46.31 214.13,45.94V25.74C214.13,21.95 213.26,19.03 211.52,17.22C209.72,15.36 207.11,14.43 203.57,14.43C200.47,14.43 197.43,15.11 194.33,16.35C193.64,16.6 193.33,17.41 193.64,18.09C193.95,18.78 194.76,19.09 195.44,18.78C198.18,17.47 200.78,16.85 203.39,16.85C206.12,16.85 208.04,17.6 209.35,19.15C210.65,20.7 211.27,22.94 211.27,26.05V28.16L205.19,28.35C200.16,28.35 196.44,29.41 193.77,31.15C191.16,32.95 189.8,36.06 190.04,39.29C190.17,41.71 191.04,43.64 192.59,45.07C194.33,46.68 196.75,47.49 199.91,47.49C202.21,47.49 204.26,47.12 205.93,46.25C207.67,45.38 209.29,43.89 210.9,41.84H211.21L211.77,45.94ZM208.11,41.9C206.18,43.82 203.51,44.82 200.04,44.82C197.8,44.82 196.07,44.26 194.7,43.33C193.52,42.21 192.9,40.59 192.9,38.6C192.9,36.12 193.89,34.19 195.82,33.01C197.8,31.83 200.97,31.08 205.5,30.9L211.09,30.65V33.76C211.09,37.17 210.09,39.97 208.11,41.9Z"
android:fillColor="#000000"
android:fillType="evenOdd"/>
<path
android:pathData="M239.7,14.37C238.65,14.24 237.71,14.18 236.78,14.18C234.67,14.18 232.87,14.68 231.45,15.67C229.96,16.6 228.53,18.28 227.22,20.64H227.04L226.79,16.04C226.79,15.36 226.23,14.86 225.55,14.86C224.87,14.86 224.31,15.42 224.31,16.11V45.32C224.31,46.12 224.93,46.75 225.74,46.75C226.54,46.75 227.16,46.12 227.16,45.32V29.03C227.16,25.55 228.03,22.57 229.77,20.27C231.51,17.97 233.74,16.79 236.47,16.79C237.4,16.79 238.34,16.91 239.27,17.04C240.01,17.16 240.76,16.73 240.88,15.98C241,15.24 240.51,14.49 239.7,14.37Z"
android:fillColor="#000000"/>
<path
android:pathData="M264.65,15.42C262.98,14.61 260.93,14.18 258.63,14.18C254.16,14.18 250.81,15.67 248.45,18.34C246.09,21.33 244.98,25.55 244.98,31.08C244.98,36.37 246.22,40.34 248.51,43.14C250.93,45.94 254.23,47.3 258.69,47.3C263.23,47.3 266.76,45.5 269.18,41.84H269.43L270.05,45.88C270.11,46.43 270.55,46.81 271.05,46.81C271.61,46.81 272.04,46.37 272.04,45.81V2.37C272.04,1.56 271.42,0.94 270.61,0.94C269.8,0.94 269.18,1.56 269.18,2.37V12.5C269.18,14.86 269.25,17.22 269.37,19.77H269.18C267.88,17.72 266.39,16.23 264.65,15.42ZM250.69,20.58C252.49,18.09 255.09,16.85 258.63,16.85C262.36,16.85 265.02,17.91 266.64,20.15C268.38,22.26 269.18,25.8 269.18,30.77V31.27C269.18,36.12 268.38,39.6 266.64,41.71C264.96,43.82 262.36,44.88 258.69,44.88C251.62,44.88 248.08,40.34 248.08,31.27C248.08,26.55 248.95,23 250.69,20.58Z"
android:fillColor="#000000"
android:fillType="evenOdd"/>
<path
android:pathData="M284.89,43.14C287.56,46.06 291.16,47.49 295.81,47.49C297.67,47.49 299.35,47.37 300.9,46.93C302.2,46.68 303.63,46.31 305.12,45.69C305.62,45.5 305.93,45.01 305.93,44.51C305.93,43.64 305.06,43.02 304.25,43.33C302.83,43.82 301.65,44.13 300.65,44.32C299.29,44.57 297.61,44.69 295.81,44.69C292.03,44.69 289.17,43.64 287.12,41.28C285.07,38.91 284.08,35.56 284.02,31.15H307.11V28.78C307.11,24.25 306.05,20.64 303.82,18.03C301.71,15.42 298.67,14.12 294.94,14.12C290.66,14.12 287.31,15.67 284.76,18.78C282.22,21.82 280.98,25.93 280.98,31.08C280.98,36.24 282.28,40.28 284.89,43.14ZM287.49,19.83C289.36,17.78 291.84,16.79 294.94,16.79C297.8,16.79 300.03,17.85 301.65,19.9C303.26,21.95 304.07,24.93 304.07,28.6H284.2C284.58,24.81 285.63,21.82 287.49,19.83Z"
android:fillColor="#000000"
android:fillType="evenOdd"/>
<path
android:pathData="M338.45,45.5C338.45,46.31 339.08,46.93 339.88,46.93C340.63,46.93 341.31,46.25 341.37,45.38V25.86C341.37,18.03 337.71,14.12 330.45,14.12C325.11,14.12 321.45,15.8 319.34,19.15H319.15L318.78,15.92C318.65,15.3 318.16,14.8 317.48,14.8C316.73,14.8 316.17,15.36 316.17,16.11V45.38C316.17,46.19 316.79,46.81 317.6,46.81C318.41,46.81 319.03,46.19 319.03,45.38V29.09C319.03,24.81 320.02,21.64 321.76,19.71C323.5,17.72 326.29,16.79 330.14,16.79C332.99,16.79 335.04,17.6 336.47,19.03C337.77,20.46 338.45,22.82 338.45,26.05V45.5Z"
android:fillColor="#000000"/>
<path
android:pathData="M101.16,5.48C101.16,2.68 103.52,0.44 106.43,0.44C109.29,0.44 111.71,2.68 111.71,5.54V5.98C111.71,8.71 109.29,11.01 106.43,11.01C103.58,11.01 101.16,8.71 101.16,5.98V5.48Z"
android:fillColor="#000000"/>
<path
android:pathData="M44.66,29.78V3.11C44.66,2.51 44.44,1.99 44,1.55C43.56,1.11 43.04,0.89 42.44,0.89H2.55C1.95,0.89 1.43,1.11 0.99,1.55C0.55,1.99 0.33,2.51 0.33,3.11V29.78C0.33,31.77 0.72,33.74 1.49,35.7C2.26,37.65 3.22,39.39 4.36,40.91C5.51,42.42 6.87,43.9 8.45,45.33C10.03,46.77 11.49,47.96 12.83,48.91C14.17,49.86 15.57,50.76 17.02,51.6C18.48,52.45 19.51,53.02 20.12,53.32C20.73,53.62 21.23,53.85 21.59,54.01C21.87,54.15 22.17,54.22 22.5,54.22C22.82,54.22 23.12,54.15 23.4,54.01C23.76,53.85 24.26,53.62 24.87,53.32C25.48,53.02 26.51,52.45 27.97,51.6C29.42,50.76 30.82,49.86 32.16,48.91C33.5,47.96 34.96,46.77 36.54,45.33C38.12,43.9 39.48,42.42 40.63,40.91C41.77,39.39 42.73,37.65 43.5,35.7C44.27,33.74 44.66,31.77 44.66,29.78ZM38.01,7.56V29.78C38.01,33.85 35.3,38.02 29.87,42.28C27.7,43.99 25.24,45.58 22.5,47.03V7.56H38.01Z"
android:pathData="M456.13,186.43V139.55H463.94V186.43H456.13ZM460.03,129.6C458.48,129.6 457.18,129.11 456.13,128.11C455.13,127.06 454.64,125.76 454.64,124.21C454.64,122.66 455.13,121.42 456.13,120.49C457.18,119.5 458.48,119 460.03,119C461.52,119 462.79,119.5 463.84,120.49C464.9,121.42 465.42,122.66 465.42,124.21C465.42,125.76 464.9,127.06 463.84,128.11C462.79,129.11 461.52,129.6 460.03,129.6ZM591.42,185.12C593.47,185.99 595.88,186.43 598.67,186.43H605.93V179.73H600.91C597.93,179.73 595.85,179.23 594.67,178.24C593.5,177.19 592.91,175.2 592.91,172.29V146.16H606.48V139.55H592.91V128.21H586.12L585.09,139.55H576.91V146.16H585.09V172.29C585.09,175.82 585.62,178.64 586.68,180.75C587.79,182.8 589.37,184.26 591.42,185.12ZM636.33,187.54C631.99,187.54 628.09,186.55 624.61,184.57C621.14,182.52 618.41,179.67 616.43,176.01C614.45,172.29 613.45,167.98 613.45,163.08C613.45,158.06 614.45,153.72 616.43,150.06C618.48,146.34 621.23,143.49 624.71,141.51C628.24,139.46 632.18,138.44 636.52,138.44C640.98,138.44 644.92,139.46 648.33,141.51C651.8,143.49 654.53,146.34 656.51,150.06C658.56,153.72 659.58,158.03 659.58,162.99C659.58,167.95 658.56,172.29 656.51,176.01C654.47,179.67 651.71,182.52 648.24,184.57C644.76,186.55 640.8,187.54 636.33,187.54ZM636.42,180.85C639.09,180.85 641.57,180.19 643.86,178.89C646.16,177.53 648.02,175.51 649.45,172.85C650.87,170.18 651.58,166.9 651.58,162.99C651.58,159.02 650.87,155.74 649.45,153.13C648.08,150.46 646.25,148.48 643.96,147.18C641.73,145.82 639.25,145.13 636.52,145.13C633.91,145.13 631.43,145.82 629.08,147.18C626.78,148.48 624.92,150.46 623.5,153.13C622.13,155.74 621.45,159.02 621.45,162.99C621.45,166.9 622.13,170.18 623.5,172.85C624.92,175.51 626.75,177.53 628.98,178.89C631.28,180.19 633.76,180.85 636.42,180.85ZM670.53,186.43V139.55H677.6L678.16,148.48C679.21,146.37 680.55,144.57 682.16,143.09C683.83,141.6 685.82,140.45 688.11,139.65C690.47,138.84 693.13,138.44 696.11,138.44V146.62H693.23C691.24,146.62 689.35,146.9 687.55,147.46C685.76,147.95 684.14,148.79 682.72,149.97C681.35,151.15 680.27,152.76 679.46,154.8C678.72,156.79 678.35,159.27 678.35,162.24V186.43H670.53ZM546.2,187.54C542.41,187.54 539.25,186.89 536.71,185.59C534.17,184.22 532.28,182.46 531.04,180.29C529.8,178.05 529.18,175.64 529.18,173.03C529.18,169.87 529.98,167.21 531.59,165.04C533.27,162.8 535.59,161.13 538.57,160.01C541.61,158.84 545.17,158.25 549.27,158.25H561.63C561.63,155.33 561.17,152.91 560.24,150.99C559.37,149.01 558.07,147.52 556.33,146.53C554.66,145.54 552.55,145.04 550.01,145.04C547.03,145.04 544.46,145.78 542.29,147.27C540.12,148.76 538.79,150.96 538.29,153.88H530.29C530.66,150.53 531.78,147.74 533.64,145.51C535.56,143.21 537.98,141.48 540.9,140.3C543.81,139.06 546.85,138.44 550.01,138.44C554.35,138.44 557.95,139.24 560.8,140.85C563.71,142.4 565.88,144.61 567.31,147.46C568.73,150.25 569.45,153.57 569.45,157.41V186.43H562.47L562.01,178.15C561.39,179.45 560.58,180.69 559.59,181.87C558.66,182.98 557.54,183.98 556.24,184.84C555,185.65 553.54,186.3 551.87,186.8C550.2,187.29 548.3,187.54 546.2,187.54ZM547.41,180.94C549.58,180.94 551.53,180.5 553.26,179.64C555.06,178.71 556.58,177.47 557.82,175.92C559.06,174.3 559.99,172.54 560.61,170.62C561.29,168.69 561.63,166.68 561.63,164.57V164.29H549.92C546.88,164.29 544.43,164.66 542.57,165.41C540.71,166.09 539.38,167.08 538.57,168.38C537.76,169.62 537.36,171.05 537.36,172.66C537.36,174.34 537.73,175.79 538.48,177.03C539.28,178.27 540.43,179.23 541.92,179.91C543.47,180.6 545.3,180.94 547.41,180.94ZM486.93,184.47C490.46,186.52 494.43,187.54 498.83,187.54C504.35,187.54 508.97,186.08 512.69,183.17C516.47,180.19 518.86,176.35 519.85,171.64H511.85C511.42,173.56 510.58,175.23 509.34,176.66C508.1,178.09 506.58,179.17 504.79,179.91C502.99,180.6 500.97,180.94 498.74,180.94C496.76,180.94 494.83,180.57 492.98,179.82C491.18,179.02 489.6,177.87 488.23,176.38C486.87,174.89 485.78,173.03 484.98,170.8C484.17,168.51 483.77,165.9 483.77,162.99C483.77,159.08 484.45,155.8 485.81,153.13C487.24,150.46 489.07,148.48 491.3,147.18C493.6,145.82 496.08,145.13 498.74,145.13C502.03,145.13 504.88,145.94 507.3,147.55C509.71,149.16 511.23,151.43 511.85,154.34H519.85C518.86,149.5 516.5,145.66 512.78,142.81C509.06,139.89 504.41,138.44 498.83,138.44C494.43,138.44 490.46,139.49 486.93,141.6C483.46,143.65 480.73,146.5 478.75,150.15C476.76,153.81 475.77,158.12 475.77,163.08C475.77,167.92 476.76,172.2 478.75,175.92C480.73,179.57 483.46,182.43 486.93,184.47ZM430.12,185.12C432.17,185.99 434.59,186.43 437.38,186.43H444.63V179.73H439.61C436.63,179.73 434.55,179.23 433.38,178.24C432.2,177.19 431.61,175.2 431.61,172.29V146.16H445.19V139.55H431.61V128.21H424.82L423.8,139.55H415.61V146.16H423.8V172.29C423.8,175.82 424.33,178.64 425.38,180.75C426.49,182.8 428.08,184.26 430.12,185.12ZM365.56,186.43V139.55H372.63L373,147.74C374.49,144.82 376.6,142.56 379.32,140.95C382.11,139.27 385.28,138.44 388.81,138.44C392.47,138.44 395.63,139.18 398.3,140.67C400.96,142.1 403.04,144.3 404.53,147.27C406.02,150.19 406.76,153.91 406.76,158.43VLine truncated
android:fillColor="#000000"
android:fillType="evenOdd"/>
</vector>
+15 -8
View File
@@ -1,14 +1,21 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<group android:scaleX="0.11454546"
android:scaleY="0.11454546"
android:translateX="31.663637"
android:translateY="27.54">
<path
android:pathData="M376.4,12.2c-3.7,-3.7 -8.1,-5.6 -13.1,-5.6H26.7c-5.1,0 -9.4,1.9 -13.1,5.6C9.9,15.9 8,20.2 8,25.3v224.4c0,16.7 3.3,33.4 9.8,49.8c6.5,16.5 14.6,31.1 24.3,43.8c9.6,12.8 21.1,25.2 34.5,37.2c13.3,12.1 25.7,22.1 37,30.1c11.3,8 23.1,15.5 35.4,22.6c12.3,7.1 21,11.9 26.2,14.5c5.2,2.5 9.3,4.5 12.4,5.8c2.3,1.2 4.9,1.8 7.6,1.8c2.7,0 5.3,-0.6 7.6,-1.8c3.1,-1.4 7.3,-3.3 12.4,-5.8c5.2,-2.5 13.9,-7.4 26.2,-14.5c12.3,-7.1 24.1,-14.7 35.4,-22.6c11.3,-8 23.6,-18 37,-30.1c13.3,-12.1 24.8,-24.5 34.5,-37.2c9.6,-12.8 17.7,-27.4 24.2,-43.8c6.5,-16.5 9.8,-33.1 9.8,-49.8V25.3C382,20.2 380.1,15.9 376.4,12.2zM333,251.8C333,333 195,403 195,403V54.6h138C333,54.6 333,170.6 333,251.8z"
android:fillColor="#FFFFFF"/>
</group>
android:pathData="M63.95,56.33V43H54.5V66.69C56.17,65.81 57.67,64.86 58.99,63.83C62.3,61.28 63.95,58.78 63.95,56.33ZM68,40.33V56.33C68,57.53 67.76,58.71 67.29,59.89C66.82,61.06 66.24,62.1 65.54,63.01C64.85,63.92 64.02,64.81 63.05,65.67C62.09,66.53 61.2,67.24 60.39,67.81C59.57,68.38 58.72,68.92 57.83,69.43C56.95,69.93 56.32,70.28 55.94,70.46C55.57,70.64 55.27,70.78 55.05,70.88C54.88,70.96 54.7,71 54.5,71C54.3,71 54.12,70.96 53.95,70.88C53.73,70.78 53.43,70.64 53.06,70.46C52.68,70.28 52.05,69.93 51.17,69.43C50.28,68.92 49.43,68.38 48.61,67.81C47.8,67.24 46.91,66.53 45.95,65.67C44.98,64.81 44.15,63.92 43.46,63.01C42.76,62.1 42.18,61.06 41.71,59.89C41.24,58.71 41,57.53 41,56.33V40.33C41,39.97 41.13,39.66 41.4,39.4C41.67,39.13 41.98,39 42.35,39H66.65C67.02,39 67.33,39.13 67.6,39.4C67.87,39.66 68,39.97 68,40.33Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M38.02,32C34.69,32 32,34.63 32,37.87V45.91C32,46.57 32.55,47.11 33.23,47.11C33.9,47.11 34.45,46.57 34.45,45.91V37.87C34.45,35.95 36.05,34.39 38.02,34.39H46.26C46.94,34.39 47.48,33.86 47.48,33.2C47.48,32.54 46.94,32 46.26,32H38.02Z"
android:fillColor="#2CDDE9"/>
<path
android:pathData="M69.98,32C73.31,32 76,34.63 76,37.87V45.91C76,46.57 75.45,47.11 74.77,47.11C74.1,47.11 73.55,46.57 73.55,45.91V37.87C73.55,35.95 71.95,34.39 69.98,34.39H61.74C61.06,34.39 60.52,33.86 60.52,33.2C60.52,32.54 61.06,32 61.74,32H69.98Z"
android:fillColor="#2CDDE9"/>
<path
android:pathData="M32,70.13C32,73.37 34.69,76 38.02,76H46.26C46.94,76 47.48,75.46 47.48,74.8C47.48,74.14 46.94,73.61 46.26,73.61H38.02C36.05,73.61 34.45,72.05 34.45,70.13V62.09C34.45,61.43 33.9,60.89 33.23,60.89C32.55,60.89 32,61.43 32,62.09V70.13Z"
android:fillColor="#2CDDE9"/>
<path
android:pathData="M69.98,76C73.31,76 76,73.37 76,70.13V62.09C76,61.43 75.45,60.89 74.77,60.89C74.1,60.89 73.55,61.43 73.55,62.09V70.13C73.55,72.05 71.95,73.61 69.98,73.61H61.74C61.06,73.61 60.52,74.14 60.52,74.8C60.52,75.46 61.06,76 61.74,76H69.98Z"
android:fillColor="#2CDDE9"/>
</vector>
@@ -11,6 +11,7 @@
<color name="blue_002B74">#002B74</color>
<color name="blue_002B73">#002B73</color>
<color name="blue_001848">#001848</color>
<color name="blue_020F66">#020F66</color>
<color name="blue_151B2C">#151B2C</color>
<!-- Greys -->
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">@color/blue_175DDC</color>
<color name="ic_launcher_background">@color/blue_020F66</color>
</resources>
+7 -3
View File
@@ -1,5 +1,5 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="app_name"> Bitwarden Authenticator</string>
<string name="app_name">Authenticator</string>
<string name="biometrics_direction">Biometric verification</string>
<string name="cancel">Cancel</string>
<string name="add_item">Add item</string>
@@ -21,7 +21,7 @@
<string name="point_your_camera_at_the_qr_code">Point your camera at the QR code.</string>
<string name="cannot_scan_qr_code">Cannot scan QR code.</string>
<string name="enter_key_manually">Enter key manually.</string>
<string name="cannot_add_authenticator_key">Cannot add authenticator key?</string>
<string name="cannot_add_key">Cannot add key?</string>
<string name="once_the_key_is_successfully_entered">Once the key is successfully entered,\nselect Add TOTP to store the key safely</string>
<string name="add_totp">Add TOTP</string>
<string name="authenticator_key_scanner">Authenticator key</string>
@@ -32,7 +32,7 @@
<string name="you_dont_have_items_to_display">You don\'t have any items to display.</string>
<string name="empty_item_list_instruction">Add a new code to secure your accounts.</string>
<string name="add_code">Add code</string>
<string name="authenticator_key_read_error">Cannot read authenticator key.</string>
<string name="authenticator_key_read_error">Cannot read key.</string>
<string name="verification_code_added">Verification code added</string>
<string name="username">Username</string>
<string name="refresh_period">Refresh period</string>
@@ -103,4 +103,8 @@
<string name="privacy_policy">Privacy policy</string>
<string name="continue_to_privacy_policy">Continue to privacy policy?</string>
<string name="privacy_policy_description_long">Check out our privacy policy on bitwarden.com</string>
<string name="key">Key</string>
<string name="create_verification_code">Create Verification code</string>
<string name="key_is_required">Key is required.</string>
<string name="name_is_required">Name is required.</string>
</resources>