Repo created
28
feature/settings/import/build.gradle.kts
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
plugins {
|
||||
id(ThunderbirdPlugins.Library.androidCompose)
|
||||
alias(libs.plugins.kotlin.parcelize)
|
||||
}
|
||||
|
||||
android {
|
||||
// Using "importing" because "import" is not allowed in Java package names (it's fine with Kotlin, though)
|
||||
namespace = "app.k9mail.feature.settings.importing"
|
||||
resourcePrefix = "settings_import_"
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(projects.legacy.core)
|
||||
implementation(projects.legacy.ui.base)
|
||||
implementation(projects.core.ui.compose.designsystem)
|
||||
implementation(projects.core.ui.legacy.designsystem)
|
||||
|
||||
implementation(projects.feature.migration.launcher.api)
|
||||
implementation(projects.feature.account.oauth)
|
||||
implementation(libs.appauth)
|
||||
|
||||
implementation(libs.androidx.activity.compose)
|
||||
implementation(libs.androidx.fragment.compose)
|
||||
implementation(libs.androidx.constraintlayout)
|
||||
implementation(libs.fastadapter)
|
||||
|
||||
testImplementation(projects.core.logging.testing)
|
||||
}
|
||||
19
feature/settings/import/sampledata/accounts.json
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"data": [
|
||||
{
|
||||
"name": "Personal",
|
||||
"email": "user@domain.example",
|
||||
"color": "#FF1976D2"
|
||||
},
|
||||
{
|
||||
"name": "Work",
|
||||
"email": "firstname.lastname@work.example",
|
||||
"color": "#FFE91E63"
|
||||
},
|
||||
{
|
||||
"name": "Club",
|
||||
"email": "name@sportsclub.example",
|
||||
"color": "#FFFFB300"
|
||||
}
|
||||
]
|
||||
}
|
||||
30
feature/settings/import/src/main/AndroidManifest.xml
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
>
|
||||
|
||||
<queries>
|
||||
<!-- Required to be able to access the SettingsProvider of another app -->
|
||||
<package android:name="com.fsck.k9"/>
|
||||
<package android:name="net.thunderbird.android"/>
|
||||
<package android:name="net.thunderbird.android.beta"/>
|
||||
<package android:name="net.thunderbird.android.daily"/>
|
||||
</queries>
|
||||
|
||||
<application>
|
||||
|
||||
<activity
|
||||
android:name="app.k9mail.feature.settings.import.ui.OAuthFlowActivity"
|
||||
android:label="@string/settings_import_oauth_sign_in"
|
||||
/>
|
||||
|
||||
<!-- We remove this activity entry to avoid all modules depending on this one having to define an override for
|
||||
the manifest placeholder 'appAuthRedirectScheme'. The entry is added back in :app:common -->
|
||||
<activity
|
||||
android:name="net.openid.appauth.RedirectUriReceiverActivity"
|
||||
tools:node="remove"
|
||||
/>
|
||||
|
||||
</application>
|
||||
</manifest>
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
package app.k9mail.feature.settings.import
|
||||
|
||||
interface SettingsImportExternalContract {
|
||||
/**
|
||||
* Activate account after server password(s) have been provided on settings import.
|
||||
*/
|
||||
interface AccountActivator {
|
||||
fun enableAccount(accountUuid: String, incomingServerPassword: String?, outgoingServerPassword: String?)
|
||||
|
||||
fun enableAccount(accountUuid: String)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
package app.k9mail.feature.settings.import
|
||||
|
||||
import app.k9mail.feature.settings.import.ui.AuthViewModel
|
||||
import app.k9mail.feature.settings.import.ui.ImportAppFetcher
|
||||
import app.k9mail.feature.settings.import.ui.PickAppViewModel
|
||||
import app.k9mail.feature.settings.import.ui.SettingsImportViewModel
|
||||
import org.koin.core.module.dsl.viewModel
|
||||
import org.koin.dsl.module
|
||||
|
||||
val featureSettingsImportModule = module {
|
||||
factory { ImportAppFetcher(context = get()) }
|
||||
|
||||
viewModel {
|
||||
SettingsImportViewModel(
|
||||
contentResolver = get(),
|
||||
settingsImporter = get(),
|
||||
accountActivator = get(),
|
||||
migrationManager = get(),
|
||||
importAppFetcher = get(),
|
||||
)
|
||||
}
|
||||
|
||||
viewModel {
|
||||
AuthViewModel(
|
||||
application = get(),
|
||||
accountManager = get(),
|
||||
getOAuthRequestIntent = get(),
|
||||
)
|
||||
}
|
||||
|
||||
viewModel { PickAppViewModel(importAppFetcher = get()) }
|
||||
}
|
||||
|
|
@ -0,0 +1,231 @@
|
|||
package app.k9mail.feature.settings.import.ui
|
||||
|
||||
import android.app.Activity
|
||||
import android.app.Application
|
||||
import android.content.ActivityNotFoundException
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.activity.result.ActivityResultRegistry
|
||||
import androidx.activity.result.contract.ActivityResultContract
|
||||
import androidx.lifecycle.AndroidViewModel
|
||||
import androidx.lifecycle.DefaultLifecycleObserver
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.LifecycleOwner
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import app.k9mail.feature.account.oauth.domain.AccountOAuthDomainContract.UseCase.GetOAuthRequestIntent
|
||||
import app.k9mail.feature.account.oauth.domain.entity.AuthorizationIntentResult
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
import kotlinx.coroutines.flow.update
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import net.openid.appauth.AuthState
|
||||
import net.openid.appauth.AuthorizationException
|
||||
import net.openid.appauth.AuthorizationResponse
|
||||
import net.openid.appauth.AuthorizationService
|
||||
import net.thunderbird.core.android.account.AccountManager
|
||||
import net.thunderbird.core.android.account.LegacyAccount
|
||||
import net.thunderbird.core.logging.legacy.Log
|
||||
|
||||
private const val KEY_AUTHORIZATION = "app.k9mail_auth"
|
||||
|
||||
@Suppress("TooManyFunctions")
|
||||
internal class AuthViewModel(
|
||||
application: Application,
|
||||
private val accountManager: AccountManager,
|
||||
private val getOAuthRequestIntent: GetOAuthRequestIntent,
|
||||
) : AndroidViewModel(application) {
|
||||
private var authService: AuthorizationService? = null
|
||||
private val authState = AuthState()
|
||||
|
||||
private var account: LegacyAccount? = null
|
||||
|
||||
private lateinit var resultObserver: AppAuthResultObserver
|
||||
|
||||
private val _uiState = MutableStateFlow<AuthFlowState>(AuthFlowState.Idle)
|
||||
val uiState: StateFlow<AuthFlowState> = _uiState.asStateFlow()
|
||||
|
||||
@Synchronized
|
||||
private fun getAuthService(): AuthorizationService {
|
||||
return authService ?: AuthorizationService(getApplication<Application>()).also { authService = it }
|
||||
}
|
||||
|
||||
fun init(activityResultRegistry: ActivityResultRegistry, lifecycle: Lifecycle, account: LegacyAccount) {
|
||||
this.account = account
|
||||
resultObserver = AppAuthResultObserver(activityResultRegistry)
|
||||
lifecycle.addObserver(resultObserver)
|
||||
}
|
||||
|
||||
fun authResultConsumed() {
|
||||
_uiState.update { AuthFlowState.Idle }
|
||||
}
|
||||
|
||||
fun isAuthorized(account: LegacyAccount): Boolean {
|
||||
val authState = getOrCreateAuthState(account)
|
||||
return authState.isAuthorized
|
||||
}
|
||||
|
||||
fun isUsingGoogle(account: LegacyAccount): Boolean {
|
||||
return GoogleOAuthHelper.isGoogle(account.incomingServerSettings.host!!)
|
||||
}
|
||||
|
||||
private fun getOrCreateAuthState(account: LegacyAccount): AuthState {
|
||||
return try {
|
||||
account.oAuthState?.let { AuthState.jsonDeserialize(it) } ?: AuthState()
|
||||
} catch (e: Exception) {
|
||||
Log.e(e, "Error deserializing AuthState")
|
||||
AuthState()
|
||||
}
|
||||
}
|
||||
|
||||
fun login() {
|
||||
val account = checkNotNull(account)
|
||||
|
||||
viewModelScope.launch {
|
||||
try {
|
||||
startLogin(account)
|
||||
} catch (e: ActivityNotFoundException) {
|
||||
_uiState.update { AuthFlowState.BrowserNotFound }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun startLogin(account: LegacyAccount) {
|
||||
val authRequestIntentResult = withContext(Dispatchers.IO) {
|
||||
getOAuthRequestIntent.execute(account.incomingServerSettings.host!!, account.email)
|
||||
}
|
||||
|
||||
when (authRequestIntentResult) {
|
||||
AuthorizationIntentResult.NotSupported -> {
|
||||
_uiState.update { AuthFlowState.NotSupported }
|
||||
}
|
||||
|
||||
is AuthorizationIntentResult.Success -> resultObserver.login(authRequestIntentResult.intent)
|
||||
}
|
||||
}
|
||||
|
||||
private fun onLoginResult(authorizationResult: AuthorizationResult?) {
|
||||
if (authorizationResult == null) {
|
||||
_uiState.update { AuthFlowState.Canceled }
|
||||
return
|
||||
}
|
||||
|
||||
authorizationResult.response?.let { response ->
|
||||
authState.update(authorizationResult.response, authorizationResult.exception)
|
||||
exchangeToken(response)
|
||||
}
|
||||
|
||||
authorizationResult.exception?.let { authorizationException ->
|
||||
_uiState.update {
|
||||
AuthFlowState.Failed(
|
||||
errorCode = authorizationException.error,
|
||||
errorMessage = authorizationException.errorDescription,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun exchangeToken(response: AuthorizationResponse) {
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
val authService = getAuthService()
|
||||
|
||||
val tokenRequest = response.createTokenExchangeRequest()
|
||||
authService.performTokenRequest(tokenRequest) { tokenResponse, authorizationException ->
|
||||
authState.update(tokenResponse, authorizationException)
|
||||
|
||||
val account = account!!
|
||||
account.oAuthState = authState.jsonSerializeString()
|
||||
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
accountManager.saveAccount(account)
|
||||
}
|
||||
|
||||
if (authorizationException != null) {
|
||||
_uiState.update {
|
||||
AuthFlowState.Failed(
|
||||
errorCode = authorizationException.error,
|
||||
errorMessage = authorizationException.errorDescription,
|
||||
)
|
||||
}
|
||||
} else {
|
||||
_uiState.update { AuthFlowState.Success }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
override fun onCleared() {
|
||||
authService?.dispose()
|
||||
authService = null
|
||||
}
|
||||
|
||||
inner class AppAuthResultObserver(private val registry: ActivityResultRegistry) : DefaultLifecycleObserver {
|
||||
private var authorizationLauncher: ActivityResultLauncher<Intent>? = null
|
||||
private var authRequestIntent: Intent? = null
|
||||
|
||||
override fun onCreate(owner: LifecycleOwner) {
|
||||
authorizationLauncher = registry.register(KEY_AUTHORIZATION, AuthorizationContract(), ::onLoginResult)
|
||||
authRequestIntent?.let { intent ->
|
||||
authRequestIntent = null
|
||||
login(intent)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroy(owner: LifecycleOwner) {
|
||||
authorizationLauncher = null
|
||||
}
|
||||
|
||||
fun login(authRequestIntent: Intent) {
|
||||
val launcher = authorizationLauncher
|
||||
if (launcher != null) {
|
||||
launcher.launch(authRequestIntent)
|
||||
} else {
|
||||
this.authRequestIntent = authRequestIntent
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class AuthorizationContract : ActivityResultContract<Intent, AuthorizationResult?>() {
|
||||
override fun createIntent(context: Context, input: Intent): Intent {
|
||||
return input
|
||||
}
|
||||
|
||||
override fun parseResult(resultCode: Int, intent: Intent?): AuthorizationResult? {
|
||||
return if (resultCode == Activity.RESULT_OK && intent != null) {
|
||||
AuthorizationResult(
|
||||
response = AuthorizationResponse.fromIntent(intent),
|
||||
exception = AuthorizationException.fromIntent(intent),
|
||||
)
|
||||
} else {
|
||||
null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private data class AuthorizationResult(
|
||||
val response: AuthorizationResponse?,
|
||||
val exception: AuthorizationException?,
|
||||
)
|
||||
|
||||
sealed interface AuthFlowState {
|
||||
object Idle : AuthFlowState
|
||||
|
||||
object Success : AuthFlowState
|
||||
|
||||
object NotSupported : AuthFlowState
|
||||
|
||||
object BrowserNotFound : AuthFlowState
|
||||
|
||||
object Canceled : AuthFlowState
|
||||
|
||||
data class Failed(val errorCode: String?, val errorMessage: String?) : AuthFlowState {
|
||||
override fun toString(): String {
|
||||
return listOfNotNull(errorCode, errorMessage).joinToString(separator = " - ")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
package app.k9mail.feature.settings.import.ui
|
||||
|
||||
@Deprecated("Could be removed when import uses the new oauth flow")
|
||||
internal object GoogleOAuthHelper {
|
||||
fun isGoogle(hostname: String): Boolean {
|
||||
return hostname.lowercase().endsWith(".gmail.com") ||
|
||||
hostname.lowercase().endsWith(".googlemail.com")
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,86 @@
|
|||
package app.k9mail.feature.settings.import.ui
|
||||
|
||||
import android.content.Context
|
||||
import android.content.pm.PackageManager
|
||||
import androidx.annotation.WorkerThread
|
||||
|
||||
internal class ImportAppFetcher(
|
||||
private val context: Context,
|
||||
) {
|
||||
private val packageManager by lazy { context.packageManager }
|
||||
|
||||
/**
|
||||
* Returns `true` if at least one app is installed from which we can import settings.
|
||||
*/
|
||||
@WorkerThread
|
||||
fun isAtLeastOneAppInstalled(): Boolean {
|
||||
return supportedApps.any { app -> packageManager.isAppInstalled(app.packageName) }
|
||||
}
|
||||
|
||||
@Suppress("SwallowedException")
|
||||
private fun PackageManager.isAppInstalled(packageName: String): Boolean {
|
||||
return try {
|
||||
getApplicationInfo(packageName, 0)
|
||||
true
|
||||
} catch (e: PackageManager.NameNotFoundException) {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get list of apps from which we can import settings.
|
||||
*/
|
||||
@WorkerThread
|
||||
fun getAppInfoList(): List<AppInfo> {
|
||||
return supportedApps
|
||||
.mapNotNull { app -> packageManager.loadAppInfo(app) }
|
||||
.toList()
|
||||
}
|
||||
|
||||
@Suppress("SwallowedException")
|
||||
private fun PackageManager.loadAppInfo(app: AppVersion): AppInfo? {
|
||||
return try {
|
||||
val packageInfo = getPackageInfo(app.packageName, 0)
|
||||
val isImportSupported = packageInfo.versionCode >= app.minVersionCode
|
||||
|
||||
val applicationInfo = getApplicationInfo(app.packageName, 0)
|
||||
val appName = packageManager.getApplicationLabel(applicationInfo).toString()
|
||||
|
||||
AppInfo(app.packageName, appName, isImportSupported)
|
||||
} catch (e: PackageManager.NameNotFoundException) {
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of application IDs of supported apps excluding our own app.
|
||||
*/
|
||||
private val supportedApps: Sequence<AppVersion>
|
||||
get() {
|
||||
val myPackageName = context.packageName
|
||||
return SUPPORTED_APPS
|
||||
.asSequence()
|
||||
.filterNot { app -> app.packageName == myPackageName }
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val SUPPORTED_APPS = listOf(
|
||||
// K-9 Mail
|
||||
AppVersion("com.fsck.k9", 39005),
|
||||
// Thunderbird for Android (release)
|
||||
AppVersion("net.thunderbird.android", 1),
|
||||
// Thunderbird for Android (beta)
|
||||
AppVersion("net.thunderbird.android.beta", 4),
|
||||
// Thunderbird for Android (daily)
|
||||
AppVersion("net.thunderbird.android.daily", 1),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private data class AppVersion(val packageName: String, val minVersionCode: Int)
|
||||
|
||||
internal data class AppInfo(
|
||||
val packageName: String,
|
||||
val appName: String,
|
||||
val isImportSupported: Boolean,
|
||||
)
|
||||
|
|
@ -0,0 +1,133 @@
|
|||
package app.k9mail.feature.settings.import.ui
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.widget.Button
|
||||
import android.widget.ProgressBar
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.LifecycleOwner
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
import app.k9mail.feature.settings.importing.R
|
||||
import com.fsck.k9.ui.base.K9Activity
|
||||
import com.google.android.material.textview.MaterialTextView
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.FlowCollector
|
||||
import kotlinx.coroutines.launch
|
||||
import net.thunderbird.core.android.account.AccountManager
|
||||
import org.koin.android.ext.android.inject
|
||||
import org.koin.androidx.viewmodel.ext.android.viewModel
|
||||
|
||||
@Deprecated("Remove once import used the new oauth flow")
|
||||
class OAuthFlowActivity : K9Activity() {
|
||||
private val authViewModel: AuthViewModel by viewModel()
|
||||
private val accountManager: AccountManager by inject()
|
||||
|
||||
private lateinit var errorText: MaterialTextView
|
||||
private lateinit var signInButton: Button
|
||||
private lateinit var signInProgress: ProgressBar
|
||||
|
||||
public override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setLayout(R.layout.account_setup_oauth)
|
||||
setTitle(R.string.settings_import_oauth_sign_in)
|
||||
|
||||
val accountUUid = intent.getStringExtra(EXTRA_ACCOUNT_UUID) ?: error("Missing account UUID")
|
||||
val account = accountManager.getAccount(accountUUid) ?: error("Account not found")
|
||||
|
||||
errorText = findViewById(R.id.error_text)
|
||||
signInProgress = findViewById(R.id.sign_in_progress)
|
||||
signInButton = if (authViewModel.isUsingGoogle(account)) {
|
||||
findViewById(R.id.google_sign_in_button)
|
||||
} else {
|
||||
findViewById(R.id.oauth_sign_in_button)
|
||||
}
|
||||
|
||||
signInButton.isVisible = true
|
||||
signInButton.setOnClickListener { startOAuthFlow() }
|
||||
|
||||
savedInstanceState?.let {
|
||||
val signInRunning = it.getBoolean(STATE_PROGRESS)
|
||||
signInButton.isVisible = !signInRunning
|
||||
signInProgress.isVisible = signInRunning
|
||||
}
|
||||
|
||||
authViewModel.init(activityResultRegistry, lifecycle, account)
|
||||
|
||||
authViewModel.uiState.observe(this) { state ->
|
||||
handleUiUpdates(state)
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleUiUpdates(state: AuthFlowState) {
|
||||
when (state) {
|
||||
AuthFlowState.Idle -> {
|
||||
return
|
||||
}
|
||||
|
||||
AuthFlowState.Success -> {
|
||||
setResult(RESULT_OK)
|
||||
finish()
|
||||
}
|
||||
|
||||
AuthFlowState.Canceled -> {
|
||||
displayErrorText(R.string.settings_import_oauth_error_oauth_flow_canceled)
|
||||
}
|
||||
|
||||
is AuthFlowState.Failed -> {
|
||||
displayErrorText(R.string.settings_import_oauth_error_oauth_flow_failed, state)
|
||||
}
|
||||
|
||||
AuthFlowState.NotSupported -> {
|
||||
displayErrorText(R.string.settings_import_oauth_error_oauth_not_supported)
|
||||
}
|
||||
|
||||
AuthFlowState.BrowserNotFound -> {
|
||||
displayErrorText(R.string.settings_import_oauth_error_browser_not_found)
|
||||
}
|
||||
}
|
||||
|
||||
authViewModel.authResultConsumed()
|
||||
}
|
||||
|
||||
private fun displayErrorText(errorTextResId: Int, vararg args: Any?) {
|
||||
signInProgress.isVisible = false
|
||||
signInButton.isVisible = true
|
||||
errorText.text = getString(errorTextResId, *args)
|
||||
}
|
||||
|
||||
private fun startOAuthFlow() {
|
||||
signInButton.isVisible = false
|
||||
signInProgress.isVisible = true
|
||||
errorText.text = ""
|
||||
|
||||
authViewModel.login()
|
||||
}
|
||||
|
||||
override fun onSaveInstanceState(outState: Bundle) {
|
||||
super.onSaveInstanceState(outState)
|
||||
outState.putBoolean(STATE_PROGRESS, signInProgress.isVisible)
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val EXTRA_ACCOUNT_UUID = "accountUuid"
|
||||
|
||||
private const val STATE_PROGRESS = "signInProgress"
|
||||
|
||||
fun buildLaunchIntent(context: Context, accountUuid: String): Intent {
|
||||
return Intent(context, OAuthFlowActivity::class.java).apply {
|
||||
putExtra(EXTRA_ACCOUNT_UUID, accountUuid)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun <T> Flow<T>.observe(lifecycleOwner: LifecycleOwner, collector: FlowCollector<T>) {
|
||||
lifecycleOwner.lifecycleScope.launch {
|
||||
lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
|
||||
collect(collector)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,151 @@
|
|||
package app.k9mail.feature.settings.import.ui
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.app.Dialog
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import androidx.constraintlayout.widget.Group
|
||||
import androidx.core.os.bundleOf
|
||||
import androidx.core.view.isGone
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import androidx.fragment.app.Fragment
|
||||
import app.k9mail.feature.settings.importing.R
|
||||
import com.google.android.material.checkbox.MaterialCheckBox
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.google.android.material.textfield.TextInputEditText
|
||||
import com.google.android.material.textview.MaterialTextView
|
||||
import com.fsck.k9.ui.base.R as BaseR
|
||||
|
||||
class PasswordPromptDialogFragment : DialogFragment() {
|
||||
private lateinit var accountUuid: String
|
||||
private var inputOutgoingServerPassword: Boolean = false
|
||||
private var inputIncomingServerPassword: Boolean = false
|
||||
|
||||
private lateinit var dialogView: View
|
||||
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
val arguments = this.arguments ?: error("Fragment arguments missing")
|
||||
|
||||
accountUuid = arguments.getString(ARG_ACCOUNT_UUID) ?: error("Missing account UUID")
|
||||
val accountName = arguments.getString(ARG_ACCOUNT_NAME) ?: error("Missing account name")
|
||||
val incomingServerName = arguments.getString(ARG_INCOMING_SERVER_NAME)
|
||||
val outgoingServerName = arguments.getString(ARG_OUTGOING_SERVER_NAME)
|
||||
|
||||
inputIncomingServerPassword = arguments.getBoolean(ARG_INPUT_INCOMING_SERVER_PASSWORD)
|
||||
inputOutgoingServerPassword = arguments.getBoolean(ARG_INPUT_OUTGOING_SERVER_PASSWORD)
|
||||
if (!inputIncomingServerPassword && !inputOutgoingServerPassword) {
|
||||
error("Not prompting for any password")
|
||||
}
|
||||
|
||||
dialogView = createView(
|
||||
accountName,
|
||||
inputIncomingServerPassword,
|
||||
incomingServerName,
|
||||
inputOutgoingServerPassword,
|
||||
outgoingServerName,
|
||||
)
|
||||
|
||||
return MaterialAlertDialogBuilder(requireContext())
|
||||
.setView(dialogView)
|
||||
.setPositiveButton(BaseR.string.okay_action) { _, _ -> deliverPasswordPromptResult() }
|
||||
.setNegativeButton(BaseR.string.cancel_action, null)
|
||||
.create()
|
||||
}
|
||||
|
||||
@SuppressLint("InflateParams")
|
||||
private fun createView(
|
||||
accountName: String,
|
||||
inputIncomingServerPassword: Boolean,
|
||||
incomingServerName: String?,
|
||||
inputOutgoingServerPassword: Boolean,
|
||||
outgoingServerName: String?,
|
||||
): View {
|
||||
val layoutInflater = LayoutInflater.from(requireContext())
|
||||
val view = layoutInflater.inflate(R.layout.password_prompt_dialog, null)
|
||||
|
||||
val passwordPromptIntro: MaterialTextView = view.findViewById(R.id.passwordPromptIntro)
|
||||
val incomingServerNameView: MaterialTextView = view.findViewById(R.id.incomingServerName)
|
||||
val outgoingServerNameView: MaterialTextView = view.findViewById(R.id.outgoingServerName)
|
||||
val useSamePasswordCheckbox: MaterialCheckBox = view.findViewById(R.id.useSamePasswordCheckbox)
|
||||
val incomingServerGroup: Group = view.findViewById(R.id.incomingServerGroup)
|
||||
val outgoingServerGroup: Group = view.findViewById(R.id.outgoingServerGroup)
|
||||
|
||||
val quantity = if (inputIncomingServerPassword && inputOutgoingServerPassword) 2 else 1
|
||||
passwordPromptIntro.text = resources.getQuantityString(
|
||||
R.plurals.settings_import_password_prompt,
|
||||
quantity,
|
||||
accountName,
|
||||
)
|
||||
incomingServerNameView.text = getString(R.string.settings_import_server_name_format, incomingServerName)
|
||||
outgoingServerNameView.text = getString(R.string.settings_import_server_name_format, outgoingServerName)
|
||||
|
||||
incomingServerGroup.isGone = !inputIncomingServerPassword
|
||||
outgoingServerGroup.isGone = !inputOutgoingServerPassword
|
||||
|
||||
if (inputIncomingServerPassword && inputOutgoingServerPassword) {
|
||||
useSamePasswordCheckbox.isChecked = true
|
||||
outgoingServerGroup.isGone = true
|
||||
|
||||
useSamePasswordCheckbox.setOnCheckedChangeListener { _, isChecked ->
|
||||
outgoingServerGroup.isGone = isChecked
|
||||
}
|
||||
} else {
|
||||
useSamePasswordCheckbox.isGone = true
|
||||
}
|
||||
|
||||
return view
|
||||
}
|
||||
|
||||
private fun deliverPasswordPromptResult() {
|
||||
val incomingServerPasswordView: TextInputEditText = dialogView.findViewById(R.id.incomingServerPassword)
|
||||
val outgoingServerPasswordView: TextInputEditText = dialogView.findViewById(R.id.outgoingServerPassword)
|
||||
val useSamePasswordCheckbox: MaterialCheckBox = dialogView.findViewById(R.id.useSamePasswordCheckbox)
|
||||
|
||||
val incomingServerPassword = when {
|
||||
!inputIncomingServerPassword -> null
|
||||
else -> incomingServerPasswordView.text.toString()
|
||||
}
|
||||
val outgoingServerPassword = when {
|
||||
!inputOutgoingServerPassword -> null
|
||||
useSamePasswordCheckbox.isChecked -> incomingServerPassword
|
||||
else -> outgoingServerPasswordView.text.toString()
|
||||
}
|
||||
|
||||
val resultIntent = PasswordPromptResult(accountUuid, incomingServerPassword, outgoingServerPassword).asIntent()
|
||||
|
||||
targetFragment!!.onActivityResult(targetRequestCode, Activity.RESULT_OK, resultIntent)
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val ARG_ACCOUNT_UUID = "accountUuid"
|
||||
private const val ARG_ACCOUNT_NAME = "accountName"
|
||||
private const val ARG_INPUT_INCOMING_SERVER_PASSWORD = "inputIncomingServerPassword"
|
||||
private const val ARG_INCOMING_SERVER_NAME = "incomingServerName"
|
||||
private const val ARG_INPUT_OUTGOING_SERVER_PASSWORD = "inputOutgoingServerPassword"
|
||||
private const val ARG_OUTGOING_SERVER_NAME = "outgoingServerName"
|
||||
|
||||
@Suppress("LongParameterList")
|
||||
fun create(
|
||||
accountUuid: String,
|
||||
accountName: String,
|
||||
inputIncomingServerPassword: Boolean,
|
||||
incomingServerName: String?,
|
||||
inputOutgoingServerPassword: Boolean,
|
||||
outgoingServerName: String?,
|
||||
targetFragment: Fragment,
|
||||
requestCode: Int,
|
||||
) = PasswordPromptDialogFragment().apply {
|
||||
arguments = bundleOf(
|
||||
ARG_ACCOUNT_UUID to accountUuid,
|
||||
ARG_ACCOUNT_NAME to accountName,
|
||||
ARG_INPUT_INCOMING_SERVER_PASSWORD to inputIncomingServerPassword,
|
||||
ARG_INCOMING_SERVER_NAME to incomingServerName,
|
||||
ARG_INPUT_OUTGOING_SERVER_PASSWORD to inputOutgoingServerPassword,
|
||||
ARG_OUTGOING_SERVER_NAME to outgoingServerName,
|
||||
)
|
||||
setTargetFragment(targetFragment, requestCode)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
package app.k9mail.feature.settings.import.ui
|
||||
|
||||
import android.content.Intent
|
||||
|
||||
internal data class PasswordPromptResult(
|
||||
val accountUuid: String,
|
||||
val incomingServerPassword: String?,
|
||||
val outgoingServerPassword: String?,
|
||||
) {
|
||||
fun asIntent() = Intent().apply {
|
||||
putExtra(EXTRA_ACCOUNT_UUID, accountUuid)
|
||||
putExtra(EXTRA_INCOMING_SERVER_PASSWORD, incomingServerPassword)
|
||||
putExtra(EXTRA_OUTGOING_SERVER_PASSWORD, outgoingServerPassword)
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val EXTRA_ACCOUNT_UUID = "accountUuid"
|
||||
private const val EXTRA_INCOMING_SERVER_PASSWORD = "incomingServerPassword"
|
||||
private const val EXTRA_OUTGOING_SERVER_PASSWORD = "outgoingServerPassword"
|
||||
|
||||
fun fromIntent(intent: Intent): PasswordPromptResult {
|
||||
val accountUuid = intent.getStringExtra(EXTRA_ACCOUNT_UUID) ?: error("Missing account UUID")
|
||||
val incomingServerPassword = intent.getStringExtra(EXTRA_INCOMING_SERVER_PASSWORD)
|
||||
val outgoingServerPassword = intent.getStringExtra(EXTRA_OUTGOING_SERVER_PASSWORD)
|
||||
|
||||
return PasswordPromptResult(accountUuid, incomingServerPassword, outgoingServerPassword)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
package app.k9mail.feature.settings.import.ui
|
||||
|
||||
import android.content.Context
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ArrayAdapter
|
||||
import android.widget.TextView
|
||||
import androidx.core.view.isVisible
|
||||
import app.k9mail.feature.settings.importing.R
|
||||
|
||||
internal class PickAppAdapter(context: Context) : ArrayAdapter<AppInfo>(context, 0) {
|
||||
private val inflater = LayoutInflater.from(context)
|
||||
|
||||
private fun getItemOrThrow(position: Int): AppInfo {
|
||||
return getItem(position) ?: error("Item at position $position not found")
|
||||
}
|
||||
|
||||
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
|
||||
val view = convertView ?: inflater.inflate(R.layout.settings_import_pick_app_list_item, parent, false)
|
||||
|
||||
val appNameTextView = view.findViewById<TextView>(R.id.settings_import_app_name)
|
||||
val appNoteTextView = view.findViewById<View>(R.id.settings_import_app_note)
|
||||
|
||||
val item = getItemOrThrow(position)
|
||||
appNameTextView.text = item.appName
|
||||
appNoteTextView.isVisible = !item.isImportSupported
|
||||
|
||||
view.isEnabled = item.isImportSupported
|
||||
|
||||
return view
|
||||
}
|
||||
|
||||
override fun areAllItemsEnabled(): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun isEnabled(position: Int): Boolean {
|
||||
return getItemOrThrow(position).isImportSupported
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
package app.k9mail.feature.settings.import.ui
|
||||
|
||||
import android.app.Dialog
|
||||
import android.content.DialogInterface
|
||||
import android.content.DialogInterface.OnClickListener
|
||||
import android.os.Bundle
|
||||
import androidx.core.os.bundleOf
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import androidx.fragment.app.setFragmentResult
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.LifecycleOwner
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
import app.k9mail.feature.settings.importing.R
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.FlowCollector
|
||||
import kotlinx.coroutines.launch
|
||||
import org.koin.androidx.viewmodel.ext.android.viewModel
|
||||
import com.fsck.k9.ui.base.R as BaseR
|
||||
|
||||
/**
|
||||
* A dialog that allows the user to pick an app from which to import settings/accounts.
|
||||
*/
|
||||
internal class PickAppDialogFragment : DialogFragment() {
|
||||
private val viewModel: PickAppViewModel by viewModel()
|
||||
|
||||
private var selectedPackageName: String? = null
|
||||
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
val adapter = PickAppAdapter(requireContext())
|
||||
|
||||
viewModel.appInfoFlow.observe(this) { appInfoList ->
|
||||
adapter.clear()
|
||||
adapter.addAll(appInfoList)
|
||||
adapter.notifyDataSetChanged()
|
||||
}
|
||||
|
||||
val clickListener = OnClickListener { _, index ->
|
||||
val packageName = adapter.getItem(index)?.packageName ?: return@OnClickListener
|
||||
selectedPackageName = packageName
|
||||
}
|
||||
|
||||
return MaterialAlertDialogBuilder(requireContext())
|
||||
.setTitle(R.string.settings_import_pick_app_dialog_title)
|
||||
.setAdapter(adapter, clickListener)
|
||||
.setNegativeButton(BaseR.string.cancel_action, null)
|
||||
.create()
|
||||
}
|
||||
|
||||
override fun onDismiss(dialog: DialogInterface) {
|
||||
setFragmentResult(FRAGMENT_RESULT_KEY, bundleOf(FRAGMENT_RESULT_APP to selectedPackageName))
|
||||
super.onDismiss(dialog)
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val FRAGMENT_RESULT_KEY = "pickApp"
|
||||
const val FRAGMENT_RESULT_APP = "packageName"
|
||||
}
|
||||
}
|
||||
|
||||
private fun <T> Flow<T>.observe(lifecycleOwner: LifecycleOwner, collector: FlowCollector<T>) {
|
||||
lifecycleOwner.lifecycleScope.launch {
|
||||
lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
|
||||
collect(collector)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
package app.k9mail.feature.settings.import.ui
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
internal class PickAppViewModel(
|
||||
private val importAppFetcher: ImportAppFetcher,
|
||||
private val backgroundDispatcher: CoroutineDispatcher = Dispatchers.IO,
|
||||
) : ViewModel() {
|
||||
private val _appInfoFlow = MutableStateFlow<List<AppInfo>>(emptyList())
|
||||
val appInfoFlow: StateFlow<List<AppInfo>> = _appInfoFlow
|
||||
|
||||
init {
|
||||
fetchImportApps()
|
||||
}
|
||||
|
||||
private fun fetchImportApps() {
|
||||
viewModelScope.launch(backgroundDispatcher) {
|
||||
val appInfoList = importAppFetcher.getAppInfoList()
|
||||
_appInfoFlow.emit(appInfoList)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
package app.k9mail.feature.settings.import.ui
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.core.os.bundleOf
|
||||
|
||||
enum class SettingsImportAction(private val bundleValue: String) {
|
||||
Overview("overview"),
|
||||
ScanQrCode("scan_qr_code"),
|
||||
;
|
||||
|
||||
fun toBundle(): Bundle {
|
||||
return bundleOf(
|
||||
BUNDLE_KEY_ACTION to bundleValue,
|
||||
)
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val BUNDLE_KEY_ACTION = "action"
|
||||
|
||||
fun fromBundle(bundle: Bundle): SettingsImportAction {
|
||||
val actionString = bundle.getString(BUNDLE_KEY_ACTION)
|
||||
return entries.find { it.bundleValue == actionString } ?: Overview
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,317 @@
|
|||
package app.k9mail.feature.settings.import.ui
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.activity.result.ActivityResultCallback
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.core.os.bundleOf
|
||||
import androidx.core.view.isGone
|
||||
import androidx.core.view.isInvisible
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.setFragmentResult
|
||||
import androidx.fragment.app.setFragmentResultListener
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import app.k9mail.feature.migration.launcher.api.MigrationManager
|
||||
import app.k9mail.feature.settings.importing.R
|
||||
import com.fsck.k9.ui.base.livedata.observeNotNull
|
||||
import com.google.android.material.button.MaterialButton
|
||||
import com.google.android.material.textview.MaterialTextView
|
||||
import com.mikepenz.fastadapter.FastAdapter
|
||||
import com.mikepenz.fastadapter.adapters.ItemAdapter
|
||||
import org.koin.android.ext.android.inject
|
||||
import org.koin.androidx.viewmodel.ext.android.viewModel
|
||||
import com.fsck.k9.ui.base.R as BaseR
|
||||
|
||||
class SettingsImportFragment : Fragment() {
|
||||
private val viewModel: SettingsImportViewModel by viewModel()
|
||||
private val migrationManager: MigrationManager by inject()
|
||||
|
||||
private lateinit var settingsImportAdapter: FastAdapter<ImportListItem<*>>
|
||||
private lateinit var itemAdapter: ItemAdapter<ImportListItem<*>>
|
||||
|
||||
private val pickDocumentCallback = ActivityResultCallback<Uri?> { contentUri ->
|
||||
if (contentUri != null) {
|
||||
viewModel.onDocumentPicked(contentUri)
|
||||
} else {
|
||||
viewModel.onDocumentPickCanceled()
|
||||
}
|
||||
}
|
||||
|
||||
private val pickDocumentLauncher = registerForActivityResult(
|
||||
ActivityResultContracts.GetContent(),
|
||||
pickDocumentCallback,
|
||||
)
|
||||
private val qrCodeScannerLauncher = registerForActivityResult(
|
||||
migrationManager.getQrCodeActivityResultContract(),
|
||||
pickDocumentCallback,
|
||||
)
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
viewModel.initialize()
|
||||
|
||||
setFragmentResultListener(PickAppDialogFragment.FRAGMENT_RESULT_KEY) { _, result: Bundle ->
|
||||
val packageName = result.getString(PickAppDialogFragment.FRAGMENT_RESULT_APP)
|
||||
if (packageName != null) {
|
||||
viewModel.onAppPicked(packageName)
|
||||
} else {
|
||||
viewModel.onAppPickCanceled()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||
return inflater.inflate(R.layout.fragment_settings_import, container, false)
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
if (savedInstanceState != null) {
|
||||
viewModel.initializeFromSavedState(savedInstanceState)
|
||||
}
|
||||
|
||||
val viewHolder = ViewHolder(view)
|
||||
|
||||
initializeSettingsImportList(viewHolder.settingsImportList)
|
||||
viewHolder.pickDocumentButton.setOnClickListener { viewModel.onPickDocumentButtonClicked() }
|
||||
viewHolder.scanQrCodeButton.setOnClickListener { viewModel.onScanQrCodeButtonClicked() }
|
||||
viewHolder.pickAppButton.setOnClickListener { viewModel.onPickAppButtonClicked() }
|
||||
viewHolder.importButton.setOnClickListener { viewModel.onImportButtonClicked() }
|
||||
viewHolder.closeButton.setOnClickListener { viewModel.onCloseButtonClicked() }
|
||||
|
||||
viewModel.getUiModel().observeNotNull(this) { viewHolder.updateUi(it) }
|
||||
viewModel.getActionEvents().observeNotNull(this) { handleActionEvents(it) }
|
||||
|
||||
arguments?.let { arguments ->
|
||||
val action = SettingsImportAction.fromBundle(arguments)
|
||||
viewModel.setAction(action)
|
||||
}
|
||||
}
|
||||
|
||||
private fun initializeSettingsImportList(recyclerView: RecyclerView) {
|
||||
itemAdapter = ItemAdapter()
|
||||
settingsImportAdapter = FastAdapter.with(itemAdapter).apply {
|
||||
setHasStableIds(true)
|
||||
onClickListener = { _, _, _, position ->
|
||||
viewModel.onSettingsListItemClicked(position)
|
||||
true
|
||||
}
|
||||
addEventHook(
|
||||
ImportListItemClickEvent { position ->
|
||||
viewModel.onSettingsListItemClicked(position)
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
recyclerView.adapter = settingsImportAdapter
|
||||
}
|
||||
|
||||
private fun ViewHolder.updateUi(model: SettingsImportUiModel) {
|
||||
when (model.importButton) {
|
||||
ButtonState.DISABLED -> {
|
||||
importButton.isVisible = true
|
||||
importButton.isEnabled = false
|
||||
}
|
||||
|
||||
ButtonState.ENABLED -> {
|
||||
importButton.isVisible = true
|
||||
importButton.isEnabled = true
|
||||
}
|
||||
|
||||
ButtonState.INVISIBLE -> importButton.isInvisible = true
|
||||
ButtonState.GONE -> importButton.isGone = true
|
||||
}
|
||||
|
||||
closeButton.isGone = model.closeButton == ButtonState.GONE
|
||||
when (model.closeButtonLabel) {
|
||||
CloseButtonLabel.OK -> closeButton.setText(BaseR.string.okay_action)
|
||||
CloseButtonLabel.LATER -> closeButton.setText(R.string.settings_import_later_button)
|
||||
}
|
||||
|
||||
settingsImportList.isVisible = model.isSettingsListVisible
|
||||
pickDocumentButton.isInvisible = !model.isPickDocumentButtonVisible
|
||||
pickDocumentButton.isEnabled = model.isPickDocumentButtonEnabled
|
||||
scanQrCodeButton.isInvisible = !model.isScanQrCodeButtonVisible
|
||||
scanQrCodeButton.isEnabled = model.isScanQrCodeButtonEnabled
|
||||
pickAppButton.isInvisible = !model.isPickAppButtonVisible
|
||||
pickAppButton.isEnabled = model.isPickAppButtonEnabled
|
||||
loadingProgressBar.isVisible = model.isLoadingProgressVisible
|
||||
importProgressBar.isVisible = model.isImportProgressVisible
|
||||
|
||||
statusText.isVisible = model.statusText != StatusText.HIDDEN
|
||||
when (model.statusText) {
|
||||
StatusText.IMPORTING_PROGRESS -> {
|
||||
statusText.text = getString(R.string.settings_importing)
|
||||
}
|
||||
|
||||
StatusText.IMPORT_SUCCESS -> {
|
||||
statusText.text = getString(R.string.settings_import_success_generic)
|
||||
}
|
||||
|
||||
StatusText.IMPORT_SUCCESS_PASSWORD_REQUIRED -> {
|
||||
statusText.text = getString(R.string.settings_import_password_required)
|
||||
}
|
||||
|
||||
StatusText.IMPORT_SUCCESS_AUTHORIZATION_REQUIRED -> {
|
||||
statusText.text = getString(R.string.settings_import_authorization_required)
|
||||
}
|
||||
|
||||
StatusText.IMPORT_SUCCESS_PASSWORD_AND_AUTHORIZATION_REQUIRED -> {
|
||||
statusText.text = getString(R.string.settings_import_authorization_and_password_required)
|
||||
}
|
||||
|
||||
StatusText.IMPORT_READ_FAILURE -> {
|
||||
statusText.text = getString(R.string.settings_import_read_failure)
|
||||
}
|
||||
|
||||
StatusText.IMPORT_PARTIAL_FAILURE -> {
|
||||
statusText.text = getString(R.string.settings_import_partial_failure)
|
||||
}
|
||||
|
||||
StatusText.IMPORT_FAILURE -> {
|
||||
statusText.text = getString(R.string.settings_import_failure)
|
||||
}
|
||||
|
||||
StatusText.HIDDEN -> statusText.text = null
|
||||
}
|
||||
|
||||
setSettingsList(model.settingsList, model.isSettingsListEnabled)
|
||||
}
|
||||
|
||||
// TODO: Update list instead of replacing it completely
|
||||
private fun ViewHolder.setSettingsList(items: List<SettingsListItem>, enable: Boolean) {
|
||||
val importListItems = items.map { item ->
|
||||
val checkBoxItem = when (item) {
|
||||
is SettingsListItem.GeneralSettings -> GeneralSettingsItem(item.importStatus)
|
||||
is SettingsListItem.Account -> AccountItem(item)
|
||||
}
|
||||
|
||||
checkBoxItem.apply {
|
||||
isSelected = item.selected
|
||||
isEnabled = item.enabled && enable
|
||||
}
|
||||
}
|
||||
|
||||
itemAdapter.set(importListItems)
|
||||
|
||||
settingsImportList.isEnabled = enable
|
||||
}
|
||||
|
||||
private fun handleActionEvents(action: Action) {
|
||||
when (action) {
|
||||
is Action.Close -> closeImportScreen(action)
|
||||
is Action.PickDocument -> pickDocument()
|
||||
is Action.ScanQrCode -> scanQrCode()
|
||||
is Action.PickApp -> pickApp()
|
||||
is Action.PasswordPrompt -> showPasswordPrompt(action)
|
||||
is Action.StartAuthorization -> startAuthorization(action)
|
||||
}
|
||||
}
|
||||
|
||||
@Suppress("SwallowedException")
|
||||
private fun closeImportScreen(action: Action.Close) {
|
||||
setFragmentResult(action.importSuccess)
|
||||
|
||||
try {
|
||||
findNavController().popBackStack()
|
||||
} catch (e: IllegalStateException) {
|
||||
// Fragment does not have NavController
|
||||
}
|
||||
}
|
||||
|
||||
private fun pickDocument() {
|
||||
pickDocumentLauncher.launch("*/*")
|
||||
}
|
||||
|
||||
private fun scanQrCode() {
|
||||
qrCodeScannerLauncher.launch(Unit)
|
||||
}
|
||||
|
||||
private fun pickApp() {
|
||||
PickAppDialogFragment().show(parentFragmentManager, "pick_app")
|
||||
}
|
||||
|
||||
private fun startAuthorization(action: Action.StartAuthorization) {
|
||||
val intent = OAuthFlowActivity.buildLaunchIntent(
|
||||
context = requireContext(),
|
||||
accountUuid = action.accountUuid,
|
||||
)
|
||||
|
||||
startActivityForResult(intent, REQUEST_AUTHORIZATION)
|
||||
}
|
||||
|
||||
private fun showPasswordPrompt(action: Action.PasswordPrompt) {
|
||||
val dialogFragment = PasswordPromptDialogFragment.create(
|
||||
action.accountUuid,
|
||||
action.accountName,
|
||||
action.inputIncomingServerPassword,
|
||||
action.incomingServerName,
|
||||
action.inputOutgoingServerPassword,
|
||||
action.outgoingServerName,
|
||||
targetFragment = this,
|
||||
requestCode = REQUEST_PASSWORD_PROMPT,
|
||||
)
|
||||
dialogFragment.show(requireFragmentManager(), null)
|
||||
}
|
||||
|
||||
override fun onSaveInstanceState(outState: Bundle) {
|
||||
super.onSaveInstanceState(outState)
|
||||
viewModel.saveInstanceState(outState)
|
||||
}
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
when (requestCode) {
|
||||
REQUEST_PASSWORD_PROMPT -> handlePasswordPromptResult(resultCode, data)
|
||||
REQUEST_AUTHORIZATION -> handleAuthorizationResult(resultCode)
|
||||
}
|
||||
}
|
||||
|
||||
private fun handlePasswordPromptResult(resultCode: Int, data: Intent?) {
|
||||
if (resultCode == Activity.RESULT_OK) {
|
||||
val resultIntent = data ?: error("No result intent received")
|
||||
val result = PasswordPromptResult.fromIntent(resultIntent)
|
||||
viewModel.onPasswordPromptResult(result)
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleAuthorizationResult(resultCode: Int) {
|
||||
if (resultCode == Activity.RESULT_OK) {
|
||||
viewModel.onReturnAfterAuthorization()
|
||||
}
|
||||
}
|
||||
|
||||
private fun setFragmentResult(accountImported: Boolean) {
|
||||
setFragmentResult(
|
||||
requestKey = FRAGMENT_RESULT_KEY,
|
||||
result = bundleOf(
|
||||
FRAGMENT_RESULT_ACCOUNT_IMPORTED to accountImported,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val REQUEST_PASSWORD_PROMPT = Activity.RESULT_FIRST_USER
|
||||
private const val REQUEST_AUTHORIZATION = Activity.RESULT_FIRST_USER + 1
|
||||
|
||||
const val FRAGMENT_RESULT_KEY = "settings_import"
|
||||
const val FRAGMENT_RESULT_ACCOUNT_IMPORTED = "accountImported"
|
||||
}
|
||||
}
|
||||
|
||||
private class ViewHolder(view: View) {
|
||||
val pickDocumentButton: View = view.findViewById(R.id.pickDocumentButton)
|
||||
val scanQrCodeButton: View = view.findViewById(R.id.scanQrCodeButton)
|
||||
val pickAppButton: View = view.findViewById(R.id.pickAppButton)
|
||||
val importButton: View = view.findViewById(R.id.importButton)
|
||||
val closeButton: MaterialButton = view.findViewById(R.id.closeButton)
|
||||
val loadingProgressBar: View = view.findViewById(R.id.loadingProgressBar)
|
||||
val importProgressBar: View = view.findViewById(R.id.importProgressBar)
|
||||
val statusText: MaterialTextView = view.findViewById(R.id.statusText)
|
||||
val settingsImportList: RecyclerView = view.findViewById(R.id.settingsImportList)
|
||||
}
|
||||
|
|
@ -0,0 +1,104 @@
|
|||
package app.k9mail.feature.settings.import.ui
|
||||
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import app.k9mail.feature.settings.importing.R
|
||||
import com.google.android.material.checkbox.MaterialCheckBox
|
||||
import com.google.android.material.textview.MaterialTextView
|
||||
import com.mikepenz.fastadapter.FastAdapter
|
||||
import com.mikepenz.fastadapter.items.AbstractItem
|
||||
import com.mikepenz.fastadapter.listeners.ClickEventHook
|
||||
|
||||
private const val GENERAL_SETTINGS_ID = 0L
|
||||
private const val ACCOUNT_ITEMS_ID_OFFSET = 1L
|
||||
|
||||
internal abstract class ImportListItem<VH : ImportCheckBoxViewHolder>(
|
||||
override var identifier: Long,
|
||||
private val importStatus: ImportStatus,
|
||||
) : AbstractItem<VH>() {
|
||||
|
||||
override fun bindView(holder: VH, payloads: List<Any>) {
|
||||
super.bindView(holder, payloads)
|
||||
holder.checkBox.isChecked = isSelected
|
||||
holder.itemView.isEnabled = isEnabled
|
||||
holder.checkBox.isEnabled = isEnabled
|
||||
|
||||
holder.checkBox.isVisible = importStatus == ImportStatus.NOT_AVAILABLE
|
||||
holder.statusIcon.isVisible = importStatus != ImportStatus.NOT_AVAILABLE
|
||||
|
||||
if (importStatus != ImportStatus.NOT_AVAILABLE) {
|
||||
val imageLevel = when (importStatus) {
|
||||
ImportStatus.IMPORT_SUCCESS -> 0
|
||||
ImportStatus.IMPORT_SUCCESS_PASSWORD_REQUIRED -> 1
|
||||
ImportStatus.IMPORT_SUCCESS_AUTHORIZATION_REQUIRED -> 2
|
||||
ImportStatus.NOT_SELECTED -> 3
|
||||
ImportStatus.IMPORT_FAILURE -> 4
|
||||
else -> error("Unexpected import status: $importStatus")
|
||||
}
|
||||
holder.statusIcon.setImageLevel(imageLevel)
|
||||
|
||||
val contentDescriptionStringResId = when (importStatus) {
|
||||
ImportStatus.IMPORT_SUCCESS -> R.string.settings_import_status_success
|
||||
ImportStatus.IMPORT_SUCCESS_PASSWORD_REQUIRED -> R.string.settings_import_status_password_required
|
||||
ImportStatus.IMPORT_SUCCESS_AUTHORIZATION_REQUIRED -> R.string.settings_import_status_log_in_required
|
||||
ImportStatus.NOT_SELECTED -> R.string.settings_import_status_not_imported
|
||||
ImportStatus.IMPORT_FAILURE -> R.string.settings_import_status_error
|
||||
else -> error("Unexpected import status: $importStatus")
|
||||
}
|
||||
val context = holder.statusIcon.context
|
||||
holder.statusIcon.contentDescription = context.getString(contentDescriptionStringResId)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal open class ImportCheckBoxViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
|
||||
val checkBox: MaterialCheckBox = itemView.findViewById(R.id.checkBox)
|
||||
val statusIcon: ImageView = itemView.findViewById(R.id.statusIcon)
|
||||
}
|
||||
|
||||
internal class ImportListItemClickEvent(val action: (position: Int) -> Unit) : ClickEventHook<ImportListItem<*>>() {
|
||||
|
||||
override fun onBind(viewHolder: RecyclerView.ViewHolder): View? {
|
||||
return if (viewHolder is ImportCheckBoxViewHolder) viewHolder.checkBox else null
|
||||
}
|
||||
|
||||
override fun onClick(
|
||||
v: View,
|
||||
position: Int,
|
||||
fastAdapter: FastAdapter<ImportListItem<*>>,
|
||||
item: ImportListItem<*>,
|
||||
) {
|
||||
action(position)
|
||||
}
|
||||
}
|
||||
|
||||
internal class GeneralSettingsItem(importStatus: ImportStatus) :
|
||||
ImportListItem<ImportCheckBoxViewHolder>(GENERAL_SETTINGS_ID, importStatus) {
|
||||
|
||||
override val type = R.id.settings_import_list_general_item
|
||||
override val layoutRes = R.layout.settings_import_general_list_item
|
||||
|
||||
override fun getViewHolder(v: View) = ImportCheckBoxViewHolder(v)
|
||||
}
|
||||
|
||||
internal class AccountViewHolder(view: View) : ImportCheckBoxViewHolder(view) {
|
||||
val accountDisplayName: MaterialTextView = view.findViewById(R.id.accountDisplayName)
|
||||
}
|
||||
|
||||
internal class AccountItem(account: SettingsListItem.Account) :
|
||||
ImportListItem<AccountViewHolder>(account.accountIndex + ACCOUNT_ITEMS_ID_OFFSET, account.importStatus) {
|
||||
|
||||
private val displayName = account.displayName
|
||||
|
||||
override val type = R.id.settings_import_list_account_item
|
||||
override val layoutRes = R.layout.settings_import_account_list_item
|
||||
|
||||
override fun getViewHolder(v: View) = AccountViewHolder(v)
|
||||
|
||||
override fun bindView(holder: AccountViewHolder, payloads: List<Any>) {
|
||||
super.bindView(holder, payloads)
|
||||
holder.accountDisplayName.text = displayName
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
package app.k9mail.feature.settings.import.ui
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.activity.compose.LocalActivity
|
||||
import androidx.compose.foundation.layout.PaddingValues
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import androidx.fragment.compose.AndroidFragment
|
||||
import androidx.lifecycle.compose.LocalLifecycleOwner
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.button.ButtonIcon
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.icon.Icons
|
||||
import app.k9mail.core.ui.compose.designsystem.organism.TopAppBar
|
||||
import app.k9mail.core.ui.compose.designsystem.template.Scaffold
|
||||
import app.k9mail.feature.settings.importing.R
|
||||
|
||||
@Composable
|
||||
fun SettingsImportScreen(
|
||||
action: SettingsImportAction,
|
||||
onImportSuccess: () -> Unit,
|
||||
onBack: () -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
Scaffold(
|
||||
topBar = {
|
||||
TopAppBar(
|
||||
title = stringResource(R.string.settings_import_title),
|
||||
navigationIcon = {
|
||||
ButtonIcon(
|
||||
onClick = onBack,
|
||||
imageVector = Icons.Outlined.ArrowBack,
|
||||
contentDescription = stringResource(androidx.appcompat.R.string.abc_action_bar_up_description),
|
||||
)
|
||||
},
|
||||
)
|
||||
},
|
||||
modifier = modifier,
|
||||
) { innerPadding ->
|
||||
SettingsImportContent(action, onImportSuccess, onBack, innerPadding)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun SettingsImportContent(
|
||||
action: SettingsImportAction,
|
||||
onImportSuccess: () -> Unit,
|
||||
onBack: () -> Unit,
|
||||
paddingValues: PaddingValues,
|
||||
) {
|
||||
val activity = LocalActivity.current as FragmentActivity
|
||||
|
||||
activity.supportFragmentManager.setFragmentResultListener(
|
||||
SettingsImportFragment.FRAGMENT_RESULT_KEY,
|
||||
LocalLifecycleOwner.current,
|
||||
) { _, result: Bundle ->
|
||||
if (result.getBoolean(SettingsImportFragment.FRAGMENT_RESULT_ACCOUNT_IMPORTED, false)) {
|
||||
onImportSuccess()
|
||||
} else {
|
||||
onBack()
|
||||
}
|
||||
}
|
||||
|
||||
AndroidFragment<SettingsImportFragment>(
|
||||
arguments = action.toBundle(),
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.padding(paddingValues),
|
||||
)
|
||||
}
|
||||
|
|
@ -0,0 +1,243 @@
|
|||
package app.k9mail.feature.settings.import.ui
|
||||
|
||||
import app.k9mail.feature.settings.import.ui.SettingsListItem.GeneralSettings
|
||||
|
||||
internal class SettingsImportUiModel {
|
||||
private var isShowMigrationActions = false
|
||||
|
||||
var settingsList: List<SettingsListItem> = emptyList()
|
||||
var isSettingsListVisible = false
|
||||
var isSettingsListEnabled = true
|
||||
var importButton: ButtonState = ButtonState.DISABLED
|
||||
var closeButton: ButtonState = ButtonState.GONE
|
||||
var closeButtonLabel: CloseButtonLabel = CloseButtonLabel.OK
|
||||
var isPickDocumentButtonVisible = true
|
||||
var isPickDocumentButtonEnabled = true
|
||||
var isScanQrCodeButtonVisible = isShowMigrationActions
|
||||
var isScanQrCodeButtonEnabled = true
|
||||
var isPickAppButtonVisible = isShowMigrationActions
|
||||
var isPickAppButtonEnabled = false
|
||||
var isPickAppButtonPermanentlyDisabled = true
|
||||
var isLoadingProgressVisible = false
|
||||
var isImportProgressVisible = false
|
||||
var statusText = StatusText.HIDDEN
|
||||
|
||||
val hasImportStarted
|
||||
get() = importButton == ButtonState.GONE
|
||||
|
||||
val hasDocumentBeenRead
|
||||
get() = isSettingsListVisible
|
||||
|
||||
val wasAccountImportSuccessful
|
||||
get() = hasImportStarted && settingsList.any { it !is GeneralSettings && it.importStatus.isSuccess }
|
||||
|
||||
fun enablePickButtons() {
|
||||
isPickDocumentButtonEnabled = true
|
||||
isScanQrCodeButtonEnabled = true
|
||||
maybeEnablePickAppButton()
|
||||
}
|
||||
|
||||
private fun maybeEnablePickAppButton() {
|
||||
if (!isPickAppButtonPermanentlyDisabled) {
|
||||
isPickAppButtonEnabled = true
|
||||
}
|
||||
}
|
||||
|
||||
fun disablePickButtons() {
|
||||
statusText = StatusText.HIDDEN
|
||||
isPickDocumentButtonEnabled = false
|
||||
isScanQrCodeButtonEnabled = false
|
||||
isPickAppButtonEnabled = false
|
||||
}
|
||||
|
||||
private fun enableImportButton() {
|
||||
importButton = ButtonState.ENABLED
|
||||
isImportProgressVisible = false
|
||||
isSettingsListEnabled = true
|
||||
}
|
||||
|
||||
private fun disableImportButton() {
|
||||
importButton = ButtonState.DISABLED
|
||||
isImportProgressVisible = false
|
||||
}
|
||||
|
||||
fun showLoadingProgress() {
|
||||
isLoadingProgressVisible = true
|
||||
isPickDocumentButtonVisible = false
|
||||
isScanQrCodeButtonVisible = false
|
||||
isPickAppButtonVisible = false
|
||||
isSettingsListEnabled = false
|
||||
statusText = StatusText.HIDDEN
|
||||
}
|
||||
|
||||
fun showImportingProgress() {
|
||||
isImportProgressVisible = true
|
||||
isSettingsListEnabled = false
|
||||
importButton = ButtonState.INVISIBLE
|
||||
statusText = StatusText.IMPORTING_PROGRESS
|
||||
}
|
||||
|
||||
private fun showSuccessText() {
|
||||
importButton = ButtonState.GONE
|
||||
closeButton = ButtonState.ENABLED
|
||||
closeButtonLabel = CloseButtonLabel.OK
|
||||
isImportProgressVisible = false
|
||||
isSettingsListEnabled = true
|
||||
statusText = StatusText.IMPORT_SUCCESS
|
||||
}
|
||||
|
||||
private fun showActionRequiredText(actionText: StatusText) {
|
||||
importButton = ButtonState.GONE
|
||||
closeButton = ButtonState.ENABLED
|
||||
closeButtonLabel = CloseButtonLabel.LATER
|
||||
isImportProgressVisible = false
|
||||
isSettingsListEnabled = true
|
||||
statusText = actionText
|
||||
}
|
||||
|
||||
fun showReadFailureText() {
|
||||
isLoadingProgressVisible = false
|
||||
isPickDocumentButtonVisible = true
|
||||
isPickDocumentButtonEnabled = true
|
||||
isScanQrCodeButtonVisible = isShowMigrationActions
|
||||
isScanQrCodeButtonEnabled = true
|
||||
isPickAppButtonVisible = isShowMigrationActions
|
||||
maybeEnablePickAppButton()
|
||||
statusText = StatusText.IMPORT_READ_FAILURE
|
||||
importButton = ButtonState.DISABLED
|
||||
}
|
||||
|
||||
fun showImportErrorText() {
|
||||
isLoadingProgressVisible = false
|
||||
isImportProgressVisible = false
|
||||
isSettingsListVisible = false
|
||||
isPickDocumentButtonVisible = true
|
||||
isPickDocumentButtonEnabled = true
|
||||
isScanQrCodeButtonVisible = isShowMigrationActions
|
||||
isScanQrCodeButtonEnabled = true
|
||||
isPickAppButtonVisible = isShowMigrationActions
|
||||
maybeEnablePickAppButton()
|
||||
statusText = StatusText.IMPORT_FAILURE
|
||||
importButton = ButtonState.DISABLED
|
||||
}
|
||||
|
||||
private fun showPartialImportErrorText() {
|
||||
importButton = ButtonState.GONE
|
||||
closeButton = ButtonState.ENABLED
|
||||
closeButtonLabel = CloseButtonLabel.OK
|
||||
isImportProgressVisible = false
|
||||
isSettingsListEnabled = true
|
||||
statusText = StatusText.IMPORT_PARTIAL_FAILURE
|
||||
}
|
||||
|
||||
fun initializeSettingsList(list: List<SettingsListItem>) {
|
||||
settingsList = list
|
||||
isSettingsListVisible = true
|
||||
isLoadingProgressVisible = false
|
||||
isPickDocumentButtonVisible = false
|
||||
isScanQrCodeButtonVisible = false
|
||||
isPickAppButtonVisible = false
|
||||
updateImportButtonFromSelection()
|
||||
}
|
||||
|
||||
fun toggleSettingsListItemSelection(position: Int) {
|
||||
val settingsListItem = settingsList[position]
|
||||
settingsListItem.selected = !settingsListItem.selected
|
||||
statusText = StatusText.HIDDEN
|
||||
updateImportButtonFromSelection()
|
||||
}
|
||||
|
||||
fun setSettingsListState(position: Int, status: ImportStatus) {
|
||||
settingsList[position].importStatus = status
|
||||
settingsList[position].enabled = status.isActionRequired
|
||||
}
|
||||
|
||||
private fun updateImportButtonFromSelection() {
|
||||
if (isImportProgressVisible) return
|
||||
|
||||
val atLeastOnceSelected = settingsList.any { it.selected }
|
||||
if (atLeastOnceSelected) {
|
||||
enableImportButton()
|
||||
} else {
|
||||
disableImportButton()
|
||||
}
|
||||
}
|
||||
|
||||
fun updateCloseButtonAndImportStatusText() {
|
||||
val errorsOnly = settingsList.none { it.importStatus.isSuccess }
|
||||
if (errorsOnly) {
|
||||
showImportErrorText()
|
||||
return
|
||||
}
|
||||
|
||||
val passwordsMissing = settingsList.any {
|
||||
it.importStatus == ImportStatus.IMPORT_SUCCESS_PASSWORD_REQUIRED
|
||||
}
|
||||
val authorizationRequired = settingsList.any {
|
||||
it.importStatus == ImportStatus.IMPORT_SUCCESS_AUTHORIZATION_REQUIRED
|
||||
}
|
||||
|
||||
if (passwordsMissing && authorizationRequired) {
|
||||
showActionRequiredText(StatusText.IMPORT_SUCCESS_PASSWORD_AND_AUTHORIZATION_REQUIRED)
|
||||
} else if (passwordsMissing) {
|
||||
showActionRequiredText(StatusText.IMPORT_SUCCESS_PASSWORD_REQUIRED)
|
||||
} else if (authorizationRequired) {
|
||||
showActionRequiredText(StatusText.IMPORT_SUCCESS_AUTHORIZATION_REQUIRED)
|
||||
} else {
|
||||
val partialImportError = settingsList.any { it.importStatus == ImportStatus.IMPORT_FAILURE }
|
||||
if (partialImportError) {
|
||||
showPartialImportErrorText()
|
||||
} else {
|
||||
showSuccessText()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun showMigrationActions() {
|
||||
isShowMigrationActions = true
|
||||
isScanQrCodeButtonVisible = true
|
||||
isPickAppButtonVisible = true
|
||||
}
|
||||
}
|
||||
|
||||
sealed class SettingsListItem {
|
||||
var selected: Boolean = true
|
||||
var enabled: Boolean = true
|
||||
var importStatus: ImportStatus = ImportStatus.NOT_AVAILABLE
|
||||
|
||||
class GeneralSettings : SettingsListItem()
|
||||
class Account(val accountIndex: Int, var displayName: String) : SettingsListItem()
|
||||
}
|
||||
|
||||
enum class ImportStatus(val isSuccess: Boolean, val isActionRequired: Boolean) {
|
||||
NOT_AVAILABLE(isSuccess = false, isActionRequired = false),
|
||||
NOT_SELECTED(isSuccess = false, isActionRequired = false),
|
||||
IMPORT_SUCCESS(isSuccess = true, isActionRequired = false),
|
||||
IMPORT_SUCCESS_PASSWORD_REQUIRED(isSuccess = true, isActionRequired = true),
|
||||
IMPORT_SUCCESS_AUTHORIZATION_REQUIRED(isSuccess = true, isActionRequired = true),
|
||||
IMPORT_FAILURE(isSuccess = false, isActionRequired = false),
|
||||
}
|
||||
|
||||
enum class ButtonState {
|
||||
DISABLED,
|
||||
ENABLED,
|
||||
INVISIBLE,
|
||||
GONE,
|
||||
}
|
||||
|
||||
enum class StatusText {
|
||||
HIDDEN,
|
||||
IMPORTING_PROGRESS,
|
||||
IMPORT_SUCCESS,
|
||||
IMPORT_SUCCESS_PASSWORD_REQUIRED,
|
||||
IMPORT_SUCCESS_AUTHORIZATION_REQUIRED,
|
||||
IMPORT_SUCCESS_PASSWORD_AND_AUTHORIZATION_REQUIRED,
|
||||
IMPORT_READ_FAILURE,
|
||||
IMPORT_PARTIAL_FAILURE,
|
||||
IMPORT_FAILURE,
|
||||
}
|
||||
|
||||
enum class CloseButtonLabel {
|
||||
OK,
|
||||
LATER,
|
||||
}
|
||||
|
|
@ -0,0 +1,622 @@
|
|||
package app.k9mail.feature.settings.import.ui
|
||||
|
||||
import android.content.ContentResolver
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.os.Parcelable
|
||||
import androidx.core.net.toUri
|
||||
import androidx.core.os.BundleCompat
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import app.k9mail.feature.migration.launcher.api.MigrationManager
|
||||
import app.k9mail.feature.settings.import.SettingsImportExternalContract.AccountActivator
|
||||
import com.fsck.k9.helper.SingleLiveEvent
|
||||
import com.fsck.k9.helper.measureRealtimeMillisWithResult
|
||||
import com.fsck.k9.preferences.ImportContents
|
||||
import com.fsck.k9.preferences.ImportResults
|
||||
import com.fsck.k9.preferences.SettingsImporter
|
||||
import com.fsck.k9.ui.base.bundle.getEnum
|
||||
import com.fsck.k9.ui.base.bundle.putEnum
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.NonCancellable
|
||||
import kotlinx.coroutines.SupervisorJob
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import net.thunderbird.core.logging.legacy.Log
|
||||
|
||||
private typealias AccountUuid = String
|
||||
private typealias AccountNumber = Int
|
||||
|
||||
internal class SettingsImportViewModel(
|
||||
private val contentResolver: ContentResolver,
|
||||
private val settingsImporter: SettingsImporter,
|
||||
private val accountActivator: AccountActivator,
|
||||
private val migrationManager: MigrationManager,
|
||||
private val importAppFetcher: ImportAppFetcher,
|
||||
private val backgroundDispatcher: CoroutineDispatcher = Dispatchers.IO,
|
||||
viewModelScope: CoroutineScope = CoroutineScope(Dispatchers.Main.immediate + SupervisorJob()),
|
||||
) : ViewModel(viewModelScope) {
|
||||
private val uiModelLiveData = MutableLiveData<SettingsImportUiModel>()
|
||||
private val actionLiveData = SingleLiveEvent<Action>()
|
||||
|
||||
private var isInitialized = false
|
||||
private var action = SettingsImportAction.Overview
|
||||
private var wasActionHandled = false
|
||||
|
||||
private val uiModel = SettingsImportUiModel()
|
||||
private var accountsMap: MutableMap<AccountNumber, AccountUuid> = mutableMapOf()
|
||||
private val accountStateMap: MutableMap<AccountNumber, AccountState> = mutableMapOf()
|
||||
private var contentUri: Uri? = null
|
||||
private var currentlyAuthorizingAccountUuid: String? = null
|
||||
|
||||
private val containsGeneralSettings: Boolean
|
||||
get() = uiModel.settingsList.any { it is SettingsListItem.GeneralSettings }
|
||||
|
||||
private val includeGeneralSettings: Boolean
|
||||
get() = uiModel.settingsList.first { it is SettingsListItem.GeneralSettings }.selected
|
||||
|
||||
private val generalSettingsImportStatus
|
||||
get() = uiModel.settingsList.first { it is SettingsListItem.GeneralSettings }.importStatus
|
||||
|
||||
private val selectedAccounts: Set<AccountUuid>
|
||||
get() {
|
||||
return uiModel.settingsList.asSequence()
|
||||
.filterIsInstance<SettingsListItem.Account>()
|
||||
.filter { it.selected }
|
||||
.map {
|
||||
accountsMap[it.accountIndex] ?: error("Unknown account index: ${it.accountIndex}")
|
||||
}
|
||||
.toSet()
|
||||
}
|
||||
|
||||
fun initialize() {
|
||||
if (isInitialized) return
|
||||
|
||||
if (migrationManager.isFeatureIncluded()) {
|
||||
updateUiModel {
|
||||
showMigrationActions()
|
||||
}
|
||||
|
||||
checkForImportApps()
|
||||
}
|
||||
|
||||
isInitialized = true
|
||||
}
|
||||
|
||||
private fun checkForImportApps() {
|
||||
viewModelScope.launch {
|
||||
val isAtLeastOneAppInstalled = withContext(backgroundDispatcher) {
|
||||
importAppFetcher.isAtLeastOneAppInstalled()
|
||||
}
|
||||
|
||||
updateUiModel {
|
||||
if (isAtLeastOneAppInstalled) {
|
||||
isPickAppButtonPermanentlyDisabled = false
|
||||
isPickAppButtonEnabled = isPickDocumentButtonEnabled
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun getActionEvents(): LiveData<Action> = actionLiveData
|
||||
|
||||
fun getUiModel(): LiveData<SettingsImportUiModel> {
|
||||
if (uiModelLiveData.value == null) {
|
||||
uiModelLiveData.value = uiModel
|
||||
}
|
||||
|
||||
return uiModelLiveData
|
||||
}
|
||||
|
||||
@Suppress("LongMethod")
|
||||
fun initializeFromSavedState(savedInstanceState: Bundle) {
|
||||
wasActionHandled = true
|
||||
contentUri = BundleCompat.getParcelable(savedInstanceState, STATE_CONTENT_URI, Uri::class.java)
|
||||
currentlyAuthorizingAccountUuid = savedInstanceState.getString(STATE_CURRENTLY_AUTHORIZING_ACCOUNT_UUID)
|
||||
|
||||
updateUiModel {
|
||||
isSettingsListVisible = savedInstanceState.getBoolean(STATE_SETTINGS_LIST_VISIBLE)
|
||||
isSettingsListEnabled = savedInstanceState.getBoolean(STATE_SETTINGS_LIST_ENABLED)
|
||||
importButton = savedInstanceState.getEnum(STATE_IMPORT_BUTTON, ButtonState.DISABLED)
|
||||
closeButton = savedInstanceState.getEnum(STATE_CLOSE_BUTTON, ButtonState.DISABLED)
|
||||
closeButtonLabel = savedInstanceState.getEnum(STATE_CLOSE_BUTTON_LABEL, CloseButtonLabel.OK)
|
||||
isPickDocumentButtonVisible = savedInstanceState.getBoolean(STATE_PICK_DOCUMENT_BUTTON_VISIBLE)
|
||||
isPickDocumentButtonEnabled = savedInstanceState.getBoolean(STATE_PICK_DOCUMENT_BUTTON_ENABLED)
|
||||
isScanQrCodeButtonVisible = savedInstanceState.getBoolean(STATE_SCAN_QR_CODE_BUTTON_VISIBLE)
|
||||
isScanQrCodeButtonEnabled = savedInstanceState.getBoolean(STATE_SCAN_QR_CODE_BUTTON_ENABLED)
|
||||
|
||||
isLoadingProgressVisible = savedInstanceState.getBoolean(STATE_LOADING_PROGRESS_VISIBLE)
|
||||
isImportProgressVisible = savedInstanceState.getBoolean(STATE_IMPORT_PROGRESS_VISIBLE)
|
||||
statusText = savedInstanceState.getEnum(STATE_STATUS_TEXT, StatusText.HIDDEN)
|
||||
|
||||
if (!hasDocumentBeenRead) return@updateUiModel
|
||||
|
||||
val generalSettingsItem = if (savedInstanceState.getBoolean(STATE_CONTAINS_GENERAL_SETTINGS)) {
|
||||
val includeGeneralSettings = savedInstanceState.getBoolean(STATE_INCLUDE_GENERAL_SETTINGS)
|
||||
val generalSettingsImportState = savedInstanceState.getEnum(
|
||||
STATE_GENERAL_SETTINGS_IMPORT_STATUS,
|
||||
ImportStatus.NOT_AVAILABLE,
|
||||
)
|
||||
|
||||
SettingsListItem.GeneralSettings().apply {
|
||||
selected = includeGeneralSettings
|
||||
importStatus = generalSettingsImportState
|
||||
enabled = !hasImportStarted
|
||||
}
|
||||
} else {
|
||||
null
|
||||
}
|
||||
|
||||
val savedAccountList = savedInstanceState.getParcelableArrayList<SavedAccountState>(STATE_ACCOUNT_LIST)!!
|
||||
|
||||
savedAccountList.forEach { saved ->
|
||||
accountsMap[saved.accountIndex] = saved.accountUuid
|
||||
accountStateMap[saved.accountIndex] = AccountState(
|
||||
saved.incomingServerName,
|
||||
saved.outgoingServerName,
|
||||
saved.incomingServerPasswordNeeded,
|
||||
saved.outgoingServerPasswordNeeded,
|
||||
)
|
||||
}
|
||||
|
||||
val accountSettingsItems = savedAccountList.map { saved ->
|
||||
SettingsListItem.Account(saved.accountIndex, saved.displayName).apply {
|
||||
selected = saved.selected
|
||||
importStatus = saved.importStatus
|
||||
enabled = if (hasImportStarted) {
|
||||
saved.importStatus == ImportStatus.IMPORT_SUCCESS_PASSWORD_REQUIRED
|
||||
} else {
|
||||
true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
settingsList = if (generalSettingsItem != null) {
|
||||
listOf(generalSettingsItem) + accountSettingsItems
|
||||
} else {
|
||||
accountSettingsItems
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun saveInstanceState(outState: Bundle) {
|
||||
with(uiModel) {
|
||||
outState.putBoolean(STATE_SETTINGS_LIST_VISIBLE, isSettingsListVisible)
|
||||
outState.putBoolean(STATE_SETTINGS_LIST_ENABLED, isSettingsListEnabled)
|
||||
outState.putEnum(STATE_IMPORT_BUTTON, importButton)
|
||||
outState.putEnum(STATE_CLOSE_BUTTON, closeButton)
|
||||
outState.putEnum(STATE_CLOSE_BUTTON_LABEL, closeButtonLabel)
|
||||
outState.putBoolean(STATE_PICK_DOCUMENT_BUTTON_VISIBLE, isPickDocumentButtonVisible)
|
||||
outState.putBoolean(STATE_PICK_DOCUMENT_BUTTON_ENABLED, isPickDocumentButtonEnabled)
|
||||
outState.putBoolean(STATE_SCAN_QR_CODE_BUTTON_VISIBLE, isScanQrCodeButtonVisible)
|
||||
outState.putBoolean(STATE_SCAN_QR_CODE_BUTTON_ENABLED, isScanQrCodeButtonEnabled)
|
||||
outState.putBoolean(STATE_LOADING_PROGRESS_VISIBLE, isLoadingProgressVisible)
|
||||
outState.putBoolean(STATE_IMPORT_PROGRESS_VISIBLE, isImportProgressVisible)
|
||||
outState.putEnum(STATE_STATUS_TEXT, statusText)
|
||||
outState.putString(STATE_CURRENTLY_AUTHORIZING_ACCOUNT_UUID, currentlyAuthorizingAccountUuid)
|
||||
|
||||
if (hasDocumentBeenRead) {
|
||||
val containsGeneralSettings = this@SettingsImportViewModel.containsGeneralSettings
|
||||
outState.putBoolean(STATE_CONTAINS_GENERAL_SETTINGS, containsGeneralSettings)
|
||||
if (containsGeneralSettings) {
|
||||
outState.putBoolean(STATE_INCLUDE_GENERAL_SETTINGS, includeGeneralSettings)
|
||||
outState.putEnum(STATE_GENERAL_SETTINGS_IMPORT_STATUS, generalSettingsImportStatus)
|
||||
}
|
||||
outState.putParcelableArrayList(STATE_ACCOUNT_LIST, createSavedAccountList())
|
||||
}
|
||||
}
|
||||
|
||||
outState.putParcelable(STATE_CONTENT_URI, contentUri)
|
||||
}
|
||||
|
||||
fun setAction(action: SettingsImportAction) {
|
||||
this.action = action
|
||||
|
||||
if (!wasActionHandled) {
|
||||
wasActionHandled = true
|
||||
|
||||
when (action) {
|
||||
SettingsImportAction.Overview -> Unit
|
||||
SettingsImportAction.ScanQrCode -> onScanQrCodeButtonClicked()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun onPickDocumentButtonClicked() {
|
||||
updateUiModel {
|
||||
disablePickButtons()
|
||||
}
|
||||
|
||||
sendActionEvent(Action.PickDocument)
|
||||
}
|
||||
|
||||
fun onScanQrCodeButtonClicked() {
|
||||
updateUiModel {
|
||||
disablePickButtons()
|
||||
}
|
||||
|
||||
sendActionEvent(Action.ScanQrCode)
|
||||
}
|
||||
|
||||
fun onPickAppButtonClicked() {
|
||||
updateUiModel {
|
||||
disablePickButtons()
|
||||
}
|
||||
|
||||
sendActionEvent(Action.PickApp)
|
||||
}
|
||||
|
||||
fun onDocumentPickCanceled() {
|
||||
if (action == SettingsImportAction.ScanQrCode) {
|
||||
sendActionEvent(Action.Close(importSuccess = false))
|
||||
} else {
|
||||
updateUiModel {
|
||||
enablePickButtons()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun onDocumentPicked(contentUri: Uri) {
|
||||
updateUiModel {
|
||||
showLoadingProgress()
|
||||
}
|
||||
|
||||
startReadSettingsFile(contentUri)
|
||||
}
|
||||
|
||||
fun onAppPickCanceled() {
|
||||
updateUiModel {
|
||||
enablePickButtons()
|
||||
}
|
||||
}
|
||||
|
||||
fun onAppPicked(packageName: String) {
|
||||
updateUiModel {
|
||||
showLoadingProgress()
|
||||
}
|
||||
|
||||
startReadSettingsFile("content://$packageName.settings/".toUri())
|
||||
}
|
||||
|
||||
fun onImportButtonClicked() {
|
||||
updateUiModel {
|
||||
showImportingProgress()
|
||||
}
|
||||
|
||||
startImportSettings()
|
||||
}
|
||||
|
||||
fun onCloseButtonClicked() {
|
||||
sendActionEvent(Action.Close(importSuccess = uiModel.wasAccountImportSuccessful))
|
||||
}
|
||||
|
||||
fun onSettingsListItemClicked(position: Int) {
|
||||
val settingsListItem = uiModel.settingsList[position]
|
||||
when (settingsListItem.importStatus) {
|
||||
ImportStatus.NOT_AVAILABLE -> updateUiModel {
|
||||
toggleSettingsListItemSelection(position)
|
||||
}
|
||||
|
||||
ImportStatus.IMPORT_SUCCESS_AUTHORIZATION_REQUIRED -> {
|
||||
startAuthorization(settingsListItem as SettingsListItem.Account)
|
||||
}
|
||||
|
||||
ImportStatus.IMPORT_SUCCESS_PASSWORD_REQUIRED -> {
|
||||
showPasswordPromptDialog(settingsListItem as SettingsListItem.Account)
|
||||
}
|
||||
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
|
||||
fun onPasswordPromptResult(result: PasswordPromptResult) {
|
||||
updateUiModel {
|
||||
val index = getListIndexOfAccount(result.accountUuid)
|
||||
setSettingsListState(index, ImportStatus.IMPORT_SUCCESS)
|
||||
|
||||
updateCloseButtonAndImportStatusText()
|
||||
}
|
||||
|
||||
viewModelScope.launch(backgroundDispatcher) {
|
||||
withContext(NonCancellable) {
|
||||
with(result) {
|
||||
accountActivator.enableAccount(accountUuid, incomingServerPassword, outgoingServerPassword)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun onReturnAfterAuthorization() {
|
||||
currentlyAuthorizingAccountUuid?.let { accountUuid ->
|
||||
currentlyAuthorizingAccountUuid = null
|
||||
updateUiModel {
|
||||
val index = getListIndexOfAccount(accountUuid)
|
||||
setSettingsListState(index, ImportStatus.IMPORT_SUCCESS)
|
||||
updateCloseButtonAndImportStatusText()
|
||||
}
|
||||
|
||||
viewModelScope.launch(backgroundDispatcher) {
|
||||
withContext(NonCancellable) {
|
||||
accountActivator.enableAccount(accountUuid)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun getListIndexOfAccount(accountUuid: String): Int {
|
||||
return uiModel.settingsList.indexOfFirst {
|
||||
it is SettingsListItem.Account && accountsMap[it.accountIndex] == accountUuid
|
||||
}
|
||||
}
|
||||
|
||||
private fun startReadSettingsFile(contentUri: Uri) {
|
||||
this.contentUri = contentUri
|
||||
|
||||
viewModelScope.launch {
|
||||
try {
|
||||
val (elapsed, contents) = measureRealtimeMillisWithResult {
|
||||
withContext(backgroundDispatcher) {
|
||||
readSettings(contentUri)
|
||||
}
|
||||
}
|
||||
|
||||
if (elapsed < MIN_PROGRESS_DURATION) {
|
||||
delay(MIN_PROGRESS_DURATION - elapsed)
|
||||
}
|
||||
|
||||
accountsMap = contents.accounts
|
||||
.asSequence()
|
||||
.mapIndexed { index, account -> index to account.uuid }
|
||||
.toMap(mutableMapOf())
|
||||
|
||||
val items = mutableListOf<SettingsListItem>()
|
||||
if (contents.globalSettings) {
|
||||
items.add(SettingsListItem.GeneralSettings())
|
||||
}
|
||||
contents.accounts.mapIndexedTo(items) { index, accountDescription ->
|
||||
SettingsListItem.Account(index, accountDescription.name)
|
||||
}
|
||||
|
||||
updateUiModel {
|
||||
initializeSettingsList(items)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e(e, "Error reading settings file")
|
||||
|
||||
updateUiModel {
|
||||
showReadFailureText()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun startImportSettings() {
|
||||
val contentUri = this.contentUri ?: error("contentUri is missing")
|
||||
viewModelScope.launch {
|
||||
try {
|
||||
val containsGeneralSettings = this@SettingsImportViewModel.containsGeneralSettings
|
||||
val importGeneralSettings = containsGeneralSettings && includeGeneralSettings
|
||||
val importAccounts = selectedAccounts.toList()
|
||||
|
||||
val (elapsed, importResults) = measureRealtimeMillisWithResult {
|
||||
withContext(backgroundDispatcher) {
|
||||
importSettings(contentUri, importGeneralSettings, importAccounts)
|
||||
}
|
||||
}
|
||||
|
||||
if (elapsed < MIN_PROGRESS_DURATION) {
|
||||
delay(MIN_PROGRESS_DURATION - elapsed)
|
||||
}
|
||||
|
||||
updateUiModel {
|
||||
if (containsGeneralSettings) {
|
||||
setGeneralSettingsImportStatus(importResults, importGeneralSettings)
|
||||
}
|
||||
setAccountsImportStatus(importResults)
|
||||
|
||||
updateCloseButtonAndImportStatusText()
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e(e, "Error importing settings")
|
||||
|
||||
updateUiModel {
|
||||
showImportErrorText()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun SettingsImportUiModel.setGeneralSettingsImportStatus(
|
||||
importResults: ImportResults,
|
||||
importGeneralSettings: Boolean,
|
||||
) {
|
||||
val importStatus = when {
|
||||
importResults.globalSettings -> ImportStatus.IMPORT_SUCCESS
|
||||
importGeneralSettings -> ImportStatus.IMPORT_FAILURE
|
||||
else -> ImportStatus.NOT_SELECTED
|
||||
}
|
||||
setSettingsListState(0, importStatus)
|
||||
}
|
||||
|
||||
private fun SettingsImportUiModel.setAccountsImportStatus(importResults: ImportResults) {
|
||||
val failedToImport = importResults.erroneousAccounts.map { it.uuid }.toHashSet()
|
||||
settingsList.forEachIndexed { index, listItem ->
|
||||
if (listItem !is SettingsListItem.Account) return@forEachIndexed
|
||||
|
||||
val accountIndex = listItem.accountIndex
|
||||
val accountUuid = accountsMap[accountIndex]
|
||||
|
||||
if (accountUuid in failedToImport) {
|
||||
setSettingsListState(index, ImportStatus.IMPORT_FAILURE)
|
||||
} else {
|
||||
val accountPair = importResults.importedAccounts.firstOrNull { it.original.uuid == accountUuid }
|
||||
if (accountPair != null) {
|
||||
accountsMap[accountIndex] = accountPair.imported.uuid
|
||||
listItem.displayName = accountPair.imported.name
|
||||
|
||||
if (accountPair.authorizationNeeded) {
|
||||
setSettingsListState(index, ImportStatus.IMPORT_SUCCESS_AUTHORIZATION_REQUIRED)
|
||||
} else if (accountPair.incomingPasswordNeeded || accountPair.outgoingPasswordNeeded) {
|
||||
accountStateMap[accountIndex] = AccountState(
|
||||
accountPair.incomingServerName,
|
||||
accountPair.outgoingServerName,
|
||||
accountPair.incomingPasswordNeeded,
|
||||
accountPair.outgoingPasswordNeeded,
|
||||
)
|
||||
|
||||
setSettingsListState(index, ImportStatus.IMPORT_SUCCESS_PASSWORD_REQUIRED)
|
||||
} else {
|
||||
setSettingsListState(index, ImportStatus.IMPORT_SUCCESS)
|
||||
}
|
||||
} else {
|
||||
setSettingsListState(index, ImportStatus.NOT_SELECTED)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun readSettings(contentUri: Uri): ImportContents {
|
||||
val inputStream = contentResolver.openInputStream(contentUri)
|
||||
?: error("Failed to open settings file for reading: $contentUri")
|
||||
|
||||
return inputStream.use {
|
||||
settingsImporter.getImportStreamContents(inputStream)
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun importSettings(
|
||||
contentUri: Uri,
|
||||
generalSettings: Boolean,
|
||||
accounts: List<AccountUuid>,
|
||||
): ImportResults {
|
||||
val inputStream = contentResolver.openInputStream(contentUri)
|
||||
?: error("Failed to open settings file for reading: $contentUri")
|
||||
|
||||
return inputStream.use {
|
||||
settingsImporter.importSettings(inputStream, generalSettings, accounts)
|
||||
}
|
||||
}
|
||||
|
||||
private fun startAuthorization(settingsListItem: SettingsListItem.Account) {
|
||||
val accountIndex = settingsListItem.accountIndex
|
||||
val accountUuid = accountsMap[accountIndex]!!
|
||||
currentlyAuthorizingAccountUuid = accountUuid
|
||||
|
||||
sendActionEvent(Action.StartAuthorization(accountUuid))
|
||||
}
|
||||
|
||||
private fun showPasswordPromptDialog(settingsListItem: SettingsListItem.Account) {
|
||||
val accountIndex = settingsListItem.accountIndex
|
||||
|
||||
val accountUuid = accountsMap[accountIndex]!!
|
||||
val accountState = accountStateMap[accountIndex]!!
|
||||
|
||||
sendActionEvent(
|
||||
Action.PasswordPrompt(
|
||||
accountUuid,
|
||||
settingsListItem.displayName,
|
||||
accountState.incomingServerPasswordNeeded,
|
||||
accountState.incomingServerName,
|
||||
accountState.outgoingServerPasswordNeeded,
|
||||
accountState.outgoingServerName,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
private fun updateUiModel(block: SettingsImportUiModel.() -> Unit) {
|
||||
uiModel.block()
|
||||
uiModelLiveData.value = uiModel
|
||||
}
|
||||
|
||||
private fun sendActionEvent(action: Action) {
|
||||
actionLiveData.value = action
|
||||
}
|
||||
|
||||
private fun createSavedAccountList(): ArrayList<SavedAccountState> {
|
||||
return uiModel.settingsList
|
||||
.asSequence()
|
||||
.filterIsInstance<SettingsListItem.Account>()
|
||||
.map { accountItem ->
|
||||
val accountIndex = accountItem.accountIndex
|
||||
val accountState = accountStateMap[accountIndex]
|
||||
SavedAccountState(
|
||||
accountIndex = accountIndex,
|
||||
displayName = accountItem.displayName,
|
||||
accountUuid = accountsMap[accountIndex]!!,
|
||||
selected = accountItem.selected,
|
||||
importStatus = accountItem.importStatus,
|
||||
incomingServerName = accountState?.incomingServerName,
|
||||
outgoingServerName = accountState?.outgoingServerName,
|
||||
incomingServerPasswordNeeded = accountState?.incomingServerPasswordNeeded ?: false,
|
||||
outgoingServerPasswordNeeded = accountState?.outgoingServerPasswordNeeded ?: false,
|
||||
)
|
||||
}
|
||||
.toCollection(ArrayList(uiModel.settingsList.size - 1))
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val MIN_PROGRESS_DURATION = 500L
|
||||
|
||||
private const val STATE_SETTINGS_LIST_VISIBLE = "settingsListVisible"
|
||||
private const val STATE_SETTINGS_LIST_ENABLED = "settingsListEnabled"
|
||||
private const val STATE_IMPORT_BUTTON = "importButton"
|
||||
private const val STATE_CLOSE_BUTTON = "closeButton"
|
||||
private const val STATE_CLOSE_BUTTON_LABEL = "closeButtonLabel"
|
||||
private const val STATE_PICK_DOCUMENT_BUTTON_VISIBLE = "pickDocumentButtonVisible"
|
||||
private const val STATE_PICK_DOCUMENT_BUTTON_ENABLED = "pickDocumentButtonEnabled"
|
||||
private const val STATE_SCAN_QR_CODE_BUTTON_VISIBLE = "scanQrCodeButtonVisible"
|
||||
private const val STATE_SCAN_QR_CODE_BUTTON_ENABLED = "scanQrCodeButtonEnabled"
|
||||
private const val STATE_LOADING_PROGRESS_VISIBLE = "loadingProgressVisible"
|
||||
private const val STATE_IMPORT_PROGRESS_VISIBLE = "importProgressVisible"
|
||||
private const val STATE_STATUS_TEXT = "statusText"
|
||||
private const val STATE_CONTAINS_GENERAL_SETTINGS = "containsGeneralSettings"
|
||||
private const val STATE_INCLUDE_GENERAL_SETTINGS = "includeGeneralSettings"
|
||||
private const val STATE_CONTENT_URI = "contentUri"
|
||||
private const val STATE_GENERAL_SETTINGS_IMPORT_STATUS = "generalSettingsImportStatus"
|
||||
private const val STATE_ACCOUNT_LIST = "accountList"
|
||||
private const val STATE_CURRENTLY_AUTHORIZING_ACCOUNT_UUID = "currentlyAuthorizingAccountUuid"
|
||||
}
|
||||
}
|
||||
|
||||
sealed class Action {
|
||||
class Close(val importSuccess: Boolean) : Action()
|
||||
object PickDocument : Action()
|
||||
object ScanQrCode : Action()
|
||||
object PickApp : Action()
|
||||
class StartAuthorization(val accountUuid: String) : Action()
|
||||
class PasswordPrompt(
|
||||
val accountUuid: String,
|
||||
val accountName: String,
|
||||
val inputIncomingServerPassword: Boolean,
|
||||
val incomingServerName: String?,
|
||||
val inputOutgoingServerPassword: Boolean,
|
||||
val outgoingServerName: String?,
|
||||
) : Action()
|
||||
}
|
||||
|
||||
private class AccountState(
|
||||
val incomingServerName: String?,
|
||||
val outgoingServerName: String?,
|
||||
val incomingServerPasswordNeeded: Boolean,
|
||||
val outgoingServerPasswordNeeded: Boolean,
|
||||
)
|
||||
|
||||
@Suppress("LongParameterList")
|
||||
@Parcelize
|
||||
private class SavedAccountState(
|
||||
val accountIndex: Int,
|
||||
val displayName: String,
|
||||
val accountUuid: String,
|
||||
val selected: Boolean,
|
||||
val importStatus: ImportStatus,
|
||||
val incomingServerName: String?,
|
||||
val outgoingServerName: String?,
|
||||
val incomingServerPasswordNeeded: Boolean,
|
||||
val outgoingServerPasswordNeeded: Boolean,
|
||||
) : Parcelable
|
||||
|
After Width: | Height: | Size: 464 B |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 331 B |
|
After Width: | Height: | Size: 811 B |
|
After Width: | Height: | Size: 758 B |
|
After Width: | Height: | Size: 768 B |
|
After Width: | Height: | Size: 622 B |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 949 B |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_enabled="false" android:drawable="@drawable/settings_import_button_google_signin_dark_disabled" />
|
||||
<item android:state_pressed="true" android:drawable="@drawable/settings_import_button_google_signin_dark_pressed" />
|
||||
<item android:state_focused="true" android:drawable="@drawable/settings_import_button_google_signin_dark_focus" />
|
||||
<item android:drawable="@drawable/settings_import_button_google_signin_dark_normal" />
|
||||
</selector>
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item
|
||||
android:drawable="@drawable/ic_check_circle"
|
||||
android:maxLevel="0"
|
||||
android:minLevel="0"
|
||||
/>
|
||||
<item
|
||||
android:drawable="@drawable/ic_key"
|
||||
android:maxLevel="1"
|
||||
android:minLevel="1"
|
||||
/>
|
||||
<item
|
||||
android:drawable="@drawable/ic_login"
|
||||
android:maxLevel="2"
|
||||
android:minLevel="2"
|
||||
/>
|
||||
<item
|
||||
android:drawable="@drawable/ic_block"
|
||||
android:maxLevel="3"
|
||||
android:minLevel="3"
|
||||
/>
|
||||
<item
|
||||
android:drawable="@drawable/ic_error"
|
||||
android:maxLevel="4"
|
||||
android:minLevel="4"
|
||||
/>
|
||||
</level-list>
|
||||
|
|
@ -0,0 +1,80 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
tools:context="app.k9mail.feature.settings.import.ui.OAuthFlowActivity"
|
||||
tools:ignore="ResourceName"
|
||||
>
|
||||
|
||||
<include layout="@layout/toolbar" />
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:fadingEdge="none"
|
||||
android:padding="16dp"
|
||||
android:scrollbarStyle="outsideInset"
|
||||
>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:gravity="center_horizontal"
|
||||
android:orientation="vertical"
|
||||
>
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="24dp"
|
||||
android:text="@string/settings_import_oauth_description"
|
||||
android:textAppearance="?attr/textAppearanceBodyLarge"
|
||||
/>
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/oauth_sign_in_button"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/settings_import_oauth_sign_in"
|
||||
android:visibility="gone"
|
||||
/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatButton
|
||||
android:id="@+id/google_sign_in_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/settings_import_button_google_signin_dark"
|
||||
android:text="@string/settings_import_oauth_sign_in_with_google"
|
||||
android:textAllCaps="false"
|
||||
android:textColor="#ffffff"
|
||||
android:textSize="14sp"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible"
|
||||
/>
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/sign_in_progress"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
/>
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/error_text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="24dp"
|
||||
android:textAppearance="?attr/textAppearanceBodyLarge"
|
||||
tools:text="@string/settings_import_oauth_error_browser_not_found"
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</ScrollView>
|
||||
|
||||
</LinearLayout>
|
||||
|
|
@ -0,0 +1,164 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context="app.k9mail.feature.settings.import.ui.SettingsImportFragment"
|
||||
tools:ignore="ResourceName"
|
||||
>
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/settingsImportList"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:visibility="gone"
|
||||
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
|
||||
app:layout_constraintBottom_toTopOf="@+id/bottomBar"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:visibility="visible"
|
||||
tools:listitem="@layout/settings_import_account_list_item"
|
||||
tools:itemCount="3"
|
||||
/>
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/pickDocumentButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:text="@string/settings_import_pick_document_button"
|
||||
app:layout_constraintBottom_toTopOf="@+id/scanQrCodeButton"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/settingsImportList"
|
||||
/>
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/scanQrCodeButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:text="@string/settings_import_scan_qr_code_button"
|
||||
app:layout_constraintBottom_toTopOf="@+id/pickAppButton"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/pickDocumentButton"
|
||||
/>
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/pickAppButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:text="@string/settings_import_pick_app_button"
|
||||
app:layout_constraintBottom_toTopOf="@+id/settingsImportList"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/scanQrCodeButton"
|
||||
/>
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/loadingProgressBar"
|
||||
style="?android:attr/progressBarStyle"
|
||||
android:layout_width="32dp"
|
||||
android:layout_height="32dp"
|
||||
android:indeterminate="true"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/pickDocumentButton"
|
||||
app:layout_constraintEnd_toEndOf="@+id/pickDocumentButton"
|
||||
app:layout_constraintStart_toStartOf="@+id/pickDocumentButton"
|
||||
app:layout_constraintTop_toTopOf="@+id/pickDocumentButton"
|
||||
/>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/bottomBar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:elevation="8dp"
|
||||
android:minHeight="56dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
tools:ignore="UnusedAttribute"
|
||||
>
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/importButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="4dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginBottom="4dp"
|
||||
android:enabled="false"
|
||||
android:text="@string/settings_import_button"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@id/buttonBarrier"
|
||||
/>
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/closeButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="4dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginBottom="4dp"
|
||||
android:text="@string/okay_action"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@id/buttonBarrier"
|
||||
/>
|
||||
|
||||
<androidx.constraintlayout.widget.Barrier
|
||||
android:id="@+id/buttonBarrier"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:barrierDirection="left"
|
||||
/>
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/importProgressBar"
|
||||
style="?android:attr/progressBarStyle"
|
||||
android:layout_width="32dp"
|
||||
android:layout_height="32dp"
|
||||
android:indeterminate="true"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/importButton"
|
||||
app:layout_constraintEnd_toEndOf="@+id/importButton"
|
||||
app:layout_constraintStart_toStartOf="@+id/importButton"
|
||||
app:layout_constraintTop_toTopOf="@+id/importButton"
|
||||
/>
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/statusText"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@+id/buttonBarrier"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:text="Importing…"
|
||||
tools:visibility="visible"
|
||||
/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
|
|
@ -0,0 +1,117 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ScrollView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context="app.k9mail.feature.settings.import.ui.PasswordPromptDialogFragment"
|
||||
tools:ignore="ResourceName"
|
||||
>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="16dp"
|
||||
>
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/passwordPromptIntro"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
tools:text="To be able to use the account "Test" you need to provide the server passwords."
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
/>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/incomingServerPasswordLayout"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/passwordPromptIntro"
|
||||
app:passwordToggleEnabled="true"
|
||||
>
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/incomingServerPassword"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/settings_import_incoming_server_password_hint"
|
||||
android:inputType="textPassword"
|
||||
/>
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/incomingServerName"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:text="Server: imap.server.example"
|
||||
android:textAppearance="?attr/textAppearanceBodyMedium"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/incomingServerPasswordLayout"
|
||||
/>
|
||||
|
||||
<com.google.android.material.checkbox.MaterialCheckBox
|
||||
android:id="@+id/useSamePasswordCheckbox"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="24dp"
|
||||
android:checked="true"
|
||||
android:text="@string/settings_import_use_same_password_for_outgoing_server"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/incomingServerName"
|
||||
/>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/outgoingServerPasswordLayout"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/useSamePasswordCheckbox"
|
||||
app:passwordToggleEnabled="true"
|
||||
>
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/outgoingServerPassword"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/settings_import_outgoing_server_password_hint"
|
||||
android:inputType="textPassword"
|
||||
/>
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/outgoingServerName"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:text="Server: smtp.server.example"
|
||||
android:textAppearance="?attr/textAppearanceBodyMedium"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/outgoingServerPasswordLayout"
|
||||
/>
|
||||
|
||||
<androidx.constraintlayout.widget.Group
|
||||
android:id="@+id/incomingServerGroup"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:constraint_referenced_ids="incomingServerPasswordLayout,incomingServerName"
|
||||
/>
|
||||
|
||||
<androidx.constraintlayout.widget.Group
|
||||
android:id="@+id/outgoingServerGroup"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:constraint_referenced_ids="outgoingServerPasswordLayout,outgoingServerName"
|
||||
/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</ScrollView>
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:minHeight="?android:attr/listPreferredItemHeightSmall"
|
||||
>
|
||||
|
||||
<com.google.android.material.checkbox.MaterialCheckBox
|
||||
android:id="@+id/checkBox"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="12dp"
|
||||
android:focusable="false"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:text="​"
|
||||
/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/statusIcon"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="16dp"
|
||||
android:contentDescription="@null"
|
||||
android:focusable="false"
|
||||
app:srcCompat="@drawable/settings_import_import_status"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
/>
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/accountDisplayName"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="8dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:duplicateParentState="true"
|
||||
android:textAppearance="?attr/textAppearanceTitleMedium"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="@+id/guideline"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintVertical_chainStyle="packed"
|
||||
tools:text="@sample/accounts.json/data/name"
|
||||
/>
|
||||
|
||||
<androidx.constraintlayout.widget.Guideline
|
||||
android:id="@+id/guideline"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
app:layout_constraintGuide_begin="72dp"
|
||||
/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:minHeight="?android:attr/listPreferredItemHeightSmall"
|
||||
>
|
||||
|
||||
<com.google.android.material.checkbox.MaterialCheckBox
|
||||
android:id="@+id/checkBox"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="12dp"
|
||||
android:focusable="false"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/statusIcon"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="16dp"
|
||||
android:contentDescription="@null"
|
||||
android:focusable="false"
|
||||
app:srcCompat="@drawable/settings_import_import_status"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
/>
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/title"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="8dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:duplicateParentState="true"
|
||||
android:text="@string/settings_import_general_settings_item"
|
||||
android:textAppearance="?attr/textAppearanceTitleMedium"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="@+id/guideline"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
/>
|
||||
|
||||
<androidx.constraintlayout.widget.Guideline
|
||||
android:id="@+id/guideline"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
app:layout_constraintGuide_begin="72dp"
|
||||
/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:minHeight="56dp"
|
||||
android:orientation="vertical"
|
||||
android:paddingHorizontal="24dp"
|
||||
android:paddingVertical="8dp"
|
||||
>
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/settings_import_app_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:duplicateParentState="true"
|
||||
android:textAppearance="?attr/textAppearanceBodyLarge"
|
||||
tools:text="K-9 Mail"
|
||||
/>
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/settings_import_app_note"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:duplicateParentState="true"
|
||||
android:text="@string/settings_import_app_version_not_supported"
|
||||
android:textAppearance="?attr/textAppearanceBodyMedium"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible"
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
40
feature/settings/import/src/main/res/values-ar/strings.xml
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">استيراد الإعدادات</string>
|
||||
<string name="settings_import_pick_document_button">اختيار ملف</string>
|
||||
<string name="settings_import_button">استيراد</string>
|
||||
<string name="settings_import_success_generic">تم استيراد الإعدادات بنجاح </string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">الرجاء إدخال كلمات المرور </string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_required">الرجاء تسجيل الدخول </string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_and_password_required">الرجاء تسجيل الدخول وإدخال كلمات المرور </string>
|
||||
<string name="settings_import_failure">فشل استيراد الإعدادات </string>
|
||||
<string name="settings_import_read_failure">فشلت قراءة ملف الإعدادات </string>
|
||||
<string name="settings_import_partial_failure">فشل استيراد بعض الإعدادات </string>
|
||||
<string name="settings_import_status_success">تم الاستيراد بنجاح </string>
|
||||
<string name="settings_import_status_password_required">كلمة المرور مطلوبة </string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_log_in_required">تسجيل الدخول مطلوب </string>
|
||||
<string name="settings_import_status_not_imported">غير مستورد </string>
|
||||
<string name="settings_import_status_error">فشل الاستيراد </string>
|
||||
<string name="settings_import_later_button">لاحقًا</string>
|
||||
<string name="settings_importing">استيراد الإعدادات…</string>
|
||||
<string name="settings_import_incoming_server_password_hint">كلمة مرور الخادم الواردة </string>
|
||||
<string name="settings_import_outgoing_server_password_hint">كلمة مرور خادم البريد الصادر </string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">استخدم نفس كلمة المرور لخادم البريد الصادر </string>
|
||||
<string name="settings_import_server_name_format">اسم الخادم: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">لاستخدام حساب البريد الإلكتروني هذا ، تحتاج إلى تسجيل الدخول ومنح التطبيق حق الوصول إلى رسائل البريد الإلكتروني الخاصة بك.</string>
|
||||
<string name="settings_import_oauth_sign_in">تسجيل الدخول</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">تسجيل الدخول بأستخدام جوجل</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">تم إلغاء التفويض </string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">فشل التفويض مع الخطأ التالي: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">OAuth 2.0 غير مدعوم حاليًا مع هذا الموفر. </string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">تعذر على التطبيق العثور على متصفح لاستخدامه لمنح حق الوصول إلى حسابك.</string>
|
||||
<string name="settings_import_general_settings_item">الإعدادات العامة</string>
|
||||
<string name="settings_import_scan_qr_code_button">مسح رمز الاستجابة السريعة</string>
|
||||
<string name="settings_import_pick_app_button">الاستيراد من تطبيق</string>
|
||||
<string name="settings_import_pick_app_dialog_title">الاستيراد من التطبيق</string>
|
||||
<string name="settings_import_app_version_not_supported">إصدار التطبيق غير مدعوم.</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
46
feature/settings/import/src/main/res/values-be/strings.xml
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Імпартаваць налады</string>
|
||||
<string name="settings_import_pick_document_button">Абраць файл</string>
|
||||
<string name="settings_import_button">Імпарт</string>
|
||||
<string name="settings_import_success_generic">Налады паспяхова імпартаваныя</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Калі ласка, увядзіце пароль</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_required">Увайдзіце</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_and_password_required">Увайдзіце і ўвядзіце пароль</string>
|
||||
<string name="settings_import_failure">Не ўдалося імпартаваць налады</string>
|
||||
<string name="settings_import_read_failure">Не ўдалося прачытаць файл налад</string>
|
||||
<string name="settings_import_partial_failure">Не ўдалося імпартаваць некаторыя налады</string>
|
||||
<string name="settings_import_status_success">Паспяхова імпартавана</string>
|
||||
<string name="settings_import_status_password_required">Патрабуецца пароль</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_log_in_required">Неабходна ўвайсці</string>
|
||||
<string name="settings_import_status_not_imported">Не імпартавана</string>
|
||||
<string name="settings_import_status_error">Не ўдалося імпартаваць</string>
|
||||
<string name="settings_import_later_button">Пазней</string>
|
||||
<string name="settings_importing">Імпарт налад…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">Каб мець магчымасць выкарыстоўваць акаўнт \"<xliff:g id="account">%s</xliff:g>\", вам неабходна ўвесці пароль для сервера.</item>
|
||||
<item quantity="few">Каб мець магчымасць выкарыстоўваць акаўнт \"<xliff:g id="account">%s</xliff:g>\", вам неабходна ўвесці паролі для сервера.</item>
|
||||
<item quantity="many">Каб мець магчымасць выкарыстоўваць акаўнт \"<xliff:g id="account">%s</xliff:g>\", вам неабходна ўвесці паролі для сервера.</item>
|
||||
<item quantity="other">Каб мець магчымасць выкарыстоўваць акаўнт \"<xliff:g id="account">%s</xliff:g>\", вам неабходна ўвесці паролі для сервера.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Пароль для сервера ўваходнай пошты</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Пароль для сервера выходнай пошты</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Выкарыстоўваць той жа пароль для сервера выходнай пошты</string>
|
||||
<string name="settings_import_server_name_format">Назва сервера: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">Каб выкарыстоўваць гэты акаўнт электроннай пошты, вам трэба ўвайсці і даць праграме доступ да вашай электроннай пошты.</string>
|
||||
<string name="settings_import_oauth_sign_in">Увайсці</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Увайсці з дапамогай Google</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Аўтарызацыя скасаваная</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Не ўдалося выканаць аўтарызацыю праз наступную памылку: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">На дадзены момант OAuth 2.0 не падтрымліваецца гэтай службай.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">Праграме не ўдалося знайсці браўзер, каб даць доступ да вашага акаўнта.</string>
|
||||
<string name="settings_import_general_settings_item">Асноўныя налады</string>
|
||||
<string name="settings_import_pick_app_button">Імпартаваць з праграмы</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Імпартаваць з праграмы</string>
|
||||
<string name="settings_import_scan_qr_code_button">Сканаваць QR-код</string>
|
||||
<string name="settings_import_app_version_not_supported">Версія праграмы не падтрымліваецца.</string>
|
||||
</resources>
|
||||
44
feature/settings/import/src/main/res/values-bg/strings.xml
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Внасяне на настройки</string>
|
||||
<string name="settings_import_pick_document_button">Избор на файл</string>
|
||||
<string name="settings_import_button">Внасяне</string>
|
||||
<string name="settings_import_success_generic">Успешно импортирани настройки</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Моля, въведете пароли</string>
|
||||
<string name="settings_import_authorization_required">Моля, впишете се</string>
|
||||
<string name="settings_import_authorization_and_password_required">Моля, впишете се и въведете паролите си</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_failure">Импортирането на настройките не бе успешно</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_read_failure">Файлът за настройки не бе прочетен</string>
|
||||
<string name="settings_import_partial_failure">Импортирането на някои настройки не бе успешно</string>
|
||||
<string name="settings_import_status_success">Успешно импортиране</string>
|
||||
<string name="settings_import_status_password_required">Изисква се парола</string>
|
||||
<string name="settings_import_status_log_in_required">Необходимо е вписване</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_not_imported">Не се импортира</string>
|
||||
<string name="settings_import_status_error">Неуспешно импортиране</string>
|
||||
<string name="settings_import_later_button">По късно</string>
|
||||
<string name="settings_importing">Настройки на внасянето…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">За да можете да използвате профила \"<xliff:g id="account">%s</xliff:g>\" трябва да предоставите паролата на сървъра.</item>
|
||||
<item quantity="other">За да можете да използвате профила \"<xliff:g id="account">%s</xliff:g>\" трябва да предоставите паролите на сървъра.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Парола за входящ сървър</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Парола за изходящ сървър</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Използвай същата парола като на изходящия сървър</string>
|
||||
<string name="settings_import_server_name_format">Име на сървър: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">За да използвате този профил, трябва да се впишете и да разрешите на приложението достъп до имейлите си.</string>
|
||||
<string name="settings_import_oauth_sign_in">Вписване</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Вписване чрез Google</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Разрешение отменено</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Разрешаването се провали и даде следната грешка: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">OAuth 2.0 с този доставчик не се поддържа в момента.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">Приложението не успя да открие браузър, който да използва за разрешаване на достъп до акаунта Ви.</string>
|
||||
<string name="settings_import_general_settings_item">Общи настройки</string>
|
||||
<string name="settings_import_scan_qr_code_button">Сканиране на QR кода</string>
|
||||
<string name="settings_import_pick_app_button">Внасяне от приложението</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Внасяне от приложението</string>
|
||||
<string name="settings_import_app_version_not_supported">Тази версия не се поддържа.</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
16
feature/settings/import/src/main/res/values-br/strings.xml
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Enporzhiañ an arventennoù</string>
|
||||
<string name="settings_import_button">Enporzhiañ</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_importing">Oc’h enporzhiañ an arventennoù…</string>
|
||||
<string name="settings_import_general_settings_item">Arventennoù hollek</string>
|
||||
<string name="settings_import_pick_document_button">Dibab ur fichennaoueg</string>
|
||||
<string name="settings_import_failure">C\'hwitet eo enporzhiañ an arventennoù</string>
|
||||
<string name="settings_import_pick_app_button">Enporzhiañ diwar an arload</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Enporzhiañ diwar an arload</string>
|
||||
<string name="settings_import_success_generic">Enporzhiet eo bet an arventennoù gant berzh</string>
|
||||
<string name="settings_import_password_required">Lakait gerioù-tremen mar plij</string>
|
||||
<string name="settings_import_authorization_required">Kevreit mar plij</string>
|
||||
<string name="settings_import_authorization_and_password_required">Mar plij, kevreit ha lakait ho gerioù-tremen</string>
|
||||
</resources>
|
||||
37
feature/settings/import/src/main/res/values-bs/strings.xml
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_pick_document_button">Odaberi datoteku</string>
|
||||
<string name="settings_import_password_required">Molimo unesite lozinke</string>
|
||||
<string name="settings_import_authorization_required">Molimo prijavite se</string>
|
||||
<string name="settings_import_authorization_and_password_required">Molimo prijavite se i unesite lozinke</string>
|
||||
<string name="settings_import_failure">Uvoz postavki nije uspio</string>
|
||||
<string name="settings_import_read_failure">Čitanje datoteke postavki nije uspjelo</string>
|
||||
<string name="settings_import_status_success">Uspješno uvezeno</string>
|
||||
<string name="settings_import_status_password_required">Lozinka neophodna</string>
|
||||
<string name="settings_import_status_not_imported">Nije uvezeno</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">Da bi bili u mogućnosti da koristite račun \"<xliff:g id="account">%s</xliff:g>\" potrebno je da unesete lozinku.</item>
|
||||
<item quantity="few">Da bi bili u mogućnosti da koristite račun \"<xliff:g id="account">%s</xliff:g>\" potrebno je da unesete lozinke.</item>
|
||||
<item quantity="other">Da bi bili u mogućnosti da koristite račun \"<xliff:g id="account">%s</xliff:g>\" potrebno je da unesete lozinke.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Lozinka dolaznog servera</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Lozinka odlaznog servera</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Koristi istu loziku za odlazni server</string>
|
||||
<string name="settings_import_server_name_format">Naziv servera: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">Kako bi koristili ovaj mejl račun kroz K-9 Mail, morate se prijaviti i dodijeliti dozvolu aplikaciji da pristupi vašim mejlovima.</string>
|
||||
<string name="settings_import_oauth_sign_in">Prijavite se</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Prijavite se pomoću Google-a</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Autorizacija otkazana</string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">OAuth 2.0 trenutno nije podržan od strane ovog provajdera.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">Aplikacija nije pronašla pretraživač pomoću kojeg bi dali pristup vašem računu.</string>
|
||||
<string name="settings_import_title">Uvoz postavki</string>
|
||||
<string name="settings_import_button">Uvoz</string>
|
||||
<string name="settings_import_success_generic">Postavke su uspješno uvezene</string>
|
||||
<string name="settings_import_partial_failure">Uvoz nekih postavki nije uspio</string>
|
||||
<string name="settings_import_status_log_in_required">Prijavljivanje neophodno</string>
|
||||
<string name="settings_import_later_button">Kasnije</string>
|
||||
<string name="settings_import_status_error">Uvoz nije uspio</string>
|
||||
<string name="settings_importing">Uvozim postavke…</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Autorizacija neuspješna iz sljedećeg razloga: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_general_settings_item">Opšta podešavanja</string>
|
||||
</resources>
|
||||
45
feature/settings/import/src/main/res/values-ca/strings.xml
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Importa la configuració</string>
|
||||
<string name="settings_import_pick_document_button">Seleccioneu un fitxer</string>
|
||||
<string name="settings_import_button">Importar</string>
|
||||
<string name="settings_import_success_generic">La configuració s\'ha importat correctament</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Si us plau, escriviu les contrasenyes</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_required">Si us plau, inicieu la sessió</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_and_password_required">Si us plau, inicieu la sessió i proporcioneu les contrasenyes</string>
|
||||
<string name="settings_import_failure">Ha fallat la importació de la configuració</string>
|
||||
<string name="settings_import_read_failure">Ha fallat llegir els fitxer de configuració</string>
|
||||
<string name="settings_import_partial_failure">Ha fallat importar alguns paràmetres</string>
|
||||
<string name="settings_import_status_success">Importació correcta</string>
|
||||
<string name="settings_import_status_password_required">Cal la contrasenya</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_log_in_required">Cal iniciar la sessió</string>
|
||||
<string name="settings_import_status_not_imported">No importat</string>
|
||||
<string name="settings_import_status_error">Ha fallat la importació</string>
|
||||
<string name="settings_import_later_button">Més tard</string>
|
||||
<string name="settings_importing">S\'està important la configuració…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">Per poder fer servir el compte <xliff:g id="account">%s</xliff:g> heu de proporcionar la contrasenya del servidor.</item>
|
||||
<item quantity="many">Per poder fer servir el compte <xliff:g id="account">%s</xliff:g> heu de proporcionar les contrasenyes del servidor.</item>
|
||||
<item quantity="other">Per poder fer servir el compte <xliff:g id="account">%s</xliff:g> heu de proporcionar les contrasenyes del servidor.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Contrasenya del servidor d\'entrada</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Contrasenya del servidor de sortida</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Feu servir la mateixa contrasenya per al servidor de sortida</string>
|
||||
<string name="settings_import_server_name_format">Nom del servidor: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">Per fer servir aquest compte de correu electrònic, heu d\'iniciar-hi la sessió i concedir a l\'aplicació accés als vostres correus electrònics.</string>
|
||||
<string name="settings_import_oauth_sign_in">Inicia la sessió</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Inicia la sessió amb Google</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Autorització cancel·lada</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">L\'autorització ha fallat amb l\'error següent: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">Actualment, OAuth 2.0 no és compatible amb aquest proveïdor.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">L\'aplicació no ha trobat cap navegador per utilitzar-lo per concedir accés al compte.</string>
|
||||
<string name="settings_import_general_settings_item">Configuració general</string>
|
||||
<string name="settings_import_pick_app_button">Importar des de l\'aplicació</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Importar des de l\'aplicació</string>
|
||||
<string name="settings_import_scan_qr_code_button">Escaneja el codi QR</string>
|
||||
<string name="settings_import_app_version_not_supported">La versió de l\'aplicació no és compatible.</string>
|
||||
</resources>
|
||||
40
feature/settings/import/src/main/res/values-co/strings.xml
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Impurtà i parametri</string>
|
||||
<string name="settings_import_pick_document_button">Selezziunà un schedariu</string>
|
||||
<string name="settings_import_button">Impurtà</string>
|
||||
<string name="settings_import_success_generic">I parametri sò stati impurtati currettamente</string>
|
||||
<string name="settings_import_authorization_required">Cunnittitevi</string>
|
||||
<string name="settings_import_authorization_and_password_required">Cunnittitevi è stampittate e parolle d’intesa</string>
|
||||
<string name="settings_import_failure">Fiascu per impurtà i parametri</string>
|
||||
<string name="settings_import_read_failure">Fiascu di lettura di u schedariu di parametri</string>
|
||||
<string name="settings_import_partial_failure">Fiascu per impurtà certi parametri</string>
|
||||
<string name="settings_import_status_success">Impurtatu currettamente</string>
|
||||
<string name="settings_import_status_password_required">A parolla d’intesa hè richiesta</string>
|
||||
<string name="settings_import_status_not_imported">Micca impurtatu</string>
|
||||
<string name="settings_import_status_error">Fiascu à l’impurtazione</string>
|
||||
<string name="settings_import_later_button">Dopu</string>
|
||||
<string name="settings_importing">Impurtazione di i parametri…</string>
|
||||
<string name="settings_import_incoming_server_password_hint">Parolla d’intesa di u servitore d’entrata</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Parolla d’intesa di u servitore d’esciuta</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Impiegà a listessa parolla d’intesa per u servitore d’esciuta</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">L’appiecazione ùn pò micca truvà un navigatore à impiegà per cuncede l’accessu à u vostru contu.</string>
|
||||
<string name="settings_import_general_settings_item">Parametri generali</string>
|
||||
<string name="settings_import_password_required">Stampittate e parolle d’intesa</string>
|
||||
<string name="settings_import_status_log_in_required">A cunnessione hè richiesta</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">Per pudè impiegà u contu \"<xliff:g id="account">%s</xliff:g>\" ci vole à pruvede a parolla d’intesa di u servitore.</item>
|
||||
<item quantity="other">Per pudè impiegà u contu \"<xliff:g id="account">%s</xliff:g>\" ci vole à pruvede e parolle d’intesa di u servitore.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_server_name_format">Nome di u servitore : <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">Per impiegà stu contu, ci vole à cunnettesi è cuncede à l’appiecazione l’accessu à a vostra messaghjeria.</string>
|
||||
<string name="settings_import_oauth_sign_in">Cunnettesi</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Cunnettesi cù Google</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Autorizazione abbandunata</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Fiascu di l’autorizazione cù quellu sbagliu : <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">Attualmente, OAuth 2.0 ùn hè micca accettatu cù stu furnidore.</string>
|
||||
<string name="settings_import_pick_app_button">Impurtà da l’appiecazione</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Impurtà da l’appiecazione</string>
|
||||
<string name="settings_import_scan_qr_code_button">Leghje un codice QR</string>
|
||||
<string name="settings_import_app_version_not_supported">A versione di l’appiecazione ùn hè micca accettata.</string>
|
||||
</resources>
|
||||
46
feature/settings/import/src/main/res/values-cs/strings.xml
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Importovat nastavení</string>
|
||||
<string name="settings_import_pick_document_button">Vybrat soubor</string>
|
||||
<string name="settings_import_button">Import</string>
|
||||
<string name="settings_import_success_generic">Nastavení úspěšně importována</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Zadejte hesla</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_required">Přihlaste se</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_and_password_required">Přihlaste se a zadejte hesla</string>
|
||||
<string name="settings_import_failure">Nepodařilo se importovat nastavení</string>
|
||||
<string name="settings_import_read_failure">Nepodařilo se číst soubor s nastaveními</string>
|
||||
<string name="settings_import_partial_failure">Nepodařilo se naimportovat některá nastavení</string>
|
||||
<string name="settings_import_status_success">Úspěšně naimportováno</string>
|
||||
<string name="settings_import_status_password_required">Vyžadováno hesl</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_log_in_required">Je vyžadováno přihlášení se</string>
|
||||
<string name="settings_import_status_not_imported">Nenaimportováno</string>
|
||||
<string name="settings_import_status_error">Nezdar při importu</string>
|
||||
<string name="settings_import_later_button">Později</string>
|
||||
<string name="settings_importing">Importování nastavení…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">Abyste mohli používat účet „<xliff:g id="account">%s</xliff:g>“, je třeba zadat heslo k serveru.</item>
|
||||
<item quantity="few">Abyste mohli používat účty „<xliff:g id="account">%s</xliff:g>“, je třeba zadat heslo k serveru.</item>
|
||||
<item quantity="many">Abyste mohli používat účty „<xliff:g id="account">%s</xliff:g>“, je třeba zadat heslo k serveru.</item>
|
||||
<item quantity="other">Abyste mohli používat účty „<xliff:g id="account">%s</xliff:g>“, je třeba zadat heslo k serveru.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Heslo pro server pro příchozí</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Heslo pro server pro odchozí</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Použít stejné heslo jako pro server pro odchozí</string>
|
||||
<string name="settings_import_server_name_format">Název serveru: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">Pokud chcete tento e-mailový účet používat, je třeba se přihlásit a udělit přístup k e-mailům.</string>
|
||||
<string name="settings_import_oauth_sign_in">Přihlásit se</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Přihlásit se prostřednictvím Google</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Ověření zrušeno</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Ověření se nezdařilo s následující chybou: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">OAuth 2.0 není v současnosti tímto poskytovatelem podporováno.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">Aplikaci se nepodařilo najít webový prohlížeč, který použít pro udělení přístupu k vašemu účtu.</string>
|
||||
<string name="settings_import_general_settings_item">Hlavní nastavení</string>
|
||||
<string name="settings_import_pick_app_button">Importovat z aplikace</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Importovat z aplikace</string>
|
||||
<string name="settings_import_scan_qr_code_button">Naskenovat QR kód</string>
|
||||
<string name="settings_import_app_version_not_supported">Verze aplikace není podporována.</string>
|
||||
</resources>
|
||||
48
feature/settings/import/src/main/res/values-cy/strings.xml
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Mewnforio gosodiadau</string>
|
||||
<string name="settings_import_pick_document_button">Dewis ffeil</string>
|
||||
<string name="settings_import_button">Mewnforio</string>
|
||||
<string name="settings_import_success_generic">Mewnforiwyd gosodiadau yn llwyddiannus</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Rho gyfrineiriau</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_required">Mewngofnodwch</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_and_password_required">Mewngofnodwch a rhoi cyfrineiriau</string>
|
||||
<string name="settings_import_failure">Methwyd â mewnforio gosodiadau</string>
|
||||
<string name="settings_import_read_failure">Methwyd â darllen ffeil gosodiadau</string>
|
||||
<string name="settings_import_partial_failure">Methwyd â mewnforio rhai gosodiadau</string>
|
||||
<string name="settings_import_status_success">Mewnforiwyd yn llwyddiannus</string>
|
||||
<string name="settings_import_status_password_required">Angen cyfrinair</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_log_in_required">Angen mewngofnodi</string>
|
||||
<string name="settings_import_status_not_imported">Heb mewnforio</string>
|
||||
<string name="settings_import_status_error">Gwall mewnforio</string>
|
||||
<string name="settings_import_later_button">Yn hwyrach</string>
|
||||
<string name="settings_importing">Yn mewnforio gosodiadau…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="zero">I fedru defnyddio\'r cyfrif \"<xliff:g id="account">%s</xliff:g>\" mae\'n rhaid rhoi cyfrinair y gweinydd.</item>
|
||||
<item quantity="one">I fedru defnyddio\'r cyfrif \"<xliff:g id="account">%s</xliff:g>\" mae\'n rhaid rhoi cyfrinair y gweinydd.</item>
|
||||
<item quantity="two">I fedru defnyddio\'r cyfrif \"<xliff:g id="account">%s</xliff:g>\" mae\'n rhaid rhoi cyfrineiriau\'r gweinydd.</item>
|
||||
<item quantity="few">I fedru defnyddio\'r cyfrif \"<xliff:g id="account">%s</xliff:g>\" mae\'n rhaid rhoi cyfrineiriau\'r gweinydd.</item>
|
||||
<item quantity="many">I fedru defnyddio\'r cyfrif \"<xliff:g id="account">%s</xliff:g>\" mae\'n rhaid rhoi cyfrineiriau\'r gweinydd.</item>
|
||||
<item quantity="other">I fedru defnyddio\'r cyfrif \"<xliff:g id="account">%s</xliff:g>\" mae\'n rhaid rhoi cyfrineiriau\'r gweinydd.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Cyfrinair gweinydd derbyn</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Cyfrinair gweinydd anfon</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Defnyddio\'r un cyfrinair i\'r gweinydd anfon</string>
|
||||
<string name="settings_import_server_name_format">Enw gweinydd: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">I ddefnyddio\'r cyfrif e-bost hwn, rhaid mewngofnodi a rhoi caniatâd i\'r ap gael mynediad at dy negeseuon e-bost.</string>
|
||||
<string name="settings_import_oauth_sign_in">Mewngofnodi</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Mewngofnodi gyda Google</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Diddymwyd awdurdodi</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Methodd awdurdodi gyda\'r gwall hwn: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">Ni chefnogir OAuth 2.0 ar hyn o bryd gyda\'r darparydd hwn.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">Methodd yr ap hwn ddod o hyd i borwr i\'w ddefnyddio i roi mynediad at dy gyfrif.</string>
|
||||
<string name="settings_import_general_settings_item">Gosodiadau cyffredinol</string>
|
||||
<string name="settings_import_scan_qr_code_button">Sganiwch y cod QR</string>
|
||||
<string name="settings_import_pick_app_button">Mewnforio o\'r ap</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Mewnforio o\'r ap</string>
|
||||
<string name="settings_import_app_version_not_supported">Nid yw\'r fersiwn yma o\'r ap yn cael ei gefnogi.</string>
|
||||
</resources>
|
||||
35
feature/settings/import/src/main/res/values-da/strings.xml
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Importér opsætning</string>
|
||||
<string name="settings_import_pick_document_button">Vælg fil</string>
|
||||
<string name="settings_import_button">Importer</string>
|
||||
<string name="settings_import_success_generic">Importerede indstillinger</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Indtast venligst kodeord</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_required">Log venligst ind</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_and_password_required">Log ind og indtast adgangskoder</string>
|
||||
<string name="settings_import_failure">Importen af indstillinger fejlede</string>
|
||||
<string name="settings_import_read_failure">Indlæsning af fil med indstillinger mislykkedes</string>
|
||||
<string name="settings_import_partial_failure">Import af nogle indstillinger fejlede</string>
|
||||
<string name="settings_import_status_success">Importeret korrrekt</string>
|
||||
<string name="settings_import_status_password_required">Kodeord påkrævet</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_log_in_required">Log-ind er påkrævet</string>
|
||||
<string name="settings_import_status_not_imported">Ikke importeret</string>
|
||||
<string name="settings_import_status_error">Import fejlede</string>
|
||||
<string name="settings_import_later_button">Senere</string>
|
||||
<string name="settings_importing">Importerer opsætning…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">For at bruge kontoen \"<xliff:g id="account">%s</xliff:g>\" er du nødt til at angive adgangskoden for serveren.</item>
|
||||
<item quantity="other">For at bruge kontoen \"<xliff:g id="account">%s</xliff:g>\" er du nødt til at angive adgangskoderne for serveren.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Indgående server adgangskode</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Udgående server adgangskode</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Brug samme adgangskode for udgående server</string>
|
||||
<string name="settings_import_server_name_format">Server navn: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_sign_in">Log ind</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Log ind med Google</string>
|
||||
<string name="settings_import_general_settings_item">Generelt</string>
|
||||
</resources>
|
||||
44
feature/settings/import/src/main/res/values-de/strings.xml
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Einstellungen importieren</string>
|
||||
<string name="settings_import_pick_document_button">Datei auswählen</string>
|
||||
<string name="settings_import_button">Importieren</string>
|
||||
<string name="settings_import_success_generic">Einstellungen erfolgreich importiert</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Bitte gib die Passwörter ein</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_required">Bitte melde dich an</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_and_password_required">Bitte melde dich an und gib deine Passwörter ein</string>
|
||||
<string name="settings_import_failure">Einstellungen konnten nicht importiert werden</string>
|
||||
<string name="settings_import_read_failure">Einstellungsdatei konnte nicht gelesen werden</string>
|
||||
<string name="settings_import_partial_failure">Einige Einstellungen konnten nicht importiert werden</string>
|
||||
<string name="settings_import_status_success">Erfolgreich importiert</string>
|
||||
<string name="settings_import_status_password_required">Passwort erforderlich</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_log_in_required">Anmeldung erforderlich</string>
|
||||
<string name="settings_import_status_not_imported">Nicht importiert</string>
|
||||
<string name="settings_import_status_error">Importfehler</string>
|
||||
<string name="settings_import_later_button">Später</string>
|
||||
<string name="settings_importing">Einstellungen werden importiert…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">Um das Konto \"<xliff:g id="account">%s</xliff:g>\" nutzen zu können, musst du das Serverpasswort eingeben.</item>
|
||||
<item quantity="other">Um das Konto \"<xliff:g id="account">%s</xliff:g>\" nutzen zu können, musst du die Serverpasswörter eingeben.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Passwort des Posteingangsservers</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Passwort des Postausgangsservers</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Gleiches Passwort für den Postausgangsserver verwenden</string>
|
||||
<string name="settings_import_server_name_format">Servername: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">Um dieses E-Mail-Konto zu verwenden, musst du dich anmelden und der App Zugriff auf deine E-Mails gewähren.</string>
|
||||
<string name="settings_import_oauth_sign_in">Anmelden</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Mit Google anmelden</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Autorisierung aufgehoben</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Autorisierung ist aufgrund des folgenden Fehlers fehlgeschlagen: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">OAuth 2.0 wird von diesem Anbieter derzeit nicht unterstützt.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">Die App konnte keinen Browser finden, der für den Zugriff auf dein Konto verwendet werden kann.</string>
|
||||
<string name="settings_import_general_settings_item">Allgemeine Einstellungen</string>
|
||||
<string name="settings_import_pick_app_button">Aus App importieren</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Aus App importieren</string>
|
||||
<string name="settings_import_scan_qr_code_button">QR-Code scannen</string>
|
||||
<string name="settings_import_app_version_not_supported">App-Version nicht unterstützt.</string>
|
||||
</resources>
|
||||
44
feature/settings/import/src/main/res/values-el/strings.xml
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Εισαγωγή ρυθμίσεων</string>
|
||||
<string name="settings_import_pick_document_button">Επιλογή αρχείου</string>
|
||||
<string name="settings_import_button">Εισαγωγή</string>
|
||||
<string name="settings_import_success_generic">Οι ρυθμίσεις έχουν εισαχθεί με επιτυχία</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Εισαγάγετε τους κωδικούς πρόσβασης</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_required">Πραγματοποιήστε σύνδεση</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_and_password_required">Πραγματοποιήστε σύνδεση και εισαγάγετε τους κωδικούς πρόσβασης</string>
|
||||
<string name="settings_import_failure">Αποτυχία εισαγωγής ρυθμίσεων</string>
|
||||
<string name="settings_import_read_failure">Αποτυχία ανάγνωσης αρχείου ρυθμίσεων</string>
|
||||
<string name="settings_import_partial_failure">Αποτυχία εισαγωγής ορισμένων ρυθμίσεων</string>
|
||||
<string name="settings_import_status_success">Επιτυχής εισαγωγή</string>
|
||||
<string name="settings_import_status_password_required">Απαιτείται κωδικός πρόσβασης</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_log_in_required">Απαιτείται σύνδεση</string>
|
||||
<string name="settings_import_status_not_imported">Δεν έχει εισαχθεί</string>
|
||||
<string name="settings_import_status_error">Αποτυχία εισαγωγής</string>
|
||||
<string name="settings_import_later_button">Αργότερα</string>
|
||||
<string name="settings_importing">Εισαγωγή ρυθμίσεων…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">Για να μπορέσετε να χρησιμοποιήσετε τον λογαριασμό \"<xliff:g id="account">%s</xliff:g>\", θα χρειαστεί να παράσχετε τον κωδικό πρόσβασης του διακομιστή.</item>
|
||||
<item quantity="other">Για να μπορέσετε να χρησιμοποιήσετε τον λογαριασμό \"<xliff:g id="account">%s</xliff:g>\", θα χρειαστεί να παράσχετε τους κωδικούς πρόσβασης του διακομιστή.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Κωδικός πρόσβασης διακομιστή εισερχομένων</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Κωδικός πρόσβασης διακομιστή εξερχομένων</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Χρήση του ίδιου κωδικού πρόσβασης για τον διακομιστή εξερχομένων</string>
|
||||
<string name="settings_import_server_name_format">Όνομα διακομιστή: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">Για να χρησιμοποιήσετε αυτόν τον λογαριασμό email, θα χρειαστεί να πραγματοποιήσετε σύνδεση και να παραχωρήσετε στην εφαρμογή πρόσβαση στα email σας.</string>
|
||||
<string name="settings_import_oauth_sign_in">Σύνδεση</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Σύνδεση μέσω Google</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Η ταυτοποίηση ακυρώθηκε</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Η ταυτοποίηση απέτυχε με το εξής σφάλμα: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">Το OAuth 2.0 δεν υποστηρίζεται προς το παρόν από αυτόν τον πάροχο.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">Η εφαρμογή δεν μπόρεσε να εντοπίσει κάποιο πρόγραμμα περιήγησης για την παραχώρηση πρόσβασης στον λογαριασμό σας.</string>
|
||||
<string name="settings_import_general_settings_item">Γενικές ρυθμίσεις</string>
|
||||
<string name="settings_import_scan_qr_code_button">Σαρώστε τον κωδικό QR</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Εισαγωγή από εφαρμογή</string>
|
||||
<string name="settings_import_pick_app_button">Εισαγωγή από εφαρμογή</string>
|
||||
<string name="settings_import_app_version_not_supported">Η έκδοση της εφαρμογής δεν υποστηρίζεται.</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Import settings</string>
|
||||
<string name="settings_import_pick_document_button">Select file</string>
|
||||
<string name="settings_import_button">Import</string>
|
||||
<string name="settings_import_success_generic">Settings successfully imported</string>
|
||||
<string name="settings_import_password_required">Please enter passwords</string>
|
||||
<string name="settings_import_authorization_required">Please sign in</string>
|
||||
<string name="settings_import_authorization_and_password_required">Please sign in and enter passwords</string>
|
||||
<string name="settings_import_failure">Failed to import settings</string>
|
||||
<string name="settings_import_read_failure">Failed to read settings file</string>
|
||||
<string name="settings_import_partial_failure">Failed to import some settings</string>
|
||||
<string name="settings_import_status_success">Imported successfully</string>
|
||||
<string name="settings_import_status_password_required">Password required</string>
|
||||
<string name="settings_import_status_log_in_required">Sign-in required</string>
|
||||
<string name="settings_import_status_not_imported">Not imported</string>
|
||||
<string name="settings_import_status_error">Import failure</string>
|
||||
<string name="settings_import_later_button">Later</string>
|
||||
<string name="settings_importing">Importing settings…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">To be able to use the account \"<xliff:g id="account">%s</xliff:g>\" you need to provide the server password.</item>
|
||||
<item quantity="other">To be able to use the account \"<xliff:g id="account">%s</xliff:g>\" you need to provide the server passwords.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Incoming server password</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Outgoing server password</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Use same password for outgoing server</string>
|
||||
<string name="settings_import_server_name_format">Server name: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">To use this email account with K-9 Mail, you need to sign in and grant the app access to your emails.</string>
|
||||
<string name="settings_import_oauth_sign_in">Sign in</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Sign in with Google</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Authorisation cancelled</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Authorisation failed with the following error: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">OAuth 2.0 is currently not supported with this provider.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">The app couldn\'t find a browser to use for granting access to your account.</string>
|
||||
<string name="settings_import_general_settings_item">General settings</string>
|
||||
<string name="settings_import_scan_qr_code_button">Scan QR code</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
44
feature/settings/import/src/main/res/values-eo/strings.xml
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Enporti agordojn</string>
|
||||
<string name="settings_import_pick_document_button">Elekti dosieron</string>
|
||||
<string name="settings_import_button">Enporti</string>
|
||||
<string name="settings_import_success_generic">Sukcese enportis agordojn</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Bonvolu entajpi pasvortojn</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_failure">Fiaskis enporti agordojn</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_read_failure">Fiaskis legi dosieron kun agordoj</string>
|
||||
<string name="settings_import_partial_failure">Fiaskis enporti iujn agordojn</string>
|
||||
<string name="settings_import_status_success">Sukcesis enporti</string>
|
||||
<string name="settings_import_status_password_required">Postulas pasvorton</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_not_imported">Ne enportita</string>
|
||||
<string name="settings_import_status_error">Fiaskis enporti</string>
|
||||
<string name="settings_import_later_button">Poste</string>
|
||||
<string name="settings_importing">Enportado de agordoj…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">Por uzi la konton “<xliff:g id="account">%s</xliff:g>” vi devas enigi pasvorton.</item>
|
||||
<item quantity="other">Por uzi la konton “<xliff:g id="account">%s</xliff:g>” vi devas enigi pasvortojn.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Pasvorto de enira servo</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Pasvorto de elira servo</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Uzi la saman pasvorton por elira servilo</string>
|
||||
<string name="settings_import_server_name_format">Nomo de servilo: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_general_settings_item">Ĝeneralaj agordoj</string>
|
||||
<string name="settings_import_oauth_sign_in">Ensaluti</string>
|
||||
<string name="settings_import_pick_app_button">Enporti el apo</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Enport el apo</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Ensaluti per Google</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Permeso nuligita</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Permeso fiaskis kun tiu ĉi eraro: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">La apo ne povis trovi retumilon por permesi alireblon al via konto.</string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">OAuth 2.0 estas nune ne subtenata kun tiu ĉi provizanto.</string>
|
||||
<string name="settings_import_scan_qr_code_button">Skani QR kodon</string>
|
||||
<string name="settings_import_authorization_required">Bonvolu ensaluti</string>
|
||||
<string name="settings_import_authorization_and_password_required">Bonvolu ensaluti kaj enigi viajn pasvortojn</string>
|
||||
<string name="settings_import_status_log_in_required">Ensalutado postulata</string>
|
||||
<string name="settings_import_app_version_not_supported">Versio apon ne subtenata.</string>
|
||||
<string name="settings_import_oauth_description">Por uzi tiun ĉi retpoŝtkonton, vi bezonas ensaluti kaj doni al la apo alireblon al viaj retmesaĝoj.</string>
|
||||
</resources>
|
||||
45
feature/settings/import/src/main/res/values-es/strings.xml
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Importar ajustes</string>
|
||||
<string name="settings_import_pick_document_button">Seleccionar archivo</string>
|
||||
<string name="settings_import_button">Importar</string>
|
||||
<string name="settings_import_success_generic">Los ajustes se han importado correctamente</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Introduce tus contraseñas</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_required">Iniciar sesión</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_and_password_required">Inicia sesión escribiendo tu contraseña</string>
|
||||
<string name="settings_import_failure">La importación de ajustes ha fallado</string>
|
||||
<string name="settings_import_read_failure">Fallo al leer el archivo de ajustes</string>
|
||||
<string name="settings_import_partial_failure">La importación de algunos ajustes ha fallado</string>
|
||||
<string name="settings_import_status_success">Importado correctamente</string>
|
||||
<string name="settings_import_status_password_required">Se necesita una contraseña</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_log_in_required">Es necesario iniciar sesión</string>
|
||||
<string name="settings_import_status_not_imported">No importado</string>
|
||||
<string name="settings_import_status_error">La importación ha fallado</string>
|
||||
<string name="settings_import_later_button">Más tarde</string>
|
||||
<string name="settings_importing">Importando ajustes…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">Para poder usar la cuenta \"<xliff:g id="account">%s</xliff:g>\" es necesario proporcionar la contraseña del servidor.</item>
|
||||
<item quantity="many">Para poder usar la cuenta \"<xliff:g id="account">%s</xliff:g>\" es necesario proporcionar las contraseñas del servidor.</item>
|
||||
<item quantity="other">Para poder usar la cuenta \"<xliff:g id="account">%s</xliff:g>\" es necesario proporcionar las contraseñas del servidor.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Contraseña del servidor de correo entrante</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Contraseña del servidor de correo saliente</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Usar la misma contraseña para el servidor de correo saliente</string>
|
||||
<string name="settings_import_server_name_format">Nombre del servidor: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">Para utilizar esta cuenta de correo electrónico, tienes que iniciar sesión y conceder a la aplicación acceso a tus correos electrónicos.</string>
|
||||
<string name="settings_import_oauth_sign_in">Iniciar sesión</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Iniciar sesión con Google</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">See ha cancelado la autorización</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">La autorización ha fallado con el error: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">El servidor no parece que sea compatible con OAuth 2.0.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">La aplicación no ha encontrado ningún navegador que se pueda utilizar para iniciar sesión en tu cuenta.</string>
|
||||
<string name="settings_import_general_settings_item">Ajustes generales</string>
|
||||
<string name="settings_import_pick_app_button">Importar desde la aplicación</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Importar desde la aplicación</string>
|
||||
<string name="settings_import_scan_qr_code_button">Escanear el código QR</string>
|
||||
<string name="settings_import_app_version_not_supported">Versión de la aplicación no compatible.</string>
|
||||
</resources>
|
||||
44
feature/settings/import/src/main/res/values-et/strings.xml
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Impordi seadistused</string>
|
||||
<string name="settings_import_pick_document_button">Vali fail</string>
|
||||
<string name="settings_import_button">Impordi</string>
|
||||
<string name="settings_import_success_generic">Seadistused on edukalt imporditud</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Palun sisesta salasõnad</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_required">Palun logi sisse</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_and_password_required">Palun logi sisse ja sisesta salasõnad</string>
|
||||
<string name="settings_import_failure">Seadistuste importimine ei õnnestunud</string>
|
||||
<string name="settings_import_read_failure">Seadistuste faili lugemine ei õnnestunud</string>
|
||||
<string name="settings_import_partial_failure">Mõnede seadistuste importimine ei õnnestunud</string>
|
||||
<string name="settings_import_status_success">Importimine õnnestus</string>
|
||||
<string name="settings_import_status_password_required">Salasõna on vajalik</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_log_in_required">Sisselogimine on nõutav</string>
|
||||
<string name="settings_import_status_not_imported">Ei imporditud</string>
|
||||
<string name="settings_import_status_error">Importimise viga</string>
|
||||
<string name="settings_import_later_button">Hiljem</string>
|
||||
<string name="settings_importing">Seadistused on importimisel…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">„<xliff:g id="account">%s</xliff:g>“ konto kasutamiseks palun sisesta serveri salasõna.</item>
|
||||
<item quantity="other">„<xliff:g id="account">%s</xliff:g>“ konto kasutamiseks palun sisesta serveri salasõnad.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Saabuvaid kirju teenindava serveri salasõna</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Väljuvaid kirju teenindava serveri salasõna</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Kasuta sama salasõna ka väljuvate kirjade serveri tarbeks</string>
|
||||
<string name="settings_import_server_name_format">Serveri nimi: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">Kui soovid kasutada seda e-posti teenust, siis logi teenusesse ja anna sellele rakendusele õigus lugeda e-kirju.</string>
|
||||
<string name="settings_import_oauth_sign_in">Logi sisse</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Logi sisse kasutades Google\'i teenuseid</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Autentimine on katkenud</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Autentimine ei õnnestunud ja tekkis järgnev viga: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">See teenusepakkuja ei võimalda OAuth 2.0 kasutamist.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">Rakendus ei suutnud tuvastada veebibrauserit, mida saaks sinu kontole ligipääsu lubamiseks kasutada.</string>
|
||||
<string name="settings_import_general_settings_item">Üldised seadistused</string>
|
||||
<string name="settings_import_pick_app_button">Impordi rakendusest</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Impordi rakendusest</string>
|
||||
<string name="settings_import_scan_qr_code_button">Skaneeri QR-koodi</string>
|
||||
<string name="settings_import_app_version_not_supported">Sellest rakenduse versioonist pole importimine toetatud.</string>
|
||||
</resources>
|
||||
44
feature/settings/import/src/main/res/values-eu/strings.xml
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Inportatu ezarpenak</string>
|
||||
<string name="settings_import_pick_document_button">Hautatu fitxategia</string>
|
||||
<string name="settings_import_button">Inportatu</string>
|
||||
<string name="settings_import_success_generic">Ezarpenak ongi inportatu dira</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Sartu pasahitzak</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_required">Mesedez saioa hasi</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_and_password_required">Mesedez saioa hasi eta sartu pasahitza</string>
|
||||
<string name="settings_import_failure">Ezin izan dira ezarpenak inportatu</string>
|
||||
<string name="settings_import_read_failure">Ezin izan da ezarpenen fitxategia irakurri</string>
|
||||
<string name="settings_import_partial_failure">Ezin izan dira ezarpen batzuk inportatu</string>
|
||||
<string name="settings_import_status_success">Ongi inportatuta</string>
|
||||
<string name="settings_import_status_password_required">Pasahitza derrigorrezkoa</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_log_in_required">Saio-haztea beharrezkoa</string>
|
||||
<string name="settings_import_status_not_imported">Inportatu gabe</string>
|
||||
<string name="settings_import_status_error">Inportazio hutsegitea</string>
|
||||
<string name="settings_import_later_button">Geroago</string>
|
||||
<string name="settings_importing">Ezarpenak inportatzen…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">\"<xliff:g id="account">%s</xliff:g>\" kontua erabili ahal izateko zerbitzari-pasahitza eman behar duzu.</item>
|
||||
<item quantity="other">\"<xliff:g id="account">%s</xliff:g>\" kontua erabili ahal izateko zerbitzari-pasahitzak eman behar dituzu.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Sarrerako zerbitzariaren pasahitza</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Irteerako zerbitzariaren pasahitza</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Erabili pasahitz bera irteera zerbitzariarentzat</string>
|
||||
<string name="settings_import_server_name_format">Zerbitzari-izena: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">Posta elektronikoko kontu hau erabiltzeko, saioa hasi eta aplikazioari zure mezu elektronikoetarako sarbidea eman behar diozu.</string>
|
||||
<string name="settings_import_oauth_sign_in">Saioa hasi</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Saioa hasi Googlerekin</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">baimena bertan behera utzi da</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Baimenak huts egin du errore honekin: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">OAuth 2.0 une honetan ez dago hornitzaile honekin onartuta.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">Aplikazioak ezin izan du zure konturako sarbidea erabiltzeko arakatzailerik aurkitu.</string>
|
||||
<string name="settings_import_general_settings_item">Ezarpen orokorrak</string>
|
||||
<string name="settings_import_pick_app_button">Inportatu aplikaziotik</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Inportatu aplikaziotik</string>
|
||||
<string name="settings_import_scan_qr_code_button">Eakaneatu QR kodea</string>
|
||||
<string name="settings_import_app_version_not_supported">Aplikazioaren bertsioa ez da onartzen.</string>
|
||||
</resources>
|
||||
44
feature/settings/import/src/main/res/values-fa/strings.xml
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">درونبرد تنظیمات</string>
|
||||
<string name="settings_import_pick_document_button">انتخاب پرونده</string>
|
||||
<string name="settings_import_button">درونبرد</string>
|
||||
<string name="settings_import_success_generic">درونبرد تنظیمات موفقیتآمیز بود</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">لطفاً گذرواژهها را وارد کنید</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_required">لطفا وارد شوید</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_and_password_required">لطفا وارد شوید و رمز را وارد کنید</string>
|
||||
<string name="settings_import_failure">درونبرد تنظیمات ناموفق بود</string>
|
||||
<string name="settings_import_read_failure">خواندن پروندهٔ تنظیمات ناموفق بود</string>
|
||||
<string name="settings_import_partial_failure">درونبرد برخی تنظیمات ناموفق بود</string>
|
||||
<string name="settings_import_status_success">درونبرد موفقیتآمیز بود</string>
|
||||
<string name="settings_import_status_password_required">گذرواژه لازم است</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_log_in_required">ورود نیاز است</string>
|
||||
<string name="settings_import_status_not_imported">درونبرد نشده</string>
|
||||
<string name="settings_import_status_error">شکست درونبرد</string>
|
||||
<string name="settings_import_later_button">بعداً</string>
|
||||
<string name="settings_importing">در حال درونبرد تنظیمات…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">برای اینکه بتوانید از حساب «<xliff:g id="account">%s</xliff:g>» استفاده کنید، باید گذرواژهٔ میزبان را ارائه نمایید.</item>
|
||||
<item quantity="other">برای اینکه بتوانید از حساب «<xliff:g id="account">%s</xliff:g>» استفاده کنید، باید گذرواژههای کارساز را ارائه نمایید.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">گذرواژهٔ کارساز ورودی</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">گذرواژهٔ کارساز خروجی</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">برای کارساز خروجی از همان گذرواژه استفاده کن</string>
|
||||
<string name="settings_import_server_name_format">نام کارساز:<xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">برای استفاده از این حساب باید وارد شده و اجازهٔ دسترسی به رایانامههایتان را به برنامه بدهید.</string>
|
||||
<string name="settings_import_oauth_sign_in">ورود</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">ورود با حساب گوگل</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">مجوزدهی لغو شد</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">مجوزدهی به علت این خطا ناتمام ماند: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">OAuth 2.0 فعلا توسط این ارائه دهنده پشتیبانی نمیشود.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">برنامه نمی تواند مرورگری را پیدا کند تا دسترسی به حسابتان را بگیرد.</string>
|
||||
<string name="settings_import_general_settings_item">تنظیمات کلی</string>
|
||||
<string name="settings_import_pick_app_button">درونریزی از برنامه</string>
|
||||
<string name="settings_import_pick_app_dialog_title">درونریزی از برنامه</string>
|
||||
<string name="settings_import_app_version_not_supported">نگارش برنامه پشتیبانی نمیشود.</string>
|
||||
<string name="settings_import_scan_qr_code_button">پویش رمزینه</string>
|
||||
</resources>
|
||||
44
feature/settings/import/src/main/res/values-fi/strings.xml
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Tuo asetukset</string>
|
||||
<string name="settings_import_pick_document_button">Valitse tiedosto</string>
|
||||
<string name="settings_import_button">Tuo</string>
|
||||
<string name="settings_import_success_generic">Asetusten tuonti onnistui</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Anna salasanat</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_required">Kirjaudu sisään</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_and_password_required">Kirjaudu sisään ja anna salasanat</string>
|
||||
<string name="settings_import_failure">Asetusten tuonti epäonnistui</string>
|
||||
<string name="settings_import_read_failure">Asetustiedoston lukeminen epäonnistui</string>
|
||||
<string name="settings_import_partial_failure">Joidenkin asetusten tuonti epäonnistui</string>
|
||||
<string name="settings_import_status_success">Tuonti onnistui</string>
|
||||
<string name="settings_import_status_password_required">Salasana vaaditaan</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_log_in_required">Sisäänkirjautuminen vaaditaan</string>
|
||||
<string name="settings_import_status_not_imported">Ei tuotu</string>
|
||||
<string name="settings_import_status_error">Tuontivirhe</string>
|
||||
<string name="settings_import_later_button">Myöhemmin</string>
|
||||
<string name="settings_importing">Tuodaan asetuksia…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">Jotta voit käyttää tiliä \"<xliff:g id="account">%s</xliff:g>\", sinun on annettava palvelimen salasana.</item>
|
||||
<item quantity="other">Jotta voit käyttää tiliä \"<xliff:g id="account">%s</xliff:g>\", sinun on annettava palvelimien salasanat.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Saapuvan postin palvelimen salasana</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Lähtevän postin palvelimen salasana</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Käytä samaa salasanaa lähtevälle palvelimelle</string>
|
||||
<string name="settings_import_server_name_format">Palvelimen nimi: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">Jotta voit käyttää tätä tiliä, sinun tulee kirjautua sisään ja antaa sovellukselle oikeus päästä sähköposteihisi.</string>
|
||||
<string name="settings_import_oauth_sign_in">Kirjaudu sisään</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Kirjaudu sisään Googlella</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Valtuutus peruttu</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Valtuutus epäonnistui, virhe: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">OAuth 2.0 ei ole tällä hetkellä tuettu tämän palvelutarjoajan kohdalla.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">Sovellus ei löytänyt selainta käytettäväksi pääsyn antamiseksi tälle tilille.</string>
|
||||
<string name="settings_import_general_settings_item">Yleiset asetukset</string>
|
||||
<string name="settings_import_app_version_not_supported">Sovelluksen versio ei ole tuettu.</string>
|
||||
<string name="settings_import_scan_qr_code_button">Skannaa QR-koodi</string>
|
||||
<string name="settings_import_pick_app_button">Tuo sovelluksesta</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Tuo sovelluksesta</string>
|
||||
</resources>
|
||||
45
feature/settings/import/src/main/res/values-fr/strings.xml
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Importer les paramètres</string>
|
||||
<string name="settings_import_pick_document_button">Sélectionner un fichier</string>
|
||||
<string name="settings_import_button">Importation</string>
|
||||
<string name="settings_import_success_generic">Les paramètres ont été importés</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Saisissez vos mots de passe</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_required">Connectez-vous</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_and_password_required">Connectez-vous et saisissez les mots de passe</string>
|
||||
<string name="settings_import_failure">Échec d’importation des paramètres</string>
|
||||
<string name="settings_import_read_failure">Échec de lecture du fichier de paramètres</string>
|
||||
<string name="settings_import_partial_failure">Échec d’importation de certains paramètres</string>
|
||||
<string name="settings_import_status_success">A été importé</string>
|
||||
<string name="settings_import_status_password_required">Le mot de passe est requis</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_log_in_required">La connexion est requise</string>
|
||||
<string name="settings_import_status_not_imported">N’a pas été importé</string>
|
||||
<string name="settings_import_status_error">Échec d’importation</string>
|
||||
<string name="settings_import_later_button">Plus tard</string>
|
||||
<string name="settings_importing">Importation des paramètres…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">Pour utiliser le compte « <xliff:g id="account">%s</xliff:g> », vous devez indiquer le mot de passe du serveur.</item>
|
||||
<item quantity="many">Pour utiliser le compte « <xliff:g id="account">%s</xliff:g> », vous devez indiquer les mots de passe des serveurs.</item>
|
||||
<item quantity="other">Pour utiliser le compte « <xliff:g id="account">%s</xliff:g> », vous devez indiquer les mots de passe des serveurs.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Mot de passe du serveur entrant</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Mot de passe du serveur sortant</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Utiliser le même mot de passe pour le serveur sortant</string>
|
||||
<string name="settings_import_server_name_format">Nom du serveur : <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">Pour utiliser ce compte de courriel, vous devez vous connecter et accorder à l’appli l’accès à vos courriels.</string>
|
||||
<string name="settings_import_oauth_sign_in">Connexion</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Connexion avec Google</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">L’autorisation a été annulée</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Échec d’autorisation avec l’erreur suivante :<xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">OAuth 2.0 n’est actuellement pas pris en charge par ce service.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">L’appli n’a pas trouvé de navigateur pour accorder l’accès à votre compte.</string>
|
||||
<string name="settings_import_general_settings_item">Paramètres généraux</string>
|
||||
<string name="settings_import_pick_app_button">Importer d’une appli</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Importer d’une appli</string>
|
||||
<string name="settings_import_scan_qr_code_button">Lire un code QR</string>
|
||||
<string name="settings_import_app_version_not_supported">La version de l’appli n’est pas prise en charge.</string>
|
||||
</resources>
|
||||
44
feature/settings/import/src/main/res/values-fy/strings.xml
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Ynstellingen ymportearje</string>
|
||||
<string name="settings_import_pick_document_button">Bestân selektearje</string>
|
||||
<string name="settings_import_button">Ymportearje</string>
|
||||
<string name="settings_import_success_generic">Ynstellingen mei sukses ymportearre</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Fier de wachtwurden yn</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_required">Oanmelde</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_and_password_required">Meld jo oan en fier it wachtwurd yn</string>
|
||||
<string name="settings_import_failure">Ynstellingen ymportearje mislearre</string>
|
||||
<string name="settings_import_read_failure">Lêzen fan ynstellingenbestân mislearre</string>
|
||||
<string name="settings_import_partial_failure">Ymportearjen fan guon ynstellingen mislearre</string>
|
||||
<string name="settings_import_status_success">Mei sukses ymportearre</string>
|
||||
<string name="settings_import_status_password_required">Wachtwurd fereaske</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_log_in_required">Oanmelden fereaske</string>
|
||||
<string name="settings_import_status_not_imported">Net ymportearre</string>
|
||||
<string name="settings_import_status_error">Ymportearjen mislearre</string>
|
||||
<string name="settings_import_later_button">Letter</string>
|
||||
<string name="settings_importing">Ynstellingen ymportearje…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">Om de account ‘<xliff:g id="account">%s</xliff:g>’ te brûken moatte jo it wachtwurd fan de server opjaan.</item>
|
||||
<item quantity="other">Om de account ‘<xliff:g id="account">%s</xliff:g>’ te brûken moatte jo de wachtwurden fan de server opjaan.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Wachtwurd ynkommende server</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Wachtwurd útgeande server</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Brûk itselde wachtwurd foar de útgeande server</string>
|
||||
<string name="settings_import_server_name_format">Servernamme: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">Om dizze e-mailaccount te brûken, moatte jo jo oanmelde om de app tagong te jaan ta jo e-mailberjochten.</string>
|
||||
<string name="settings_import_oauth_sign_in">Oanmelde</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Oanmelde mei Google</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Autorisaasje annulearre</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Autorisaasje is mislearre mei de folgjende flater: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">OAuth 2.0 wurdt op dit stuit net stipe troch dizze provider.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">Dizze app kin gjin browser fine. In browser is nedich om tagong te jaan ta jo account.</string>
|
||||
<string name="settings_import_general_settings_item">Algemiene ynstellingen</string>
|
||||
<string name="settings_import_pick_app_button">Ymportearje fan app út</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Ymportearje fan app út</string>
|
||||
<string name="settings_import_scan_qr_code_button">QR-koade scanne</string>
|
||||
<string name="settings_import_app_version_not_supported">App-ferzje net stipe.</string>
|
||||
</resources>
|
||||
43
feature/settings/import/src/main/res/values-ga/strings.xml
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Socruithe a allmhairiú</string>
|
||||
<string name="settings_import_button">Iompórtáil</string>
|
||||
<string name="settings_import_status_log_in_required">Tá síniú isteach ag teastáil</string>
|
||||
<string name="settings_import_status_not_imported">Gan iompórtáil</string>
|
||||
<string name="settings_import_status_error">Teip iompórtála</string>
|
||||
<string name="settings_import_later_button">Níos déanaí</string>
|
||||
<string name="settings_importing">Socruithe á n-iompórtáil…</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Cealaíodh an t-údarú</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Theip ar údarú leis an earráid seo a leanas: <xliff:g id="error"> %s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">Ní thacaítear le OAuth 2.0 leis an soláthraí seo faoi láthair.</string>
|
||||
<string name="settings_import_general_settings_item">Socruithe ginearálta</string>
|
||||
<string name="settings_import_pick_app_button">Iompórtáil ó aip</string>
|
||||
<string name="settings_import_pick_document_button">Roghnaigh comhad</string>
|
||||
<string name="settings_import_scan_qr_code_button">Scan an cód QR</string>
|
||||
<string name="settings_import_success_generic">D\'éirigh le hiompórtáil na socruithe</string>
|
||||
<string name="settings_import_authorization_required">Sínigh isteach le do thoil</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Iompórtáil ó aip</string>
|
||||
<string name="settings_import_password_required">Cuir isteach pasfhocail le do thoil</string>
|
||||
<string name="settings_import_authorization_and_password_required">Sínigh isteach agus cuir isteach pasfhocail</string>
|
||||
<string name="settings_import_failure">Theip ar iompórtáil na socruithe</string>
|
||||
<string name="settings_import_partial_failure">Theip ar iompórtáil roinnt socruithe</string>
|
||||
<string name="settings_import_status_password_required">Pasfhocal ag teastáil</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">Chun gur féidir leat an cuntas \"<xliff:g id="account">%s</xliff:g>\" a úsáid, ní mór duit pasfhocal an fhreastalaí a sholáthar.</item>
|
||||
<item quantity="two">Chun gur féidir leat an cuntas \"<xliff:g id="account">%s</xliff:g>\" a úsáid, ní mór duit pasfhocail an fhreastalaí a sholáthar.</item>
|
||||
<item quantity="few">Chun gur féidir leat an cuntas \"<xliff:g id="account">%s</xliff:g>\" a úsáid, ní mór duit pasfhocail an fhreastalaí a sholáthar.</item>
|
||||
<item quantity="many">Chun gur féidir leat an cuntas \"<xliff:g id="account">%s</xliff:g>\" a úsáid, ní mór duit pasfhocail an fhreastalaí a sholáthar.</item>
|
||||
<item quantity="other">Chun gur féidir leat an cuntas \"<xliff:g id="account">%s</xliff:g>\" a úsáid, ní mór duit pasfhocail an fhreastalaí a sholáthar.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_status_success">D\'éirigh le hiompórtáil</string>
|
||||
<string name="settings_import_read_failure">Theip ar an gcomhad socruithe a léamh</string>
|
||||
<string name="settings_import_incoming_server_password_hint">Pasfhocal freastalaí isteach</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Úsáid an pasfhocal céanna don fhreastalaí amach</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Pasfhocal freastalaí amach</string>
|
||||
<string name="settings_import_server_name_format">Ainm an fhreastalaí: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_sign_in">Sínigh isteach</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Sínigh isteach le Google</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">Níorbh fhéidir leis an aip brabhsálaí a aimsiú le húsáid chun rochtain a dheonú ar do chuntas.</string>
|
||||
<string name="settings_import_oauth_description">Chun an cuntas ríomhphoist seo a úsáid, ní mór duit síniú isteach agus rochtain a thabhairt don aip ar do ríomhphoist.</string>
|
||||
<string name="settings_import_app_version_not_supported">Ní thacaítear leis an leagan aipe.</string>
|
||||
</resources>
|
||||
43
feature/settings/import/src/main/res/values-gd/strings.xml
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Ion-phortaich na roghainnean</string>
|
||||
<string name="settings_import_button">Ion-phortaich</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_importing">Ag ion-phortadh nan roghainnean…</string>
|
||||
<string name="settings_import_general_settings_item">Roghainnean coitcheann</string>
|
||||
<string name="settings_import_success_generic">Chaidh na roghainnean ion-phortadh</string>
|
||||
<string name="settings_import_failure">Cha b’ urrainn dhuinn na roghainnean ion-phortadh</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Cleachd an aon fhacal-faire dhan fhrithealaiche a-mach</string>
|
||||
<string name="settings_import_server_name_format">Ainm an fhrithealaiche: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Sguireadh dhen ùghdarrachadh</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Clàraich a-steach le Google</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Dh’fhàillig an t-ùghdarrachadh leis a’ mhearachd a leanas: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_pick_app_dialog_title">Ion-phortaich io aplacaid</string>
|
||||
<string name="settings_import_authorization_and_password_required">Clàraich a-steach is cuir a-steach na faclan-faire</string>
|
||||
<string name="settings_import_pick_document_button">Tagh faidhle</string>
|
||||
<string name="settings_import_status_log_in_required">Feumaidh tu clàradh a-steach</string>
|
||||
<string name="settings_import_later_button">Uaireigin eile</string>
|
||||
<string name="settings_import_oauth_description">Feumaidh tu clàradh a-steach is cead-inntrigidh dhan phost-d agad a thoirt dhan aplacaid mus urrainn dhut an cunntas puist-d seo a chleachdadh.</string>
|
||||
<string name="settings_import_app_version_not_supported">Chan eil taic ri tionndadh na h-aplacaid.</string>
|
||||
<string name="settings_import_status_error">Dh’fhàillig an t-ion-phortadh</string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">Chan eil an solaraiche seo a’ cur taic ri OAuth 2.0 aig an àm seo.</string>
|
||||
<string name="settings_import_scan_qr_code_button">Sganaich an còd QR</string>
|
||||
<string name="settings_import_pick_app_button">Ion-phortaich io aplacaid</string>
|
||||
<string name="settings_import_password_required">Cuir a-steach na faclan-faire</string>
|
||||
<string name="settings_import_authorization_required">Clàraich a-steach</string>
|
||||
<string name="settings_import_read_failure">Cha b’ urrainn dhuinn faidhle nan roghainnean a leughadh</string>
|
||||
<string name="settings_import_partial_failure">Cha b’ urrainn dhuinn cuid dhe na roghainnean ion-phortadh</string>
|
||||
<string name="settings_import_status_success">Chaidh an ion-phortadh</string>
|
||||
<string name="settings_import_status_password_required">Tha feum air facal-faire</string>
|
||||
<string name="settings_import_status_not_imported">Cha deach ion-phortadh</string>
|
||||
<string name="settings_import_incoming_server_password_hint">Facal-faire an fhrithealaiche a-steach</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Facal-faire an fhrithealaiche a-mach</string>
|
||||
<string name="settings_import_oauth_sign_in">Clàraich a-steach</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">Cha d’fhuair an aplacaid lorg air brabhsair sam bith a chleachadh e airson cead-inntrigidh dhan chunntas agad a thoirt seachad.</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">Feumaidh tu facal-faire an fhrithealaiche a thoirt seachad mus urrainn dhut an cunntas “<xliff:g id="account">%s</xliff:g>” a chleachdadh.</item>
|
||||
<item quantity="two">Feumaidh tu facal-faire an fhrithealaiche a thoirt seachad mus urrainn dhut an cunntas “<xliff:g id="account">%s</xliff:g>” a chleachdadh.</item>
|
||||
<item quantity="few">Feumaidh tu facal-faire an fhrithealaiche a thoirt seachad mus urrainn dhut an cunntas “<xliff:g id="account">%s</xliff:g>” a chleachdadh.</item>
|
||||
<item quantity="other">Feumaidh tu facal-faire an fhrithealaiche a thoirt seachad mus urrainn dhut an cunntas “<xliff:g id="account">%s</xliff:g>” a chleachdadh.</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
40
feature/settings/import/src/main/res/values-gl/strings.xml
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Importar axustes</string>
|
||||
<string name="settings_import_pick_document_button">Seleccionar ficheiro</string>
|
||||
<string name="settings_import_button">Importar</string>
|
||||
<string name="settings_import_success_generic">Configuración importada con éxito</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Insira os contrasinais</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_failure">Ocorreu un erro ao importar a configuración</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_read_failure">Ocorreu un erro ao ler o ficheiro de configuracións</string>
|
||||
<string name="settings_import_partial_failure">Ocorreu un erro ao importar algúns axustes</string>
|
||||
<string name="settings_import_status_success">Importado con éxito</string>
|
||||
<string name="settings_import_status_password_required">Requírese contrasinal</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_not_imported">Non importado</string>
|
||||
<string name="settings_import_status_error">Erro da importación</string>
|
||||
<string name="settings_import_later_button">Máis tarde</string>
|
||||
<string name="settings_importing">Importando axustes…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">Para poder usar a conta \"<xliff:g id="account">%s</xliff:g>\" cómpre proporcionar o contrasinal do servidor.</item>
|
||||
<item quantity="other">Para poder usar a conta \"<xliff:g id="account">%s</xliff:g>\" cómpre proporcionar os contrasinais do servidor.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Contrasinal do servidor entrante</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Contrasinal do servidor saínte</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Use o mesmo contrasinal para o servidor de saída</string>
|
||||
<string name="settings_import_server_name_format">Nome do servidor: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_general_settings_item">Configuración Xeral</string>
|
||||
<string name="settings_import_authorization_required">Inicie sesión</string>
|
||||
<string name="settings_import_authorization_and_password_required">Inicie sesión e insira contrasinal</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Iniciar sesión con Google</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Autorización cancelada</string>
|
||||
<string name="settings_import_status_log_in_required">Requírese inicio de sesión</string>
|
||||
<string name="settings_import_oauth_description">Para usar esta conta de correo con K-9 Mail, é preciso iniciar sesión e permitirlle á app acceso aos correos.</string>
|
||||
<string name="settings_import_oauth_sign_in">Iniciar sesión</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">A autorización fallou co seguinte erro: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">OAuth 2.0 non é soportado actualmente con este provedor.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">A aplicación non puido atopar un navegador web para iniciar sesión na túa conta.</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
40
feature/settings/import/src/main/res/values-hi/strings.xml
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">सेटिंग्स को आयात करें</string>
|
||||
<string name="settings_import_pick_document_button">फ़ाईल पसंद करें</string>
|
||||
<string name="settings_import_pick_app_dialog_title">ऐप से आयात करें</string>
|
||||
<string name="settings_import_authorization_and_password_required">कृपया साइन इन करें और पासवर्ड दर्ज करें</string>
|
||||
<string name="settings_import_partial_failure">कुछ सेटिंग आयात करने में विफल</string>
|
||||
<string name="settings_import_server_name_format">सर्वर नाम: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">प्राधिकरण रद्द कर दिया गया</string>
|
||||
<string name="settings_import_pick_app_button">ऐप से आयात करें</string>
|
||||
<string name="settings_import_status_error">आयात विफलता</string>
|
||||
<string name="settings_import_incoming_server_password_hint">इनकमिंग सर्वर पासवर्ड</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">आउटगोइंग सर्वर पासवर्ड</string>
|
||||
<string name="settings_import_general_settings_item">सामान्य सेटिंग्स</string>
|
||||
<string name="settings_import_scan_qr_code_button">क्यू आर कोड स्कैन करें</string>
|
||||
<string name="settings_import_button">आयात करें</string>
|
||||
<string name="settings_import_success_generic">सेटिंग सफलतापूर्वक आयातित की गईं</string>
|
||||
<string name="settings_import_password_required">कृपया पासवर्ड दर्ज करें</string>
|
||||
<string name="settings_import_authorization_required">साइन इन करें</string>
|
||||
<string name="settings_import_failure">सेटिंग आयात करने में विफल</string>
|
||||
<string name="settings_import_read_failure">सेटिंग फ़ाइल पढ़ने में विफल</string>
|
||||
<string name="settings_import_status_success">सफलतापूर्वक आयातित</string>
|
||||
<string name="settings_import_status_password_required">पासवर्ड आवश्यक है</string>
|
||||
<string name="settings_import_status_log_in_required">साइन इन आवश्यक</string>
|
||||
<string name="settings_import_status_not_imported">आयातित नहीं</string>
|
||||
<string name="settings_import_later_button">बाद में</string>
|
||||
<string name="settings_importing">सेटिंग्स आयात की जा रही हैं…</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">आउटगोइंग सर्वर के लिए समान पासवर्ड का उपयोग करें</string>
|
||||
<string name="settings_import_oauth_sign_in">साइन इन करें</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">गूगल से साइन इन करें</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">निम्न त्रुटि के साथ प्राधिकरण विफल हुआ: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">ओआथ 2.0 वर्तमान में इस प्रदाता के साथ समर्थित नहीं है।</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">ऐप को आपके खाते तक पहुंच प्रदान करने के लिए कोई ब्राउज़र नहीं मिला।</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">\"<xliff:g id="account">%s</xliff:g>\" खाते का उपयोग करने के लिए आपको सर्वर पासवर्ड प्रदान करना होगा।</item>
|
||||
<item quantity="other">\"<xliff:g id="account">%s</xliff:g>\" खाते का उपयोग करने के लिए आपको सर्वर पासवर्ड प्रदान करना होगा।</item>
|
||||
</plurals>
|
||||
<string name="settings_import_oauth_description">इस ईमेल खाते का उपयोग करने के लिए, आपको साइन इन करना होगा और ऐप को अपने ईमेल तक पहुंच प्रदान करनी होगी।</string>
|
||||
<string name="settings_import_app_version_not_supported">ऐप्प संस्करण समर्थित नहीं है।</string>
|
||||
</resources>
|
||||
44
feature/settings/import/src/main/res/values-hr/strings.xml
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Uvoz postavki</string>
|
||||
<string name="settings_import_pick_document_button">Odaberi datoteku</string>
|
||||
<string name="settings_import_button">Uvezi</string>
|
||||
<string name="settings_import_success_generic">Postavke su uspješno uvezene</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Molimo unesite lozinke</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_failure">Uvoz postavki nije uspio</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_read_failure">Čitanje datoteke postavki nije uspjelo</string>
|
||||
<string name="settings_import_partial_failure">Uvoz nekih postavki nije uspio</string>
|
||||
<string name="settings_import_status_success">Uspješno uvezeno</string>
|
||||
<string name="settings_import_status_password_required">Lozinka obavezna</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_not_imported">Nije uvezeno</string>
|
||||
<string name="settings_import_status_error">Uvoz nije uspio</string>
|
||||
<string name="settings_import_later_button">Kasnije</string>
|
||||
<string name="settings_importing">Uvoz postavki…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">Da biste mogli koristiti račun \"<xliff:g id="account">%s</xliff:g>\" trebate unijeti lozinku za poslužitelj.</item>
|
||||
<item quantity="few">Da biste mogli koristiti račun\"<xliff:g id="account">%s</xliff:g>\" trebate unijeti lozinke za poslužitelj.</item>
|
||||
<item quantity="other">Da biste mogli koristiti račun \"<xliff:g id="account">%s</xliff:g>\" trebate unijeti lozinke za poslužitelj.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Lozinka dolaznog poslužitelja</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Lozinka odlaznog poslužitelja</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Koristi istu lozinku za odlazni poslužitelj</string>
|
||||
<string name="settings_import_server_name_format">Naziv servera: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_general_settings_item">Opće postavke</string>
|
||||
<string name="settings_import_oauth_sign_in">Prijavite se</string>
|
||||
<string name="settings_import_pick_app_button">Uvezi iz aplikacije</string>
|
||||
<string name="settings_import_status_log_in_required">Prijava je obavezna</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Autorizacija nije uspjela sa sljedećom pogreškom: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_authorization_required">Molimo Vas prijavite se</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Uvezi iz aplikacije</string>
|
||||
<string name="settings_import_oauth_description">Za korištenje ovog računa e-pošte trebate se prijaviti i omogućiti aplikaciji pristup vašim emailovima.</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Prijavite se s Googleom</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Autorizacija poništena</string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">OAuth 2.0 trenutačno nije podržan kod ovog pružatelja usluga e-pošte.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">Aplikacija nije mogla pronaći preglednik za davanje pristupa vašem računu.</string>
|
||||
<string name="settings_import_scan_qr_code_button">Skeniraj QR kod</string>
|
||||
<string name="settings_import_authorization_and_password_required">Molimo Vas prijavite se i unesite lozinke</string>
|
||||
</resources>
|
||||
44
feature/settings/import/src/main/res/values-hu/strings.xml
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Beállítások importálása</string>
|
||||
<string name="settings_import_pick_document_button">Fájl kiválasztása</string>
|
||||
<string name="settings_import_button">Importálás</string>
|
||||
<string name="settings_import_success_generic">A beállítások sikeresen importálva</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Adja meg a jelszavakat</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_required">Jelentkezzen be</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_and_password_required">Jelentkezzen be, és adja meg a jelszavakat</string>
|
||||
<string name="settings_import_failure">Nem sikerült importálni a beállításokat</string>
|
||||
<string name="settings_import_read_failure">Nem sikerült beolvasni a beállítási fájlt</string>
|
||||
<string name="settings_import_partial_failure">Nem sikerült importálni néhány beállítást</string>
|
||||
<string name="settings_import_status_success">Sikeresen importálva</string>
|
||||
<string name="settings_import_status_password_required">Jelszó szükséges</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_log_in_required">Bejelentkezés szükséges</string>
|
||||
<string name="settings_import_status_not_imported">Nincs importálva</string>
|
||||
<string name="settings_import_status_error">Importálási hiba</string>
|
||||
<string name="settings_import_later_button">Később</string>
|
||||
<string name="settings_importing">Beállítások importálása…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">Ahhoz, hogy képes legyen használni a(z) „<xliff:g id="account">%s</xliff:g>” fiókot, meg kell adnia a kiszolgáló jelszavát.</item>
|
||||
<item quantity="other">Ahhoz, hogy képes legyen használni a(z) „<xliff:g id="account">%s</xliff:g>” fiókot, meg kell adnia a kiszolgáló jelszavait.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Bejövő kiszolgáló jelszava</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Kimenő kiszolgáló jelszava</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Ugyanazon jelszó használata a kimenő kiszolgálónál</string>
|
||||
<string name="settings_import_server_name_format">Kiszolgáló neve: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">Ezen e-mail-fiók használatához be kell jelentkeznie, és hozzáférést kell adnia az alkalmazásnak az e-mailjeihez.</string>
|
||||
<string name="settings_import_oauth_sign_in">Bejelentkezés</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Bejelentkezés Google használatával</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">A jogosultság-ellenőrzés megszakítva</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">A jogosultság-ellenőrzés a következő hibával sikertelen: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">Az OAuth 2.0 jelenleg nem támogatott ezzel a szolgáltatóval.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">Az alkalmazás nem talált böngészőt a fiókhoz történő hozzáférés megadásához való használathoz.</string>
|
||||
<string name="settings_import_general_settings_item">Általános beállítások</string>
|
||||
<string name="settings_import_pick_app_button">Importálás alkalmazásból</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Importálás alkalmazásból</string>
|
||||
<string name="settings_import_scan_qr_code_button">QR-kód beolvasása</string>
|
||||
<string name="settings_import_app_version_not_supported">Nem támogatott alkalmazásverzió.</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<!--Might be displayed in the message list widget when the list is scrolled and new data can't be fetched fast enough-->
|
||||
<string name="settings_import_general_settings_item">Ընդհանուր կարգաւորումներ</string>
|
||||
</resources>
|
||||
43
feature/settings/import/src/main/res/values-in/strings.xml
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Impor pengaturan</string>
|
||||
<string name="settings_import_pick_document_button">Pilih berkas</string>
|
||||
<string name="settings_import_button">Impor</string>
|
||||
<string name="settings_import_success_generic">Pengaturan berhasil diimpor</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Silakan masukkan kata sandi</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_failure">Gagal mengimpor pengaturan</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_read_failure">Gagal membaca berkas pengaturan</string>
|
||||
<string name="settings_import_partial_failure">Ada pengaturan yang gagal diimpor</string>
|
||||
<string name="settings_import_status_success">Berhasil diimpor</string>
|
||||
<string name="settings_import_status_password_required">Kata sandi diperlukan</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_not_imported">Tidak diimpor</string>
|
||||
<string name="settings_import_status_error">Pengimporan gagal</string>
|
||||
<string name="settings_import_later_button">Nanti</string>
|
||||
<string name="settings_importing">Mengimpor pengaturan…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="other">Agar dapat menggunakan akun \"<xliff:g id="account">%s</xliff:g>\", Anda perlu memberikan kata sandi peladen.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Kata sandi peladen yang masuk</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Kata sandi peladen yang keluar</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Gunakan kata sandi yang sama untuk peladen yang keluar</string>
|
||||
<string name="settings_import_server_name_format">Nama peladen: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_general_settings_item">Pengaturan umum</string>
|
||||
<string name="settings_import_authorization_required">Silakan masuk</string>
|
||||
<string name="settings_import_authorization_and_password_required">Silakan masuk dan masukkan kata sandi</string>
|
||||
<string name="settings_import_status_log_in_required">Proses masuk diperlukan</string>
|
||||
<string name="settings_import_oauth_description">Agar dapat menggunakan akun surel ini, Anda perlu masuk dan memberikan akses aplikasi ke surel Anda.</string>
|
||||
<string name="settings_import_oauth_sign_in">Masuk</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Masuk dengan Google</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Otorisasi dibatalkan</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Otorisasi gagal dengan galat sebagai berikut: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">OAuth 2.0 saat ini tidak didukung oleh penyedia ini.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">Aplikasi ini tidak dapat menemukan peramban yang bisa digunakan untuk memberikan akses ke akun Anda.</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Impor dari aplikasi</string>
|
||||
<string name="settings_import_pick_app_button">Impor dari aplikasi</string>
|
||||
<string name="settings_import_scan_qr_code_button">Pindai kode Respons Cepat (QR)</string>
|
||||
<string name="settings_import_app_version_not_supported">Versi ini tidak didukung.</string>
|
||||
</resources>
|
||||
44
feature/settings/import/src/main/res/values-is/strings.xml
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Flytja inn stillingar</string>
|
||||
<string name="settings_import_pick_document_button">Velja skrá</string>
|
||||
<string name="settings_import_button">Flytja inn</string>
|
||||
<string name="settings_import_success_generic">Tókst að flytja inn stillingar</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required"> Settu inn lykilorðin</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_required">Skráðu þig inn</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_and_password_required"> Skráðu þig inn og settu inn lykilorð</string>
|
||||
<string name="settings_import_failure">Mistókst að flytja inn stillingar</string>
|
||||
<string name="settings_import_read_failure">Mistókst að lesa stillingaskrá</string>
|
||||
<string name="settings_import_partial_failure">Mistókst að flytja inn sumar stillingar</string>
|
||||
<string name="settings_import_status_success">Innflutningur tókst</string>
|
||||
<string name="settings_import_status_password_required">Lykilorðs er krafist</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_log_in_required">Innskráningar krafist</string>
|
||||
<string name="settings_import_status_not_imported">Ekki flutt inn</string>
|
||||
<string name="settings_import_status_error">Innflutningur mistókst</string>
|
||||
<string name="settings_import_later_button">Síðar</string>
|
||||
<string name="settings_importing">Flytja inn stillingar…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">Til að geta notað aðganginn \"<xliff:g id="account">%s</xliff:g>\" verður þú að gefa upp lykilorðið á þjóninum.</item>
|
||||
<item quantity="other">Til að geta notað aðganginn \"<xliff:g id="account">%s</xliff:g>\" verður þú að gefa upp lykilorðin á þjóninum.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Lykilorð móttöku-póstþjóns</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Lykilorð sendinga-póstþjóns</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Nota sama lykilorð fyrir sendinga-póstþjóninn</string>
|
||||
<string name="settings_import_server_name_format">Heiti póstþjóns: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">Til að nota þennan tölvupóstaðgang, þarftu að skrá þig inn og veita forritinu heimild inn á tölvupóstinn þinn.</string>
|
||||
<string name="settings_import_oauth_sign_in">Skrá inn</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Skrá inn með Google</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Hætt við auðkenningu</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Auðkenning mistókst með eftirfarandi villuboðum: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">OAuth 2.0 er ekki stutt í augnablikinu hjá þessari þjónustuveitu.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">Forritið fann engan vafra til að nota til að fá aðgang að notandaaðgangnum þinum.</string>
|
||||
<string name="settings_import_general_settings_item">Almennar stillingar</string>
|
||||
<string name="settings_import_pick_app_button">Flytja inn úr forriti</string>
|
||||
<string name="settings_import_app_version_not_supported">Útgáfa forrits ekki studd.</string>
|
||||
<string name="settings_import_scan_qr_code_button">Skannaðu QR-kóða</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Flytja inn úr forriti</string>
|
||||
</resources>
|
||||
45
feature/settings/import/src/main/res/values-it/strings.xml
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Importa impostazioni</string>
|
||||
<string name="settings_import_pick_document_button">Seleziona file</string>
|
||||
<string name="settings_import_button">Importa</string>
|
||||
<string name="settings_import_success_generic">Impostazioni importate correttamente</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Inserisci le password</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_required">Accedi</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_and_password_required">Accedi e inserisci le password</string>
|
||||
<string name="settings_import_failure">Importazione impostazioni non riuscita</string>
|
||||
<string name="settings_import_read_failure">Lettura file impostazioni non riuscita</string>
|
||||
<string name="settings_import_partial_failure">Importazione di alcune impostazioni non riuscita</string>
|
||||
<string name="settings_import_status_success">Importazione completata correttamente</string>
|
||||
<string name="settings_import_status_password_required">Password richiesta</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_log_in_required">Accesso richiesto</string>
|
||||
<string name="settings_import_status_not_imported">Non importate</string>
|
||||
<string name="settings_import_status_error">Importazione non riuscita</string>
|
||||
<string name="settings_import_later_button">Più tardi</string>
|
||||
<string name="settings_importing">Importazione impostazioni…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">Per poter utilizzare l\'account \"<xliff:g id="account">%s</xliff:g>\" devi fornire la password del server.</item>
|
||||
<item quantity="many">Per poter utilizzare l\'account \"<xliff:g id="account">%s</xliff:g>\" devi fornire le password del server.</item>
|
||||
<item quantity="other">Per poter utilizzare l\'account \"<xliff:g id="account">%s</xliff:g>\" devi fornire le password del server.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Password server in arrivo</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Password server in uscita</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Usa stessa password per server in uscita</string>
|
||||
<string name="settings_import_server_name_format">Nome server: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">Per poter usare questo account email, devi accedere e autorizzare l\'accesso dell\'applicazione alla tua posta.</string>
|
||||
<string name="settings_import_oauth_sign_in">Accedi</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Accedi con Google</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Autorizzazione annullata</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Autorizzazione non riuscita con il seguente errore: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">OAuth 2.0 non è supportato da questo provider di posta.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">L\' applicazione non trova un browser per richiedere l\'accesso al tuo account.</string>
|
||||
<string name="settings_import_general_settings_item">Impostazioni generali</string>
|
||||
<string name="settings_import_pick_app_button">Importa dall\'applicazione</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Importa dall\'applicazione</string>
|
||||
<string name="settings_import_scan_qr_code_button">Scansiona il QRcode</string>
|
||||
<string name="settings_import_app_version_not_supported">Versione dell\'app non supportata</string>
|
||||
</resources>
|
||||
44
feature/settings/import/src/main/res/values-iw/strings.xml
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">יבא הגדרות</string>
|
||||
<string name="settings_import_pick_document_button">בחר קובץ</string>
|
||||
<string name="settings_import_button">יבא</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_later_button">מאוחר יותר</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_importing">מייבא הגדרות…</string>
|
||||
<!--Might be displayed in the message list widget when the list is scrolled and new data can't be fetched fast enough-->
|
||||
<string name="settings_import_general_settings_item">הגדרות כלליות</string>
|
||||
<string name="settings_import_success_generic">הגדרות יובאו בהצלחה</string>
|
||||
<string name="settings_import_password_required">נא להכניס סיסמאות</string>
|
||||
<string name="settings_import_authorization_required">נא להתחבר</string>
|
||||
<string name="settings_import_failure">יבוא הגדרות נכשל</string>
|
||||
<string name="settings_import_read_failure">קריאת קובץ הגדרות נכשלה</string>
|
||||
<string name="settings_import_partial_failure">יבוא חלק מההגדרות נכשל</string>
|
||||
<string name="settings_import_status_success">יובא בהצלחה</string>
|
||||
<string name="settings_import_status_password_required">דרושה סיסמה</string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">OAuth 2.0 כרגע לא נתמך עם הספק הזה.</string>
|
||||
<string name="settings_import_authorization_and_password_required">נא להתחבר ולהכניס סיסמאות</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">היישומון לא הצליח למצוא דפדפן להשתמש בו על מנת לתת גישה לחשבון שלך.</string>
|
||||
<string name="settings_import_status_log_in_required">דרושה התחברות</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">סיסמת שרת יוצא</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">השתמש באותה סיסמה לשרת יוצא</string>
|
||||
<string name="settings_import_oauth_description">כדי להשתמש בחשבון הדוא\"ל הזה, יש צורך להתחבר ולתת ליישומון גישה לדוא\"ל שלך.</string>
|
||||
<string name="settings_import_oauth_sign_in">התחבר</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">תהליך האישור נכשל עם השגיאה שלהלן: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_status_not_imported">לא יובא</string>
|
||||
<string name="settings_import_status_error">יבוא נכשל</string>
|
||||
<string name="settings_import_incoming_server_password_hint">סיסמת שרת נכנס</string>
|
||||
<string name="settings_import_server_name_format">שם שרת: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">התחבר עם Google</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">תהליך האישור בוטל</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">על מנת להשתמש בחשבון \"<xliff:g id="account">%s</xliff:g>\" עליך לספק את סיסמת השרת.</item>
|
||||
<item quantity="two">על מנת להשתמש בחשבונות \"<xliff:g id="account">%s</xliff:g>\" עליך לספק את סיסמאות השרת.</item>
|
||||
<item quantity="other">על מנת להשתמש בחשבונות \"<xliff:g id="account">%s</xliff:g>\" עליך לספק את סיסמאות השרת.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_pick_app_button">ייבא מיישום</string>
|
||||
<string name="settings_import_pick_app_dialog_title">ייבא מיישום</string>
|
||||
<string name="settings_import_scan_qr_code_button">סרוק ברקוד QR</string>
|
||||
<string name="settings_import_app_version_not_supported">גירסאת האפליקציה לא נתמכת.</string>
|
||||
</resources>
|
||||
43
feature/settings/import/src/main/res/values-ja/strings.xml
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">設定をインポート</string>
|
||||
<string name="settings_import_pick_document_button">ファイルを選択</string>
|
||||
<string name="settings_import_button">インポート</string>
|
||||
<string name="settings_import_success_generic">設定を正常にインポートしました</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">パスワードを入力してください</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_required">ログインしてください</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_and_password_required">ログインしてパスワードを入力してください</string>
|
||||
<string name="settings_import_failure">設定のインポートに失敗しました</string>
|
||||
<string name="settings_import_read_failure">設定ファイルの読み込みに失敗しました</string>
|
||||
<string name="settings_import_partial_failure">一部の設定のインポートに失敗しました</string>
|
||||
<string name="settings_import_status_success">正常にインポートしました</string>
|
||||
<string name="settings_import_status_password_required">パスワードが必要です</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_log_in_required">ログインが必要です</string>
|
||||
<string name="settings_import_status_not_imported">インポートされませんでした</string>
|
||||
<string name="settings_import_status_error">インポート失敗</string>
|
||||
<string name="settings_import_later_button">後で</string>
|
||||
<string name="settings_importing">設定をインポート中…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="other">アカウント \"<xliff:g id="account">%s</xliff:g>\" を使用できるようにするには、サーバーのパスワードを入力する必要があります。</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">受信サーバーのパスワード</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">送信サーバーのパスワード</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">送信サーバーに同じパスワードを使用する</string>
|
||||
<string name="settings_import_server_name_format">サーバー名: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">このメールアカウントを使用するには、ログインしてアプリにメールへのアクセスを許可する必要があります。</string>
|
||||
<string name="settings_import_oauth_sign_in">ログイン</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Google でログイン</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">認証がキャンセルされました</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">以下のエラーにより認証に失敗しました: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">現在、このプロバイダーは OAuth 2.0 に対応していません。</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">アカウントへのアクセス権付与に必要なブラウザーアプリが見つかりませんでした。</string>
|
||||
<string name="settings_import_general_settings_item">一般設定</string>
|
||||
<string name="settings_import_pick_app_button">アプリからインポート</string>
|
||||
<string name="settings_import_pick_app_dialog_title">アプリからインポート</string>
|
||||
<string name="settings_import_scan_qr_code_button">QR コードをスキャン</string>
|
||||
<string name="settings_import_app_version_not_supported">対応していないバージョンのアプリです。</string>
|
||||
</resources>
|
||||
19
feature/settings/import/src/main/res/values-ka/strings.xml
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">პარამეტრების იმპორტირება</string>
|
||||
<string name="settings_import_button">იმპორტი</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_importing">პარამეტრების იმპორტირება…</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">ანგარიშის „<xliff:g id="account">%s</xliff:g>“ გამოსაყენებლად, საჭიროა სერვერის პაროლის მითითება.</item>
|
||||
<item quantity="other">ანგარიშის „<xliff:g id="account">%s</xliff:g>“ გამოსაყენებლად, საჭიროა სერვერის პაროლის მითითება.</item>
|
||||
</plurals>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_incoming_server_password_hint">შემავალი სერვერის პაროლი</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_outgoing_server_password_hint">გამავალი სერვერის პაროლი</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">იმავე პაროლის გამოყენება გამავალი სერვერისთვის</string>
|
||||
<string name="settings_import_server_name_format">სერვერის სახელი: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_general_settings_item">ზოგადი პარამეტრები</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="settings_import_title">Баптауларды импорттау</string>
|
||||
<string name="settings_import_pick_document_button">Файлды таңдау</string>
|
||||
<string name="settings_import_scan_qr_code_button">QR кодын сканерлеу</string>
|
||||
<string name="settings_import_button">Импорттау</string>
|
||||
</resources>
|
||||
32
feature/settings/import/src/main/res/values-ko/strings.xml
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">설정 가져오기</string>
|
||||
<string name="settings_import_button">가져오기</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_importing">설정 가져오는 중…</string>
|
||||
<string name="settings_import_general_settings_item">일반 설정</string>
|
||||
<string name="settings_import_password_required">비밀번호를 입력하세요</string>
|
||||
<string name="settings_import_failure">설정을 가져오지 못했습니다</string>
|
||||
<string name="settings_import_read_failure">설정 파일을 읽지 못했습니다</string>
|
||||
<string name="settings_import_partial_failure">일부 설정을 가져오지 못했습니다</string>
|
||||
<string name="settings_import_status_success">성공적으로 가져왔습니다</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">발신 서버에 동일한 비밀번호 사용하기</string>
|
||||
<string name="settings_import_server_name_format">서버 이름: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">이 이메일 계정을 사용하려면 로그인하고 앱에 액세스 권한을 부여해야 합니다.</string>
|
||||
<string name="settings_import_oauth_sign_in">로그인</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">인증 취소됨</string>
|
||||
<string name="settings_import_pick_document_button">파일 선택</string>
|
||||
<string name="settings_import_success_generic">설정을 성공적으로 가져왔습니다</string>
|
||||
<string name="settings_import_status_error">가져오기 실패</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">발신 서버 비밀번호</string>
|
||||
<string name="settings_import_incoming_server_password_hint">수신 서버 비밀번호</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Google로 로그인</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">다음 오류로 인증에 실패했습니다: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_status_password_required">비밀번호 필요함</string>
|
||||
<string name="settings_import_later_button">나중에</string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">현재 이 제공자에서는 OAuth 2.0이 지원되지 않습니다.</string>
|
||||
<string name="settings_import_status_log_in_required">로그인 필요함</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">계정에 대한 액세스 권한을 부여하는 데 사용할 브라우저를 찾을 수 없습니다.</string>
|
||||
<string name="settings_import_authorization_and_password_required">로그인 후 비밀번호를 입력하십시오.</string>
|
||||
<string name="settings_import_authorization_required">로그인이 필요합니다.</string>
|
||||
</resources>
|
||||
44
feature/settings/import/src/main/res/values-lt/strings.xml
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Importuoti nustatymus</string>
|
||||
<string name="settings_import_pick_document_button">Pasirinkti failą</string>
|
||||
<string name="settings_import_button">Importuoti</string>
|
||||
<string name="settings_import_success_generic">Nustatymai sėkmingai importuoti</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Prašome įvesti slaptažodžius</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_required">Prašome prisijungti</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_and_password_required">Prašome prisijungti ir įvesti slaptažodžius</string>
|
||||
<string name="settings_import_failure">Nepavyko importuoti nustatymų</string>
|
||||
<string name="settings_import_read_failure">Nepavyko nuskaityti nustatymų failo</string>
|
||||
<string name="settings_import_partial_failure">Nepavyko importuoti kai kurių nustatymų</string>
|
||||
<string name="settings_import_status_success">Sėkmingai importuota</string>
|
||||
<string name="settings_import_status_password_required">Būtinas slaptažodis</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_log_in_required">Reikalingas prisijungimas</string>
|
||||
<string name="settings_import_status_not_imported">Neimportuota</string>
|
||||
<string name="settings_import_status_error">Importo sutrikimas</string>
|
||||
<string name="settings_import_later_button">Vėliau</string>
|
||||
<string name="settings_importing">Importuojami nustatymai…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">Kad galėtumėte naudotis paskyra \"<xliff:g id="account">%s</xliff:g>\", turite nurodyti serverio slaptažodį.</item>
|
||||
<item quantity="few">Kad galėtumėte naudotis paskyra \"<xliff:g id="account">%s</xliff:g>\", turite nurodyti serverio slaptažodžius.</item>
|
||||
<item quantity="many">Kad galėtumėte naudotis paskyra \"<xliff:g id="account">%s</xliff:g>\", turite nurodyti serverio slaptažodžius.</item>
|
||||
<item quantity="other">Kad galėtumėte naudotis paskyra \"<xliff:g id="account">%s</xliff:g>\", turite nurodyti serverio slaptažodžius.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Gaunamo serverio slaptažodis</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Siunčiamo serverio slaptažodis</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Naudoti tą patį slaptažodį siunčiamajame serveryje</string>
|
||||
<string name="settings_import_server_name_format">Serverio pavadinimas: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">Norėdami naudoti šią el. pašto paskyrą su K-9 Mail, turite prisijungti ir suteikti programėlei prieigą prie savo el. laiškų.</string>
|
||||
<string name="settings_import_oauth_sign_in">Prisijungti</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Prisijungti su Google</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Leidimas atšauktas</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Autorizavimas nepavyko su šia klaida: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">Šiuo metu šis teikėjas nepalaiko OAuth 2.0.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">Programai nepavyko rasti naršyklės, kurią naudoti suteikiant prieigą prie paskyros.</string>
|
||||
<string name="settings_import_general_settings_item">Bendri nustatymai</string>
|
||||
<string name="settings_import_pick_app_button">Importuoti iš programos</string>
|
||||
<string name="settings_import_scan_qr_code_button">Skenuoti QR kodą</string>
|
||||
</resources>
|
||||
41
feature/settings/import/src/main/res/values-lv/strings.xml
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Importēt K-9 iestatījumus</string>
|
||||
<string name="settings_import_pick_document_button">Izvēlēties failu</string>
|
||||
<string name="settings_import_button">Importēt</string>
|
||||
<string name="settings_import_success_generic">Iestatījumi veiksmīgi importēti</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Lūdzu ievadiet paroles</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_required">Lūdzu, ierakstieties!</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_and_password_required">Lūdzu, ierakstieties un ievadiet paroles!</string>
|
||||
<string name="settings_import_failure">Neizdevās importēt iestatījumus</string>
|
||||
<string name="settings_import_read_failure">Neizdevās nolasīt iestatījumu failu</string>
|
||||
<string name="settings_import_partial_failure">Neizdevās importēt dažus iestatījumus</string>
|
||||
<string name="settings_import_status_success">Imports veiksmīgs</string>
|
||||
<string name="settings_import_status_password_required">Nepieciešama parole</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_log_in_required">Nepieciešams ierakstīties</string>
|
||||
<string name="settings_import_status_not_imported">Nav importēts</string>
|
||||
<string name="settings_import_status_error">Imports neizdevās</string>
|
||||
<string name="settings_import_later_button">Vēlāk</string>
|
||||
<string name="settings_importing">Importē iestatījumus…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="zero">Lai lietotu kontu \"<xliff:g id="account">%s</xliff:g>\", jāievada servera parole.</item>
|
||||
<item quantity="one">Lai lietotu kontu \"<xliff:g id="account">%s</xliff:g>\", jāievada servera parole.</item>
|
||||
<item quantity="other">Lai lietotu kontu \"<xliff:g id="account">%s</xliff:g>\", jāievada servera paroles.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Ienākošā servera parole</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Izejošā servera parole</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Izmantot to pašu paroli izejošajam serverim</string>
|
||||
<string name="settings_import_server_name_format">Servera nosaukums: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">Lai K-9 programmā lietotu šo e-pasta kontu, Jums jāierakstās un jādod atļauja K-9 piekļūt e-pastiem.</string>
|
||||
<string name="settings_import_oauth_sign_in">Ierakstīties</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Ierakstīties ar Google</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Autorizācija atcelta</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Autorizācija atcelta šādas kļūdas dēļ: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">Šis epasta pakalpojumu sniedzējs OAuth 2.0 nenodrošina.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">Lietotnei neizdevās atrast pārlūku, lai ar tā starpniecību iegūtu piekļuvi Jūsu kontam.</string>
|
||||
<string name="settings_import_general_settings_item">Vispārējie iestatījumi</string>
|
||||
</resources>
|
||||
30
feature/settings/import/src/main/res/values-ml/strings.xml
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">ക്രമീകരണങ്ങൾ ഇംപോർട്ട് ചെയ്യുക</string>
|
||||
<string name="settings_import_pick_document_button">ഫയൽ തിരഞ്ഞെടുക്കുക</string>
|
||||
<string name="settings_import_button">ഇംപോർട്ട്</string>
|
||||
<string name="settings_import_success_generic">ക്രമീകരണങ്ങൾ വിജയകരമായി ഇംപോർട്ട് ചെയ്തു</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">ദയവായി രഹസ്യവാക്കുകൾ നൽകുക</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_failure">ക്രമീകരണങ്ങൾ ഇംപോർട്ടുചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_read_failure">ക്രമീകരണ ഫയൽ വായിക്കുന്നതിൽ പരാജയപ്പെട്ടു</string>
|
||||
<string name="settings_import_partial_failure">ചില ക്രമീകരണങ്ങൾ ഇംപോർട്ട് ചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു</string>
|
||||
<string name="settings_import_status_success">വിജയകരമായി ഇംപോർട്ട് ചെയ്തു</string>
|
||||
<string name="settings_import_status_password_required">രഹസ്യവാചകം ആവശ്യമാണ്</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_not_imported">ഇംപോർട്ട് ചെയ്തിട്ടില്ല</string>
|
||||
<string name="settings_import_status_error">ഇംപോർട്ട് തകരാർ</string>
|
||||
<string name="settings_import_later_button">പിന്നീട്</string>
|
||||
<string name="settings_importing">ക്രമീകരണങ്ങൾ ഇംപോർട്ട് ചെയ്യുന്നു…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">\"<xliff:g id="account">%s</xliff:g>\" അക്കൗണ്ട് ഉപയോഗിക്കാൻ നിങ്ങൾ സെർവർ രഹസ്യവാചകം നൽകേണ്ടതുണ്ട്.</item>
|
||||
<item quantity="other">\"<xliff:g id="account">%s</xliff:g>\" അക്കൗണ്ട് ഉപയോഗിക്കാൻ നിങ്ങൾ സെർവർ രഹസ്യവാചകങ്ങൾ നൽകേണ്ടതുണ്ട്.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">ഇൻകമിംഗ് സെർവർ രഹസ്യവാചകം</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">ഔട്ട്ഗോയിംഗ് സെർവർ രഹസ്യവാചകം</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">ഔട്ട്ഗോയിംഗ് സെർവറിനായി സമാന രഹസ്യവാചകം ഉപയോഗിക്കുക</string>
|
||||
<string name="settings_import_server_name_format">സെർവർ നാമം: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_general_settings_item">പൊതുവായ ക്രമീകരണങ്ങൾ</string>
|
||||
</resources>
|
||||
44
feature/settings/import/src/main/res/values-nb/strings.xml
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Importer innstillinger</string>
|
||||
<string name="settings_import_pick_document_button">Velg fil</string>
|
||||
<string name="settings_import_button">Importér</string>
|
||||
<string name="settings_import_success_generic">Innstillinger korrekt importert</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Vennligst skriv inn passord</string>
|
||||
<string name="settings_import_authorization_required">Logg inn</string>
|
||||
<string name="settings_import_authorization_and_password_required">Logg inn og skriv inn passord</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_failure">Import av innstillinger mislyktes</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_read_failure">Klarte ikke avlese innstillingsfil</string>
|
||||
<string name="settings_import_partial_failure">Klarte ikke importere noen innstillinger</string>
|
||||
<string name="settings_import_status_success">Importert korrekt</string>
|
||||
<string name="settings_import_status_password_required">Passord påkreves</string>
|
||||
<string name="settings_import_status_log_in_required">Innlogging påkreves</string>
|
||||
<string name="settings_import_status_not_imported">Ikke importert</string>
|
||||
<string name="settings_import_status_error">Feil ved importering</string>
|
||||
<string name="settings_import_later_button">Senere</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_importing">Importerer innstillinger …</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">For å bruke <xliff:g id="account">%s</xliff:g>-kontoen må du angi tjenerpassordet.</item>
|
||||
<item quantity="other">For å bruke <xliff:g id="account">%s</xliff:g>-kontoen må du angi tjenerpassordene.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Passord for innkommende tjener</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Passord for utgående tjener</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Bruk samme passord for utgående tjener</string>
|
||||
<string name="settings_import_server_name_format">Tjenernavn: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">Logg inn og gi programmet tilgang til e-postene dine for å bruke denne e-postkontoen.</string>
|
||||
<string name="settings_import_oauth_sign_in">Logg inn</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Logg inn med Google</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Autorisering avbrutt</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Autorisering mislyktes med følgende feil: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">OAuth 2.0 støttes ikke med denne tilbyderen.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">Kunne ikke finne nettleser å bruke for å innvilge tilgang til kontoen din.</string>
|
||||
<string name="settings_import_general_settings_item">Generelle innstillinger</string>
|
||||
<string name="settings_import_pick_app_button">Importér fra app</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Importér fra app</string>
|
||||
<string name="settings_import_scan_qr_code_button">Skann QR-kode</string>
|
||||
<string name="settings_import_app_version_not_supported">Appversjonen støttes ikke.</string>
|
||||
</resources>
|
||||
44
feature/settings/import/src/main/res/values-nl/strings.xml
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Instellingen importeren</string>
|
||||
<string name="settings_import_pick_document_button">Bestand selecteren</string>
|
||||
<string name="settings_import_button">Importeren</string>
|
||||
<string name="settings_import_success_generic">Instellingen met succes geïmporteerd</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Voer de wachtwoorden in</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_required">Aanmelden</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_and_password_required">Meld u aan en voer de wachtwoorden in</string>
|
||||
<string name="settings_import_failure">Instellingen importeren mislukt</string>
|
||||
<string name="settings_import_read_failure">Lezen van instellingenbestand mislukt</string>
|
||||
<string name="settings_import_partial_failure">Importeren van sommige instellingen mislukt</string>
|
||||
<string name="settings_import_status_success">Met succes geïmporteerd</string>
|
||||
<string name="settings_import_status_password_required">Wachtwoord vereist</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_log_in_required">Aanmelden vereist</string>
|
||||
<string name="settings_import_status_not_imported">Niet geïmporteerd</string>
|
||||
<string name="settings_import_status_error">Importeren mislukt</string>
|
||||
<string name="settings_import_later_button">Later</string>
|
||||
<string name="settings_importing">Instellingen importeren…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">Om de account ‘<xliff:g id="account">%s</xliff:g>’ te gebruiken moet u het wachtwoord van de server opgeven.</item>
|
||||
<item quantity="other">Om de account ‘<xliff:g id="account">%s</xliff:g>’ te gebruiken moet u de wachtwoorden van de server opgeven.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Wachtwoord inkomende server</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Wachtwoord uitgaande server</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Gebruik hetzelfde wachtwoord voor de uitgaande server</string>
|
||||
<string name="settings_import_server_name_format">Servernaam: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">Om deze e-mailaccount te gebruiken, moet u aanmelden om de app toegang te geven tot uw e-mailberichten.</string>
|
||||
<string name="settings_import_oauth_sign_in">Aanmelden</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Aanmelden met Google</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Autorisatie geannuleerd</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Autorisatie is mislukt met de volgende foutmelding: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">OAuth 2.0 wordt momenteel niet ondersteund door deze provider.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">Deze app kan geen browser vinden. Een browser is nodig om toegang te krijgen tot uw account.</string>
|
||||
<string name="settings_import_general_settings_item">Algemene instellingen</string>
|
||||
<string name="settings_import_pick_app_button">Importeren vanuit app</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Importeren vanuit app</string>
|
||||
<string name="settings_import_scan_qr_code_button">QR-code scannen</string>
|
||||
<string name="settings_import_app_version_not_supported">App-versie niet ondersteund.</string>
|
||||
</resources>
|
||||
41
feature/settings/import/src/main/res/values-nn/strings.xml
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Importer innstillingar</string>
|
||||
<string name="settings_import_button">Importer</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_importing">Importerer innstillingar …</string>
|
||||
<string name="settings_import_general_settings_item">Generelle innstilingar</string>
|
||||
<string name="settings_import_pick_document_button">Vel fil</string>
|
||||
<string name="settings_import_scan_qr_code_button">Skann QR-kode</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Bruk same passord for utgåande tenar</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Utgåande tenar-passord</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Autorisering mislukka med følgjande feil: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_success_generic">Vellykka import av innstillingar</string>
|
||||
<string name="settings_import_pick_app_button">Importer frå app</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Importer frå app</string>
|
||||
<string name="settings_import_authorization_required">Ver vennleg og logg inn</string>
|
||||
<string name="settings_import_authorization_and_password_required">Logg inn, og fyll inn passord</string>
|
||||
<string name="settings_import_status_success">Vellukka import</string>
|
||||
<string name="settings_import_later_button">Seinare</string>
|
||||
<string name="settings_import_server_name_format">Servernamn: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_sign_in">Logg inn</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Logg inn med Google</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Autorisering kansellert</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">Appen kunne ikkje finne ein nettlesar for å gje tilgjenge til kontoen din.</string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">OAuth 2.0 er ikkje støtta med denne tilbydaren enno.</string>
|
||||
<string name="settings_import_password_required">Ver vennleg og skriv inn passord</string>
|
||||
<string name="settings_import_failure">Importering av innstillingar feila</string>
|
||||
<string name="settings_import_read_failure">Kunne ikkje lese innstillingsfil</string>
|
||||
<string name="settings_import_partial_failure">Kunne ikkje importere nokre innstillingar</string>
|
||||
<string name="settings_import_status_password_required">Passord påkravd</string>
|
||||
<string name="settings_import_status_log_in_required">Innlogging påkravd</string>
|
||||
<string name="settings_import_status_not_imported">Ikkje importert</string>
|
||||
<string name="settings_import_status_error">Feil under import</string>
|
||||
<string name="settings_import_incoming_server_password_hint">Innkommande tenar-passord</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">For å vere i stand til å bruke kontoen \"<xliff:g id="account">%s</xliff:g>\" må du angje tenar-passordet.</item>
|
||||
<item quantity="other">For å vere i stand til å bruke kontoen \"<xliff:g id="account">%s</xliff:g>\" må du angje tenar-passorda.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_oauth_description">For å bruke denne e-postkontoen, må du logge inn, og gje tilgjenge til e-postane dine.</string>
|
||||
<string name="settings_import_app_version_not_supported">App-versjon er ikkje støtta.</string>
|
||||
</resources>
|
||||
46
feature/settings/import/src/main/res/values-pl/strings.xml
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Importuj ustawienia</string>
|
||||
<string name="settings_import_pick_document_button">Wybierz plik</string>
|
||||
<string name="settings_import_button">Importuj</string>
|
||||
<string name="settings_import_success_generic">Ustawienia zostały zaimportowane</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Proszę podać hasła</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_required">Zaloguj się</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_and_password_required">Zaloguj się i podaj hasła</string>
|
||||
<string name="settings_import_failure">Import ustawień się nie powiódł</string>
|
||||
<string name="settings_import_read_failure">Odczyt pliku ustawień się nie powiódł</string>
|
||||
<string name="settings_import_partial_failure">Import niektórych ustawień się nie powiódł</string>
|
||||
<string name="settings_import_status_success">Zaimportowano z powodzeniem</string>
|
||||
<string name="settings_import_status_password_required">Hasło wymagane</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_log_in_required">Wymagane jest zalogowanie się</string>
|
||||
<string name="settings_import_status_not_imported">Niezaimportowane</string>
|
||||
<string name="settings_import_status_error">Import zakończony niepowodzeniem</string>
|
||||
<string name="settings_import_later_button">Później</string>
|
||||
<string name="settings_importing">Importowanie ustawień…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">Aby móc skorzystać z konta „<xliff:g id="account">%s</xliff:g>”, trzeba podać hasło.</item>
|
||||
<item quantity="few">Aby móc skorzystać z konta „<xliff:g id="account">%s</xliff:g>”, trzeba podać hasła.</item>
|
||||
<item quantity="many">Aby móc skorzystać z konta „<xliff:g id="account">%s</xliff:g>”, trzeba podać hasła.</item>
|
||||
<item quantity="other">Aby móc skorzystać z konta „<xliff:g id="account">%s</xliff:g>”, trzeba podać hasła.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Hasło serwera poczty przychodzącej</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Hasło serwera poczty wychodzącej</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Użyj tego samego hasła dla serwera poczty wychodzącej</string>
|
||||
<string name="settings_import_server_name_format">Nazwa serwera: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">Aby używać tego konta e-mail, musisz się zalogować i przyznać aplikacji dostęp do swoich e-maili.</string>
|
||||
<string name="settings_import_oauth_sign_in">Zaloguj się</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Zaloguj się przez Google</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Autoryzacja anulowana</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Autoryzacja nie powiodła się z powodu następującego błędu: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">Ten dostawca nie obsługuje obecnie protokołu OAuth 2.0.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">Aplikacja nie mogła znaleźć przeglądarki, za pomocą której można uzyskać dostęp do Twojego konta.</string>
|
||||
<string name="settings_import_general_settings_item">Ustawienia ogólne</string>
|
||||
<string name="settings_import_pick_app_button">Importuj z aplikacji</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Importuj z aplikacji</string>
|
||||
<string name="settings_import_scan_qr_code_button">Zeskanuj kod QR</string>
|
||||
<string name="settings_import_app_version_not_supported">Wersja aplikacji nie jest obsługiwana.</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Importar configurações</string>
|
||||
<string name="settings_import_pick_document_button">Selecionar arquivo</string>
|
||||
<string name="settings_import_button">Importar</string>
|
||||
<string name="settings_import_success_generic">As configurações foram importadas com sucesso</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Por favor, digite as senhas</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_required">Por favor, faça sua autenticação</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_and_password_required">Por favor, faça sua autenticação e digite as senha</string>
|
||||
<string name="settings_import_failure">Não foi possível importar as configurações</string>
|
||||
<string name="settings_import_read_failure">Não foi possível ler o arquivo de configurações</string>
|
||||
<string name="settings_import_partial_failure">Não foi possível importar algumas configurações</string>
|
||||
<string name="settings_import_status_success">Importado com sucesso</string>
|
||||
<string name="settings_import_status_password_required">É necessária a senha</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_log_in_required">É necessário fazer a sua autenticação</string>
|
||||
<string name="settings_import_status_not_imported">Não importado</string>
|
||||
<string name="settings_import_status_error">Falha na importação</string>
|
||||
<string name="settings_import_later_button">Mais tarde</string>
|
||||
<string name="settings_importing">Importando configurações…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">Para usar a conta \"<xliff:g id="account">%s</xliff:g>\", você precisa fornecer a senha do servidor.</item>
|
||||
<item quantity="many">Para usar a conta \"<xliff:g id="account">%s</xliff:g>\", você precisa fornecer as senhas do servidor.</item>
|
||||
<item quantity="other">Para usar a conta \"<xliff:g id="account">%s</xliff:g>\", você precisa fornecer as senhas do servidor.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Senha do servidor de recebimento</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Senha do servidor de envio</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Usar a mesma senha para o servidor de envio</string>
|
||||
<string name="settings_import_server_name_format">Nome do servidor: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">Para usar essa conta de e-mail, você precisa autenticar-se e fornecer acesso ao app dos seus e-mails.</string>
|
||||
<string name="settings_import_oauth_sign_in">Autenticar-se</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Autenticar-se com o Google</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Autorização cancelada</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Ocorreu o seguinte erro com a autorização: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">OAuth 2.0 não é suportado atualmente neste provedor.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">O aplicativo não conseguiu encontrar um navegador para usar para conceder acesso à sua conta.</string>
|
||||
<string name="settings_import_general_settings_item">Configurações gerais</string>
|
||||
<string name="settings_import_pick_app_button">Importar de app</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Importar do app</string>
|
||||
<string name="settings_import_scan_qr_code_button">Ler código QR</string>
|
||||
<string name="settings_import_app_version_not_supported">Versão do app não suportada.</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Importar configurações</string>
|
||||
<string name="settings_import_pick_document_button">Selecionar ficheiro</string>
|
||||
<string name="settings_import_button">Importar</string>
|
||||
<string name="settings_import_success_generic">Configurações importadas com sucesso</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Por favor inserir palavras-passe</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_required">Por favor, inicie sessão</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_and_password_required">Por favor, inicie sessão e insira palavras-passe</string>
|
||||
<string name="settings_import_failure">Falha na importação de configurações</string>
|
||||
<string name="settings_import_read_failure">Falha na leitura do ficheiro de configurações</string>
|
||||
<string name="settings_import_partial_failure">Falha na importação de algumas configurações</string>
|
||||
<string name="settings_import_status_success">A importação foi bem sucedida</string>
|
||||
<string name="settings_import_status_password_required">Necessária palavra-passe</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_log_in_required">Sessão iniciada necessária</string>
|
||||
<string name="settings_import_status_not_imported">Não importado</string>
|
||||
<string name="settings_import_status_error">Falha na importação</string>
|
||||
<string name="settings_import_later_button">Posteriormente</string>
|
||||
<string name="settings_importing">A importar configurações…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">Para poder utilizar a conta \"<xliff:g id="account">%s</xliff:g>\" tem de fornecer a palavra-chave do servidor.</item>
|
||||
<item quantity="many">Para poder utilizar a conta \"<xliff:g id="account">%s</xliff:g>\" tem de fornecer as palavras-chave dos servidors.</item>
|
||||
<item quantity="other">Para poder utilizar a conta \"<xliff:g id="account">%s</xliff:g>\" tem de fornecer as senhas do servidor.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Palavra-passe do servidor de entrada</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Palavra-passe do servidor de saída</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Utilizar a mesma palavra-passe para o servidor de saída</string>
|
||||
<string name="settings_import_server_name_format">Nome do servidor <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">Para usar essa conta de e-mail, precisa autenticar-se e fornecer acesso à app dos seus e-mails.</string>
|
||||
<string name="settings_import_oauth_sign_in">Iniciar sessão</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Iniciar sessão com o Google</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Autorização cancelada</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">A autorização falhou com o seguinte erro: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">OAuth 2.0 não é, de momento, suportado com este provedor.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">A aplicação não conseguiu encontrar um navegador para usar na concessão do acesso à sua conta.</string>
|
||||
<string name="settings_import_general_settings_item">Configurações gerais</string>
|
||||
<string name="settings_import_pick_app_button">Importar de app</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Importar da app</string>
|
||||
<string name="settings_import_scan_qr_code_button">Ler código QR</string>
|
||||
<string name="settings_import_app_version_not_supported">Versão do app não suportada.</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
45
feature/settings/import/src/main/res/values-ro/strings.xml
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Importare parametri</string>
|
||||
<string name="settings_import_pick_document_button">Selectează fișier</string>
|
||||
<string name="settings_import_button">Importă</string>
|
||||
<string name="settings_import_success_generic">Parametrii au fost importați cu succes</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Introdu parolele</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_required">Conectează-te</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_and_password_required">Conectează-te și introdu parolele</string>
|
||||
<string name="settings_import_failure">Importarea parametrilor a eșuat</string>
|
||||
<string name="settings_import_read_failure">Citirea fișierului cu setări a eșuat</string>
|
||||
<string name="settings_import_partial_failure">Importarea unor parametri a eșuat</string>
|
||||
<string name="settings_import_status_success">Importat cu succes</string>
|
||||
<string name="settings_import_status_password_required">Parola este necesară</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_log_in_required">Înregistrarea este necesară</string>
|
||||
<string name="settings_import_status_not_imported">Nu a fost importat</string>
|
||||
<string name="settings_import_status_error">Eșec la import</string>
|
||||
<string name="settings_import_later_button">Mai târziu</string>
|
||||
<string name="settings_importing">Se importă parametrii…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">Pentru a putea folosi contul \"<xliff:g id="account">%s</xliff:g>\" trebuie să specifici parola de server.</item>
|
||||
<item quantity="few">Pentru a putea folosi contul \"<xliff:g id="account">%s</xliff:g>\" trebuie să specifici parolele de server.</item>
|
||||
<item quantity="other">Pentru a putea folosi contul \"<xliff:g id="account">%s</xliff:g>\" trebuie să specifici parolele de server.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Parola serverului de primire</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Parola serverului de expediere</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Folosește aceeași parolă pentru serverul de expediere</string>
|
||||
<string name="settings_import_server_name_format">Nume server: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">Pentru a utiliza acest cont de e-mail, trebuie să te conectezi și să acorzi aplicației acces la e-mailuri.</string>
|
||||
<string name="settings_import_oauth_sign_in">Conectează-te</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Conectează-te cu Google</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Autorizație anulată</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Autorizarea a eșuat cu următoarea eroare: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">OAuth 2.0 nu este acceptat în prezent cu acest furnizor.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">Aplicația nu a putut găsi un navigator web pe care să îl folosească pentru a acorda acces la cont.</string>
|
||||
<string name="settings_import_general_settings_item">Preferințe generale</string>
|
||||
<string name="settings_import_pick_app_button">Import din aplicație</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Import din aplicație</string>
|
||||
<string name="settings_import_scan_qr_code_button">Scanează codul QR</string>
|
||||
<string name="settings_import_app_version_not_supported">Versiunea aplicației nu este compatibilă.</string>
|
||||
</resources>
|
||||
46
feature/settings/import/src/main/res/values-ru/strings.xml
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Импорт настроек</string>
|
||||
<string name="settings_import_pick_document_button">Выбрать файл</string>
|
||||
<string name="settings_import_button">Импорт</string>
|
||||
<string name="settings_import_success_generic">Настройки успешно импортированы</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Пожалуйста, введите пароли</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_required">Пожалуйста, войдите в систему</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_authorization_and_password_required">Пожалуйста, войдите в систему и введите пароль</string>
|
||||
<string name="settings_import_failure">Не удалось импортировать настройки</string>
|
||||
<string name="settings_import_read_failure">Не удалось прочесть файл настроек</string>
|
||||
<string name="settings_import_partial_failure">Не удалось импортировать некоторые настройки</string>
|
||||
<string name="settings_import_status_success">Успешный импорт</string>
|
||||
<string name="settings_import_status_password_required">Требуется пароль</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_log_in_required">Требуется вход в систему</string>
|
||||
<string name="settings_import_status_not_imported">Не импортировано</string>
|
||||
<string name="settings_import_status_error">Импорт не удался</string>
|
||||
<string name="settings_import_later_button">Позже</string>
|
||||
<string name="settings_importing">Импорт настроек…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">Чтобы использовать ящик \"<xliff:g id="account">%s</xliff:g>\", необходимо ввести пароль.</item>
|
||||
<item quantity="few">Чтобы использовать ящик \"<xliff:g id="account">%s</xliff:g>\", необходимо ввести пароли.</item>
|
||||
<item quantity="many">Чтобы использовать ящик \"<xliff:g id="account">%s</xliff:g>\", необходимо ввести пароли.</item>
|
||||
<item quantity="other">Чтобы использовать ящик \"<xliff:g id="account">%s</xliff:g>\", необходимо ввести пароли.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Пароль входящего сервера</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Пароль исходящего сервера</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Использовать тот же пароль для исходящего сервера</string>
|
||||
<string name="settings_import_server_name_format">Названия серверов: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_description">Чтобы использовать эту учётную запись электронной почты, вам необходимо войти в систему и предоставить приложению доступ к вашим электронным письмам.</string>
|
||||
<string name="settings_import_oauth_sign_in">Войти</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Войти с помощью Google</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Авторизация отменена</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_failed">Авторизация завершилась ошибкой со следующей ошибкой: <xliff:g id="error">%s</xliff:g></string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">OAuth 2.0 в настоящее время не поддерживается этим поставщиком.</string>
|
||||
<string name="settings_import_oauth_error_browser_not_found">Приложению не удалось найти браузер, чтобы дать доступ к вашей учётной записи.</string>
|
||||
<string name="settings_import_general_settings_item">Основные</string>
|
||||
<string name="settings_import_pick_app_button">Импорт из приложения</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Импорт из приложения</string>
|
||||
<string name="settings_import_scan_qr_code_button">Сканировать QR-код</string>
|
||||
<string name="settings_import_app_version_not_supported">Версия приложения не поддерживается.</string>
|
||||
</resources>
|
||||
43
feature/settings/import/src/main/res/values-sk/strings.xml
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="settings_import_title">Importovať nastavenia</string>
|
||||
<string name="settings_import_pick_document_button">Vybrať súbor</string>
|
||||
<string name="settings_import_button">Importovať</string>
|
||||
<string name="settings_import_success_generic">Nastavenia úspešne importované</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require entering a password-->
|
||||
<string name="settings_import_password_required">Zadajte heslá</string>
|
||||
<!--Displayed after importing accounts when some accounts require entering a password and some to use the OAuth authorization flow-->
|
||||
<string name="settings_import_failure">Import nastavení zlyhal</string>
|
||||
<!--Displayed after importing accounts when one or multiple accounts require to use the OAuth authorization flow-->
|
||||
<string name="settings_import_read_failure">Nepodarilo sa prečítať súbor s nastaveniami</string>
|
||||
<string name="settings_import_partial_failure">Import časti nastavení zlyhal</string>
|
||||
<string name="settings_import_status_success">Import prebehol úspešne</string>
|
||||
<string name="settings_import_status_password_required">Vyžadované heslo</string>
|
||||
<!--Content description for the icon that is displayed next to an imported account that requires sign-in-->
|
||||
<string name="settings_import_status_not_imported">Nenaimportované</string>
|
||||
<string name="settings_import_status_error">Zlyhanie pri importe</string>
|
||||
<string name="settings_import_later_button">Neskôr</string>
|
||||
<string name="settings_importing">Importovanie nastavení…</string>
|
||||
<plurals name="settings_import_password_prompt">
|
||||
<item quantity="one">Pred používaním účtu \"<xliff:g id="account">%s</xliff:g>\" je potrebné zadať heslo na server.</item>
|
||||
<item quantity="few">Pred používaním účtu \"<xliff:g id="account">%s</xliff:g>\" je potrebné zadať heslo na server.</item>
|
||||
<item quantity="many">Pred používaním účtov \"<xliff:g id="account">%s</xliff:g>\" je potrebné zadať heslo na server.</item>
|
||||
<item quantity="other">Pred používaním účtov „<xliff:g id="account">%s</xliff:g>“ je potrebné zadať heslo na server.</item>
|
||||
</plurals>
|
||||
<string name="settings_import_incoming_server_password_hint">Heslo na server na príjem</string>
|
||||
<string name="settings_import_outgoing_server_password_hint">Heslo na server na odosielanie</string>
|
||||
<string name="settings_import_use_same_password_for_outgoing_server">Použiť rovnaké heslo ako na server na odosielanie </string>
|
||||
<string name="settings_import_server_name_format">Názov serveru: <xliff:g id="hostname">%s</xliff:g></string>
|
||||
<string name="settings_import_general_settings_item">Všeobecné nastavenia</string>
|
||||
<string name="settings_import_oauth_error_oauth_not_supported">OAuth 2.0 nie je momentálne podporovaný poskytovateľ.</string>
|
||||
<string name="settings_import_authorization_and_password_required">Prosím prihláste sa a zadajte heslo</string>
|
||||
<string name="settings_import_pick_app_button">Importujte z aplikácie</string>
|
||||
<string name="settings_import_pick_app_dialog_title">Importovať z aplikácie</string>
|
||||
<string name="settings_import_status_log_in_required">Potrebné prihlásenie</string>
|
||||
<string name="settings_import_oauth_sign_in">Prihlásenie</string>
|
||||
<string name="settings_import_oauth_sign_in_with_google">Prihlásenie prostredníctvom Google</string>
|
||||
<string name="settings_import_scan_qr_code_button">Skenovať QR kód</string>
|
||||
<string name="settings_import_authorization_required">Prosím prihláste sa</string>
|
||||
<string name="settings_import_oauth_error_oauth_flow_canceled">Autorizácia zrušená</string>
|
||||
<string name="settings_import_app_version_not_supported">Verzia aplikácie nie je podporovaná.</string>
|
||||
</resources>
|
||||