Merge on boarding module to login module (#4746)
* Move onboarding code to the login module. * Remove OnBoardingEntryPoint, move the flow to LoginFlowNode * Update screenshots --------- Co-authored-by: ElementBot <android@element.io>
This commit is contained in:
parent
fd4774d380
commit
150239bcd8
91 changed files with 287 additions and 512 deletions
|
|
@ -22,8 +22,8 @@ class DefaultLoginEntryPoint @Inject constructor() : LoginEntryPoint {
|
|||
val plugins = ArrayList<Plugin>()
|
||||
|
||||
return object : LoginEntryPoint.NodeBuilder {
|
||||
override fun params(params: LoginEntryPoint.Params): LoginEntryPoint.NodeBuilder {
|
||||
plugins += LoginFlowNode.Inputs(flowType = params.flowType)
|
||||
override fun callback(callback: LoginEntryPoint.Callback): LoginEntryPoint.NodeBuilder {
|
||||
plugins += callback
|
||||
return this
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ import com.bumble.appyx.core.lifecycle.subscribe
|
|||
import com.bumble.appyx.core.modality.BuildContext
|
||||
import com.bumble.appyx.core.node.Node
|
||||
import com.bumble.appyx.core.plugin.Plugin
|
||||
import com.bumble.appyx.core.plugin.plugins
|
||||
import com.bumble.appyx.navmodel.backstack.BackStack
|
||||
import com.bumble.appyx.navmodel.backstack.operation.push
|
||||
import com.bumble.appyx.navmodel.backstack.operation.singleTop
|
||||
|
|
@ -25,8 +26,9 @@ import dagger.assisted.Assisted
|
|||
import dagger.assisted.AssistedInject
|
||||
import io.element.android.anvilannotations.ContributesNode
|
||||
import io.element.android.compound.theme.ElementTheme
|
||||
import io.element.android.features.login.api.LoginFlowType
|
||||
import io.element.android.features.login.api.LoginEntryPoint
|
||||
import io.element.android.features.login.impl.accountprovider.AccountProviderDataSource
|
||||
import io.element.android.features.login.impl.onboarding.OnBoardingNode
|
||||
import io.element.android.features.login.impl.qrcode.QrCodeLoginFlowNode
|
||||
import io.element.android.features.login.impl.screens.changeaccountprovider.ChangeAccountProviderNode
|
||||
import io.element.android.features.login.impl.screens.confirmaccountprovider.ConfirmAccountProviderNode
|
||||
|
|
@ -35,9 +37,7 @@ import io.element.android.features.login.impl.screens.loginpassword.LoginPasswor
|
|||
import io.element.android.features.login.impl.screens.searchaccountprovider.SearchAccountProviderNode
|
||||
import io.element.android.libraries.architecture.BackstackView
|
||||
import io.element.android.libraries.architecture.BaseFlowNode
|
||||
import io.element.android.libraries.architecture.NodeInputs
|
||||
import io.element.android.libraries.architecture.createNode
|
||||
import io.element.android.libraries.architecture.inputs
|
||||
import io.element.android.libraries.di.AppScope
|
||||
import io.element.android.libraries.matrix.api.auth.OidcDetails
|
||||
import io.element.android.libraries.oidc.api.OidcAction
|
||||
|
|
@ -57,7 +57,7 @@ class LoginFlowNode @AssistedInject constructor(
|
|||
private val oidcEntryPoint: OidcEntryPoint,
|
||||
) : BaseFlowNode<LoginFlowNode.NavTarget>(
|
||||
backstack = BackStack(
|
||||
initialElement = NavTarget.Root,
|
||||
initialElement = NavTarget.OnBoarding,
|
||||
savedStateMap = buildContext.savedStateMap,
|
||||
),
|
||||
buildContext = buildContext,
|
||||
|
|
@ -66,12 +66,6 @@ class LoginFlowNode @AssistedInject constructor(
|
|||
private var activity: Activity? = null
|
||||
private var darkTheme: Boolean = false
|
||||
|
||||
data class Inputs(
|
||||
val flowType: LoginFlowType,
|
||||
) : NodeInputs
|
||||
|
||||
private val inputs: Inputs = inputs()
|
||||
|
||||
private var customChromeTabStarted = false
|
||||
|
||||
override fun onBuilt() {
|
||||
|
|
@ -96,10 +90,15 @@ class LoginFlowNode @AssistedInject constructor(
|
|||
|
||||
sealed interface NavTarget : Parcelable {
|
||||
@Parcelize
|
||||
data object Root : NavTarget
|
||||
data object OnBoarding : NavTarget
|
||||
|
||||
@Parcelize
|
||||
data object ConfirmAccountProvider : NavTarget
|
||||
data object QrCode : NavTarget
|
||||
|
||||
@Parcelize
|
||||
data class ConfirmAccountProvider(
|
||||
val isAccountCreation: Boolean,
|
||||
) : NavTarget
|
||||
|
||||
@Parcelize
|
||||
data object ChangeAccountProvider : NavTarget
|
||||
|
|
@ -119,16 +118,36 @@ class LoginFlowNode @AssistedInject constructor(
|
|||
|
||||
override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node {
|
||||
return when (navTarget) {
|
||||
NavTarget.Root -> {
|
||||
if (inputs.flowType == LoginFlowType.SIGN_IN_QR_CODE) {
|
||||
createNode<QrCodeLoginFlowNode>(buildContext)
|
||||
} else {
|
||||
resolve(NavTarget.ConfirmAccountProvider, buildContext)
|
||||
NavTarget.OnBoarding -> {
|
||||
val callback = object : OnBoardingNode.Callback {
|
||||
override fun onSignUp() {
|
||||
backstack.push(
|
||||
NavTarget.ConfirmAccountProvider(isAccountCreation = true)
|
||||
)
|
||||
}
|
||||
|
||||
override fun onSignIn() {
|
||||
backstack.push(
|
||||
NavTarget.ConfirmAccountProvider(isAccountCreation = false)
|
||||
)
|
||||
}
|
||||
|
||||
override fun onSignInWithQrCode() {
|
||||
backstack.push(NavTarget.QrCode)
|
||||
}
|
||||
|
||||
override fun onReportProblem() {
|
||||
plugins<LoginEntryPoint.Callback>().forEach { it.onReportProblem() }
|
||||
}
|
||||
}
|
||||
createNode<OnBoardingNode>(buildContext, listOf(callback))
|
||||
}
|
||||
NavTarget.ConfirmAccountProvider -> {
|
||||
NavTarget.QrCode -> {
|
||||
createNode<QrCodeLoginFlowNode>(buildContext)
|
||||
}
|
||||
is NavTarget.ConfirmAccountProvider -> {
|
||||
val inputs = ConfirmAccountProviderNode.Inputs(
|
||||
isAccountCreation = inputs.flowType == LoginFlowType.SIGN_UP,
|
||||
isAccountCreation = navTarget.isAccountCreation,
|
||||
)
|
||||
val callback = object : ConfirmAccountProviderNode.Callback {
|
||||
override fun onOidcDetails(oidcDetails: OidcDetails) {
|
||||
|
|
@ -162,7 +181,10 @@ class LoginFlowNode @AssistedInject constructor(
|
|||
val callback = object : ChangeAccountProviderNode.Callback {
|
||||
override fun onDone() {
|
||||
// Go back to the Account Provider screen
|
||||
backstack.singleTop(NavTarget.ConfirmAccountProvider)
|
||||
val confirmAccountProvider = backstack.elements.value.firstOrNull {
|
||||
it.key.navTarget is NavTarget.ConfirmAccountProvider
|
||||
}?.key?.navTarget ?: NavTarget.ConfirmAccountProvider(isAccountCreation = false)
|
||||
backstack.singleTop(confirmAccountProvider)
|
||||
}
|
||||
|
||||
override fun onOtherClick() {
|
||||
|
|
@ -176,7 +198,10 @@ class LoginFlowNode @AssistedInject constructor(
|
|||
val callback = object : SearchAccountProviderNode.Callback {
|
||||
override fun onDone() {
|
||||
// Go back to the Account Provider screen
|
||||
backstack.singleTop(NavTarget.ConfirmAccountProvider)
|
||||
val confirmAccountProvider = backstack.elements.value.firstOrNull {
|
||||
it.key.navTarget is NavTarget.ConfirmAccountProvider
|
||||
}?.key?.navTarget ?: NavTarget.ConfirmAccountProvider(isAccountCreation = false)
|
||||
backstack.singleTop(confirmAccountProvider)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
* Copyright 2023, 2024 New Vector Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
* Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
package io.element.android.features.login.impl.onboarding
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import com.bumble.appyx.core.modality.BuildContext
|
||||
import com.bumble.appyx.core.node.Node
|
||||
import com.bumble.appyx.core.plugin.Plugin
|
||||
import com.bumble.appyx.core.plugin.plugins
|
||||
import dagger.assisted.Assisted
|
||||
import dagger.assisted.AssistedInject
|
||||
import io.element.android.anvilannotations.ContributesNode
|
||||
import io.element.android.libraries.di.AppScope
|
||||
|
||||
@ContributesNode(AppScope::class)
|
||||
class OnBoardingNode @AssistedInject constructor(
|
||||
@Assisted buildContext: BuildContext,
|
||||
@Assisted plugins: List<Plugin>,
|
||||
private val presenter: OnBoardingPresenter,
|
||||
) : Node(
|
||||
buildContext = buildContext,
|
||||
plugins = plugins
|
||||
) {
|
||||
interface Callback : Plugin {
|
||||
fun onSignUp()
|
||||
fun onSignIn()
|
||||
fun onSignInWithQrCode()
|
||||
fun onReportProblem()
|
||||
}
|
||||
|
||||
private fun onSignIn() {
|
||||
plugins<Callback>().forEach { it.onSignIn() }
|
||||
}
|
||||
|
||||
private fun onSignUp() {
|
||||
plugins<Callback>().forEach { it.onSignUp() }
|
||||
}
|
||||
|
||||
private fun onSignInWithQrCode() {
|
||||
plugins<Callback>().forEach { it.onSignInWithQrCode() }
|
||||
}
|
||||
|
||||
private fun onReportProblem() {
|
||||
plugins<Callback>().forEach { it.onReportProblem() }
|
||||
}
|
||||
|
||||
@Composable
|
||||
override fun View(modifier: Modifier) {
|
||||
val state = presenter.present()
|
||||
OnBoardingView(
|
||||
state = state,
|
||||
modifier = modifier,
|
||||
onSignIn = ::onSignIn,
|
||||
onCreateAccount = ::onSignUp,
|
||||
onSignInWithQrCode = ::onSignInWithQrCode,
|
||||
onReportProblem = ::onReportProblem,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
/*
|
||||
* Copyright 2023, 2024 New Vector Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
* Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
package io.element.android.features.login.impl.onboarding
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.produceState
|
||||
import androidx.compose.runtime.remember
|
||||
import io.element.android.appconfig.OnBoardingConfig
|
||||
import io.element.android.features.rageshake.api.RageshakeFeatureAvailability
|
||||
import io.element.android.libraries.architecture.Presenter
|
||||
import io.element.android.libraries.core.meta.BuildMeta
|
||||
import io.element.android.libraries.featureflag.api.FeatureFlagService
|
||||
import io.element.android.libraries.featureflag.api.FeatureFlags
|
||||
import javax.inject.Inject
|
||||
|
||||
/**
|
||||
* Note: this Presenter is ignored regarding code coverage because it cannot reach the coverage threshold.
|
||||
* When this presenter get more code in it, please remove the ignore rule in the kover configuration.
|
||||
*/
|
||||
class OnBoardingPresenter @Inject constructor(
|
||||
private val buildMeta: BuildMeta,
|
||||
private val featureFlagService: FeatureFlagService,
|
||||
private val rageshakeFeatureAvailability: RageshakeFeatureAvailability,
|
||||
) : Presenter<OnBoardingState> {
|
||||
@Composable
|
||||
override fun present(): OnBoardingState {
|
||||
val canLoginWithQrCode by produceState(initialValue = false) {
|
||||
value = featureFlagService.isFeatureEnabled(FeatureFlags.QrCodeLogin)
|
||||
}
|
||||
val canReportBug = remember { rageshakeFeatureAvailability.isAvailable() }
|
||||
return OnBoardingState(
|
||||
productionApplicationName = buildMeta.productionApplicationName,
|
||||
canLoginWithQrCode = canLoginWithQrCode,
|
||||
canCreateAccount = OnBoardingConfig.CAN_CREATE_ACCOUNT,
|
||||
canReportBug = canReportBug,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
/*
|
||||
* Copyright 2023, 2024 New Vector Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
* Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
package io.element.android.features.login.impl.onboarding
|
||||
|
||||
data class OnBoardingState(
|
||||
val productionApplicationName: String,
|
||||
val canLoginWithQrCode: Boolean,
|
||||
val canCreateAccount: Boolean,
|
||||
val canReportBug: Boolean,
|
||||
)
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
* Copyright 2023, 2024 New Vector Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
* Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
package io.element.android.features.login.impl.onboarding
|
||||
|
||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||
|
||||
open class OnBoardingStateProvider : PreviewParameterProvider<OnBoardingState> {
|
||||
override val values: Sequence<OnBoardingState>
|
||||
get() = sequenceOf(
|
||||
anOnBoardingState(),
|
||||
anOnBoardingState(canLoginWithQrCode = true),
|
||||
anOnBoardingState(canCreateAccount = true),
|
||||
anOnBoardingState(canLoginWithQrCode = true, canCreateAccount = true),
|
||||
anOnBoardingState(canLoginWithQrCode = true, canCreateAccount = true, canReportBug = true),
|
||||
)
|
||||
}
|
||||
|
||||
fun anOnBoardingState(
|
||||
productionApplicationName: String = "Element",
|
||||
canLoginWithQrCode: Boolean = false,
|
||||
canCreateAccount: Boolean = false,
|
||||
canReportBug: Boolean = false,
|
||||
) = OnBoardingState(
|
||||
productionApplicationName = productionApplicationName,
|
||||
canLoginWithQrCode = canLoginWithQrCode,
|
||||
canCreateAccount = canCreateAccount,
|
||||
canReportBug = canReportBug,
|
||||
)
|
||||
|
|
@ -0,0 +1,185 @@
|
|||
/*
|
||||
* Copyright 2023, 2024 New Vector Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
* Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
package io.element.android.features.login.impl.onboarding
|
||||
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
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.runtime.Composable
|
||||
import androidx.compose.ui.Alignment.Companion.CenterHorizontally
|
||||
import androidx.compose.ui.BiasAlignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import io.element.android.compound.theme.ElementTheme
|
||||
import io.element.android.compound.tokens.generated.CompoundIcons
|
||||
import io.element.android.features.login.impl.R
|
||||
import io.element.android.libraries.designsystem.atomic.atoms.ElementLogoAtom
|
||||
import io.element.android.libraries.designsystem.atomic.atoms.ElementLogoAtomSize
|
||||
import io.element.android.libraries.designsystem.atomic.molecules.ButtonColumnMolecule
|
||||
import io.element.android.libraries.designsystem.atomic.pages.OnBoardingPage
|
||||
import io.element.android.libraries.designsystem.preview.ElementPreview
|
||||
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
||||
import io.element.android.libraries.designsystem.theme.components.Button
|
||||
import io.element.android.libraries.designsystem.theme.components.IconSource
|
||||
import io.element.android.libraries.designsystem.theme.components.Text
|
||||
import io.element.android.libraries.designsystem.theme.components.TextButton
|
||||
import io.element.android.libraries.testtags.TestTags
|
||||
import io.element.android.libraries.testtags.testTag
|
||||
import io.element.android.libraries.ui.strings.CommonStrings
|
||||
|
||||
// Refs:
|
||||
// FTUE:
|
||||
// - https://www.figma.com/file/o9p34zmiuEpZRyvZXJZAYL/FTUE?type=design&node-id=133-5427&t=5SHVppfYzjvkEywR-0
|
||||
// ElementX:
|
||||
// - https://www.figma.com/file/0MMNu7cTOzLOlWb7ctTkv3/Element-X?type=design&node-id=1816-97419
|
||||
@Composable
|
||||
fun OnBoardingView(
|
||||
state: OnBoardingState,
|
||||
onSignInWithQrCode: () -> Unit,
|
||||
onSignIn: () -> Unit,
|
||||
onCreateAccount: () -> Unit,
|
||||
onReportProblem: () -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
OnBoardingPage(
|
||||
modifier = modifier,
|
||||
content = {
|
||||
OnBoardingContent(state = state)
|
||||
},
|
||||
footer = {
|
||||
OnBoardingButtons(
|
||||
state = state,
|
||||
onSignInWithQrCode = onSignInWithQrCode,
|
||||
onSignIn = onSignIn,
|
||||
onCreateAccount = onCreateAccount,
|
||||
onReportProblem = onReportProblem,
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun OnBoardingContent(state: OnBoardingState) {
|
||||
Box(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
) {
|
||||
Box(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
contentAlignment = BiasAlignment(
|
||||
horizontalBias = 0f,
|
||||
verticalBias = -0.4f
|
||||
)
|
||||
) {
|
||||
ElementLogoAtom(
|
||||
size = ElementLogoAtomSize.Large,
|
||||
modifier = Modifier.padding(top = ElementLogoAtomSize.Large.shadowRadius / 2)
|
||||
)
|
||||
}
|
||||
Box(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
contentAlignment = BiasAlignment(
|
||||
horizontalBias = 0f,
|
||||
verticalBias = 0.6f
|
||||
)
|
||||
) {
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth(),
|
||||
horizontalAlignment = CenterHorizontally,
|
||||
) {
|
||||
Text(
|
||||
text = stringResource(id = R.string.screen_onboarding_welcome_title),
|
||||
color = ElementTheme.colors.textPrimary,
|
||||
style = ElementTheme.typography.fontHeadingLgBold,
|
||||
textAlign = TextAlign.Center
|
||||
)
|
||||
Spacer(modifier = Modifier.height(8.dp))
|
||||
Text(
|
||||
text = stringResource(id = R.string.screen_onboarding_welcome_message, state.productionApplicationName),
|
||||
color = ElementTheme.colors.textSecondary,
|
||||
style = ElementTheme.typography.fontBodyLgRegular.copy(fontSize = 17.sp),
|
||||
textAlign = TextAlign.Center
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun OnBoardingButtons(
|
||||
state: OnBoardingState,
|
||||
onSignInWithQrCode: () -> Unit,
|
||||
onSignIn: () -> Unit,
|
||||
onCreateAccount: () -> Unit,
|
||||
onReportProblem: () -> Unit,
|
||||
) {
|
||||
ButtonColumnMolecule {
|
||||
val signInButtonStringRes = if (state.canLoginWithQrCode || state.canCreateAccount) {
|
||||
R.string.screen_onboarding_sign_in_manually
|
||||
} else {
|
||||
CommonStrings.action_continue
|
||||
}
|
||||
if (state.canLoginWithQrCode) {
|
||||
Button(
|
||||
text = stringResource(id = R.string.screen_onboarding_sign_in_with_qr_code),
|
||||
leadingIcon = IconSource.Vector(CompoundIcons.QrCode()),
|
||||
onClick = onSignInWithQrCode,
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
)
|
||||
}
|
||||
Button(
|
||||
text = stringResource(id = signInButtonStringRes),
|
||||
onClick = onSignIn,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.testTag(TestTags.onBoardingSignIn)
|
||||
)
|
||||
if (state.canCreateAccount) {
|
||||
TextButton(
|
||||
text = stringResource(id = R.string.screen_onboarding_sign_up),
|
||||
onClick = onCreateAccount,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
)
|
||||
}
|
||||
if (state.canReportBug) {
|
||||
// Add a report problem text button. Use a Text since we need a special theme here.
|
||||
Text(
|
||||
modifier = Modifier
|
||||
.padding(16.dp)
|
||||
.clickable(onClick = onReportProblem),
|
||||
text = stringResource(id = CommonStrings.common_report_a_problem),
|
||||
style = ElementTheme.typography.fontBodySmRegular,
|
||||
color = ElementTheme.colors.textSecondary,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@PreviewsDayNight
|
||||
@Composable
|
||||
internal fun OnBoardingViewPreview(
|
||||
@PreviewParameter(OnBoardingStateProvider::class) state: OnBoardingState
|
||||
) = ElementPreview {
|
||||
OnBoardingView(
|
||||
state = state,
|
||||
onSignInWithQrCode = {},
|
||||
onSignIn = {},
|
||||
onCreateAccount = {},
|
||||
onReportProblem = {},
|
||||
)
|
||||
}
|
||||
|
|
@ -29,6 +29,12 @@
|
|||
<string name="screen_login_subtitle">"Matrix - гэта адкрытая сетка для бяспечнай, дэцэнтралізаванай сувязі."</string>
|
||||
<string name="screen_login_title">"Сардэчна запрашаем!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"Увайсці ў %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Увайсці ўручную"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"Увайсці з QR-кодам"</string>
|
||||
<string name="screen_onboarding_sign_up">"Стварыць уліковы запіс"</string>
|
||||
<string name="screen_onboarding_welcome_message">"Сардэчна запрашаем у самы хуткі %1$s. Перавага ў хуткасці і прастаце."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"Сардэчна запрашаем у %1$s. Зараджаны, для хуткасці і прастаты."</string>
|
||||
<string name="screen_onboarding_welcome_title">"Будзьце ў сваім element"</string>
|
||||
<string name="screen_qr_code_login_connecting_subtitle">"Ўсталяванне бяспечнага злучэння"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_description">"Не атрымалася ўсталяваць бяспечнае злучэнне з новай прыладай. Існуючыя прылады па-ранейшаму ў бяспецы, і вам не трэба турбавацца пра іх."</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_list_header">"Што зараз?"</string>
|
||||
|
|
|
|||
|
|
@ -19,6 +19,12 @@
|
|||
<string name="screen_login_subtitle">"Matrix е отворена мрежа за сигурна, децентрализирана комуникация."</string>
|
||||
<string name="screen_login_title">"Добре дошли отново!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"Влизане в %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Влизане ръчно"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"Влизане с QR код"</string>
|
||||
<string name="screen_onboarding_sign_up">"Създаване на акаунт"</string>
|
||||
<string name="screen_onboarding_welcome_message">"Добре дошли в най-бързия %1$s досега. Супер зареден за скорост и простота."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"Добре дошли в %1$s. Супер зареден за скорост и простота."</string>
|
||||
<string name="screen_onboarding_welcome_title">"Бъдете в стихията си"</string>
|
||||
<string name="screen_qr_code_login_invalid_scan_state_retry_button">"Повторен опит"</string>
|
||||
<string name="screen_server_confirmation_change_server">"Промяна на доставчика на акаунт"</string>
|
||||
<string name="screen_server_confirmation_message_login_matrix_dot_org">"Matrix е отворена мрежа за сигурна, децентрализирана комуникация."</string>
|
||||
|
|
|
|||
|
|
@ -34,6 +34,13 @@
|
|||
<string name="screen_login_subtitle">"Matrix je otevřená síť pro bezpečnou a decentralizovanou komunikaci."</string>
|
||||
<string name="screen_login_title">"Vítejte zpět!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"Přihlaste se k %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Ruční přihlášení"</string>
|
||||
<string name="screen_onboarding_sign_in_to">"Přihlásit se do %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"Přihlásit se pomocí QR kódu"</string>
|
||||
<string name="screen_onboarding_sign_up">"Vytvořit účet"</string>
|
||||
<string name="screen_onboarding_welcome_message">"Vítejte v dosud nejrychlejším %1$su. Vylepšený pro rychlost a jednoduchost."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"Vítejte v %1$su. Vylepšený, pro rychlost a jednoduchost."</string>
|
||||
<string name="screen_onboarding_welcome_title">"Buďte ve svém živlu"</string>
|
||||
<string name="screen_qr_code_login_connecting_subtitle">"Navazování zabezpečeného spojení"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_description">"K novému zařízení se nepodařilo navázat bezpečné připojení. Vaše stávající zařízení jsou stále v bezpečí a nemusíte se o ně obávat."</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_list_header">"Co teď?"</string>
|
||||
|
|
|
|||
|
|
@ -34,6 +34,13 @@
|
|||
<string name="screen_login_subtitle">"Mae Matrix yn rhwydwaith agored ar gyfer cyfathrebu diogel, datganoledig."</string>
|
||||
<string name="screen_login_title">"Croeso nôl!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"Mewngofnodi i %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Mewngofnodwch â llaw"</string>
|
||||
<string name="screen_onboarding_sign_in_to">"Mewngofnodi i %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"Mewngofnodwch gyda chod QR"</string>
|
||||
<string name="screen_onboarding_sign_up">"Creu cyfrif"</string>
|
||||
<string name="screen_onboarding_welcome_message">"Croeso i\'r %1$s cyflymaf erioed. Yn nodedig am gyflymder a symlrwydd."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"Croeso i %1$s. Yn nodedig ar gyfer cyflymder a symlrwydd."</string>
|
||||
<string name="screen_onboarding_welcome_title">"Byddwch yn eich elfen"</string>
|
||||
<string name="screen_qr_code_login_connecting_subtitle">"Yn creu cysylltiad diogel"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_description">"Nid oedd modd gwneud cysylltiad diogel â\'r ddyfais newydd. Mae eich dyfeisiau presennol yn dal yn ddiogel a does dim angen i chi boeni amdanyn nhw."</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_list_header">"Beth nawr?"</string>
|
||||
|
|
|
|||
|
|
@ -32,6 +32,12 @@
|
|||
<string name="screen_login_subtitle">"Matrix ist ein offenes Netzwerk für eine sichere, dezentrale Kommunikation."</string>
|
||||
<string name="screen_login_title">"Willkommen zurück!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"Anmelden bei %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Manuell anmelden"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"Mit QR-Code anmelden"</string>
|
||||
<string name="screen_onboarding_sign_up">"Konto erstellen"</string>
|
||||
<string name="screen_onboarding_welcome_message">"Willkommen beim schnellsten %1$s aller Zeiten. Optimiert für Geschwindigkeit und Einfachheit."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"Willkommen zu %1$s. Aufgeladen, für Geschwindigkeit und Einfachheit."</string>
|
||||
<string name="screen_onboarding_welcome_title">"Sei in Deinem Element"</string>
|
||||
<string name="screen_qr_code_login_connecting_subtitle">"Sichere Verbindung aufbauen"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_description">"Es konnte keine sichere Verbindung zu dem neuen Gerät hergestellt werden."</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_list_header">"Und jetzt?"</string>
|
||||
|
|
|
|||
|
|
@ -29,6 +29,12 @@
|
|||
<string name="screen_login_subtitle">"Το Matrix είναι ένα ανοιχτό δίκτυο για ασφαλή, αποκεντρωμένη επικοινωνία."</string>
|
||||
<string name="screen_login_title">"Καλωσόρισες ξανά!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"Συνδέσου στο %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Σύνδεση χειροκίνητα"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"Συνδέσου με κωδικό QR"</string>
|
||||
<string name="screen_onboarding_sign_up">"Δημιουργία λογαριασμού"</string>
|
||||
<string name="screen_onboarding_welcome_message">"Καλώς ήλθατε στο γρηγορότερο %1$s όλων των εποχών. Υπερτροφοδοτούμενο με ταχύτητα και απλότητα."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"Καλώς ήρθες στο %1$s. Υπερφορτισμένο, για ταχύτητα και απλότητα."</string>
|
||||
<string name="screen_onboarding_welcome_title">"Μείνε στο element σου"</string>
|
||||
<string name="screen_qr_code_login_connecting_subtitle">"Εγκαθίδρυση ασφαλούς σύνδεσης"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_description">"Δεν ήταν δυνατή η πραγματοποίηση ασφαλούς σύνδεσης στη νέα συσκευή. Οι υπάρχουσες συσκευές σας εξακολουθούν να είναι ασφαλείς και δεν χρειάζεται να ανησυχείς για αυτές."</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_list_header">"Τί είναι πάλι;"</string>
|
||||
|
|
|
|||
|
|
@ -29,6 +29,12 @@
|
|||
<string name="screen_login_subtitle">"Matrix es una red abierta para una comunicación segura y descentralizada."</string>
|
||||
<string name="screen_login_title">"¡Hola de nuevo!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"Iniciar sesión en %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Iniciar sesión manualmente"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"Iniciar sesión con un código QR"</string>
|
||||
<string name="screen_onboarding_sign_up">"Crear cuenta"</string>
|
||||
<string name="screen_onboarding_welcome_message">"Bienvenido al %1$s más rápido de todos los tiempos. Diseñado para la velocidad y la simplicidad."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"Bienvenido a %1$s. Vitaminado, para mayor rapidez y sencillez."</string>
|
||||
<string name="screen_onboarding_welcome_title">"Siéntete en tu Elemento"</string>
|
||||
<string name="screen_qr_code_login_connecting_subtitle">"Estableciendo una conexión segura"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_description">"No se pudo establecer una conexión segura con el nuevo dispositivo. Tus dispositivos actuales siguen siendo seguros y no tienes que preocuparte por ellos."</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_list_header">"¿Y ahora qué?"</string>
|
||||
|
|
|
|||
|
|
@ -34,6 +34,13 @@
|
|||
<string name="screen_login_subtitle">"Matrix on avatud võrk turvalise ja hajutatud suhtluse jaoks."</string>
|
||||
<string name="screen_login_title">"Tere tulemast tagasi!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"Logi sisse serverisse %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Logi sisse käsitsi"</string>
|
||||
<string name="screen_onboarding_sign_in_to">"Logi sisse teenusesse %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"Logi sisse QR-koodi alusel"</string>
|
||||
<string name="screen_onboarding_sign_up">"Loo kasutajakonto"</string>
|
||||
<string name="screen_onboarding_welcome_message">"Läbi aegade kiireim ja mugavaim %1$s."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"Tere tulemast kasutama kiiret ja lihtsat suhtlusrakendust %1$s."</string>
|
||||
<string name="screen_onboarding_welcome_title">"Ole oma elemendis"</string>
|
||||
<string name="screen_qr_code_login_connecting_subtitle">"Loome turvalist ühendust"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_description">"Turvalise ühenduse loomine uue seadmega ei õnnestunud. Sinu olemasolevad seadmed on jätkuvalt turvatud ja sa ei pea nende pärast muretsema."</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_list_header">"Mida järgmiseks teeme?"</string>
|
||||
|
|
|
|||
|
|
@ -20,6 +20,12 @@
|
|||
<string name="screen_login_subtitle">"Matrix komunikazio seguru eta deszentralizaturako sare irekia da."</string>
|
||||
<string name="screen_login_title">"Ongi etorri!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"Hasi saioa %1$s(e)n"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Hasi saioa eskuz"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"Hasi saioa QR kodearekin"</string>
|
||||
<string name="screen_onboarding_sign_up">"Sortu kontua"</string>
|
||||
<string name="screen_onboarding_welcome_message">"Ongi etorri inoizko %1$s azkarrenera. Abiaduraz eta sinpletasunaz gainkargatua."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"Ongi etorri %1$s-ra. Abiaduraz eta sinpletasunez gainezka."</string>
|
||||
<string name="screen_onboarding_welcome_title">"Egon zure saltsan"</string>
|
||||
<string name="screen_qr_code_login_connecting_subtitle">"Konexio segurua ezartzen"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_description">"Ezin izan da konexio segururik ezarri gailu berriarekin. Lehendik dauden gailuak seguru daude oraindik ere eta ez duzu haietaz kezkatu beharrik."</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_list_header">"Orain zer?"</string>
|
||||
|
|
|
|||
|
|
@ -25,6 +25,12 @@
|
|||
<string name="screen_login_subtitle">"ماتریکس شبکهای بار برای ارتباطات نامتمرکز و امن است."</string>
|
||||
<string name="screen_login_title">"خوش برگشتید!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"ورود به %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"ورود دستی"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"ورود با کد QR"</string>
|
||||
<string name="screen_onboarding_sign_up">"ایجاد حساب"</string>
|
||||
<string name="screen_onboarding_welcome_message">"به سریعترین %1$s خوش آمدید. بازطرّاحی شده برای سرعت و سادگی."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"به %1$s خوش آمدید. بازطرّاحی شده برای سرعت و سادگی."</string>
|
||||
<string name="screen_onboarding_welcome_title">"در المنتتان باشید"</string>
|
||||
<string name="screen_qr_code_login_connecting_subtitle">"برقرار کدن اتّصالی امن"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_description">"نتوانست اتّصالی امن به افزارهٔ جدید بسازد. افزارههای موجودتان هنوز امنند و نیازی نیست نگرانشان باشید."</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_list_header">"اکنون چه؟"</string>
|
||||
|
|
|
|||
|
|
@ -17,6 +17,9 @@
|
|||
<string name="screen_change_server_error_invalid_well_known">"Sliding sync ei ole saatavilla well-known tiedostossa olevan ongelman vuoksi:
|
||||
%1$s"</string>
|
||||
<string name="screen_change_server_error_no_sliding_sync_message">"Valitsemasi palveluntarjoaja ei tue sliding syncia. Palvelimen päivitys tarvitaan %1$s -sovelluksen käyttämiseen."</string>
|
||||
<string name="screen_change_server_error_unauthorized_homeserver">"%1$s ei saa yhdistää %2$s -palvelimeen."</string>
|
||||
<string name="screen_change_server_error_unauthorized_homeserver_content">"Tämä sovellus on määritetty sallimaan: %1$s."</string>
|
||||
<string name="screen_change_server_error_unauthorized_homeserver_title">"Palveluntarjoaja %1$s ei ole sallittu."</string>
|
||||
<string name="screen_change_server_form_header">"Kotipalvelimen osoite"</string>
|
||||
<string name="screen_change_server_form_notice">"Anna verkkotunnuksen osoite."</string>
|
||||
<string name="screen_change_server_subtitle">"Mikä on palvelimesi osoite?"</string>
|
||||
|
|
@ -31,6 +34,13 @@
|
|||
<string name="screen_login_subtitle">"Matrix on avoin verkko turvallista, hajautettua viestintää varten."</string>
|
||||
<string name="screen_login_title">"Tervetuloa takaisin!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"Kirjaudu sisään %1$s -palvelimelle"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Kirjaudu sisään manuaalisesti"</string>
|
||||
<string name="screen_onboarding_sign_in_to">"Kirjaudu sisään %1$s -palvelimelle"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"Kirjaudu sisään QR-koodilla"</string>
|
||||
<string name="screen_onboarding_sign_up">"Luo tili"</string>
|
||||
<string name="screen_onboarding_welcome_message">"Tervetuloa kaikkien aikojen nopeimpaan %1$s -sovellukseen. Ahdettu nopeudella ja yksinkertaisuudella."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"Tervetuloa %1$s -sovellukseen. Ahdettu nopeudella ja yksinkertaisuudella."</string>
|
||||
<string name="screen_onboarding_welcome_title">"Ole elementissäsi"</string>
|
||||
<string name="screen_qr_code_login_connecting_subtitle">"Muodostetaan turvallista yhteyttä"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_description">"Turvallista yhteyttä uuteen laitteeseen ei voitu muodostaa. Olemassa olevat laitteesi ovat edelleen turvassa, eikä sinun tarvitse huolehtia niistä."</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_list_header">"Mitä nyt?"</string>
|
||||
|
|
|
|||
|
|
@ -34,6 +34,13 @@
|
|||
<string name="screen_login_subtitle">"Matrix est un réseau ouvert pour une communication sécurisée et décentralisée."</string>
|
||||
<string name="screen_login_title">"Content de vous revoir !"</string>
|
||||
<string name="screen_login_title_with_homeserver">"Connectez-vous à %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Se connecter manuellement"</string>
|
||||
<string name="screen_onboarding_sign_in_to">"Se connecter à %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"Se connecter avec un QR code"</string>
|
||||
<string name="screen_onboarding_sign_up">"Créer un compte"</string>
|
||||
<string name="screen_onboarding_welcome_message">"Bienvenue dans l’application %1$s la plus rapide de tous les temps. Boosté pour plus de rapidité et de simplicité."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"Bienvenue sur %1$s. Boosté, pour plus de rapidité et de simplicité."</string>
|
||||
<string name="screen_onboarding_welcome_title">"Soyez dans votre Element"</string>
|
||||
<string name="screen_qr_code_login_connecting_subtitle">"Établissement d’une connexion sécurisée"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_description">"Aucune connexion sécurisée n’a pu être établie avec la nouvelle session. Vos sessions existantes sont toujours en sécurité et vous n’avez pas à vous en soucier."</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_list_header">"Et maintenant ?"</string>
|
||||
|
|
|
|||
|
|
@ -34,6 +34,13 @@
|
|||
<string name="screen_login_subtitle">"A Matrix egy nyitott hálózat a biztonságos, decentralizált kommunikációhoz."</string>
|
||||
<string name="screen_login_title">"Örülünk, hogy visszatért!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"Bejelentkezés ide: %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Kézi bejelentkezés"</string>
|
||||
<string name="screen_onboarding_sign_in_to">"Bejelentkezés ide: %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"Bejelentkezés QR-kóddal"</string>
|
||||
<string name="screen_onboarding_sign_up">"Fiók létrehozása"</string>
|
||||
<string name="screen_onboarding_welcome_message">"Üdvözöljük a valaha volt leggyorsabb %1$sben. Felturbózva, a sebesség és az egyszerűség érdekében."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"Üdvözli az %1$s. Felturbózva, a sebesség és az egyszerűség jegyében."</string>
|
||||
<string name="screen_onboarding_welcome_title">"Legyen elemében"</string>
|
||||
<string name="screen_qr_code_login_connecting_subtitle">"Biztonságos kapcsolat létesítése"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_description">"Nem sikerült biztonságos kapcsolatot létesíteni az új eszközzel. A meglévő eszközei továbbra is biztonságban vannak, és nem kell aggódnia miattuk."</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_list_header">"Most mi lesz?"</string>
|
||||
|
|
|
|||
|
|
@ -29,6 +29,12 @@
|
|||
<string name="screen_login_subtitle">"Matrix adalah jaringan terbuka untuk komunikasi yang aman dan terdesentralisasi."</string>
|
||||
<string name="screen_login_title">"Selamat datang kembali!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"Masuk ke %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Masuk secara manual"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"Masuk dengan kode QR"</string>
|
||||
<string name="screen_onboarding_sign_up">"Buat akun"</string>
|
||||
<string name="screen_onboarding_welcome_message">"Selamat datang di %1$s tercepat yang pernah ada. Berdaya besar untuk kecepatan dan kesederhanaan."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"Selamat datang di %1$s. Berdaya penuh, untuk kecepatan dan kesederhanaan."</string>
|
||||
<string name="screen_onboarding_welcome_title">"Berada di elemen Anda"</string>
|
||||
<string name="screen_qr_code_login_connecting_subtitle">"Membuat koneksi aman"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_description">"Koneksi aman tidak dapat dibuat ke perangkat baru. Perangkat Anda yang ada masih aman dan Anda tidak perlu khawatir tentang mereka."</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_list_header">"Apa sekarang?"</string>
|
||||
|
|
|
|||
|
|
@ -29,6 +29,12 @@
|
|||
<string name="screen_login_subtitle">"Matrix è una rete aperta per comunicazioni sicure e decentralizzate."</string>
|
||||
<string name="screen_login_title">"Bentornato!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"Accedi a %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Accedi manualmente"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"Accedi con codice QR"</string>
|
||||
<string name="screen_onboarding_sign_up">"Crea account"</string>
|
||||
<string name="screen_onboarding_welcome_message">"Benvenuti nell\'%1$s più veloce di sempre. Potenziato per velocità e semplicità."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"Benvenuto su %1$s. Potenziato in velocità e semplicità."</string>
|
||||
<string name="screen_onboarding_welcome_title">"Sii nel tuo elemento"</string>
|
||||
<string name="screen_qr_code_login_connecting_subtitle">"Stabilendo la connessione"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_description">"Non è stato possibile stabilire una connessione sicura con il nuovo dispositivo. I tuoi dispositivi esistenti sono ancora al sicuro e non devi preoccuparti di loro."</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_list_header">"E adesso?"</string>
|
||||
|
|
|
|||
|
|
@ -28,6 +28,12 @@
|
|||
<string name="screen_login_subtitle">"Matrix არის ღია ქსელი უსაფრთხო, დეცენტრალიზებული კომუნიკაციისთვის."</string>
|
||||
<string name="screen_login_title">"კეთილი იყოს თქვენი მობრძანება!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"შესვლა %1$s-ში"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"ხელით შესვლა"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"შესვლა QR კოდით"</string>
|
||||
<string name="screen_onboarding_sign_up">"ანგარიშის შექმნა"</string>
|
||||
<string name="screen_onboarding_welcome_message">"კეთილი იყოს თქვენი მობრძანება უსწრაფეს %1$s-ში. დამუხტულია სიჩქარისა და სიმარტივისათვის."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"კეთილი იყოს თქვენი მობრძანება %1$s-ში! დამუხტული სიჩქარისა და სიმარტივისთვის."</string>
|
||||
<string name="screen_onboarding_welcome_title">"იყავი შენს element-ში"</string>
|
||||
<string name="screen_qr_code_login_invalid_scan_state_retry_button">"ხელახლა ცდა"</string>
|
||||
<string name="screen_server_confirmation_change_server">"შეცვალეთ ანგარიშის მომწოდებელი"</string>
|
||||
<string name="screen_server_confirmation_message_login_element_dot_io">"კერძო სერვერი Element-ის თანამშრომლებისთვის."</string>
|
||||
|
|
|
|||
|
|
@ -22,6 +22,11 @@
|
|||
<string name="screen_login_subtitle">"Matrix yra atviras tinklas, skirtas saugiam, decentralizuotam bendravimui."</string>
|
||||
<string name="screen_login_title">"Sveiki sugrįžę!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"Prisijungti prie %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Prisijunkite rankiniu būdu"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"Prisijunkite naudodami QR kodą"</string>
|
||||
<string name="screen_onboarding_sign_up">"Sukurti paskyrą"</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"Sveiki atvykę į %1$s. Įkrautas greitumui ir paprastumui."</string>
|
||||
<string name="screen_onboarding_welcome_title">"Būkite savo elemente"</string>
|
||||
<string name="screen_server_confirmation_change_server">"Keisti paskyros teikėją"</string>
|
||||
<string name="screen_server_confirmation_message_login_element_dot_io">"Privatus serveris “Element” darbuotojams."</string>
|
||||
<string name="screen_server_confirmation_message_login_matrix_dot_org">"Matrix yra atviras tinklas, skirtas saugiam, decentralizuotam bendravimui."</string>
|
||||
|
|
|
|||
|
|
@ -34,6 +34,13 @@
|
|||
<string name="screen_login_subtitle">"Matrix er et åpent nettverk for sikker, desentralisert kommunikasjon."</string>
|
||||
<string name="screen_login_title">"Velkommen tilbake!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"Logg inn på %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Logg på manuelt"</string>
|
||||
<string name="screen_onboarding_sign_in_to">"Logg inn på %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"Logg inn med QR-kode"</string>
|
||||
<string name="screen_onboarding_sign_up">"Opprett konto"</string>
|
||||
<string name="screen_onboarding_welcome_message">"Velkommen til den raskeste %1$s noensinne. Superladet for hastighet og enkelhet."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"Velkommen til %1$s. Supercharged, for hastighet og enkelhet."</string>
|
||||
<string name="screen_onboarding_welcome_title">"Vær i ditt rette element"</string>
|
||||
<string name="screen_qr_code_login_connecting_subtitle">"Etablere en sikker forbindelse"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_description">"En sikker tilkobling kunne ikke opprettes til den nye enheten. Dine eksisterende enheter er fortsatt trygge, og du trenger ikke å bekymre deg for dem."</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_list_header">"Hva nå?"</string>
|
||||
|
|
|
|||
|
|
@ -29,6 +29,12 @@
|
|||
<string name="screen_login_subtitle">"Matrix is een open netwerk voor veilige, gedecentraliseerde communicatie."</string>
|
||||
<string name="screen_login_title">"Welkom terug!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"Inloggen bij %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Handmatig inloggen"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"Inloggen met QR-code"</string>
|
||||
<string name="screen_onboarding_sign_up">"Account aanmaken"</string>
|
||||
<string name="screen_onboarding_welcome_message">"Welkom bij de snelste %1$s ooit. Supercharged, voor snelheid en eenvoud."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"Welkom bij %1$s. Supercharged, voor snelheid en eenvoud."</string>
|
||||
<string name="screen_onboarding_welcome_title">"Wees in je element"</string>
|
||||
<string name="screen_qr_code_login_connecting_subtitle">"Een beveiligde verbinding tot stand brengen"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_description">"Er kon geen beveiligde verbinding worden gemaakt met het nieuwe apparaat. Je bestaande apparaten zijn nog steeds veilig en je hoeft je daarover geen zorgen te maken."</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_list_header">"Wat nu?"</string>
|
||||
|
|
|
|||
|
|
@ -32,6 +32,13 @@
|
|||
<string name="screen_login_subtitle">"Matrix to otwarta sieć do bezpiecznej i zdecentralizowanej komunikacji."</string>
|
||||
<string name="screen_login_title">"Witaj ponownie!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"Zaloguj się do %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Zaloguj się ręcznie"</string>
|
||||
<string name="screen_onboarding_sign_in_to">"Zaloguj się do %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"Zaloguj się za pomocą kodu QR"</string>
|
||||
<string name="screen_onboarding_sign_up">"Utwórz konto"</string>
|
||||
<string name="screen_onboarding_welcome_message">"Witamy w %1$s. Szybszy i prostszy niż kiedykolwiek."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"Witamy w %1$s. Doładowany, dla szybkości i prostoty."</string>
|
||||
<string name="screen_onboarding_welcome_title">"Be in your element"</string>
|
||||
<string name="screen_qr_code_login_connecting_subtitle">"Nawiązanie bezpiecznego połączenia"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_description">"Nie udało się nawiązać bezpiecznego połączenia z nowym urządzeniem. Twoje istniejące urządzenia są nadal bezpieczne i nie musisz się o nie martwić."</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_list_header">"Co teraz?"</string>
|
||||
|
|
|
|||
|
|
@ -27,6 +27,12 @@
|
|||
<string name="screen_login_subtitle">"A Matrix é uma rede aberta para comunicação segura e descentralizada."</string>
|
||||
<string name="screen_login_title">"Bem-vindo de volta!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"Iniciar sessão em %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Iniciar sessão manualmente"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"Iniciar sessão com código QR"</string>
|
||||
<string name="screen_onboarding_sign_up">"Criar conta"</string>
|
||||
<string name="screen_onboarding_welcome_message">"Bem-vindo ao mais rápido %1$s de todos os tempos. Turbinado para velocidade e simplicidade."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"Bem-vindo ao %1$s. Turbinado, para velocidade e simplicidade"</string>
|
||||
<string name="screen_onboarding_welcome_title">"Esteja no seu elemento"</string>
|
||||
<string name="screen_qr_code_login_invalid_scan_state_retry_button">"Tente novamente"</string>
|
||||
<string name="screen_qr_code_login_no_camera_permission_state_description">"Você deve permitir ao %1$s usar a câmera do seu dispositivo para continuar."</string>
|
||||
<string name="screen_qr_code_login_verify_code_title">"Seu código de verificação"</string>
|
||||
|
|
|
|||
|
|
@ -29,6 +29,12 @@
|
|||
<string name="screen_login_subtitle">"A Matrix é uma rede aberta de comunicação descentralizada e segura."</string>
|
||||
<string name="screen_login_title">"Bem-vindo(a) de volta!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"Iniciar sessão em %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Iniciar sessão manualmente"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"Iniciar sessão com código QR"</string>
|
||||
<string name="screen_onboarding_sign_up">"Criar conta"</string>
|
||||
<string name="screen_onboarding_welcome_message">"Bem-vindo(a) à %1$s mais rápida de sempre. Super rápida e simples."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"Bem-vindo(a) à %1$s. Revitalizado, rápido e simples."</string>
|
||||
<string name="screen_onboarding_welcome_title">"A liberdade do teu elemento"</string>
|
||||
<string name="screen_qr_code_login_connecting_subtitle">"A estabelecer uma ligação segura"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_description">"Não foi possível estabelecer uma ligação segura com o novo dispositivo. Os teus outros dispositivos continuam seguros, não precisas de te preocupar com eles."</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_list_header">"E agora?"</string>
|
||||
|
|
|
|||
|
|
@ -29,6 +29,12 @@
|
|||
<string name="screen_login_subtitle">"Matrix este o rețea deschisă pentru o comunicare sigură și descentralizată."</string>
|
||||
<string name="screen_login_title">"Bine ați revenit!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"Conectați-vă la %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Conectați-vă manual"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"Conectați-vă cu un cod QR"</string>
|
||||
<string name="screen_onboarding_sign_up">"Creați un cont"</string>
|
||||
<string name="screen_onboarding_welcome_message">"Bine ați venit la cel mai rapid %1$s din toate timpurile. Supraalimentat pentru viteză și simplitate."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"Bun venit în %1$s. Supraalimentat, pentru viteză și simplitate."</string>
|
||||
<string name="screen_onboarding_welcome_title">"Fii în Elementul tău"</string>
|
||||
<string name="screen_qr_code_login_connecting_subtitle">"Se stabilește o conexiune securizată"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_description">"Nu a putut fi făcută o conexiune sigură la noul dispozitiv. Dispozitivele existente sunt încă în siguranță și nu trebuie să vă faceți griji cu privire la ele."</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_list_header">"Și acum?"</string>
|
||||
|
|
|
|||
|
|
@ -30,6 +30,12 @@
|
|||
<string name="screen_login_subtitle">"Matrix — это открытая сеть для безопасной децентрализованной связи."</string>
|
||||
<string name="screen_login_title">"Рады видеть вас снова!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"Войти в %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Войти вручную"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"Войти QR-кодом"</string>
|
||||
<string name="screen_onboarding_sign_up">"Создать учетную запись"</string>
|
||||
<string name="screen_onboarding_welcome_message">"Добро пожаловать в самый быстрый клиент %1$s. Ориентирован на скорость и простоту."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"Добро пожаловать в %1$s. Ориентирован на скорость и простоту."</string>
|
||||
<string name="screen_onboarding_welcome_title">"Чувствуйте себя как дома с Element"</string>
|
||||
<string name="screen_qr_code_login_connecting_subtitle">"Установление безопасного соединения"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_description">"Не удалось установить безопасное соединение с новым устройством. Существующие устройства по-прежнему в безопасности, и вам не нужно беспокоиться о них."</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_list_header">"Что теперь?"</string>
|
||||
|
|
|
|||
|
|
@ -34,6 +34,13 @@
|
|||
<string name="screen_login_subtitle">"Matrix je otvorená sieť pre bezpečnú a decentralizovanú komunikáciu."</string>
|
||||
<string name="screen_login_title">"Vitajte späť!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"Prihlásiť sa do %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Prihlásiť sa manuálne"</string>
|
||||
<string name="screen_onboarding_sign_in_to">"Prihlásiť sa do %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"Prihlásiť sa pomocou QR kódu"</string>
|
||||
<string name="screen_onboarding_sign_up">"Vytvoriť účet"</string>
|
||||
<string name="screen_onboarding_welcome_message">"Vitajte v najrýchlejšom %1$s vôbec. Nadupaný pre rýchlosť a jednoduchosť."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"Vitajte v %1$s. Nadupaný, pre rýchlosť a jednoduchosť."</string>
|
||||
<string name="screen_onboarding_welcome_title">"Buďte vo svojom elemente"</string>
|
||||
<string name="screen_qr_code_login_connecting_subtitle">"Nadväzovanie bezpečného spojenia"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_description">"K novému zariadeniu sa nepodarilo vytvoriť bezpečné pripojenie. Vaše existujúce zariadenia sú stále v bezpečí a nemusíte sa o ne obávať."</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_list_header">"Čo teraz?"</string>
|
||||
|
|
|
|||
|
|
@ -29,6 +29,12 @@
|
|||
<string name="screen_login_subtitle">"Matrix är ett öppet nätverk för säker, decentraliserad kommunikation."</string>
|
||||
<string name="screen_login_title">"Välkommen tillbaka!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"Logga in på %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Logga in manuellt"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"Logga in med QR-kod"</string>
|
||||
<string name="screen_onboarding_sign_up">"Skapa konto"</string>
|
||||
<string name="screen_onboarding_welcome_message">"Välkommen till den snabbaste %1$s någonsin. Superladdad för snabbhet och enkelhet."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"Välkommen till %1$s. Superladdad, för snabbhet och enkelhet."</string>
|
||||
<string name="screen_onboarding_welcome_title">"Var i ditt rätta element"</string>
|
||||
<string name="screen_qr_code_login_connecting_subtitle">"Upprättar en säker anslutning"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_description">"En säker anslutning kunde inte göras till den nya enheten. Dina befintliga enheter är fortfarande säkra och du behöver inte oroa dig för dem."</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_list_header">"Nu då?"</string>
|
||||
|
|
|
|||
|
|
@ -29,6 +29,12 @@
|
|||
<string name="screen_login_subtitle">"Matrix, güvenli, merkezi olmayan iletişim için açık bir ağdır."</string>
|
||||
<string name="screen_login_title">"Tekrar hoş geldiniz!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"%1$s adresinde oturum aç"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Manuel olarak oturum aç"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"QR kodu ile giriş yap"</string>
|
||||
<string name="screen_onboarding_sign_up">"Hesap oluştur"</string>
|
||||
<string name="screen_onboarding_welcome_message">"Şimdiye kadarki en hızlı %1$s hoş geldiniz. Hız ve basitlik için güçlendirildi."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"%1$s\'e hoş geldiniz. Hız ve basitlik için süper şarjlı."</string>
|
||||
<string name="screen_onboarding_welcome_title">"Kendi elementinizde olun"</string>
|
||||
<string name="screen_qr_code_login_connecting_subtitle">"Güvenli bir bağlantı kuruluyor"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_description">"Yeni cihaza güvenli bir bağlantı kurulamadı. Mevcut cihazlarınız hala güvende ve onlar için endişelenmenize gerek yok."</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_list_header">"Şimdi ne olacak?"</string>
|
||||
|
|
|
|||
|
|
@ -30,6 +30,13 @@
|
|||
<string name="screen_login_subtitle">"Matrix — це відкрита мережа для безпечної, децентралізованої комунікації."</string>
|
||||
<string name="screen_login_title">"З поверненням!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"Увійти в %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Увійти вручну"</string>
|
||||
<string name="screen_onboarding_sign_in_to">"Увійти в %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"Увійти за допомогою QR-коду"</string>
|
||||
<string name="screen_onboarding_sign_up">"Створити обліковий запис"</string>
|
||||
<string name="screen_onboarding_welcome_message">"Ласкаво просимо до найшвидшого %1$s. Заряджений для швидкості та простоти."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"Ласкаво просимо до %1$s. Заряджений, для швидкості та простоти."</string>
|
||||
<string name="screen_onboarding_welcome_title">"Будьте у своєму element"</string>
|
||||
<string name="screen_qr_code_login_connecting_subtitle">"Встановлення безпечного з\'єднання"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_description">"Не вдалося встановити безпечне з\'єднання з новим пристроєм. Ваші наявні пристрої досі в безпеці, і вам не потрібно про них турбуватися."</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_list_header">"Що тепер?"</string>
|
||||
|
|
|
|||
|
|
@ -26,6 +26,12 @@
|
|||
<string name="screen_login_subtitle">"Matrix xavfsiz, markazlashmagan aloqa uchun ochiq tarmoqdir."</string>
|
||||
<string name="screen_login_title">"Qaytib kelganingizdan xursandmiz!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"Kirish%1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Qo\'lda tizimga kiring"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"QR kod bilan tizimga kiring"</string>
|
||||
<string name="screen_onboarding_sign_up">"Hisob yaratish"</string>
|
||||
<string name="screen_onboarding_welcome_message">"Eng tezkor %1$sga xush kelibsiz. Tezlik va oddylik uchun super zaryadlangan."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"%1$sga Xush kelibsiz. Tezlik va oddylik uchun o\'ta zaryadlangan."</string>
|
||||
<string name="screen_onboarding_welcome_title">"Elementingizda bo\'ling"</string>
|
||||
<string name="screen_server_confirmation_change_server">"Hisob provayderini o\'zgartiring"</string>
|
||||
<string name="screen_server_confirmation_message_login_element_dot_io">"Element xodimlari uchun shaxsiy server."</string>
|
||||
<string name="screen_server_confirmation_message_login_matrix_dot_org">"Matrix xavfsiz, markazlashmagan aloqa uchun ochiq tarmoqdir."</string>
|
||||
|
|
|
|||
|
|
@ -29,6 +29,12 @@
|
|||
<string name="screen_login_subtitle">"Matrix 是一個開放網路,為了安全且去中心化的通訊而生。"</string>
|
||||
<string name="screen_login_title">"歡迎回來!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"登入 %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"手動登入"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"使用 QR code 登入"</string>
|
||||
<string name="screen_onboarding_sign_up">"建立帳號"</string>
|
||||
<string name="screen_onboarding_welcome_message">"歡迎使用有史以來最快的 %1$s。速度超快,操作簡便。"</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"歡迎使用 %1$s。速度超快且簡單。"</string>
|
||||
<string name="screen_onboarding_welcome_title">"Be in your element"</string>
|
||||
<string name="screen_qr_code_login_connecting_subtitle">"建立安全連線"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_description">"無法與新裝置建立安全連線。您現有的裝置仍然安全,您不必擔心它們。"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_list_header">"現在怎麼辦?"</string>
|
||||
|
|
|
|||
|
|
@ -29,6 +29,12 @@
|
|||
<string name="screen_login_subtitle">"Matrix 是一个用于安全、去中心化通信的开放网络。"</string>
|
||||
<string name="screen_login_title">"欢迎回来!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"登录到 %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"手动登录"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"使用二维码登录"</string>
|
||||
<string name="screen_onboarding_sign_up">"创建账户"</string>
|
||||
<string name="screen_onboarding_welcome_message">"欢迎使用 %1$s,快而简约的消息应用。"</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"欢迎使用 %1$s,速度与简洁的极致。"</string>
|
||||
<string name="screen_onboarding_welcome_title">"融入您的 Element"</string>
|
||||
<string name="screen_qr_code_login_connecting_subtitle">"建立安全连接"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_description">"无法与新设备建立安全连接。您现有的设备仍然安全,无需担心。"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_list_header">"现在怎么办?"</string>
|
||||
|
|
|
|||
|
|
@ -34,6 +34,13 @@
|
|||
<string name="screen_login_subtitle">"Matrix is an open network for secure, decentralised communication."</string>
|
||||
<string name="screen_login_title">"Welcome back!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"Sign in to %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Sign in manually"</string>
|
||||
<string name="screen_onboarding_sign_in_to">"Sign in to %1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"Sign in with QR code"</string>
|
||||
<string name="screen_onboarding_sign_up">"Create account"</string>
|
||||
<string name="screen_onboarding_welcome_message">"Welcome to the fastest %1$s ever. Supercharged for speed and simplicity."</string>
|
||||
<string name="screen_onboarding_welcome_subtitle">"Welcome to %1$s. Supercharged, for speed and simplicity."</string>
|
||||
<string name="screen_onboarding_welcome_title">"Be in your element"</string>
|
||||
<string name="screen_qr_code_login_connecting_subtitle">"Establishing a secure connection"</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_description">"A secure connection could not be made to the new device. Your existing devices are still safe and you don\'t need to worry about them."</string>
|
||||
<string name="screen_qr_code_login_connection_note_secure_state_list_header">"What now?"</string>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,68 @@
|
|||
/*
|
||||
* Copyright 2023, 2024 New Vector Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
* Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
package io.element.android.features.login.impl.onboarding
|
||||
|
||||
import app.cash.molecule.RecompositionMode
|
||||
import app.cash.molecule.moleculeFlow
|
||||
import app.cash.turbine.test
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import io.element.android.appconfig.OnBoardingConfig
|
||||
import io.element.android.libraries.featureflag.api.FeatureFlags
|
||||
import io.element.android.libraries.featureflag.test.FakeFeatureFlagService
|
||||
import io.element.android.libraries.matrix.test.core.aBuildMeta
|
||||
import io.element.android.tests.testutils.WarmUpRule
|
||||
import io.element.android.tests.testutils.test
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
|
||||
class OnBoardingPresenterTest {
|
||||
@get:Rule
|
||||
val warmUpRule = WarmUpRule()
|
||||
|
||||
@Test
|
||||
fun `present - initial state`() = runTest {
|
||||
val buildMeta = aBuildMeta(
|
||||
applicationName = "A",
|
||||
productionApplicationName = "B",
|
||||
desktopApplicationName = "C",
|
||||
)
|
||||
val featureFlagService = FakeFeatureFlagService(
|
||||
initialState = mapOf(FeatureFlags.QrCodeLogin.key to true),
|
||||
buildMeta = buildMeta,
|
||||
)
|
||||
val presenter = OnBoardingPresenter(
|
||||
buildMeta = buildMeta,
|
||||
featureFlagService = featureFlagService,
|
||||
rageshakeFeatureAvailability = { true },
|
||||
)
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
}.test {
|
||||
val initialState = awaitItem()
|
||||
assertThat(initialState.canLoginWithQrCode).isFalse()
|
||||
assertThat(initialState.productionApplicationName).isEqualTo("B")
|
||||
assertThat(initialState.canCreateAccount).isEqualTo(OnBoardingConfig.CAN_CREATE_ACCOUNT)
|
||||
assertThat(initialState.canReportBug).isTrue()
|
||||
assertThat(awaitItem().canLoginWithQrCode).isTrue()
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `present - rageshake not available`() = runTest {
|
||||
val presenter = OnBoardingPresenter(
|
||||
buildMeta = aBuildMeta(),
|
||||
featureFlagService = FakeFeatureFlagService(),
|
||||
rageshakeFeatureAvailability = { false },
|
||||
)
|
||||
presenter.test {
|
||||
skipItems(1)
|
||||
assertThat(awaitItem().canReportBug).isFalse()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,120 @@
|
|||
/*
|
||||
* Copyright 2024 New Vector Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
* Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
package io.element.android.features.login.impl.onboarding
|
||||
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.compose.ui.test.junit4.AndroidComposeTestRule
|
||||
import androidx.compose.ui.test.junit4.createAndroidComposeRule
|
||||
import androidx.compose.ui.test.onNodeWithText
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import io.element.android.features.login.impl.R
|
||||
import io.element.android.libraries.ui.strings.CommonStrings
|
||||
import io.element.android.tests.testutils.EnsureNeverCalled
|
||||
import io.element.android.tests.testutils.clickOn
|
||||
import io.element.android.tests.testutils.ensureCalledOnce
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.junit.rules.TestRule
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class OnboardingViewTest {
|
||||
@get:Rule
|
||||
val rule = createAndroidComposeRule<ComponentActivity>()
|
||||
|
||||
@Test
|
||||
fun `when can create account - clicking on create account calls the expected callback`() {
|
||||
ensureCalledOnce { callback ->
|
||||
rule.setOnboardingView(
|
||||
state = anOnBoardingState(canCreateAccount = true),
|
||||
onCreateAccount = callback,
|
||||
)
|
||||
rule.clickOn(R.string.screen_onboarding_sign_up)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `when can login with QR code - clicking on sign in with QR code calls the expected callback`() {
|
||||
ensureCalledOnce { callback ->
|
||||
rule.setOnboardingView(
|
||||
state = anOnBoardingState(canLoginWithQrCode = true),
|
||||
onSignInWithQrCode = callback,
|
||||
)
|
||||
rule.clickOn(R.string.screen_onboarding_sign_in_with_qr_code)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `when can login with QR code - clicking on sign in manually calls the expected callback`() {
|
||||
ensureCalledOnce { callback ->
|
||||
rule.setOnboardingView(
|
||||
state = anOnBoardingState(canLoginWithQrCode = true),
|
||||
onSignIn = callback,
|
||||
)
|
||||
rule.clickOn(R.string.screen_onboarding_sign_in_manually)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `when cannot login with QR code or create account - clicking on continue calls the sign in callback`() {
|
||||
ensureCalledOnce { callback ->
|
||||
rule.setOnboardingView(
|
||||
state = anOnBoardingState(
|
||||
canLoginWithQrCode = false,
|
||||
canCreateAccount = false,
|
||||
),
|
||||
onSignIn = callback,
|
||||
)
|
||||
rule.clickOn(CommonStrings.action_continue)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `clicking on report a problem calls the sign in callback`() {
|
||||
ensureCalledOnce { callback ->
|
||||
rule.setOnboardingView(
|
||||
state = anOnBoardingState(
|
||||
canReportBug = true,
|
||||
),
|
||||
onReportProblem = callback,
|
||||
)
|
||||
val text = rule.activity.getString(CommonStrings.common_report_a_problem)
|
||||
rule.onNodeWithText(text).assertExists()
|
||||
rule.clickOn(CommonStrings.common_report_a_problem)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `cannot report a problem when the feature is disabled`() {
|
||||
rule.setOnboardingView(
|
||||
state = anOnBoardingState(
|
||||
canReportBug = false,
|
||||
),
|
||||
)
|
||||
val text = rule.activity.getString(CommonStrings.common_report_a_problem)
|
||||
rule.onNodeWithText(text).assertDoesNotExist()
|
||||
}
|
||||
|
||||
private fun <R : TestRule> AndroidComposeTestRule<R, ComponentActivity>.setOnboardingView(
|
||||
state: OnBoardingState,
|
||||
onSignInWithQrCode: () -> Unit = EnsureNeverCalled(),
|
||||
onSignIn: () -> Unit = EnsureNeverCalled(),
|
||||
onCreateAccount: () -> Unit = EnsureNeverCalled(),
|
||||
onReportProblem: () -> Unit = EnsureNeverCalled(),
|
||||
) {
|
||||
setContent {
|
||||
OnBoardingView(
|
||||
state = state,
|
||||
onSignInWithQrCode = onSignInWithQrCode,
|
||||
onSignIn = onSignIn,
|
||||
onCreateAccount = onCreateAccount,
|
||||
onReportProblem = onReportProblem,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue