fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v25 (#4273)

* fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v25

* Adapt to SDK changes:

- Remove logic related to sliding sync proxy, leaving just the minimum needed to detect its usage on the current session data.
- Remove code associated with the opt-in migration to native sliding sync, since it's now mandatory.
- Remove toggle between proxy/native sliding sync.
- Some fixes to session verification API breaks.

* Update forced logout dialog message, remove `NativeSlidingSyncMigrationBanner`

* Update screenshots

* Update all strings

* Remove `SuccessfulLogoutPendingAction`

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jorge Martín <jorgem@element.io>
Co-authored-by: ElementBot <android@element.io>
This commit is contained in:
renovate[bot] 2025-02-18 18:07:47 +01:00 committed by GitHub
parent e128eca991
commit beffba11b6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
95 changed files with 103 additions and 532 deletions

View file

@ -129,10 +129,8 @@ class RustMatrixClientFactory @Inject constructor(
// Apply sliding sync version settings
when (slidingSyncType) {
ClientBuilderSlidingSync.Restored -> this
is ClientBuilderSlidingSync.CustomProxy -> slidingSyncVersionBuilder(SlidingSyncVersionBuilder.Proxy(slidingSyncType.url))
ClientBuilderSlidingSync.Discovered -> slidingSyncVersionBuilder(SlidingSyncVersionBuilder.DiscoverProxy)
ClientBuilderSlidingSync.Simplified -> slidingSyncVersionBuilder(SlidingSyncVersionBuilder.DiscoverNative)
ClientBuilderSlidingSync.ForcedSimplified -> slidingSyncVersionBuilder(SlidingSyncVersionBuilder.Native)
ClientBuilderSlidingSync.Discovered -> slidingSyncVersionBuilder(SlidingSyncVersionBuilder.DISCOVER_NATIVE)
ClientBuilderSlidingSync.Native -> slidingSyncVersionBuilder(SlidingSyncVersionBuilder.NATIVE)
}
}
.run {
@ -143,21 +141,14 @@ class RustMatrixClientFactory @Inject constructor(
}
sealed interface ClientBuilderSlidingSync {
// The proxy is set by the user.
data class CustomProxy(val url: String) : ClientBuilderSlidingSync
// The proxy will be supplied when restoring the Session.
data object Restored : ClientBuilderSlidingSync
// A proxy must be discovered whilst building the session.
// A Native Sliding Sync instance must be discovered whilst building the session.
data object Discovered : ClientBuilderSlidingSync
// Use Simplified Sliding Sync.
data object Simplified : ClientBuilderSlidingSync
// Force using Simplified Sliding Sync.
// TODO allow the user to select between proxy, simplified or force simplified in developer options.
data object ForcedSimplified : ClientBuilderSlidingSync
// Force using Native Sliding Sync.
data object Native : ClientBuilderSlidingSync
}
private fun SessionData.toSession() = Session(
@ -166,6 +157,6 @@ private fun SessionData.toSession() = Session(
userId = userId,
deviceId = deviceId,
homeserverUrl = homeserverUrl,
slidingSyncVersion = slidingSyncProxy?.let(SlidingSyncVersion::Proxy) ?: SlidingSyncVersion.Native,
slidingSyncVersion = SlidingSyncVersion.NATIVE,
oidcData = oidcData,
)

View file

@ -8,7 +8,6 @@
package io.element.android.libraries.matrix.impl.auth
import com.squareup.anvil.annotations.ContributesBinding
import io.element.android.appconfig.AuthenticationConfig
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
import io.element.android.libraries.core.extensions.mapFailure
import io.element.android.libraries.di.AppScope
@ -32,7 +31,6 @@ import io.element.android.libraries.matrix.impl.keys.PassphraseGenerator
import io.element.android.libraries.matrix.impl.mapper.toSessionData
import io.element.android.libraries.matrix.impl.paths.SessionPaths
import io.element.android.libraries.matrix.impl.paths.SessionPathsFactory
import io.element.android.libraries.preferences.api.store.AppPreferencesStore
import io.element.android.libraries.sessionstorage.api.LoggedInState
import io.element.android.libraries.sessionstorage.api.LoginType
import io.element.android.libraries.sessionstorage.api.SessionStore
@ -40,10 +38,8 @@ import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.withContext
import org.matrix.rustcomponents.sdk.Client
import org.matrix.rustcomponents.sdk.ClientBuildException
import org.matrix.rustcomponents.sdk.ClientBuilder
import org.matrix.rustcomponents.sdk.HumanQrLoginException
import org.matrix.rustcomponents.sdk.OidcConfiguration
@ -64,7 +60,6 @@ class RustMatrixAuthenticationService @Inject constructor(
private val rustMatrixClientFactory: RustMatrixClientFactory,
private val passphraseGenerator: PassphraseGenerator,
private val oidcConfigurationProvider: OidcConfigurationProvider,
private val appPreferencesStore: AppPreferencesStore,
) : MatrixAuthenticationService {
// Passphrase which will be used for new sessions. Existing sessions will use the passphrase
// stored in the SessionData.
@ -288,28 +283,12 @@ class RustMatrixAuthenticationService @Inject constructor(
sessionPaths: SessionPaths,
config: suspend ClientBuilder.() -> ClientBuilder,
): Client {
val slidingSyncType = getSlidingSyncType()
if (slidingSyncType is ClientBuilderSlidingSync.Simplified) {
Timber.d("Creating client with simplified sliding sync")
try {
return rustMatrixClientFactory
.getBaseClientBuilder(
sessionPaths = sessionPaths,
passphrase = pendingPassphrase,
slidingSyncType = slidingSyncType,
)
.config()
.build()
} catch (e: ClientBuildException.SlidingSyncVersion) {
Timber.e(e, "Failed to create client with simplified sliding sync, trying with Proxy now")
}
}
Timber.d("Creating client with Proxy sliding sync")
Timber.d("Creating client with simplified sliding sync")
return rustMatrixClientFactory
.getBaseClientBuilder(
sessionPaths = sessionPaths,
passphrase = pendingPassphrase,
slidingSyncType = getSlidingSyncProxy(),
slidingSyncType = ClientBuilderSlidingSync.Discovered,
)
.config()
.build()
@ -322,43 +301,17 @@ class RustMatrixAuthenticationService @Inject constructor(
oidcConfiguration: OidcConfiguration,
progressListener: QrLoginProgressListener,
): Client {
val slidingSyncType = getSlidingSyncType()
if (slidingSyncType is ClientBuilderSlidingSync.Simplified) {
Timber.d("Creating client for QR Code login with simplified sliding sync")
try {
return rustMatrixClientFactory
.getBaseClientBuilder(
sessionPaths = sessionPaths,
passphrase = pendingPassphrase,
slidingSyncType = slidingSyncType,
)
.passphrase(passphrase)
.buildWithQrCode(qrCodeData, oidcConfiguration, progressListener)
} catch (e: HumanQrLoginException.SlidingSyncNotAvailable) {
Timber.e(e, "Failed to create client with simplified sliding sync, trying with Proxy now")
}
}
Timber.d("Creating client for QR Code login with Proxy sliding sync")
Timber.d("Creating client for QR Code login with simplified sliding sync")
return rustMatrixClientFactory
.getBaseClientBuilder(
sessionPaths = sessionPaths,
passphrase = pendingPassphrase,
slidingSyncType = getSlidingSyncProxy(),
slidingSyncType = ClientBuilderSlidingSync.Discovered,
)
.passphrase(passphrase)
.buildWithQrCode(qrCodeData, oidcConfiguration, progressListener)
}
private suspend fun getSlidingSyncType(nativeSlidingSyncFailed: Boolean = false) = when {
appPreferencesStore.isSimplifiedSlidingSyncEnabledFlow().first() && !nativeSlidingSyncFailed -> ClientBuilderSlidingSync.Simplified
else -> getSlidingSyncProxy()
}
private fun getSlidingSyncProxy() = when {
AuthenticationConfig.SLIDING_SYNC_PROXY_URL != null -> ClientBuilderSlidingSync.CustomProxy(AuthenticationConfig.SLIDING_SYNC_PROXY_URL!!)
else -> ClientBuilderSlidingSync.Discovered
}
private fun clear() {
currentClient?.close()
currentClient = null

View file

@ -12,7 +12,6 @@ import io.element.android.libraries.matrix.impl.paths.SessionPaths
import io.element.android.libraries.sessionstorage.api.LoginType
import io.element.android.libraries.sessionstorage.api.SessionData
import org.matrix.rustcomponents.sdk.Session
import org.matrix.rustcomponents.sdk.SlidingSyncVersion
import java.util.Date
internal fun Session.toSessionData(
@ -28,7 +27,7 @@ internal fun Session.toSessionData(
refreshToken = refreshToken,
homeserverUrl = homeserverUrl ?: this.homeserverUrl,
oidcData = oidcData,
slidingSyncProxy = (slidingSyncVersion as? SlidingSyncVersion.Proxy)?.url,
slidingSyncProxy = null,
loginTimestamp = Date(),
isTokenValid = isTokenValid,
loginType = loginType,

View file

@ -12,8 +12,7 @@ import org.matrix.rustcomponents.sdk.SlidingSyncVersion as RustSlidingSyncVersio
internal fun RustSlidingSyncVersion.map(): SlidingSyncVersion {
return when (this) {
RustSlidingSyncVersion.None -> SlidingSyncVersion.None
is RustSlidingSyncVersion.Proxy -> SlidingSyncVersion.Proxy
RustSlidingSyncVersion.Native -> SlidingSyncVersion.Native
RustSlidingSyncVersion.NONE -> SlidingSyncVersion.None
RustSlidingSyncVersion.NATIVE -> SlidingSyncVersion.Native
}
}

View file

@ -113,7 +113,7 @@ class RustSessionVerificationService(
override suspend fun requestVerification() = tryOrFail {
initVerificationControllerIfNeeded()
verificationController.requestVerification()
verificationController.requestDeviceVerification()
}
override suspend fun cancelVerification() = tryOrFail {

View file

@ -14,9 +14,9 @@ import io.element.android.libraries.matrix.api.verification.SessionVerificationR
import org.matrix.rustcomponents.sdk.SessionVerificationRequestDetails as RustSessionVerificationRequestDetails
fun RustSessionVerificationRequestDetails.map() = SessionVerificationRequestDetails(
senderId = UserId(senderId),
senderId = UserId(senderProfile.userId),
flowId = FlowId(flowId),
deviceId = DeviceId(deviceId),
displayName = displayName,
displayName = senderProfile.displayName,
firstSeenTimestamp = firstSeenTimestamp.toLong(),
)

View file

@ -11,7 +11,6 @@ import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.matrix.api.core.SessionId
import io.element.android.libraries.matrix.impl.createRustMatrixClientFactory
import io.element.android.libraries.matrix.impl.paths.SessionPathsFactory
import io.element.android.libraries.preferences.test.InMemoryAppPreferencesStore
import io.element.android.libraries.sessionstorage.api.SessionStore
import io.element.android.libraries.sessionstorage.impl.memory.InMemorySessionStore
import io.element.android.libraries.sessionstorage.test.aSessionData
@ -50,7 +49,6 @@ class RustMatrixAuthenticationServiceTest {
rustMatrixClientFactory = rustMatrixClientFactory,
passphraseGenerator = FakePassphraseGenerator(),
oidcConfigurationProvider = OidcConfigurationProvider(baseDirectory),
appPreferencesStore = InMemoryAppPreferencesStore(),
)
}
}

View file

@ -14,7 +14,7 @@ import org.matrix.rustcomponents.sdk.Session
import org.matrix.rustcomponents.sdk.SlidingSyncVersion
internal fun aRustSession(
proxy: SlidingSyncVersion = SlidingSyncVersion.None,
proxy: SlidingSyncVersion = SlidingSyncVersion.NONE,
accessToken: String = "accessToken",
refreshToken: String = "refreshToken",
): Session {

View file

@ -72,7 +72,7 @@ class SessionKtTest {
@Test
fun `toSessionData copy the sliding sync url if present`() {
val result = aRustSession(
proxy = SlidingSyncVersion.Proxy("proxyUrl")
proxy = SlidingSyncVersion.NATIVE
).toSessionData(
isTokenValid = true,
loginType = LoginType.PASSWORD,
@ -80,7 +80,7 @@ class SessionKtTest {
sessionPaths = SessionPaths(File("/a/file"), File("/a/cache")),
homeserverUrl = A_HOMESERVER_URL_2,
)
assertThat(result.slidingSyncProxy).isEqualTo("proxyUrl")
assertThat(result.slidingSyncProxy).isNull()
}
@Test

View file

@ -20,9 +20,6 @@ interface AppPreferencesStore {
suspend fun setTheme(theme: String)
fun getThemeFlow(): Flow<String?>
suspend fun setSimplifiedSlidingSyncEnabled(enabled: Boolean)
fun isSimplifiedSlidingSyncEnabledFlow(): Flow<Boolean>
suspend fun setHideImagesAndVideos(value: Boolean)
fun doesHideImagesAndVideosFlow(): Flow<Boolean>

View file

@ -1,23 +0,0 @@
/*
* Copyright 2024 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.libraries.preferences.api.store
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import javax.inject.Inject
class EnableNativeSlidingSyncUseCase @Inject constructor(
private val appPreferencesStore: AppPreferencesStore,
private val appCoroutineScope: CoroutineScope,
) {
operator fun invoke() {
appCoroutineScope.launch {
appPreferencesStore.setSimplifiedSlidingSyncEnabled(true)
}
}
}

View file

@ -1,31 +0,0 @@
/*
* Copyright 2024 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.libraries.preferences.api.store
import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.preferences.test.InMemoryAppPreferencesStore
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.test.advanceUntilIdle
import kotlinx.coroutines.test.runTest
import org.junit.Test
class EnableNativeSlidingSyncUseCaseTest {
@OptIn(ExperimentalCoroutinesApi::class)
@Test
fun `ensure that the use case sets the simplified sliding sync enabled flag`() = runTest {
val preferencesStore = InMemoryAppPreferencesStore()
val useCase = EnableNativeSlidingSyncUseCase(preferencesStore, this)
assertThat(preferencesStore.isSimplifiedSlidingSyncEnabledFlow().first()).isFalse()
useCase()
advanceUntilIdle()
assertThat(preferencesStore.isSimplifiedSlidingSyncEnabledFlow().first()).isTrue()
}
}

View file

@ -30,7 +30,6 @@ private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(na
private val developerModeKey = booleanPreferencesKey("developerMode")
private val customElementCallBaseUrlKey = stringPreferencesKey("elementCallBaseUrl")
private val themeKey = stringPreferencesKey("theme")
private val simplifiedSlidingSyncKey = booleanPreferencesKey("useSimplifiedSlidingSync")
private val hideImagesAndVideosKey = booleanPreferencesKey("hideImagesAndVideos")
private val logLevelKey = stringPreferencesKey("logLevel")
@ -82,18 +81,6 @@ class DefaultAppPreferencesStore @Inject constructor(
}
}
override suspend fun setSimplifiedSlidingSyncEnabled(enabled: Boolean) {
store.edit { prefs ->
prefs[simplifiedSlidingSyncKey] = enabled
}
}
override fun isSimplifiedSlidingSyncEnabledFlow(): Flow<Boolean> {
return store.data.map { prefs ->
prefs[simplifiedSlidingSyncKey] ?: true
}
}
override suspend fun setHideImagesAndVideos(value: Boolean) {
store.edit { prefs ->
prefs[hideImagesAndVideosKey] = value

View file

@ -51,14 +51,6 @@ class InMemoryAppPreferencesStore(
return theme
}
override suspend fun setSimplifiedSlidingSyncEnabled(enabled: Boolean) {
simplifiedSlidingSyncEnabled.value = enabled
}
override fun isSimplifiedSlidingSyncEnabledFlow(): Flow<Boolean> {
return simplifiedSlidingSyncEnabled
}
override suspend fun setHideImagesAndVideos(value: Boolean) {
hideImagesAndVideos.value = value
}

View file

@ -122,6 +122,8 @@
<string name="action_view_in_timeline">"Прагляд у хроніцы"</string>
<string name="action_view_source">"Прагляд зыходнага кода"</string>
<string name="action_yes">"Так"</string>
<string name="banner_migrate_to_native_sliding_sync_description">"Ваш сервер зараз падтрымлівае новы, хутчэйшы пратакол. Выйдзіце з сістэмы і зноў увайдзіце, каб абнавіць яе. Гэта дапаможа вам пазбегнуць прымусовага выхаду з сістэмы, калі стары пратакол будзе пазней выдалены."</string>
<string name="banner_migrate_to_native_sliding_sync_title">"Даступна абнаўленне"</string>
<string name="common_about">"Аб праграме"</string>
<string name="common_acceptable_use_policy">"Палітыка дапушчальнага выкарыстання"</string>
<string name="common_advanced_settings">"Пашыраныя налады"</string>

View file

@ -131,6 +131,8 @@
<string name="action_view_source">"Zobrazit zdroj"</string>
<string name="action_yes">"Ano"</string>
<string name="action_yes_try_again">"Ano, zkusit znovu"</string>
<string name="banner_migrate_to_native_sliding_sync_description">"Váš server nyní podporuje nový, rychlejší protokol. Chcete-li upgradovat, odhlaste se a znovu se přihlaste. Pokud to uděláte nyní, pomůže vám vyhnout se nucenému odhlášení, když bude starý protokol později odstraněn."</string>
<string name="banner_migrate_to_native_sliding_sync_title">"Upgrade k dispozici"</string>
<string name="common_about">"O aplikaci"</string>
<string name="common_acceptable_use_policy">"Zásady používání"</string>
<string name="common_adding_caption">"Přidání titulku"</string>

View file

@ -129,6 +129,8 @@
<string name="action_view_source">"Quellcode anzeigen"</string>
<string name="action_yes">"Ja"</string>
<string name="action_yes_try_again">"Ja, versuchen Sie es noch einmal"</string>
<string name="banner_migrate_to_native_sliding_sync_description">"Dein Server unterstützt jetzt ein neues, schnelleres Protokoll. Melde dich ab und melde dich wieder an, um zu aktualisieren. Wenn du das jetzt tust, vermeidest du eine erzwungene Abmeldung, wenn das alte Protokoll später entfernt wird."</string>
<string name="banner_migrate_to_native_sliding_sync_title">"Aktualisierung verfügbar"</string>
<string name="common_about">"Über"</string>
<string name="common_acceptable_use_policy">"Nutzungsrichtlinie"</string>
<string name="common_adding_caption">"Hinzufügen einer Bildunterschrift"</string>

View file

@ -127,6 +127,8 @@
<string name="action_view_in_timeline">"Προβολή στο χρονοδιάγραμμα"</string>
<string name="action_view_source">"Προβολή πηγής"</string>
<string name="action_yes">"Ναι"</string>
<string name="banner_migrate_to_native_sliding_sync_description">"Ο διακομιστής σου υποστηρίζει τώρα ένα νέο, ταχύτερο πρωτόκολλο. Αποσυνδέσου και συνδέσου ξανά για αναβάθμιση τώρα. Κάνοντας αυτό τώρα θα σε βοηθήσει να αποφύγεις μια αναγκαστική αποσύνδεση όταν το παλιό πρωτόκολλο καταργηθεί αργότερα."</string>
<string name="banner_migrate_to_native_sliding_sync_title">"Διαθέσιμη αναβάθμιση"</string>
<string name="common_about">"Σχετικά"</string>
<string name="common_acceptable_use_policy">"Πολιτική αποδεκτής χρήσης"</string>
<string name="common_adding_caption">"Η λεζάντα προστίθεται"</string>

View file

@ -129,6 +129,8 @@
<string name="action_view_source">"Vaata lähtekoodi"</string>
<string name="action_yes">"Jah"</string>
<string name="action_yes_try_again">"Jah, proovi uuesti"</string>
<string name="banner_migrate_to_native_sliding_sync_description">"Sinu koduserver toetab uut ja kiiremat protokolli. Uuendamiseks logi korraks rakendusest välja ja siis tagasi. Mingil hetkel tulevikus vana protokoll eemaldatakse kasutusest ja tehes uuenduse nüüd väldid hilisemat sundkorras uuendust."</string>
<string name="banner_migrate_to_native_sliding_sync_title">"Saadaval on uuendus"</string>
<string name="common_about">"Rakenduse teave"</string>
<string name="common_acceptable_use_policy">"Vastuvõetava kasutamise põhimõtted"</string>
<string name="common_adding_caption">"Lisame selgitust"</string>

View file

@ -112,6 +112,7 @@
<string name="action_view_in_timeline">"دیدن در خط زمانی"</string>
<string name="action_view_source">"دیدن منبع"</string>
<string name="action_yes">"بله"</string>
<string name="banner_migrate_to_native_sliding_sync_title">"ارتقا موجود است"</string>
<string name="common_about">"درباره"</string>
<string name="common_acceptable_use_policy">"سیاست استفادهٔ پذیرفتنی"</string>
<string name="common_advanced_settings">"تنظیمات پیش‌رفته"</string>

View file

@ -129,6 +129,8 @@
<string name="action_view_source">"Näytä lähde"</string>
<string name="action_yes">"Kyllä"</string>
<string name="action_yes_try_again">"Kyllä, yritä uudelleen"</string>
<string name="banner_migrate_to_native_sliding_sync_description">"Palvelimesi tukee nyt uutta, nopeampaa protokollaa. Kirjaudu ulos ja takaisin sisään päivittääksesi nyt. Jos teet tämän nyt, voit välttää pakotetun uloskirjautumisen, kun vanha protokolla poistetaan myöhemmin."</string>
<string name="banner_migrate_to_native_sliding_sync_title">"Päivitys saatavilla"</string>
<string name="common_about">"Tietoa"</string>
<string name="common_acceptable_use_policy">"Hyväksyttävän käytön käytäntö"</string>
<string name="common_adding_caption">"Lisätään kuvatekstiä"</string>

View file

@ -129,6 +129,8 @@
<string name="action_view_source">"Afficher la source"</string>
<string name="action_yes">"Oui"</string>
<string name="action_yes_try_again">"Oui, réessayez"</string>
<string name="banner_migrate_to_native_sliding_sync_description">"Votre serveur prend désormais en charge un nouveau protocole plus rapide. Déconnectez-vous, puis reconnectez-vous pour effectuer la mise à niveau dès maintenant. En le faisant tout de suite, vous éviterez une déconnexion forcée lorsque lancien protocole sera supprimé."</string>
<string name="banner_migrate_to_native_sliding_sync_title">"Mise à niveau disponible"</string>
<string name="common_about">"À propos"</string>
<string name="common_acceptable_use_policy">"Politique dutilisation acceptable"</string>
<string name="common_adding_caption">"Ajout dune légende"</string>

View file

@ -129,6 +129,8 @@
<string name="action_view_source">"Forrás megtekintése"</string>
<string name="action_yes">"Igen"</string>
<string name="action_yes_try_again">"Igen, újrapróbálkozás"</string>
<string name="banner_migrate_to_native_sliding_sync_description">"A kiszolgálója mostantól egy új, gyorsabb protokollt támogat. A frissítéshez jelentkezzen ki, majd jelentkezzen be újra. Ha ezt most megteszi, elkerülheti a kényszerített kijelentkeztetést a régi protokollt eltávolításakor."</string>
<string name="banner_migrate_to_native_sliding_sync_title">"Frissítés érhető el"</string>
<string name="common_about">"Névjegy"</string>
<string name="common_acceptable_use_policy">"Elfogadható használatra vonatkozó szabályzat"</string>
<string name="common_adding_caption">"Felirat hozzáadása"</string>

View file

@ -125,6 +125,8 @@
<string name="action_view_in_timeline">"Lihat di lini masa"</string>
<string name="action_view_source">"Tampilkan sumber"</string>
<string name="action_yes">"Ya"</string>
<string name="banner_migrate_to_native_sliding_sync_description">"Server Anda kini mendukung protokol baru yang lebih cepat. Keluar dan masuk lagi untuk memperbarui sekarang. Melakukan hal ini sekarang akan membantu Anda menghindari keluar paksa saat protokol lama dihapus nantinya."</string>
<string name="banner_migrate_to_native_sliding_sync_title">"Peningkatan tersedia"</string>
<string name="common_about">"Tentang"</string>
<string name="common_acceptable_use_policy">"Kebijakan penggunaan wajar"</string>
<string name="common_adding_caption">"Menambahkan keterangan"</string>

View file

@ -129,6 +129,8 @@
<string name="action_view_source">"Vedi codice sorgente"</string>
<string name="action_yes">"Sì"</string>
<string name="action_yes_try_again">"Sì, riprova"</string>
<string name="banner_migrate_to_native_sliding_sync_description">"Il tuo server ora supporta un nuovo protocollo più veloce. Esci e rientra per effettuare l\'aggiornamento. Se lo fai ora, eviterai una disconnessione forzata quando il vecchio protocollo verrà rimosso in seguito."</string>
<string name="banner_migrate_to_native_sliding_sync_title">"Aggiornamento disponibile"</string>
<string name="common_about">"Informazioni"</string>
<string name="common_acceptable_use_policy">"Regole sull\'utilizzo consentito"</string>
<string name="common_adding_caption">"Aggiunta didascalia"</string>

View file

@ -113,6 +113,7 @@
<string name="action_take_photo">"Ta bilde"</string>
<string name="action_view_source">"Vis kilde"</string>
<string name="action_yes">"Ja"</string>
<string name="banner_migrate_to_native_sliding_sync_title">"Oppgradering tilgjengelig"</string>
<string name="common_about">"Om"</string>
<string name="common_acceptable_use_policy">"Retningslinjer for akseptabel bruk"</string>
<string name="common_adding_caption">"Legger til bildetekst"</string>

View file

@ -120,6 +120,8 @@
<string name="action_view_in_timeline">"Bekijk in tijdlijn"</string>
<string name="action_view_source">"Bron weergeven"</string>
<string name="action_yes">"Ja"</string>
<string name="banner_migrate_to_native_sliding_sync_description">"Je server ondersteunt nu een nieuw, sneller protocol. Log uit en log opnieuw in om nu te upgraden. Als je dit nu doet, voorkom je dat je geforceerd uitlogt wordt wanneer het oude protocol later wordt verwijderd."</string>
<string name="banner_migrate_to_native_sliding_sync_title">"Upgrade beschikbaar"</string>
<string name="common_about">"Over"</string>
<string name="common_acceptable_use_policy">"Beleid inzake redelijk gebruik"</string>
<string name="common_advanced_settings">"Geavanceerde instellingen"</string>

View file

@ -131,6 +131,8 @@
<string name="action_view_source">"Wyświetl źródło"</string>
<string name="action_yes">"Tak"</string>
<string name="action_yes_try_again">"Tak, spróbuj ponownie"</string>
<string name="banner_migrate_to_native_sliding_sync_description">"Twój serwer obsługuje teraz nowy, szybszy protokół. Wyloguj się i zaloguj ponownie, aby uaktualnić teraz. Zrobienie tego teraz pomoże uniknąć wymuszonego wylogowania, gdy stary protokół zostanie później usunięty."</string>
<string name="banner_migrate_to_native_sliding_sync_title">"Dostępna aktualizacja"</string>
<string name="common_about">"O programie"</string>
<string name="common_acceptable_use_policy">"Polityka użytkowania"</string>
<string name="common_adding_caption">"Dodawanie opisu"</string>

View file

@ -129,6 +129,8 @@
<string name="action_view_source">"Ver fonte"</string>
<string name="action_yes">"Sim"</string>
<string name="action_yes_try_again">"Sim, tentar novamente"</string>
<string name="banner_migrate_to_native_sliding_sync_description">"O teu servidor suporta agora um protocolo novo e mais rápido. Termina a sessão e volta a iniciar sessão para atualizar agora. Se o fizeres agora, evitarás um fim de sessão forçado quando o protocolo antigo for removido mais tarde."</string>
<string name="banner_migrate_to_native_sliding_sync_title">"Atualização disponível"</string>
<string name="common_about">"Sobre"</string>
<string name="common_acceptable_use_policy">"Política de utilização aceitável"</string>
<string name="common_adding_caption">"A adicionar legenda"</string>

View file

@ -123,6 +123,8 @@
<string name="action_view_in_timeline">"Vedeți în cameră"</string>
<string name="action_view_source">"Vedeți sursă"</string>
<string name="action_yes">"Da"</string>
<string name="banner_migrate_to_native_sliding_sync_description">"Serverul dvs. acceptă acum un protocol nou, mai rapid. Deconectați-vă și conectați-vă din nou pentru a face upgrade acum. Dacă faceți acest lucru acum, vă va ajuta să evitați o deconectare forțată atunci când vechiul protocol este eliminat ulterior."</string>
<string name="banner_migrate_to_native_sliding_sync_title">"Upgrade disponibil"</string>
<string name="common_about">"Despre"</string>
<string name="common_acceptable_use_policy">"Politică de utilizare rezonabilă"</string>
<string name="common_advanced_settings">"Setări avansate"</string>

View file

@ -131,6 +131,8 @@
<string name="action_view_source">"Показать источник"</string>
<string name="action_yes">"Да"</string>
<string name="action_yes_try_again">"Да, попробуйте еще раз"</string>
<string name="banner_migrate_to_native_sliding_sync_description">"Теперь ваш сервер поддерживает новый, более быстрый протокол. Чтобы обновить его прямо сейчас, выйдите и войдите в свою учётную запись снова. Сделав это сейчас, вы сможете избежать принудительного выхода из системы при последующем удалении старого протокола."</string>
<string name="banner_migrate_to_native_sliding_sync_title">"Доступно обновление"</string>
<string name="common_about">"О приложении"</string>
<string name="common_acceptable_use_policy">"Политика допустимого использования"</string>
<string name="common_adding_caption">"Добавление подписи"</string>

View file

@ -131,6 +131,8 @@
<string name="action_view_source">"Zobraziť zdroj"</string>
<string name="action_yes">"Áno"</string>
<string name="action_yes_try_again">"Áno, skúsiť to znova"</string>
<string name="banner_migrate_to_native_sliding_sync_description">"Váš server teraz podporuje nový, rýchlejší protokol. Odhláste sa a prihláste sa znova, aby ste mohli aktualizovať. Ak to urobíte teraz, pomôže vám vyhnúť sa nútenému odhláseniu, keď sa starý protokol neskôr odstráni."</string>
<string name="banner_migrate_to_native_sliding_sync_title">"Aktualizácia je k dispozícii"</string>
<string name="common_about">"O aplikácii"</string>
<string name="common_acceptable_use_policy">"Zásady prijateľného používania"</string>
<string name="common_adding_caption">"Pridáva sa titulok"</string>

View file

@ -127,6 +127,9 @@
<string name="action_view_in_timeline">"Visa i tidslinjen"</string>
<string name="action_view_source">"Visa källkod"</string>
<string name="action_yes">"Ja"</string>
<string name="action_yes_try_again">"Ja, försök igen"</string>
<string name="banner_migrate_to_native_sliding_sync_description">"Din server stöder nu ett nytt, snabbare protokoll. Logga ut och logga in igen för att uppgradera nu. Om du gör detta nu hjälper du dig att undvika en tvingad utloggning när det gamla protokollet tas bort senare."</string>
<string name="banner_migrate_to_native_sliding_sync_title">"Uppgradering tillgänglig"</string>
<string name="common_about">"Om"</string>
<string name="common_acceptable_use_policy">"Policy för godtagbar användning"</string>
<string name="common_adding_caption">"Lägga till bildtext"</string>

View file

@ -129,6 +129,8 @@
<string name="action_view_source">"Kaynağı görüntüle"</string>
<string name="action_yes">"Evet"</string>
<string name="action_yes_try_again">"Evet, tekrar dene"</string>
<string name="banner_migrate_to_native_sliding_sync_description">"Sunucunuz artık yeni, daha hızlı bir protokolü destekliyor. Şimdi oturumu kapatıp tekrar oturum açarak yükseltme yapın. Bunu şimdi yapmak, eski protokol daha sonra kaldırıldığında zorunlu oturum kapatmayı önlemenize yardımcı olacaktır."</string>
<string name="banner_migrate_to_native_sliding_sync_title">"Yükseltme mevcut"</string>
<string name="common_about">"Hakkında"</string>
<string name="common_acceptable_use_policy">"Kabul edilebilir kullanım politikası"</string>
<string name="common_adding_caption">"Açıklama ekleme"</string>

View file

@ -131,6 +131,8 @@
<string name="action_view_source">"Переглянути джерело"</string>
<string name="action_yes">"Так"</string>
<string name="action_yes_try_again">"Так, повторити спробу"</string>
<string name="banner_migrate_to_native_sliding_sync_description">"Ваш сервер тепер підтримує новий, швидший протокол. Вийдіть із системи та увійдіть знову, щоб оновити систему зараз. Якщо ви зробите це зараз, це допоможе вам уникнути примусового виходу з системи, коли старий протокол буде видалено пізніше."</string>
<string name="banner_migrate_to_native_sliding_sync_title">"Доступне оновлення"</string>
<string name="common_about">"Відомості"</string>
<string name="common_acceptable_use_policy">"Політика прийнятного використання"</string>
<string name="common_adding_caption">"Додавання підпису"</string>

View file

@ -126,6 +126,8 @@
<string name="action_view_source">"檢視原始碼"</string>
<string name="action_yes">"是"</string>
<string name="action_yes_try_again">"是的,再試一次"</string>
<string name="banner_migrate_to_native_sliding_sync_description">"您的伺服器現在支援新的、更快的協定。立即登出並重新登入以進行升級。現在這樣做將協助您避免在稍後移除舊協定時被強制登出。"</string>
<string name="banner_migrate_to_native_sliding_sync_title">"可升級"</string>
<string name="common_about">"關於"</string>
<string name="common_acceptable_use_policy">"可接受使用政策"</string>
<string name="common_adding_caption">"新增標題"</string>

View file

@ -127,6 +127,8 @@
<string name="action_view_source">"查看源码"</string>
<string name="action_yes">"是"</string>
<string name="action_yes_try_again">"是的,再试一次"</string>
<string name="banner_migrate_to_native_sliding_sync_description">"您的服务器现在支持更快的新协议。现在登出并重新登录以进行升级。现在这样做可以帮助您避免在以后删除旧协议时被强制登出。"</string>
<string name="banner_migrate_to_native_sliding_sync_title">"有可用升级"</string>
<string name="common_about">"关于"</string>
<string name="common_acceptable_use_policy">"可接受的使用政策"</string>
<string name="common_adding_caption">"添加标题"</string>

View file

@ -129,6 +129,8 @@
<string name="action_view_source">"View source"</string>
<string name="action_yes">"Yes"</string>
<string name="action_yes_try_again">"Yes, try again"</string>
<string name="banner_migrate_to_native_sliding_sync_description">"Your server now supports a new, faster protocol. Log out and log back in to upgrade now. Doing this now will help you avoid a forced logout when the old protocol is removed later."</string>
<string name="banner_migrate_to_native_sliding_sync_title">"Upgrade available"</string>
<string name="common_about">"About"</string>
<string name="common_acceptable_use_policy">"Acceptable use policy"</string>
<string name="common_adding_caption">"Adding caption"</string>