diff --git a/app/build.gradle b/app/build.gradle
index eb2c16e953..ab0f5977ab 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -372,14 +372,26 @@ dependencies {
testImplementation 'org.robolectric:shadows-multidex:4.4'
implementation 'com.github.bumptech.glide:compose:1.0.0-alpha.5'
- implementation 'androidx.compose.ui:ui:1.5.2'
- implementation 'androidx.compose.ui:ui-tooling:1.5.2'
- implementation "com.google.accompanist:accompanist-themeadapter-appcompat:0.33.1-alpha"
- implementation "com.google.accompanist:accompanist-pager-indicators:0.33.1-alpha"
- implementation "androidx.compose.runtime:runtime-livedata:1.5.2"
+ implementation 'androidx.compose.ui:ui:1.6.2'
+ implementation 'androidx.compose.animation:animation:1.6.2'
+ implementation 'androidx.compose.ui:ui-tooling:1.6.2'
+ implementation "androidx.compose.runtime:runtime-livedata:1.6.2"
+ implementation 'androidx.compose.foundation:foundation-layout:1.6.2'
+ implementation 'androidx.compose.material:material:1.6.2'
+ androidTestImplementation 'androidx.compose.ui:ui-test-junit4-android:1.6.2'
+ debugImplementation 'androidx.compose.ui:ui-test-manifest:1.6.2'
- implementation 'androidx.compose.foundation:foundation-layout:1.5.2'
- implementation 'androidx.compose.material:material:1.5.2'
+ implementation "com.google.accompanist:accompanist-themeadapter-appcompat:0.33.1-alpha"
+ implementation "com.google.accompanist:accompanist-pager:0.33.1-alpha"
+ implementation "com.google.accompanist:accompanist-pager-indicators:0.33.1-alpha"
+ implementation "com.google.accompanist:accompanist-permissions:0.33.1-alpha"
+
+ implementation "androidx.camera:camera-camera2:1.3.1"
+ implementation "androidx.camera:camera-lifecycle:1.3.1"
+ implementation "androidx.camera:camera-view:1.3.1"
+
+ implementation 'com.google.firebase:firebase-core:21.1.1'
+ implementation "com.google.mlkit:barcode-scanning:17.2.0"
}
static def getLastCommitTimestamp() {
diff --git a/app/src/androidTest/java/network/loki/messenger/HomeActivityTests.kt b/app/src/androidTest/java/network/loki/messenger/HomeActivityTests.kt
index a20a3a2a67..258ba95183 100644
--- a/app/src/androidTest/java/network/loki/messenger/HomeActivityTests.kt
+++ b/app/src/androidTest/java/network/loki/messenger/HomeActivityTests.kt
@@ -22,6 +22,8 @@ import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.uiautomator.By
+import androidx.test.uiautomator.UiDevice
import com.adevinta.android.barista.interaction.PermissionGranter
import network.loki.messenger.util.InputBarButtonDrawableMatcher.Companion.inputButtonWithDrawable
import org.hamcrest.Matcher
@@ -49,9 +51,14 @@ class HomeActivityTests {
private val activityMonitor = Instrumentation.ActivityMonitor(ConversationActivityV2::class.java.name, null, false)
+ private val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
+
+ private val context = InstrumentationRegistry.getInstrumentation().targetContext
+
@Before
fun setUp() {
InstrumentationRegistry.getInstrumentation().addMonitor(activityMonitor)
+
}
@After
@@ -72,25 +79,34 @@ class HomeActivityTests {
onView(isRoot()).perform(waitFor(500))
}
+ private fun objectFromDesc(id: Int) = device.findObject(By.desc(context.getString(id)))
+
private fun setupLoggedInState(hasViewedSeed: Boolean = false) {
// landing activity
- onView(withId(R.id.registerButton)).perform(ViewActions.click())
- // session ID - register activity
- onView(withId(R.id.registerButton)).perform(ViewActions.click())
+ objectFromDesc(R.string.onboardingAccountCreate).click()
+
// display name selection
- onView(withId(R.id.displayNameEditText)).perform(ViewActions.typeText("test-user123"))
- onView(withId(R.id.registerButton)).perform(ViewActions.click())
+ objectFromDesc(R.string.displayNameEnter).click()
+ device.pressKeyCode(28)
+ device.pressKeyCode(29)
+ device.pressKeyCode(30)
+
+ // Continue with display name
+ objectFromDesc(R.string.continue_2).click()
+
+ // Continue with default push notification setting
+ objectFromDesc(R.string.continue_2).click()
+
// PN select
if (hasViewedSeed) {
// has viewed seed is set to false after register activity
TextSecurePreferences.setHasViewedSeed(InstrumentationRegistry.getInstrumentation().targetContext, true)
}
- onView(withId(R.id.backgroundPollingOptionView)).perform(ViewActions.click())
- onView(withId(R.id.registerButton)).perform(ViewActions.click())
// allow notification permission
PermissionGranter.allowPermissionsIfNeeded(Manifest.permission.POST_NOTIFICATIONS)
}
+
private fun goToMyChat() {
onView(withId(R.id.newConversationButton)).perform(ViewActions.click())
onView(withId(R.id.createPrivateChatButton)).perform(ViewActions.click())
@@ -111,8 +127,8 @@ class HomeActivityTests {
@Test
fun testLaunches_dismiss_seedView() {
setupLoggedInState()
- onView(allOf(withId(R.id.button), isDescendantOfA(withId(R.id.seedReminderView)))).perform(ViewActions.click())
- onView(withId(R.id.copyButton)).perform(ViewActions.click())
+ objectFromDesc(R.string.continue_2).click()
+ objectFromDesc(R.string.copy).click()
pressBack()
onView(withId(R.id.seedReminderView)).check(matches(not(isDisplayed())))
}
@@ -133,7 +149,7 @@ class HomeActivityTests {
fun testChat_withSelf() {
setupLoggedInState()
goToMyChat()
- TextSecurePreferences.setLinkPreviewsEnabled(InstrumentationRegistry.getInstrumentation().targetContext, true)
+ TextSecurePreferences.setLinkPreviewsEnabled(context, true)
sendMessage("howdy")
sendMessage("test")
// tests url rewriter doesn't crash
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 79d55b37f8..9cbede54f6 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -113,12 +113,17 @@
android:windowSoftInputMode="adjustResize"
android:theme="@style/Theme.Session.DayNight.FlatActionBar" />
+ Unit = {}) { text(context.resources.getText(id)) }
+
fun view(view: View) = contentView.addView(view)
fun view(@LayoutRes layout: Int): View = LayoutInflater.from(context).inflate(layout, contentView)
diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt
index 76bf7b875f..b8e71cbfaf 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt
@@ -115,7 +115,6 @@ import org.thoughtcrime.securesms.conversation.v2.MessageDetailActivity.Companio
import org.thoughtcrime.securesms.conversation.v2.MessageDetailActivity.Companion.ON_RESEND
import org.thoughtcrime.securesms.conversation.v2.dialogs.BlockedDialog
import org.thoughtcrime.securesms.conversation.v2.dialogs.LinkPreviewDialog
-import org.thoughtcrime.securesms.conversation.v2.dialogs.SendSeedDialog
import org.thoughtcrime.securesms.conversation.v2.input_bar.InputBarButton
import org.thoughtcrime.securesms.conversation.v2.input_bar.InputBarDelegate
import org.thoughtcrime.securesms.conversation.v2.input_bar.InputBarRecordingViewDelegate
@@ -162,6 +161,7 @@ import org.thoughtcrime.securesms.mms.MediaConstraints
import org.thoughtcrime.securesms.mms.Slide
import org.thoughtcrime.securesms.mms.SlideDeck
import org.thoughtcrime.securesms.mms.VideoSlide
+import org.thoughtcrime.securesms.onboarding.recoverypassword.startRecoveryPasswordActivity
import org.thoughtcrime.securesms.permissions.Permissions
import org.thoughtcrime.securesms.reactions.ReactionsDialogFragment
import org.thoughtcrime.securesms.reactions.any.ReactWithAnyEmojiDialogFragment
@@ -1605,9 +1605,7 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
val userPublicKey = textSecurePreferences.getLocalNumber()
val isNoteToSelf = (recipient.isContactRecipient && recipient.address.toString() == userPublicKey)
if (text.contains(seed) && !isNoteToSelf && !hasPermissionToSendSeed) {
- val dialog = SendSeedDialog { sendTextOnlyMessage(true) }
- dialog.show(supportFragmentManager, "Send Seed Dialog")
- return null
+ startRecoveryPasswordActivity()
}
// Create the message
val message = VisibleMessage().applyExpiryMode(viewModel.threadId)
diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/MessageDetailActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/MessageDetailActivity.kt
index d5e28fb936..00550c8d52 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/MessageDetailActivity.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/MessageDetailActivity.kt
@@ -364,7 +364,7 @@ fun FileDetails(fileDetails: List) {
fun TitledErrorText(titledText: TitledText?) {
TitledText(
titledText,
- valueStyle = LocalTextStyle.current.copy(color = colorDestructive)
+ style = LocalTextStyle.current.copy(color = colorDestructive)
)
}
@@ -372,7 +372,7 @@ fun TitledErrorText(titledText: TitledText?) {
fun TitledMonospaceText(titledText: TitledText?) {
TitledText(
titledText,
- valueStyle = LocalTextStyle.current.copy(fontFamily = FontFamily.Monospace)
+ style = LocalTextStyle.current.copy(fontFamily = FontFamily.Monospace)
)
}
@@ -380,11 +380,11 @@ fun TitledMonospaceText(titledText: TitledText?) {
fun TitledText(
titledText: TitledText?,
modifier: Modifier = Modifier,
- valueStyle: TextStyle = LocalTextStyle.current,
+ style: TextStyle = LocalTextStyle.current,
) {
titledText?.apply {
TitledView(title, modifier) {
- Text(text, style = valueStyle, modifier = Modifier.fillMaxWidth())
+ Text(text, style = style, modifier = Modifier.fillMaxWidth())
}
}
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/home/HomeActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/home/HomeActivity.kt
index c063f30538..c73fbce13c 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/home/HomeActivity.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/home/HomeActivity.kt
@@ -7,9 +7,32 @@ import android.content.ClipboardManager
import android.content.Intent
import android.os.Build
import android.os.Bundle
-import android.text.SpannableString
import android.widget.Toast
import androidx.activity.viewModels
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.requiredWidth
+import androidx.compose.foundation.layout.width
+import androidx.compose.material.Divider
+import androidx.compose.material.Icon
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.tooling.preview.PreviewParameter
+import androidx.compose.ui.unit.dp
import androidx.core.os.bundleOf
import androidx.core.view.isVisible
import androidx.lifecycle.Lifecycle
@@ -65,12 +88,19 @@ import org.thoughtcrime.securesms.messagerequests.MessageRequestsActivity
import org.thoughtcrime.securesms.mms.GlideApp
import org.thoughtcrime.securesms.mms.GlideRequests
import org.thoughtcrime.securesms.notifications.PushRegistry
-import org.thoughtcrime.securesms.onboarding.SeedActivity
-import org.thoughtcrime.securesms.onboarding.SeedReminderViewDelegate
+import org.thoughtcrime.securesms.onboarding.recoverypassword.startRecoveryPasswordActivity
import org.thoughtcrime.securesms.permissions.Permissions
import org.thoughtcrime.securesms.preferences.SettingsActivity
import org.thoughtcrime.securesms.showMuteDialog
import org.thoughtcrime.securesms.showSessionDialog
+import org.thoughtcrime.securesms.ui.AppTheme
+import org.thoughtcrime.securesms.ui.GetString
+import org.thoughtcrime.securesms.ui.OutlineButton
+import org.thoughtcrime.securesms.ui.PreviewTheme
+import org.thoughtcrime.securesms.ui.SessionShieldIcon
+import org.thoughtcrime.securesms.ui.ThemeResPreviewParameterProvider
+import org.thoughtcrime.securesms.ui.h8
+import org.thoughtcrime.securesms.ui.small
import org.thoughtcrime.securesms.util.ConfigurationMessageUtilities
import org.thoughtcrime.securesms.util.IP2Country
import org.thoughtcrime.securesms.util.disableClipping
@@ -82,7 +112,6 @@ import javax.inject.Inject
@AndroidEntryPoint
class HomeActivity : PassphraseRequiredActionBarActivity(),
ConversationClickListener,
- SeedReminderViewDelegate,
GlobalSearchInputLayout.GlobalSearchInputLayoutListener {
companion object {
@@ -170,15 +199,8 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
binding.sessionToolbar.disableClipping()
// Set up seed reminder view
lifecycleScope.launchWhenStarted {
- val hasViewedSeed = textSecurePreferences.getHasViewedSeed()
- if (!hasViewedSeed) {
- binding.seedReminderView.isVisible = true
- binding.seedReminderView.title = SpannableString("You're almost finished! 80%") // Intentionally not yet translated
- binding.seedReminderView.subtitle = resources.getString(R.string.view_seed_reminder_subtitle_1)
- binding.seedReminderView.setProgress(80, false)
- binding.seedReminderView.delegate = this@HomeActivity
- } else {
- binding.seedReminderView.isVisible = false
+ binding.seedReminderView.setContent {
+ if (!textSecurePreferences.getHasViewedSeed()) SeedReminder()
}
}
// Set up recycler view
@@ -194,7 +216,8 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
}
// Set up empty state view
- binding.createNewPrivateChatButton.setOnClickListener { showNewConversation() }
+ binding.emptyStateContainer.setContent { EmptyView(ApplicationContext.getInstance(this).newAccount) }
+
IP2Country.configureIfNeeded(this@HomeActivity)
// Set up new conversation button
@@ -317,6 +340,79 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
}
}
+ @Preview
+ @Composable
+ fun PreviewMessageDetails(
+ @PreviewParameter(ThemeResPreviewParameterProvider::class) themeResId: Int
+ ) {
+ PreviewTheme(themeResId) {
+ SeedReminder()
+ }
+ }
+
+ @Composable
+ private fun SeedReminder() {
+ AppTheme {
+ Column {
+ Box(
+ Modifier
+ .fillMaxWidth()
+ .height(4.dp)
+ .background(MaterialTheme.colors.secondary))
+ Row(
+ Modifier
+ .background(MaterialTheme.colors.surface)
+ .padding(horizontal = 24.dp, vertical = 16.dp)
+ ) {
+ Column(Modifier.weight(1f)) {
+ Row {
+ Text(stringResource(R.string.save_your_recovery_password), style = MaterialTheme.typography.h8)
+ Spacer(Modifier.requiredWidth(8.dp))
+ SessionShieldIcon()
+ }
+ Text(stringResource(R.string.save_your_recovery_password_to_make_sure_you_don_t_lose_access_to_your_account), style = MaterialTheme.typography.small)
+ }
+ Spacer(Modifier.width(12.dp))
+ OutlineButton(
+ stringResource(R.string.continue_2),
+ Modifier.align(Alignment.CenterVertically),
+ contentDescription = GetString(R.string.AccessibilityId_reveal_recovery_phrase_button)
+ ) { startRecoveryPasswordActivity() }
+ }
+ }
+ }
+ }
+
+ @Composable
+ private fun EmptyView(newAccount: Boolean) {
+ AppTheme {
+ Column(
+ horizontalAlignment = Alignment.CenterHorizontally,
+ modifier = Modifier
+ .padding(horizontal = 50.dp)
+ .padding(bottom = 12.dp)
+ ) {
+ Spacer(modifier = Modifier.weight(1f))
+ Icon(
+ painter = painterResource(id = if (newAccount) R.drawable.emoji_tada_large else R.drawable.ic_logo_large),
+ contentDescription = null,
+ tint = Color.Unspecified
+ )
+ if (newAccount) Text(stringResource(R.string.onboardingAccountCreated), style = MaterialTheme.typography.h4, textAlign = TextAlign.Center)
+ if (newAccount) Text(stringResource(R.string.welcome_to_session), color = MaterialTheme.colors.secondary, textAlign = TextAlign.Center)
+
+ Divider(modifier = Modifier.padding(vertical = 16.dp))
+ Text(
+ stringResource(R.string.conversationsNone),
+ style = MaterialTheme.typography.h8,
+ textAlign = TextAlign.Center,
+ modifier = Modifier.padding(bottom = 12.dp))
+ Text(stringResource(R.string.onboardingHitThePlusButton), textAlign = TextAlign.Center)
+ Spacer(modifier = Modifier.weight(2f))
+ }
+ }
+ }
+
override fun onInputFocusChanged(hasFocus: Boolean) {
if (hasFocus) {
setSearchShown(true)
@@ -406,11 +502,6 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
super.onBackPressed()
}
- override fun handleSeedReminderViewContinueButtonTapped() {
- val intent = Intent(this, SeedActivity::class.java)
- show(intent)
- }
-
override fun onConversationClick(thread: ThreadRecord) {
val intent = Intent(this, ConversationActivityV2::class.java)
intent.putExtra(ConversationActivityV2.THREAD_ID, thread.threadId)
@@ -434,7 +525,7 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
bottomSheet.dismiss()
if (!thread.recipient.isGroupRecipient && !thread.recipient.isLocalNumber) {
val clip = ClipData.newPlainText("Session ID", thread.recipient.address.toString())
- val manager = getSystemService(PassphraseRequiredActionBarActivity.CLIPBOARD_SERVICE) as ClipboardManager
+ val manager = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
manager.setPrimaryClip(clip)
Toast.makeText(this, R.string.copied_to_clipboard, Toast.LENGTH_SHORT).show()
}
@@ -443,7 +534,7 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
val openGroup = DatabaseComponent.get(this@HomeActivity).lokiThreadDatabase().getOpenGroupChat(threadId) ?: return@onCopyConversationId Unit
val clip = ClipData.newPlainText("Community URL", openGroup.joinURL)
- val manager = getSystemService(PassphraseRequiredActionBarActivity.CLIPBOARD_SERVICE) as ClipboardManager
+ val manager = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
manager.setPrimaryClip(clip)
Toast.makeText(this, R.string.copied_to_clipboard, Toast.LENGTH_SHORT).show()
}
@@ -571,7 +662,7 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
val message = if (recipient.isGroupRecipient) {
val group = groupDatabase.getGroup(recipient.address.toString()).orNull()
if (group != null && group.admins.map { it.toString() }.contains(textSecurePreferences.getLocalNumber())) {
- "Because you are the creator of this group it will be deleted for everyone. This cannot be undone."
+ getString(R.string.admin_group_leave_warning)
} else {
resources.getString(R.string.activity_home_leave_group_dialog_message)
}
@@ -627,7 +718,7 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
private fun hideMessageRequests() {
showSessionDialog {
- text("Hide message requests?")
+ text(getString(R.string.hide_message_requests))
button(R.string.yes) {
textSecurePreferences.setHasHiddenMessageRequests()
homeViewModel.tryReload()
diff --git a/app/src/main/java/org/thoughtcrime/securesms/onboarding/DisplayNameActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/onboarding/DisplayNameActivity.kt
deleted file mode 100644
index c0699e3eb5..0000000000
--- a/app/src/main/java/org/thoughtcrime/securesms/onboarding/DisplayNameActivity.kt
+++ /dev/null
@@ -1,57 +0,0 @@
-package org.thoughtcrime.securesms.onboarding
-
-import android.content.Intent
-import android.os.Bundle
-import android.view.KeyEvent
-import android.view.inputmethod.EditorInfo
-import android.view.inputmethod.InputMethodManager
-import android.widget.TextView.OnEditorActionListener
-import android.widget.Toast
-import network.loki.messenger.R
-import network.loki.messenger.databinding.ActivityDisplayNameBinding
-import org.session.libsession.utilities.SSKEnvironment.ProfileManagerProtocol
-import org.thoughtcrime.securesms.BaseActionBarActivity
-import org.thoughtcrime.securesms.util.push
-import org.thoughtcrime.securesms.util.setUpActionBarSessionLogo
-import org.session.libsession.utilities.TextSecurePreferences
-
-class DisplayNameActivity : BaseActionBarActivity() {
- private lateinit var binding: ActivityDisplayNameBinding
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setUpActionBarSessionLogo()
- binding = ActivityDisplayNameBinding.inflate(layoutInflater)
- setContentView(binding.root)
- with(binding) {
- displayNameEditText.imeOptions = displayNameEditText.imeOptions or 16777216 // Always use incognito keyboard
- displayNameEditText.setOnEditorActionListener(
- OnEditorActionListener { _, actionID, event ->
- if (actionID == EditorInfo.IME_ACTION_SEARCH ||
- actionID == EditorInfo.IME_ACTION_DONE ||
- (event.action == KeyEvent.ACTION_DOWN &&
- event.keyCode == KeyEvent.KEYCODE_ENTER)) {
- register()
- return@OnEditorActionListener true
- }
- false
- })
- registerButton.setOnClickListener { register() }
- }
- }
-
- private fun register() {
- val displayName = binding.displayNameEditText.text.toString().trim()
- if (displayName.isEmpty()) {
- return Toast.makeText(this, R.string.activity_display_name_display_name_missing_error, Toast.LENGTH_SHORT).show()
- }
- if (displayName.toByteArray().size > ProfileManagerProtocol.Companion.NAME_PADDED_LENGTH) {
- return Toast.makeText(this, R.string.activity_display_name_display_name_too_long_error, Toast.LENGTH_SHORT).show()
- }
- val inputMethodManager = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
- inputMethodManager.hideSoftInputFromWindow(binding.displayNameEditText.windowToken, 0)
- TextSecurePreferences.setProfileName(this, displayName)
- val intent = Intent(this, PNModeActivity::class.java)
- push(intent)
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/org/thoughtcrime/securesms/onboarding/FakeChatView.kt b/app/src/main/java/org/thoughtcrime/securesms/onboarding/FakeChatView.kt
deleted file mode 100644
index dcd4d783e7..0000000000
--- a/app/src/main/java/org/thoughtcrime/securesms/onboarding/FakeChatView.kt
+++ /dev/null
@@ -1,79 +0,0 @@
-package org.thoughtcrime.securesms.onboarding
-
-import android.animation.FloatEvaluator
-import android.animation.ValueAnimator
-import android.content.Context
-import android.os.Handler
-import android.util.AttributeSet
-import android.view.LayoutInflater
-import android.view.View
-import android.widget.ScrollView
-import network.loki.messenger.R
-import network.loki.messenger.databinding.ViewFakeChatBinding
-import org.thoughtcrime.securesms.util.disableClipping
-
-class FakeChatView : ScrollView {
- private lateinit var binding: ViewFakeChatBinding
- // region Settings
- private val spacing = context.resources.getDimension(R.dimen.medium_spacing)
- private val startDelay: Long = 1000
- private val delayBetweenMessages: Long = 1500
- private val animationDuration: Long = 400
- // endregion
-
- // region Lifecycle
- constructor(context: Context) : super(context) {
- setUpViewHierarchy()
- }
-
- constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
- setUpViewHierarchy()
- }
-
- constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
- setUpViewHierarchy()
- }
-
- constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) {
- setUpViewHierarchy()
- }
-
- private fun setUpViewHierarchy() {
- binding = ViewFakeChatBinding.inflate(LayoutInflater.from(context), this, true)
- binding.root.disableClipping()
- isVerticalScrollBarEnabled = false
- }
- // endregion
-
- // region Animation
- fun startAnimating() {
- listOf( binding.bubble1, binding.bubble2, binding.bubble3, binding.bubble4, binding.bubble5 ).forEach { it.alpha = 0.0f }
- fun show(bubble: View) {
- val animation = ValueAnimator.ofObject(FloatEvaluator(), 0.0f, 1.0f)
- animation.duration = animationDuration
- animation.addUpdateListener { animator ->
- bubble.alpha = animator.animatedValue as Float
- }
- animation.start()
- }
- Handler().postDelayed({
- show(binding.bubble1)
- Handler().postDelayed({
- show(binding.bubble2)
- Handler().postDelayed({
- show(binding.bubble3)
- smoothScrollTo(0, (binding.bubble1.height + spacing).toInt())
- Handler().postDelayed({
- show(binding.bubble4)
- smoothScrollTo(0, (binding.bubble1.height + spacing).toInt() + (binding.bubble2.height + spacing).toInt())
- Handler().postDelayed({
- show(binding.bubble5)
- smoothScrollTo(0, (binding.bubble1.height + spacing).toInt() + (binding.bubble2.height + spacing).toInt() + (binding.bubble3.height + spacing).toInt())
- }, delayBetweenMessages)
- }, delayBetweenMessages)
- }, delayBetweenMessages)
- }, delayBetweenMessages)
- }, startDelay)
- }
- // endregion
-}
\ No newline at end of file
diff --git a/app/src/main/java/org/thoughtcrime/securesms/onboarding/LandingActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/onboarding/LandingActivity.kt
index c878a79eef..7d3a2b7be7 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/onboarding/LandingActivity.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/onboarding/LandingActivity.kt
@@ -1,13 +1,47 @@
package org.thoughtcrime.securesms.onboarding
import android.content.Intent
+import android.net.Uri
import android.os.Bundle
-import network.loki.messenger.databinding.ActivityLandingBinding
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.ColumnScope
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.ComposeView
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.tooling.preview.PreviewParameter
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import network.loki.messenger.R
import org.session.libsession.utilities.TextSecurePreferences
import org.thoughtcrime.securesms.BaseActionBarActivity
import org.thoughtcrime.securesms.crypto.IdentityKeyUtil
+import org.thoughtcrime.securesms.onboarding.pickname.startPickDisplayNameActivity
import org.thoughtcrime.securesms.service.KeyCachingService
-import org.thoughtcrime.securesms.util.push
+import org.thoughtcrime.securesms.showSessionDialog
+import org.thoughtcrime.securesms.ui.AppTheme
+import org.thoughtcrime.securesms.ui.BorderlessButton
+import org.thoughtcrime.securesms.ui.FilledButton
+import org.thoughtcrime.securesms.ui.GetString
+import org.thoughtcrime.securesms.ui.OutlineButton
+import org.thoughtcrime.securesms.ui.PreviewTheme
+import org.thoughtcrime.securesms.ui.ThemeResPreviewParameterProvider
+import org.thoughtcrime.securesms.ui.classicDarkColors
+import org.thoughtcrime.securesms.ui.contentDescription
+import org.thoughtcrime.securesms.ui.session_accent
import org.thoughtcrime.securesms.util.setUpActionBarSessionLogo
class LandingActivity : BaseActionBarActivity() {
@@ -19,28 +53,128 @@ class LandingActivity : BaseActionBarActivity() {
// Session then close this activity to resume the last activity from the previous instance.
if (!isTaskRoot) { finish(); return }
- val binding = ActivityLandingBinding.inflate(layoutInflater)
- setContentView(binding.root)
setUpActionBarSessionLogo(true)
- with(binding) {
- fakeChatView.startAnimating()
- registerButton.setOnClickListener { register() }
- restoreButton.setOnClickListener { link() }
- linkButton.setOnClickListener { link() }
- }
+
+ ComposeView(this)
+ .apply { setContent { AppTheme { LandingScreen() } } }
+ .let(::setContentView)
+
IdentityKeyUtil.generateIdentityKeyPair(this)
TextSecurePreferences.setPasswordDisabled(this, true)
// AC: This is a temporary workaround to trick the old code that the screen is unlocked.
KeyCachingService.setMasterSecret(applicationContext, Object())
}
- private fun register() {
- val intent = Intent(this, RegisterActivity::class.java)
- push(intent)
+ @Preview
+ @Composable
+ private fun LandingScreen(
+ @PreviewParameter(ThemeResPreviewParameterProvider::class) themeResId: Int
+ ) {
+ PreviewTheme(themeResId) {
+ LandingScreen()
+ }
}
- private fun link() {
- val intent = Intent(this, LinkDeviceActivity::class.java)
- push(intent)
+ @Composable
+ private fun LandingScreen() {
+ Column(modifier = Modifier.padding(horizontal = 36.dp)) {
+ Spacer(modifier = Modifier.weight(1f))
+ Text(stringResource(R.string.onboardingBubblePrivacyInYourPocket), modifier = Modifier.align(Alignment.CenterHorizontally), style = MaterialTheme.typography.h4, textAlign = TextAlign.Center)
+ Spacer(modifier = Modifier.height(24.dp))
+ IncomingText(stringResource(R.string.onboardingBubbleWelcomeToSession))
+ Spacer(modifier = Modifier.height(14.dp))
+ OutgoingText(stringResource(R.string.onboardingBubbleSessionIsEngineered))
+ Spacer(modifier = Modifier.height(14.dp))
+ IncomingText(stringResource(R.string.onboardingBubbleNoPhoneNumber))
+ Spacer(modifier = Modifier.height(14.dp))
+ OutgoingText(stringResource(R.string.onboardingBubbleCreatingAnAccountIsEasy))
+ Spacer(modifier = Modifier.weight(1f))
+
+ OutlineButton(
+ text = stringResource(R.string.onboardingAccountCreate),
+ modifier = Modifier
+ .width(262.dp)
+ .align(Alignment.CenterHorizontally),
+ contentDescription = GetString(R.string.AccessibilityId_create_account_button)
+ ) { startPickDisplayNameActivity() }
+ Spacer(modifier = Modifier.height(14.dp))
+ FilledButton(
+ text = stringResource(R.string.onboardingAccountExists),
+ modifier = Modifier
+ .width(262.dp)
+ .align(Alignment.CenterHorizontally),
+ contentDescription = GetString(R.string.AccessibilityId_restore_account_button)
+ ) { startLinkDeviceActivity() }
+ Spacer(modifier = Modifier.height(8.dp))
+ BorderlessButton(
+ text = stringResource(R.string.onboardingTosPrivacy),
+ modifier = Modifier
+ .width(262.dp)
+ .align(Alignment.CenterHorizontally),
+ contentDescription = GetString(R.string.AccessibilityId_open_url),
+ fontSize = 11.sp,
+ lineHeight = 13.sp
+ ) { openDialog() }
+ Spacer(modifier = Modifier.height(8.dp))
+ }
}
-}
\ No newline at end of file
+
+ private fun openDialog() {
+ showSessionDialog {
+ title(R.string.urlOpen)
+ text(R.string.urlOpenBrowser)
+ button(
+ R.string.activity_landing_terms_of_service,
+ contentDescriptionRes = R.string.AccessibilityId_terms_of_service_link
+ ) { open("https://getsession.org/terms-of-service") }
+ button(
+ R.string.activity_landing_privacy_policy,
+ contentDescriptionRes = R.string.AccessibilityId_privacy_policy_link
+ ) { open("https://getsession.org/privacy-policy") }
+ }
+ }
+
+ private fun open(url: String) {
+ Intent(Intent.ACTION_VIEW, Uri.parse(url)).let(::startActivity)
+ }
+
+ @Composable
+ private fun IncomingText(text: String) {
+ ChatText(
+ text,
+ color = classicDarkColors[2]
+ )
+ }
+
+ @Composable
+ private fun ColumnScope.OutgoingText(text: String) {
+ ChatText(
+ text,
+ color = session_accent,
+ textColor = MaterialTheme.colors.primary,
+ modifier = Modifier.align(Alignment.End)
+ )
+ }
+
+ @Composable
+ private fun ChatText(
+ text: String,
+ color: Color,
+ modifier: Modifier = Modifier,
+ textColor: Color = Color.Unspecified
+ ) {
+ Text(
+ text,
+ fontSize = 16.sp,
+ lineHeight = 19.sp,
+ color = textColor,
+ modifier = modifier
+ .fillMaxWidth(0.666f)
+ .background(
+ color = color,
+ shape = RoundedCornerShape(size = 13.dp)
+ )
+ .padding(horizontal = 16.dp, vertical = 12.dp)
+ )
+ }
+}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/onboarding/LinkDeviceActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/onboarding/LinkDeviceActivity.kt
index 1c10571dbd..79fa88101d 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/onboarding/LinkDeviceActivity.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/onboarding/LinkDeviceActivity.kt
@@ -1,230 +1,346 @@
package org.thoughtcrime.securesms.onboarding
+import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
+import android.net.Uri
import android.os.Bundle
-import android.text.InputType
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.view.inputmethod.EditorInfo
-import android.view.inputmethod.InputMethodManager
-import android.widget.Toast
-import androidx.core.view.isVisible
-import androidx.fragment.app.Fragment
-import androidx.fragment.app.FragmentPagerAdapter
+import android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS
+import androidx.activity.viewModels
+import androidx.camera.core.CameraSelector
+import androidx.camera.core.ExperimentalGetImage
+import androidx.camera.core.ImageAnalysis
+import androidx.camera.core.ImageAnalysis.Analyzer
+import androidx.camera.core.ImageProxy
+import androidx.camera.lifecycle.ProcessCameraProvider
+import androidx.camera.view.PreviewView
+import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.aspectRatio
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.pager.HorizontalPager
+import androidx.compose.foundation.pager.rememberPagerState
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.foundation.text.KeyboardActions
+import androidx.compose.material.Icon
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.OutlinedTextField
+import androidx.compose.material.Scaffold
+import androidx.compose.material.Snackbar
+import androidx.compose.material.SnackbarHost
+import androidx.compose.material.Text
+import androidx.compose.material.rememberScaffoldState
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.collectAsState
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.ComposeView
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.platform.LocalLifecycleOwner
+import androidx.compose.ui.platform.LocalSoftwareKeyboardController
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.viewinterop.AndroidView
import androidx.lifecycle.lifecycleScope
-import com.google.android.material.snackbar.Snackbar
+import com.google.accompanist.permissions.ExperimentalPermissionsApi
+import com.google.accompanist.permissions.isGranted
+import com.google.accompanist.permissions.rememberPermissionState
+import com.google.accompanist.permissions.shouldShowRationale
+import com.google.mlkit.vision.barcode.BarcodeScanner
+import com.google.mlkit.vision.barcode.BarcodeScannerOptions
+import com.google.mlkit.vision.barcode.BarcodeScanning
+import com.google.mlkit.vision.barcode.common.Barcode
+import com.google.mlkit.vision.common.InputImage
import dagger.hilt.android.AndroidEntryPoint
-import kotlinx.coroutines.Job
-import kotlinx.coroutines.delay
-import kotlinx.coroutines.flow.filter
+import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.launch
import network.loki.messenger.R
-import network.loki.messenger.databinding.ActivityLinkDeviceBinding
-import network.loki.messenger.databinding.FragmentRecoveryPhraseBinding
-import org.session.libsession.snode.SnodeModule
import org.session.libsession.utilities.TextSecurePreferences
-import org.session.libsignal.crypto.MnemonicCodec
-import org.session.libsignal.database.LokiAPIDatabaseProtocol
-import org.session.libsignal.utilities.Hex
-import org.session.libsignal.utilities.KeyHelper
import org.session.libsignal.utilities.Log
-import org.session.libsignal.utilities.hexEncodedPublicKey
-import org.thoughtcrime.securesms.ApplicationContext
import org.thoughtcrime.securesms.BaseActionBarActivity
-import org.thoughtcrime.securesms.crypto.KeyPairUtilities
-import org.thoughtcrime.securesms.crypto.MnemonicUtilities
-import org.thoughtcrime.securesms.dependencies.ConfigFactory
-import org.thoughtcrime.securesms.util.ScanQRCodeWrapperFragment
-import org.thoughtcrime.securesms.util.ScanQRCodeWrapperFragmentDelegate
-import org.thoughtcrime.securesms.util.push
-import org.thoughtcrime.securesms.util.setUpActionBarSessionLogo
+import org.thoughtcrime.securesms.ui.AppTheme
+import org.thoughtcrime.securesms.ui.OutlineButton
+import org.thoughtcrime.securesms.ui.baseBold
+import org.thoughtcrime.securesms.ui.components.SessionTabRow
+import org.thoughtcrime.securesms.ui.contentDescription
+import org.thoughtcrime.securesms.ui.outlinedTextFieldColors
+import java.util.concurrent.Executors
import javax.inject.Inject
+private const val TAG = "LinkDeviceActivity"
+
+private val TITLES = listOf(R.string.sessionRecoveryPassword, R.string.qrScan)
+
@AndroidEntryPoint
-class LinkDeviceActivity : BaseActionBarActivity(), ScanQRCodeWrapperFragmentDelegate {
+@androidx.annotation.OptIn(ExperimentalGetImage::class)
+class LinkDeviceActivity : BaseActionBarActivity() {
@Inject
- lateinit var configFactory: ConfigFactory
+ lateinit var prefs: TextSecurePreferences
- private lateinit var binding: ActivityLinkDeviceBinding
- internal val database: LokiAPIDatabaseProtocol
- get() = SnodeModule.shared.storage
- private val adapter = LinkDeviceActivityAdapter(this)
- private var restoreJob: Job? = null
+ val viewModel: LinkDeviceViewModel by viewModels()
- @Deprecated("Deprecated in Java")
- override fun onBackPressed() {
- if (restoreJob?.isActive == true) return // Don't allow going back with a pending job
- super.onBackPressed()
- }
+ val preview = androidx.camera.core.Preview.Builder().build()
+ val selector = CameraSelector.Builder()
+ .requireLensFacing(CameraSelector.LENS_FACING_BACK)
+ .build()
- // region Lifecycle
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- setUpActionBarSessionLogo()
- TextSecurePreferences.apply {
- setHasViewedSeed(this@LinkDeviceActivity, true)
- setConfigurationMessageSynced(this@LinkDeviceActivity, false)
- setRestorationTime(this@LinkDeviceActivity, System.currentTimeMillis())
- setLastProfileUpdateTime(this@LinkDeviceActivity, 0)
- }
- binding = ActivityLinkDeviceBinding.inflate(layoutInflater)
- setContentView(binding.root)
- binding.viewPager.adapter = adapter
- binding.tabLayout.setupWithViewPager(binding.viewPager)
- }
- // endregion
+ supportActionBar?.setTitle(R.string.activity_link_load_account)
+ prefs.setHasViewedSeed(true)
+ prefs.setConfigurationMessageSynced(false)
+ prefs.setRestorationTime(System.currentTimeMillis())
+ prefs.setLastProfileUpdateTime(0)
- // region Interaction
- override fun handleQRCodeScanned(mnemonic: String) {
- try {
- val seed = Hex.fromStringCondensed(mnemonic)
- continueWithSeed(seed)
- } catch (e: Exception) {
- Log.e("Loki","Error getting seed from QR code", e)
- Toast.makeText(this, "An error occurred.", Toast.LENGTH_LONG).show()
- }
- }
-
- fun continueWithMnemonic(mnemonic: String) {
- val loadFileContents: (String) -> String = { fileName ->
- MnemonicUtilities.loadFileContents(this, fileName)
- }
- try {
- val hexEncodedSeed = MnemonicCodec(loadFileContents).decode(mnemonic)
- val seed = Hex.fromStringCondensed(hexEncodedSeed)
- continueWithSeed(seed)
- } catch (error: Exception) {
- val message = if (error is MnemonicCodec.DecodingError) {
- error.description
- } else {
- "An error occurred."
+ lifecycleScope.launch {
+ viewModel.eventFlow.collect {
+ startLoadingActivity(it.mnemonic)
+ finish()
}
- Toast.makeText(this, message, Toast.LENGTH_LONG).show()
}
- }
- private fun continueWithSeed(seed: ByteArray) {
-
- // only have one sync job running at a time (prevent QR from trying to spawn a new job)
- if (restoreJob?.isActive == true) return
-
- restoreJob = lifecycleScope.launch {
- // This is here to resolve a case where the app restarts before a user completes onboarding
- // which can result in an invalid database state
- database.clearAllLastMessageHashes()
- database.clearReceivedMessageHashValues()
-
- // RestoreActivity handles seed this way
- val keyPairGenerationResult = KeyPairUtilities.generate(seed)
- val x25519KeyPair = keyPairGenerationResult.x25519KeyPair
- KeyPairUtilities.store(this@LinkDeviceActivity, seed, keyPairGenerationResult.ed25519KeyPair, x25519KeyPair)
- configFactory.keyPairChanged()
- val userHexEncodedPublicKey = x25519KeyPair.hexEncodedPublicKey
- val registrationID = KeyHelper.generateRegistrationId(false)
- TextSecurePreferences.setLocalRegistrationId(this@LinkDeviceActivity, registrationID)
- TextSecurePreferences.setLocalNumber(this@LinkDeviceActivity, userHexEncodedPublicKey)
- TextSecurePreferences.setRestorationTime(this@LinkDeviceActivity, System.currentTimeMillis())
- TextSecurePreferences.setHasViewedSeed(this@LinkDeviceActivity, true)
-
- binding.loader.isVisible = true
- val snackBar = Snackbar.make(binding.containerLayout, R.string.activity_link_device_skip_prompt,Snackbar.LENGTH_INDEFINITE)
- .setAction(R.string.registration_activity__skip) { register(true) }
-
- val skipJob = launch {
- delay(15_000L)
- snackBar.show()
- }
- // start polling and wait for updated message
- ApplicationContext.getInstance(this@LinkDeviceActivity).apply {
- startPollingIfNeeded()
- }
- TextSecurePreferences.events.filter { it == TextSecurePreferences.CONFIGURATION_SYNCED }.collect {
- // handle we've synced
- snackBar.dismiss()
- skipJob.cancel()
- register(false)
- }
-
- binding.loader.isVisible = false
- }
- }
-
- private fun register(skipped: Boolean) {
- restoreJob?.cancel()
- binding.loader.isVisible = false
- TextSecurePreferences.setLastConfigurationSyncTime(this, System.currentTimeMillis())
- val intent = Intent(this@LinkDeviceActivity, if (skipped) DisplayNameActivity::class.java else PNModeActivity::class.java)
- intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
- push(intent)
- }
- // endregion
-}
-
-// region Adapter
-private class LinkDeviceActivityAdapter(private val activity: LinkDeviceActivity) : FragmentPagerAdapter(activity.supportFragmentManager) {
- val recoveryPhraseFragment = RecoveryPhraseFragment()
-
- override fun getCount(): Int {
- return 2
- }
-
- override fun getItem(index: Int): Fragment {
- return when (index) {
- 0 -> recoveryPhraseFragment
- 1 -> {
- val result = ScanQRCodeWrapperFragment()
- result.delegate = activity
- result.message = activity.getString(R.string.activity_link_device_qr_message)
- result
- }
- else -> throw IllegalStateException()
- }
- }
-
- override fun getPageTitle(index: Int): CharSequence {
- return when (index) {
- 0 -> activity.getString(R.string.activity_link_device_recovery_phrase)
- 1 -> activity.getString(R.string.activity_link_device_scan_qr_code)
- else -> throw IllegalStateException()
- }
- }
-}
-// endregion
-
-// region Recovery Phrase Fragment
-class RecoveryPhraseFragment : Fragment() {
- private lateinit var binding: FragmentRecoveryPhraseBinding
-
- override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
- binding = FragmentRecoveryPhraseBinding.inflate(inflater, container, false)
- return binding.root
- }
-
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
- with(binding) {
- mnemonicEditText.imeOptions = EditorInfo.IME_ACTION_DONE or 16777216 // Always use incognito keyboard
- mnemonicEditText.setRawInputType(InputType.TYPE_CLASS_TEXT)
- mnemonicEditText.setOnEditorActionListener { v, actionID, _ ->
- if (actionID == EditorInfo.IME_ACTION_DONE) {
- val imm = v.context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
- imm.hideSoftInputFromWindow(v.windowToken, 0)
- handleContinueButtonTapped()
- true
- } else {
- false
+ ComposeView(this).apply {
+ setContent {
+ val state by viewModel.stateFlow.collectAsState()
+ AppTheme {
+ LoadAccountScreen(state, viewModel::onChange, viewModel::onContinue)
+ }
+ }
+ }.let(::setContentView)
+ }
+
+
+
+ @OptIn(ExperimentalFoundationApi::class)
+ @Composable
+ fun LoadAccountScreen(state: LinkDeviceState, onChange: (String) -> Unit = {}, onContinue: () -> Unit = {}) {
+ val pagerState = rememberPagerState { TITLES.size }
+
+ Column {
+ val localContext = LocalContext.current
+ val cameraProvider = remember { ProcessCameraProvider.getInstance(localContext) }
+ SessionTabRow(pagerState, TITLES)
+ HorizontalPager(
+ state = pagerState,
+ modifier = Modifier.weight(1f)
+ ) { page ->
+ val title = TITLES[page]
+
+ val options = BarcodeScannerOptions.Builder()
+ .setBarcodeFormats(Barcode.FORMAT_QR_CODE)
+ .build()
+ val scanner = BarcodeScanning.getClient(options)
+
+ runCatching {
+ cameraProvider.get().unbindAll()
+ if (title == R.string.qrScan) {
+ LocalSoftwareKeyboardController.current?.hide()
+ cameraProvider.get().bindToLifecycle(
+ LocalLifecycleOwner.current,
+ selector,
+ preview,
+ buildAnalysisUseCase(scanner, viewModel::scan)
+ )
+ }
+ }.onFailure { Log.e(TAG, "error binding camera", it) }
+ when (title) {
+ R.string.sessionRecoveryPassword -> RecoveryPassword(state, onChange, onContinue)
+ R.string.qrScan -> MaybeScanQrCode()
}
}
- continueButton.setOnClickListener { handleContinueButtonTapped() }
}
}
- private fun handleContinueButtonTapped() {
- val mnemonic = binding.mnemonicEditText.text?.trim().toString()
- (requireActivity() as LinkDeviceActivity).continueWithMnemonic(mnemonic)
+
+ @OptIn(ExperimentalPermissionsApi::class)
+ @Composable
+ fun MaybeScanQrCode() {
+ Box(modifier = Modifier.fillMaxSize()) {
+ val cameraPermissionState = rememberPermissionState(android.Manifest.permission.CAMERA)
+
+ if (cameraPermissionState.status.isGranted) {
+ ScanQrCode(preview, viewModel.qrErrorsFlow)
+ } else if (cameraPermissionState.status.shouldShowRationale) {
+ Column(
+ modifier = Modifier
+ .align(Alignment.Center)
+ .padding(horizontal = 60.dp)
+ ) {
+ Text(
+ stringResource(R.string.activity_link_camera_permission_permanently_denied_configure_in_settings),
+ textAlign = TextAlign.Center
+ )
+ Spacer(modifier = Modifier.size(20.dp))
+ OutlineButton(
+ text = stringResource(R.string.sessionSettings),
+ modifier = Modifier.align(Alignment.CenterHorizontally)
+ ) {
+ Intent(ACTION_APPLICATION_DETAILS_SETTINGS).apply {
+ data = Uri.fromParts("package", packageName, null)
+ }.let(::startActivity)
+ }
+ }
+ } else {
+ OutlineButton(
+ text = stringResource(R.string.cameraGrantAccess),
+ modifier = Modifier.align(Alignment.Center)
+ ) {
+ cameraPermissionState.run { launchPermissionRequest() }
+ }
+ }
+ }
+ }
+
+ @Composable
+ fun ScanQrCode(preview: androidx.camera.core.Preview, errors: Flow) {
+ val scaffoldState = rememberScaffoldState()
+
+ LaunchedEffect(Unit) {
+ errors.collect { error ->
+ lifecycleScope.launch {
+ scaffoldState.snackbarHostState.showSnackbar(message = error)
+ }
+ }
+ }
+
+ Scaffold(
+ scaffoldState = scaffoldState,
+ snackbarHost = {
+ SnackbarHost(
+ hostState = scaffoldState.snackbarHostState,
+ modifier = Modifier.padding(16.dp)
+ ) { data ->
+ Snackbar(
+ snackbarData = data,
+ modifier = Modifier.padding(16.dp)
+ )
+ }
+ }
+ ) { padding ->
+ Box(modifier = Modifier.padding(padding)) {
+ AndroidView(
+ modifier = Modifier.fillMaxSize(),
+ factory = { PreviewView(it).apply { preview.setSurfaceProvider(surfaceProvider) } }
+ )
+
+ Box(
+ Modifier
+ .aspectRatio(1f)
+ .padding(20.dp)
+ .clip(shape = RoundedCornerShape(20.dp))
+ .background(Color(0x33ffffff))
+ .align(Alignment.Center)
+ )
+ }
+ }
+ }
+}
+
+@Preview
+@Composable
+fun PreviewRecoveryPassword() = RecoveryPassword(state = LinkDeviceState())
+
+@Composable
+fun RecoveryPassword(state: LinkDeviceState, onChange: (String) -> Unit = {}, onContinue: () -> Unit = {}) {
+ Column(
+ modifier = Modifier.padding(horizontal = 60.dp)
+ ) {
+ Spacer(Modifier.weight(1f))
+ Row {
+ Text(stringResource(R.string.sessionRecoveryPassword), style = MaterialTheme.typography.h4)
+ Spacer(Modifier.width(6.dp))
+ Icon(
+ painter = painterResource(id = R.drawable.ic_shield_outline),
+ contentDescription = null,
+ )
+ }
+ Spacer(Modifier.size(28.dp))
+ Text(stringResource(R.string.activity_link_enter_your_recovery_password_to_load_your_account_if_you_haven_t_saved_it_you_can_find_it_in_your_app_settings))
+ Spacer(Modifier.size(24.dp))
+ OutlinedTextField(
+ value = state.recoveryPhrase,
+ onValueChange = { onChange(it) },
+ modifier = Modifier.contentDescription(R.string.AccessibilityId_recovery_phrase_input),
+ placeholder = { Text(stringResource(R.string.recoveryPasswordEnter)) },
+ colors = outlinedTextFieldColors(state.error != null),
+ singleLine = true,
+ keyboardActions = KeyboardActions(
+ onDone = { onContinue() },
+ onGo = { onContinue() },
+ onSearch = { onContinue() },
+ onSend = { onContinue() },
+ ),
+ isError = state.error != null,
+ shape = RoundedCornerShape(12.dp)
+ )
+ Spacer(Modifier.size(12.dp))
+ state.error?.let {
+ Text(
+ it,
+ modifier = Modifier.contentDescription(R.string.AccessibilityId_error_message),
+ style = MaterialTheme.typography.baseBold,
+ color = MaterialTheme.colors.error
+ )
+ }
+ Spacer(Modifier.weight(2f))
+ OutlineButton(
+ text = stringResource(id = R.string.continue_2),
+ modifier = Modifier
+ .align(Alignment.CenterHorizontally)
+ .padding(horizontal = 64.dp, vertical = 20.dp)
+ .width(200.dp)
+ ) { onContinue() }
+ }
+}
+
+fun Context.startLinkDeviceActivity() {
+ Intent(this, LinkDeviceActivity::class.java).let(::startActivity)
+}
+
+@SuppressLint("UnsafeOptInUsageError")
+private fun buildAnalysisUseCase(
+ scanner: BarcodeScanner,
+ onBarcodeScanned: (String) -> Unit
+): ImageAnalysis = ImageAnalysis.Builder()
+ .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
+ .build().apply {
+ setAnalyzer(Executors.newSingleThreadExecutor(), Analyzer(scanner, onBarcodeScanned))
+ }
+
+class Analyzer(
+ private val scanner: BarcodeScanner,
+ private val onBarcodeScanned: (String) -> Unit
+): Analyzer {
+ @SuppressLint("UnsafeOptInUsageError")
+ override fun analyze(image: ImageProxy) {
+ InputImage.fromMediaImage(
+ image.image!!,
+ image.imageInfo.rotationDegrees
+ ).let(scanner::process).apply {
+ addOnSuccessListener { barcodes ->
+ barcodes.filter { it.valueType == Barcode.TYPE_TEXT }.forEach {
+ it.rawValue?.let(onBarcodeScanned)
+ }
+ }
+ addOnCompleteListener {
+ image.close()
+ }
+ }
}
}
-// endregion
diff --git a/app/src/main/java/org/thoughtcrime/securesms/onboarding/LinkDeviceState.kt b/app/src/main/java/org/thoughtcrime/securesms/onboarding/LinkDeviceState.kt
new file mode 100644
index 0000000000..5627e31bbc
--- /dev/null
+++ b/app/src/main/java/org/thoughtcrime/securesms/onboarding/LinkDeviceState.kt
@@ -0,0 +1,6 @@
+package org.thoughtcrime.securesms.onboarding
+
+data class LinkDeviceState(
+ val recoveryPhrase: String = "",
+ val error: String? = null
+)
diff --git a/app/src/main/java/org/thoughtcrime/securesms/onboarding/LinkDeviceViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/onboarding/LinkDeviceViewModel.kt
new file mode 100644
index 0000000000..69368c41da
--- /dev/null
+++ b/app/src/main/java/org/thoughtcrime/securesms/onboarding/LinkDeviceViewModel.kt
@@ -0,0 +1,92 @@
+package org.thoughtcrime.securesms.onboarding
+
+import android.app.Application
+import androidx.lifecycle.AndroidViewModel
+import androidx.lifecycle.viewModelScope
+import dagger.hilt.android.lifecycle.HiltViewModel
+import kotlinx.coroutines.channels.Channel
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.asStateFlow
+import kotlinx.coroutines.flow.collect
+import kotlinx.coroutines.flow.consumeAsFlow
+import kotlinx.coroutines.flow.debounce
+import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.flow.mapNotNull
+import kotlinx.coroutines.flow.receiveAsFlow
+import kotlinx.coroutines.flow.take
+import kotlinx.coroutines.flow.takeWhile
+import kotlinx.coroutines.flow.update
+import kotlinx.coroutines.launch
+import network.loki.messenger.R
+import org.session.libsignal.crypto.MnemonicCodec
+import org.session.libsignal.crypto.MnemonicCodec.DecodingError.InputTooShort
+import org.session.libsignal.crypto.MnemonicCodec.DecodingError.InvalidWord
+import org.session.libsignal.utilities.Hex
+import org.thoughtcrime.securesms.crypto.MnemonicUtilities
+import javax.inject.Inject
+import kotlin.time.Duration.Companion.seconds
+
+class LinkDeviceEvent(val mnemonic: ByteArray)
+
+@HiltViewModel
+class LinkDeviceViewModel @Inject constructor(
+ private val application: Application
+): AndroidViewModel(application) {
+ private val QR_ERROR_TIME = 3.seconds
+ private val state = MutableStateFlow(LinkDeviceState())
+ val stateFlow = state.asStateFlow()
+
+ private val event = Channel()
+ val eventFlow = event.receiveAsFlow().take(1)
+ private val qrErrors = Channel()
+ val qrErrorsFlow = qrErrors.receiveAsFlow()
+ .debounce(QR_ERROR_TIME)
+ .takeWhile { event.isEmpty }
+ .mapNotNull { application.getString(R.string.qrNotRecoveryPassword) }
+
+ private val codec by lazy { MnemonicCodec { MnemonicUtilities.loadFileContents(getApplication(), it) } }
+
+ fun onContinue() {
+ viewModelScope.launch {
+ runDecodeCatching(state.value.recoveryPhrase)
+ .onSuccess(::onSuccess)
+ .onFailure(::onFailure)
+ }
+ }
+
+ fun scan(string: String) {
+ viewModelScope.launch {
+ runDecodeCatching(string)
+ .onSuccess(::onSuccess)
+ .onFailure(::onScanFailure)
+ }
+ }
+
+ fun onChange(recoveryPhrase: String) {
+ state.value = LinkDeviceState(recoveryPhrase)
+ }
+ private fun onSuccess(seed: ByteArray) {
+ viewModelScope.launch { event.send(LinkDeviceEvent(seed)) }
+ }
+
+ private fun onFailure(error: Throwable) {
+ state.update {
+ it.copy(
+ error = when (error) {
+ is InputTooShort -> R.string.recoveryPasswordErrorMessageShort
+ is InvalidWord -> R.string.recoveryPasswordErrorMessageIncorrect
+ else -> R.string.recoveryPasswordErrorMessageGeneric
+ }.let(application::getString)
+ )
+ }
+ }
+
+ private fun onScanFailure(error: Throwable) {
+ viewModelScope.launch { qrErrors.send(error) }
+ }
+
+ private fun runDecodeCatching(mnemonic: String) = runCatching {
+ decode(mnemonic)
+ }
+ private fun decode(mnemonic: String) = codec.decode(mnemonic).let(Hex::fromStringCondensed)!!
+}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/onboarding/LoadingActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/onboarding/LoadingActivity.kt
new file mode 100644
index 0000000000..af1b551631
--- /dev/null
+++ b/app/src/main/java/org/thoughtcrime/securesms/onboarding/LoadingActivity.kt
@@ -0,0 +1,122 @@
+package org.thoughtcrime.securesms.onboarding
+
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import androidx.activity.viewModels
+import androidx.compose.animation.core.Animatable
+import androidx.compose.animation.core.TweenSpec
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.collectAsState
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.ComposeView
+import androidx.compose.ui.res.stringResource
+import androidx.lifecycle.lifecycleScope
+import dagger.hilt.android.AndroidEntryPoint
+import kotlinx.coroutines.launch
+import network.loki.messenger.R
+import org.session.libsession.utilities.AppTextSecurePreferences
+import org.session.libsession.utilities.TextSecurePreferences
+import org.thoughtcrime.securesms.ApplicationContext
+import org.thoughtcrime.securesms.BaseActionBarActivity
+import org.thoughtcrime.securesms.dependencies.ConfigFactory
+import org.thoughtcrime.securesms.onboarding.messagenotifications.MessageNotificationsActivity
+import org.thoughtcrime.securesms.onboarding.messagenotifications.startMessageNotificationsActivity
+import org.thoughtcrime.securesms.onboarding.pickname.startPickDisplayNameActivity
+import org.thoughtcrime.securesms.ui.AppTheme
+import org.thoughtcrime.securesms.ui.ProgressArc
+import org.thoughtcrime.securesms.ui.contentDescription
+import org.thoughtcrime.securesms.util.setUpActionBarSessionLogo
+import javax.inject.Inject
+
+private const val EXTRA_MNEMONIC = "mnemonic"
+
+@AndroidEntryPoint
+class LoadingActivity: BaseActionBarActivity() {
+
+ @Inject
+ lateinit var configFactory: ConfigFactory
+
+ @Inject
+ lateinit var prefs: TextSecurePreferences
+
+ private val viewModel: LoadingViewModel by viewModels()
+
+ @Deprecated("Deprecated in Java")
+ override fun onBackPressed() {
+ return
+ }
+
+ private fun register(skipped: Boolean) {
+ prefs.setLastConfigurationSyncTime(System.currentTimeMillis())
+
+ val flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
+
+ when {
+ skipped -> startPickDisplayNameActivity(true, flags)
+ else -> startMessageNotificationsActivity(flags)
+ }
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ ApplicationContext.getInstance(this).newAccount = false
+
+ ComposeView(this)
+ .apply { setContent { LoadingScreen() } }
+ .let(::setContentView)
+
+ setUpActionBarSessionLogo(true)
+
+ viewModel.restore(application, intent.getByteArrayExtra(EXTRA_MNEMONIC)!!)
+
+ lifecycleScope.launch {
+ viewModel.eventFlow.collect {
+ when (it) {
+ Event.TIMEOUT -> register(skipped = true)
+ Event.SUCCESS -> register(skipped = false)
+ }
+ }
+ }
+ }
+
+ @Composable
+ fun LoadingScreen() {
+ val state by viewModel.stateFlow.collectAsState()
+
+ val animatable = remember { Animatable(initialValue = 0f, visibilityThreshold = 0.005f) }
+
+ LaunchedEffect(state) {
+ animatable.stop()
+ animatable.animateTo(
+ targetValue = 1f,
+ animationSpec = TweenSpec(durationMillis = state.duration.inWholeMilliseconds.toInt())
+ )
+ }
+
+ AppTheme {
+ Column {
+ Spacer(modifier = Modifier.weight(1f))
+ ProgressArc(animatable.value, modifier = Modifier.align(Alignment.CenterHorizontally).contentDescription(R.string.AccessibilityId_loading_animation))
+ Text(stringResource(R.string.waitOneMoment), modifier = Modifier.align(Alignment.CenterHorizontally), style = MaterialTheme.typography.h6)
+ Text(stringResource(R.string.loadAccountProgressMessage), modifier = Modifier.align(Alignment.CenterHorizontally))
+ Spacer(modifier = Modifier.weight(2f))
+ }
+ }
+ }
+}
+
+fun Context.startLoadingActivity(mnemonic: ByteArray) {
+ Intent(this, LoadingActivity::class.java)
+ .apply { putExtra(EXTRA_MNEMONIC, mnemonic) }
+ .also(::startActivity)
+}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/onboarding/LoadingViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/onboarding/LoadingViewModel.kt
new file mode 100644
index 0000000000..bf50baa736
--- /dev/null
+++ b/app/src/main/java/org/thoughtcrime/securesms/onboarding/LoadingViewModel.kt
@@ -0,0 +1,101 @@
+package org.thoughtcrime.securesms.onboarding
+
+import android.content.Context
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import dagger.hilt.android.lifecycle.HiltViewModel
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.channels.Channel
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.asStateFlow
+import kotlinx.coroutines.flow.filter
+import kotlinx.coroutines.flow.receiveAsFlow
+import kotlinx.coroutines.launch
+import org.session.libsession.snode.SnodeModule
+import org.session.libsession.utilities.TextSecurePreferences
+import org.session.libsignal.database.LokiAPIDatabaseProtocol
+import org.session.libsignal.utilities.KeyHelper
+import org.session.libsignal.utilities.hexEncodedPublicKey
+import org.thoughtcrime.securesms.ApplicationContext
+import org.thoughtcrime.securesms.crypto.KeyPairUtilities
+import org.thoughtcrime.securesms.dependencies.ConfigFactory
+import javax.inject.Inject
+import kotlin.time.Duration
+import kotlin.time.Duration.Companion.milliseconds
+import kotlin.time.Duration.Companion.seconds
+
+data class State(val duration: Duration)
+
+private val DONE_TIME = 1.seconds
+private val DONE_ANIMATE_TIME = 500.milliseconds
+
+private val TOTAL_ANIMATE_TIME = 14.seconds
+private val TOTAL_TIME = 15.seconds
+
+@HiltViewModel
+class LoadingViewModel @Inject constructor(
+ private val configFactory: ConfigFactory,
+ private val prefs: TextSecurePreferences,
+) : ViewModel() {
+
+ private val state = MutableStateFlow(State(TOTAL_ANIMATE_TIME))
+ val stateFlow = state.asStateFlow()
+
+ private val event = Channel()
+ val eventFlow = event.receiveAsFlow()
+
+ private var restoreJob: Job? = null
+
+ internal val database: LokiAPIDatabaseProtocol
+ get() = SnodeModule.shared.storage
+
+ fun restore(context: Context, seed: ByteArray) {
+
+ // only have one sync job running at a time (prevent QR from trying to spawn a new job)
+ if (restoreJob?.isActive == true) return
+
+ restoreJob = viewModelScope.launch(Dispatchers.IO) {
+ // This is here to resolve a case where the app restarts before a user completes onboarding
+ // which can result in an invalid database state
+ database.clearAllLastMessageHashes()
+ database.clearReceivedMessageHashValues()
+
+ // RestoreActivity handles seed this way
+ val keyPairGenerationResult = KeyPairUtilities.generate(seed)
+ val x25519KeyPair = keyPairGenerationResult.x25519KeyPair
+ KeyPairUtilities.store(context, seed, keyPairGenerationResult.ed25519KeyPair, x25519KeyPair)
+ configFactory.keyPairChanged()
+ val userHexEncodedPublicKey = x25519KeyPair.hexEncodedPublicKey
+ val registrationID = KeyHelper.generateRegistrationId(false)
+ prefs.apply {
+ setLocalRegistrationId(registrationID)
+ setLocalNumber(userHexEncodedPublicKey)
+ setRestorationTime(System.currentTimeMillis())
+ setHasViewedSeed(true)
+ }
+
+ val skipJob = launch(Dispatchers.IO) {
+ delay(TOTAL_TIME)
+ event.send(Event.TIMEOUT)
+ }
+
+ // start polling and wait for updated message
+ ApplicationContext.getInstance(context).apply { startPollingIfNeeded() }
+ TextSecurePreferences.events.filter { it == TextSecurePreferences.CONFIGURATION_SYNCED }.collect {
+ // handle we've synced
+ skipJob.cancel()
+
+ state.value = State(DONE_ANIMATE_TIME)
+ delay(DONE_TIME)
+ event.send(Event.SUCCESS)
+ }
+ }
+ }
+}
+
+sealed interface Event {
+ object SUCCESS: Event
+ object TIMEOUT: Event
+}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/onboarding/PNModeActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/onboarding/PNModeActivity.kt
deleted file mode 100644
index e4e8e6a9a6..0000000000
--- a/app/src/main/java/org/thoughtcrime/securesms/onboarding/PNModeActivity.kt
+++ /dev/null
@@ -1,179 +0,0 @@
-package org.thoughtcrime.securesms.onboarding
-
-import android.animation.ArgbEvaluator
-import android.animation.ValueAnimator
-import android.content.Intent
-import android.graphics.drawable.TransitionDrawable
-import android.net.Uri
-import android.os.Bundle
-import android.view.Menu
-import android.view.MenuItem
-import android.view.View
-import android.widget.Toast
-import androidx.annotation.ColorInt
-import androidx.annotation.DrawableRes
-import dagger.hilt.android.AndroidEntryPoint
-import network.loki.messenger.R
-import network.loki.messenger.databinding.ActivityPnModeBinding
-import org.session.libsession.utilities.TextSecurePreferences
-import org.session.libsession.utilities.ThemeUtil
-import org.thoughtcrime.securesms.ApplicationContext
-import org.thoughtcrime.securesms.BaseActionBarActivity
-import org.thoughtcrime.securesms.home.HomeActivity
-import org.thoughtcrime.securesms.notifications.PushManager
-import org.thoughtcrime.securesms.notifications.PushRegistry
-import org.thoughtcrime.securesms.showSessionDialog
-import org.thoughtcrime.securesms.util.GlowViewUtilities
-import org.thoughtcrime.securesms.util.PNModeView
-import org.thoughtcrime.securesms.util.disableClipping
-import org.thoughtcrime.securesms.util.getAccentColor
-import org.thoughtcrime.securesms.util.getColorWithID
-import org.thoughtcrime.securesms.util.setUpActionBarSessionLogo
-import org.thoughtcrime.securesms.util.show
-import javax.inject.Inject
-
-@AndroidEntryPoint
-class PNModeActivity : BaseActionBarActivity() {
-
- @Inject lateinit var pushRegistry: PushRegistry
-
- private lateinit var binding: ActivityPnModeBinding
- private var selectedOptionView: PNModeView? = null
-
- // region Lifecycle
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setUpActionBarSessionLogo(true)
- TextSecurePreferences.setHasSeenWelcomeScreen(this, true)
- binding = ActivityPnModeBinding.inflate(layoutInflater)
- setContentView(binding.root)
- with(binding) {
- contentView.disableClipping()
- fcmOptionView.setOnClickListener { toggleFCM() }
- fcmOptionView.mainColor = ThemeUtil.getThemedColor(root.context, R.attr.colorPrimary)
- fcmOptionView.strokeColor = resources.getColorWithID(R.color.pn_option_border, theme)
- backgroundPollingOptionView.setOnClickListener { toggleBackgroundPolling() }
- backgroundPollingOptionView.mainColor = ThemeUtil.getThemedColor(root.context, R.attr.colorPrimary)
- backgroundPollingOptionView.strokeColor = resources.getColorWithID(R.color.pn_option_border, theme)
- registerButton.setOnClickListener { register() }
- }
- toggleFCM()
- }
-
- override fun onCreateOptionsMenu(menu: Menu): Boolean {
- menuInflater.inflate(R.menu.menu_pn_mode, menu)
- return true
- }
- // endregion
-
- // region Animation
- private fun performTransition(@DrawableRes transitionID: Int, subject: View) {
- val drawable = resources.getDrawable(transitionID, theme) as TransitionDrawable
- subject.background = drawable
- drawable.startTransition(250)
- }
- // endregion
-
- // region Interaction
- override fun onOptionsItemSelected(item: MenuItem): Boolean {
- when(item.itemId) {
- R.id.learnMoreButton -> learnMore()
- else -> { /* Do nothing */ }
- }
- return super.onOptionsItemSelected(item)
- }
-
- private fun learnMore() {
- try {
- val url = "https://getsession.org/faq/#privacy"
- val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
- startActivity(intent)
- } catch (e: Exception) {
- Toast.makeText(this, R.string.invalid_url, Toast.LENGTH_SHORT).show()
- }
- }
-
- private fun toggleFCM() = with(binding) {
- val accentColor = getAccentColor()
- when (selectedOptionView) {
- null -> {
- performTransition(R.drawable.pn_option_background_select_transition, fcmOptionView)
- GlowViewUtilities.animateShadowColorChange(fcmOptionView, resources.getColorWithID(R.color.transparent, theme), accentColor)
- animateStrokeColorChange(fcmOptionView, resources.getColorWithID(R.color.pn_option_border, theme), accentColor)
- selectedOptionView = fcmOptionView
- }
- fcmOptionView -> {
- performTransition(R.drawable.pn_option_background_deselect_transition, fcmOptionView)
- GlowViewUtilities.animateShadowColorChange(fcmOptionView, accentColor, resources.getColorWithID(R.color.transparent, theme))
- animateStrokeColorChange(fcmOptionView, accentColor, resources.getColorWithID(R.color.pn_option_border, theme))
- selectedOptionView = null
- }
- backgroundPollingOptionView -> {
- performTransition(R.drawable.pn_option_background_select_transition, fcmOptionView)
- GlowViewUtilities.animateShadowColorChange(fcmOptionView, resources.getColorWithID(R.color.transparent, theme), accentColor)
- animateStrokeColorChange(fcmOptionView, resources.getColorWithID(R.color.pn_option_border, theme), accentColor)
- performTransition(R.drawable.pn_option_background_deselect_transition, backgroundPollingOptionView)
- GlowViewUtilities.animateShadowColorChange(backgroundPollingOptionView, accentColor, resources.getColorWithID(R.color.transparent, theme))
- animateStrokeColorChange(backgroundPollingOptionView, accentColor, resources.getColorWithID(R.color.pn_option_border, theme))
- selectedOptionView = fcmOptionView
- }
- }
- }
-
- private fun toggleBackgroundPolling() = with(binding) {
- val accentColor = getAccentColor()
- when (selectedOptionView) {
- null -> {
- performTransition(R.drawable.pn_option_background_select_transition, backgroundPollingOptionView)
- GlowViewUtilities.animateShadowColorChange(backgroundPollingOptionView, resources.getColorWithID(R.color.transparent, theme), accentColor)
- animateStrokeColorChange(backgroundPollingOptionView, resources.getColorWithID(R.color.pn_option_border, theme), accentColor)
- selectedOptionView = backgroundPollingOptionView
- }
- backgroundPollingOptionView -> {
- performTransition(R.drawable.pn_option_background_deselect_transition, backgroundPollingOptionView)
- GlowViewUtilities.animateShadowColorChange(backgroundPollingOptionView, accentColor, resources.getColorWithID(R.color.transparent, theme))
- animateStrokeColorChange(backgroundPollingOptionView, accentColor, resources.getColorWithID(R.color.pn_option_border, theme))
- selectedOptionView = null
- }
- fcmOptionView -> {
- performTransition(R.drawable.pn_option_background_select_transition, backgroundPollingOptionView)
- GlowViewUtilities.animateShadowColorChange(backgroundPollingOptionView, resources.getColorWithID(R.color.transparent, theme), accentColor)
- animateStrokeColorChange(backgroundPollingOptionView, resources.getColorWithID(R.color.pn_option_border, theme), accentColor)
- performTransition(R.drawable.pn_option_background_deselect_transition, fcmOptionView)
- GlowViewUtilities.animateShadowColorChange(fcmOptionView, accentColor, resources.getColorWithID(R.color.transparent, theme))
- animateStrokeColorChange(fcmOptionView, accentColor, resources.getColorWithID(R.color.pn_option_border, theme))
- selectedOptionView = backgroundPollingOptionView
- }
- }
- }
-
- private fun animateStrokeColorChange(bubble: PNModeView, @ColorInt startColor: Int, @ColorInt endColor: Int) {
- val animation = ValueAnimator.ofObject(ArgbEvaluator(), startColor, endColor)
- animation.duration = 250
- animation.addUpdateListener { animator ->
- val color = animator.animatedValue as Int
- bubble.strokeColor = color
- }
- animation.start()
- }
-
- private fun register() {
- if (selectedOptionView == null) {
- showSessionDialog {
- title(R.string.activity_pn_mode_no_option_picked_dialog_title)
- button(R.string.ok)
- }
- return
- }
-
- TextSecurePreferences.setPushEnabled(this, (selectedOptionView == binding.fcmOptionView))
- val application = ApplicationContext.getInstance(this)
- application.startPollingIfNeeded()
- pushRegistry.refresh(true)
- val intent = Intent(this, HomeActivity::class.java)
- intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
- intent.putExtra(HomeActivity.FROM_ONBOARDING, true)
- show(intent)
- }
- // endregion
-}
\ No newline at end of file
diff --git a/app/src/main/java/org/thoughtcrime/securesms/onboarding/RegisterActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/onboarding/RegisterActivity.kt
deleted file mode 100644
index 13e5b51f0e..0000000000
--- a/app/src/main/java/org/thoughtcrime/securesms/onboarding/RegisterActivity.kt
+++ /dev/null
@@ -1,165 +0,0 @@
-package org.thoughtcrime.securesms.onboarding
-
-import android.content.ClipData
-import android.content.ClipboardManager
-import android.content.Context
-import android.content.Intent
-import android.graphics.Typeface
-import android.net.Uri
-import android.os.Bundle
-import android.os.Handler
-import android.text.Spannable
-import android.text.SpannableStringBuilder
-import android.text.method.LinkMovementMethod
-import android.text.style.ClickableSpan
-import android.text.style.StyleSpan
-import android.view.View
-import android.widget.Toast
-import com.goterl.lazysodium.utils.KeyPair
-import dagger.hilt.android.AndroidEntryPoint
-import network.loki.messenger.R
-import network.loki.messenger.databinding.ActivityRegisterBinding
-import org.session.libsession.snode.SnodeModule
-import org.session.libsession.utilities.TextSecurePreferences
-import org.session.libsignal.crypto.ecc.ECKeyPair
-import org.session.libsignal.database.LokiAPIDatabaseProtocol
-import org.session.libsignal.utilities.KeyHelper
-import org.session.libsignal.utilities.hexEncodedPublicKey
-import org.thoughtcrime.securesms.BaseActionBarActivity
-import org.thoughtcrime.securesms.crypto.KeyPairUtilities
-import org.thoughtcrime.securesms.dependencies.ConfigFactory
-import org.thoughtcrime.securesms.util.push
-import org.thoughtcrime.securesms.util.setUpActionBarSessionLogo
-import javax.inject.Inject
-
-@AndroidEntryPoint
-class RegisterActivity : BaseActionBarActivity() {
-
- private val temporarySeedKey = "TEMPORARY_SEED_KEY"
-
- @Inject
- lateinit var configFactory: ConfigFactory
-
- private lateinit var binding: ActivityRegisterBinding
- internal val database: LokiAPIDatabaseProtocol
- get() = SnodeModule.shared.storage
- private var seed: ByteArray? = null
- private var ed25519KeyPair: KeyPair? = null
- private var x25519KeyPair: ECKeyPair? = null
- set(value) { field = value; updatePublicKeyTextView() }
-
- // region Lifecycle
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- binding = ActivityRegisterBinding.inflate(layoutInflater)
- setContentView(binding.root)
- setUpActionBarSessionLogo()
- TextSecurePreferences.apply {
- setHasViewedSeed(this@RegisterActivity, false)
- setConfigurationMessageSynced(this@RegisterActivity, true)
- setRestorationTime(this@RegisterActivity, 0)
- setLastProfileUpdateTime(this@RegisterActivity, System.currentTimeMillis())
- }
- binding.registerButton.setOnClickListener { register() }
- binding.copyButton.setOnClickListener { copyPublicKey() }
- val termsExplanation = SpannableStringBuilder("By using this service, you agree to our Terms of Service and Privacy Policy")
- termsExplanation.setSpan(StyleSpan(Typeface.BOLD), 40, 56, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
- termsExplanation.setSpan(object : ClickableSpan() {
-
- override fun onClick(widget: View) {
- openURL("https://getsession.org/terms-of-service/")
- }
- }, 40, 56, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
- termsExplanation.setSpan(StyleSpan(Typeface.BOLD), 61, 75, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
- termsExplanation.setSpan(object : ClickableSpan() {
-
- override fun onClick(widget: View) {
- openURL("https://getsession.org/privacy-policy/")
- }
- }, 61, 75, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
- binding.termsTextView.movementMethod = LinkMovementMethod.getInstance()
- binding.termsTextView.text = termsExplanation
- updateKeyPair(savedInstanceState?.getByteArray(temporarySeedKey))
- }
-
- override fun onSaveInstanceState(outState: Bundle) {
- super.onSaveInstanceState(outState)
- seed?.let { tempSeed ->
- outState.putByteArray(temporarySeedKey, tempSeed)
- }
- }
- // endregion
-
- // region Updating
- private fun updateKeyPair(temporaryKey: ByteArray?) {
- val keyPairGenerationResult = temporaryKey?.let(KeyPairUtilities::generate) ?: KeyPairUtilities.generate()
- seed = keyPairGenerationResult.seed
- ed25519KeyPair = keyPairGenerationResult.ed25519KeyPair
- x25519KeyPair = keyPairGenerationResult.x25519KeyPair
- }
-
- private fun updatePublicKeyTextView() {
- val hexEncodedPublicKey = x25519KeyPair!!.hexEncodedPublicKey
- val characterCount = hexEncodedPublicKey.count()
- var count = 0
- val limit = 32
- fun animate() {
- val numberOfIndexesToShuffle = 32 - count
- val indexesToShuffle = (0 until characterCount).shuffled().subList(0, numberOfIndexesToShuffle)
- var mangledHexEncodedPublicKey = hexEncodedPublicKey
- for (index in indexesToShuffle) {
- try {
- mangledHexEncodedPublicKey = mangledHexEncodedPublicKey.substring(0, index) + "0123456789abcdef__".random() + mangledHexEncodedPublicKey.substring(index + 1, mangledHexEncodedPublicKey.count())
- } catch (exception: Exception) {
- // Do nothing
- }
- }
- count += 1
- if (count < limit) {
- binding.publicKeyTextView.text = mangledHexEncodedPublicKey
- Handler().postDelayed({
- animate()
- }, 32)
- } else {
- binding.publicKeyTextView.text = hexEncodedPublicKey
- }
- }
- animate()
- }
- // endregion
-
- // region Interaction
- private fun register() {
- // This is here to resolve a case where the app restarts before a user completes onboarding
- // which can result in an invalid database state
- database.clearAllLastMessageHashes()
- database.clearReceivedMessageHashValues()
- KeyPairUtilities.store(this, seed!!, ed25519KeyPair!!, x25519KeyPair!!)
- configFactory.keyPairChanged()
- val userHexEncodedPublicKey = x25519KeyPair!!.hexEncodedPublicKey
- val registrationID = KeyHelper.generateRegistrationId(false)
- TextSecurePreferences.setLocalRegistrationId(this, registrationID)
- TextSecurePreferences.setLocalNumber(this, userHexEncodedPublicKey)
- TextSecurePreferences.setRestorationTime(this, 0)
- TextSecurePreferences.setHasViewedSeed(this, false)
- val intent = Intent(this, DisplayNameActivity::class.java)
- push(intent)
- }
-
- private fun copyPublicKey() {
- val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
- val clip = ClipData.newPlainText("Session ID", x25519KeyPair!!.hexEncodedPublicKey)
- clipboard.setPrimaryClip(clip)
- Toast.makeText(this, R.string.copied_to_clipboard, Toast.LENGTH_SHORT).show()
- }
-
- private fun openURL(url: String) {
- try {
- val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
- startActivity(intent)
- } catch (e: Exception) {
- Toast.makeText(this, R.string.invalid_url, Toast.LENGTH_SHORT).show()
- }
- }
- // endregion
-}
\ No newline at end of file
diff --git a/app/src/main/java/org/thoughtcrime/securesms/onboarding/SeedActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/onboarding/SeedActivity.kt
deleted file mode 100644
index 0eab58fa0c..0000000000
--- a/app/src/main/java/org/thoughtcrime/securesms/onboarding/SeedActivity.kt
+++ /dev/null
@@ -1,95 +0,0 @@
-package org.thoughtcrime.securesms.onboarding
-
-import android.content.ClipData
-import android.content.ClipboardManager
-import android.content.Context
-import android.os.Bundle
-import android.text.Spannable
-import android.text.SpannableString
-import android.text.style.ForegroundColorSpan
-import android.widget.LinearLayout
-import android.widget.Toast
-import network.loki.messenger.R
-import network.loki.messenger.databinding.ActivitySeedBinding
-import org.session.libsession.utilities.TextSecurePreferences
-import org.session.libsession.utilities.getColorFromAttr
-import org.session.libsignal.crypto.MnemonicCodec
-import org.session.libsignal.utilities.hexEncodedPrivateKey
-import org.thoughtcrime.securesms.BaseActionBarActivity
-import org.thoughtcrime.securesms.crypto.IdentityKeyUtil
-import org.thoughtcrime.securesms.crypto.MnemonicUtilities
-import org.thoughtcrime.securesms.util.getAccentColor
-
-class SeedActivity : BaseActionBarActivity() {
-
- private lateinit var binding: ActivitySeedBinding
-
- private val seed by lazy {
- var hexEncodedSeed = IdentityKeyUtil.retrieve(this, IdentityKeyUtil.LOKI_SEED)
- if (hexEncodedSeed == null) {
- hexEncodedSeed = IdentityKeyUtil.getIdentityKeyPair(this).hexEncodedPrivateKey // Legacy account
- }
- val loadFileContents: (String) -> String = { fileName ->
- MnemonicUtilities.loadFileContents(this, fileName)
- }
- MnemonicCodec(loadFileContents).encode(hexEncodedSeed!!, MnemonicCodec.Language.Configuration.english)
- }
-
- // region Lifecycle
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- binding = ActivitySeedBinding.inflate(layoutInflater)
- setContentView(binding.root)
- supportActionBar!!.title = resources.getString(R.string.activity_seed_title)
- val seedReminderViewTitle = SpannableString("You're almost finished! 90%") // Intentionally not yet translated
- seedReminderViewTitle.setSpan(ForegroundColorSpan(getAccentColor()), 24, 27, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
- with(binding) {
- seedReminderView.title = seedReminderViewTitle
- seedReminderView.subtitle = resources.getString(R.string.view_seed_reminder_subtitle_2)
- seedReminderView.setProgress(90, false)
- seedReminderView.hideContinueButton()
- var redactedSeed = seed
- var index = 0
- for (character in seed) {
- if (character.isLetter()) {
- redactedSeed = redactedSeed.replaceRange(index, index + 1, "▆")
- }
- index += 1
- }
- seedTextView.setTextColor(getAccentColor())
- seedTextView.text = redactedSeed
- seedTextView.setOnLongClickListener { revealSeed(); true }
- revealButton.setOnLongClickListener { revealSeed(); true }
- copyButton.setOnClickListener { copySeed() }
- }
- }
- // endregion
-
- // region Updating
- private fun revealSeed() {
- val seedReminderViewTitle = SpannableString("Account secured! 100%") // Intentionally not yet translated
- seedReminderViewTitle.setSpan(ForegroundColorSpan(getAccentColor()), 17, 21, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
- with(binding) {
- seedReminderView.title = seedReminderViewTitle
- seedReminderView.subtitle = resources.getString(R.string.view_seed_reminder_subtitle_3)
- seedReminderView.setProgress(100, true)
- val seedTextViewLayoutParams = seedTextView.layoutParams as LinearLayout.LayoutParams
- seedTextViewLayoutParams.height = seedTextView.height
- seedTextView.layoutParams = seedTextViewLayoutParams
- seedTextView.setTextColor(getColorFromAttr(android.R.attr.textColorPrimary))
- seedTextView.text = seed
- }
- TextSecurePreferences.setHasViewedSeed(this, true)
- }
- // endregion
-
- // region Interaction
- private fun copySeed() {
- revealSeed()
- val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
- val clip = ClipData.newPlainText("Seed", seed)
- clipboard.setPrimaryClip(clip)
- Toast.makeText(this, R.string.copied_to_clipboard, Toast.LENGTH_SHORT).show()
- }
- // endregion
-}
\ No newline at end of file
diff --git a/app/src/main/java/org/thoughtcrime/securesms/onboarding/SeedReminderView.kt b/app/src/main/java/org/thoughtcrime/securesms/onboarding/SeedReminderView.kt
deleted file mode 100644
index 28611985fa..0000000000
--- a/app/src/main/java/org/thoughtcrime/securesms/onboarding/SeedReminderView.kt
+++ /dev/null
@@ -1,59 +0,0 @@
-package org.thoughtcrime.securesms.onboarding
-
-import android.content.Context
-import android.os.Build
-import android.util.AttributeSet
-import android.view.LayoutInflater
-import android.view.View
-import android.widget.FrameLayout
-import network.loki.messenger.databinding.ViewSeedReminderBinding
-
-class SeedReminderView : FrameLayout {
- private lateinit var binding: ViewSeedReminderBinding
-
- var title: CharSequence
- get() = binding.titleTextView.text
- set(value) { binding.titleTextView.text = value }
- var subtitle: CharSequence
- get() = binding.subtitleTextView.text
- set(value) { binding.subtitleTextView.text = value }
- var delegate: SeedReminderViewDelegate? = null
-
- constructor(context: Context) : super(context) {
- setUpViewHierarchy()
- }
-
- constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
- setUpViewHierarchy()
- }
-
- constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
- setUpViewHierarchy()
- }
-
- constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) {
- setUpViewHierarchy()
- }
-
- private fun setUpViewHierarchy() {
- binding = ViewSeedReminderBinding.inflate(LayoutInflater.from(context), this, true)
- binding.button.setOnClickListener { delegate?.handleSeedReminderViewContinueButtonTapped() }
- }
-
- fun setProgress(progress: Int, isAnimated: Boolean) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
- binding.progressBar.setProgress(progress, isAnimated)
- } else {
- binding.progressBar.progress = progress
- }
- }
-
- fun hideContinueButton() {
- binding.button.visibility = View.GONE
- }
-}
-
-interface SeedReminderViewDelegate {
-
- fun handleSeedReminderViewContinueButtonTapped()
-}
\ No newline at end of file
diff --git a/app/src/main/java/org/thoughtcrime/securesms/onboarding/messagenotifications/MessageNotificationsActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/onboarding/messagenotifications/MessageNotificationsActivity.kt
new file mode 100644
index 0000000000..aba66a4629
--- /dev/null
+++ b/app/src/main/java/org/thoughtcrime/securesms/onboarding/messagenotifications/MessageNotificationsActivity.kt
@@ -0,0 +1,172 @@
+package org.thoughtcrime.securesms.onboarding.messagenotifications
+
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import androidx.activity.viewModels
+import androidx.annotation.StringRes
+import androidx.compose.foundation.BorderStroke
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material.ButtonDefaults
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.OutlinedButton
+import androidx.compose.material.RadioButton
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.collectAsState
+import androidx.compose.runtime.getValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.ComposeView
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.tooling.preview.PreviewParameter
+import androidx.compose.ui.unit.dp
+import dagger.hilt.android.AndroidEntryPoint
+import network.loki.messenger.R
+import org.session.libsession.utilities.TextSecurePreferences
+import org.thoughtcrime.securesms.ApplicationContext
+import org.thoughtcrime.securesms.BaseActionBarActivity
+import org.thoughtcrime.securesms.home.HomeActivity
+import org.thoughtcrime.securesms.notifications.PushRegistry
+import org.thoughtcrime.securesms.ui.AppTheme
+import org.thoughtcrime.securesms.ui.OutlineButton
+import org.thoughtcrime.securesms.ui.PreviewTheme
+import org.thoughtcrime.securesms.ui.ThemeResPreviewParameterProvider
+import org.thoughtcrime.securesms.ui.contentDescription
+import org.thoughtcrime.securesms.ui.h8
+import org.thoughtcrime.securesms.ui.h9
+import org.thoughtcrime.securesms.ui.session_accent
+import org.thoughtcrime.securesms.ui.small
+import org.thoughtcrime.securesms.util.setUpActionBarSessionLogo
+import javax.inject.Inject
+
+@AndroidEntryPoint
+class MessageNotificationsActivity : BaseActionBarActivity() {
+
+ @Inject lateinit var pushRegistry: PushRegistry
+
+ private val viewModel: MessageNotificationsViewModel by viewModels()
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setUpActionBarSessionLogo(true)
+ TextSecurePreferences.setHasSeenWelcomeScreen(this, true)
+
+ ComposeView(this)
+ .apply { setContent { MessageNotificationsScreen() } }
+ .let(::setContentView)
+ }
+
+ @Composable
+ private fun MessageNotificationsScreen() {
+ val state by viewModel.stateFlow.collectAsState()
+
+ AppTheme {
+ MessageNotificationsScreen(state, viewModel::setEnabled, ::register)
+ }
+ }
+
+ private fun register() {
+ TextSecurePreferences.setPushEnabled(this, viewModel.stateFlow.value.pushEnabled)
+ ApplicationContext.getInstance(this).startPollingIfNeeded()
+ pushRegistry.refresh(true)
+ Intent(this, HomeActivity::class.java).apply {
+ flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
+ putExtra(HomeActivity.FROM_ONBOARDING, true)
+ }.also(::startActivity)
+ }
+}
+
+@Preview
+@Composable
+fun MessageNotificationsScreenPreview(
+ @PreviewParameter(ThemeResPreviewParameterProvider::class) themeResId: Int
+) {
+ PreviewTheme(themeResId) {
+ MessageNotificationsScreen()
+ }
+}
+
+@Composable
+fun MessageNotificationsScreen(
+ state: MessageNotificationsState = MessageNotificationsState(),
+ setEnabled: (Boolean) -> Unit = {},
+ onContinue: () -> Unit = {}
+) {
+ Column(Modifier.padding(horizontal = 32.dp)) {
+ Spacer(Modifier.weight(1f))
+ Text(stringResource(R.string.notificationsMessage), style = MaterialTheme.typography.h4)
+ Spacer(Modifier.height(16.dp))
+ Text(stringResource(R.string.onboardingMessageNotificationExplaination))
+ Spacer(Modifier.height(16.dp))
+ NotificationRadioButton(
+ R.string.activity_pn_mode_fast_mode,
+ R.string.activity_pn_mode_fast_mode_explanation,
+ R.string.activity_pn_mode_recommended_option_tag,
+ contentDescription = R.string.AccessibilityId_fast_mode_notifications_button,
+ selected = state.pushEnabled,
+ onClick = { setEnabled(true) }
+ )
+ Spacer(Modifier.height(16.dp))
+ NotificationRadioButton(
+ R.string.activity_pn_mode_slow_mode,
+ R.string.activity_pn_mode_slow_mode_explanation,
+ contentDescription = R.string.AccessibilityId_slow_mode_notifications_button,
+ selected = state.pushDisabled,
+ onClick = { setEnabled(false) }
+ )
+ Spacer(Modifier.weight(1f))
+ OutlineButton(
+ stringResource(R.string.continue_2),
+ modifier = Modifier
+ .align(Alignment.CenterHorizontally)
+ .width(262.dp),
+ onClick = onContinue
+ )
+ Spacer(modifier = Modifier.height(12.dp))
+ }
+}
+
+@Composable
+fun NotificationRadioButton(
+ @StringRes title: Int,
+ @StringRes explanation: Int,
+ @StringRes tag: Int? = null,
+ @StringRes contentDescription: Int? = null,
+ selected: Boolean = false,
+ onClick: () -> Unit = {}
+) {
+ Row {
+ OutlinedButton(
+ onClick = onClick,
+ modifier = Modifier.weight(1f).contentDescription(contentDescription),
+ colors = ButtonDefaults.outlinedButtonColors(backgroundColor = MaterialTheme.colors.background, contentColor = Color.White),
+ border = if (selected) BorderStroke(ButtonDefaults.OutlinedBorderSize, session_accent) else ButtonDefaults.outlinedBorder,
+ shape = RoundedCornerShape(8.dp)
+ ) {
+ Column(
+ verticalArrangement = Arrangement.spacedBy(6.dp)
+ ) {
+ Text(stringResource(title), style = MaterialTheme.typography.h8)
+ Text(stringResource(explanation), style = MaterialTheme.typography.small)
+ tag?.let { Text(stringResource(it), color = session_accent, style = MaterialTheme.typography.h9) }
+ }
+ }
+ RadioButton(selected = selected, modifier = Modifier.align(Alignment.CenterVertically), onClick = onClick)
+ }
+}
+
+fun Context.startMessageNotificationsActivity(flags: Int = 0) {
+ Intent(this, MessageNotificationsActivity::class.java)
+ .also { it.flags = flags }
+ .also(::startActivity)
+}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/onboarding/messagenotifications/MessageNotificationsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/onboarding/messagenotifications/MessageNotificationsViewModel.kt
new file mode 100644
index 0000000000..f913e04448
--- /dev/null
+++ b/app/src/main/java/org/thoughtcrime/securesms/onboarding/messagenotifications/MessageNotificationsViewModel.kt
@@ -0,0 +1,22 @@
+package org.thoughtcrime.securesms.onboarding.messagenotifications
+
+import androidx.lifecycle.ViewModel
+import dagger.hilt.android.lifecycle.HiltViewModel
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.asStateFlow
+import kotlinx.coroutines.flow.update
+import javax.inject.Inject
+
+@HiltViewModel
+class MessageNotificationsViewModel @Inject constructor(): ViewModel() {
+ private val state = MutableStateFlow(MessageNotificationsState())
+ val stateFlow = state.asStateFlow()
+
+ fun setEnabled(enabled: Boolean) {
+ state.update { MessageNotificationsState(pushEnabled = enabled) }
+ }
+}
+
+data class MessageNotificationsState(val pushEnabled: Boolean = true) {
+ val pushDisabled get() = !pushEnabled
+}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/onboarding/pickname/PickDisplayNameActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/onboarding/pickname/PickDisplayNameActivity.kt
new file mode 100644
index 0000000000..c83ecf2dcf
--- /dev/null
+++ b/app/src/main/java/org/thoughtcrime/securesms/onboarding/pickname/PickDisplayNameActivity.kt
@@ -0,0 +1,149 @@
+package org.thoughtcrime.securesms.onboarding.pickname
+
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import androidx.activity.viewModels
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.foundation.text.KeyboardActions
+import androidx.compose.material.ContentAlpha
+import androidx.compose.material.LocalContentAlpha
+import androidx.compose.material.LocalContentColor
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.OutlinedTextField
+import androidx.compose.material.Text
+import androidx.compose.material.TextFieldDefaults
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.collectAsState
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.ComposeView
+import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import androidx.lifecycle.lifecycleScope
+import dagger.hilt.android.AndroidEntryPoint
+import kotlinx.coroutines.launch
+import network.loki.messenger.R
+import org.session.libsession.utilities.AppTextSecurePreferences
+import org.thoughtcrime.securesms.ApplicationContext
+import org.thoughtcrime.securesms.BaseActionBarActivity
+import org.thoughtcrime.securesms.onboarding.messagenotifications.MessageNotificationsActivity
+import org.thoughtcrime.securesms.onboarding.messagenotifications.startMessageNotificationsActivity
+import org.thoughtcrime.securesms.ui.AppTheme
+import org.thoughtcrime.securesms.ui.OutlineButton
+import org.thoughtcrime.securesms.ui.PreviewTheme
+import org.thoughtcrime.securesms.ui.base
+import org.thoughtcrime.securesms.ui.baseBold
+import org.thoughtcrime.securesms.ui.contentDescription
+import org.thoughtcrime.securesms.ui.outlinedTextFieldColors
+import org.thoughtcrime.securesms.util.setUpActionBarSessionLogo
+import javax.inject.Inject
+
+private const val EXTRA_PICK_NEW_NAME = "extra_pick_new_name"
+
+@AndroidEntryPoint
+class PickDisplayNameActivity : BaseActionBarActivity() {
+
+ @Inject
+ lateinit var viewModelFactory: PickDisplayNameViewModel.AssistedFactory
+
+ private val viewModel: PickDisplayNameViewModel by viewModels {
+ val pickNewName = intent.getBooleanExtra(EXTRA_PICK_NEW_NAME, false)
+ viewModelFactory.create(pickNewName)
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setUpActionBarSessionLogo()
+
+ ComposeView(this)
+ .apply { setContent { DisplayNameScreen(viewModel) } }
+ .let(::setContentView)
+
+ lifecycleScope.launch {
+ viewModel.eventFlow.collect {
+ startMessageNotificationsActivity()
+ }
+ }
+ }
+
+ @Composable
+ private fun DisplayNameScreen(viewModel: PickDisplayNameViewModel) {
+ val state = viewModel.stateFlow.collectAsState()
+
+ AppTheme {
+ DisplayName(state.value, viewModel::onChange) { viewModel.onContinue(this) }
+ }
+ }
+
+ @Preview
+ @Composable
+ fun PreviewDisplayName() {
+ PreviewTheme(R.style.Classic_Dark) {
+ DisplayName(State())
+ }
+ }
+
+ @Composable
+ fun DisplayName(state: State, onChange: (String) -> Unit = {}, onContinue: () -> Unit = {}) {
+ Column(
+ verticalArrangement = Arrangement.spacedBy(20.dp),
+ modifier = Modifier
+ .padding(horizontal = 50.dp)
+ .padding(bottom = 12.dp)
+ ) {
+ Spacer(modifier = Modifier.weight(1f))
+ Text(stringResource(state.title), style = MaterialTheme.typography.h4)
+ Text(
+ stringResource(state.description),
+ style = MaterialTheme.typography.base,
+ modifier = Modifier.padding(bottom = 12.dp))
+
+ OutlinedTextField(
+ value = state.displayName,
+ modifier = Modifier.contentDescription(R.string.AccessibilityId_enter_display_name),
+ onValueChange = { onChange(it) },
+ placeholder = { Text(stringResource(R.string.displayNameEnter)) },
+ colors = outlinedTextFieldColors(state.error != null),
+ singleLine = true,
+ keyboardActions = KeyboardActions(
+ onDone = { onContinue() },
+ onGo = { onContinue() },
+ onSearch = { onContinue() },
+ onSend = { onContinue() },
+ ),
+ isError = state.error != null,
+ shape = RoundedCornerShape(12.dp)
+ )
+
+ state.error?.let {
+ Text(stringResource(it), style = MaterialTheme.typography.baseBold, color = MaterialTheme.colors.error)
+ }
+
+ Spacer(modifier = Modifier.weight(2f))
+
+ OutlineButton(
+ stringResource(R.string.continue_2),
+ modifier = Modifier
+ .align(Alignment.CenterHorizontally)
+ .width(262.dp)
+ ) { onContinue() }
+ }
+ }
+}
+
+fun Context.startPickDisplayNameActivity(failedToLoad: Boolean = false, flags: Int = 0) {
+ ApplicationContext.getInstance(this).newAccount = !failedToLoad
+
+ Intent(this, PickDisplayNameActivity::class.java)
+ .apply { putExtra(EXTRA_PICK_NEW_NAME, failedToLoad) }
+ .also { it.flags = flags }
+ .also(::startActivity)
+}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/onboarding/pickname/PickDisplayNameViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/onboarding/pickname/PickDisplayNameViewModel.kt
new file mode 100644
index 0000000000..3da9bcf31a
--- /dev/null
+++ b/app/src/main/java/org/thoughtcrime/securesms/onboarding/pickname/PickDisplayNameViewModel.kt
@@ -0,0 +1,115 @@
+package org.thoughtcrime.securesms.onboarding.pickname
+
+import android.content.Context
+import androidx.annotation.StringRes
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.ViewModelProvider
+import androidx.lifecycle.viewModelScope
+import dagger.assisted.Assisted
+import dagger.assisted.AssistedInject
+import kotlinx.coroutines.channels.Channel
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.asStateFlow
+import kotlinx.coroutines.flow.receiveAsFlow
+import kotlinx.coroutines.flow.update
+import kotlinx.coroutines.launch
+import network.loki.messenger.R
+import org.session.libsession.snode.SnodeModule
+import org.session.libsession.utilities.SSKEnvironment.ProfileManagerProtocol.Companion.NAME_PADDED_LENGTH
+import org.session.libsession.utilities.TextSecurePreferences
+import org.session.libsignal.database.LokiAPIDatabaseProtocol
+import org.session.libsignal.utilities.KeyHelper
+import org.session.libsignal.utilities.hexEncodedPublicKey
+import org.thoughtcrime.securesms.crypto.KeyPairUtilities
+import org.thoughtcrime.securesms.dependencies.ConfigFactory
+
+class PickDisplayNameViewModel(
+ pickNewName: Boolean,
+ private val prefs: TextSecurePreferences,
+ private val configFactory: ConfigFactory
+): ViewModel() {
+ private val state = MutableStateFlow(if (pickNewName) pickNewNameState() else State())
+ val stateFlow = state.asStateFlow()
+
+ private val event = Channel()
+ val eventFlow = event.receiveAsFlow()
+
+ private val database: LokiAPIDatabaseProtocol
+ get() = SnodeModule.shared.storage
+
+ fun onContinue(context: Context) {
+ state.update { it.copy(displayName = it.displayName.trim()) }
+
+ val displayName = state.value.displayName
+
+ val keyPairGenerationResult = KeyPairUtilities.generate()
+ val seed = keyPairGenerationResult.seed
+ val ed25519KeyPair = keyPairGenerationResult.ed25519KeyPair
+ val x25519KeyPair = keyPairGenerationResult.x25519KeyPair
+
+ when {
+ displayName.isEmpty() -> { state.update { it.copy(error = R.string.displayNameErrorDescription) } }
+ displayName.length > NAME_PADDED_LENGTH -> { state.update { it.copy(error = R.string.displayNameErrorDescriptionShorter) } }
+ else -> {
+ prefs.setProfileName(displayName)
+
+ // This is here to resolve a case where the app restarts before a user completes onboarding
+ // which can result in an invalid database state
+ database.clearAllLastMessageHashes()
+ database.clearReceivedMessageHashValues()
+
+ KeyPairUtilities.store(context, seed, ed25519KeyPair, x25519KeyPair)
+ configFactory.keyPairChanged()
+ val userHexEncodedPublicKey = x25519KeyPair.hexEncodedPublicKey
+ val registrationID = KeyHelper.generateRegistrationId(false)
+ prefs.setLocalRegistrationId(registrationID)
+ prefs.setLocalNumber(userHexEncodedPublicKey)
+ prefs.setRestorationTime(0)
+ prefs.setHasViewedSeed(false)
+
+ viewModelScope.launch { event.send(Event.DONE) }
+ }
+ }
+ }
+
+ fun onChange(value: String) {
+ state.update { state -> state.copy(
+ displayName = value,
+ error = value.takeIf { it.length > NAME_PADDED_LENGTH }?.let { R.string.displayNameErrorDescriptionShorter }
+ )
+ }
+ }
+
+ @dagger.assisted.AssistedFactory
+ interface AssistedFactory {
+ fun create(pickNewName: Boolean): Factory
+ }
+
+ @Suppress("UNCHECKED_CAST")
+ class Factory @AssistedInject constructor(
+ @Assisted private val pickNewName: Boolean,
+ private val prefs: TextSecurePreferences,
+ private val configFactory: ConfigFactory
+ ) : ViewModelProvider.Factory {
+
+ override fun create(modelClass: Class): T {
+ return PickDisplayNameViewModel(pickNewName, prefs, configFactory) as T
+ }
+ }
+}
+
+data class State(
+ @StringRes val title: Int = R.string.displayNamePick,
+ @StringRes val description: Int = R.string.displayNameDescription,
+ @StringRes val error: Int? = null,
+ val displayName: String = ""
+)
+
+fun pickNewNameState() = State(
+ title = R.string.displayNameNew,
+ description = R.string.displayNameErrorNew
+)
+
+sealed interface Event {
+ object DONE: Event
+}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/onboarding/recoverypassword/RecoveryPasswordActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/onboarding/recoverypassword/RecoveryPasswordActivity.kt
new file mode 100644
index 0000000000..45890980f9
--- /dev/null
+++ b/app/src/main/java/org/thoughtcrime/securesms/onboarding/recoverypassword/RecoveryPasswordActivity.kt
@@ -0,0 +1,250 @@
+package org.thoughtcrime.securesms.onboarding.recoverypassword
+
+import android.content.Context
+import android.content.Intent
+import android.graphics.Bitmap
+import android.os.Bundle
+import androidx.activity.viewModels
+import androidx.compose.animation.AnimatedVisibility
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.background
+import androidx.compose.foundation.border
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.foundation.verticalScroll
+import androidx.compose.material.Card
+import androidx.compose.material.Icon
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.ColorFilter
+import androidx.compose.ui.graphics.asImageBitmap
+import androidx.compose.ui.platform.ComposeView
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.tooling.preview.PreviewParameter
+import androidx.compose.ui.unit.dp
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
+import network.loki.messenger.R
+import org.thoughtcrime.securesms.BaseActionBarActivity
+import org.thoughtcrime.securesms.showSessionDialog
+import org.thoughtcrime.securesms.ui.AppTheme
+import org.thoughtcrime.securesms.ui.CellWithPaddingAndMargin
+import org.thoughtcrime.securesms.ui.GetString
+import org.thoughtcrime.securesms.ui.LaunchedEffectAsync
+import org.thoughtcrime.securesms.ui.LocalExtraColors
+import org.thoughtcrime.securesms.ui.OutlineButton
+import org.thoughtcrime.securesms.ui.PreviewTheme
+import org.thoughtcrime.securesms.ui.SessionShieldIcon
+import org.thoughtcrime.securesms.ui.ThemeResPreviewParameterProvider
+import org.thoughtcrime.securesms.ui.classicDarkColors
+import org.thoughtcrime.securesms.ui.colorDestructive
+import org.thoughtcrime.securesms.ui.contentDescription
+import org.thoughtcrime.securesms.ui.h8
+import org.thoughtcrime.securesms.ui.small
+import kotlin.time.Duration.Companion.seconds
+
+class RecoveryPasswordActivity : BaseActionBarActivity() {
+
+ private val viewModel: RecoveryPasswordViewModel by viewModels()
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ supportActionBar!!.title = resources.getString(R.string.sessionRecoveryPassword)
+
+ ComposeView(this).apply {
+ setContent {
+ RecoveryPassword(viewModel.seed, viewModel.qrBitmap, { viewModel.copySeed(context) }) { onHide() }
+ }
+ }.let(::setContentView)
+ }
+
+ private fun onHide() {
+ showSessionDialog {
+ title(R.string.recoveryPasswordHidePermanently)
+ htmlText(R.string.recoveryPasswordHidePermanentlyDescription1)
+ destructiveButton(R.string.continue_2) { onHideConfirm() }
+ cancelButton()
+ }
+ }
+
+ private fun onHideConfirm() {
+ showSessionDialog {
+ title(R.string.recoveryPasswordHidePermanently)
+ text(R.string.recoveryPasswordHidePermanentlyDescription2)
+ cancelButton()
+ destructiveButton(
+ R.string.yes,
+ contentDescription = R.string.AccessibilityId_confirm_button
+ ) {
+ viewModel.permanentlyHidePassword()
+ finish()
+ }
+ }
+ }
+}
+
+@Preview
+@Composable
+fun PreviewRecoveryPassword(
+ @PreviewParameter(ThemeResPreviewParameterProvider::class) themeResId: Int
+) {
+ PreviewTheme(themeResId) {
+ RecoveryPassword(seed = "Voyage urban toyed maverick peculiar tuxedo penguin tree grass building listen speak withdraw terminal plane")
+ }
+}
+
+@Composable
+fun RecoveryPassword(
+ seed: String = "",
+ qrBitmap: Bitmap? = null,
+ copySeed:() -> Unit = {},
+ onHide:() -> Unit = {}
+) {
+ AppTheme {
+ Column(
+ verticalArrangement = Arrangement.spacedBy(16.dp),
+ modifier = Modifier
+ .verticalScroll(rememberScrollState())
+ .padding(bottom = 16.dp)
+ ) {
+ RecoveryPasswordCell(seed, qrBitmap, copySeed)
+ HideRecoveryPasswordCell(onHide)
+ }
+ }
+}
+
+@Composable
+fun RecoveryPasswordCell(seed: String = "", qrBitmap: Bitmap? = null, copySeed:() -> Unit = {}) {
+ val showQr = remember {
+ mutableStateOf(false)
+ }
+
+ CellWithPaddingAndMargin {
+ Column {
+ Row {
+ Text(stringResource(R.string.sessionRecoveryPassword))
+ Spacer(Modifier.width(8.dp))
+ SessionShieldIcon()
+ }
+
+ Text(stringResource(R.string.recoveryPasswordDescription))
+
+ AnimatedVisibility(!showQr.value) {
+ Text(
+ seed,
+ modifier = Modifier
+ .contentDescription(R.string.AccessibilityId_hide_recovery_password_button)
+ .padding(vertical = 24.dp)
+ .border(
+ width = 1.dp,
+ color = classicDarkColors[3],
+ shape = RoundedCornerShape(11.dp)
+ )
+ .padding(24.dp),
+ style = MaterialTheme.typography.small.copy(fontFamily = FontFamily.Monospace),
+ color = LocalExtraColors.current.prominentButtonColor,
+ )
+ }
+
+ AnimatedVisibility(showQr.value, modifier = Modifier.align(Alignment.CenterHorizontally)) {
+ Card(
+ backgroundColor = LocalExtraColors.current.lightCell,
+ elevation = 0.dp,
+ modifier = Modifier
+ .align(Alignment.CenterHorizontally)
+ .padding(vertical = 24.dp)
+ ) {
+ Box {
+ qrBitmap?.let {
+ Image(
+ bitmap = it.asImageBitmap(),
+ contentDescription = "QR code of your recovery password",
+ colorFilter = ColorFilter.tint(LocalExtraColors.current.onLightCell)
+ )
+ }
+
+ Icon(
+ painter = painterResource(id = R.drawable.session_shield),
+ contentDescription = "",
+ tint = LocalExtraColors.current.onLightCell,
+ modifier = Modifier
+ .align(Alignment.Center)
+ .width(46.dp)
+ .height(56.dp)
+ .background(color = LocalExtraColors.current.lightCell)
+ .padding(horizontal = 3.dp, vertical = 1.dp)
+ )
+ }
+ }
+ }
+
+ AnimatedVisibility(!showQr.value) {
+ Row(horizontalArrangement = Arrangement.spacedBy(32.dp)) {
+ OutlineButton(
+ modifier = Modifier.weight(1f),
+ color = MaterialTheme.colors.onPrimary,
+ onClick = copySeed,
+ temporaryContent = { Text(stringResource(R.string.copied)) }
+ ) {
+ Text(stringResource(R.string.copy))
+ }
+ OutlineButton(text = stringResource(R.string.qrView), modifier = Modifier.weight(1f), color = MaterialTheme.colors.onPrimary) { showQr.toggle() }
+ }
+ }
+
+ AnimatedVisibility(showQr.value, modifier = Modifier.align(Alignment.CenterHorizontally)) {
+ OutlineButton(
+ text = stringResource(R.string.recoveryPasswordView),
+ color = MaterialTheme.colors.onPrimary,
+ modifier = Modifier.align(Alignment.CenterHorizontally)
+ ) { showQr.toggle() }
+ }
+ }
+ }
+}
+
+private fun MutableState.toggle() { value = !value }
+
+@Composable
+fun HideRecoveryPasswordCell(onHide: () -> Unit = {}) {
+ CellWithPaddingAndMargin {
+ Row {
+ Column(Modifier.weight(1f)) {
+ Text(text = stringResource(R.string.recoveryPasswordHideRecoveryPassword), style = MaterialTheme.typography.h8)
+ Text(text = stringResource(R.string.recoveryPasswordHideRecoveryPasswordDescription))
+ }
+ OutlineButton(
+ stringResource(R.string.hide),
+ contentDescription = GetString(R.string.AccessibilityId_hide_recovery_password_button),
+ modifier = Modifier.align(Alignment.CenterVertically),
+ color = colorDestructive
+ ) { onHide() }
+ }
+ }
+}
+
+fun Context.startRecoveryPasswordActivity() {
+ Intent(this, RecoveryPasswordActivity::class.java).also(::startActivity)
+}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/onboarding/recoverypassword/RecoveryPasswordViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/onboarding/recoverypassword/RecoveryPasswordViewModel.kt
new file mode 100644
index 0000000000..9fee061dc4
--- /dev/null
+++ b/app/src/main/java/org/thoughtcrime/securesms/onboarding/recoverypassword/RecoveryPasswordViewModel.kt
@@ -0,0 +1,54 @@
+package org.thoughtcrime.securesms.onboarding.recoverypassword
+
+import android.app.Application
+import android.content.ClipData
+import android.content.ClipboardManager
+import android.content.Context
+import android.graphics.Bitmap
+import androidx.lifecycle.AndroidViewModel
+import androidx.preference.PreferenceFragmentCompat.OnPreferenceStartFragmentCallback
+import dagger.hilt.android.lifecycle.HiltViewModel
+import org.session.libsession.utilities.AppTextSecurePreferences
+import org.session.libsession.utilities.TextSecurePreferences
+import org.session.libsignal.crypto.MnemonicCodec
+import org.session.libsignal.utilities.hexEncodedPrivateKey
+import org.thoughtcrime.securesms.crypto.IdentityKeyUtil
+import org.thoughtcrime.securesms.crypto.MnemonicUtilities
+import org.thoughtcrime.securesms.util.QRCodeUtilities
+import org.thoughtcrime.securesms.util.toPx
+import javax.inject.Inject
+
+@HiltViewModel
+class RecoveryPasswordViewModel @Inject constructor(
+ private val application: Application
+): AndroidViewModel(application) {
+
+ val prefs = AppTextSecurePreferences(application)
+
+ fun permanentlyHidePassword() {
+ prefs.setHidePassword(true)
+ }
+
+ fun copySeed(context: Context) {
+ TextSecurePreferences.setHasViewedSeed(context, true)
+ val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
+ val clip = ClipData.newPlainText("Seed", seed)
+ clipboard.setPrimaryClip(clip)
+ }
+
+ val seed by lazy {
+ val hexEncodedSeed = IdentityKeyUtil.retrieve(application, IdentityKeyUtil.LOKI_SEED)
+ ?: IdentityKeyUtil.getIdentityKeyPair(application).hexEncodedPrivateKey // Legacy account
+ MnemonicCodec { MnemonicUtilities.loadFileContents(application, it) }
+ .encode(hexEncodedSeed, MnemonicCodec.Language.Configuration.english)
+ }
+
+ val qrBitmap by lazy {
+ QRCodeUtilities.encode(
+ data = seed,
+ size = toPx(280, application.resources),
+ isInverted = false,
+ hasTransparentBackground = true
+ )
+ }
+}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/SeedDialog.kt b/app/src/main/java/org/thoughtcrime/securesms/preferences/SeedDialog.kt
deleted file mode 100644
index bae5f19605..0000000000
--- a/app/src/main/java/org/thoughtcrime/securesms/preferences/SeedDialog.kt
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.thoughtcrime.securesms.preferences
-
-import android.app.Dialog
-import android.content.ClipData
-import android.content.ClipboardManager
-import android.content.Context
-import android.os.Bundle
-import android.widget.Toast
-import androidx.fragment.app.DialogFragment
-import network.loki.messenger.R
-import org.session.libsignal.crypto.MnemonicCodec
-import org.session.libsignal.utilities.hexEncodedPrivateKey
-import org.thoughtcrime.securesms.createSessionDialog
-import org.thoughtcrime.securesms.crypto.IdentityKeyUtil
-import org.thoughtcrime.securesms.crypto.MnemonicUtilities
-
-class SeedDialog: DialogFragment() {
- private val seed by lazy {
- val hexEncodedSeed = IdentityKeyUtil.retrieve(requireContext(), IdentityKeyUtil.LOKI_SEED)
- ?: IdentityKeyUtil.getIdentityKeyPair(requireContext()).hexEncodedPrivateKey // Legacy account
-
- MnemonicCodec { fileName -> MnemonicUtilities.loadFileContents(requireContext(), fileName) }
- .encode(hexEncodedSeed, MnemonicCodec.Language.Configuration.english)
- }
-
- override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = createSessionDialog {
- title(R.string.dialog_seed_title)
- text(R.string.dialog_seed_explanation)
- text(seed, R.style.SessionIDTextView)
- button(R.string.copy, R.string.AccessibilityId_copy_recovery_phrase) { copySeed() }
- button(R.string.close) { dismiss() }
- }
-
- private fun copySeed() {
- val clipboard = requireActivity().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
- val clip = ClipData.newPlainText("Seed", seed)
- clipboard.setPrimaryClip(clip)
- Toast.makeText(requireContext(), R.string.copied_to_clipboard, Toast.LENGTH_SHORT).show()
- dismiss()
- }
-}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsActivity.kt
index b66df5d255..91d90a5ef5 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsActivity.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsActivity.kt
@@ -20,6 +20,7 @@ import android.view.View
import android.view.inputmethod.EditorInfo
import android.view.inputmethod.InputMethodManager
import android.widget.Toast
+import androidx.core.view.isGone
import androidx.core.view.isVisible
import dagger.hilt.android.AndroidEntryPoint
import network.loki.messenger.BuildConfig
@@ -46,6 +47,7 @@ import org.thoughtcrime.securesms.home.PathActivity
import org.thoughtcrime.securesms.messagerequests.MessageRequestsActivity
import org.thoughtcrime.securesms.mms.GlideApp
import org.thoughtcrime.securesms.mms.GlideRequests
+import org.thoughtcrime.securesms.onboarding.recoverypassword.startRecoveryPasswordActivity
import org.thoughtcrime.securesms.permissions.Permissions
import org.thoughtcrime.securesms.preferences.appearance.AppearanceSettingsActivity
import org.thoughtcrime.securesms.profiles.ProfileMediaConstraints
@@ -65,6 +67,10 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() {
@Inject
lateinit var configFactory: ConfigFactory
+ @Inject
+ lateinit var prefs: TextSecurePreferences
+
+
private lateinit var binding: ActivitySettingsBinding
private var displayNameEditActionMode: ActionMode? = null
@@ -87,13 +93,17 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() {
super.onCreate(savedInstanceState, isReady)
binding = ActivitySettingsBinding.inflate(layoutInflater)
setContentView(binding.root)
- val displayName = getDisplayName()
glide = GlideApp.with(this)
- with(binding) {
+ }
+
+ override fun onStart() {
+ super.onStart()
+
+ binding.run {
setupProfilePictureView(profilePictureView)
profilePictureView.setOnClickListener { showEditProfilePictureUI() }
ctnGroupNameSection.setOnClickListener { startActionMode(DisplayNameEditActionModeCallback()) }
- btnGroupNameDisplay.text = displayName
+ btnGroupNameDisplay.text = getDisplayName()
publicKeyTextView.text = hexEncodedPublicKey
copyButton.setOnClickListener { copyPublicKey() }
shareButton.setOnClickListener { sharePublicKey() }
@@ -106,7 +116,9 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() {
appearanceButton.setOnClickListener { showAppearanceSettings() }
inviteFriendButton.setOnClickListener { sendInvitation() }
helpButton.setOnClickListener { showHelp() }
- seedButton.setOnClickListener { showSeed() }
+ passwordDivider.isGone = prefs.getHidePassword()
+ passwordButton.isGone = prefs.getHidePassword()
+ passwordButton.setOnClickListener { showPassword() }
clearAllDataButton.setOnClickListener { clearAllData() }
val gitCommitFirstSixChars = BuildConfig.GIT_HASH.take(6)
@@ -403,8 +415,8 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() {
show(intent)
}
- private fun showSeed() {
- SeedDialog().show(supportFragmentManager, "Recovery Phrase Dialog")
+ private fun showPassword() {
+ startRecoveryPasswordActivity()
}
private fun clearAllData() {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/ui/Colors.kt b/app/src/main/java/org/thoughtcrime/securesms/ui/Colors.kt
index 55bc1be62e..0951290ea6 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/ui/Colors.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/ui/Colors.kt
@@ -1,10 +1,25 @@
package org.thoughtcrime.securesms.ui
+import android.content.Context
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
import androidx.compose.material.ButtonDefaults
+import androidx.compose.material.Card
import androidx.compose.material.Colors
+import androidx.compose.material.ContentAlpha
+import androidx.compose.material.LocalContentAlpha
+import androidx.compose.material.LocalContentColor
import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Text
+import androidx.compose.material.TextFieldDefaults
+import androidx.compose.material.primarySurface
import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.tooling.preview.PreviewParameter
+import androidx.compose.ui.unit.dp
val colorDestructive = Color(0xffFF453A)
@@ -42,6 +57,7 @@ const val oceanLight5 = 0xffE7F3F4
const val oceanLight6 = 0xffECFAFB
const val oceanLight7 = 0xffFCFFFF
+val session_accent = Color(0xFF31F196)
val ocean_accent = Color(0xff57C9FA)
val oceanLights = arrayOf(oceanLight0, oceanLight1, oceanLight2, oceanLight3, oceanLight4, oceanLight5, oceanLight6, oceanLight7)
@@ -61,3 +77,56 @@ fun transparentButtonColors() = ButtonDefaults.buttonColors(backgroundColor = Co
@Composable
fun destructiveButtonColors() = ButtonDefaults.buttonColors(backgroundColor = Color.Transparent, contentColor = colorDestructive)
+
+@Preview
+@Composable
+fun PreviewMessageDetails(
+ @PreviewParameter(ThemeResPreviewParameterProvider::class) themeResId: Int
+) {
+ PreviewTheme(themeResId) {
+ Colors()
+ }
+}
+
+@Composable
+private fun Colors() {
+ AppTheme {
+ Column {
+ Box(Modifier.background(MaterialTheme.colors.primary)) {
+ Text("primary")
+ }
+ Box(Modifier.background(MaterialTheme.colors.primaryVariant)) {
+ Text("primaryVariant")
+ }
+ Box(Modifier.background(MaterialTheme.colors.secondary)) {
+ Text("secondary")
+ }
+ Box(Modifier.background(MaterialTheme.colors.secondaryVariant)) {
+ Text("secondaryVariant")
+ }
+ Box(Modifier.background(MaterialTheme.colors.surface)) {
+ Text("surface")
+ }
+ Box(Modifier.background(MaterialTheme.colors.primarySurface)) {
+ Text("primarySurface")
+ }
+ Box(Modifier.background(MaterialTheme.colors.background)) {
+ Text("background")
+ }
+ Box(Modifier.background(MaterialTheme.colors.error)) {
+ Text("error")
+ }
+ }
+ }
+}
+
+@Composable
+fun outlinedTextFieldColors(
+ isError: Boolean
+) = TextFieldDefaults.outlinedTextFieldColors(
+ textColor = if (isError) colorDestructive else LocalContentColor.current,
+ cursorColor = if (isError) colorDestructive else LocalContentColor.current,
+ focusedBorderColor = Color(classicDark3),
+ unfocusedBorderColor = Color(classicDark3),
+ placeholderColor = if (isError) colorDestructive else MaterialTheme.colors.onSurface.copy(ContentAlpha.medium)
+)
diff --git a/app/src/main/java/org/thoughtcrime/securesms/ui/Components.kt b/app/src/main/java/org/thoughtcrime/securesms/ui/Components.kt
index 6c223a45f2..e4d2d4c37a 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/ui/Components.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/ui/Components.kt
@@ -1,7 +1,9 @@
package org.thoughtcrime.securesms.ui
import androidx.annotation.DrawableRes
+import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.BorderStroke
+import androidx.compose.foundation.Canvas
import androidx.compose.foundation.ScrollState
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
@@ -17,6 +19,7 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.wrapContentHeight
+import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.foundation.shape.RoundedCornerShape
@@ -31,28 +34,170 @@ import androidx.compose.material.RadioButton
import androidx.compose.material.Text
import androidx.compose.material.TextButton
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.draw.drawWithContent
+import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.BlendMode
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.RectangleShape
+import androidx.compose.ui.graphics.StrokeCap
+import androidx.compose.ui.graphics.drawscope.Stroke
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.semantics.contentDescription
import androidx.compose.ui.semantics.semantics
+import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.TextUnit
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.compose.ui.viewinterop.AndroidView
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
+import network.loki.messenger.R
import org.session.libsession.utilities.recipients.Recipient
import org.session.libsession.utilities.runIf
import org.thoughtcrime.securesms.components.ProfilePictureView
import org.thoughtcrime.securesms.conversation.disappearingmessages.ui.OptionsCard
import kotlin.math.min
+import kotlin.math.roundToInt
+import kotlin.time.Duration.Companion.seconds
+
+@Composable
+fun OutlineButton(
+ text: String,
+ modifier: Modifier = Modifier,
+ contentDescription: GetString = GetString(text),
+ color: Color = LocalExtraColors.current.prominentButtonColor,
+ onClick: () -> Unit
+) {
+ OutlinedButton(
+ modifier = modifier.contentDescription(contentDescription),
+ onClick = onClick,
+ border = BorderStroke(1.dp, color),
+ shape = RoundedCornerShape(50), // = 50% percent
+ colors = ButtonDefaults.outlinedButtonColors(
+ contentColor = color,
+ backgroundColor = Color.Unspecified
+ )
+ ) {
+ Text(text = text)
+ }
+}
+
+@Composable
+fun OutlineButton(
+ modifier: Modifier = Modifier,
+ color: Color = LocalExtraColors.current.prominentButtonColor,
+ onClick: () -> Unit = {},
+ content: @Composable () -> Unit = {}
+) {
+ OutlinedButton(
+ modifier = modifier,
+ onClick = onClick,
+ border = BorderStroke(1.dp, color),
+ shape = RoundedCornerShape(percent = 50),
+ colors = ButtonDefaults.outlinedButtonColors(
+ contentColor = color,
+ backgroundColor = Color.Unspecified
+ )
+ ) {
+ content()
+ }
+}
+
+@Composable
+fun OutlineButton(
+ temporaryContent: @Composable () -> Unit,
+ modifier: Modifier = Modifier,
+ color: Color = LocalExtraColors.current.prominentButtonColor,
+ onClick: () -> Unit = {},
+ content: @Composable () -> Unit = {}
+) {
+ var clicked by remember { mutableStateOf(false) }
+ if (clicked) LaunchedEffectAsync {
+ delay(2.seconds)
+ clicked = false
+ }
+
+ OutlinedButton(
+ modifier = modifier,
+ onClick = {
+ onClick()
+ clicked = true
+ },
+ border = BorderStroke(1.dp, color),
+ shape = RoundedCornerShape(percent = 50),
+ colors = ButtonDefaults.outlinedButtonColors(
+ contentColor = color,
+ backgroundColor = Color.Unspecified
+ )
+ ) {
+ AnimatedVisibility(clicked) {
+ temporaryContent()
+ }
+ AnimatedVisibility(!clicked) {
+ content()
+ }
+ }
+}
+
+@Composable
+fun FilledButton(
+ text: String,
+ modifier: Modifier = Modifier,
+ contentDescription: GetString? = GetString(text),
+ onClick: () -> Unit) {
+ OutlinedButton(
+ modifier = modifier.size(108.dp, 34.dp),
+ onClick = onClick,
+ shape = RoundedCornerShape(50), // = 50% percent
+ colors = ButtonDefaults.outlinedButtonColors(
+ contentColor = MaterialTheme.colors.background,
+ backgroundColor = LocalExtraColors.current.prominentButtonColor
+ )
+ ) {
+ Text(text = text)
+ }
+}
+
+@Composable
+fun BorderlessButton(
+ text: String,
+ modifier: Modifier = Modifier,
+ contentDescription: GetString = GetString(text),
+ fontSize: TextUnit = TextUnit.Unspecified,
+ lineHeight: TextUnit = TextUnit.Unspecified,
+ onClick: () -> Unit) {
+ TextButton(
+ onClick = onClick,
+ modifier = modifier.contentDescription(contentDescription),
+ shape = RoundedCornerShape(50), // = 50% percent
+ colors = ButtonDefaults.outlinedButtonColors(
+ contentColor = MaterialTheme.colors.onBackground,
+ backgroundColor = MaterialTheme.colors.background
+ )
+ ) {
+ Text(
+ text = text,
+ textAlign = TextAlign.Center,
+ fontSize = fontSize,
+ lineHeight = lineHeight,
+ modifier = Modifier.padding(horizontal = 2.dp)
+ )
+ }
+}
interface Callbacks {
fun onSetClick(): Any?
@@ -187,8 +332,16 @@ fun TitledRadioButton(option: RadioOption, onClick: () -> Unit) {
@Composable
fun Modifier.contentDescription(text: GetString?): Modifier {
+ return text?.let {
+ val context = LocalContext.current
+ semantics { contentDescription = it(context) }
+ } ?: this
+}
+
+@Composable
+fun Modifier.contentDescription(id: Int?): Modifier {
val context = LocalContext.current
- return text?.let { semantics { contentDescription = it(context) } } ?: this
+ return id?.let { semantics { contentDescription = context.getString(it) } } ?: this
}
@Composable
@@ -274,3 +427,64 @@ fun RowScope.Avatar(recipient: Recipient) {
)
}
}
+
+@Composable
+fun ProgressArc(progress: Float, modifier: Modifier = Modifier) {
+ val text = (progress * 100).roundToInt()
+
+ Box(modifier = modifier) {
+ Arc(percentage = progress, modifier = Modifier.align(Alignment.Center))
+ Text("${text}%", color = Color.White, modifier = Modifier.align(Alignment.Center), style = MaterialTheme.typography.h2)
+ }
+}
+
+@Composable
+fun Arc(
+ modifier: Modifier = Modifier,
+ percentage: Float = 0.25f,
+ fillColor: Color = session_accent,
+ backgroundColor: Color = classicDarkColors[3],
+ strokeWidth: Dp = 18.dp,
+ sweepAngle: Float = 310f,
+ startAngle: Float = (360f - sweepAngle) / 2 + 90f
+) {
+ Canvas(
+ modifier = modifier
+ .padding(strokeWidth)
+ .size(186.dp)
+ ) {
+ // Background Line
+ drawArc(
+ color = backgroundColor,
+ startAngle,
+ sweepAngle,
+ false,
+ style = Stroke(strokeWidth.toPx(), cap = StrokeCap.Round),
+ size = Size(size.width, size.height)
+ )
+
+ drawArc(
+ color = fillColor,
+ startAngle,
+ percentage * sweepAngle,
+ false,
+ style = Stroke(strokeWidth.toPx(), cap = StrokeCap.Round),
+ size = Size(size.width, size.height)
+ )
+ }
+}
+
+@Composable
+fun RowScope.SessionShieldIcon() {
+ Icon(
+ painter = painterResource(R.drawable.session_shield),
+ contentDescription = null,
+ modifier = Modifier.align(Alignment.CenterVertically)
+ .wrapContentSize(unbounded = true)
+ )
+}
+
+@Composable
+fun LaunchedEffectAsync(block: suspend CoroutineScope.() -> Unit) {
+ rememberCoroutineScope().apply { LaunchedEffect(Unit) { launch { block() } } }
+}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/ui/Themes.kt b/app/src/main/java/org/thoughtcrime/securesms/ui/Themes.kt
index 3fa861fb71..9e681868b4 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/ui/Themes.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/ui/Themes.kt
@@ -5,15 +5,25 @@ import androidx.annotation.AttrRes
import androidx.appcompat.view.ContextThemeWrapper
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.text.selection.LocalTextSelectionColors
+import androidx.compose.foundation.text.selection.TextSelectionColors
+import androidx.compose.material.LocalContentColor
import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Shapes
+import androidx.compose.material.Typography
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.remember
import androidx.compose.runtime.staticCompositionLocalOf
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
-import com.google.accompanist.themeadapter.appcompat.AppCompatTheme
+import androidx.compose.ui.unit.TextUnit
+import androidx.compose.ui.unit.sp
+import com.google.accompanist.themeadapter.appcompat.createAppCompatTheme
import com.google.android.material.color.MaterialColors
import network.loki.messenger.R
@@ -22,7 +32,9 @@ val LocalExtraColors = staticCompositionLocalOf { error("No Custom
data class ExtraColors(
val settingsBackground: Color,
- val prominentButtonColor: Color
+ val prominentButtonColor: Color,
+ val lightCell: Color,
+ val onLightCell: Color,
)
/**
@@ -32,20 +44,91 @@ data class ExtraColors(
fun AppTheme(
content: @Composable () -> Unit
) {
- val extraColors = LocalContext.current.run {
+ val context = LocalContext.current
+
+ val extraColors = context.run {
ExtraColors(
settingsBackground = getColorFromTheme(R.attr.colorSettingsBackground),
prominentButtonColor = getColorFromTheme(R.attr.prominentButtonColor),
+ lightCell = getColorFromTheme(R.attr.lightCell),
+ onLightCell = getColorFromTheme(R.attr.onLightCell),
)
}
+ val surface = context.getColorFromTheme(R.attr.colorSettingsBackground)
+
+
CompositionLocalProvider(LocalExtraColors provides extraColors) {
- AppCompatTheme {
- content()
+ AppCompatTheme(surface = surface) {
+ CompositionLocalProvider(LocalTextSelectionColors provides TextSelectionColors(
+ handleColor = MaterialTheme.colors.secondary,
+ backgroundColor = MaterialTheme.colors.secondary.copy(alpha = 0.5f)
+ )) {
+ content()
+ }
}
}
}
+@Composable
+fun AppCompatTheme(
+ context: Context = LocalContext.current,
+ readColors: Boolean = true,
+ typography: Typography = sessionTypography,
+ shapes: Shapes = MaterialTheme.shapes,
+ surface: Color? = null,
+ content: @Composable () -> Unit
+) {
+ val themeParams = remember(context.theme) {
+ context.createAppCompatTheme(
+ readColors = readColors,
+ readTypography = false
+ )
+ }
+
+ val colors = themeParams.colors ?: MaterialTheme.colors
+
+ MaterialTheme(
+ colors = colors.copy(
+ surface = surface ?: colors.surface
+ ),
+ typography = typography,
+ shapes = shapes,
+ ) {
+ // We update the LocalContentColor to match our onBackground. This allows the default
+ // content color to be more appropriate to the theme background
+ CompositionLocalProvider(
+ LocalContentColor provides MaterialTheme.colors.onBackground,
+ content = content
+ )
+ }
+}
+
+fun boldStyle(size: TextUnit) = TextStyle.Default.copy(
+ fontWeight = FontWeight.Bold,
+ fontSize = size
+)
+
+fun defaultStyle(size: TextUnit) = TextStyle.Default.copy(fontSize = size)
+
+val sessionTypography = Typography(
+ h1 = boldStyle(36.sp),
+ h2 = boldStyle(32.sp),
+ h3 = boldStyle(29.sp),
+ h4 = boldStyle(26.sp),
+ h5 = boldStyle(23.sp),
+ h6 = boldStyle(20.sp),
+)
+
+val Typography.base get() = defaultStyle(14.sp)
+val Typography.baseBold get() = boldStyle(14.sp)
+val Typography.small get() = defaultStyle(12.sp)
+val Typography.extraSmall get() = defaultStyle(11.sp)
+
+val Typography.h7 get() = boldStyle(18.sp)
+val Typography.h8 get() = boldStyle(16.sp)
+val Typography.h9 get() = boldStyle(14.sp)
+
fun Context.getColorFromTheme(@AttrRes attr: Int, defaultValue: Int = 0x0): Color =
MaterialColors.getColor(this, attr, defaultValue).let(::Color)
diff --git a/app/src/main/java/org/thoughtcrime/securesms/ui/components/SessionTabRow.kt b/app/src/main/java/org/thoughtcrime/securesms/ui/components/SessionTabRow.kt
new file mode 100644
index 0000000000..2b51632fd6
--- /dev/null
+++ b/app/src/main/java/org/thoughtcrime/securesms/ui/components/SessionTabRow.kt
@@ -0,0 +1,64 @@
+package org.thoughtcrime.securesms.ui.components
+
+import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.pager.PagerState
+import androidx.compose.foundation.pager.rememberPagerState
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Tab
+import androidx.compose.material.TabRow
+import androidx.compose.material.TabRowDefaults
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.tooling.preview.PreviewParameter
+import androidx.compose.ui.unit.dp
+import kotlinx.coroutines.launch
+import network.loki.messenger.R
+import org.thoughtcrime.securesms.ui.LocalExtraColors
+import org.thoughtcrime.securesms.ui.PreviewTheme
+import org.thoughtcrime.securesms.ui.ThemeResPreviewParameterProvider
+
+private val TITLES = listOf(R.string.sessionRecoveryPassword, R.string.qrScan)
+
+@OptIn(ExperimentalFoundationApi::class)
+@Composable
+fun SessionTabRow(pagerState: PagerState, titles: List) {
+ TabRow(
+ backgroundColor = Color.Unspecified,
+ selectedTabIndex = pagerState.currentPage,
+ contentColor = LocalExtraColors.current.prominentButtonColor,
+ divider = { TabRowDefaults.Divider(color = MaterialTheme.colors.onPrimary.copy(alpha = TabRowDefaults.DividerOpacity)) },
+ modifier = Modifier
+ .height(48.dp)
+ .background(color = Color.Unspecified)
+ ) {
+ val animationScope = rememberCoroutineScope()
+ titles.forEachIndexed { i, it ->
+ Tab(
+ i == pagerState.currentPage,
+ onClick = { animationScope.launch { pagerState.animateScrollToPage(i) } },
+ selectedContentColor = MaterialTheme.colors.onPrimary,
+ unselectedContentColor = MaterialTheme.colors.onPrimary,
+ ) {
+ Text(stringResource(id = it))
+ }
+ }
+ }
+}
+
+@OptIn(ExperimentalFoundationApi::class)
+@androidx.compose.ui.tooling.preview.Preview
+@Composable
+fun PreviewSessionTabRow(
+ @PreviewParameter(ThemeResPreviewParameterProvider::class) themeResId: Int
+) {
+ PreviewTheme(themeResId) {
+ val pagerState = rememberPagerState { TITLES.size }
+ SessionTabRow(pagerState = pagerState, titles = TITLES)
+ }
+}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/QRCodeUtilities.kt b/app/src/main/java/org/thoughtcrime/securesms/util/QRCodeUtilities.kt
index f7d1e3e8ad..d70bb3be87 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/util/QRCodeUtilities.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/util/QRCodeUtilities.kt
@@ -9,17 +9,26 @@ import com.google.zxing.qrcode.QRCodeWriter
object QRCodeUtilities {
- fun encode(data: String, size: Int, isInverted: Boolean = false, hasTransparentBackground: Boolean = true): Bitmap {
+ fun encode(
+ data: String,
+ size: Int,
+ isInverted: Boolean = false,
+ hasTransparentBackground: Boolean = true,
+ dark: Int = Color.BLACK,
+ light: Int = Color.WHITE,
+ ): Bitmap {
try {
val hints = hashMapOf( EncodeHintType.MARGIN to 1 )
val result = QRCodeWriter().encode(data, BarcodeFormat.QR_CODE, size, size, hints)
val bitmap = Bitmap.createBitmap(result.width, result.height, Bitmap.Config.ARGB_8888)
+ val color = if (isInverted) light else dark
+ val background = if (isInverted) dark else light
for (y in 0 until result.height) {
for (x in 0 until result.width) {
if (result.get(x, y)) {
- bitmap.setPixel(x, y, if (isInverted) Color.WHITE else Color.BLACK)
+ bitmap.setPixel(x, y, color)
} else if (!hasTransparentBackground) {
- bitmap.setPixel(x, y, if (isInverted) Color.BLACK else Color.WHITE)
+ bitmap.setPixel(x, y, background)
}
}
}
diff --git a/app/src/main/res/drawable/emoji_tada_large.xml b/app/src/main/res/drawable/emoji_tada_large.xml
new file mode 100644
index 0000000000..ed802646ff
--- /dev/null
+++ b/app/src/main/res/drawable/emoji_tada_large.xml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_logo_large.xml b/app/src/main/res/drawable/ic_logo_large.xml
new file mode 100644
index 0000000000..b494b17663
--- /dev/null
+++ b/app/src/main/res/drawable/ic_logo_large.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_shield_outline.xml b/app/src/main/res/drawable/ic_shield_outline.xml
new file mode 100644
index 0000000000..3db98f53d0
--- /dev/null
+++ b/app/src/main/res/drawable/ic_shield_outline.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/session_logo.xml b/app/src/main/res/drawable/session_logo.xml
index f88a4f21a9..b2f931990f 100644
--- a/app/src/main/res/drawable/session_logo.xml
+++ b/app/src/main/res/drawable/session_logo.xml
@@ -1,9 +1,9 @@
-
-
-
-
-
+
+
diff --git a/app/src/main/res/drawable/session_shield.xml b/app/src/main/res/drawable/session_shield.xml
new file mode 100644
index 0000000000..a7c6d1a24a
--- /dev/null
+++ b/app/src/main/res/drawable/session_shield.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/layout-sw400dp/activity_display_name.xml b/app/src/main/res/layout-sw400dp/activity_display_name.xml
deleted file mode 100644
index d62faca064..0000000000
--- a/app/src/main/res/layout-sw400dp/activity_display_name.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout-sw400dp/activity_landing.xml b/app/src/main/res/layout-sw400dp/activity_landing.xml
deleted file mode 100644
index 5e5a36704a..0000000000
--- a/app/src/main/res/layout-sw400dp/activity_landing.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout-sw400dp/activity_pn_mode.xml b/app/src/main/res/layout-sw400dp/activity_pn_mode.xml
deleted file mode 100644
index b55b35f149..0000000000
--- a/app/src/main/res/layout-sw400dp/activity_pn_mode.xml
+++ /dev/null
@@ -1,119 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout-sw400dp/activity_register.xml b/app/src/main/res/layout-sw400dp/activity_register.xml
deleted file mode 100644
index b642bb292c..0000000000
--- a/app/src/main/res/layout-sw400dp/activity_register.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout-sw400dp/activity_seed.xml b/app/src/main/res/layout-sw400dp/activity_seed.xml
deleted file mode 100644
index 97b63ede5e..0000000000
--- a/app/src/main/res/layout-sw400dp/activity_seed.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout-sw400dp/fragment_recovery_phrase.xml b/app/src/main/res/layout-sw400dp/fragment_recovery_phrase.xml
deleted file mode 100644
index 7b220207e2..0000000000
--- a/app/src/main/res/layout-sw400dp/fragment_recovery_phrase.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout-sw400dp/view_seed_reminder.xml b/app/src/main/res/layout-sw400dp/view_seed_reminder.xml
deleted file mode 100644
index 5be50ebe6c..0000000000
--- a/app/src/main/res/layout-sw400dp/view_seed_reminder.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_display_name.xml b/app/src/main/res/layout/activity_display_name.xml
deleted file mode 100644
index 54351693b0..0000000000
--- a/app/src/main/res/layout/activity_display_name.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml
index 124a44b374..dc129821da 100644
--- a/app/src/main/res/layout/activity_home.xml
+++ b/app/src/main/res/layout/activity_home.xml
@@ -94,7 +94,7 @@
android:background="?android:dividerHorizontal"
android:elevation="1dp" />
-
-
-
-
-
-
-
-
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:visibility="gone"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_link_device.xml b/app/src/main/res/layout/activity_link_device.xml
index b267c08ac8..5c93e251c9 100644
--- a/app/src/main/res/layout/activity_link_device.xml
+++ b/app/src/main/res/layout/activity_link_device.xml
@@ -1,7 +1,6 @@
@@ -18,28 +17,4 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_pn_mode.xml b/app/src/main/res/layout/activity_pn_mode.xml
deleted file mode 100644
index 0cdbeb992a..0000000000
--- a/app/src/main/res/layout/activity_pn_mode.xml
+++ /dev/null
@@ -1,118 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_register.xml b/app/src/main/res/layout/activity_register.xml
deleted file mode 100644
index e2434e7c77..0000000000
--- a/app/src/main/res/layout/activity_register.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_seed.xml b/app/src/main/res/layout/activity_seed.xml
deleted file mode 100644
index 4587bc01df..0000000000
--- a/app/src/main/res/layout/activity_seed.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml
index d84f183b5c..a5bac6b069 100644
--- a/app/src/main/res/layout/activity_settings.xml
+++ b/app/src/main/res/layout/activity_settings.xml
@@ -86,7 +86,7 @@
android:textColor="?android:textColorPrimary"
android:fontFamily="@font/space_mono_regular"
android:textAlignment="center"
- android:contentDescription="@string/AccessibilityId_session_id"
+ android:contentDescription="@string/AccessibilityId_account_id"
tools:text="05987d601943c267879be41830888066c6a024cbdc9a548d06813924bf3372ea78" />
+ android:contentDescription="@string/AccessibilityId_recovery_password_menu_item">
+ android:layout_toEndOf="@+id/passwordContainer"
+ android:text="@string/sessionRecoveryPassword" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/view_fake_chat.xml b/app/src/main/res/layout/view_fake_chat.xml
deleted file mode 100644
index 654cbd86bf..0000000000
--- a/app/src/main/res/layout/view_fake_chat.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/view_seed_reminder.xml b/app/src/main/res/layout/view_seed_reminder.xml
deleted file mode 100644
index 850ceaef5a..0000000000
--- a/app/src/main/res/layout/view_seed_reminder.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/menu/menu_pn_mode.xml b/app/src/main/res/menu/menu_pn_mode.xml
deleted file mode 100644
index a3dcff339d..0000000000
--- a/app/src/main/res/menu/menu_pn_mode.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml
index b1dbe91ee6..4227c8b6ba 100644
--- a/app/src/main/res/values-ar-rSA/strings.xml
+++ b/app/src/main/res/values-ar-rSA/strings.xml
@@ -577,24 +577,21 @@
عنوان تعريف خاطئإلغاءعنوان تعريفك
- اِبدأ من هنا...
- أنشئ عنوان تعريف
- واصل بالحساب القديمما هي الجلسة (Session)؟هو تطبيق مراسلة مشفر, لامركزياِذن لا يقوم بجمع المعلومات الشخصية أو المعلومات الوصفية لمحادثاتي؟ كيف يعمل؟باِستخدام مُركَب من تكنولوجيات التشفير من الطرفين و توجيه مجهول للمعلومات.الأصدقاء لا يتركون أصدقائهم يستعملون تطبيق مراسلة مكشوف. مرحبا بك.
- رحب بعنوان تعريفك
- عنوان تعريفك هو عنوان وحيد خاص بك, يمكن للناس الاتصال بك عن طريقه. دون معرفة هويتك الحقيقية, هذا العنوان مصمم ليكون خاص و مجهول.
+
+
استرجع حسابكأدخل عبارة الأسترجاع التي اعطيت لك عندما سجلت الدخول لاِسترجاع حسابك.ادخل عبارة الاسترجاع
- أختر اِسم الاِظهار
- هذا سيكون اِسمك عندما تستخدم Session. قد يكون اِسمك الحقيقي, اِسم مستعار أو اي شيئ ترغب به.
- ادخل اسم الِاظهار
- اِختر اسم من فضلك
- اِختر اسم اقصر من فضلك
+ أختر اِسم الاِظهار
+ هذا سيكون اِسمك عندما تستخدم Session. قد يكون اِسمك الحقيقي, اِسم مستعار أو اي شيئ ترغب به.
+ ادخل اسم الِاظهار
+ اِختر اسم من فضلك
+ اِختر اسم اقصر من فضلكمحبذاِخترلا تملك اي متصلين لحد الان
@@ -603,11 +600,6 @@
"لا يمكن مغادرة المجموعة"هل أنت متأكد من حذفك المحادثة؟تم حذف المحادثة
- عبارة الاسترجاع
- هذه هي عبارة الاسترجاع
- عبارة الاسترجاع هي مفتاح عنوان تعريفك - يمكنك استخدامها لاسترجاع عنوان تعريفك اذا فقدت الوصول لجهازك. قم بحفظها في مكان امن و لا تعطها الى اي أحد.
- انقر مطولاً للكشف
- انت على وشك الإنتهاء! ٨٠٪أمّن حسابك بحفظ كلمات إسترجاع الحسابانقر بإستمرار على الكلمات المغطاة للكشف عن كلمات إسترداد حسابك، ثم قم بتخزينها بأمان للحفاظ على معرّف الجلسة الخاص بك.تأكد من الإحتفاظ بكلمات الإسترجاع الخاصة بك في مكان آمن
@@ -652,7 +644,6 @@
الأجهزةأُدع صديقالأسئلة الأكثر طرحاً
- عبارة الإستردادمسح البياناتمسح البيانات بما في ذلك الشبكةساعدنا في ترجمة سيشن
@@ -665,8 +656,6 @@
سوف يتم تنبيهك بالرسائل الجديدة بشكل موثوق و فوري بإستخدام خوادم غوغل.غَير الاسمألغي ربط الجهاز
- عبارة الاسترجاع الخاصة بك
- هذه هي عبارة الاِسترجاع, يمكن بواسطتها اِسترجاع عنوان التعريف أو الاِنتقال اِلى جهاز جديد.اِمسح جميع البياناتسيؤدي هذا إلى حذف رسائلك, محادثاتك و متصليك نهائيا.هل تريد مسح من هذا الجهاز فقط، أو حذف حسابك كليا ؟
@@ -710,7 +699,6 @@
اِختر ملف النسخ الاحتياطي وأدخل عبارة المرور التي تم إنشاؤه بها.جملة مرور مكونة من 30 عنصرهذا يستغرق بعض الوقت، هل تريد أن تتخطى؟
- اربط جهازجملة الاسترجاعاِفحص رمز QRاِذهب إلى التعديلات جملة الاِسترجاع في جهازك الاآخر لإظهار رمز QR الخاص بك.
@@ -721,7 +709,6 @@
الوضع البطيءسوف يتم إشعارك بالرسائل بشكل موثوق و فوري بإستخدام خوادم جوجل للإشعارات.سيقوم سيشن بالتحقق من وجود رسائل جديدة بشكل دوري في الخلفية.
- عبارة الإستردادإن سيشن مُقفَلانقر للفتحأدخل اسم
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index b1dbe91ee6..4227c8b6ba 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -577,24 +577,21 @@
عنوان تعريف خاطئإلغاءعنوان تعريفك
- اِبدأ من هنا...
- أنشئ عنوان تعريف
- واصل بالحساب القديمما هي الجلسة (Session)؟هو تطبيق مراسلة مشفر, لامركزياِذن لا يقوم بجمع المعلومات الشخصية أو المعلومات الوصفية لمحادثاتي؟ كيف يعمل؟باِستخدام مُركَب من تكنولوجيات التشفير من الطرفين و توجيه مجهول للمعلومات.الأصدقاء لا يتركون أصدقائهم يستعملون تطبيق مراسلة مكشوف. مرحبا بك.
- رحب بعنوان تعريفك
- عنوان تعريفك هو عنوان وحيد خاص بك, يمكن للناس الاتصال بك عن طريقه. دون معرفة هويتك الحقيقية, هذا العنوان مصمم ليكون خاص و مجهول.
+
+
استرجع حسابكأدخل عبارة الأسترجاع التي اعطيت لك عندما سجلت الدخول لاِسترجاع حسابك.ادخل عبارة الاسترجاع
- أختر اِسم الاِظهار
- هذا سيكون اِسمك عندما تستخدم Session. قد يكون اِسمك الحقيقي, اِسم مستعار أو اي شيئ ترغب به.
- ادخل اسم الِاظهار
- اِختر اسم من فضلك
- اِختر اسم اقصر من فضلك
+ أختر اِسم الاِظهار
+ هذا سيكون اِسمك عندما تستخدم Session. قد يكون اِسمك الحقيقي, اِسم مستعار أو اي شيئ ترغب به.
+ ادخل اسم الِاظهار
+ اِختر اسم من فضلك
+ اِختر اسم اقصر من فضلكمحبذاِخترلا تملك اي متصلين لحد الان
@@ -603,11 +600,6 @@
"لا يمكن مغادرة المجموعة"هل أنت متأكد من حذفك المحادثة؟تم حذف المحادثة
- عبارة الاسترجاع
- هذه هي عبارة الاسترجاع
- عبارة الاسترجاع هي مفتاح عنوان تعريفك - يمكنك استخدامها لاسترجاع عنوان تعريفك اذا فقدت الوصول لجهازك. قم بحفظها في مكان امن و لا تعطها الى اي أحد.
- انقر مطولاً للكشف
- انت على وشك الإنتهاء! ٨٠٪أمّن حسابك بحفظ كلمات إسترجاع الحسابانقر بإستمرار على الكلمات المغطاة للكشف عن كلمات إسترداد حسابك، ثم قم بتخزينها بأمان للحفاظ على معرّف الجلسة الخاص بك.تأكد من الإحتفاظ بكلمات الإسترجاع الخاصة بك في مكان آمن
@@ -652,7 +644,6 @@
الأجهزةأُدع صديقالأسئلة الأكثر طرحاً
- عبارة الإستردادمسح البياناتمسح البيانات بما في ذلك الشبكةساعدنا في ترجمة سيشن
@@ -665,8 +656,6 @@
سوف يتم تنبيهك بالرسائل الجديدة بشكل موثوق و فوري بإستخدام خوادم غوغل.غَير الاسمألغي ربط الجهاز
- عبارة الاسترجاع الخاصة بك
- هذه هي عبارة الاِسترجاع, يمكن بواسطتها اِسترجاع عنوان التعريف أو الاِنتقال اِلى جهاز جديد.اِمسح جميع البياناتسيؤدي هذا إلى حذف رسائلك, محادثاتك و متصليك نهائيا.هل تريد مسح من هذا الجهاز فقط، أو حذف حسابك كليا ؟
@@ -710,7 +699,6 @@
اِختر ملف النسخ الاحتياطي وأدخل عبارة المرور التي تم إنشاؤه بها.جملة مرور مكونة من 30 عنصرهذا يستغرق بعض الوقت، هل تريد أن تتخطى؟
- اربط جهازجملة الاسترجاعاِفحص رمز QRاِذهب إلى التعديلات جملة الاِسترجاع في جهازك الاآخر لإظهار رمز QR الخاص بك.
@@ -721,7 +709,6 @@
الوضع البطيءسوف يتم إشعارك بالرسائل بشكل موثوق و فوري بإستخدام خوادم جوجل للإشعارات.سيقوم سيشن بالتحقق من وجود رسائل جديدة بشكل دوري في الخلفية.
- عبارة الإستردادإن سيشن مُقفَلانقر للفتحأدخل اسم
diff --git a/app/src/main/res/values-az-rAZ/strings.xml b/app/src/main/res/values-az-rAZ/strings.xml
index 35f7167ac9..32b80feb25 100644
--- a/app/src/main/res/values-az-rAZ/strings.xml
+++ b/app/src/main/res/values-az-rAZ/strings.xml
@@ -531,24 +531,21 @@
Etibarsız Session KimliyiİmtinaSession Kimliyiniz
- Session-unuz burada başlayır...
- Session Kimliyini yarat
- Seansınıza davam edinSession nədir?Mərkəzi olmayan, şifrəli bir mesajlaşma tətbiqidirYəni, şəxsi məlumatlarımı və ya danışıq meta verilənlərimi yığmır? Necə işləyir?Qabaqcıl anonim yönləndirmə və bir ucdan digərinə qədər şifrələmə texnologiyalarının kombinasiyasını istifadə edir.Dostlar, dostlarının güvənliyi qorunmayan messencerlərdən istifadə etməsinə icazə verməz. Xoşdur, buyurun.
- Session kimliyinizə salam deyin
- Session kimliyiniz, əlaqələrin Session-da sizinlə əlaqə saxlamaq üçün istifadə edəcəyi unikal bir ünvandır. Gerçək kimliyinizlə heç bir bağlantısı olmadan, Session kimliyiniz, ümumilikdə anonimlik və gizlilik üzərinə dizayn edilmişdir.
+
+
Hesabınızı bərpa edinHesabınızı bərpa etmək üçün qeydiyyatdan keçərkən sizə verliən bərpa paroluunu daxil edin.Bərpa parolunu daxil edin
- Ekran adınızı seçin
- Bu, Session istifadə edərkən adınız olacaq. Gerçək adınız, ləqəbiniz və ya istədiyiniz başqa bir ad ola bilər.
- Ekran adını daxil edin
- Zəhmət olmasa bir ekran adı seçin
- Zəhmət olmasa qısa bir ekran adı seçin
+ Ekran adınızı seçin
+ Bu, Session istifadə edərkən adınız olacaq. Gerçək adınız, ləqəbiniz və ya istədiyiniz başqa bir ad ola bilər.
+ Ekran adını daxil edin
+ Zəhmət olmasa bir ekran adı seçin
+ Zəhmət olmasa qısa bir ekran adı seçinTövsiyə edilənZəhmət olmasa bir variant seçinHələ ki, heç bir əlaqəniz yoxdur
@@ -557,11 +554,6 @@
"Qrupu tərk etmək alınmadı"Bu danışığı silmək istədiyinizə əminsiniz?Danışıq silindi
- Bərpa parolunuz
- Bərpa parolunuzla tanış olun
- Bərpa parolunuz, Session kimliyinizin ana açarıdır - cihazınıza müraciəti itirsəniz, Session kimliyinizi geri yükləmək üçün bunu istifadə edə bilərsiniz. Bərpa parolunuzu etibarlı bir yerdə saxlayın və heç kəsə verməyin.
- Aşkarlamaq üçün basılı saxlayın
- Demək olar ki, bitdi! 80%Bərpa parolunuzu bir yerdə saxlayaraq hesabınızı qoruyunBərpa parolunuzu aşkarlamaq üçün düzəldilmiş sözlərə basılı saxlayın, daha sonra Session kimliyinizi qorumaq üçün güvənli bir yerdə saxlayın.Bərpa parolunuzu etibarlı bir yerdə saxladığınıza əmin olun
@@ -606,7 +598,6 @@
CihazlarDostu dəvət edinTSS
- Bərpa paroluVerilənləri təmizləŞəbəkə daxil olmaqla verilənləri təmizləSession-un tərcüməsinə kömək et
@@ -619,8 +610,6 @@
Google-un bildiriş serverlərini istifadə edərək yeni mesajlardan dərhal və etibarlı şəkildə xəbərdar olacaqsınız.Adı dəyişdirCihazın əlaqəsini kəs
- Bərpa parolunuz
- Bu, bərpa parolunuzdur. Bununla, Session kimliyinizi bərpa edə və ya yeni bir cihaza daşıya bilərsiniz.Bütün verilənləri təmizləBu, bütün mesajlarınızı, seanslarınızı və əlaqələrinizi birdəfəlik siləcək.Yalnız bu cihazı silmək istəyirsiniz, yoxsa hesabınızın tamamını silmək istəyirsiniz?
@@ -664,7 +653,6 @@
Bir nüsxə faylı seçin və ya yaradılan vaxt verilən parolu daxil edin.30 rəqəmli parolBu bir az vaxt apara bilər, ötürmək istəyirsiniz?
- Bir cihazla əlaqə yaratBərpa paroluQR kodu skan etQR kodunu göstərmək üçün digər cihazınızda Tənzimləmələr → \"Bərpa parolu\"na gedin.
@@ -675,7 +663,6 @@
Yavaş rejimGoogle-un bildiriş serverlərini istifadə edərək yeni mesajlardan dərhal və etibarlı şəkildə xəbərdar olacaqsınız.Session, arada arxaplanda yeni mesajları yoxlayacaq.
- Bərpa paroluSession kilidlidirKilidi açmaq üçün toxununBir ləqəb daxil edin
diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml
index 35f7167ac9..1989d2f336 100644
--- a/app/src/main/res/values-az/strings.xml
+++ b/app/src/main/res/values-az/strings.xml
@@ -531,24 +531,19 @@
Etibarsız Session KimliyiİmtinaSession Kimliyiniz
- Session-unuz burada başlayır...
- Session Kimliyini yarat
- Seansınıza davam edinSession nədir?Mərkəzi olmayan, şifrəli bir mesajlaşma tətbiqidirYəni, şəxsi məlumatlarımı və ya danışıq meta verilənlərimi yığmır? Necə işləyir?Qabaqcıl anonim yönləndirmə və bir ucdan digərinə qədər şifrələmə texnologiyalarının kombinasiyasını istifadə edir.Dostlar, dostlarının güvənliyi qorunmayan messencerlərdən istifadə etməsinə icazə verməz. Xoşdur, buyurun.
- Session kimliyinizə salam deyin
- Session kimliyiniz, əlaqələrin Session-da sizinlə əlaqə saxlamaq üçün istifadə edəcəyi unikal bir ünvandır. Gerçək kimliyinizlə heç bir bağlantısı olmadan, Session kimliyiniz, ümumilikdə anonimlik və gizlilik üzərinə dizayn edilmişdir.Hesabınızı bərpa edinHesabınızı bərpa etmək üçün qeydiyyatdan keçərkən sizə verliən bərpa paroluunu daxil edin.Bərpa parolunu daxil edin
- Ekran adınızı seçin
- Bu, Session istifadə edərkən adınız olacaq. Gerçək adınız, ləqəbiniz və ya istədiyiniz başqa bir ad ola bilər.
- Ekran adını daxil edin
- Zəhmət olmasa bir ekran adı seçin
- Zəhmət olmasa qısa bir ekran adı seçin
+ Ekran adınızı seçin
+ Bu, Session istifadə edərkən adınız olacaq. Gerçək adınız, ləqəbiniz və ya istədiyiniz başqa bir ad ola bilər.
+ Ekran adını daxil edin
+ Zəhmət olmasa bir ekran adı seçin
+ Zəhmət olmasa qısa bir ekran adı seçinTövsiyə edilənZəhmət olmasa bir variant seçinHələ ki, heç bir əlaqəniz yoxdur
@@ -557,11 +552,6 @@
"Qrupu tərk etmək alınmadı"Bu danışığı silmək istədiyinizə əminsiniz?Danışıq silindi
- Bərpa parolunuz
- Bərpa parolunuzla tanış olun
- Bərpa parolunuz, Session kimliyinizin ana açarıdır - cihazınıza müraciəti itirsəniz, Session kimliyinizi geri yükləmək üçün bunu istifadə edə bilərsiniz. Bərpa parolunuzu etibarlı bir yerdə saxlayın və heç kəsə verməyin.
- Aşkarlamaq üçün basılı saxlayın
- Demək olar ki, bitdi! 80%Bərpa parolunuzu bir yerdə saxlayaraq hesabınızı qoruyunBərpa parolunuzu aşkarlamaq üçün düzəldilmiş sözlərə basılı saxlayın, daha sonra Session kimliyinizi qorumaq üçün güvənli bir yerdə saxlayın.Bərpa parolunuzu etibarlı bir yerdə saxladığınıza əmin olun
@@ -606,7 +596,6 @@
CihazlarDostu dəvət edinTSS
- Bərpa paroluVerilənləri təmizləŞəbəkə daxil olmaqla verilənləri təmizləSession-un tərcüməsinə kömək et
@@ -619,8 +608,6 @@
Google-un bildiriş serverlərini istifadə edərək yeni mesajlardan dərhal və etibarlı şəkildə xəbərdar olacaqsınız.Adı dəyişdirCihazın əlaqəsini kəs
- Bərpa parolunuz
- Bu, bərpa parolunuzdur. Bununla, Session kimliyinizi bərpa edə və ya yeni bir cihaza daşıya bilərsiniz.Bütün verilənləri təmizləBu, bütün mesajlarınızı, seanslarınızı və əlaqələrinizi birdəfəlik siləcək.Yalnız bu cihazı silmək istəyirsiniz, yoxsa hesabınızın tamamını silmək istəyirsiniz?
@@ -664,7 +651,6 @@
Bir nüsxə faylı seçin və ya yaradılan vaxt verilən parolu daxil edin.30 rəqəmli parolBu bir az vaxt apara bilər, ötürmək istəyirsiniz?
- Bir cihazla əlaqə yaratBərpa paroluQR kodu skan etQR kodunu göstərmək üçün digər cihazınızda Tənzimləmələr → \"Bərpa parolu\"na gedin.
@@ -675,7 +661,6 @@
Yavaş rejimGoogle-un bildiriş serverlərini istifadə edərək yeni mesajlardan dərhal və etibarlı şəkildə xəbərdar olacaqsınız.Session, arada arxaplanda yeni mesajları yoxlayacaq.
- Bərpa paroluSession kilidlidirKilidi açmaq üçün toxununBir ləqəb daxil edin
diff --git a/app/src/main/res/values-bal-rBA/strings.xml b/app/src/main/res/values-bal-rBA/strings.xml
index 36f8ac55b7..a2f6d5f7bc 100644
--- a/app/src/main/res/values-bal-rBA/strings.xml
+++ b/app/src/main/res/values-bal-rBA/strings.xml
@@ -429,24 +429,21 @@ memproses pertukaran kunci korupsi.Session salahBatalSession ID anda
- Session anda dimulai di sini
- Buat Session ID
- Lanjutkan SessionApa itu Session?Session adalah aplikasi pesan terenkripsi yang terdesentralisasiBagaimana dengan pengumpulan informasi personal atau metadata percakapan? Bagaimana cara kerjanya?Menggunakan kombinasi routing yang anonim canggih dan teknologi enkripsi ujung-ke-ujung (end-to-end encryption)Rekan yang baik tak membiarkan rekannya menggunakan aplikasi bertukar pesan yang tak aman. Terima kasih kembali.
- Ucapkan halo pada Session ID anda
- Session ID adalah alamat unik yang bisa digunakan untuk mengontak anda. Tanpa koneksi dengan identitas asli, Session ID anda didesain bersifat anonim dan rahasia.
+
+
Kembalikan akunMasukkan kata pemulihan yang diberikan saat anda mencoba masuk ke akunmasukan kata pemulihan
- Pilih nama yang ditampilkan
- Ini akan menjadi nama anda ketika menggunakan Session. Bisa merupakan nama asli, alias, atau apapun yang anda suka
- Masukkan nama
- Pilih nama yang ditampilkan
- Nama yang dibuat terlalu panjang
+ Pilih nama yang ditampilkan
+ Ini akan menjadi nama anda ketika menggunakan Session. Bisa merupakan nama asli, alias, atau apapun yang anda suka
+ Masukkan nama
+ Pilih nama yang ditampilkan
+ Nama yang dibuat terlalu panjangDirekomendasikanPilih salah satu opsiAnda belum memiliki kontak
@@ -455,10 +452,6 @@ memproses pertukaran kunci korupsi.
"Tak bisa meninggalkan grup"Apakah anda yakin ingin menghapus percakapan ini?Percakapan terhapus
- Kata pemulihan anda
- Inilah kata pemulihan anda
- Kata pemulihan adalah kunci Session ID -- bisa digunakan untuk mengembalikan Session ID ketika anda kehilangan perangkat. Simpan kata pemulihan di tempat yang aman dan jangan berikan kepada siapapun
- Tekan untuk melihatAmankan akun anda dengan menyimpan kata pemulihanKetuk dan tekan kata yang disensor untuk mengetahui kata pemulihan anda, lalu simpan baik-baik untuk mengamnkan Session ID andaPastikan untuk menyimpan kata pemulihan di tempat yang aman
@@ -496,7 +489,6 @@ memproses pertukaran kunci korupsi.
NotifikasiPercakapanPerangkat
- Kata pemulihanHapus dataNotifikasiGaya notifikasi
@@ -505,8 +497,6 @@ memproses pertukaran kunci korupsi.
Strategi notofikasiUbah namaPutuskan koneksi dengan perangkat
- Kata pemulihan anda
- Ini adalah kata pemulihan anda. Gunakan untuk mengembalikan atau memindahkan Session ID anda ke perangkat lainHapus semua dataPesan, Session, dan kontak anda akan dihapus secara permanenKode QR
diff --git a/app/src/main/res/values-bal/strings.xml b/app/src/main/res/values-bal/strings.xml
index 36f8ac55b7..a2f6d5f7bc 100644
--- a/app/src/main/res/values-bal/strings.xml
+++ b/app/src/main/res/values-bal/strings.xml
@@ -429,24 +429,21 @@ memproses pertukaran kunci korupsi.
Session salahBatalSession ID anda
- Session anda dimulai di sini
- Buat Session ID
- Lanjutkan SessionApa itu Session?Session adalah aplikasi pesan terenkripsi yang terdesentralisasiBagaimana dengan pengumpulan informasi personal atau metadata percakapan? Bagaimana cara kerjanya?Menggunakan kombinasi routing yang anonim canggih dan teknologi enkripsi ujung-ke-ujung (end-to-end encryption)Rekan yang baik tak membiarkan rekannya menggunakan aplikasi bertukar pesan yang tak aman. Terima kasih kembali.
- Ucapkan halo pada Session ID anda
- Session ID adalah alamat unik yang bisa digunakan untuk mengontak anda. Tanpa koneksi dengan identitas asli, Session ID anda didesain bersifat anonim dan rahasia.
+
+
Kembalikan akunMasukkan kata pemulihan yang diberikan saat anda mencoba masuk ke akunmasukan kata pemulihan
- Pilih nama yang ditampilkan
- Ini akan menjadi nama anda ketika menggunakan Session. Bisa merupakan nama asli, alias, atau apapun yang anda suka
- Masukkan nama
- Pilih nama yang ditampilkan
- Nama yang dibuat terlalu panjang
+ Pilih nama yang ditampilkan
+ Ini akan menjadi nama anda ketika menggunakan Session. Bisa merupakan nama asli, alias, atau apapun yang anda suka
+ Masukkan nama
+ Pilih nama yang ditampilkan
+ Nama yang dibuat terlalu panjangDirekomendasikanPilih salah satu opsiAnda belum memiliki kontak
@@ -455,10 +452,6 @@ memproses pertukaran kunci korupsi.
"Tak bisa meninggalkan grup"Apakah anda yakin ingin menghapus percakapan ini?Percakapan terhapus
- Kata pemulihan anda
- Inilah kata pemulihan anda
- Kata pemulihan adalah kunci Session ID -- bisa digunakan untuk mengembalikan Session ID ketika anda kehilangan perangkat. Simpan kata pemulihan di tempat yang aman dan jangan berikan kepada siapapun
- Tekan untuk melihatAmankan akun anda dengan menyimpan kata pemulihanKetuk dan tekan kata yang disensor untuk mengetahui kata pemulihan anda, lalu simpan baik-baik untuk mengamnkan Session ID andaPastikan untuk menyimpan kata pemulihan di tempat yang aman
@@ -496,7 +489,6 @@ memproses pertukaran kunci korupsi.
NotifikasiPercakapanPerangkat
- Kata pemulihanHapus dataNotifikasiGaya notifikasi
@@ -505,8 +497,6 @@ memproses pertukaran kunci korupsi.
Strategi notofikasiUbah namaPutuskan koneksi dengan perangkat
- Kata pemulihan anda
- Ini adalah kata pemulihan anda. Gunakan untuk mengembalikan atau memindahkan Session ID anda ke perangkat lainHapus semua dataPesan, Session, dan kontak anda akan dihapus secara permanenKode QR
diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml
index fc23778210..04ae82886f 100644
--- a/app/src/main/res/values-bg-rBG/strings.xml
+++ b/app/src/main/res/values-bg-rBG/strings.xml
@@ -499,7 +499,6 @@
Копиране на обществен ключПродължи
- Продължете Вашата СесияВъзстановяване на профилВие
diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml
index fc23778210..04ae82886f 100644
--- a/app/src/main/res/values-bg/strings.xml
+++ b/app/src/main/res/values-bg/strings.xml
@@ -499,7 +499,6 @@
Копиране на обществен ключПродължи
- Продължете Вашата СесияВъзстановяване на профилВие
diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml
index 9e2928bc38..ea527536fc 100644
--- a/app/src/main/res/values-ca-rES/strings.xml
+++ b/app/src/main/res/values-ca-rES/strings.xml
@@ -523,24 +523,21 @@ d\'intercanvi de claus!
ID de Session invàlidCancel·laEl teu ID de Session
- El teu Session comença aquí...
- Crea un ID de Session
- Continua el teu SessionQuè és Session?És una app xifrada i descentralitzadaPer tant, no agafa les meves dades personals o les metadades de les meves converses? Com funciona?Fent servir una combinació de tecnologies d\'encaminament anònim avançat i un xifratge d\'extrem a extrem.Amics no deixis que els amics facin servir missatgeries compromeses. Sigueu benvinguts.
- Digues hola al teu ID de Session
- El teu ID de Session és l\'adreça única que els usuaris poden utilitzar per a contactar-te a Session. Sense cap connexió amb la teva identitat real, el teu ID de Session ID per disseny és totalment anònim i privat.
+
+
Restableix el teu compteIntrodueix la frase de recuperació que se\'t va proporcionar quan et vas registrar per a restaurar el compte.Introdueix la frase de recuperació
- Tria el nom que es mostrarà
- Aquest serà el teu nom quan facis servir Session. Pot ser el teu nom real, un àlies o qualsevol altra cosa que t\'agradi.
- Escriu el nom a mostrar
- Tria un nom a mostrar, si us plau
- Selecciona un nom de visualització més curt
+ Tria el nom que es mostrarà
+ Aquest serà el teu nom quan facis servir Session. Pot ser el teu nom real, un àlies o qualsevol altra cosa que t\'agradi.
+ Escriu el nom a mostrar
+ Tria un nom a mostrar, si us plau
+ Selecciona un nom de visualització més curtRecomanatSelecciona una opció, si us plauEncara no tens cap contacte
@@ -549,11 +546,6 @@ d\'intercanvi de claus!
"No s'ha pogut marxar del grup"Estàs segur que vols esborrar aquesta conversa?S\'ha suprimit la conversa
- La teva frase de recuperació
- Coneix la teva frase de recuperació
- La teva frase de recuperació és la clau principal del teu ID de Session — pots fer-la servir per a restaurar la teva ID de Session si perds l\'accés al dispositiu. Emmagatzema la frase de recuperació en un lloc segur i no la donis a ningú.
- Mantingues premut per a revelar
- Gairebé has acabat! 80%Protegeix el teu compte desant la frase de recuperacióMantingues premudes les paraules redactades per a mostrar la teva frase de recuperació. Desa-la de manera segura per a protegir la teva ID de Session.Assegura\'t d\'emmagatzemar la frase de recuperació en un lloc segur
@@ -593,7 +585,6 @@ d\'intercanvi de claus!
NotificacionsXatsDispositius
- Frase de recuperacióNeteja les dadesAjuda\'ns a traduir SessionNotificacions
@@ -603,8 +594,6 @@ d\'intercanvi de claus!
Estratègia de les notificacionsCanvia el nomDesenllaça el dispositiu
- La teva frase de recuperació
- Aquesta és la teva frase de recuperació. Pots restaurar-ne o migrar-ne el teu ID de Session cap a un nou dispositiu.Esborra totes les dadesAixò esborrarà tots els missatges, sessions i contactes permanentment.Codi QR
@@ -645,7 +634,6 @@ d\'intercanvi de claus!
Selecciona un fitxer de còpia de seguretat i entra la frase de pas amb el qual va ser creat.Frase de pas de 30 dígitsAixò triga un xic, t\'ho vols saltar?
- Enllaça un dispositiuO uneix-te a alguns d\'aquests…Notificacions de missatgeHi ha dues maneres per les quals Session et pot notificar els missatges nous.
@@ -653,7 +641,6 @@ d\'intercanvi de claus!
Mode lentEs notificaran els missatges de forma immediata i fiable fent servir els servidors de notificació de Google.Session ocasionalment comprovarà en pla secundari si hi ha nous missatges.
- Frase de recuperacióEl Session està blocatToca per a desblocarIntrodueix una sobrenom
diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml
index 9e2928bc38..ea527536fc 100644
--- a/app/src/main/res/values-ca/strings.xml
+++ b/app/src/main/res/values-ca/strings.xml
@@ -523,24 +523,21 @@ d\'intercanvi de claus!
ID de Session invàlidCancel·laEl teu ID de Session
- El teu Session comença aquí...
- Crea un ID de Session
- Continua el teu SessionQuè és Session?És una app xifrada i descentralitzadaPer tant, no agafa les meves dades personals o les metadades de les meves converses? Com funciona?Fent servir una combinació de tecnologies d\'encaminament anònim avançat i un xifratge d\'extrem a extrem.Amics no deixis que els amics facin servir missatgeries compromeses. Sigueu benvinguts.
- Digues hola al teu ID de Session
- El teu ID de Session és l\'adreça única que els usuaris poden utilitzar per a contactar-te a Session. Sense cap connexió amb la teva identitat real, el teu ID de Session ID per disseny és totalment anònim i privat.
+
+
Restableix el teu compteIntrodueix la frase de recuperació que se\'t va proporcionar quan et vas registrar per a restaurar el compte.Introdueix la frase de recuperació
- Tria el nom que es mostrarà
- Aquest serà el teu nom quan facis servir Session. Pot ser el teu nom real, un àlies o qualsevol altra cosa que t\'agradi.
- Escriu el nom a mostrar
- Tria un nom a mostrar, si us plau
- Selecciona un nom de visualització més curt
+ Tria el nom que es mostrarà
+ Aquest serà el teu nom quan facis servir Session. Pot ser el teu nom real, un àlies o qualsevol altra cosa que t\'agradi.
+ Escriu el nom a mostrar
+ Tria un nom a mostrar, si us plau
+ Selecciona un nom de visualització més curtRecomanatSelecciona una opció, si us plauEncara no tens cap contacte
@@ -549,11 +546,6 @@ d\'intercanvi de claus!
"No s'ha pogut marxar del grup"Estàs segur que vols esborrar aquesta conversa?S\'ha suprimit la conversa
- La teva frase de recuperació
- Coneix la teva frase de recuperació
- La teva frase de recuperació és la clau principal del teu ID de Session — pots fer-la servir per a restaurar la teva ID de Session si perds l\'accés al dispositiu. Emmagatzema la frase de recuperació en un lloc segur i no la donis a ningú.
- Mantingues premut per a revelar
- Gairebé has acabat! 80%Protegeix el teu compte desant la frase de recuperacióMantingues premudes les paraules redactades per a mostrar la teva frase de recuperació. Desa-la de manera segura per a protegir la teva ID de Session.Assegura\'t d\'emmagatzemar la frase de recuperació en un lloc segur
@@ -593,7 +585,6 @@ d\'intercanvi de claus!
NotificacionsXatsDispositius
- Frase de recuperacióNeteja les dadesAjuda\'ns a traduir SessionNotificacions
@@ -603,8 +594,6 @@ d\'intercanvi de claus!
Estratègia de les notificacionsCanvia el nomDesenllaça el dispositiu
- La teva frase de recuperació
- Aquesta és la teva frase de recuperació. Pots restaurar-ne o migrar-ne el teu ID de Session cap a un nou dispositiu.Esborra totes les dadesAixò esborrarà tots els missatges, sessions i contactes permanentment.Codi QR
@@ -645,7 +634,6 @@ d\'intercanvi de claus!
Selecciona un fitxer de còpia de seguretat i entra la frase de pas amb el qual va ser creat.Frase de pas de 30 dígitsAixò triga un xic, t\'ho vols saltar?
- Enllaça un dispositiuO uneix-te a alguns d\'aquests…Notificacions de missatgeHi ha dues maneres per les quals Session et pot notificar els missatges nous.
@@ -653,7 +641,6 @@ d\'intercanvi de claus!
Mode lentEs notificaran els missatges de forma immediata i fiable fent servir els servidors de notificació de Google.Session ocasionalment comprovarà en pla secundari si hi ha nous missatges.
- Frase de recuperacióEl Session està blocatToca per a desblocarIntrodueix una sobrenom
diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml
index d022499e04..54ae4c602e 100644
--- a/app/src/main/res/values-cs-rCZ/strings.xml
+++ b/app/src/main/res/values-cs-rCZ/strings.xml
@@ -553,24 +553,21 @@
Neplatné Session IDZrušitID vaší relace
- Vaše Session začíná zde...
- Vytvořit ID relace
- Pokračujte ve své relaciCo je Session?Je to decentralizovaná a šifrovaná aplikace pro zasílání zprávTakže neshromažďuje mé osobní údaje ani metadata mých konverzací? Jak to funguje?Použitím kombinace pokročilých anonymních směrovacích a end-to-end šifrovacích technologií.Přátelé nenechávají přátelé používat kompromitované aplikace. Není zač.
- Přivítejte své nové Session ID
- Vaše Session ID je jedinečná adresa, kterou mohou lidé použít k vašemu kontaktování na Session. Bez jakékoli návaznosti na vaší skutečnou identitu je vaše Session ID stavbou zcela anonymní a soukromí chránící.
+
+
Obnovit účetZadejte frázi pro obnovení, která vám byla vygenerována během registrace účtu.Zadejte frázi pro obnovení
- Vaše jméno
- Toto bude váš pseudonym během používání Session. Může to být vaše skutečné jméno, alias, nebo cokoliv jiného, co se vám líbí.
- Zadejte pseudonym
- Vyberte prosím pseudonym
- Vyberte prosím kratší pseudonym
+ Vaše jméno
+ Toto bude váš pseudonym během používání Session. Může to být vaše skutečné jméno, alias, nebo cokoliv jiného, co se vám líbí.
+ Zadejte pseudonym
+ Vyberte prosím pseudonym
+ Vyberte prosím kratší pseudonymDoporučenoProsím vyberte možnostZatím nemáte žádné kontakty
@@ -579,11 +576,6 @@
"Skupinu se nepodařilo opustit"Opravdu chcete smazat tuto konverzaci?Konverzace byla smazána
- Vaše fráze pro obnovení
- Zadejte frázi pro obnovení
- Ahoj
- Podrž pro zobrazení
- Jste skoro u konce! 80 %Zabezpečte svůj účet uložením Vašich klíčových slovPro zobrazení fráze pro obnovení klepněte a podržte redigovaná slova a poté ji bezpečně uložte, abyste si ochránili své Session ID.Uchovejte svou frázi pro obnovení na bezpečném místě
@@ -628,7 +620,6 @@
ZařízeníPozvat příteleČasto kladené dotazy
- Fráze pro obnoveníVymazat dataSmazat data včetně sítěPomozte nám přeložit Session
@@ -641,8 +632,6 @@
Budete spolehlivě a okamžitě informováni o nových zprávách pomocí oznamovacích serverů Google.Změnit jménoOdpojit zařízení
- Vaše fráze pro obnovení
- Toto je vaše fráze pro obnovení. S její pomocí můžete obnovit nebo přesunout své Session ID na nové zařízení.Vymazat všechna dataTímto trvale odstraníte vaše zprávy, relace a kontakty.Chcete vymazat data pouze na tomto zařízení, nebo odstranit celý účet?
@@ -686,7 +675,6 @@
Vyberte soubor se zálohou a vložte frázi pro obnovení, s níž byl vytvořen.Přístupové heslo o délce 30 číselTrvá to trochu déle, chcete přeskočit?
- Propojit zařízeníFráze pro obnoveníNaskenovat QR kódPřejděte do Nastavení → Fráze pro obnovení na vašem dalším zařízení a zobrazte svůj QR kód.
@@ -697,7 +685,6 @@
Pomalý režimBudete spolehlivě a okamžitě informováni o nových zprávách pomocí oznamovacích serverů Google.Session občas zkontroluje nové zprávy na pozadí.
- Fráze pro obnoveníSession je zamčenýKlepněte pro odemčeníZadej přezdívku
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index d022499e04..54ae4c602e 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -553,24 +553,21 @@
Neplatné Session IDZrušitID vaší relace
- Vaše Session začíná zde...
- Vytvořit ID relace
- Pokračujte ve své relaciCo je Session?Je to decentralizovaná a šifrovaná aplikace pro zasílání zprávTakže neshromažďuje mé osobní údaje ani metadata mých konverzací? Jak to funguje?Použitím kombinace pokročilých anonymních směrovacích a end-to-end šifrovacích technologií.Přátelé nenechávají přátelé používat kompromitované aplikace. Není zač.
- Přivítejte své nové Session ID
- Vaše Session ID je jedinečná adresa, kterou mohou lidé použít k vašemu kontaktování na Session. Bez jakékoli návaznosti na vaší skutečnou identitu je vaše Session ID stavbou zcela anonymní a soukromí chránící.
+
+
Obnovit účetZadejte frázi pro obnovení, která vám byla vygenerována během registrace účtu.Zadejte frázi pro obnovení
- Vaše jméno
- Toto bude váš pseudonym během používání Session. Může to být vaše skutečné jméno, alias, nebo cokoliv jiného, co se vám líbí.
- Zadejte pseudonym
- Vyberte prosím pseudonym
- Vyberte prosím kratší pseudonym
+ Vaše jméno
+ Toto bude váš pseudonym během používání Session. Může to být vaše skutečné jméno, alias, nebo cokoliv jiného, co se vám líbí.
+ Zadejte pseudonym
+ Vyberte prosím pseudonym
+ Vyberte prosím kratší pseudonymDoporučenoProsím vyberte možnostZatím nemáte žádné kontakty
@@ -579,11 +576,6 @@
"Skupinu se nepodařilo opustit"Opravdu chcete smazat tuto konverzaci?Konverzace byla smazána
- Vaše fráze pro obnovení
- Zadejte frázi pro obnovení
- Ahoj
- Podrž pro zobrazení
- Jste skoro u konce! 80 %Zabezpečte svůj účet uložením Vašich klíčových slovPro zobrazení fráze pro obnovení klepněte a podržte redigovaná slova a poté ji bezpečně uložte, abyste si ochránili své Session ID.Uchovejte svou frázi pro obnovení na bezpečném místě
@@ -628,7 +620,6 @@
ZařízeníPozvat příteleČasto kladené dotazy
- Fráze pro obnoveníVymazat dataSmazat data včetně sítěPomozte nám přeložit Session
@@ -641,8 +632,6 @@
Budete spolehlivě a okamžitě informováni o nových zprávách pomocí oznamovacích serverů Google.Změnit jménoOdpojit zařízení
- Vaše fráze pro obnovení
- Toto je vaše fráze pro obnovení. S její pomocí můžete obnovit nebo přesunout své Session ID na nové zařízení.Vymazat všechna dataTímto trvale odstraníte vaše zprávy, relace a kontakty.Chcete vymazat data pouze na tomto zařízení, nebo odstranit celý účet?
@@ -686,7 +675,6 @@
Vyberte soubor se zálohou a vložte frázi pro obnovení, s níž byl vytvořen.Přístupové heslo o délce 30 číselTrvá to trochu déle, chcete přeskočit?
- Propojit zařízeníFráze pro obnoveníNaskenovat QR kódPřejděte do Nastavení → Fráze pro obnovení na vašem dalším zařízení a zobrazte svůj QR kód.
@@ -697,7 +685,6 @@
Pomalý režimBudete spolehlivě a okamžitě informováni o nových zprávách pomocí oznamovacích serverů Google.Session občas zkontroluje nové zprávy na pozadí.
- Fráze pro obnoveníSession je zamčenýKlepněte pro odemčeníZadej přezdívku
diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml
index 604e214231..8d41e10f9d 100644
--- a/app/src/main/res/values-da-rDK/strings.xml
+++ b/app/src/main/res/values-da-rDK/strings.xml
@@ -529,24 +529,21 @@ udveksel besked!
Ugyldigt Session IDAnnullerDit Sessions-ID
- Dit eventyr med Session begynder her...
- Opret Session ID
- Fortsæt din SessionHvad er Session?Det er en decentraliseret, krypteret besked appSå den indsamler ikke mine personlige oplysninger eller min samtale metadata? Hvordan virker det?Ved hjælp af en kombination af avanceret anonym routing og end-to-end krypteringsteknologier.Venner lader ikke venner bruge usikre besked tjenester. Du er velkommen.
- Sig hej til dit Session ID
- Dit Session ID er den unikke adresse, som folk kan bruge til at kontakte dig i Session. Dit Session ID har ingen tilknytning til din rigtige identitet og er helt anonymt og privat.
+
+
Gendan din kontoAngiv den genoprettelsessætning, du fik, da du tilmeldte dig, for at kunne gendanne din konto.Angiv din genoprettelsessætning
- Vælg dit visningsnavn
- Dette vil være dit navn, når du bruger Session. Det kan være dit rigtige navn, et alias eller noget helt andet.
- Tast et visningsnavn
- Vælg venligst et display navn
- Vælg venligst et kortere display navn
+ Vælg dit visningsnavn
+ Dette vil være dit navn, når du bruger Session. Det kan være dit rigtige navn, et alias eller noget helt andet.
+ Tast et visningsnavn
+ Vælg venligst et display navn
+ Vælg venligst et kortere display navnAnbefaletDu har ingen kontakter endnuStart en Session
@@ -554,11 +551,6 @@ udveksel besked!
"Kunne ikke forlade gruppen"Er du sikker på, at du vil slette denne samtale?Samtale slettet
- Din gendannelsessætning
- Mød din gendannelsessætning
- Din gendannelsessætning er hovednøglen til dit Session ID - du kan bruge den til at gendanne dit Session ID, hvis du mister adgang til din enhed. Gem din gendannelsessætning på et sikkert sted, og giv det ikke til nogen.
- Hold nede for at se
- Du er næsten færdig! 80%Sikre din konto ved at gemme din gendannelsessætningTryk og hold de redigerede ord for at afsløre din gendannelsessætning, og gem det derefter et sikkert sted for at sikre dit Session ID.Sørg for at gemme din gendannelsessætning et sikkert sted
@@ -588,7 +580,6 @@ udveksel besked!
EnhederInviter en venOfte stillede spørgsmål
- GendannelsesssætningRyd dataRyd Data Inklusiv NetværkHjælp os med at oversætte Session
@@ -638,7 +629,6 @@ udveksel besked!
Gendan sikkerhedskopiVælg en filDette tager et stykke tid, vil du gerne springe over?
- Forbind en enhedGendannelsessætningSkan QR-kodeNaviger til Indstillinger → Gendannelsessætning på din anden enhed, for at vise din QR-kode.
diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml
index 604e214231..8d41e10f9d 100644
--- a/app/src/main/res/values-da/strings.xml
+++ b/app/src/main/res/values-da/strings.xml
@@ -529,24 +529,21 @@ udveksel besked!
Ugyldigt Session IDAnnullerDit Sessions-ID
- Dit eventyr med Session begynder her...
- Opret Session ID
- Fortsæt din SessionHvad er Session?Det er en decentraliseret, krypteret besked appSå den indsamler ikke mine personlige oplysninger eller min samtale metadata? Hvordan virker det?Ved hjælp af en kombination af avanceret anonym routing og end-to-end krypteringsteknologier.Venner lader ikke venner bruge usikre besked tjenester. Du er velkommen.
- Sig hej til dit Session ID
- Dit Session ID er den unikke adresse, som folk kan bruge til at kontakte dig i Session. Dit Session ID har ingen tilknytning til din rigtige identitet og er helt anonymt og privat.
+
+
Gendan din kontoAngiv den genoprettelsessætning, du fik, da du tilmeldte dig, for at kunne gendanne din konto.Angiv din genoprettelsessætning
- Vælg dit visningsnavn
- Dette vil være dit navn, når du bruger Session. Det kan være dit rigtige navn, et alias eller noget helt andet.
- Tast et visningsnavn
- Vælg venligst et display navn
- Vælg venligst et kortere display navn
+ Vælg dit visningsnavn
+ Dette vil være dit navn, når du bruger Session. Det kan være dit rigtige navn, et alias eller noget helt andet.
+ Tast et visningsnavn
+ Vælg venligst et display navn
+ Vælg venligst et kortere display navnAnbefaletDu har ingen kontakter endnuStart en Session
@@ -554,11 +551,6 @@ udveksel besked!
"Kunne ikke forlade gruppen"Er du sikker på, at du vil slette denne samtale?Samtale slettet
- Din gendannelsessætning
- Mød din gendannelsessætning
- Din gendannelsessætning er hovednøglen til dit Session ID - du kan bruge den til at gendanne dit Session ID, hvis du mister adgang til din enhed. Gem din gendannelsessætning på et sikkert sted, og giv det ikke til nogen.
- Hold nede for at se
- Du er næsten færdig! 80%Sikre din konto ved at gemme din gendannelsessætningTryk og hold de redigerede ord for at afsløre din gendannelsessætning, og gem det derefter et sikkert sted for at sikre dit Session ID.Sørg for at gemme din gendannelsessætning et sikkert sted
@@ -588,7 +580,6 @@ udveksel besked!
EnhederInviter en venOfte stillede spørgsmål
- GendannelsesssætningRyd dataRyd Data Inklusiv NetværkHjælp os med at oversætte Session
@@ -638,7 +629,6 @@ udveksel besked!
Gendan sikkerhedskopiVælg en filDette tager et stykke tid, vil du gerne springe over?
- Forbind en enhedGendannelsessætningSkan QR-kodeNaviger til Indstillinger → Gendannelsessætning på din anden enhed, for at vise din QR-kode.
diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml
index e08da18a31..763f2181cf 100644
--- a/app/src/main/res/values-de-rDE/strings.xml
+++ b/app/src/main/res/values-de-rDE/strings.xml
@@ -529,24 +529,21 @@
Ungültige Session IDAbbrechenIhre Session ID
- Ihre Session beginnt hier...
- Session ID erstellen
- Ihre Session fortsetzenWas ist Session?Es ist eine dezentrale, verschlüsselte Messaging-App.Es werden also weder meine persönlichen Daten noch die Metadaten meiner Konversation erfasst? Wie funktioniert das?Mit einer Kombination fortschrittlicher anonyme Routing- und End-to-End-Verschlüsselungstechnologien.Freunde lassen Freunde keine kompromittierten Messenger verwenden. Herzlich Willkommen.
- Das ist Ihre Session ID.
- Ihre Session ID ist die eindeutige Adresse, unter der Personen Sie über Session kontaktieren können. Ihre Session ID ist nicht mit Ihrer realen Identität verbunden, völlig anonym und von Natur aus privat.
+
+
Ihr Konto wiederherstellenGeben Sie den Wiederherstellungssatz ein, den Sie bei der Anmeldung zur Wiederherstellung Ihres Kontos erhalten haben.Ihr Wiederherstellungssatz
- Wählen Sie Ihren Anzeigenamen
- Dies ist Ihr Name, wenn Sie Session verwenden. Es kann Ihr richtiger Name, ein Alias oder etwas andere sein.
- Geben Sie einen Anzeigenamen ein
- Bitte wählen Sie einen Anzeigenamen
- Bitte wählen Sie einen kürzeren Anzeigenamen
+ Wählen Sie Ihren Anzeigenamen
+ Dies ist Ihr Name, wenn Sie Session verwenden. Es kann Ihr richtiger Name, ein Alias oder etwas andere sein.
+ Geben Sie einen Anzeigenamen ein
+ Bitte wählen Sie einen Anzeigenamen
+ Bitte wählen Sie einen kürzeren AnzeigenamenEmpfohlenBitte wählen Sie eine Option aus.Sie haben noch keine Kontakte.
@@ -555,11 +552,6 @@
"Gruppe konnte nicht verlassen werden."Möchten Sie diese Unterhaltung wirklich löschen?Die Unterhaltung wurde gelöscht.
- Ihr Wiederherstellungssatz
- Das ist Ihr Wiederherstellungssatz.
- Ihr Wiederherstellungssatz ist der Hauptschlüssel für Ihre Session ID. Mit diesem Satz können Sie Ihre Session ID wiederherstellen, wenn Sie den Zugriff auf Ihr Gerät verlieren. Bewahren Sie Ihren Wiederherstellungssatz an einem sicheren Ort auf und geben Sie ihn an niemandem weiter.
- Zur Anzeige gedrückt halten
- Du bist fast fertgi! 80%Sichern Sie Ihr Konto, indem Sie Ihren Wiederherstellungssatz speichernTippen und halten Sie die verborgenen Wörter, um Ihren Wiederherstellungssatz anzuzeigen, und speichern Sie ihn dann sicher, um Ihre Session ID zu sichern.Bewahren Sie Ihren Wiederherstellungssatz an einem sicheren Ort auf.
@@ -604,7 +596,6 @@
GeräteEinen Freund einladenHäufig gestellte Fragen
- WiederherstellungssatzDaten löschenDaten löschen, einschließlich NetzwerkHilf uns, Session zu übersetzen
@@ -617,8 +608,6 @@
Über neue Nachrichten wirst du zuverlässig und sofort von Googles Benachrichtigungsservern informiert.Namen ändernGerät trennen
- Ihr Wiederherstellungssatz
- Das ist Ihr Wiederherstellungssatz. Damit können Sie Ihre Session ID wiederherstellen oder auf ein neues Gerät migrieren.Alle Daten löschenDadurch werden Ihre Nachrichten, Sessions und Kontakte dauerhaft gelöscht.Möchtest du nur dieses Gerät leeren oder dein gesamtes Konto löschen?
@@ -662,7 +651,6 @@
Wähle eine Sicherungs-Datei aus und gib die Passphrase von ihrer Erstellung ein.30-stellige PassphraseDies dauert eine Weile, möchtest du überspringen?
- Gerät verbindenWiederherstellungssatzQR-Code scannenNavigiere zu Einstellungen → Wiederherstellungssatz auf deinem anderen Gerät, um deinen QR-Code anzuzeigen.
@@ -673,7 +661,6 @@
Langsamer ModusDu wirst über neue Nachrichten zuverlässig und sofort über Google\'s Server benachrichtigt.Session sucht gelegentlich nach neuen Nachrichten im Hintergrund.
- Sicherungs-PassphraseSession ist gesperrtTippe zum entsperrenSpitznamen eingeben
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index e08da18a31..763f2181cf 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -529,24 +529,21 @@
Ungültige Session IDAbbrechenIhre Session ID
- Ihre Session beginnt hier...
- Session ID erstellen
- Ihre Session fortsetzenWas ist Session?Es ist eine dezentrale, verschlüsselte Messaging-App.Es werden also weder meine persönlichen Daten noch die Metadaten meiner Konversation erfasst? Wie funktioniert das?Mit einer Kombination fortschrittlicher anonyme Routing- und End-to-End-Verschlüsselungstechnologien.Freunde lassen Freunde keine kompromittierten Messenger verwenden. Herzlich Willkommen.
- Das ist Ihre Session ID.
- Ihre Session ID ist die eindeutige Adresse, unter der Personen Sie über Session kontaktieren können. Ihre Session ID ist nicht mit Ihrer realen Identität verbunden, völlig anonym und von Natur aus privat.
+
+
Ihr Konto wiederherstellenGeben Sie den Wiederherstellungssatz ein, den Sie bei der Anmeldung zur Wiederherstellung Ihres Kontos erhalten haben.Ihr Wiederherstellungssatz
- Wählen Sie Ihren Anzeigenamen
- Dies ist Ihr Name, wenn Sie Session verwenden. Es kann Ihr richtiger Name, ein Alias oder etwas andere sein.
- Geben Sie einen Anzeigenamen ein
- Bitte wählen Sie einen Anzeigenamen
- Bitte wählen Sie einen kürzeren Anzeigenamen
+ Wählen Sie Ihren Anzeigenamen
+ Dies ist Ihr Name, wenn Sie Session verwenden. Es kann Ihr richtiger Name, ein Alias oder etwas andere sein.
+ Geben Sie einen Anzeigenamen ein
+ Bitte wählen Sie einen Anzeigenamen
+ Bitte wählen Sie einen kürzeren AnzeigenamenEmpfohlenBitte wählen Sie eine Option aus.Sie haben noch keine Kontakte.
@@ -555,11 +552,6 @@
"Gruppe konnte nicht verlassen werden."Möchten Sie diese Unterhaltung wirklich löschen?Die Unterhaltung wurde gelöscht.
- Ihr Wiederherstellungssatz
- Das ist Ihr Wiederherstellungssatz.
- Ihr Wiederherstellungssatz ist der Hauptschlüssel für Ihre Session ID. Mit diesem Satz können Sie Ihre Session ID wiederherstellen, wenn Sie den Zugriff auf Ihr Gerät verlieren. Bewahren Sie Ihren Wiederherstellungssatz an einem sicheren Ort auf und geben Sie ihn an niemandem weiter.
- Zur Anzeige gedrückt halten
- Du bist fast fertgi! 80%Sichern Sie Ihr Konto, indem Sie Ihren Wiederherstellungssatz speichernTippen und halten Sie die verborgenen Wörter, um Ihren Wiederherstellungssatz anzuzeigen, und speichern Sie ihn dann sicher, um Ihre Session ID zu sichern.Bewahren Sie Ihren Wiederherstellungssatz an einem sicheren Ort auf.
@@ -604,7 +596,6 @@
GeräteEinen Freund einladenHäufig gestellte Fragen
- WiederherstellungssatzDaten löschenDaten löschen, einschließlich NetzwerkHilf uns, Session zu übersetzen
@@ -617,8 +608,6 @@
Über neue Nachrichten wirst du zuverlässig und sofort von Googles Benachrichtigungsservern informiert.Namen ändernGerät trennen
- Ihr Wiederherstellungssatz
- Das ist Ihr Wiederherstellungssatz. Damit können Sie Ihre Session ID wiederherstellen oder auf ein neues Gerät migrieren.Alle Daten löschenDadurch werden Ihre Nachrichten, Sessions und Kontakte dauerhaft gelöscht.Möchtest du nur dieses Gerät leeren oder dein gesamtes Konto löschen?
@@ -662,7 +651,6 @@
Wähle eine Sicherungs-Datei aus und gib die Passphrase von ihrer Erstellung ein.30-stellige PassphraseDies dauert eine Weile, möchtest du überspringen?
- Gerät verbindenWiederherstellungssatzQR-Code scannenNavigiere zu Einstellungen → Wiederherstellungssatz auf deinem anderen Gerät, um deinen QR-Code anzuzeigen.
@@ -673,7 +661,6 @@
Langsamer ModusDu wirst über neue Nachrichten zuverlässig und sofort über Google\'s Server benachrichtigt.Session sucht gelegentlich nach neuen Nachrichten im Hintergrund.
- Sicherungs-PassphraseSession ist gesperrtTippe zum entsperrenSpitznamen eingeben
diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml
index 5e7b292c25..1d979329b6 100644
--- a/app/src/main/res/values-el-rGR/strings.xml
+++ b/app/src/main/res/values-el-rGR/strings.xml
@@ -531,24 +531,21 @@
Μη έγκυρη Session ταυτότηταΑκύρωσηΗ ταυτότητά σας
- Η συνομιλία σας ξεκινά εδώ...
- Δημιουργία Session ταυτότητας
- Συνέχεια συνομιλίαςΤι είναι το Session;Είναι μια αποκεντρωμένη, κρυπτογραφημένη εφαρμογή μηνυμάτωνΔηλαδή δεν συλλέγει τα προσωπικά μου στοιχεία ή τα μεταδεδομένα των συνομιλιών μου; Πώς λειτουργεί;Χρησιμοποιώντας ένα συνδυασμό προηγμένων ανώνυμων τεχνολογιών δρομολόγησης και τεχνολογίας κρυπτογράφησης από άκρο σε άκρο.Οι φίλοι δεν αφήνουν τους φίλους να χρησιμοποιούν ευάλωτες εφαρμογές μηνυμάτων. Είστε ευπρόσδεκτοι.
- Πείτε γεια στη Session ταυτότητά σας
- Η Session ταυτότητά σας είναι η μοναδική διεύθυνση που μπορούν να χρησιμοποιήσουν τα άτομα για να επικοινωνήσουν μαζί σας στο Session. Χωρίς σύνδεση με την πραγματική σας ταυτότητα, η Session ταυτότητά σας είναι εντελώς ανώνυμη και ιδιωτική.
+
+
Επαναφορά του λογαριασμού σαςΕισάγετε τη φράση ανάκτησης που σας δόθηκε κατά την εγγραφή σας για να επαναφέρετε το λογαριασμό σας.Εισάγετε τη φράση ανάκτησης σας
- Επιλέξτε το εμφανιζόμενο όνομα σας
- Αυτό θα είναι το όνομά σας όταν χρησιμοποιείτε το Session. Μπορεί να είναι το πραγματικό σας όνομα, ένα ψευδώνυμο ή οτιδήποτε άλλο θέλετε.
- Εισάγετε όνομα εμφάνισης
- Παρακαλώ επιλέξτε ένα εμφανιζόμενο όνομα
- Παρακαλώ επιλέξτε ένα μικρότερο όνομα εμφάνισης
+ Επιλέξτε το εμφανιζόμενο όνομα σας
+ Αυτό θα είναι το όνομά σας όταν χρησιμοποιείτε το Session. Μπορεί να είναι το πραγματικό σας όνομα, ένα ψευδώνυμο ή οτιδήποτε άλλο θέλετε.
+ Εισάγετε όνομα εμφάνισης
+ Παρακαλώ επιλέξτε ένα εμφανιζόμενο όνομα
+ Παρακαλώ επιλέξτε ένα μικρότερο όνομα εμφάνισηςΠροτεινόμενοΠαρακαλούμε κάντε μια επιλογήΔεν υπάρχουν επαφές
@@ -557,11 +554,6 @@
"Αδυναμία αποχώρησης από την ομάδα"Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν την συνομιλία;Η συνομιλία διαγράφηκε
- Φράση ανάκτησης
- Γνωρίστε τη φράση ανάκτησής σας
- Η φράση ανάκτησης είναι το κύριο κλειδί στο Session ID σας - μπορείτε να τη χρησιμοποιήσετε για να επαναφέρετε το Session ID σας εάν χάσετε πρόσβαση στη συσκευή σας. Αποθηκεύστε τη φράση ανάκτησης σε ασφαλές μέρος, και μην τη δώσετε σε κανέναν.
- Πατήστε για εμφάνιση
- Σχεδόν τελειώσατε! 80%Ασφαλίστε το λογαριασμό σας αποθηκεύοντας τη φράση ανάκτησής σαςΠατήστε παρατεταμένα τις λέξεις που τροποποιήθηκαν για να αποκαλύψετε τη φράση ανάκτησης και μετά αποθηκεύστε την με ασφάλεια για να εξασφαλίσετε το αναγνωριστικό σας.Φροντίστε να αποθηκεύσετε τη φράση ανάκτησής σας σε ασφαλές μέρος
@@ -606,7 +598,6 @@
ΣυσκευέςΠροσκαλέστε ένα φίλοΣυχνές ερωτήσεις
- Φράση ΑνάκτησηςΕκκαθάριση ΔεδομένωνΕκκαθάριση Δεδομένων Με Το ΔίκτυοΒοηθήστε μας να μεταφράσουμε τo Session
@@ -619,8 +610,6 @@
Θα ειδοποιηθείτε για νέα μηνύματα αξιόπιστα και άμεσα χρησιμοποιώντας τους διακομιστές ειδοποιήσεων της Google.Αλλαγή ονόματοςΑποσύνδεση Συσκευής
- Η φράση ανάκτησής σας
- Αυτή είναι η φράση ανάκτησης σας. Με αυτή, μπορείτε να επαναφέρετε ή να μεταφέρετε τη Session ταυτότητά σας σε μια νέα συσκευή.Εκκαθάριση όλων των δεδομένωνΑυτό θα διαγράψει μόνιμα τα μηνύματα, τις συνομιλίες και τις επαφές σας.Θέλετε να γίνει εκκαθάριση μόνο αυτής της συσκευής, ή να διαγράψετε ολόκληρο το λογαριασμό σας;
@@ -664,7 +653,6 @@
Επιλέξτε ένα αντίγραφο ασφαλείας και εισάγετε τη φράση πρόσβασης με την οποία δημιουργήθηκε.φράση 30-ψηφίωνΑυτό παίρνει λίγο χρόνο, θα θέλατε να παραλείψετε;
- Σύνδεση ΣυσκευήςΦράση ΑνάκτησηςΣάρωση QR κωδικούΜεταβείτε στις Ρυθμίσεις → Φράση Ανάκτησης στην άλλη συσκευή σας για να εμφανίσετε τον QR κωδικό σας.
@@ -675,7 +663,6 @@
Αργή ΕπιλογήΘα ειδοποιηθείτε για νέα μηνύματα αξιόπιστα και άμεσα χρησιμοποιώντας τους διακομιστές ειδοποιήσεων της Google.Το Session θα ελέγχει κατά καιρούς για νέα μηνύματα στο παρασκήνιο.
- Φράση ΑνάκτησηςΤο Session είναι κλειδωμένοΠατήστε για ξεκλείδωμαΕισαγωγή ψευδώνυμου
diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml
index 5e7b292c25..1d979329b6 100644
--- a/app/src/main/res/values-el/strings.xml
+++ b/app/src/main/res/values-el/strings.xml
@@ -531,24 +531,21 @@
Μη έγκυρη Session ταυτότηταΑκύρωσηΗ ταυτότητά σας
- Η συνομιλία σας ξεκινά εδώ...
- Δημιουργία Session ταυτότητας
- Συνέχεια συνομιλίαςΤι είναι το Session;Είναι μια αποκεντρωμένη, κρυπτογραφημένη εφαρμογή μηνυμάτωνΔηλαδή δεν συλλέγει τα προσωπικά μου στοιχεία ή τα μεταδεδομένα των συνομιλιών μου; Πώς λειτουργεί;Χρησιμοποιώντας ένα συνδυασμό προηγμένων ανώνυμων τεχνολογιών δρομολόγησης και τεχνολογίας κρυπτογράφησης από άκρο σε άκρο.Οι φίλοι δεν αφήνουν τους φίλους να χρησιμοποιούν ευάλωτες εφαρμογές μηνυμάτων. Είστε ευπρόσδεκτοι.
- Πείτε γεια στη Session ταυτότητά σας
- Η Session ταυτότητά σας είναι η μοναδική διεύθυνση που μπορούν να χρησιμοποιήσουν τα άτομα για να επικοινωνήσουν μαζί σας στο Session. Χωρίς σύνδεση με την πραγματική σας ταυτότητα, η Session ταυτότητά σας είναι εντελώς ανώνυμη και ιδιωτική.
+
+
Επαναφορά του λογαριασμού σαςΕισάγετε τη φράση ανάκτησης που σας δόθηκε κατά την εγγραφή σας για να επαναφέρετε το λογαριασμό σας.Εισάγετε τη φράση ανάκτησης σας
- Επιλέξτε το εμφανιζόμενο όνομα σας
- Αυτό θα είναι το όνομά σας όταν χρησιμοποιείτε το Session. Μπορεί να είναι το πραγματικό σας όνομα, ένα ψευδώνυμο ή οτιδήποτε άλλο θέλετε.
- Εισάγετε όνομα εμφάνισης
- Παρακαλώ επιλέξτε ένα εμφανιζόμενο όνομα
- Παρακαλώ επιλέξτε ένα μικρότερο όνομα εμφάνισης
+ Επιλέξτε το εμφανιζόμενο όνομα σας
+ Αυτό θα είναι το όνομά σας όταν χρησιμοποιείτε το Session. Μπορεί να είναι το πραγματικό σας όνομα, ένα ψευδώνυμο ή οτιδήποτε άλλο θέλετε.
+ Εισάγετε όνομα εμφάνισης
+ Παρακαλώ επιλέξτε ένα εμφανιζόμενο όνομα
+ Παρακαλώ επιλέξτε ένα μικρότερο όνομα εμφάνισηςΠροτεινόμενοΠαρακαλούμε κάντε μια επιλογήΔεν υπάρχουν επαφές
@@ -557,11 +554,6 @@
"Αδυναμία αποχώρησης από την ομάδα"Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν την συνομιλία;Η συνομιλία διαγράφηκε
- Φράση ανάκτησης
- Γνωρίστε τη φράση ανάκτησής σας
- Η φράση ανάκτησης είναι το κύριο κλειδί στο Session ID σας - μπορείτε να τη χρησιμοποιήσετε για να επαναφέρετε το Session ID σας εάν χάσετε πρόσβαση στη συσκευή σας. Αποθηκεύστε τη φράση ανάκτησης σε ασφαλές μέρος, και μην τη δώσετε σε κανέναν.
- Πατήστε για εμφάνιση
- Σχεδόν τελειώσατε! 80%Ασφαλίστε το λογαριασμό σας αποθηκεύοντας τη φράση ανάκτησής σαςΠατήστε παρατεταμένα τις λέξεις που τροποποιήθηκαν για να αποκαλύψετε τη φράση ανάκτησης και μετά αποθηκεύστε την με ασφάλεια για να εξασφαλίσετε το αναγνωριστικό σας.Φροντίστε να αποθηκεύσετε τη φράση ανάκτησής σας σε ασφαλές μέρος
@@ -606,7 +598,6 @@
ΣυσκευέςΠροσκαλέστε ένα φίλοΣυχνές ερωτήσεις
- Φράση ΑνάκτησηςΕκκαθάριση ΔεδομένωνΕκκαθάριση Δεδομένων Με Το ΔίκτυοΒοηθήστε μας να μεταφράσουμε τo Session
@@ -619,8 +610,6 @@
Θα ειδοποιηθείτε για νέα μηνύματα αξιόπιστα και άμεσα χρησιμοποιώντας τους διακομιστές ειδοποιήσεων της Google.Αλλαγή ονόματοςΑποσύνδεση Συσκευής
- Η φράση ανάκτησής σας
- Αυτή είναι η φράση ανάκτησης σας. Με αυτή, μπορείτε να επαναφέρετε ή να μεταφέρετε τη Session ταυτότητά σας σε μια νέα συσκευή.Εκκαθάριση όλων των δεδομένωνΑυτό θα διαγράψει μόνιμα τα μηνύματα, τις συνομιλίες και τις επαφές σας.Θέλετε να γίνει εκκαθάριση μόνο αυτής της συσκευής, ή να διαγράψετε ολόκληρο το λογαριασμό σας;
@@ -664,7 +653,6 @@
Επιλέξτε ένα αντίγραφο ασφαλείας και εισάγετε τη φράση πρόσβασης με την οποία δημιουργήθηκε.φράση 30-ψηφίωνΑυτό παίρνει λίγο χρόνο, θα θέλατε να παραλείψετε;
- Σύνδεση ΣυσκευήςΦράση ΑνάκτησηςΣάρωση QR κωδικούΜεταβείτε στις Ρυθμίσεις → Φράση Ανάκτησης στην άλλη συσκευή σας για να εμφανίσετε τον QR κωδικό σας.
@@ -675,7 +663,6 @@
Αργή ΕπιλογήΘα ειδοποιηθείτε για νέα μηνύματα αξιόπιστα και άμεσα χρησιμοποιώντας τους διακομιστές ειδοποιήσεων της Google.Το Session θα ελέγχει κατά καιρούς για νέα μηνύματα στο παρασκήνιο.
- Φράση ΑνάκτησηςΤο Session είναι κλειδωμένοΠατήστε για ξεκλείδωμαΕισαγωγή ψευδώνυμου
diff --git a/app/src/main/res/values-eo-rUY/strings.xml b/app/src/main/res/values-eo-rUY/strings.xml
index eedb13a448..86d20d7e85 100644
--- a/app/src/main/res/values-eo-rUY/strings.xml
+++ b/app/src/main/res/values-eo-rUY/strings.xml
@@ -530,24 +530,21 @@
Malvalida Session IDNuligiVia Session ID
- Via Sesio komenci ĉi tie...
- Krei Session ID-on
- Daŭrigi Vian SesionKio estas Session?Ĝi estas malcentraliza kaj ĉifrita mesaĝiloDo ĝi ne kolektas miajn personajn informojn aŭ miajn konversaciajn metadatumojn? Kiel ĝi funkcias?Uzante kombinon de progresinta anonima enkursigo kaj tutvoje ĉifraj teknologioj.Amikoj ne permesas amikojn uzi kompromititajn mesaĝilojn. Nedankinde.
- Diru saluton al via Session ID
- Via Session ID estas la unika adreso kiun homoj povas uzi por kontakti en Session. Sen ligo al via vera identeco, via Session ID estas tute anonima kaj privata per dezajno.
+
+
Restaŭri vian kontonEntajpu la riparan frazon, kiu estis donita al vi kiam vi aliĝis, por ripari vian konton.Entajpu vian riparan frazon
- Elektu vian vidigan nomon
- Ĉi tio estos via nomo kiam vi uzas Sesion. Ĝi povas esti via vera nomo, alinomo, aŭ io ajn alia vi volas.
- Entajpu vidigan nomon
- Bonvolu elekti vidigan nomon
- Bonvolu elekti plej mallongan vidigan nomon
+ Elektu vian vidigan nomon
+ Ĉi tio estos via nomo kiam vi uzas Sesion. Ĝi povas esti via vera nomo, alinomo, aŭ io ajn alia vi volas.
+ Entajpu vidigan nomon
+ Bonvolu elekti vidigan nomon
+ Bonvolu elekti plej mallongan vidigan nomonRekomendateBonvolu Elekti OpcionVi ankoraŭ ne havas kontaktojn
@@ -556,11 +553,6 @@
"Ne povis foriri el la grupo"Ĉu vi certas, ke vi volas forviŝi ĉi tiun konversacion?Konversacio forviŝite
- Via Ripara Frazo
- Ekkonu vian riparan frazon
- Via ripara frazo estas la ĉefŝlosilo de via Session ID — vi povas uzi ĝin por restaŭri vian Session ID-on se vi malgajros aliron al via aparato. Konservu vian riparan frazon en sekura loko, kaj donu ĝin al neniu.
- Tuŝadu por malkaŝi
- Vi preskaŭ estas fininta! 80%Sekurigi vian konton per konservi vian riparan frazonTuŝadu la kaŝitajn vortojn por malkaŝi vian riparan frazon, tiam konservi ĝin sekure por sekurigi vian Session ID-on.Certigu konservi vian riparan frazon en sekura loko
@@ -603,7 +595,6 @@
AparatojInviti AmikonOftaj Demandoj
- Ripara FrazoViŝi DatumojnHelpu nin Traduki SessionSciigoj
@@ -614,8 +605,6 @@
Uzi Rapidan ReĝimonŜanĝi nomonMalligi aparaton
- Via Ripara Frazo
- Ĉi tio estas via ripara frazo. Kun ĝi, vi povas restaŭri aŭ migri vian Session ID-on al nova aparato.Viŝi Tutajn DatumojnĈi tio daŭre forviŝi viajn mesaĝojn, sesiojn, kaj kontaktojn.Forviŝi Sole
@@ -656,7 +645,6 @@
Restaŭri savkopionElekti dosieron30-cifera pasfrazo
- Ligi AparatonRipara FrazoSkani QR-KodonAŭ aliĝu unu de ĉi tiuj…
@@ -664,7 +652,6 @@
Rapida ReĝimoMalrapida ManieroSession foje serĉos novajn mesaĝojn en la fono.
- Ripara FrazoSession estas ŜlositaTuŝetu por MalŝlosiEntajpu alnomon
diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml
index eedb13a448..86d20d7e85 100644
--- a/app/src/main/res/values-eo/strings.xml
+++ b/app/src/main/res/values-eo/strings.xml
@@ -530,24 +530,21 @@
Malvalida Session IDNuligiVia Session ID
- Via Sesio komenci ĉi tie...
- Krei Session ID-on
- Daŭrigi Vian SesionKio estas Session?Ĝi estas malcentraliza kaj ĉifrita mesaĝiloDo ĝi ne kolektas miajn personajn informojn aŭ miajn konversaciajn metadatumojn? Kiel ĝi funkcias?Uzante kombinon de progresinta anonima enkursigo kaj tutvoje ĉifraj teknologioj.Amikoj ne permesas amikojn uzi kompromititajn mesaĝilojn. Nedankinde.
- Diru saluton al via Session ID
- Via Session ID estas la unika adreso kiun homoj povas uzi por kontakti en Session. Sen ligo al via vera identeco, via Session ID estas tute anonima kaj privata per dezajno.
+
+
Restaŭri vian kontonEntajpu la riparan frazon, kiu estis donita al vi kiam vi aliĝis, por ripari vian konton.Entajpu vian riparan frazon
- Elektu vian vidigan nomon
- Ĉi tio estos via nomo kiam vi uzas Sesion. Ĝi povas esti via vera nomo, alinomo, aŭ io ajn alia vi volas.
- Entajpu vidigan nomon
- Bonvolu elekti vidigan nomon
- Bonvolu elekti plej mallongan vidigan nomon
+ Elektu vian vidigan nomon
+ Ĉi tio estos via nomo kiam vi uzas Sesion. Ĝi povas esti via vera nomo, alinomo, aŭ io ajn alia vi volas.
+ Entajpu vidigan nomon
+ Bonvolu elekti vidigan nomon
+ Bonvolu elekti plej mallongan vidigan nomonRekomendateBonvolu Elekti OpcionVi ankoraŭ ne havas kontaktojn
@@ -556,11 +553,6 @@
"Ne povis foriri el la grupo"Ĉu vi certas, ke vi volas forviŝi ĉi tiun konversacion?Konversacio forviŝite
- Via Ripara Frazo
- Ekkonu vian riparan frazon
- Via ripara frazo estas la ĉefŝlosilo de via Session ID — vi povas uzi ĝin por restaŭri vian Session ID-on se vi malgajros aliron al via aparato. Konservu vian riparan frazon en sekura loko, kaj donu ĝin al neniu.
- Tuŝadu por malkaŝi
- Vi preskaŭ estas fininta! 80%Sekurigi vian konton per konservi vian riparan frazonTuŝadu la kaŝitajn vortojn por malkaŝi vian riparan frazon, tiam konservi ĝin sekure por sekurigi vian Session ID-on.Certigu konservi vian riparan frazon en sekura loko
@@ -603,7 +595,6 @@
AparatojInviti AmikonOftaj Demandoj
- Ripara FrazoViŝi DatumojnHelpu nin Traduki SessionSciigoj
@@ -614,8 +605,6 @@
Uzi Rapidan ReĝimonŜanĝi nomonMalligi aparaton
- Via Ripara Frazo
- Ĉi tio estas via ripara frazo. Kun ĝi, vi povas restaŭri aŭ migri vian Session ID-on al nova aparato.Viŝi Tutajn DatumojnĈi tio daŭre forviŝi viajn mesaĝojn, sesiojn, kaj kontaktojn.Forviŝi Sole
@@ -656,7 +645,6 @@
Restaŭri savkopionElekti dosieron30-cifera pasfrazo
- Ligi AparatonRipara FrazoSkani QR-KodonAŭ aliĝu unu de ĉi tiuj…
@@ -664,7 +652,6 @@
Rapida ReĝimoMalrapida ManieroSession foje serĉos novajn mesaĝojn en la fono.
- Ripara FrazoSession estas ŜlositaTuŝetu por MalŝlosiEntajpu alnomon
diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml
index f3df44aee4..dcfa20f280 100644
--- a/app/src/main/res/values-es-rES/strings.xml
+++ b/app/src/main/res/values-es-rES/strings.xml
@@ -530,24 +530,21 @@ de intercambio de claves!
ID de Session no válidaCancelarTu ID de Session
- Tu Session comienza aquí...
- Crear ID de Session
- Continúa tu Session¿Qué es Session?Es una aplicación de mensajería descentralizada y cifrada¿Entonces no recopila mi información personal ni los metadatos de mi conversación? ¿Cómo funciona?Utiliza una combinación de enrutamiento anónimo avanzado y tecnologías de cifrado de extremo a extremo.Los amigos no dejan que sus amigos usen messengers riesgosos. De nada.
- Saluda a tu ID de Session
- Tu ID de Session es la dirección única que las personas pueden usar para contactarte en Session. Por diseño, tu ID de Session es totalmente anónima y privada, sin vínculo con tu identidad real.
+
+
Restaura tu cuentaIngresa la frase de recuperación que se te dio cuando te registraste para restaurar tu cuenta.Ingresa tu frase de recuperación
- Elige tu nombre
- Este será tu nombre al usar Session. Puede ser tu nombre real, un alias, o lo que prefieras.
- Ingresa un nombre para mostrar
- Por favor, elige un nombre para mostrar
- Por favor, elige un nombre para mostrar más corto
+ Elige tu nombre
+ Este será tu nombre al usar Session. Puede ser tu nombre real, un alias, o lo que prefieras.
+ Ingresa un nombre para mostrar
+ Por favor, elige un nombre para mostrar
+ Por favor, elige un nombre para mostrar más cortoRecomendadoPor favor, elige una opciónAún no tienes contactos
@@ -556,11 +553,6 @@ de intercambio de claves!
"No pudiste salir del grupo"¿Seguro que quieres eliminar esta conversación?Conversación eliminada
- Tu frase de recuperación
- Guarda tu frase de recuperación
- Tu frase de recuperación es la llave maestra de tu ID de Session, puedes usarla para recuperar tu ID de Session en caso de pérdida de acceso a tu dispositivo. Guarda tu frase de recuperación en un lugar seguro y no se la digas a nadie.
- Mantén pulsado para revelar
- ¡Ya casi has terminado! 80%Protege tu cuenta guardando tu frase de recuperaciónToca y mantén presionadas las palabras redactadas para revelar tu frase de recuperación, después guárdala de manera segura para proteger tu ID de Session.Asegúrate de guardar tu frase de recuperación en un lugar seguro
@@ -605,7 +597,6 @@ de intercambio de claves!
DispositivosInvitar a un amigoPreguntas frecuentes
- Frase de recuperaciónBorrar datosLimpiar Datos Incluyendo La RedAyúdanos a traducir Session
@@ -618,8 +609,6 @@ de intercambio de claves!
Se te notificará de nuevos mensajes de forma fiable e inmediata usando los servidores de notificaciones de Google.Cambiar nombreDesvincular dispositivo
- Tu frase de recuperación
- Esta es tu frase de recuperación. Con ella, puedes restaurar o migrar tu ID de Session a un nuevo dispositivo.Borrar todos los datosEsto eliminará permanentemente tu ID de Session, incluyendo todos los mensajes, sesiones y contactos.¿Quieres borrar sólo este dispositivo o eliminar toda tu cuenta?
@@ -663,7 +652,6 @@ de intercambio de claves!
Seleccione un archivo de copia de seguridad e introduzca la clave de acceso con la que fue creada.Clave de acceso de 30 dígitosEsto está tomando un tiempo, ¿te gustaría saltarlo?
- Vincular un DispositivoFrase de RecuperaciónEscanear Código QRNavega a Ajustes → Frase de Recuperación en tu otro dispositivo para mostrar tu código QR.
@@ -674,7 +662,6 @@ de intercambio de claves!
Modo LentoSe le notificará de los nuevos mensajes de forma fiable e inmediata usando los servidores de notificaciones de Google.Session comprobará ocasionalmente si hay nuevos mensajes en segundo plano.
- Frase de recuperaciónSession está BloqueadoToca para DesbloquearEscriba un apodo
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index f3df44aee4..dcfa20f280 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -530,24 +530,21 @@ de intercambio de claves!
ID de Session no válidaCancelarTu ID de Session
- Tu Session comienza aquí...
- Crear ID de Session
- Continúa tu Session¿Qué es Session?Es una aplicación de mensajería descentralizada y cifrada¿Entonces no recopila mi información personal ni los metadatos de mi conversación? ¿Cómo funciona?Utiliza una combinación de enrutamiento anónimo avanzado y tecnologías de cifrado de extremo a extremo.Los amigos no dejan que sus amigos usen messengers riesgosos. De nada.
- Saluda a tu ID de Session
- Tu ID de Session es la dirección única que las personas pueden usar para contactarte en Session. Por diseño, tu ID de Session es totalmente anónima y privada, sin vínculo con tu identidad real.
+
+
Restaura tu cuentaIngresa la frase de recuperación que se te dio cuando te registraste para restaurar tu cuenta.Ingresa tu frase de recuperación
- Elige tu nombre
- Este será tu nombre al usar Session. Puede ser tu nombre real, un alias, o lo que prefieras.
- Ingresa un nombre para mostrar
- Por favor, elige un nombre para mostrar
- Por favor, elige un nombre para mostrar más corto
+ Elige tu nombre
+ Este será tu nombre al usar Session. Puede ser tu nombre real, un alias, o lo que prefieras.
+ Ingresa un nombre para mostrar
+ Por favor, elige un nombre para mostrar
+ Por favor, elige un nombre para mostrar más cortoRecomendadoPor favor, elige una opciónAún no tienes contactos
@@ -556,11 +553,6 @@ de intercambio de claves!
"No pudiste salir del grupo"¿Seguro que quieres eliminar esta conversación?Conversación eliminada
- Tu frase de recuperación
- Guarda tu frase de recuperación
- Tu frase de recuperación es la llave maestra de tu ID de Session, puedes usarla para recuperar tu ID de Session en caso de pérdida de acceso a tu dispositivo. Guarda tu frase de recuperación en un lugar seguro y no se la digas a nadie.
- Mantén pulsado para revelar
- ¡Ya casi has terminado! 80%Protege tu cuenta guardando tu frase de recuperaciónToca y mantén presionadas las palabras redactadas para revelar tu frase de recuperación, después guárdala de manera segura para proteger tu ID de Session.Asegúrate de guardar tu frase de recuperación en un lugar seguro
@@ -605,7 +597,6 @@ de intercambio de claves!
DispositivosInvitar a un amigoPreguntas frecuentes
- Frase de recuperaciónBorrar datosLimpiar Datos Incluyendo La RedAyúdanos a traducir Session
@@ -618,8 +609,6 @@ de intercambio de claves!
Se te notificará de nuevos mensajes de forma fiable e inmediata usando los servidores de notificaciones de Google.Cambiar nombreDesvincular dispositivo
- Tu frase de recuperación
- Esta es tu frase de recuperación. Con ella, puedes restaurar o migrar tu ID de Session a un nuevo dispositivo.Borrar todos los datosEsto eliminará permanentemente tu ID de Session, incluyendo todos los mensajes, sesiones y contactos.¿Quieres borrar sólo este dispositivo o eliminar toda tu cuenta?
@@ -663,7 +652,6 @@ de intercambio de claves!
Seleccione un archivo de copia de seguridad e introduzca la clave de acceso con la que fue creada.Clave de acceso de 30 dígitosEsto está tomando un tiempo, ¿te gustaría saltarlo?
- Vincular un DispositivoFrase de RecuperaciónEscanear Código QRNavega a Ajustes → Frase de Recuperación en tu otro dispositivo para mostrar tu código QR.
@@ -674,7 +662,6 @@ de intercambio de claves!
Modo LentoSe le notificará de los nuevos mensajes de forma fiable e inmediata usando los servidores de notificaciones de Google.Session comprobará ocasionalmente si hay nuevos mensajes en segundo plano.
- Frase de recuperaciónSession está BloqueadoToca para DesbloquearEscriba un apodo
diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml
index a4467b5f6e..361a5a44fa 100644
--- a/app/src/main/res/values-fa-rIR/strings.xml
+++ b/app/src/main/res/values-fa-rIR/strings.xml
@@ -553,24 +553,21 @@
شناسهی Session نامعتبر است.لغوشناسهی Session شما
- Session شما از اینجا شروع میشود...
- ساخت شناسهی Session
- Session خود را ادامه دهیدSession چیست؟Session یک برنامه پیامرسان غیرمتمرکز و رمزگذاری شده است.پس اطلاعات شخصی من یا دادههای گفتوگوهایم جمعآوری نمیشود؟ چگونه کار میکند؟Session با استفاده از ترکیبی از فناوریهای پیشرفته مسیریابی ناشناس و رمزگذاری سرتاسری این کار را انجام میدهد.یک دوست هیچوقت به دوستان خود اجازه استفاده از پیامرسانهای در معرض خطر را نمیدهد.
- به شناسهی Session خود سلام کنید
- شناسهی Session شما آدرس منحصر به فردی است که افراد میتوانند از طریق آن با شما در Session تماس بگیرند. شناسهی Session شما، بدون اتصال با هویت واقعی شما، کاملاً ناشناس و خصوصی است.
+
+
حساب کاربری خود را بازیابی کنیدعبارت بازیابی را که هنگام نامنویسی برای بازیابی حساب به شما داده شده، وارد کنید.عبارت بازیابی خود را وارد کنید
- نام خود را برای نمایش انتخاب کنید
- این نام شما هنگام استفاده از Session خواهد بود. این نام میتواند نام واقعی شما، نام مستعار یا هر چیز دیگری که دوست دارید، باشد.
- یک نام وارد کنید
- لطفا یک نام انتخاب کنید
- لطفا نام کوتاهتری انتخاب کنید
+ نام خود را برای نمایش انتخاب کنید
+ این نام شما هنگام استفاده از Session خواهد بود. این نام میتواند نام واقعی شما، نام مستعار یا هر چیز دیگری که دوست دارید، باشد.
+ یک نام وارد کنید
+ لطفا یک نام انتخاب کنید
+ لطفا نام کوتاهتری انتخاب کنیدگزینه پیشنهادیلطفا یک گزینه را انتخاب کنیدفهرست مخاطبان شما خالی است.
@@ -579,11 +576,6 @@
"ترک گروه انجام نشد"آیا مطمئن هستید که میخواهید این مکالمه را حذف کنید؟مکالمه حذف شد
- عبارت بازیابی شما
- این عبارت بازیابی شماست
- عبارت بازیابی شما کلید اصلی شناسهی Session شما است - در صورت عدم دسترسی به دستگاه خود می توانید از آن برای بازگرداندن شناسهی Session خود استفاده کنید. عبارت بازیابی خود را در مکانی امن ذخیره کنید و آن را به کسی ندهید.
- نگه دارید تا نشان داده شود
- شما تقریبا تمام کردید! ۸۰٪با ذخیره کردن عبارت بازیابی، از حساب خود محافظت کنیدبرای دیدن عبارت بازیابی، بر روی کلمات پنهان شده ضربه زده و نگه دارید، سپس با خیال راحت آن را ذخیره کنید تا از شناسهی Session خود محافظت نمایید.حتماً عبارت بازیابی خود را در مکانی امن ذخیره کنید
@@ -629,7 +621,6 @@
دستگاههادعوت از یک دوستسوالات متداول
- عبارت بازیابیپاک کردن اطلاعاتپاک کردن دادهها همراه با شبکهبه ما کمک کنید که سشن را ترجمه کنیم
@@ -651,8 +642,6 @@
با استفاده از سرورهای اعلان گوگل به طور قابل اعتماد و بلافاصله از پیام جدید مطلع خواهید شد.تغییر نامقطع اتصال دستگاه
- عبارت بازیابی شما
- می توانید از عبارت بازیابی یا برای بازیابی حساب خود و یا برای وصل با یک دستگاه استفاده کنید.پاک کردن همه داتااین گزینه به طور دائم پیامها، جلسات و مخاطبین شما را حذف میکند.آیا فقط میخواهید این دستگاه را پاک کنید یا میخواهید کل اکانت را پاک کنید؟
@@ -701,7 +690,6 @@
یک فایل پشتیبان انتخاب و عبارت عبوری که با آن ساخته شده است را وارد کنید.عبارت عبور ۳۰رقمیاین فرآیند کمی طولانی است، دوست دارید ردش کنید؟
- اتصال به یک دستگاهعبارت بازیابیاسکن کد QRبرای دیدن کد QR خود، در دستگاه دیگرتان به «تنظیمات ← عبارت بازیابی» مراجعه کنید.
@@ -712,7 +700,6 @@
حالت آهستهبا استفاده از سرورهای گوگل، شما به صورت سریع و مطمئن از پیامهای جدید مطلع میشوید.Session هرازگاهی در پس زمینه وجود پیامهای جدید را بررسی میکند.
- متن بازیابینشست قفل شدهاست ﺑﺮﺍﯼ ﮔﺸﻮﺩﻥ ﺿﺮﺑﻪ ﺑﺰﻧﻴﺪیک نام مستعار وارد کنید
diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml
index d9d26e6625..023d8c6a16 100644
--- a/app/src/main/res/values-fa/strings.xml
+++ b/app/src/main/res/values-fa/strings.xml
@@ -530,24 +530,21 @@
شناسهی Session نامعتبر است.لغوشناسهی Session شما
- Session شما از اینجا شروع میشود...
- ساخت شناسهی Session
- Session خود را ادامه دهیدSession چیست؟Session یک برنامه پیامرسان غیرمتمرکز و رمزگذاری شده است.پس اطلاعات شخصی من یا دادههای گفتوگوهایم جمعآوری نمیشود؟ چگونه کار میکند؟Session با استفاده از ترکیبی از فناوریهای پیشرفته مسیریابی ناشناس و رمزگذاری سرتاسری این کار را انجام میدهد.یک دوست هیچوقت به دوستان خود اجازه استفاده از پیامرسانهای در معرض خطر را نمیدهد.
- به شناسهی Session خود سلام کنید
- شناسهی Session شما آدرس منحصر به فردی است که افراد میتوانند از طریق آن با شما در Session تماس بگیرند. شناسهی Session شما، بدون اتصال با هویت واقعی شما، کاملاً ناشناس و خصوصی است.
+
+
حساب کاربری خود را بازیابی کنیدعبارت بازیابی را که هنگام نامنویسی برای بازیابی حساب به شما داده شده، وارد کنید.عبارت بازیابی خود را وارد کنید
- نام خود را برای نمایش انتخاب کنید
- این نام شما هنگام استفاده از Session خواهد بود. این نام میتواند نام واقعی شما، نام مستعار یا هر چیز دیگری که دوست دارید، باشد.
- نام نمایشی را وارد کنید
- لطفا نام نمایشی را انتخاب کنید
- لطفا نام نمایشی کوتاهتری انتخاب کنید
+ نام خود را برای نمایش انتخاب کنید
+ این نام شما هنگام استفاده از Session خواهد بود. این نام میتواند نام واقعی شما، نام مستعار یا هر چیز دیگری که دوست دارید، باشد.
+ نام نمایشی را وارد کنید
+ لطفا نام نمایشی را انتخاب کنید
+ لطفا نام نمایشی کوتاهتری انتخاب کنیدگزینه پیشنهادیلطفا یک گزینه را انتخاب کنیدفهرست مخاطبان شما خالی است.
@@ -556,11 +553,6 @@
"ترک گروه انجام نشد"آیا مطمئن هستید که میخواهید این مکالمه را حذف کنید؟مکالمه حذف شد
- عبارت بازیابی شما
- این عبارت بازیابی شماست
- عبارت بازیابی شما کلید اصلی شناسهی Session شما است - در صورت عدم دسترسی به دستگاه خود می توانید از آن برای بازگرداندن شناسهی Session خود استفاده کنید. عبارت بازیابی خود را در مکانی امن ذخیره کنید و آن را به کسی ندهید.
- نگه دارید تا نشان داده شود
- شما تقریبا تمام کردید! ۸۰٪با ذخیره کردن عبارت بازیابی، از حساب خود را محافظت کنیدبرای فاش کردن عبارت بازیابی، بر روی کلمات redacted ضربه زده و نگه دارید، سپس با خیال راحت آن را ذخیره کنید تا از شناسهی Session خود محافظت نمایید.حتماً عبارت بازیابی خود را در مکانی امن ذخیره کنید
@@ -605,7 +597,6 @@
دستگاههادعوت از یک دوستسوالات متداول
- عبارت بازیابیپاک کردن اطلاعاتپاک کردن دادهها همراه با شبکهبه ما کمک کنید که سشن را ترجمه کنیم
@@ -618,8 +609,6 @@
با استفاده از سرورهای گوگل، شما به صورت سریع و مطمئن از پیامهای جدید مطلع میشوید.تغییر نامقطع اتصال دستگاه
- عبارت بازیابی شما
- این عبارت بازیابی شماست. با استفاده از آن میتوانید شناسهی Session خود را به دستگاه جدید بازیابی یا انتقال دهید.پاک کردن همه دادههااین به طور دائم پیامها، جلسات و مخاطبین شما را حذف میکند.آیا فقط میخواهید این دستگاه را پاک کنید یا میخواهید کل اکانت را پاک کنید؟
@@ -663,7 +652,6 @@
یک فایل پشتیبان انتخاب و گذرمتنی که با آن ساخته شده است را وارد کنید.گذرمتن ۳۰رقمیاین مقداری طول میکشد، دوست دارید ردش کنید؟
- اتصال به یک دستگاهعبارت بازیابیاسکن کد QRبرای دیدن کد QR خود، در دستگاه دیگرتان به «تنظیمات ← عبارت بازیابی» مراجعه کنید.
@@ -674,7 +662,6 @@
حالت آهستهشما سریع و مطمئن با استفاده از سرورهای اطلاعرسانی گوگل از پیامهای جدید مطلع میشوید.نشست هرازگاهی در پس زمینه وجود پیامهای جدید را بررسی میکند.
- متن بازیابینشست قفل شدهاست ﺑﺮﺍﯼ ﮔﺸﻮﺩﻥ ﺿﺮﺑﻪ ﺑﺰﻧﻴﺪیک نام مستعار وارد کنید
diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml
index 3a7bf07fe1..0e7b621d75 100644
--- a/app/src/main/res/values-fi-rFI/strings.xml
+++ b/app/src/main/res/values-fi-rFI/strings.xml
@@ -529,24 +529,21 @@ on viallinen!
Virheellinen Session IDPeruutaSinun Session ID
- Session alkaa täältä...
- Tee Session ID
- Jatka IstuntoasiMikä on Session?Se on hajautettu, salattu viestisovellusJoten se ei kerää henkilökohtaisia tietoja tai keskustelun metatietoja? Miten se toimii?Käyttämällä kehittyneitä nimettömiä reititys- ja päästä päähän -salaustekniikoita.Ystävät eivät anna ystävien käyttää vaarantunutta viestintäsovellusta. Olet tervetullut.
- Sano tervehdys Session tunnuksellesi
- Session ID on yksilöllinen osoite, jonka avulla muut voivat ottaa sinuun yhteyttä Sessionissa. Sillä ei ole yhteyttä todelliseen identiteettiisi, Session ID on täysin anonyymi ja yksityinen tarkoituksella.
+
+
Palauta sinun tiliSyötä palautuslause joka annettiin sinulle, kun olet rekisteröitynyt palauttamaan tilisi.Syötä palautuslauseesi
- Valitse näyttönimi
- Tämä on nimesi, kun käytät Sessionia. Se voi olla oikea nimesi, kutsumanimi tai mitä tahansa muuta haluat.
- Syötä näyttönimi
- Valitse näyttönimi
- Valitse lyhyempi näyttönimi
+ Valitse näyttönimi
+ Tämä on nimesi, kun käytät Sessionia. Se voi olla oikea nimesi, kutsumanimi tai mitä tahansa muuta haluat.
+ Syötä näyttönimi
+ Valitse näyttönimi
+ Valitse lyhyempi näyttönimiSuositeltuValitse vaihtoehtoSinulla ei ole yhteystietoja
@@ -555,11 +552,6 @@ on viallinen!
"Ryhmästä ei voitu poistua"Haluatko varmasti poistaa tämän keskustelun?Keskustelu poistettu
- Palautuslauseke
- Tutustu palautuslauseesi
- Sinun palautuslause on pääavain Session tunnukseesi — voit käyttää sitä palauttamaan Session tunnuksesi jos menetät pääsyn laitteeseen. Säilytä palautuslauseesi turvallisessa paikassa, ja älä anna sitä kenellekään.
- Pidä pohjassa paljastaaksesi
- Olet melkein valmis! 80%Suojaa tilisi tallentamalla palautuslausekeNapauta ja pidä piiloteettuja sanoja paljastaaksesi palautuslauseen, ja säästä se turvallisesti suojataksesi Session tilisi.Varmista, että säilytät palautuslauseesi turvallisessa paikassa
@@ -604,7 +596,6 @@ on viallinen!
LaitteetKutsu ystäviäUKK
- PalautuslausekeTyhjennä tiedotTyhjennä Tiedot Mukaan Lukien VerkkoAuta meitä kääntämään Session
@@ -617,8 +608,6 @@ on viallinen!
Sinulle ilmoitetaan uusista viesteistä luotettavasti ja viivyttelemättä Applen ilmoituspalvelua käyttäen.Vaihda nimiPoista laitteen linkitys
- Palautuslauseke
- Tämä on palautuslause. Sen avulla voit palauttaa tai siirtää Session tunnuksesi uudelle laitteelle.Tyhjennä tiedotTämä poistaa pysyvästi viestit, istunnot ja yhteystiedot.Haluatko tyhjentää datan vain tästä laitteesta vai poistaa koko tilin?
@@ -662,7 +651,6 @@ on viallinen!
Valitse varmuuskopiotiedosto ja kirjoita salasana, jonka kanssa se on luotu.30-merkkinen pääsykoodiTämä kestää jonkin aikaa, haluaisitko ohittaa?
- Yhdistä laitePalautusvirkeSkannaa QR-koodiSiirry asetuksiin → palautusvirke toisella laitteellasi näyttääksesi QR-koodisi.
@@ -673,7 +661,6 @@ on viallinen!
HidastilaSinulle ilmoitetaan uusista viesteistä luotettavasti ja viivyttelemättä Applen ilmoituspalvelua käyttäen.Session tarkistaa taustalla ajoittain uudet viestit.
- PalautusvirkeSession on lukittuAvaa napauttamallaAnna nimimerkki
diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml
index 3a7bf07fe1..0e7b621d75 100644
--- a/app/src/main/res/values-fi/strings.xml
+++ b/app/src/main/res/values-fi/strings.xml
@@ -529,24 +529,21 @@ on viallinen!
Virheellinen Session IDPeruutaSinun Session ID
- Session alkaa täältä...
- Tee Session ID
- Jatka IstuntoasiMikä on Session?Se on hajautettu, salattu viestisovellusJoten se ei kerää henkilökohtaisia tietoja tai keskustelun metatietoja? Miten se toimii?Käyttämällä kehittyneitä nimettömiä reititys- ja päästä päähän -salaustekniikoita.Ystävät eivät anna ystävien käyttää vaarantunutta viestintäsovellusta. Olet tervetullut.
- Sano tervehdys Session tunnuksellesi
- Session ID on yksilöllinen osoite, jonka avulla muut voivat ottaa sinuun yhteyttä Sessionissa. Sillä ei ole yhteyttä todelliseen identiteettiisi, Session ID on täysin anonyymi ja yksityinen tarkoituksella.
+
+
Palauta sinun tiliSyötä palautuslause joka annettiin sinulle, kun olet rekisteröitynyt palauttamaan tilisi.Syötä palautuslauseesi
- Valitse näyttönimi
- Tämä on nimesi, kun käytät Sessionia. Se voi olla oikea nimesi, kutsumanimi tai mitä tahansa muuta haluat.
- Syötä näyttönimi
- Valitse näyttönimi
- Valitse lyhyempi näyttönimi
+ Valitse näyttönimi
+ Tämä on nimesi, kun käytät Sessionia. Se voi olla oikea nimesi, kutsumanimi tai mitä tahansa muuta haluat.
+ Syötä näyttönimi
+ Valitse näyttönimi
+ Valitse lyhyempi näyttönimiSuositeltuValitse vaihtoehtoSinulla ei ole yhteystietoja
@@ -555,11 +552,6 @@ on viallinen!
"Ryhmästä ei voitu poistua"Haluatko varmasti poistaa tämän keskustelun?Keskustelu poistettu
- Palautuslauseke
- Tutustu palautuslauseesi
- Sinun palautuslause on pääavain Session tunnukseesi — voit käyttää sitä palauttamaan Session tunnuksesi jos menetät pääsyn laitteeseen. Säilytä palautuslauseesi turvallisessa paikassa, ja älä anna sitä kenellekään.
- Pidä pohjassa paljastaaksesi
- Olet melkein valmis! 80%Suojaa tilisi tallentamalla palautuslausekeNapauta ja pidä piiloteettuja sanoja paljastaaksesi palautuslauseen, ja säästä se turvallisesti suojataksesi Session tilisi.Varmista, että säilytät palautuslauseesi turvallisessa paikassa
@@ -604,7 +596,6 @@ on viallinen!
LaitteetKutsu ystäviäUKK
- PalautuslausekeTyhjennä tiedotTyhjennä Tiedot Mukaan Lukien VerkkoAuta meitä kääntämään Session
@@ -617,8 +608,6 @@ on viallinen!
Sinulle ilmoitetaan uusista viesteistä luotettavasti ja viivyttelemättä Applen ilmoituspalvelua käyttäen.Vaihda nimiPoista laitteen linkitys
- Palautuslauseke
- Tämä on palautuslause. Sen avulla voit palauttaa tai siirtää Session tunnuksesi uudelle laitteelle.Tyhjennä tiedotTämä poistaa pysyvästi viestit, istunnot ja yhteystiedot.Haluatko tyhjentää datan vain tästä laitteesta vai poistaa koko tilin?
@@ -662,7 +651,6 @@ on viallinen!
Valitse varmuuskopiotiedosto ja kirjoita salasana, jonka kanssa se on luotu.30-merkkinen pääsykoodiTämä kestää jonkin aikaa, haluaisitko ohittaa?
- Yhdistä laitePalautusvirkeSkannaa QR-koodiSiirry asetuksiin → palautusvirke toisella laitteellasi näyttääksesi QR-koodisi.
@@ -673,7 +661,6 @@ on viallinen!
HidastilaSinulle ilmoitetaan uusista viesteistä luotettavasti ja viivyttelemättä Applen ilmoituspalvelua käyttäen.Session tarkistaa taustalla ajoittain uudet viestit.
- PalautusvirkeSession on lukittuAvaa napauttamallaAnna nimimerkki
diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml
index 3aeeba0550..708cac6485 100644
--- a/app/src/main/res/values-fr-rFR/strings.xml
+++ b/app/src/main/res/values-fr-rFR/strings.xml
@@ -556,24 +556,21 @@
Session ID non valideAnnulerVotre Session ID
- Votre Session débute ici...
- Créer un Session ID
- Continuez votre SessionQu\'est-ce que Session ?C\'est une application de messagerie décentralisée et cryptéeElle ne recueille donc pas mes informations personnelles ou mes métadonnées de conversations ? Comment ça marche ?En utilisant une combinaison de technologies avancées de routage anonyme et de chiffrement de bout en bout.Les vrais amis ne laissent pas leurs amis utiliser des outils de messagerie compromis. De rien.
- Dites bonjour à votre Session ID
- Votre Session ID est l\'identifiant unique que les gens utilisent pour vous contacter dans Session. Sans lien avec votre identité réelle, votre Session ID est complètement anonyme et privé.
+
+
Restaurez votre comptePour restaurer votre compte, veuillez entrer la phrase de récupération qui vous a été fournie lors de la création de votre compte.Saisissez votre phrase de récupération
- Choisissez votre nom d\'utilisateur
- Ce sera votre nom lorsque vous utiliserez Session. Il peut s\'agir de votre vrai nom, d\'un pseudo ou de ce que vous voulez.
- Saisissez un nom d\'utilisateur
- Veuillez choisir un nom d\'utilisateur
- Veuillez choisir un nom d\'utilisateur plus court
+ Choisissez votre nom d\'utilisateur
+ Ce sera votre nom lorsque vous utiliserez Session. Il peut s\'agir de votre vrai nom, d\'un pseudo ou de ce que vous voulez.
+ Saisissez un nom d\'utilisateur
+ Veuillez choisir un nom d\'utilisateur
+ Veuillez choisir un nom d\'utilisateur plus courtRecommandéVeuillez choisir une optionVous n\'avez pas encore de contacts
@@ -582,11 +579,6 @@
"Impossible de quitter le groupe"Voulez-vous vraiment supprimer cette conversation ?Conversation supprimée
- Votre phrase de récupération
- Voici votre phrase de récupération
- Votre phrase de récupération est la clé principale de votre Session ID - vous pouvez l\'utiliser pour restaurer votre Session ID si vous perdez l\'accès à votre appareil. Conservez la dans un endroit sûr et ne la donnez à personne.
- Appuyer pour révéler
- Vous avez presque terminé ! 80%Sécurisez votre compte en sauvegardant votre phrase de récupérationAppuyez et maintenez les mots masqués pour révéler votre phrase de récupération, puis stockez-la en toute sécurité pour sécuriser votre Session ID.Assurez-vous de conserver votre phrase de récupération dans un endroit sûr
@@ -632,7 +624,6 @@
Appareils reliésInviter un amiFAQ
- Phrase de récupérationEffacer les donnéesEffacer les données et le réseauAidez-nous à traduire Session
@@ -654,8 +645,6 @@
Vous serez averti de nouveaux messages de manière fiable et immédiate en utilisant les serveurs de notification de Google.Modifier le nomDéconnecter l\'appareil
- Votre phrase de récupération
- Vous pouvez utiliser votre phrase de récupération pour restaurer votre compte ou relier un appareil.Effacer toutes les donnéesCela supprimera définitivement vos messages, vos sessions et vos contacts.Souhaitez-vous effacer seulement cet appareil ou supprimer l\'ensemble de votre compte ?
@@ -704,7 +693,6 @@
Sélectionnez un fichier de sauvegarde et entrez la phrase de passe avec laquelle il a été créé.Phrase de passe de 30 caractèresCela prend un certain temps, voulez-vous passer ?
- Relier un appareilPhrase de récupérationScanner le QR CodeAllez dans Paramètres → Phrase de récupération sur votre autre appareil pour afficher votre QR code.
@@ -715,7 +703,6 @@
Mode lentVous serez averti de nouveaux messages de manière fiable et immédiate en utilisant les serveurs de notification de Google.Session vérifiera occasionnellement la présence de nouveaux messages en tâche de fond.
- Phrase de récupérationSession est VerrouilléToucher pour déverrouillerSaisissez un nom
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 3aeeba0550..708cac6485 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -556,24 +556,21 @@
Session ID non valideAnnulerVotre Session ID
- Votre Session débute ici...
- Créer un Session ID
- Continuez votre SessionQu\'est-ce que Session ?C\'est une application de messagerie décentralisée et cryptéeElle ne recueille donc pas mes informations personnelles ou mes métadonnées de conversations ? Comment ça marche ?En utilisant une combinaison de technologies avancées de routage anonyme et de chiffrement de bout en bout.Les vrais amis ne laissent pas leurs amis utiliser des outils de messagerie compromis. De rien.
- Dites bonjour à votre Session ID
- Votre Session ID est l\'identifiant unique que les gens utilisent pour vous contacter dans Session. Sans lien avec votre identité réelle, votre Session ID est complètement anonyme et privé.
+
+
Restaurez votre comptePour restaurer votre compte, veuillez entrer la phrase de récupération qui vous a été fournie lors de la création de votre compte.Saisissez votre phrase de récupération
- Choisissez votre nom d\'utilisateur
- Ce sera votre nom lorsque vous utiliserez Session. Il peut s\'agir de votre vrai nom, d\'un pseudo ou de ce que vous voulez.
- Saisissez un nom d\'utilisateur
- Veuillez choisir un nom d\'utilisateur
- Veuillez choisir un nom d\'utilisateur plus court
+ Choisissez votre nom d\'utilisateur
+ Ce sera votre nom lorsque vous utiliserez Session. Il peut s\'agir de votre vrai nom, d\'un pseudo ou de ce que vous voulez.
+ Saisissez un nom d\'utilisateur
+ Veuillez choisir un nom d\'utilisateur
+ Veuillez choisir un nom d\'utilisateur plus courtRecommandéVeuillez choisir une optionVous n\'avez pas encore de contacts
@@ -582,11 +579,6 @@
"Impossible de quitter le groupe"Voulez-vous vraiment supprimer cette conversation ?Conversation supprimée
- Votre phrase de récupération
- Voici votre phrase de récupération
- Votre phrase de récupération est la clé principale de votre Session ID - vous pouvez l\'utiliser pour restaurer votre Session ID si vous perdez l\'accès à votre appareil. Conservez la dans un endroit sûr et ne la donnez à personne.
- Appuyer pour révéler
- Vous avez presque terminé ! 80%Sécurisez votre compte en sauvegardant votre phrase de récupérationAppuyez et maintenez les mots masqués pour révéler votre phrase de récupération, puis stockez-la en toute sécurité pour sécuriser votre Session ID.Assurez-vous de conserver votre phrase de récupération dans un endroit sûr
@@ -632,7 +624,6 @@
Appareils reliésInviter un amiFAQ
- Phrase de récupérationEffacer les donnéesEffacer les données et le réseauAidez-nous à traduire Session
@@ -654,8 +645,6 @@
Vous serez averti de nouveaux messages de manière fiable et immédiate en utilisant les serveurs de notification de Google.Modifier le nomDéconnecter l\'appareil
- Votre phrase de récupération
- Vous pouvez utiliser votre phrase de récupération pour restaurer votre compte ou relier un appareil.Effacer toutes les donnéesCela supprimera définitivement vos messages, vos sessions et vos contacts.Souhaitez-vous effacer seulement cet appareil ou supprimer l\'ensemble de votre compte ?
@@ -704,7 +693,6 @@
Sélectionnez un fichier de sauvegarde et entrez la phrase de passe avec laquelle il a été créé.Phrase de passe de 30 caractèresCela prend un certain temps, voulez-vous passer ?
- Relier un appareilPhrase de récupérationScanner le QR CodeAllez dans Paramètres → Phrase de récupération sur votre autre appareil pour afficher votre QR code.
@@ -715,7 +703,6 @@
Mode lentVous serez averti de nouveaux messages de manière fiable et immédiate en utilisant les serveurs de notification de Google.Session vérifiera occasionnellement la présence de nouveaux messages en tâche de fond.
- Phrase de récupérationSession est VerrouilléToucher pour déverrouillerSaisissez un nom
diff --git a/app/src/main/res/values-gl-rES/strings.xml b/app/src/main/res/values-gl-rES/strings.xml
index 7ab41a7274..de0251bade 100644
--- a/app/src/main/res/values-gl-rES/strings.xml
+++ b/app/src/main/res/values-gl-rES/strings.xml
@@ -521,14 +521,11 @@
ID de Session inválidoCancelarO teu ID de Session
- A túa sesión comeza aquí...
- Crear ID de Session
- Continuar coa túa sesiónQue é Session?É unha app de mensaxería cifrada e descentralizadaEntón non recompila a miña información persoal ou os metadatos das miñas conversas? Como funciona?Empregando unha combinación de tecnoloxías avanzadas de encamiñamento anónimo e cifrado punto-a-punto.
- Di ola ao teu ID de Session
+
Iniciar unha sesiónTes a certeza de querer abandonar este grupo?"Non foi posible abandonar o grupo"
diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml
index 7ab41a7274..de0251bade 100644
--- a/app/src/main/res/values-gl/strings.xml
+++ b/app/src/main/res/values-gl/strings.xml
@@ -521,14 +521,11 @@
ID de Session inválidoCancelarO teu ID de Session
- A túa sesión comeza aquí...
- Crear ID de Session
- Continuar coa túa sesiónQue é Session?É unha app de mensaxería cifrada e descentralizadaEntón non recompila a miña información persoal ou os metadatos das miñas conversas? Como funciona?Empregando unha combinación de tecnoloxías avanzadas de encamiñamento anónimo e cifrado punto-a-punto.
- Di ola ao teu ID de Session
+
Iniciar unha sesiónTes a certeza de querer abandonar este grupo?"Non foi posible abandonar o grupo"
diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml
index 9a4a5c7309..20d3f2f014 100644
--- a/app/src/main/res/values-hi-rIN/strings.xml
+++ b/app/src/main/res/values-hi-rIN/strings.xml
@@ -530,24 +530,21 @@
अमान्य सेशन आईडीरद्द करेंआपकी सेशन आईडी
- आपका सेशन यहां आरंभ होता है...
- सेशन आईडी बनाएं
- अपना सेशन जारी रखेंसेशन क्या है?यह एक decentralized, encrypted मेसेजिंग ऐप हैइसलिए यह मेरी निजी जानकारी या बातचीत का metadata इकठ्ठा नहीं करता? यह कैसे काम करता है?एडवांस्ड anonymous routing और end-to-end encryption के मिश्रण का प्रयोग करके।दोस्त दोस्तों को असुरक्षित मैसेंजर नहीं उपयोग करने देते। आपका स्वागत है।
- अपनी सेशन आईडी को हेल्लो कहें
- आपकी Session ID एक ऐसा अनोखा पता है जिसका उपयोग करके लोग आपसे Session पर संपर्क कर सकते हैं। आपकी वास्तविक पहचान से कोई संबंध नहीं होने के कारण, आपका Session ID डिज़ाइन द्वारा पूरी तरह से गुमनाम और निजी है |
+
+
अकाउंट रिस्टोर करेंअकाउंट बनाते समय बनाया गया अपना रिकवरी वाक्य डालें।अपना पुनर्प्राप्ति वाक्यांश लिखें
- अपना प्रदर्शन नाम चुनें
- यह सेशन इस्तेमाल करते समय आपका नाम होगा। यह आपका असली नाम, उपनाम या कुछ और भी हो सकता है।
- डिस्प्ले नाम डालें
- कृपया एक डिस्प्ले नाम चुनें
- कृपया एक छोटा डिसप्ले नाम चुनें
+ अपना प्रदर्शन नाम चुनें
+ यह सेशन इस्तेमाल करते समय आपका नाम होगा। यह आपका असली नाम, उपनाम या कुछ और भी हो सकता है।
+ डिस्प्ले नाम डालें
+ कृपया एक डिस्प्ले नाम चुनें
+ कृपया एक छोटा डिसप्ले नाम चुनेंसुझाया गयाकृपया एक विकल्प चुनें।अभी तक आपके पास कोई कॉन्टैक्ट्स नहीं हैं
@@ -556,11 +553,6 @@
"ग्रुप नहीं छोड़ सके"क्या वाकई आप इस वार्तालाप को हटाना चाहते हैं?बातचीत हटाई गई
- आपका पुनर्प्राप्ति वाक्यांश
- अपने पुनर्प्राप्ति वाक्यांश से मिलें
- आपका रिकवरी फ्रेज आपके Session Id की मास्टर कीय है — आप इसका इस्तेमाल अपनी Session ID को वापिस पाने के लिए कर सकते है अगर आपका फ़ोन गुम हो गया है | अपने रिकवरी फ्रेज को एक सुरक्षित जगह रखे और इसे किसी के साथ शेयर न करे |
- देखने के लिए दबाएं
- पूर्ण होने वाला है! 80%अकाउंट सुरक्षित रखने के लिए अपनी पुनर्व्यप्ती वाक्यांश को सेव करके रखेंअपना पुनर्प्राप्ति वाक्यांश प्रकट करने के लिए संशोधित शब्दों को टैप और होल्ड करें, फिर अपनी Session ID को सुरक्षित करने के लिए इसे सुरक्षित रूप से संग्रहीत करें।अपने रिकवरी फ्रेज को एक सुरक्षित जगह रखे
@@ -605,7 +597,6 @@
डिवाइसेज़किसी मित्र को आमंत्रित करेंअकसर किये गए सवाल
- पुनर्प्राप्ति वाक्यांशडेटा हटाएंडाटा नेटवर्क के समेत साफ करें।सेशन का अनुवाद करने में सहायता करें
@@ -618,8 +609,6 @@
आपको नई सूचनाओं के बारे में google के नोटीफिकेशन servers से तत्काल सूचित किया जाएगा।नाम बदलेंडिवाइस को अनलिंक करें
- आपका पुनर्प्राप्ति वाक्यांश
- यह आपका रिकवरी फ्रेज है | इसके साथ, आप अपनी Session ID को किसी नए डिवाइस पर माइग्रेट कर सकते हैं।सभी डेटा हटाएंयह आपके मैसेजस, सेशन और कॉन्टैक्टस को स्थायी रूप से हटा देगा।क्या आप सिर्फ इस यंत्र को साफ करना चाहेंगे या अपना पूरा अकाउंट डिलीट करना चाहिएं?
@@ -663,7 +652,6 @@
एक बैकअप फ़ाइल चुनें और वह पासफ़्रेज़ दर्ज करें जिसके साथ इसे बनाया गया था।30 अंक का पासफ्रेसयह समय ले रहा है, इसे छोड़ दें?
- डिवाइस को लिंक करेंपुनर्प्राप्ति वाक्यांशQR कोड को स्कैन करेंअपना क्यूआर कोड दिखाने के लिए अपने अन्य डिवाइस पर सेटिंग्स →पुनर्प्राप्ति वाक्यांश में जाएंं।
@@ -674,7 +662,6 @@
स्लो मोडआपको नई सूचनाओं के बारे में google के नोटीफिकेशन servers से तत्काल सूचित किया जाएगा।Session कभी-कभी पृष्ठभूमि में नए संदेशों की जांच करेगा।
- पुनर्प्राप्ति वाक्यांशSession लॉक हैअनलॉक करने के लिए टैप करेंउपनाम चुनें
diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml
index 9a4a5c7309..20d3f2f014 100644
--- a/app/src/main/res/values-hi/strings.xml
+++ b/app/src/main/res/values-hi/strings.xml
@@ -530,24 +530,21 @@
अमान्य सेशन आईडीरद्द करेंआपकी सेशन आईडी
- आपका सेशन यहां आरंभ होता है...
- सेशन आईडी बनाएं
- अपना सेशन जारी रखेंसेशन क्या है?यह एक decentralized, encrypted मेसेजिंग ऐप हैइसलिए यह मेरी निजी जानकारी या बातचीत का metadata इकठ्ठा नहीं करता? यह कैसे काम करता है?एडवांस्ड anonymous routing और end-to-end encryption के मिश्रण का प्रयोग करके।दोस्त दोस्तों को असुरक्षित मैसेंजर नहीं उपयोग करने देते। आपका स्वागत है।
- अपनी सेशन आईडी को हेल्लो कहें
- आपकी Session ID एक ऐसा अनोखा पता है जिसका उपयोग करके लोग आपसे Session पर संपर्क कर सकते हैं। आपकी वास्तविक पहचान से कोई संबंध नहीं होने के कारण, आपका Session ID डिज़ाइन द्वारा पूरी तरह से गुमनाम और निजी है |
+
+
अकाउंट रिस्टोर करेंअकाउंट बनाते समय बनाया गया अपना रिकवरी वाक्य डालें।अपना पुनर्प्राप्ति वाक्यांश लिखें
- अपना प्रदर्शन नाम चुनें
- यह सेशन इस्तेमाल करते समय आपका नाम होगा। यह आपका असली नाम, उपनाम या कुछ और भी हो सकता है।
- डिस्प्ले नाम डालें
- कृपया एक डिस्प्ले नाम चुनें
- कृपया एक छोटा डिसप्ले नाम चुनें
+ अपना प्रदर्शन नाम चुनें
+ यह सेशन इस्तेमाल करते समय आपका नाम होगा। यह आपका असली नाम, उपनाम या कुछ और भी हो सकता है।
+ डिस्प्ले नाम डालें
+ कृपया एक डिस्प्ले नाम चुनें
+ कृपया एक छोटा डिसप्ले नाम चुनेंसुझाया गयाकृपया एक विकल्प चुनें।अभी तक आपके पास कोई कॉन्टैक्ट्स नहीं हैं
@@ -556,11 +553,6 @@
"ग्रुप नहीं छोड़ सके"क्या वाकई आप इस वार्तालाप को हटाना चाहते हैं?बातचीत हटाई गई
- आपका पुनर्प्राप्ति वाक्यांश
- अपने पुनर्प्राप्ति वाक्यांश से मिलें
- आपका रिकवरी फ्रेज आपके Session Id की मास्टर कीय है — आप इसका इस्तेमाल अपनी Session ID को वापिस पाने के लिए कर सकते है अगर आपका फ़ोन गुम हो गया है | अपने रिकवरी फ्रेज को एक सुरक्षित जगह रखे और इसे किसी के साथ शेयर न करे |
- देखने के लिए दबाएं
- पूर्ण होने वाला है! 80%अकाउंट सुरक्षित रखने के लिए अपनी पुनर्व्यप्ती वाक्यांश को सेव करके रखेंअपना पुनर्प्राप्ति वाक्यांश प्रकट करने के लिए संशोधित शब्दों को टैप और होल्ड करें, फिर अपनी Session ID को सुरक्षित करने के लिए इसे सुरक्षित रूप से संग्रहीत करें।अपने रिकवरी फ्रेज को एक सुरक्षित जगह रखे
@@ -605,7 +597,6 @@
डिवाइसेज़किसी मित्र को आमंत्रित करेंअकसर किये गए सवाल
- पुनर्प्राप्ति वाक्यांशडेटा हटाएंडाटा नेटवर्क के समेत साफ करें।सेशन का अनुवाद करने में सहायता करें
@@ -618,8 +609,6 @@
आपको नई सूचनाओं के बारे में google के नोटीफिकेशन servers से तत्काल सूचित किया जाएगा।नाम बदलेंडिवाइस को अनलिंक करें
- आपका पुनर्प्राप्ति वाक्यांश
- यह आपका रिकवरी फ्रेज है | इसके साथ, आप अपनी Session ID को किसी नए डिवाइस पर माइग्रेट कर सकते हैं।सभी डेटा हटाएंयह आपके मैसेजस, सेशन और कॉन्टैक्टस को स्थायी रूप से हटा देगा।क्या आप सिर्फ इस यंत्र को साफ करना चाहेंगे या अपना पूरा अकाउंट डिलीट करना चाहिएं?
@@ -663,7 +652,6 @@
एक बैकअप फ़ाइल चुनें और वह पासफ़्रेज़ दर्ज करें जिसके साथ इसे बनाया गया था।30 अंक का पासफ्रेसयह समय ले रहा है, इसे छोड़ दें?
- डिवाइस को लिंक करेंपुनर्प्राप्ति वाक्यांशQR कोड को स्कैन करेंअपना क्यूआर कोड दिखाने के लिए अपने अन्य डिवाइस पर सेटिंग्स →पुनर्प्राप्ति वाक्यांश में जाएंं।
@@ -674,7 +662,6 @@
स्लो मोडआपको नई सूचनाओं के बारे में google के नोटीफिकेशन servers से तत्काल सूचित किया जाएगा।Session कभी-कभी पृष्ठभूमि में नए संदेशों की जांच करेगा।
- पुनर्प्राप्ति वाक्यांशSession लॉक हैअनलॉक करने के लिए टैप करेंउपनाम चुनें
diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml
index 517efa5604..5ca43d5d29 100644
--- a/app/src/main/res/values-hu-rHU/strings.xml
+++ b/app/src/main/res/values-hu-rHU/strings.xml
@@ -532,24 +532,21 @@
Érvénytelen Session azonosítóMégseA session azonosítód
- A Session itt kezdődik...
- Session azonosító létrehozása
- Session azonosító helyreállításaMi az a Session?Ez egy decentralizált, titkosított üzenetküldő alkalmazásTehát nem gyűjti a személyes adataimat vagy a beszélgetés metaadatait? Hogyan működik?Fejlett anonim útválasztási és végponttól-végpontig titkosítási technológiák használatával.A barátként nem engedhetem, hogy megbízhatatlan üzenetküldő appokat használj. Szívesen.
- Ismerd meg a Session ID-d
- A Session azonosító az az egyedi cím, amelyet az emberek használhatnak, hogy kapcsolatba lépjenek Önnel a Sessionon. Mivel nincs kapcsolat a valódi személyazonosságával, az Session azonosító teljesen névtelen, és privát.
+
+
Fiók visszaállításaÍrja be azt a helyreállítási kifejezést, amelyet a fiók visszaállításához regisztrálásakor kapott.Írja be a helyreállítási kifejezést
- Válassza ki a megjelenítendő nevet
- Ez lesz az ön neve, amikor használja a Session alkalmazást. Ez lehet a valódi neve, álneve, vagy bármi más, ami tetszik.
- Írja be a megjelenítendő nevet
- Kérjük, válassza ki a megjelenítendő nevet
- Válasszon rövidebb megjelenítési nevet
+ Válassza ki a megjelenítendő nevet
+ Ez lesz az ön neve, amikor használja a Session alkalmazást. Ez lehet a valódi neve, álneve, vagy bármi más, ami tetszik.
+ Írja be a megjelenítendő nevet
+ Kérjük, válassza ki a megjelenítendő nevet
+ Válasszon rövidebb megjelenítési nevetAjánlottKérjük, válasszon egy lehetőségetMég nincsenek névjegyei
@@ -558,11 +555,6 @@
"Nem sikerült kilépni a csoportból"Biztosan törli ezt a beszélgetést?A beszélgetés törölve
- A helyreállítási kifejezés
- Írja be a helyreállítási kifejezést
- A helyreállítási kifejezés a Session azonosító főkulcsa - használhatja a Session azonosító visszaállítására, ha elveszíti a hozzáférését eszközéhez. Tárolja helyreállítási mondatát biztonságos helyen, és ne adja át senkinek.
- Tartsa lenyomva, hogy felfedje
- Már majdnem kész! 80%Biztosítsa fiókját a helyreállítási szöveg elmentésévelÉrintse meg és tartsa lenyomva a szerkesztett szavakat, hogy felfedje a helyreállítási kifejezést, majd tárolja biztonságosan Session-azonosítója biztonsága érdekében.Ügyeljen arra, hogy a helyreállítási szöveget biztonságos helyen tárolja
@@ -607,7 +599,6 @@
EszközökBarát meghívásaGyakori kérdések
- Helyreállítási kódmondatAdataid törléseAdatok törlése, beleértve a hálózatot isSegítsen nekünk a Session lefordításában
@@ -620,8 +611,6 @@
A Google értesítési szerverein keresztül megbízhatóan és azonnal értesítést kap az új üzenetekről.Név módosításaEszköz társításának megszüntetése
- A helyreállítási kifejezés
- Ez a helyreállítási kódmondatod. Ezzel, visszaálíthatod, vagy migrálhatod a Session azonosítódat egy új eszközre.Az összes adat törléseEz végleg törölni fogja üzeneteit, beszélgetéseit és ismerőseit.Csak ezt az eszközt szeretné törölni, vagy törölni szeretné az egész fiókját?
@@ -665,7 +654,6 @@
Válassz ki egy visszaállítási fájlt és add meg a hozzá tartozó visszaálítási kódmondatot.30-betűs kódmondatEz eltarthat egy ideig, szeretnéd átugrani?
- Eszköz társításaVisszaállítási kódmondatQR kód beolvasásaA QR-kód megjelenítéséhez nyissa meg a Beállítások → Helyreállítási kifejezés elemet másik eszközén.
@@ -676,7 +664,6 @@
Lassított módA Google értesítési szerverein keresztül megbízhatóan és azonnal értesítést kapsz az új üzenetekről.A Session alkalmanként, az új üzeneteket a háttérben fogja ellenőrizni.
- Visszaállítási kódmondatSession zárolvaKoppintson a feloldáshozÍrjon be egy becenevet
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index 517efa5604..5ca43d5d29 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -532,24 +532,21 @@
Érvénytelen Session azonosítóMégseA session azonosítód
- A Session itt kezdődik...
- Session azonosító létrehozása
- Session azonosító helyreállításaMi az a Session?Ez egy decentralizált, titkosított üzenetküldő alkalmazásTehát nem gyűjti a személyes adataimat vagy a beszélgetés metaadatait? Hogyan működik?Fejlett anonim útválasztási és végponttól-végpontig titkosítási technológiák használatával.A barátként nem engedhetem, hogy megbízhatatlan üzenetküldő appokat használj. Szívesen.
- Ismerd meg a Session ID-d
- A Session azonosító az az egyedi cím, amelyet az emberek használhatnak, hogy kapcsolatba lépjenek Önnel a Sessionon. Mivel nincs kapcsolat a valódi személyazonosságával, az Session azonosító teljesen névtelen, és privát.
+
+
Fiók visszaállításaÍrja be azt a helyreállítási kifejezést, amelyet a fiók visszaállításához regisztrálásakor kapott.Írja be a helyreállítási kifejezést
- Válassza ki a megjelenítendő nevet
- Ez lesz az ön neve, amikor használja a Session alkalmazást. Ez lehet a valódi neve, álneve, vagy bármi más, ami tetszik.
- Írja be a megjelenítendő nevet
- Kérjük, válassza ki a megjelenítendő nevet
- Válasszon rövidebb megjelenítési nevet
+ Válassza ki a megjelenítendő nevet
+ Ez lesz az ön neve, amikor használja a Session alkalmazást. Ez lehet a valódi neve, álneve, vagy bármi más, ami tetszik.
+ Írja be a megjelenítendő nevet
+ Kérjük, válassza ki a megjelenítendő nevet
+ Válasszon rövidebb megjelenítési nevetAjánlottKérjük, válasszon egy lehetőségetMég nincsenek névjegyei
@@ -558,11 +555,6 @@
"Nem sikerült kilépni a csoportból"Biztosan törli ezt a beszélgetést?A beszélgetés törölve
- A helyreállítási kifejezés
- Írja be a helyreállítási kifejezést
- A helyreállítási kifejezés a Session azonosító főkulcsa - használhatja a Session azonosító visszaállítására, ha elveszíti a hozzáférését eszközéhez. Tárolja helyreállítási mondatát biztonságos helyen, és ne adja át senkinek.
- Tartsa lenyomva, hogy felfedje
- Már majdnem kész! 80%Biztosítsa fiókját a helyreállítási szöveg elmentésévelÉrintse meg és tartsa lenyomva a szerkesztett szavakat, hogy felfedje a helyreállítási kifejezést, majd tárolja biztonságosan Session-azonosítója biztonsága érdekében.Ügyeljen arra, hogy a helyreállítási szöveget biztonságos helyen tárolja
@@ -607,7 +599,6 @@
EszközökBarát meghívásaGyakori kérdések
- Helyreállítási kódmondatAdataid törléseAdatok törlése, beleértve a hálózatot isSegítsen nekünk a Session lefordításában
@@ -620,8 +611,6 @@
A Google értesítési szerverein keresztül megbízhatóan és azonnal értesítést kap az új üzenetekről.Név módosításaEszköz társításának megszüntetése
- A helyreállítási kifejezés
- Ez a helyreállítási kódmondatod. Ezzel, visszaálíthatod, vagy migrálhatod a Session azonosítódat egy új eszközre.Az összes adat törléseEz végleg törölni fogja üzeneteit, beszélgetéseit és ismerőseit.Csak ezt az eszközt szeretné törölni, vagy törölni szeretné az egész fiókját?
@@ -665,7 +654,6 @@
Válassz ki egy visszaállítási fájlt és add meg a hozzá tartozó visszaálítási kódmondatot.30-betűs kódmondatEz eltarthat egy ideig, szeretnéd átugrani?
- Eszköz társításaVisszaállítási kódmondatQR kód beolvasásaA QR-kód megjelenítéséhez nyissa meg a Beállítások → Helyreállítási kifejezés elemet másik eszközén.
@@ -676,7 +664,6 @@
Lassított módA Google értesítési szerverein keresztül megbízhatóan és azonnal értesítést kapsz az új üzenetekről.A Session alkalmanként, az új üzeneteket a háttérben fogja ellenőrizni.
- Visszaállítási kódmondatSession zárolvaKoppintson a feloldáshozÍrjon be egy becenevet
diff --git a/app/src/main/res/values-hy-rAM/strings.xml b/app/src/main/res/values-hy-rAM/strings.xml
index 994d95e164..ea9f0bc6b5 100644
--- a/app/src/main/res/values-hy-rAM/strings.xml
+++ b/app/src/main/res/values-hy-rAM/strings.xml
@@ -538,24 +538,21 @@
Սխալ Session IDՓակելՁեր Session ID֊ն
- Ձեր Սեանսը սկսվում է այստեղ...
- Ստեղծել Session֊ի հաշիվ
- Շարունակել Session֊ից օգտվելըԻ՞նչ է Սեանսը։Այն ապահով, ծածկագրված նամակների ծրագիր էԴա նշանակում է, որ այն չի՞ հավաքում իմ անձնական տվյալները կամ իմ զրույցի մետատվյալները։Այն օգտվում է հատուկ տվյալների փոխանցման միջոցներից և ամբողջական կոդավորման տեխնոլոգիաներից։Ընկերները չեն թողնի ընկերներին, որ նրանք օգտվեն վտանգավոր նամակների ծրագրերից։ Խնդրեմ։
- Ասեք «բարև» Ձեր Սեանսի ինքնությանը
- Ձեր Սեանսի ինքնությունը հատուկ հասցե է, որը մարդիկ պիտի օգտագործեն Ձեզ հետ Սեանսով կապ հաստատելու համար։ Ձեր իրական ինքնության հետ կապ չունենալով, Ձեր Սեանսի ինքնությունն լիովին գաղտնի է։
+
+
Վերականգնել ձեր հաշիվըՄուտքագրեք վերականգնման բառակապակցությունը, որը տրվել է ձեզ, երբ գրանցվել եք ձեր հաշիվը վերականգնելու համար:Գրեք գաղտնի արտահայտությունը
- Ընտրեք ցուցադրվող անուն
- Այս անունը կցուցադրվի, երբ Դուք կօգտվեք Սեանսից։ Այն կարող է լինել Ձեր անունը, կեղծանուն, կամ որևիցե այլ բան։
- Մուտքագրեք ցուցադրվող անուն
- Խնդրում ենք գրել անուն
- Խնդրում ենք ընտրել կարճ անուն
+ Ընտրեք ցուցադրվող անուն
+ Այս անունը կցուցադրվի, երբ Դուք կօգտվեք Սեանսից։ Այն կարող է լինել Ձեր անունը, կեղծանուն, կամ որևիցե այլ բան։
+ Մուտքագրեք ցուցադրվող անուն
+ Խնդրում ենք գրել անուն
+ Խնդրում ենք ընտրել կարճ անուն[Խորհուրդ է տրվում]Խնդրում ենք ընտրելԴուք չունեք կոնտակտներ
@@ -564,11 +561,6 @@
"Չստացվեց հեռանալ խումբից"Վստա՞հ եք, որ ցանկանում եք ջնջել այս խոսակցությունը:Ջնջված է
- Ձեր վերականգնման բառակապակցություն
- Ծանոթացեք ձեր վերականգնման բառակապակցության հետ
- Session այդին Ձեր Session բանալին է, որը կարող եք վերականգնել եթե կորցնեք ձեր սարքը, ձեր բանալին պահեք և մի տվեք ինչ-որ մեկին.
- Սեղմած պահեք տեսնելու համար
- Դուք վերջացրել եք 80%Պահեք ձեր անվտանգությունը պահպանելով session-ի բանալինՀպեք և պահեք տրված բառերը՝ ձեր վերականգնման բանալին գտնելու համար, այնուհետև պահեք այն ապահով՝ ձեր Session ID-ն ապահով պահելու համար.Վստահ եղեք որ ձեր վերականգման բանալին հուսալի տեղում է
@@ -613,7 +605,6 @@
ՍարքերՀրավիրել ընկերոջըՀաճախակի տրվող հարցեր
- Վերականգնման ԱրտահայտությունԶրոյացնելՄաքրել տվյալները, ներառյալ ցանցըՕգնեք մեզ թարգմանելով Session֊ը
@@ -626,8 +617,6 @@
Դուք մշտապես և անմիջապես կտեղեկացվեք նոր հաղորդագրությունների մասին՝ օգտագործելով Google-ի ծանուցումների սերվերները:Փոխել անունըԱռանձնացնել սարքը
- Ձեր վերականգնման բառակապակցություն
- Սա ձեր վերականգնման բառակապակցություն է: Դրա միջոցով դուք կարող եք վերականգնել կամ տեղափոխել ձեր Session ID-ն նոր սարք:Ջնջել բոլոր տվյալներըՍա ընդմիշտ կջնջի ձեր հաղորդագրությունները, սեսիաներն ու կոնտակտները:Ցանկանու՞մ եք մաքրել միայն այս սարքը, թե՞ ջնջել ձեր ամբողջ հաշիվը:
@@ -671,7 +660,6 @@
Ընտրեք կրկնօրինակի ֆայլ և մուտքագրեք այն գաղտնաբառը, որով ստեղծվել է:30֊թվանոց գախտնաբառՍա որոշ ժամանակ է տևում, կցանկանա՞ք բաց թողնել:
- Ավելացնել սարքՎերականգնման բառակապակցությունՍկանավորել QR ԿոդըԱնցեք Կարգավորումներ → Վերականգնման Բառակապակցություն՝ ձեր QR կոդը ցուցադրելու համար:
@@ -682,7 +670,6 @@
Դանդաղ ռեժիմԴուք մշտապես և անմիջապես կտեղեկացվեք նոր հաղորդագրությունների մասին՝ օգտագործելով Google-ի ծանուցումների սերվերները:Session-ը երբեմն, ֆոնային կստուգի նոր հաղորդագրությունների առկայությունը:
- Գաղտնի արտահայտությունSession֊ը արգելափակված էՀպեք՝ ապակողպելու համարՄուտքագրե՛ք կեղծանունը
diff --git a/app/src/main/res/values-hy/strings.xml b/app/src/main/res/values-hy/strings.xml
index 994d95e164..ea9f0bc6b5 100644
--- a/app/src/main/res/values-hy/strings.xml
+++ b/app/src/main/res/values-hy/strings.xml
@@ -538,24 +538,21 @@
Սխալ Session IDՓակելՁեր Session ID֊ն
- Ձեր Սեանսը սկսվում է այստեղ...
- Ստեղծել Session֊ի հաշիվ
- Շարունակել Session֊ից օգտվելըԻ՞նչ է Սեանսը։Այն ապահով, ծածկագրված նամակների ծրագիր էԴա նշանակում է, որ այն չի՞ հավաքում իմ անձնական տվյալները կամ իմ զրույցի մետատվյալները։Այն օգտվում է հատուկ տվյալների փոխանցման միջոցներից և ամբողջական կոդավորման տեխնոլոգիաներից։Ընկերները չեն թողնի ընկերներին, որ նրանք օգտվեն վտանգավոր նամակների ծրագրերից։ Խնդրեմ։
- Ասեք «բարև» Ձեր Սեանսի ինքնությանը
- Ձեր Սեանսի ինքնությունը հատուկ հասցե է, որը մարդիկ պիտի օգտագործեն Ձեզ հետ Սեանսով կապ հաստատելու համար։ Ձեր իրական ինքնության հետ կապ չունենալով, Ձեր Սեանսի ինքնությունն լիովին գաղտնի է։
+
+
Վերականգնել ձեր հաշիվըՄուտքագրեք վերականգնման բառակապակցությունը, որը տրվել է ձեզ, երբ գրանցվել եք ձեր հաշիվը վերականգնելու համար:Գրեք գաղտնի արտահայտությունը
- Ընտրեք ցուցադրվող անուն
- Այս անունը կցուցադրվի, երբ Դուք կօգտվեք Սեանսից։ Այն կարող է լինել Ձեր անունը, կեղծանուն, կամ որևիցե այլ բան։
- Մուտքագրեք ցուցադրվող անուն
- Խնդրում ենք գրել անուն
- Խնդրում ենք ընտրել կարճ անուն
+ Ընտրեք ցուցադրվող անուն
+ Այս անունը կցուցադրվի, երբ Դուք կօգտվեք Սեանսից։ Այն կարող է լինել Ձեր անունը, կեղծանուն, կամ որևիցե այլ բան։
+ Մուտքագրեք ցուցադրվող անուն
+ Խնդրում ենք գրել անուն
+ Խնդրում ենք ընտրել կարճ անուն[Խորհուրդ է տրվում]Խնդրում ենք ընտրելԴուք չունեք կոնտակտներ
@@ -564,11 +561,6 @@
"Չստացվեց հեռանալ խումբից"Վստա՞հ եք, որ ցանկանում եք ջնջել այս խոսակցությունը:Ջնջված է
- Ձեր վերականգնման բառակապակցություն
- Ծանոթացեք ձեր վերականգնման բառակապակցության հետ
- Session այդին Ձեր Session բանալին է, որը կարող եք վերականգնել եթե կորցնեք ձեր սարքը, ձեր բանալին պահեք և մի տվեք ինչ-որ մեկին.
- Սեղմած պահեք տեսնելու համար
- Դուք վերջացրել եք 80%Պահեք ձեր անվտանգությունը պահպանելով session-ի բանալինՀպեք և պահեք տրված բառերը՝ ձեր վերականգնման բանալին գտնելու համար, այնուհետև պահեք այն ապահով՝ ձեր Session ID-ն ապահով պահելու համար.Վստահ եղեք որ ձեր վերականգման բանալին հուսալի տեղում է
@@ -613,7 +605,6 @@
ՍարքերՀրավիրել ընկերոջըՀաճախակի տրվող հարցեր
- Վերականգնման ԱրտահայտությունԶրոյացնելՄաքրել տվյալները, ներառյալ ցանցըՕգնեք մեզ թարգմանելով Session֊ը
@@ -626,8 +617,6 @@
Դուք մշտապես և անմիջապես կտեղեկացվեք նոր հաղորդագրությունների մասին՝ օգտագործելով Google-ի ծանուցումների սերվերները:Փոխել անունըԱռանձնացնել սարքը
- Ձեր վերականգնման բառակապակցություն
- Սա ձեր վերականգնման բառակապակցություն է: Դրա միջոցով դուք կարող եք վերականգնել կամ տեղափոխել ձեր Session ID-ն նոր սարք:Ջնջել բոլոր տվյալներըՍա ընդմիշտ կջնջի ձեր հաղորդագրությունները, սեսիաներն ու կոնտակտները:Ցանկանու՞մ եք մաքրել միայն այս սարքը, թե՞ ջնջել ձեր ամբողջ հաշիվը:
@@ -671,7 +660,6 @@
Ընտրեք կրկնօրինակի ֆայլ և մուտքագրեք այն գաղտնաբառը, որով ստեղծվել է:30֊թվանոց գախտնաբառՍա որոշ ժամանակ է տևում, կցանկանա՞ք բաց թողնել:
- Ավելացնել սարքՎերականգնման բառակապակցությունՍկանավորել QR ԿոդըԱնցեք Կարգավորումներ → Վերականգնման Բառակապակցություն՝ ձեր QR կոդը ցուցադրելու համար:
@@ -682,7 +670,6 @@
Դանդաղ ռեժիմԴուք մշտապես և անմիջապես կտեղեկացվեք նոր հաղորդագրությունների մասին՝ օգտագործելով Google-ի ծանուցումների սերվերները:Session-ը երբեմն, ֆոնային կստուգի նոր հաղորդագրությունների առկայությունը:
- Գաղտնի արտահայտությունSession֊ը արգելափակված էՀպեք՝ ապակողպելու համարՄուտքագրե՛ք կեղծանունը
diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml
index 25b13ebbb6..884840f851 100644
--- a/app/src/main/res/values-in-rID/strings.xml
+++ b/app/src/main/res/values-in-rID/strings.xml
@@ -414,16 +414,16 @@
URL salahSalin ke clipboardBerikutnya
- Ucapkan halo pada Session ID anda
- Session ID adalah alamat unik yang bisa digunakan untuk mengontak anda. Tanpa koneksi dengan identitas asli, Session ID anda didesain bersifat anonim dan rahasia.
+
+
Memulihkan akun AndaMasukkan kata pemulihan yang diberikan saat anda masuk untuk memulihkan akun anda.Masukan kata pemulihan
- Pilih nama yang ditampilkan
- Ini akan menjadi nama anda ketika menggunakan Session. Bisa merupakan nama asli, alias, atau apapun yang anda suka.
- Masukkan nama
- Pilih nama yang ditampilkan
- Pilih nama yang lebih pendek
+ Pilih nama yang ditampilkan
+ Ini akan menjadi nama anda ketika menggunakan Session. Bisa merupakan nama asli, alias, atau apapun yang anda suka.
+ Masukkan nama
+ Pilih nama yang ditampilkan
+ Pilih nama yang lebih pendekDirekomendasikanPilih salah satu opsiAnda belum memiliki kontak
@@ -431,10 +431,6 @@
Apakah anda yakin ingin meninggalkan grup ini?"Tidak dapat meninggalkan grup"Percakapan dihapus
- Kata pemulihan anda
- Inilah kata pemulihan anda
- Tekan untuk melihat
- Hampir selesai! 80%AndaTujuanSelengkapnya
diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml
index 25b13ebbb6..bee0d39655 100644
--- a/app/src/main/res/values-in/strings.xml
+++ b/app/src/main/res/values-in/strings.xml
@@ -414,16 +414,14 @@
URL salahSalin ke clipboardBerikutnya
- Ucapkan halo pada Session ID anda
- Session ID adalah alamat unik yang bisa digunakan untuk mengontak anda. Tanpa koneksi dengan identitas asli, Session ID anda didesain bersifat anonim dan rahasia.Memulihkan akun AndaMasukkan kata pemulihan yang diberikan saat anda masuk untuk memulihkan akun anda.Masukan kata pemulihan
- Pilih nama yang ditampilkan
- Ini akan menjadi nama anda ketika menggunakan Session. Bisa merupakan nama asli, alias, atau apapun yang anda suka.
- Masukkan nama
- Pilih nama yang ditampilkan
- Pilih nama yang lebih pendek
+ Pilih nama yang ditampilkan
+ Ini akan menjadi nama anda ketika menggunakan Session. Bisa merupakan nama asli, alias, atau apapun yang anda suka.
+ Masukkan nama
+ Pilih nama yang ditampilkan
+ Pilih nama yang lebih pendekDirekomendasikanPilih salah satu opsiAnda belum memiliki kontak
@@ -431,10 +429,6 @@
Apakah anda yakin ingin meninggalkan grup ini?"Tidak dapat meninggalkan grup"Percakapan dihapus
- Kata pemulihan anda
- Inilah kata pemulihan anda
- Tekan untuk melihat
- Hampir selesai! 80%AndaTujuanSelengkapnya
diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml
index 113eaf994d..1b887b708b 100644
--- a/app/src/main/res/values-it-rIT/strings.xml
+++ b/app/src/main/res/values-it-rIT/strings.xml
@@ -531,24 +531,21 @@ scambia un altro messaggio!
ID Sessione non validoAnnullaIl tuo ID Sessione
- La tua Sessione inizia qui...
- Crea ID Sessione
- Continua la SessioneCos\'è Session?È un\'app di messaggistica decentralizzata e crittografataQuindi non raccoglie informazioni personali o metadati di conversazione? Come funziona?Utilizza una combinazione di tecnologie avanzate come instradamento anonimo e crittografia end-to-end.Gli amici non lasciano che i propri amici utilizzino app di messaggistica compromesse. Benvenuto/a.
- Ecco il tuo ID Sessione
- L\'ID Sessione è l\'indirizzo univoco che le persone possono utilizzare per contattarti su Session. L\'ID Sessione permette di eliminare ogni connessione con la tua identità reale: l\'ID Sessione è completamente anonimo e privato.
+
+
Ripristina il tuo accountInserisci la frase di recupero che ti è stata data quando ti sei registrato per ripristinare il tuo account.Inserisci la frase di recupero
- Scegli il nome da visualizzare
- Questo sarà il tuo nome quando usi una Sessione. Può essere il tuo vero nome, un soprannome o qualsiasi altra cosa.
- Inserisci il nome da visualizzare
- Scegli il nome da visualizzare
- Scegli un nome più breve
+ Scegli il nome da visualizzare
+ Questo sarà il tuo nome quando usi una Sessione. Può essere il tuo vero nome, un soprannome o qualsiasi altra cosa.
+ Inserisci il nome da visualizzare
+ Scegli il nome da visualizzare
+ Scegli un nome più breveConsigliatoScegli un\'opzioneNon hai ancora nessun contatto
@@ -557,11 +554,6 @@ scambia un altro messaggio!
"Impossibile lasciare il gruppo"Sei sicuro di voler eliminare questa conversazione?Conversazione eliminata
- Frase di recupero
- La frase di recupero
- La frase di recupero è la chiave principale per l\'ID Sessione: puoi usarla per ripristinare l\'ID Sessione se perdi l\'accesso al dispositivo. Conserva la frase di recupero in un luogo sicuro e non rivelarla a nessuno.
- Tieni premuto per rivelare
- Hai quasi finito! 80%Proteggi il tuo account salvando la frase di recuperoTocca e tieni premute le parole redatte per rivelare la frase di recupero, salva in modo sicuro per proteggere il tuo ID Sessione.Assicurati di salvare la frase di recupero in un luogo sicuro
@@ -606,7 +598,6 @@ scambia un altro messaggio!
DispositiviInvita un amicoFAQ
- Frase di recuperoElimina datiCancella i dati e la reteAiutaci a tradurre Session
@@ -619,8 +610,6 @@ scambia un altro messaggio!
Riceverai notifiche di nuovi messaggi in modo affidabile e immediato utilizzando i server di notifica di Google.Cambia nomeScollega dispositivo
- Frase di recupero
- Questa è la tua frase di recupero. Usala per ripristinare o migrare l\'ID Sessione a un nuovo dispositivo.Elimina tutti i datiCiò eliminerà permanentemente i tuoi messaggi, sessioni e contatti.Vuoi formattare solo questo dispositivo o cancellare del tutto l\'account?
@@ -664,7 +653,6 @@ scambia un altro messaggio!
Selezionare un file di backup ed inserire la passphrase con cui è stato creato.Frase di recupero di 30 caratteriQuesto sta impiegando un po\' di tempo, vorresti saltare?
- Collega dispositivoFrase di recuperoScansiona codice QRVai su Impostazioni → Frase di recupero sul tuo altro dispositivo per mostrare il tuo codice QR.
@@ -675,7 +663,6 @@ scambia un altro messaggio!
Modalità LentaRiceverai notifiche di nuovi messaggi in modo affidabile e immediato utilizzando i server di notifica di Google.Session controllerà di tanto in tanto la presenza di nuovi messaggi in background.
- Frase di recuperoSession è BloccatoTocca per SbloccareInserisci un nickname
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 113eaf994d..1b887b708b 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -531,24 +531,21 @@ scambia un altro messaggio!
ID Sessione non validoAnnullaIl tuo ID Sessione
- La tua Sessione inizia qui...
- Crea ID Sessione
- Continua la SessioneCos\'è Session?È un\'app di messaggistica decentralizzata e crittografataQuindi non raccoglie informazioni personali o metadati di conversazione? Come funziona?Utilizza una combinazione di tecnologie avanzate come instradamento anonimo e crittografia end-to-end.Gli amici non lasciano che i propri amici utilizzino app di messaggistica compromesse. Benvenuto/a.
- Ecco il tuo ID Sessione
- L\'ID Sessione è l\'indirizzo univoco che le persone possono utilizzare per contattarti su Session. L\'ID Sessione permette di eliminare ogni connessione con la tua identità reale: l\'ID Sessione è completamente anonimo e privato.
+
+
Ripristina il tuo accountInserisci la frase di recupero che ti è stata data quando ti sei registrato per ripristinare il tuo account.Inserisci la frase di recupero
- Scegli il nome da visualizzare
- Questo sarà il tuo nome quando usi una Sessione. Può essere il tuo vero nome, un soprannome o qualsiasi altra cosa.
- Inserisci il nome da visualizzare
- Scegli il nome da visualizzare
- Scegli un nome più breve
+ Scegli il nome da visualizzare
+ Questo sarà il tuo nome quando usi una Sessione. Può essere il tuo vero nome, un soprannome o qualsiasi altra cosa.
+ Inserisci il nome da visualizzare
+ Scegli il nome da visualizzare
+ Scegli un nome più breveConsigliatoScegli un\'opzioneNon hai ancora nessun contatto
@@ -557,11 +554,6 @@ scambia un altro messaggio!
"Impossibile lasciare il gruppo"Sei sicuro di voler eliminare questa conversazione?Conversazione eliminata
- Frase di recupero
- La frase di recupero
- La frase di recupero è la chiave principale per l\'ID Sessione: puoi usarla per ripristinare l\'ID Sessione se perdi l\'accesso al dispositivo. Conserva la frase di recupero in un luogo sicuro e non rivelarla a nessuno.
- Tieni premuto per rivelare
- Hai quasi finito! 80%Proteggi il tuo account salvando la frase di recuperoTocca e tieni premute le parole redatte per rivelare la frase di recupero, salva in modo sicuro per proteggere il tuo ID Sessione.Assicurati di salvare la frase di recupero in un luogo sicuro
@@ -606,7 +598,6 @@ scambia un altro messaggio!
DispositiviInvita un amicoFAQ
- Frase di recuperoElimina datiCancella i dati e la reteAiutaci a tradurre Session
@@ -619,8 +610,6 @@ scambia un altro messaggio!
Riceverai notifiche di nuovi messaggi in modo affidabile e immediato utilizzando i server di notifica di Google.Cambia nomeScollega dispositivo
- Frase di recupero
- Questa è la tua frase di recupero. Usala per ripristinare o migrare l\'ID Sessione a un nuovo dispositivo.Elimina tutti i datiCiò eliminerà permanentemente i tuoi messaggi, sessioni e contatti.Vuoi formattare solo questo dispositivo o cancellare del tutto l\'account?
@@ -664,7 +653,6 @@ scambia un altro messaggio!
Selezionare un file di backup ed inserire la passphrase con cui è stato creato.Frase di recupero di 30 caratteriQuesto sta impiegando un po\' di tempo, vorresti saltare?
- Collega dispositivoFrase di recuperoScansiona codice QRVai su Impostazioni → Frase di recupero sul tuo altro dispositivo per mostrare il tuo codice QR.
@@ -675,7 +663,6 @@ scambia un altro messaggio!
Modalità LentaRiceverai notifiche di nuovi messaggi in modo affidabile e immediato utilizzando i server di notifica di Google.Session controllerà di tanto in tanto la presenza di nuovi messaggi in background.
- Frase di recuperoSession è BloccatoTocca per SbloccareInserisci un nickname
diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml
index 3e86ad1800..be7b7e36be 100644
--- a/app/src/main/res/values-ja-rJP/strings.xml
+++ b/app/src/main/res/values-ja-rJP/strings.xml
@@ -515,24 +515,21 @@
Session ID が無効です取り消すあなたの Session ID
- ここから Session が始まります...
- Session ID を作成する
- Session を続けるSession とは?分散型の暗号化されたメッセージングアプリです個人情報や会話のメタデータは収集されませんか?どのように機能しますか?高度な匿名ルーティングとエンドツーエンドの暗号化テクノロジーを組み合わせて使用します。友人は、セキュリティ侵害されたメッセンジャーを自らの友人に使用させません。どういたしまして。
- Session ID をご紹介します
- Session ID は、Session で連絡を取るために使用できる一意のアドレスです。本当のアイデンティティに関係なく、あなたの Session ID は設計上完全に匿名でプライベートです。
+
+
アカウントを復元するアカウントを復元するためにサインアップしたときに与えられたリカバリーフレーズを入力します。リカバリーフレーズを入力してください
- 表示名を選択してください
- これは、Session を使用するときの名前になります。あなたの本当の名前、エイリアス、またはあなたが好きな他のものに設定することができます。
- 表示名を入力してください
- 表示名を選択してください
- 短い表示名を選択してください
+ 表示名を選択してください
+ これは、Session を使用するときの名前になります。あなたの本当の名前、エイリアス、またはあなたが好きな他のものに設定することができます。
+ 表示名を入力してください
+ 表示名を選択してください
+ 短い表示名を選択してくださいオススメオプションを選択してくださいまだ連絡先がありません
@@ -541,11 +538,6 @@
"グループを脱退できませんでした"この会話を削除してもよろしいですか?会話を削除しました
- あなたのリカバリーフレーズ
- リカバリーフレーズに合致する
- リカバリーフレーズは、Session ID のマスターキーです。デバイスにアクセスできなくなった場合、これを使用して Session ID を復元できます。リカバリーフレーズを安全な場所に保管し、誰にも教えないでください。
- 明らかにする
- あと少しで終了です。80%リカバリーフレーズを保存してアカウントを保護する編集された単語をタップして長押ししてリカバリーフレーズを表示し、それを安全に保管して Session ID を保護します。リカバリーフレーズは安全な場所に保管してください
@@ -590,7 +582,6 @@
デバイス友達を招待よくある質問
- リカバリーフレーズデータを消去するネットワークを含むデータを消去セッションの翻訳にご協力ください
@@ -603,8 +594,6 @@
Googleの通知サーバーを使用して、新しいメッセージが確実かつ即座に通知されます。名前を変更するデバイスのリンクを解除する
- あなたのリカバリーフレーズ
- これはあなたのリカバリーフレーズです。これにより、Session ID を新しいデバイスに復元または移行できます。すべてのデータを消去するこれにより、メッセージ、Session、連絡先が完全に削除されます。この端末のみを消去するか、アカウント全体を削除しますか?
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 3e86ad1800..be7b7e36be 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -515,24 +515,21 @@
Session ID が無効です取り消すあなたの Session ID
- ここから Session が始まります...
- Session ID を作成する
- Session を続けるSession とは?分散型の暗号化されたメッセージングアプリです個人情報や会話のメタデータは収集されませんか?どのように機能しますか?高度な匿名ルーティングとエンドツーエンドの暗号化テクノロジーを組み合わせて使用します。友人は、セキュリティ侵害されたメッセンジャーを自らの友人に使用させません。どういたしまして。
- Session ID をご紹介します
- Session ID は、Session で連絡を取るために使用できる一意のアドレスです。本当のアイデンティティに関係なく、あなたの Session ID は設計上完全に匿名でプライベートです。
+
+
アカウントを復元するアカウントを復元するためにサインアップしたときに与えられたリカバリーフレーズを入力します。リカバリーフレーズを入力してください
- 表示名を選択してください
- これは、Session を使用するときの名前になります。あなたの本当の名前、エイリアス、またはあなたが好きな他のものに設定することができます。
- 表示名を入力してください
- 表示名を選択してください
- 短い表示名を選択してください
+ 表示名を選択してください
+ これは、Session を使用するときの名前になります。あなたの本当の名前、エイリアス、またはあなたが好きな他のものに設定することができます。
+ 表示名を入力してください
+ 表示名を選択してください
+ 短い表示名を選択してくださいオススメオプションを選択してくださいまだ連絡先がありません
@@ -541,11 +538,6 @@
"グループを脱退できませんでした"この会話を削除してもよろしいですか?会話を削除しました
- あなたのリカバリーフレーズ
- リカバリーフレーズに合致する
- リカバリーフレーズは、Session ID のマスターキーです。デバイスにアクセスできなくなった場合、これを使用して Session ID を復元できます。リカバリーフレーズを安全な場所に保管し、誰にも教えないでください。
- 明らかにする
- あと少しで終了です。80%リカバリーフレーズを保存してアカウントを保護する編集された単語をタップして長押ししてリカバリーフレーズを表示し、それを安全に保管して Session ID を保護します。リカバリーフレーズは安全な場所に保管してください
@@ -590,7 +582,6 @@
デバイス友達を招待よくある質問
- リカバリーフレーズデータを消去するネットワークを含むデータを消去セッションの翻訳にご協力ください
@@ -603,8 +594,6 @@
Googleの通知サーバーを使用して、新しいメッセージが確実かつ即座に通知されます。名前を変更するデバイスのリンクを解除する
- あなたのリカバリーフレーズ
- これはあなたのリカバリーフレーズです。これにより、Session ID を新しいデバイスに復元または移行できます。すべてのデータを消去するこれにより、メッセージ、Session、連絡先が完全に削除されます。この端末のみを消去するか、アカウント全体を削除しますか?
diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml
index a96220650e..a106740eb4 100644
--- a/app/src/main/res/values-ko-rKR/strings.xml
+++ b/app/src/main/res/values-ko-rKR/strings.xml
@@ -409,7 +409,6 @@
당신의 세션 ID아직 연락처가 없습니다세션 시작하기
- 당신의 복구 코드Session 분산 네트워크의 여러 서비스 노드를 통해 메시지를 분산해 IP를 숨깁니다. 이들이 현재 연결을 분산하는 국가입니다:당신목적지
@@ -422,13 +421,10 @@
알림친구 초대자주 하는 질문
- 복구 코드데이터 지우기세션을 번역하는 데 기여하기알림개인정보
- 당신의 복구 코드
- 이것은 당신의 복구 코드입니다. 이것으로 세션 ID를 새 장치로 복원하거나 이동할 수 있습니다.메시지, 세션 및 연락처가 영구적으로 삭제됩니다.QR 코드내 QR 코드 보기
@@ -441,7 +437,6 @@
멤버 추가복구 코드QR 코드 스캔
- 복구 코드모두멘션만피드백/설문 조사
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index a96220650e..a106740eb4 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -409,7 +409,6 @@
당신의 세션 ID아직 연락처가 없습니다세션 시작하기
- 당신의 복구 코드Session 분산 네트워크의 여러 서비스 노드를 통해 메시지를 분산해 IP를 숨깁니다. 이들이 현재 연결을 분산하는 국가입니다:당신목적지
@@ -422,13 +421,10 @@
알림친구 초대자주 하는 질문
- 복구 코드데이터 지우기세션을 번역하는 데 기여하기알림개인정보
- 당신의 복구 코드
- 이것은 당신의 복구 코드입니다. 이것으로 세션 ID를 새 장치로 복원하거나 이동할 수 있습니다.메시지, 세션 및 연락처가 영구적으로 삭제됩니다.QR 코드내 QR 코드 보기
@@ -441,7 +437,6 @@
멤버 추가복구 코드QR 코드 스캔
- 복구 코드모두멘션만피드백/설문 조사
diff --git a/app/src/main/res/values-lt-rLT/strings.xml b/app/src/main/res/values-lt-rLT/strings.xml
index 0500157345..3fa2b62c82 100644
--- a/app/src/main/res/values-lt-rLT/strings.xml
+++ b/app/src/main/res/values-lt-rLT/strings.xml
@@ -548,23 +548,20 @@
Neteisingas Session IDAtsisakytiJūsų Session ID
- Jūsų Session prasideda čia...
- Susikurti Session ID
- Tęsti savo SessionKas yra Session?Tai – decentralizuota, šifruota pokalbių programėlėJi nerenka mano asmeninės informacijos ar mano pokalbių metaduomenų? Kaip ji veikia?Naudodama išplėstinio anoniminio nukreipimo ir ištisinio šifravimo technologijų kombinaciją.Draugai neleidžia savo draugams naudotis į pavojų statančiomis programėlėmis. Prašom.
- Pasisveikinkite su savo Session ID
- Jūsų Session ID yra unikalus adresas, kurį žmonės gali naudoti, kad susisiektų su jumis per Session programėlę. Neturėdamas jokių sąsajų su jūsų tikrąja tapatybe, jūsų Session ID yra tyčia visiškai anoniminis ir privatus.
+
+
Atkurkite savo paskyrąĮveskite savo atkūrimo frazę
- Pasirinkite savo rodomą vardą
- Tai bus jūsų vardas, kai naudositės Session. Tai gali būti jūsų tikras vardas, slapyvardis ar bet kas kita.
- Įveskite pasirinktą rodomą vardą
- Pasirinkite rodomą vardą
- Pasirinkite trumpesnį rodomą vardą
+ Pasirinkite savo rodomą vardą
+ Tai bus jūsų vardas, kai naudositės Session. Tai gali būti jūsų tikras vardas, slapyvardis ar bet kas kita.
+ Įveskite pasirinktą rodomą vardą
+ Pasirinkite rodomą vardą
+ Pasirinkite trumpesnį rodomą vardąRekomenduojamaPasirinkite parinktįKol kas neturite jokių adresatų
@@ -572,10 +569,6 @@
"Nepavyko išeiti iš grupės"Ar tikrai norite ištrinti šį pokalbį?Pokalbis ištrintas
- Jūsų atkūrimo frazė
- Pasitikite savo atkūrimo frazę
- Jūsų atkūrimo frazė yra pagrindinis raktas į jūsų Session ID — galite ją naudoti, kad atkurtumėte savo Session ID tuo atveju, jei prarasite prieigą prie savo įrenginio. Laikykite savo atkūrimo frazę saugioje vietoje ir niekam jos nerodykite.
- Beveik užbaigėte! 80%Apsaugokite savo paskyrą įsirašydami atkūrimo frazęBakstelėkite ir laikykite ant redaguotų žodžių, kad būtų atskleista jūsų atkūrimo frazė. Tuomet, laikykite ją saugioje vietoje, kad apsaugotumėte savo Session ID.Užtikrinkite, kad laikytumėte savo atkūrimo frazę saugioje vietoje
@@ -611,7 +604,6 @@
PranešimaiPokalbiaiĮrenginiai
- Atkūrimo frazėIšvalyti duomenisPadėkite išversti SessionPranešimai
@@ -623,8 +615,6 @@
Jums bus nedelsiant ir patikimai pranešama apie naujas žinutes, naudojant „Google“ pranešimų serverius.Keisti pavadinimąAtsieti įrenginį
- Jūsų atkūrimo frazė
- Tai yra jūsų atkūrimo frazė. Naudodami ją, galite atkurti ir perkelti savo Session ID į naują įrenginį.Išvalyti visus duomenisTai visam laikui ištrins jūsų žinutes, seansus ir adresatus.Tik ištrinti
@@ -658,7 +648,6 @@
IšsamiauNepavyko aktyvuoti atsarginių kopijų. Bandykite dar kartą arba susisiekite su palaikymu.Atkurti atsarginę kopiją
- Susieti įrenginįAtkūrimo frazėSkenuoti QR kodąArba prisijunkite prie vienos iš šių…
@@ -668,7 +657,6 @@
Lėta veiksenaJums bus nedelsiant ir patikimai pranešama apie naujas žinutes, naudojant „Google“ pranešimų serverius.Session programėlė retkarčiais fone tikrins, ar yra naujų žinučių.
- Atkūrimo frazėSession yra užrakintaBakstelėkite norėdami atrakintiĮveskite slapyvardį
diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml
index 0500157345..3fa2b62c82 100644
--- a/app/src/main/res/values-lt/strings.xml
+++ b/app/src/main/res/values-lt/strings.xml
@@ -548,23 +548,20 @@
Neteisingas Session IDAtsisakytiJūsų Session ID
- Jūsų Session prasideda čia...
- Susikurti Session ID
- Tęsti savo SessionKas yra Session?Tai – decentralizuota, šifruota pokalbių programėlėJi nerenka mano asmeninės informacijos ar mano pokalbių metaduomenų? Kaip ji veikia?Naudodama išplėstinio anoniminio nukreipimo ir ištisinio šifravimo technologijų kombinaciją.Draugai neleidžia savo draugams naudotis į pavojų statančiomis programėlėmis. Prašom.
- Pasisveikinkite su savo Session ID
- Jūsų Session ID yra unikalus adresas, kurį žmonės gali naudoti, kad susisiektų su jumis per Session programėlę. Neturėdamas jokių sąsajų su jūsų tikrąja tapatybe, jūsų Session ID yra tyčia visiškai anoniminis ir privatus.
+
+
Atkurkite savo paskyrąĮveskite savo atkūrimo frazę
- Pasirinkite savo rodomą vardą
- Tai bus jūsų vardas, kai naudositės Session. Tai gali būti jūsų tikras vardas, slapyvardis ar bet kas kita.
- Įveskite pasirinktą rodomą vardą
- Pasirinkite rodomą vardą
- Pasirinkite trumpesnį rodomą vardą
+ Pasirinkite savo rodomą vardą
+ Tai bus jūsų vardas, kai naudositės Session. Tai gali būti jūsų tikras vardas, slapyvardis ar bet kas kita.
+ Įveskite pasirinktą rodomą vardą
+ Pasirinkite rodomą vardą
+ Pasirinkite trumpesnį rodomą vardąRekomenduojamaPasirinkite parinktįKol kas neturite jokių adresatų
@@ -572,10 +569,6 @@
"Nepavyko išeiti iš grupės"Ar tikrai norite ištrinti šį pokalbį?Pokalbis ištrintas
- Jūsų atkūrimo frazė
- Pasitikite savo atkūrimo frazę
- Jūsų atkūrimo frazė yra pagrindinis raktas į jūsų Session ID — galite ją naudoti, kad atkurtumėte savo Session ID tuo atveju, jei prarasite prieigą prie savo įrenginio. Laikykite savo atkūrimo frazę saugioje vietoje ir niekam jos nerodykite.
- Beveik užbaigėte! 80%Apsaugokite savo paskyrą įsirašydami atkūrimo frazęBakstelėkite ir laikykite ant redaguotų žodžių, kad būtų atskleista jūsų atkūrimo frazė. Tuomet, laikykite ją saugioje vietoje, kad apsaugotumėte savo Session ID.Užtikrinkite, kad laikytumėte savo atkūrimo frazę saugioje vietoje
@@ -611,7 +604,6 @@
PranešimaiPokalbiaiĮrenginiai
- Atkūrimo frazėIšvalyti duomenisPadėkite išversti SessionPranešimai
@@ -623,8 +615,6 @@
Jums bus nedelsiant ir patikimai pranešama apie naujas žinutes, naudojant „Google“ pranešimų serverius.Keisti pavadinimąAtsieti įrenginį
- Jūsų atkūrimo frazė
- Tai yra jūsų atkūrimo frazė. Naudodami ją, galite atkurti ir perkelti savo Session ID į naują įrenginį.Išvalyti visus duomenisTai visam laikui ištrins jūsų žinutes, seansus ir adresatus.Tik ištrinti
@@ -658,7 +648,6 @@
IšsamiauNepavyko aktyvuoti atsarginių kopijų. Bandykite dar kartą arba susisiekite su palaikymu.Atkurti atsarginę kopiją
- Susieti įrenginįAtkūrimo frazėSkenuoti QR kodąArba prisijunkite prie vienos iš šių…
@@ -668,7 +657,6 @@
Lėta veiksenaJums bus nedelsiant ir patikimai pranešama apie naujas žinutes, naudojant „Google“ pranešimų serverius.Session programėlė retkarčiais fone tikrins, ar yra naujų žinučių.
- Atkūrimo frazėSession yra užrakintaBakstelėkite norėdami atrakintiĮveskite slapyvardį
diff --git a/app/src/main/res/values-lv-rLV/strings.xml b/app/src/main/res/values-lv-rLV/strings.xml
index 2e6bd9d0e9..cb8edbaea4 100644
--- a/app/src/main/res/values-lv-rLV/strings.xml
+++ b/app/src/main/res/values-lv-rLV/strings.xml
@@ -187,7 +187,6 @@
IerīcesUzaicināt drauguBiežāk uzdotie jautājumi
- Atjaunošanas frāzeIzdzēst datusPalīdzi mums pārtulkot SessionPaziņojumi
diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml
index 2e6bd9d0e9..cb8edbaea4 100644
--- a/app/src/main/res/values-lv/strings.xml
+++ b/app/src/main/res/values-lv/strings.xml
@@ -187,7 +187,6 @@
IerīcesUzaicināt drauguBiežāk uzdotie jautājumi
- Atjaunošanas frāzeIzdzēst datusPalīdzi mums pārtulkot SessionPaziņojumi
diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml
index 4ebaa04284..5ac97381e6 100644
--- a/app/src/main/res/values-nb-rNO/strings.xml
+++ b/app/src/main/res/values-nb-rNO/strings.xml
@@ -530,24 +530,21 @@ nøkkelutvekslingsmelding.
Ugyldig Session IDAvbrytDin Session ID
- Din Session begynner her...
- Opprett Session-ID
- Fortsett din SessionHva er Session?Det er en desentralisert, kryptert meldingsappSå den henter ikke min personlige informasjon eller samtaletadata? Hvordan virker det?Bruker en kombinasjon av avansert anonym ruting og ende-til-ende-krypteringsteknologi.Venner lar ikke venner bruke kompromitterte meldinger. Du er velkommen.
- Si hei til din Session-ID
- Din Session-ID er den unike adressen folk kan bruke for å kontakte deg på Session. Uten en forbindelse til din virkelige identitet er din Session-ID laget for å være fullstendig anonym og privat.
+
+
Gjenopprett kontoen dinAngi gjenopprettingsfrasen som ble gitt til deg når du registrerte deg for å gjenopprette din konto.Skriv inn din gjenopprettelsesfrase
- Velg ditt visningsnavn
- Dette vil være navnet ditt når du bruker Session. Det kan være ditt virkelige navn, en alias, eller alt annet du vil.
- Skriv inn et visningsnavn
- Vennligst velg et visningsnavn
- Vennligst velg et kortere visningsnavn
+ Velg ditt visningsnavn
+ Dette vil være navnet ditt når du bruker Session. Det kan være ditt virkelige navn, en alias, eller alt annet du vil.
+ Skriv inn et visningsnavn
+ Vennligst velg et visningsnavn
+ Vennligst velg et kortere visningsnavnAnbefaltVennligst velg et alternativDu har ingen kontakter ennå
@@ -556,11 +553,6 @@ nøkkelutvekslingsmelding.
"Kunne ikke forlate gruppen"Er du sikker på at du vil slette denne samtalen?Samtalen slettet
- Din gjenopprettingsfrase
- Møt din gjenopprettingsfrase
- Gjenopprettelsesfrasen din er hovednøkkelen til Session-IDen din – du kan bruke den for å gjenopprette Session-IDen din dersom du mister tilgang til enheten din. Arkiver gjenopprettelsesfrasen din på et trygt sted, og ikke gi den til noen.
- Hold for å vise
- Du er nesten ferdig! 80%Sikre kontoen din ved å lagre din gjenopprettingsfraseTrykk og hold inne de overflødige ordene for å hente gjenopprettingsfrasen din, og lagre den trygt å sikre din Session-ID.Pass på å lagre gjenopprettingsfrasen på et sikkert sted
@@ -605,7 +597,6 @@ nøkkelutvekslingsmelding.
EnheterInviter en vennOfte Stilte Spørsmål
- GjenopprettingsfraseFjern dataFjern data inkludert nettverkHjelp oss med å oversette Session
@@ -618,8 +609,6 @@ nøkkelutvekslingsmelding.
Du vil bli varslet om nye meldinger på en pålitelig måte, og umiddelbart ved hjelp av Googles varslingsservere.Endre navnKoble fra enhet
- Din gjenopprettingsfrase
- Dette er din gjenopprettingsfrase, med den, du kan gjenopprette eller overføre din Session-ID til en ny enhet.Fjern alle dataDette vil permanent slette dine meldinger, økter og kontakter.Ønsker du å rense kun denne enheten, eller slette hele kontoen din?
@@ -663,7 +652,6 @@ nøkkelutvekslingsmelding.
Velg en sikkerhetskopifil og skriv inn passordfrasen den ble opprettet med.30-digit passphraseDette tar en stund, vil du hoppe over?
- Koble til en enhetGjenopprettingsfraseSkann QR-kodeNaviger til innstillinger → Gjenopprettingsfrasen på din andre enhet for å vise QR-koden.
@@ -674,7 +662,6 @@ nøkkelutvekslingsmelding.
Langsom ModusDu vil bli varslet om nye meldinger på en pålitelig måte, og umiddelbart ved hjelp av Googles varslingsservere.Session vil av og til sjekke nye meldinger i bakgrunnen.
- GjenopprettingsfraseSession er låstTrykk for å låse oppSkriv inn et kallenavn
diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml
index 4ebaa04284..5ac97381e6 100644
--- a/app/src/main/res/values-nb/strings.xml
+++ b/app/src/main/res/values-nb/strings.xml
@@ -530,24 +530,21 @@ nøkkelutvekslingsmelding.
Ugyldig Session IDAvbrytDin Session ID
- Din Session begynner her...
- Opprett Session-ID
- Fortsett din SessionHva er Session?Det er en desentralisert, kryptert meldingsappSå den henter ikke min personlige informasjon eller samtaletadata? Hvordan virker det?Bruker en kombinasjon av avansert anonym ruting og ende-til-ende-krypteringsteknologi.Venner lar ikke venner bruke kompromitterte meldinger. Du er velkommen.
- Si hei til din Session-ID
- Din Session-ID er den unike adressen folk kan bruke for å kontakte deg på Session. Uten en forbindelse til din virkelige identitet er din Session-ID laget for å være fullstendig anonym og privat.
+
+
Gjenopprett kontoen dinAngi gjenopprettingsfrasen som ble gitt til deg når du registrerte deg for å gjenopprette din konto.Skriv inn din gjenopprettelsesfrase
- Velg ditt visningsnavn
- Dette vil være navnet ditt når du bruker Session. Det kan være ditt virkelige navn, en alias, eller alt annet du vil.
- Skriv inn et visningsnavn
- Vennligst velg et visningsnavn
- Vennligst velg et kortere visningsnavn
+ Velg ditt visningsnavn
+ Dette vil være navnet ditt når du bruker Session. Det kan være ditt virkelige navn, en alias, eller alt annet du vil.
+ Skriv inn et visningsnavn
+ Vennligst velg et visningsnavn
+ Vennligst velg et kortere visningsnavnAnbefaltVennligst velg et alternativDu har ingen kontakter ennå
@@ -556,11 +553,6 @@ nøkkelutvekslingsmelding.
"Kunne ikke forlate gruppen"Er du sikker på at du vil slette denne samtalen?Samtalen slettet
- Din gjenopprettingsfrase
- Møt din gjenopprettingsfrase
- Gjenopprettelsesfrasen din er hovednøkkelen til Session-IDen din – du kan bruke den for å gjenopprette Session-IDen din dersom du mister tilgang til enheten din. Arkiver gjenopprettelsesfrasen din på et trygt sted, og ikke gi den til noen.
- Hold for å vise
- Du er nesten ferdig! 80%Sikre kontoen din ved å lagre din gjenopprettingsfraseTrykk og hold inne de overflødige ordene for å hente gjenopprettingsfrasen din, og lagre den trygt å sikre din Session-ID.Pass på å lagre gjenopprettingsfrasen på et sikkert sted
@@ -605,7 +597,6 @@ nøkkelutvekslingsmelding.
EnheterInviter en vennOfte Stilte Spørsmål
- GjenopprettingsfraseFjern dataFjern data inkludert nettverkHjelp oss med å oversette Session
@@ -618,8 +609,6 @@ nøkkelutvekslingsmelding.
Du vil bli varslet om nye meldinger på en pålitelig måte, og umiddelbart ved hjelp av Googles varslingsservere.Endre navnKoble fra enhet
- Din gjenopprettingsfrase
- Dette er din gjenopprettingsfrase, med den, du kan gjenopprette eller overføre din Session-ID til en ny enhet.Fjern alle dataDette vil permanent slette dine meldinger, økter og kontakter.Ønsker du å rense kun denne enheten, eller slette hele kontoen din?
@@ -663,7 +652,6 @@ nøkkelutvekslingsmelding.
Velg en sikkerhetskopifil og skriv inn passordfrasen den ble opprettet med.30-digit passphraseDette tar en stund, vil du hoppe over?
- Koble til en enhetGjenopprettingsfraseSkann QR-kodeNaviger til innstillinger → Gjenopprettingsfrasen på din andre enhet for å vise QR-koden.
@@ -674,7 +662,6 @@ nøkkelutvekslingsmelding.
Langsom ModusDu vil bli varslet om nye meldinger på en pålitelig måte, og umiddelbart ved hjelp av Googles varslingsservere.Session vil av og til sjekke nye meldinger i bakgrunnen.
- GjenopprettingsfraseSession er låstTrykk for å låse oppSkriv inn et kallenavn
diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml
index 50e2fec37b..69ef789887 100644
--- a/app/src/main/res/values-nl-rNL/strings.xml
+++ b/app/src/main/res/values-nl-rNL/strings.xml
@@ -531,24 +531,21 @@
Ongeldige Sessie-IDAnnulerenUw Sessie-ID
- Uw sessie begint hier...
- Sessie-ID aanmaken
- Doorgaan met uw sessieWat is Sessie?Het is een gedecentraliseerde, versleutelde berichten-appDus het verzamelt geen persoonlijke informatie of de metagegevens van mijn gesprek? Hoe werkt het?Met behulp van een combinatie van geavanceerde anonieme routing en end-to-end encryptietechnologieën.Vrienden laten vrienden geen gecomprimeerde berichten apps gebruiken. Graag gedaan.
- Zeg hallo tegen uw Sessie-ID
- Uw Sessie-ID is het unieke adres dat mensen kunnen gebruiken om contact met u op te nemen via Sessie. Zonder verbinding met je echte identiteit, is je Sessie-ID volledig anoniem en privé.
+
+
Uw account herstellenVoer de herstel zin in die u hebt gekregen toen u uwzelf hebt aangemeld om uw account te herstellen.Voer uw herstel zin in
- Kies je weergavenaam
- Dit is je naam wanneer je Sessie gebruikt. Het kan je echte naam zijn, een alias, of wat je maar wilt.
- Voer een weergavenaam in
- Kies a.u.b. een weergavenaam
- Kies a.u.b. een kortere weergavenaam
+ Kies je weergavenaam
+ Dit is je naam wanneer je Sessie gebruikt. Het kan je echte naam zijn, een alias, of wat je maar wilt.
+ Voer een weergavenaam in
+ Kies a.u.b. een weergavenaam
+ Kies a.u.b. een kortere weergavenaamAanbevolenGelieve een optie te selecterenU heeft nog geen contactpersonen
@@ -557,11 +554,6 @@
"Kon de groep niet verlaten"Weet u zeker dat u deze groep wilt verlaten?Gesprek verwijderd
- Uw herstel zin
- Maak kennis met uw herstel zin
- Uw herstel zin is de hoofdsleutel van uw Sessie-ID - u kunt deze gebruiken om uw Sessie-ID te herstellen als u de toegang tot uw apparaat verliest. Sla uw herstel zin op op een veilige plaats op en geef het aan niemand anders.
- Ingedrukt houden om te onthullen
- Je bent bijna klaar! 80%Beveilig uw account door uw herstel zin op te slaanHou de herschreven woorden ingedrukt om uw herstelzin te onthullen, en sla het vervolgens veilig op om uw Sessie-ID te beveiligen.Zorg ervoor dat u uw herstel zin op een veilige plek opslaat
@@ -606,7 +598,6 @@
ApparatenNodig een vriend uitVeelgestelde vragen (FAQ)
- Herstel zinGegevens wissenWis Data, Inclusief NetwerkHelp ons om Sessie the vertalen
@@ -619,8 +610,6 @@
U wordt op een op een betrouwbare manier direct op de hoogte gebracht van nieuwe berichten via de notificatieservers van Google.Naam wijzigenApparaat ontkoppelen
- Uw herstel zin
- Dit is uw herstel zin, Hiermee kun je je Sessie-ID herstellen of migreren naar een nieuw apparaat.Wis alle gegevensHiermee worden uw berichten, sessies en contacten permanent verwijderd.Wilt u alleen de data op dit apparaat verwijderen, of wilt u uw hele account verwijderen?
@@ -664,7 +653,6 @@
Selecteer een backup-bestand en voer de wachtwoordzin in waarmee het is gemaakt.Wachtwoordzin met 30 tekensDit duurt een tijdje, wilt u het overslaan?
- Koppel een apparaatHerstel zinQR-code scannenNavigeer naar Instellingen → Herstel zin op je andere apparaat om je QR-code te tonen.
@@ -675,7 +663,6 @@
Langzame modusU wordt op een betrouwbare en directe manier op de hoogte gebracht van nieuwe berichten via Googles notificatieservers.Sessie controleert af en toe op nieuwe berichten op de achtergrond.
- Herstel zinSessie is vergrendeldTik om te ontgrendelenBijnaam invoeren
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 50e2fec37b..69ef789887 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -531,24 +531,21 @@
Ongeldige Sessie-IDAnnulerenUw Sessie-ID
- Uw sessie begint hier...
- Sessie-ID aanmaken
- Doorgaan met uw sessieWat is Sessie?Het is een gedecentraliseerde, versleutelde berichten-appDus het verzamelt geen persoonlijke informatie of de metagegevens van mijn gesprek? Hoe werkt het?Met behulp van een combinatie van geavanceerde anonieme routing en end-to-end encryptietechnologieën.Vrienden laten vrienden geen gecomprimeerde berichten apps gebruiken. Graag gedaan.
- Zeg hallo tegen uw Sessie-ID
- Uw Sessie-ID is het unieke adres dat mensen kunnen gebruiken om contact met u op te nemen via Sessie. Zonder verbinding met je echte identiteit, is je Sessie-ID volledig anoniem en privé.
+
+
Uw account herstellenVoer de herstel zin in die u hebt gekregen toen u uwzelf hebt aangemeld om uw account te herstellen.Voer uw herstel zin in
- Kies je weergavenaam
- Dit is je naam wanneer je Sessie gebruikt. Het kan je echte naam zijn, een alias, of wat je maar wilt.
- Voer een weergavenaam in
- Kies a.u.b. een weergavenaam
- Kies a.u.b. een kortere weergavenaam
+ Kies je weergavenaam
+ Dit is je naam wanneer je Sessie gebruikt. Het kan je echte naam zijn, een alias, of wat je maar wilt.
+ Voer een weergavenaam in
+ Kies a.u.b. een weergavenaam
+ Kies a.u.b. een kortere weergavenaamAanbevolenGelieve een optie te selecterenU heeft nog geen contactpersonen
@@ -557,11 +554,6 @@
"Kon de groep niet verlaten"Weet u zeker dat u deze groep wilt verlaten?Gesprek verwijderd
- Uw herstel zin
- Maak kennis met uw herstel zin
- Uw herstel zin is de hoofdsleutel van uw Sessie-ID - u kunt deze gebruiken om uw Sessie-ID te herstellen als u de toegang tot uw apparaat verliest. Sla uw herstel zin op op een veilige plaats op en geef het aan niemand anders.
- Ingedrukt houden om te onthullen
- Je bent bijna klaar! 80%Beveilig uw account door uw herstel zin op te slaanHou de herschreven woorden ingedrukt om uw herstelzin te onthullen, en sla het vervolgens veilig op om uw Sessie-ID te beveiligen.Zorg ervoor dat u uw herstel zin op een veilige plek opslaat
@@ -606,7 +598,6 @@
ApparatenNodig een vriend uitVeelgestelde vragen (FAQ)
- Herstel zinGegevens wissenWis Data, Inclusief NetwerkHelp ons om Sessie the vertalen
@@ -619,8 +610,6 @@
U wordt op een op een betrouwbare manier direct op de hoogte gebracht van nieuwe berichten via de notificatieservers van Google.Naam wijzigenApparaat ontkoppelen
- Uw herstel zin
- Dit is uw herstel zin, Hiermee kun je je Sessie-ID herstellen of migreren naar een nieuw apparaat.Wis alle gegevensHiermee worden uw berichten, sessies en contacten permanent verwijderd.Wilt u alleen de data op dit apparaat verwijderen, of wilt u uw hele account verwijderen?
@@ -664,7 +653,6 @@
Selecteer een backup-bestand en voer de wachtwoordzin in waarmee het is gemaakt.Wachtwoordzin met 30 tekensDit duurt een tijdje, wilt u het overslaan?
- Koppel een apparaatHerstel zinQR-code scannenNavigeer naar Instellingen → Herstel zin op je andere apparaat om je QR-code te tonen.
@@ -675,7 +663,6 @@
Langzame modusU wordt op een betrouwbare en directe manier op de hoogte gebracht van nieuwe berichten via Googles notificatieservers.Sessie controleert af en toe op nieuwe berichten op de achtergrond.
- Herstel zinSessie is vergrendeldTik om te ontgrendelenBijnaam invoeren
diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml
index 6f9ca55e75..c10ab1efbd 100644
--- a/app/src/main/res/values-pl-rPL/strings.xml
+++ b/app/src/main/res/values-pl-rPL/strings.xml
@@ -553,24 +553,21 @@
Nieprawidłowy identyfikator SessionAnulujTwój identyfikator Session
- Twoja sesja zaczyna się tutaj...
- Utwórz identyfikator Session
- Kontynuuj swoją sesjęCzym jest Session?To zdecentralizowana, szyfrowana aplikacja do przesyłania wiadomościWięc nie zbiera moich danych osobowych ani metadanych z mojej rozmowy? Jak to działa?Wykorzystując połączenie zaawansowanych anonimowych tras i technologii szyfrowania end-to-end.Przyjaciele nie pozwalają przyjaciołom korzystać z niezabezpieczonych komunikatorów. Nie ma za co.
- Przywitaj się z identyfikatorem Session
- Twój identyfikator Session to unikalny adres, za pomocą którego można się z Tobą kontaktować w Session. Bez połączenia z twoją prawdziwą tożsamością, identyfikator Session jest z założenia całkowicie anonimowy i prywatny.
+
+
Przywróć swoje kontoWprowadź frazę odzyskiwania, która została Ci przekazana podczas rejestracji w celu przywrócenia konta.Wpisz swoją frazę odzyskiwania
- Wybierz swoją nazwę wyświetlaną
- To będzie twoje imię, kiedy będziesz używać Session. Może to być twoje prawdziwe imię, pseudonim lub cokolwiek innego, co lubisz.
- Wprowadź wyświetlaną nazwę
- Wybierz wyświetlaną nazwę
- Wybierz krótszą wyświetlaną nazwę
+ Wybierz swoją nazwę wyświetlaną
+ To będzie twoje imię, kiedy będziesz używać Session. Może to być twoje prawdziwe imię, pseudonim lub cokolwiek innego, co lubisz.
+ Wprowadź wyświetlaną nazwę
+ Wybierz wyświetlaną nazwę
+ Wybierz krótszą wyświetlaną nazwęZalecanaWybierz opcjęNie masz jeszcze żadnych kontaktów
@@ -579,11 +576,6 @@
"Nie można opuścić grupy"Czy na pewno chcesz usunąć tę rozmowę?Rozmowa usunięta
- Twoja fraza odzyskiwania
- Poznaj swoją frazę odzyskiwania
- Twoja fraza odzyskiwania jest głównym kluczem do identyfikatora Session - możesz jej użyć do przywrócenia identyfikatora Session, jeśli stracisz dostęp do urządzenia. Przechowuj swoją frazę odzyskiwania w bezpiecznym miejscu i nikomu jej nie udostępniaj.
- Przytrzymaj, aby odsłonić
- Prawie skończyłeś! 80%Zabezpiecz swoje konto, zapisując frazę odzyskiwaniaStuknij i przytrzymaj zredagowane słowa, aby odsłonić frazę odzyskiwania, a następnie przechowuj ją w bezpiecznym miejscu, aby zabezpieczyć identyfikator Session.Pamiętaj, aby przechowywać frazę odzyskiwania w bezpiecznym miejscu
@@ -628,7 +620,6 @@
UrządzeniaZaproś znajomegoFAQ
- Fraza odzyskiwaniaWyczyść daneWyczyść dane łącznie z sieciąPomóż nam w tłumaczeniu Session
@@ -641,8 +632,6 @@
Zostaniesz natychmiast powiadomiony o nowych wiadomościach w niezawodny sposób przy użyciu serwerów powiadomień Google.Zmień nazwęOdłącz urządzenie
- Twoja fraza odzyskiwania
- To jest twoja fraza odzyskiwania. Dzięki niej możesz przywrócić lub przenieść identyfikator Session na nowe urządzenie.Wyczyść wszystkie daneSpowoduje to trwałe usunięcie wiadomości, sesji i kontaktów.Czy chcesz wyczyścić tylko to urządzenie, czy usunąć całe swoje konto?
@@ -686,7 +675,6 @@
Wybierz plik kopii zapasowej i wpisz hasło, z którym został utworzony.Hasło złożone z 30 znakówTo zajmuje chwilę, czy chcesz pominąć?
- Połącz urządzenieFraza odzyskiwaniaSkanuj kod QRPrzejdź do Ustawień → Fraza odzyskiwania na innym urządzeniu, aby wyświetlić kod QR.
@@ -697,7 +685,6 @@
Tryb wolnyZostaniesz natychmiast powiadomiony o nowych wiadomościach w niezawodny sposób przy użyciu serwerów powiadomień Google.Session będzie czasami sprawdzać w tle czy są nowe wiadomości.
- Fraza odzyskiwaniaSession jest zablokowanyDotknij by odblokowaćWpisz pseudonim
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 6f9ca55e75..c10ab1efbd 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -553,24 +553,21 @@
Nieprawidłowy identyfikator SessionAnulujTwój identyfikator Session
- Twoja sesja zaczyna się tutaj...
- Utwórz identyfikator Session
- Kontynuuj swoją sesjęCzym jest Session?To zdecentralizowana, szyfrowana aplikacja do przesyłania wiadomościWięc nie zbiera moich danych osobowych ani metadanych z mojej rozmowy? Jak to działa?Wykorzystując połączenie zaawansowanych anonimowych tras i technologii szyfrowania end-to-end.Przyjaciele nie pozwalają przyjaciołom korzystać z niezabezpieczonych komunikatorów. Nie ma za co.
- Przywitaj się z identyfikatorem Session
- Twój identyfikator Session to unikalny adres, za pomocą którego można się z Tobą kontaktować w Session. Bez połączenia z twoją prawdziwą tożsamością, identyfikator Session jest z założenia całkowicie anonimowy i prywatny.
+
+
Przywróć swoje kontoWprowadź frazę odzyskiwania, która została Ci przekazana podczas rejestracji w celu przywrócenia konta.Wpisz swoją frazę odzyskiwania
- Wybierz swoją nazwę wyświetlaną
- To będzie twoje imię, kiedy będziesz używać Session. Może to być twoje prawdziwe imię, pseudonim lub cokolwiek innego, co lubisz.
- Wprowadź wyświetlaną nazwę
- Wybierz wyświetlaną nazwę
- Wybierz krótszą wyświetlaną nazwę
+ Wybierz swoją nazwę wyświetlaną
+ To będzie twoje imię, kiedy będziesz używać Session. Może to być twoje prawdziwe imię, pseudonim lub cokolwiek innego, co lubisz.
+ Wprowadź wyświetlaną nazwę
+ Wybierz wyświetlaną nazwę
+ Wybierz krótszą wyświetlaną nazwęZalecanaWybierz opcjęNie masz jeszcze żadnych kontaktów
@@ -579,11 +576,6 @@
"Nie można opuścić grupy"Czy na pewno chcesz usunąć tę rozmowę?Rozmowa usunięta
- Twoja fraza odzyskiwania
- Poznaj swoją frazę odzyskiwania
- Twoja fraza odzyskiwania jest głównym kluczem do identyfikatora Session - możesz jej użyć do przywrócenia identyfikatora Session, jeśli stracisz dostęp do urządzenia. Przechowuj swoją frazę odzyskiwania w bezpiecznym miejscu i nikomu jej nie udostępniaj.
- Przytrzymaj, aby odsłonić
- Prawie skończyłeś! 80%Zabezpiecz swoje konto, zapisując frazę odzyskiwaniaStuknij i przytrzymaj zredagowane słowa, aby odsłonić frazę odzyskiwania, a następnie przechowuj ją w bezpiecznym miejscu, aby zabezpieczyć identyfikator Session.Pamiętaj, aby przechowywać frazę odzyskiwania w bezpiecznym miejscu
@@ -628,7 +620,6 @@
UrządzeniaZaproś znajomegoFAQ
- Fraza odzyskiwaniaWyczyść daneWyczyść dane łącznie z sieciąPomóż nam w tłumaczeniu Session
@@ -641,8 +632,6 @@
Zostaniesz natychmiast powiadomiony o nowych wiadomościach w niezawodny sposób przy użyciu serwerów powiadomień Google.Zmień nazwęOdłącz urządzenie
- Twoja fraza odzyskiwania
- To jest twoja fraza odzyskiwania. Dzięki niej możesz przywrócić lub przenieść identyfikator Session na nowe urządzenie.Wyczyść wszystkie daneSpowoduje to trwałe usunięcie wiadomości, sesji i kontaktów.Czy chcesz wyczyścić tylko to urządzenie, czy usunąć całe swoje konto?
@@ -686,7 +675,6 @@
Wybierz plik kopii zapasowej i wpisz hasło, z którym został utworzony.Hasło złożone z 30 znakówTo zajmuje chwilę, czy chcesz pominąć?
- Połącz urządzenieFraza odzyskiwaniaSkanuj kod QRPrzejdź do Ustawień → Fraza odzyskiwania na innym urządzeniu, aby wyświetlić kod QR.
@@ -697,7 +685,6 @@
Tryb wolnyZostaniesz natychmiast powiadomiony o nowych wiadomościach w niezawodny sposób przy użyciu serwerów powiadomień Google.Session będzie czasami sprawdzać w tle czy są nowe wiadomości.
- Fraza odzyskiwaniaSession jest zablokowanyDotknij by odblokowaćWpisz pseudonim
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 6c5540e375..e0273e091e 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -531,24 +531,21 @@
Session ID inválidaCancelarSua Session ID
- Seu Session começa aqui...
- Criar Session ID
- Continuar Seu SessionO que é Session?É um app de mensageria encriptada, descentralizadaEntão ele não coleta minha informação pessoal ou meus metadados de conversa? Como funciona?Usando uma combinação de tecnologias avançadas de roteamento anônimo e encriptação ponta-a-ponta.Amigas(os) não deixam amigas(os) usarem mensageiros comprometidos. De nada.
- Diga olá a sua Session ID
- Sua Session ID é o endereço exclusivo que pessoas podem usar para contactar você em Session. Com nenhuma conexão com sua identidade real, sua Session ID é totalmente anônima e privada por design.
+
+
Restaurar sua contaEntre a frase de recuperação que lhe foi dada quando você fez signup para restaurar sua conta.Entre sua frase de recuperação
- Escolha seu nome de display
- Este será o seu nome quando você usar Session. Pode ser seu nome verdadeiro, um alias, ou qualquer outra coisa que você quiser.
- Entre um nome de display
- Escolha um nome de display
- Escolha um nome de exibição mais curto
+ Escolha seu nome de display
+ Este será o seu nome quando você usar Session. Pode ser seu nome verdadeiro, um alias, ou qualquer outra coisa que você quiser.
+ Entre um nome de display
+ Escolha um nome de display
+ Escolha um nome de exibição mais curtoRecomendadoEscolha uma opçãoVocê ainda não possui contatos
@@ -557,11 +554,6 @@
"Não foi possível sair do grupo"Tem certeza de que deseja excluir esta conversa?Conversa excluída
- Sua frase de recuperação
- Revele sua frase de recuperação
- Sua frase de recuperação é a chave mestra do seu ID Session - você pode usá-la para restaurar seu ID Session se perder o acesso ao seu dispositivo. Armazene sua frase de recuperação em um local seguro e não a entregue a ninguém.
- Segure para revelar
- Você está quase terminando! 80%Proteja sua conta salvando sua frase de recuperaçãoToque e segure as palavras editadas para revelar sua frase de recuperação e armazene-a com segurança para proteger seu ID Session.Guarde sua frase de recuperação em um local seguro
@@ -606,7 +598,6 @@
DispositivosConvide um amigoPerguntas Frequentes
- Frase de RecuperaçãoLimpar DadosLimpar Dados Incluindo RedeAjude-nos a traduzir o Session
@@ -619,8 +610,6 @@
Você será notificado de forma confiável e imediata sobre novas mensagens usando os servidores de notificação da Google.Mudar nomeDeslinkar dispositivo
- Sua Frase de Recuperação
- Esta é sua frase de recuperação. Com ela, você pode restaurar ou migrar sua Session ID para um novo dispositivo.Limpar Todos os DadosIsso excluirá permanentemente suas mensagens, sessões e contatos.Você gostaria de limpar apenas este dispositivo, ou excluir toda sua conta?
@@ -664,7 +653,6 @@
Selecione uma cópia de segurança e coloque a senha frase que foi criada.Senha de 30 dígitosIsto está demorando um pouco, tu gostarias de pular?
- Vincular um DispositivoFrase de RecuperaçãoLer Código QRVá até as configurações → Frase de Recuperação em seu outro dispositivo para mostrar o seu código QR.
@@ -675,7 +663,6 @@
Modo LentoVocê será notificado de forma confiável e imediata sobre novas mensagens usando os servidores de notificação da Google.O session verificará ocasionalmente por novas mensagens em segundo plano.
- Frase de RecuperaçãoSession está TrancadoToque para destrancarDigite um apelido
diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml
index 05fd1e0436..dfc0565b2a 100644
--- a/app/src/main/res/values-pt-rPT/strings.xml
+++ b/app/src/main/res/values-pt-rPT/strings.xml
@@ -526,24 +526,21 @@ foi recebida está corrompida!
ID Session inválidoCancelarSeu ID Session
- O Session começa aqui...
- Criar ID Session
- Continuar com seu SessionO que é o Session?É um aplicativo de mensagens criptografado e descentralizadoEntão ele não coleta minhas informações pessoais ou meus metadados de conversa? Como funciona?Usando uma combinação de tecnologias avançadas de roteamento anônimo e criptografia de ponta a ponta.Amigos não deixam amigos usarem aplicativos de mensagem comprometidos. De nada.
- Diga olá ao seu ID Session
- Seu ID Session é o endereço exclusivo que as pessoas podem usar para entrar em contato com você no Session. Sem conexão com sua identidade real, seu ID Session é totalmente anônimo e privado por definição.
+
+
Restaurar sua contaDigite a frase de recuperação que lhe foi fornecida quando você se inscreveu para restaurar sua conta.Digite sua frase de recuperação
- Escolha seu nome de exibição
- Este será o seu nome quando usar o Session. Pode ser seu nome verdadeiro, um apelido ou qualquer outra coisa que você quiser.
- Digite um nome de exibição
- Escolha um nome de exibição
- Escolha um nome de exibição mais curto
+ Escolha seu nome de exibição
+ Este será o seu nome quando usar o Session. Pode ser seu nome verdadeiro, um apelido ou qualquer outra coisa que você quiser.
+ Digite um nome de exibição
+ Escolha um nome de exibição
+ Escolha um nome de exibição mais curtoRecomendadoEscolha uma opçãoVocê ainda não possui contatos
@@ -552,11 +549,6 @@ foi recebida está corrompida!
"Não foi possível sair do grupo"Tem certeza de que deseja excluir esta conversa?Conversa excluída
- Sua frase de recuperação
- Revele sua frase de recuperação
- Sua frase de recuperação é a chave mestra do seu ID Session - você pode usá-la para restaurar seu ID Session se perder o acesso ao seu dispositivo. Armazene sua frase de recuperação em um local seguro e não a entregue a ninguém.
- Segure para revelar
- Está quase a terminar! 80%Proteja sua conta salvando sua frase de recuperaçãoToque e segure as palavras editadas para revelar sua frase de recuperação e armazene-a com segurança para proteger seu ID Session.Guarde sua frase de recuperação em um local seguro
@@ -598,7 +590,6 @@ foi recebida está corrompida!
NotificaçõesBate-paposDispositivos
- Frase de recuperaçãoApagar os dadosNotificaçõesEstilo de notificação
@@ -607,8 +598,6 @@ foi recebida está corrompida!
Estratégia de notificaçãoMudar o nomeDessincronizar dispositivo
- Sua frase de recuperação
- Esta é sua frase de recuperação. Com ela, você pode restaurar ou migrar seu ID Session para um novo dispositivo.Limpar todos os dadosIsso excluirá permanentemente suas mensagens, sessões e contatos.Código QR
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index 6c5540e375..e0273e091e 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -531,24 +531,21 @@
Session ID inválidaCancelarSua Session ID
- Seu Session começa aqui...
- Criar Session ID
- Continuar Seu SessionO que é Session?É um app de mensageria encriptada, descentralizadaEntão ele não coleta minha informação pessoal ou meus metadados de conversa? Como funciona?Usando uma combinação de tecnologias avançadas de roteamento anônimo e encriptação ponta-a-ponta.Amigas(os) não deixam amigas(os) usarem mensageiros comprometidos. De nada.
- Diga olá a sua Session ID
- Sua Session ID é o endereço exclusivo que pessoas podem usar para contactar você em Session. Com nenhuma conexão com sua identidade real, sua Session ID é totalmente anônima e privada por design.
+
+
Restaurar sua contaEntre a frase de recuperação que lhe foi dada quando você fez signup para restaurar sua conta.Entre sua frase de recuperação
- Escolha seu nome de display
- Este será o seu nome quando você usar Session. Pode ser seu nome verdadeiro, um alias, ou qualquer outra coisa que você quiser.
- Entre um nome de display
- Escolha um nome de display
- Escolha um nome de exibição mais curto
+ Escolha seu nome de display
+ Este será o seu nome quando você usar Session. Pode ser seu nome verdadeiro, um alias, ou qualquer outra coisa que você quiser.
+ Entre um nome de display
+ Escolha um nome de display
+ Escolha um nome de exibição mais curtoRecomendadoEscolha uma opçãoVocê ainda não possui contatos
@@ -557,11 +554,6 @@
"Não foi possível sair do grupo"Tem certeza de que deseja excluir esta conversa?Conversa excluída
- Sua frase de recuperação
- Revele sua frase de recuperação
- Sua frase de recuperação é a chave mestra do seu ID Session - você pode usá-la para restaurar seu ID Session se perder o acesso ao seu dispositivo. Armazene sua frase de recuperação em um local seguro e não a entregue a ninguém.
- Segure para revelar
- Você está quase terminando! 80%Proteja sua conta salvando sua frase de recuperaçãoToque e segure as palavras editadas para revelar sua frase de recuperação e armazene-a com segurança para proteger seu ID Session.Guarde sua frase de recuperação em um local seguro
@@ -606,7 +598,6 @@
DispositivosConvide um amigoPerguntas Frequentes
- Frase de RecuperaçãoLimpar DadosLimpar Dados Incluindo RedeAjude-nos a traduzir o Session
@@ -619,8 +610,6 @@
Você será notificado de forma confiável e imediata sobre novas mensagens usando os servidores de notificação da Google.Mudar nomeDeslinkar dispositivo
- Sua Frase de Recuperação
- Esta é sua frase de recuperação. Com ela, você pode restaurar ou migrar sua Session ID para um novo dispositivo.Limpar Todos os DadosIsso excluirá permanentemente suas mensagens, sessões e contatos.Você gostaria de limpar apenas este dispositivo, ou excluir toda sua conta?
@@ -664,7 +653,6 @@
Selecione uma cópia de segurança e coloque a senha frase que foi criada.Senha de 30 dígitosIsto está demorando um pouco, tu gostarias de pular?
- Vincular um DispositivoFrase de RecuperaçãoLer Código QRVá até as configurações → Frase de Recuperação em seu outro dispositivo para mostrar o seu código QR.
@@ -675,7 +663,6 @@
Modo LentoVocê será notificado de forma confiável e imediata sobre novas mensagens usando os servidores de notificação da Google.O session verificará ocasionalmente por novas mensagens em segundo plano.
- Frase de RecuperaçãoSession está TrancadoToque para destrancarDigite um apelido
diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml
index 8f2c5f6ed0..6a3773bf6e 100644
--- a/app/src/main/res/values-ro-rRO/strings.xml
+++ b/app/src/main/res/values-ro-rRO/strings.xml
@@ -545,23 +545,20 @@ schimbul de chei este corupt
ID sesiune nevalidAnulareID-ul sesiunii dvs
- Sesiunea dvs. începe aici...
- Creați ID sesiune
- Continuați sesiuneaCe este Session?Este o aplicație de mesagerie descentralizată, criptatăDeci nu colectează informaţii personale sau metadatele conversaţiei? Cum funcţionează?Utilizarea unei combinații avansate de rutare anonimă și de tehnologii de criptare capăt-la-capăt.Prietenii nu-și lasă prietenii să folosească mesageri compromiși. Cu plăcere.
- Bun venit la noul tău ID Session
- ID-ul de sesiune este adresa ta unică pe care persoanele o pot folosi pentru a te contacta în Session. Neavând conexiune la identitatea ta reală, ID-ul tău Session este complet anonim și privat prin design.
+
+
Recuperează-ți contulIntroduceți fraza de recuperare care v-a fost dată atunci când v-ați înregistrat pentru a vă restaura contul.Introduceți fraza de recuperare
- Alegeți numele afișat
- Acesta va fi numele tău când folosești Session. Poate fi numele tău, un pseudonim, sau orice altceva dorești.
- Alege un nume de afișat
- Vă rugăm să alegeți un nume de afișare
+ Alegeți numele afișat
+ Acesta va fi numele tău când folosești Session. Poate fi numele tău, un pseudonim, sau orice altceva dorești.
+ Alege un nume de afișat
+ Vă rugăm să alegeți un nume de afișareNod de intrareNod serviciiDestinație
diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml
index 8f2c5f6ed0..6a3773bf6e 100644
--- a/app/src/main/res/values-ro/strings.xml
+++ b/app/src/main/res/values-ro/strings.xml
@@ -545,23 +545,20 @@ schimbul de chei este corupt
ID sesiune nevalidAnulareID-ul sesiunii dvs
- Sesiunea dvs. începe aici...
- Creați ID sesiune
- Continuați sesiuneaCe este Session?Este o aplicație de mesagerie descentralizată, criptatăDeci nu colectează informaţii personale sau metadatele conversaţiei? Cum funcţionează?Utilizarea unei combinații avansate de rutare anonimă și de tehnologii de criptare capăt-la-capăt.Prietenii nu-și lasă prietenii să folosească mesageri compromiși. Cu plăcere.
- Bun venit la noul tău ID Session
- ID-ul de sesiune este adresa ta unică pe care persoanele o pot folosi pentru a te contacta în Session. Neavând conexiune la identitatea ta reală, ID-ul tău Session este complet anonim și privat prin design.
+
+
Recuperează-ți contulIntroduceți fraza de recuperare care v-a fost dată atunci când v-ați înregistrat pentru a vă restaura contul.Introduceți fraza de recuperare
- Alegeți numele afișat
- Acesta va fi numele tău când folosești Session. Poate fi numele tău, un pseudonim, sau orice altceva dorești.
- Alege un nume de afișat
- Vă rugăm să alegeți un nume de afișare
+ Alegeți numele afișat
+ Acesta va fi numele tău când folosești Session. Poate fi numele tău, un pseudonim, sau orice altceva dorești.
+ Alege un nume de afișat
+ Vă rugăm să alegeți un nume de afișareNod de intrareNod serviciiDestinație
diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml
index 6b907ee40e..912f55359e 100644
--- a/app/src/main/res/values-ru-rRU/strings.xml
+++ b/app/src/main/res/values-ru-rRU/strings.xml
@@ -555,24 +555,21 @@
Неверный Session IDОтменаВаш Session ID
- Здесь начинается Session...
- Создать Session ID
- Восстановить Session IDЧто такое Session?Это децентрализованное, зашифрованное приложение для обмена сообщениямиЗначит ли это, что оно не собирает мою личную информацию или метаданные моего разговора? Как оно работает?С использованием комбинации передовых технологий анонимной маршрутизации и сквозного шифрования.Друзья не позволят друзьям использовать ненадежные мессенджеры. Пользуйтесь на здоровье.
- Познакомьтесь со своим Session ID
- Ваш Session ID - это уникальный адрес, который другие пользователи могут использовать для связи с вами при помощи Session. Поскольку ваш Session ID никак не связан с вашей настоящей личностью, он по определению является полностью анонимным и конфиденциальным.
+
+
Восстановите свой аккаунтДля восстановления учетной записи введите секретную фразу, которая была предоставлена вам при регистрации.Введите секретную фразу
- Выберите ваше отображаемое имя
- Это имя будет отображаться, когда вы используете Session. Это может быть ваше настоящее имя, псевдоним или что угодно по вашему выбору.
- Введите отображаемое имя
- Пожалуйста, выберите отображаемое имя
- Пожалуйста, выберите более короткое отображаемое имя
+ Выберите ваше отображаемое имя
+ Это имя будет отображаться, когда вы используете Session. Это может быть ваше настоящее имя, псевдоним или что угодно по вашему выбору.
+ Введите отображаемое имя
+ Пожалуйста, выберите отображаемое имя
+ Пожалуйста, выберите более короткое отображаемое имяРекомендуетсяПожалуйста, выберите методУ вас еще нет контактов
@@ -581,11 +578,6 @@
"Не удалось покинуть группу"Вы уверены, что хотите удалить этот разговор?Разговор удален
- Ваша секретная фраза для восстановления
- А вот и ваша секретная фраза для восстановления
- Ваша секретная фраза является главным ключом к вашему Session ID. Вы можете использовать ее для восстановления Session ID, если потеряете доступ к своему устройству. Сохраните свою секретную фразу в безопасном месте, и никому ее не передавайте.
- Удерживайте, чтобы показать
- Вы почти закончили! 80%Защитите свой аккаунт, сохранив секретную фразуНажмите и удерживайте сокращенные слова, чтобы открыть секретную фразу, а затем сохраните ее в надежном месте, чтобы защитить свой Session ID.Обязательно сохраните секретную фразу в надежном месте
@@ -630,7 +622,6 @@
УстройстваПригласить другаЧасто задаваемые вопросы
- Секретная фразаОчистить данныеОчистить данные включая учетную записьПомогите нам перевести Session
@@ -643,8 +634,6 @@
Вы будете получать уведомления о новых сообщениях надежно и сразу же с помощью серверов уведомлений Google.Сменить имяОтключить устройство
- Ваша секретная фраза
- Это ваша секретная фраза. С ее помощью вы можете восстановить или перенести свой Session ID на новое устройство.Очистить все данныеЭто навсегда удалит ваши сообщения, сессии и контакты.Вы хотите очистить только это устройство или полностью удалить ваш аккаунт?
@@ -688,7 +677,6 @@
Выберите файл резервной копии и введите парольную фразу, с которой он был создан.Фраза из 30 цифрЭто занимает некоторое время, хотите пропустить?
- Привязать устройствоФраза для восстановления доступаСканировать QR-кодПерейдите в Настройки → Фраза для восстановления доступа на другом устройстве, чтобы показать ваш QR код.
@@ -699,7 +687,6 @@
Медленный режимВы будете получать уведомления о новых сообщениях надежно и сразу же с помощью серверов уведомлений Google.Session время от времени в фоновом режиме будeт проверять и получать новые сообщения.
- Секретная фразаSession заблокированРазблокироватьВведите ник
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 6b907ee40e..912f55359e 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -555,24 +555,21 @@
Неверный Session IDОтменаВаш Session ID
- Здесь начинается Session...
- Создать Session ID
- Восстановить Session IDЧто такое Session?Это децентрализованное, зашифрованное приложение для обмена сообщениямиЗначит ли это, что оно не собирает мою личную информацию или метаданные моего разговора? Как оно работает?С использованием комбинации передовых технологий анонимной маршрутизации и сквозного шифрования.Друзья не позволят друзьям использовать ненадежные мессенджеры. Пользуйтесь на здоровье.
- Познакомьтесь со своим Session ID
- Ваш Session ID - это уникальный адрес, который другие пользователи могут использовать для связи с вами при помощи Session. Поскольку ваш Session ID никак не связан с вашей настоящей личностью, он по определению является полностью анонимным и конфиденциальным.
+
+
Восстановите свой аккаунтДля восстановления учетной записи введите секретную фразу, которая была предоставлена вам при регистрации.Введите секретную фразу
- Выберите ваше отображаемое имя
- Это имя будет отображаться, когда вы используете Session. Это может быть ваше настоящее имя, псевдоним или что угодно по вашему выбору.
- Введите отображаемое имя
- Пожалуйста, выберите отображаемое имя
- Пожалуйста, выберите более короткое отображаемое имя
+ Выберите ваше отображаемое имя
+ Это имя будет отображаться, когда вы используете Session. Это может быть ваше настоящее имя, псевдоним или что угодно по вашему выбору.
+ Введите отображаемое имя
+ Пожалуйста, выберите отображаемое имя
+ Пожалуйста, выберите более короткое отображаемое имяРекомендуетсяПожалуйста, выберите методУ вас еще нет контактов
@@ -581,11 +578,6 @@
"Не удалось покинуть группу"Вы уверены, что хотите удалить этот разговор?Разговор удален
- Ваша секретная фраза для восстановления
- А вот и ваша секретная фраза для восстановления
- Ваша секретная фраза является главным ключом к вашему Session ID. Вы можете использовать ее для восстановления Session ID, если потеряете доступ к своему устройству. Сохраните свою секретную фразу в безопасном месте, и никому ее не передавайте.
- Удерживайте, чтобы показать
- Вы почти закончили! 80%Защитите свой аккаунт, сохранив секретную фразуНажмите и удерживайте сокращенные слова, чтобы открыть секретную фразу, а затем сохраните ее в надежном месте, чтобы защитить свой Session ID.Обязательно сохраните секретную фразу в надежном месте
@@ -630,7 +622,6 @@
УстройстваПригласить другаЧасто задаваемые вопросы
- Секретная фразаОчистить данныеОчистить данные включая учетную записьПомогите нам перевести Session
@@ -643,8 +634,6 @@
Вы будете получать уведомления о новых сообщениях надежно и сразу же с помощью серверов уведомлений Google.Сменить имяОтключить устройство
- Ваша секретная фраза
- Это ваша секретная фраза. С ее помощью вы можете восстановить или перенести свой Session ID на новое устройство.Очистить все данныеЭто навсегда удалит ваши сообщения, сессии и контакты.Вы хотите очистить только это устройство или полностью удалить ваш аккаунт?
@@ -688,7 +677,6 @@
Выберите файл резервной копии и введите парольную фразу, с которой он был создан.Фраза из 30 цифрЭто занимает некоторое время, хотите пропустить?
- Привязать устройствоФраза для восстановления доступаСканировать QR-кодПерейдите в Настройки → Фраза для восстановления доступа на другом устройстве, чтобы показать ваш QR код.
@@ -699,7 +687,6 @@
Медленный режимВы будете получать уведомления о новых сообщениях надежно и сразу же с помощью серверов уведомлений Google.Session время от времени в фоновом режиме будeт проверять и получать новые сообщения.
- Секретная фразаSession заблокированРазблокироватьВведите ник
diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml
index f6071f00d9..5c0d1fa005 100644
--- a/app/src/main/res/values-sk-rSK/strings.xml
+++ b/app/src/main/res/values-sk-rSK/strings.xml
@@ -545,22 +545,21 @@ výmeny kľúčov.
Neplatné Session IDZrušiťVaše Session ID
- Vytvoriť Session IDČo je Session?Je to decentralizovaná, šifrovaná aplikácia na posielanie správTakže nezbiera moje osobné informácie alebo metadáta mojich konverzácií? Ako to funguje?Použitím kombinácie pokročilých technológií anonymného smerovania a end-to-end šifrovania.Priatelia nedovolia priateľom používať skompromitované chatové aplikácie. Nieje za čo.
- Povedzte ahoj svojmu Session ID
- Vaše Session ID je jedinečná adresa, ktorú môžu ľudia použiť aby sa s vami skontaktovali v Session. Pretože Session ID nemá žiadne spojenie s vašou skutočnou identitou, je Session ID úplne anonymné a súkromé.
+
+
Obnoviť účetZadajte frázu na obnovenie, ktorá vám bola poskytnutá pri registrácii na obnovenie účtu.Zadajte vašu obnovovaciu frázu
- Vyberte svoje zobrazované meno
- Toto bude vaše meno pri používaní Session. Môže to byť vaše skutočné meno, prezývka alebo čokoľvek čo chcete.
- Zadajte zobrazované meno
- Zvoľte prosím zobrazované meno
- Zvoľte prosím kratšie zobrazované meno
+ Vyberte svoje zobrazované meno
+ Toto bude vaše meno pri používaní Session. Môže to byť vaše skutočné meno, prezývka alebo čokoľvek čo chcete.
+ Zadajte zobrazované meno
+ Zvoľte prosím zobrazované meno
+ Zvoľte prosím kratšie zobrazované menoOdporúčanéProsím, zvoľte možnosťZatiaľ nemáte žiadne kontakty
@@ -568,11 +567,6 @@ výmeny kľúčov.
"Skupinu sa nepodarilo opustiť"Naozaj chcete odstrániť túto konverzáciu?Konverzácia úspešne zmazaná
- Vaša fráza pre obnovenie
- Toto je vaša fráza pre obnovenie
- Vaša fráza na obnovenie je hlavným kľúčom k vášmu Session ID - môžete ju použiť na obnovenie svojho Session ID ak stratíte prístup k zariadeniu. Uložte frázu na obnovenie na bezpečnom mieste a nikomu ju nedávajte.
- Podržaním odhaľte
- Ste takmer hotoví! 80%Zabezpečte svoj účet uložením frázy obnoveniaUistite sa, že frázu na obnovenie máte uloženú na bezpečnom miesteCesta
@@ -608,7 +602,6 @@ výmeny kľúčov.
SúkromieUpozorneniaZariadenia
- Fráza pre obnovenieOdstrániť dátaPomôžte nám preložiť SessionUpozornenia
@@ -617,8 +610,6 @@ výmeny kľúčov.
SúkromieZmeniť menoOdpojenie zariadenia
- Vaša fráza pre obnovenie
- Toto je vaša fráza pre obnovenie. S jej pomocou môžete obnoviť alebo presunúť svoje Session ID na nové zariadenie.Odstrániť všetky dátaQR kódZobraziť môj QR kód
@@ -654,7 +645,6 @@ výmeny kľúčov.
Vybrať súborVyberte súbor zálohy a zadajte prístupovú frázu, pomocou ktorej bol vytvorený.30-znaková prístupová fráza
- Pripojiť zariadenieAlebo sa pripojte k jednej z týchto…Upozornenia na správyRýchly režim
diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml
index f6071f00d9..5c0d1fa005 100644
--- a/app/src/main/res/values-sk/strings.xml
+++ b/app/src/main/res/values-sk/strings.xml
@@ -545,22 +545,21 @@ výmeny kľúčov.
Neplatné Session IDZrušiťVaše Session ID
- Vytvoriť Session IDČo je Session?Je to decentralizovaná, šifrovaná aplikácia na posielanie správTakže nezbiera moje osobné informácie alebo metadáta mojich konverzácií? Ako to funguje?Použitím kombinácie pokročilých technológií anonymného smerovania a end-to-end šifrovania.Priatelia nedovolia priateľom používať skompromitované chatové aplikácie. Nieje za čo.
- Povedzte ahoj svojmu Session ID
- Vaše Session ID je jedinečná adresa, ktorú môžu ľudia použiť aby sa s vami skontaktovali v Session. Pretože Session ID nemá žiadne spojenie s vašou skutočnou identitou, je Session ID úplne anonymné a súkromé.
+
+
Obnoviť účetZadajte frázu na obnovenie, ktorá vám bola poskytnutá pri registrácii na obnovenie účtu.Zadajte vašu obnovovaciu frázu
- Vyberte svoje zobrazované meno
- Toto bude vaše meno pri používaní Session. Môže to byť vaše skutočné meno, prezývka alebo čokoľvek čo chcete.
- Zadajte zobrazované meno
- Zvoľte prosím zobrazované meno
- Zvoľte prosím kratšie zobrazované meno
+ Vyberte svoje zobrazované meno
+ Toto bude vaše meno pri používaní Session. Môže to byť vaše skutočné meno, prezývka alebo čokoľvek čo chcete.
+ Zadajte zobrazované meno
+ Zvoľte prosím zobrazované meno
+ Zvoľte prosím kratšie zobrazované menoOdporúčanéProsím, zvoľte možnosťZatiaľ nemáte žiadne kontakty
@@ -568,11 +567,6 @@ výmeny kľúčov.
"Skupinu sa nepodarilo opustiť"Naozaj chcete odstrániť túto konverzáciu?Konverzácia úspešne zmazaná
- Vaša fráza pre obnovenie
- Toto je vaša fráza pre obnovenie
- Vaša fráza na obnovenie je hlavným kľúčom k vášmu Session ID - môžete ju použiť na obnovenie svojho Session ID ak stratíte prístup k zariadeniu. Uložte frázu na obnovenie na bezpečnom mieste a nikomu ju nedávajte.
- Podržaním odhaľte
- Ste takmer hotoví! 80%Zabezpečte svoj účet uložením frázy obnoveniaUistite sa, že frázu na obnovenie máte uloženú na bezpečnom miesteCesta
@@ -608,7 +602,6 @@ výmeny kľúčov.
SúkromieUpozorneniaZariadenia
- Fráza pre obnovenieOdstrániť dátaPomôžte nám preložiť SessionUpozornenia
@@ -617,8 +610,6 @@ výmeny kľúčov.
SúkromieZmeniť menoOdpojenie zariadenia
- Vaša fráza pre obnovenie
- Toto je vaša fráza pre obnovenie. S jej pomocou môžete obnoviť alebo presunúť svoje Session ID na nové zariadenie.Odstrániť všetky dátaQR kódZobraziť môj QR kód
@@ -654,7 +645,6 @@ výmeny kľúčov.
Vybrať súborVyberte súbor zálohy a zadajte prístupovú frázu, pomocou ktorej bol vytvorený.30-znaková prístupová fráza
- Pripojiť zariadenieAlebo sa pripojte k jednej z týchto…Upozornenia na správyRýchly režim
diff --git a/app/src/main/res/values-sq-rAL/strings.xml b/app/src/main/res/values-sq-rAL/strings.xml
index 9d441ac488..d84f876825 100644
--- a/app/src/main/res/values-sq-rAL/strings.xml
+++ b/app/src/main/res/values-sq-rAL/strings.xml
@@ -529,14 +529,11 @@
Session ID e gabuarAnulojeSession ID e juaj
- Sessioni juaj fillon ketu...
- Krijo një Session ID
- Vazhdo tek Session-i juajSi është Sessioni juaj?Është një app për mesazhe të koduara dhe decentralizuaraI bije që të dhënat personale dhe informacionet e mesazheve nuk do të grumbullohen? Si funksionon kjo?
- Thuaj Tungjatjeta Session-it tuaj
- Session ID juaj është një adresë unike që mund t\'ju kontaktojnë përmes Session. Pa ndonjë ndërlidhje me identitetin tuaj real, Session ID juaj është totalisht anonim dhe privat.
+
+
Rikthe llogarinë tuajShkruanj frazen e rikthimit qe iu është gjatë regjistrimit të llogarisë.
diff --git a/app/src/main/res/values-sq/strings.xml b/app/src/main/res/values-sq/strings.xml
index 9d441ac488..d84f876825 100644
--- a/app/src/main/res/values-sq/strings.xml
+++ b/app/src/main/res/values-sq/strings.xml
@@ -529,14 +529,11 @@
Session ID e gabuarAnulojeSession ID e juaj
- Sessioni juaj fillon ketu...
- Krijo një Session ID
- Vazhdo tek Session-i juajSi është Sessioni juaj?Është një app për mesazhe të koduara dhe decentralizuaraI bije që të dhënat personale dhe informacionet e mesazheve nuk do të grumbullohen? Si funksionon kjo?
- Thuaj Tungjatjeta Session-it tuaj
- Session ID juaj është një adresë unike që mund t\'ju kontaktojnë përmes Session. Pa ndonjë ndërlidhje me identitetin tuaj real, Session ID juaj është totalisht anonim dhe privat.
+
+
Rikthe llogarinë tuajShkruanj frazen e rikthimit qe iu është gjatë regjistrimit të llogarisë.
diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml
index ffbee30076..e3f689652b 100644
--- a/app/src/main/res/values-sr-rSP/strings.xml
+++ b/app/src/main/res/values-sr-rSP/strings.xml
@@ -510,7 +510,7 @@
Ништа
- Молимо вас да изаберете краће приказно име
+ Молимо вас да изаберете краће приказно имеПрепорученоМолимо Вас да одаберете опцијуЈош увек немате ниједан контакт
@@ -519,10 +519,6 @@
"Неуспешан излазак из групе"Да ли сте сигурни да желите да обришете овај разговор?Конверзација је избрисана
- Фраза за опоравак
- Сретни своју фразу за опоравак
- Држи да откријеш
- Скоро си завршио! 80%Ти
diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml
index ffbee30076..e3f689652b 100644
--- a/app/src/main/res/values-sr/strings.xml
+++ b/app/src/main/res/values-sr/strings.xml
@@ -510,7 +510,7 @@
Ништа
- Молимо вас да изаберете краће приказно име
+ Молимо вас да изаберете краће приказно имеПрепорученоМолимо Вас да одаберете опцијуЈош увек немате ниједан контакт
@@ -519,10 +519,6 @@
"Неуспешан излазак из групе"Да ли сте сигурни да желите да обришете овај разговор?Конверзација је избрисана
- Фраза за опоравак
- Сретни своју фразу за опоравак
- Држи да откријеш
- Скоро си завршио! 80%Ти
diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml
index c966df21f5..c25b3e5092 100644
--- a/app/src/main/res/values-sv-rSE/strings.xml
+++ b/app/src/main/res/values-sv-rSE/strings.xml
@@ -530,24 +530,21 @@ för nyckelutbyte!
Ogiltigt Sessions-IDAvbrytDitt Session ID
- Din Session börjar här...
- Skapa Session-ID
- Fortsätt din SessionVad är Session?Det är en decentraliserad, krypterad meddelandeappSå det samlar inte in mina personuppgifter eller mina konversationers metadata? Hur fungerar det?Med hjälp av en kombination av avancerad anonym routing och end-to-end-krypteringsteknik.Vänner låter inte vänner använda osäkra meddelandeappar. Varsågod.
- Säg hej till ditt Session-ID
- Ditt Session-ID är den unika adress folk kan använda för att kontakta dig på Session. Ditt Session-ID är helt anonymt och privat rakt igenom, helt utan koppling till din riktiga identitet.
+
+
Återställ ditt kontoAnge den återställningsfras du fick när du skapade ditt konto för att kunna återställa ditt konto.Ange din återställningsfras
- Välj visningsnamn
- Detta blir ditt namn när du använder Session. Det kan vara ditt riktiga namn, ett alias eller något annat du gillar.
- Ange ett visningsnamn
- Vänligen välj ett visningsnamn
- Vänligen välj ett kortare visningsnamn
+ Välj visningsnamn
+ Detta blir ditt namn när du använder Session. Det kan vara ditt riktiga namn, ett alias eller något annat du gillar.
+ Ange ett visningsnamn
+ Vänligen välj ett visningsnamn
+ Vänligen välj ett kortare visningsnamnRekommenderatVälj ett alternativDu har inga kontakter än
@@ -556,11 +553,6 @@ för nyckelutbyte!
"Kunde inte lämna gruppen"Är du säker på att du vill ta bort denna konversation?Konversationen har raderats
- Din Återställningsfras
- Möt din återställningsfras
- Din återställningsfras är huvudnyckeln till ditt Session-ID – du kan använda den för att återställa ditt Session-ID om du förlorar åtkomst till enheten. Förvara din återställningsfras på en säker plats, och ge den inte till någon.
- Håll ned för att visa
- Du är nästan klar! 80%Säkra ditt konto genom att spara din återställningsfrasTryck på och håll ned de dolda orden för att avslöja din återställningsfras och lagra dem på ett säkert sätt för att säkra ditt Session-ID.Se till att spara din återställningsfras på en säker plats
@@ -605,7 +597,6 @@ för nyckelutbyte!
EnheterBjud in en vänVanliga frågor
- ÅterställningsfrasRensa dataRensa data inklusive nätverkHjälp oss att översätta Session
@@ -618,8 +609,6 @@ för nyckelutbyte!
Du kommer att meddelas om nya meddelanden på ett tillförlitligt sätt och omedelbart genom att använda Googles aviseringsservrar.Byt NamnKopplar bort enhet
- Din Återställningsfras
- Detta är din återställningsfras. Med den kan du återställa eller migrera ditt Session-ID till en ny enhet.Rensa All DataDetta kommer att radera dina meddelanden, sessioner och kontakter permanent.Vill du rensa endast den här enheten eller ta bort hela ditt konto?
@@ -663,7 +652,6 @@ för nyckelutbyte!
Välj en säkerhetskopieringsfil och ange lösenfrasen som den skapades med.30-siffrig lösenfrasDetta tar ett tag, vill du hoppa över?
- Länka en enhetÅterställningsfrasSkanna QR-kodNavigera till Inställningar → Återställningsfras på din andra enhet för att visa din QR-kod.
@@ -674,7 +662,6 @@ för nyckelutbyte!
Långsamt lägeDu kommer att meddelas om nya meddelanden på ett tillförlitligt sätt och omedelbart genom att använda Googles aviseringsservrar.Session kommer då och då att leta efter nya meddelanden i bakgrunden.
- ÅterställningsfrasSession är låstTryck om du vill låsa uppAnge smeknamn
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index c966df21f5..c25b3e5092 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -530,24 +530,21 @@ för nyckelutbyte!
Ogiltigt Sessions-IDAvbrytDitt Session ID
- Din Session börjar här...
- Skapa Session-ID
- Fortsätt din SessionVad är Session?Det är en decentraliserad, krypterad meddelandeappSå det samlar inte in mina personuppgifter eller mina konversationers metadata? Hur fungerar det?Med hjälp av en kombination av avancerad anonym routing och end-to-end-krypteringsteknik.Vänner låter inte vänner använda osäkra meddelandeappar. Varsågod.
- Säg hej till ditt Session-ID
- Ditt Session-ID är den unika adress folk kan använda för att kontakta dig på Session. Ditt Session-ID är helt anonymt och privat rakt igenom, helt utan koppling till din riktiga identitet.
+
+
Återställ ditt kontoAnge den återställningsfras du fick när du skapade ditt konto för att kunna återställa ditt konto.Ange din återställningsfras
- Välj visningsnamn
- Detta blir ditt namn när du använder Session. Det kan vara ditt riktiga namn, ett alias eller något annat du gillar.
- Ange ett visningsnamn
- Vänligen välj ett visningsnamn
- Vänligen välj ett kortare visningsnamn
+ Välj visningsnamn
+ Detta blir ditt namn när du använder Session. Det kan vara ditt riktiga namn, ett alias eller något annat du gillar.
+ Ange ett visningsnamn
+ Vänligen välj ett visningsnamn
+ Vänligen välj ett kortare visningsnamnRekommenderatVälj ett alternativDu har inga kontakter än
@@ -556,11 +553,6 @@ för nyckelutbyte!
"Kunde inte lämna gruppen"Är du säker på att du vill ta bort denna konversation?Konversationen har raderats
- Din Återställningsfras
- Möt din återställningsfras
- Din återställningsfras är huvudnyckeln till ditt Session-ID – du kan använda den för att återställa ditt Session-ID om du förlorar åtkomst till enheten. Förvara din återställningsfras på en säker plats, och ge den inte till någon.
- Håll ned för att visa
- Du är nästan klar! 80%Säkra ditt konto genom att spara din återställningsfrasTryck på och håll ned de dolda orden för att avslöja din återställningsfras och lagra dem på ett säkert sätt för att säkra ditt Session-ID.Se till att spara din återställningsfras på en säker plats
@@ -605,7 +597,6 @@ för nyckelutbyte!
EnheterBjud in en vänVanliga frågor
- ÅterställningsfrasRensa dataRensa data inklusive nätverkHjälp oss att översätta Session
@@ -618,8 +609,6 @@ för nyckelutbyte!
Du kommer att meddelas om nya meddelanden på ett tillförlitligt sätt och omedelbart genom att använda Googles aviseringsservrar.Byt NamnKopplar bort enhet
- Din Återställningsfras
- Detta är din återställningsfras. Med den kan du återställa eller migrera ditt Session-ID till en ny enhet.Rensa All DataDetta kommer att radera dina meddelanden, sessioner och kontakter permanent.Vill du rensa endast den här enheten eller ta bort hela ditt konto?
@@ -663,7 +652,6 @@ för nyckelutbyte!
Välj en säkerhetskopieringsfil och ange lösenfrasen som den skapades med.30-siffrig lösenfrasDetta tar ett tag, vill du hoppa över?
- Länka en enhetÅterställningsfrasSkanna QR-kodNavigera till Inställningar → Återställningsfras på din andra enhet för att visa din QR-kod.
@@ -674,7 +662,6 @@ för nyckelutbyte!
Långsamt lägeDu kommer att meddelas om nya meddelanden på ett tillförlitligt sätt och omedelbart genom att använda Googles aviseringsservrar.Session kommer då och då att leta efter nya meddelanden i bakgrunden.
- ÅterställningsfrasSession är låstTryck om du vill låsa uppAnge smeknamn
diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml
index 5e696160dc..71a0784357 100644
--- a/app/src/main/res/values-tr-rTR/strings.xml
+++ b/app/src/main/res/values-tr-rTR/strings.xml
@@ -530,24 +530,21 @@ iletisi alındı!
Geçersiz Session ID\'siİptalSession ID\'niz
- Your Session begins here...
- Session Kimliği Oluştur
- Oturumunuza Devam EdinSession Nedir?Merkezi olmayan, şifreli bir mesajlaşma uygulamasıdırYani kişisel bilgilerimi veya konuşma meta verilerimi toplamaz mı? Nasıl çalışır?Gelişmiş anonim yönlendirme ve uçtan uca şifreleme teknolojilerinin bir kombinasyonunu kullan.Arkadaşlar, arkadaşlarının güvenliği ihlal edilmiş mesajlaşma programlarını kullanmasına izin vermez. Rica ederim.
- Yeni Session kimliğinize merhaba deyin.
- Session Kimliğiniz, kişilerin Session\'da sizinle iletişim kurmak için kullanabileceği benzersiz adrestir. Gerçek kimliğinizle hiçbir bağlantısı olmadan, Session Kimliğiniz tasarım gereği tamamen anonim ve özeldir.
+
+
Hesabınızı geri yükleyinHesabınızı geri yüklemek için kaydolduğunuzda size verilen kurtarma ifadesini girin.Kurtarma ifadenizi girin
- Görünen adınızı seçin
- Bu, Session kullandığınızda adınız olacaktır. Gerçek adınız, takma adınız veya istediğiniz herhangi bir şey olabilir.
- Bir görünen ad girin
- Lütfen bir görünen ad seçin
- Lütfen daha kısa bir görünen ad seçin
+ Görünen adınızı seçin
+ Bu, Session kullandığınızda adınız olacaktır. Gerçek adınız, takma adınız veya istediğiniz herhangi bir şey olabilir.
+ Bir görünen ad girin
+ Lütfen bir görünen ad seçin
+ Lütfen daha kısa bir görünen ad seçinÖnerilenlerLütfen Bir Seçenek SeçinHenüz kayıtlı kişi yok
@@ -556,11 +553,6 @@ iletisi alındı!
"Gruptan ayrılamadı"Bu konuşmayı silmek istediğinden emin misin?Konuşma silindi
- Kurtarma İfadeniz
- Kurtarma ifadenizle tanışın
- Kurtarma ifadeniz Session kimliğinizin ana anahtarıdır; cihazınıza erişiminizi kaybederseniz Session kimliğinizi geri yüklemek için bunu kullanabilirsiniz. Kurtarma ifadenizi güvenli bir yerde saklayın ve kimseye vermeyin.
- Ortaya çıkarmak için basılı tutun
- Neredeyse bitirdiniz! %80Kurtarma ifadenizi kaydederek hesabınızı güvenceye alınKurtarma ifadenizi ortaya çıkarmak için düzeltilen kelimelere dokunun ve basılı tutun, ardından Session kimliğinizi korumak için güvenli bir şekilde saklayın.Kurtarma ifadenizi güvenli bir yerde sakladığınızdan emin olun
@@ -605,7 +597,6 @@ iletisi alındı!
CihazlarBir arkadaş davet etSSS
- Kurtarma Sözcük GrubuVerileri TemizleAğ Dahil Verileri TemizleSession programını çevirmemize yardımcı olun
@@ -618,8 +609,6 @@ iletisi alındı!
Google\'ın bildirim sunucularını kullanarak yeni iletilerden güvenilir ve anında haberdar olacaksınız.Adı değiştirCihazın bağlantısını kaldır
- Kurtarma İfadeniz
- Bu sizin kurtarma ifadenizdir. Bununla, Session Kimliğinizi yeni bir cihaza geri yükleyebilir veya taşıyabilirsiniz.Tüm Verileri TemizleBu, mesajlarınızı, oturumlarınızı ve kişilerinizi kalıcı olarak siler.Yalnızca bu cihazı mı silmek istiyorsunuz yoksa hesabınızın tamamını mı silmek istiyorsunuz?
@@ -663,7 +652,6 @@ iletisi alındı!
Bir yedekleme dosyası seçin ve oluşturulduğu parolayı girin.30 basamaklı parolaBu biraz uzun sürüyor, atlamak ister misiniz?
- Bir Cihazı BağlaKurtarma Sözcük GrubuQR Kodunu TaraQR kodunuzu göstermek için diğer cihazınızda Ayarlar → Kurtarma İfadesi\'ne gidin.
@@ -674,7 +662,6 @@ iletisi alındı!
Yavaş ModGoogle\'ın bildirim sunucularını kullanarak yeni iletilerden güvenilir ve anında haberdar olacaksınız.Session ara sıra arka planda yeni mesajları kontrol eder.
- Kurtarma Sözcük GrubuSession kilitliAçmak için dokunBir kullanıcı adı girin
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 5e696160dc..71a0784357 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -530,24 +530,21 @@ iletisi alındı!
Geçersiz Session ID\'siİptalSession ID\'niz
- Your Session begins here...
- Session Kimliği Oluştur
- Oturumunuza Devam EdinSession Nedir?Merkezi olmayan, şifreli bir mesajlaşma uygulamasıdırYani kişisel bilgilerimi veya konuşma meta verilerimi toplamaz mı? Nasıl çalışır?Gelişmiş anonim yönlendirme ve uçtan uca şifreleme teknolojilerinin bir kombinasyonunu kullan.Arkadaşlar, arkadaşlarının güvenliği ihlal edilmiş mesajlaşma programlarını kullanmasına izin vermez. Rica ederim.
- Yeni Session kimliğinize merhaba deyin.
- Session Kimliğiniz, kişilerin Session\'da sizinle iletişim kurmak için kullanabileceği benzersiz adrestir. Gerçek kimliğinizle hiçbir bağlantısı olmadan, Session Kimliğiniz tasarım gereği tamamen anonim ve özeldir.
+
+
Hesabınızı geri yükleyinHesabınızı geri yüklemek için kaydolduğunuzda size verilen kurtarma ifadesini girin.Kurtarma ifadenizi girin
- Görünen adınızı seçin
- Bu, Session kullandığınızda adınız olacaktır. Gerçek adınız, takma adınız veya istediğiniz herhangi bir şey olabilir.
- Bir görünen ad girin
- Lütfen bir görünen ad seçin
- Lütfen daha kısa bir görünen ad seçin
+ Görünen adınızı seçin
+ Bu, Session kullandığınızda adınız olacaktır. Gerçek adınız, takma adınız veya istediğiniz herhangi bir şey olabilir.
+ Bir görünen ad girin
+ Lütfen bir görünen ad seçin
+ Lütfen daha kısa bir görünen ad seçinÖnerilenlerLütfen Bir Seçenek SeçinHenüz kayıtlı kişi yok
@@ -556,11 +553,6 @@ iletisi alındı!
"Gruptan ayrılamadı"Bu konuşmayı silmek istediğinden emin misin?Konuşma silindi
- Kurtarma İfadeniz
- Kurtarma ifadenizle tanışın
- Kurtarma ifadeniz Session kimliğinizin ana anahtarıdır; cihazınıza erişiminizi kaybederseniz Session kimliğinizi geri yüklemek için bunu kullanabilirsiniz. Kurtarma ifadenizi güvenli bir yerde saklayın ve kimseye vermeyin.
- Ortaya çıkarmak için basılı tutun
- Neredeyse bitirdiniz! %80Kurtarma ifadenizi kaydederek hesabınızı güvenceye alınKurtarma ifadenizi ortaya çıkarmak için düzeltilen kelimelere dokunun ve basılı tutun, ardından Session kimliğinizi korumak için güvenli bir şekilde saklayın.Kurtarma ifadenizi güvenli bir yerde sakladığınızdan emin olun
@@ -605,7 +597,6 @@ iletisi alındı!
CihazlarBir arkadaş davet etSSS
- Kurtarma Sözcük GrubuVerileri TemizleAğ Dahil Verileri TemizleSession programını çevirmemize yardımcı olun
@@ -618,8 +609,6 @@ iletisi alındı!
Google\'ın bildirim sunucularını kullanarak yeni iletilerden güvenilir ve anında haberdar olacaksınız.Adı değiştirCihazın bağlantısını kaldır
- Kurtarma İfadeniz
- Bu sizin kurtarma ifadenizdir. Bununla, Session Kimliğinizi yeni bir cihaza geri yükleyebilir veya taşıyabilirsiniz.Tüm Verileri TemizleBu, mesajlarınızı, oturumlarınızı ve kişilerinizi kalıcı olarak siler.Yalnızca bu cihazı mı silmek istiyorsunuz yoksa hesabınızın tamamını mı silmek istiyorsunuz?
@@ -663,7 +652,6 @@ iletisi alındı!
Bir yedekleme dosyası seçin ve oluşturulduğu parolayı girin.30 basamaklı parolaBu biraz uzun sürüyor, atlamak ister misiniz?
- Bir Cihazı BağlaKurtarma Sözcük GrubuQR Kodunu TaraQR kodunuzu göstermek için diğer cihazınızda Ayarlar → Kurtarma İfadesi\'ne gidin.
@@ -674,7 +662,6 @@ iletisi alındı!
Yavaş ModGoogle\'ın bildirim sunucularını kullanarak yeni iletilerden güvenilir ve anında haberdar olacaksınız.Session ara sıra arka planda yeni mesajları kontrol eder.
- Kurtarma Sözcük GrubuSession kilitliAçmak için dokunBir kullanıcı adı girin
diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml
index 010bdae04e..2086c0486e 100644
--- a/app/src/main/res/values-uk-rUA/strings.xml
+++ b/app/src/main/res/values-uk-rUA/strings.xml
@@ -556,24 +556,21 @@
Невірна Session ID адрессаВідмінаВаша Session ID адресса
- Ваша сесія починається тут...
- Створити Session ID адрессу
- Продовжити вашу сесіюЩо таке Session?Це децентралізований, шифрований мессенджер обміну повідомленнямиОтже, він не збирає мою особисту інформацію чи мою метадані розмови? Як це працює?Він використовує комбінацію анонімної мережі та скрізного енд-ту-енд шифрування.Друзі не дозволяють друзям користуватися скомпромітованими мессенджерами. Ласкаво просимо.
- Привітайтесь з вашою Session ID адрессою
- Ваш Session ID є унікальною адресою, якою люди будуть зв’язуватимися з вами в Session. При відсутньому з\'єднанні з вашою реальною особистістю, Session ID є абсолютно анонімним та приватним, по дизайну.
+
+
Відновити обліковий записВведіть фразу відновлення, яку вам було сказано записати на папері під час реєстрації, для відновлення облікового запису.Введіть вашу фразу відновлення
- Виберіть ваш псевдонім для показу
- Це буде ваше ім\'я яке ви використовуєте в Session. Воно може бути вашим дійсним ім\'ям, альясом або чимусь іншим.
- Введіть відображуватинимий псевдонім
- Будь ласка, виберіть відображуватимий псевдонім
- Будь ласка, виберіть коротший псевдонім
+ Виберіть ваш псевдонім для показу
+ Це буде ваше ім\'я яке ви використовуєте в Session. Воно може бути вашим дійсним ім\'ям, альясом або чимусь іншим.
+ Введіть відображуватинимий псевдонім
+ Будь ласка, виберіть відображуватимий псевдонім
+ Будь ласка, виберіть коротший псевдонімРекомендованоБудь ласка виберіть варіантУ вас ще немає Session контактів
@@ -582,11 +579,6 @@
"Не вдалося покинути групу"Ви дійсно хочете видалити цю бесіду?Бесіду видалено
- Ваша фраза відновлення
- Знайомтесь з вашою фразою відновлення
- Ваша фраза відновлення - це головний ключ до вашогї Session ID адреси - ви можете використовувати її для відновлення вашої Session ID адреси якщо ви втратите доступ до пристрою. Запишіть на папері та зберігайте вашу фразу відновлення у безпечному місці і не дайте її нікому.
- Натисніть, щоб відобразити
- Ви майже закінчили! 80%Захистіть свій обліковий запис, записавши на папері відновлювальну фразуНатисніть і втримуйте приховані слова, щоб розкрити вашу фразу відновлення, запишіть її на папері, щоб безпечно захистити вашу Session ID адресу.Переконайтеся, що ви записали свою фразу відновлення на папері і поклали її в безпечне місце
@@ -631,7 +623,6 @@
ПристроїЗапросити другаЧасті питання
- Фраза відновленняВидалити даніВидалити дані та аккаунтДопоможіть нам перекласти Session
@@ -644,8 +635,6 @@
Вас надійно повідомлятимуть про нові сповіщення негайно, використовуючи сервери сповіщень Google.Змінити їм’яВідв’язати цей пристрій
- Ваша фраза відновлення
- Запишіть це на папері. Це ваша фраза відновлення. З нею ви можете відновити або перенести ваш Session ID на новий пристрій.Видалити всі даніЦе остаточно видалить ваші повідомлення, сеанси та контакти.Ви хочете видалити тільки цей пристрій або видалити весь обліковий запис?
@@ -689,7 +678,6 @@
Виберіть файл резервної копії та введіть секретну фразу, з якою він був створений.30-символьний парольЦе займає деякий час, ви б хотіли це пропустити?
- Зв\'язати пристрійФраза відновленняСканувати QR-кодПерейдіть до Налаштувань → Фраза відновлення на вашому іншому пристрої, щоб відобразити ваш QR-код.
@@ -700,7 +688,6 @@
Медленний режимВас надійно повідомлятимуть про нові сповіщщеня негайно, використовуючи сервери сповіщень Google.Session буде періодично перевіряти наявність нових повідомлень у фоновому режимі.
- Фраза відновленняВи заблоковали SessionТоркніться, щоб розблокуватиВведіть псевдонім
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index 55dbcd63e3..7a468ee8e6 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -556,24 +556,21 @@
Невірна Session ID адрессаВідмінаВаша Session ID адресса
- Ваша сесія починається тут...
- Створити Session ID адрессу
- Продовжити вашу сесіюЩо таке Session?Це децентралізований, шифрований мессенджер обміну повідомленнямиОтже, він не збирає мою особисту інформацію чи мою метадані розмови? Як це працює?Він використовує комбінацію анонімної мережі та скрізного енд-ту-енд шифрування.Друзі не дозволяють друзям користуватися скомпромітованими мессенджерами. Ласкаво просимо.
- Привітайтесь з вашою Session ID адрессою
- Ваш Session ID є унікальною адресою, якою люди будуть зв’язуватимися з вами в Session. При відсутньому з\'єднанні з вашою реальною особистістю, Session ID є абсолютно анонімним та приватним, по дизайну.
+
+
Відновити обліковий записВведіть фразу відновлення, яку вам було сказано записати на папері під час реєстрації, для відновлення облікового запису.Введіть вашу фразу відновлення
- Виберіть ваш псевдонім для показу
- Це буде ваше ім\'я яке ви використовуєте в Session. Воно може бути вашим дійсним ім\'ям, альясом або чимусь іншим.
- Введіть відображуватинимий псевдонім
- Будь ласка, виберіть відображуватимий псевдонім
- Будь ласка, виберіть коротший псевдонім
+ Виберіть ваш псевдонім для показу
+ Це буде ваше ім\'я яке ви використовуєте в Session. Воно може бути вашим дійсним ім\'ям, альясом або чимусь іншим.
+ Введіть відображуватинимий псевдонім
+ Будь ласка, виберіть відображуватимий псевдонім
+ Будь ласка, виберіть коротший псевдонімРекомендованоБудь ласка виберіть варіантУ вас ще немає Session контактів
@@ -582,11 +579,6 @@
"Не вдалося покинути групу"Ви дійсно хочете видалити цю бесіду?Бесіду видалено
- Ваша фраза відновлення
- Знайомтесь з вашою фразою відновлення
- Ваша фраза відновлення - це головний ключ до вашогї Session ID адреси - ви можете використовувати її для відновлення вашої Session ID адреси якщо ви втратите доступ до пристрою. Запишіть на папері та зберігайте вашу фразу відновлення у безпечному місці і не дайте її нікому.
- Натисніть, щоб відобразити
- Ви майже закінчили! 80%Захистіть свій обліковий запис, записавши на папері відновлювальну фразуНатисніть і втримуйте приховані слова, щоб розкрити вашу фразу відновлення, запишіть її на папері, щоб безпечно захистити вашу Session ID адресу.Переконайтеся, що ви записали свою фразу відновлення на папері і поклали її в безпечне місце
@@ -631,7 +623,6 @@
ПристроїЗапросити другаЧасті питання
- Фраза відновленняВидалити даніВидалити дані та аккаунтДопоможіть нам перекласти Session
@@ -644,8 +635,6 @@
Вас надійно повідомлятимуть про нові сповіщення негайно, використовуючи сервери сповіщень Google.Змінити їм’яВідв’язати цей пристрій
- Ваша фраза відновлення
- Запишіть це на папері. Це ваша фраза відновлення. З нею ви можете відновити або перенести ваш Session ID на новий пристрій.Видалити всі даніЦе остаточно видалить ваші повідомлення, сеанси та контакти.Ви хочете видалити тільки цей пристрій або видалити весь обліковий запис?
@@ -689,7 +678,6 @@
Виберіть файл резервної копії та введіть секретну фразу, з якою він був створений.30-символьний парольЦе займає деякий час, ви б хотіли це пропустити?
- Зв\'язати пристрійФраза відновленняСканувати QR-кодПерейдіть до Налаштувань → Фраза відновлення на вашому іншому пристрої, щоб відобразити ваш QR-код.
@@ -700,7 +688,6 @@
Медленний режимВас надійно повідомлятимуть про нові сповіщщеня негайно, використовуючи сервери сповіщень Google.Session буде періодично перевіряти наявність нових повідомлень у фоновому режимі.
- Фраза відновленняВи заблоковали SessionТоркніться, щоб розблокуватиВведіть псевдонім
diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml
index 3c6146ec48..adc2034340 100644
--- a/app/src/main/res/values-vi-rVN/strings.xml
+++ b/app/src/main/res/values-vi-rVN/strings.xml
@@ -336,24 +336,21 @@ trao đổi chìa khóa bị hỏng!
Session ID không hợp lệHuỷSession ID của bạn
- Session của bạn bắt đầu từ đây...
- Tạo Session ID
- Tiếp tục Session của bạnSession là gì?Đây là một ứng dụng nhắn tin phân cấp và mã hoáVậy ứng dụng có thu thập dữ liệu cá nhân của tôi hoặc siêu dữ liệu về cuộc hội thoại của tôi không? Ứng dụng hoạt động như thế nào?Sử dụng kết hợp công nghệ định tuyến ẩn danh nâng cao và công nghệ mã hoá đầu cuối.Đừng để bạn bè sử dụng những ứng dụng nhắn tin dễ bị tấn công.
- Bắt đầu với Session ID của bạn
- Session ID của bạn là địa chỉ duy nhất mà mọi người có thể dùng để liên lạc với bạn trên ứng dụng Session. Session ID của bạn được thiết kế đảm bảo tuyệt đối ẩn danh và riêng tư vì nó không liên kết với danh tính thật của bạn.
+
+
Khôi phục lại tài khoản của bạnNhập cụm từ khôi phục mà bạn nhận được khi đăng ký khôi phục tài khoản.Nhập cụm từ khôi phục của bạn.
- Chọn tên hiển thị của bạn
- Đây là tên của bạn khi sử dụng Session. Nó có thể là tên thật, tên gọi khác của bạn hoặc bất kì tên nào bạn thích.
- Nhập một tên hiển thị
- Vui lòng chọn một tên hiển thị
- Vui lòng chọn tên hiển thị ngắn hơn
+ Chọn tên hiển thị của bạn
+ Đây là tên của bạn khi sử dụng Session. Nó có thể là tên thật, tên gọi khác của bạn hoặc bất kì tên nào bạn thích.
+ Nhập một tên hiển thị
+ Vui lòng chọn một tên hiển thị
+ Vui lòng chọn tên hiển thị ngắn hơnKhuyến nghịVui lòng lựa chọn Bạn chưa có danh bạ
@@ -362,10 +359,6 @@ trao đổi chìa khóa bị hỏng!
"Không thể rời nhóm"Bạn có chắc chắn rằng bạn muốn xoá cuộc hội thoại này không?Cuộc hội thoại đã được xoá
- Cụm từ khôi phục của bạn
- Làm quen với cụm từ khôi phục của bạn
- Cụm từ khôi phục của bạn là chìa khoá chủ cho Session ID của bạn — bạn có thể sử dụng nó để khôi phục Session ID khi bị mất tiếp cận với thiết bị của bạn. Hãy lưu cụm từ khôi phục của bạn ở một nơi an toàn và không cung cấp cho bất kì ai.
- Giữ để hiển thị.Bảo vệ tài khoản của bạn bằng việc bảo vệ cụm từ khôi phục của bạnChạm và giữ cụm từ bị che để hiển thị cụm từ khôi phục của bạn, sau đó lưu nó cẩn thận để bảo vệ Session ID của bạn.Hãy lưu cụm từ khôi phục của bạn ở một nơi an toàn
@@ -404,7 +397,6 @@ trao đổi chìa khóa bị hỏng!
Thông báoTrò chuyệnThiết bị
- Cụm từ khôi phụcXóa dữ liệuThông báoKiểu thông báo
@@ -413,8 +405,6 @@ trao đổi chìa khóa bị hỏng!
Chiến lược thông báoĐổi tênHủy liên kết thiết bị
- Cụm từ khôi phục của bạn
- Đây là cụm từ khôi phục của bạn. Bạn có thể dùng nó để khôi phục hoặc chuyển Session ID của mình sang một thiết bị mới.Xóa tất cả dữ liệuThao tác này sẽ xóa vĩnh viễn các tin nhắn, sessions, và danh bạ của bạn.Mã QR
diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml
index 3c6146ec48..adc2034340 100644
--- a/app/src/main/res/values-vi/strings.xml
+++ b/app/src/main/res/values-vi/strings.xml
@@ -336,24 +336,21 @@ trao đổi chìa khóa bị hỏng!
Session ID không hợp lệHuỷSession ID của bạn
- Session của bạn bắt đầu từ đây...
- Tạo Session ID
- Tiếp tục Session của bạnSession là gì?Đây là một ứng dụng nhắn tin phân cấp và mã hoáVậy ứng dụng có thu thập dữ liệu cá nhân của tôi hoặc siêu dữ liệu về cuộc hội thoại của tôi không? Ứng dụng hoạt động như thế nào?Sử dụng kết hợp công nghệ định tuyến ẩn danh nâng cao và công nghệ mã hoá đầu cuối.Đừng để bạn bè sử dụng những ứng dụng nhắn tin dễ bị tấn công.
- Bắt đầu với Session ID của bạn
- Session ID của bạn là địa chỉ duy nhất mà mọi người có thể dùng để liên lạc với bạn trên ứng dụng Session. Session ID của bạn được thiết kế đảm bảo tuyệt đối ẩn danh và riêng tư vì nó không liên kết với danh tính thật của bạn.
+
+
Khôi phục lại tài khoản của bạnNhập cụm từ khôi phục mà bạn nhận được khi đăng ký khôi phục tài khoản.Nhập cụm từ khôi phục của bạn.
- Chọn tên hiển thị của bạn
- Đây là tên của bạn khi sử dụng Session. Nó có thể là tên thật, tên gọi khác của bạn hoặc bất kì tên nào bạn thích.
- Nhập một tên hiển thị
- Vui lòng chọn một tên hiển thị
- Vui lòng chọn tên hiển thị ngắn hơn
+ Chọn tên hiển thị của bạn
+ Đây là tên của bạn khi sử dụng Session. Nó có thể là tên thật, tên gọi khác của bạn hoặc bất kì tên nào bạn thích.
+ Nhập một tên hiển thị
+ Vui lòng chọn một tên hiển thị
+ Vui lòng chọn tên hiển thị ngắn hơnKhuyến nghịVui lòng lựa chọn Bạn chưa có danh bạ
@@ -362,10 +359,6 @@ trao đổi chìa khóa bị hỏng!
"Không thể rời nhóm"Bạn có chắc chắn rằng bạn muốn xoá cuộc hội thoại này không?Cuộc hội thoại đã được xoá
- Cụm từ khôi phục của bạn
- Làm quen với cụm từ khôi phục của bạn
- Cụm từ khôi phục của bạn là chìa khoá chủ cho Session ID của bạn — bạn có thể sử dụng nó để khôi phục Session ID khi bị mất tiếp cận với thiết bị của bạn. Hãy lưu cụm từ khôi phục của bạn ở một nơi an toàn và không cung cấp cho bất kì ai.
- Giữ để hiển thị.Bảo vệ tài khoản của bạn bằng việc bảo vệ cụm từ khôi phục của bạnChạm và giữ cụm từ bị che để hiển thị cụm từ khôi phục của bạn, sau đó lưu nó cẩn thận để bảo vệ Session ID của bạn.Hãy lưu cụm từ khôi phục của bạn ở một nơi an toàn
@@ -404,7 +397,6 @@ trao đổi chìa khóa bị hỏng!
Thông báoTrò chuyệnThiết bị
- Cụm từ khôi phụcXóa dữ liệuThông báoKiểu thông báo
@@ -413,8 +405,6 @@ trao đổi chìa khóa bị hỏng!
Chiến lược thông báoĐổi tênHủy liên kết thiết bị
- Cụm từ khôi phục của bạn
- Đây là cụm từ khôi phục của bạn. Bạn có thể dùng nó để khôi phục hoặc chuyển Session ID của mình sang một thiết bị mới.Xóa tất cả dữ liệuThao tác này sẽ xóa vĩnh viễn các tin nhắn, sessions, và danh bạ của bạn.Mã QR
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 6452efb83a..8ee749cc35 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -518,24 +518,21 @@
无效的Session ID取消您的Session ID
- 您的Session从这里开始...
- 创建Session ID
- 继续使用您的Session ID什么是Session?Session是一个去中心化的加密消息应用所以Session不会收集我的个人信息或者对话元数据?怎么做到的?通过结合高效的匿名路由和端到端的加密技术。好朋友之间就要使用能够保证信息安全的聊天工具,不用谢啦!
- 向您的Session ID打个招呼吧
- 您的Session ID是其他用户在与您聊天时使用的独一无二的地址。Session ID与您的真实身份无关,它在设计上完全是匿名且私密的
+
+
恢复您的帐号在您重新登陆并需要恢复账户时,请输入您注册帐号时的恢复口令输入您的恢复口令
- 选择您想显示的名称
- 这就是您在使用Session时的名字。它可以是您的真实姓名,别名或您喜欢的其他任何名称
- 输入您想显示的名称
- 请设定一个名称
- 请设定一个较短的名称
+ 选择您想显示的名称
+ 这就是您在使用Session时的名字。它可以是您的真实姓名,别名或您喜欢的其他任何名称
+ 输入您想显示的名称
+ 请设定一个名称
+ 请设定一个较短的名称推荐的选项请选择一个选项您还没有任何联系人
@@ -544,11 +541,6 @@
"无法离开群组"您确定要删除此对话吗?对话已删除
- 您的恢复口令
- 这里是您的恢复口令
- 您的恢复口令是Session ID的主密钥 - 如果您无法访问您的现有设备,则可以使用它在其他设备上恢复您的Session ID。请将您的恢复口令存储在安全的地方,不要将其提供给任何人。
- 长按显示内容
- 就快完成了!80%保存恢复口令以保护您的帐号安全点击并按住遮盖住的单词以显示您的恢复口令,请将它安全地存储以保护您的Session ID请确保将恢复口令存储在安全的地方
@@ -593,7 +585,6 @@
设备邀请朋友常见问题
- 恢复口令清除数据清除包括网络在内的数据帮助我们翻译 Session
@@ -606,8 +597,6 @@
新消息将通过 Google 通知服务器即时可靠地发送更换名称断开设备关联
- 您的恢复口令
- 这是您的恢复口令。您可以通过该口令将Session ID还原或迁移到新设备上清除所有数据这将永久删除您的消息、对话和联系人你想只清除这个设备,还是删除你的整个账户?
@@ -651,7 +640,6 @@
选择一个备份文件,并输入创建该文件时使用的密码30位数的密码这需要一点时间,您想要跳过吗?
- 关联设备恢复口令扫描二维码在您的其他设备上导航到设置 -> 恢复口令以显示您的 QR 代码
@@ -662,7 +650,6 @@
慢速模式新消息将通过 Google 通知服务器即时可靠地发送Session 将不时在后台获取新消息
- 恢复口令Session 已锁定点击解锁输入昵称
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 525d534185..946a9d81ba 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -524,24 +524,21 @@
無效的 Session ID取消您的 Session ID
- 您的 Session 將從此開始⋯
- 創建 Session ID
- 繼續使用 SessionSession 是什麼?這是一個去中心化並且加密的訊息 app所以牠不會收集我的個人資訊或我的對話元數據? 它是如何工作的?我們結合了進階匿名連線與端對端加密技術。我們不會讓自己的朋友使用不夠好的聊天 app,不客氣。
- 與您的 Session ID 打個招呼
- 您的 Session ID 是人們可以用來在 Session 上聯繫您的唯一地址。 並且與您的真實身份毫無關聯,因此您的 Session ID 在設計上是完全匿名和私密的。
+
+
恢復您的帳號輸入您註冊時提供的恢復短語以恢復您的帳號。請輸入您的回復用字句
- 請輸入您的名稱
- 當您使用 Session 時,這將是您的名字。 它可以是您的真實姓名、別名或您喜歡的任何名稱。
- 輸入您的名稱
- 請選擇一個名稱
- 請選擇一個較短的名稱
+ 請輸入您的名稱
+ 當您使用 Session 時,這將是您的名字。 它可以是您的真實姓名、別名或您喜歡的任何名稱。
+ 輸入您的名稱
+ 請選擇一個名稱
+ 請選擇一個較短的名稱建議請選擇其中一個選項您尚未添加聯絡人
@@ -550,11 +547,6 @@
"無法離開群組"您確定要刪除此對話嗎?對話已刪除
- 你的恢復密語
- 查看您的恢復短語
- 您的恢復短語是您的 Session ID 的主金鑰——如果您無法存取您的裝置,您可以使用它來恢復您的Session ID。 將您的恢復短語存放在安全的地方,不要將其提供給任何人。
- 按住以解除隱藏
- 安裝快完成囉!80%透過儲存您的恢復短語來保護您的帳戶點擊並按住已編輯的字詞以顯示您的恢復短語,然後將其妥善保管以保護您的 Session ID。請確保將您的恢復短語存儲在安全的地方
@@ -599,7 +591,6 @@
裝置邀請好友常見問題
- 回復用字句清除資料清除包括網路在內的資料協助我們翻譯 Session
@@ -612,8 +603,6 @@
您將會透過 Google 的通知服務可靠且迅速的收到通知。變更名稱取消連結裝置
- 您的恢復短語
- 這是您的恢復短語。 有了它,您可以將 Session ID 恢復或轉移到新裝置。清除所有數據這將永久刪除您的訊息、帳號和聯絡人。您想僅清除此裝置的資料,還是刪除您整個帳戶的資料?
@@ -657,7 +646,6 @@
選擇一個備份檔案,並輸入建立時的密碼。30 位數密碼這可能需要一些時間,要跳過嗎?
- 連結裝置回復用字句掃描 QR Code請使用您其他的裝置並前往「設定」→「回復用字句」來顯示您的QR Code。
@@ -668,7 +656,6 @@
慢速模式您將會透過 Google 的通知服務可靠且迅速的收到通知。Session 會偶爾在背景執行時檢查新訊息。
- 回復用字句Session 已被鎖定輕觸即可解鎖輸入暱稱
diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml
index 86963c540a..0e66581cef 100644
--- a/app/src/main/res/values-zh/strings.xml
+++ b/app/src/main/res/values-zh/strings.xml
@@ -518,24 +518,21 @@
无效的Session ID取消您的Session ID
- 您的Session从这里开始...
- 创建Session ID
- 继续使用您的Session ID什么是Session?Session是一个去中心化的加密消息应用。所以Session不会收集我的个人信息或者对话元数据?怎么做到的?通过结合高效的匿名路由和端到端的加密技术。好朋友之间就要使用能够保证信息安全的聊天工具,不用谢啦!
- 向您的Session ID打个招呼吧
- 您的Session ID是其他用户在与您聊天时使用的独一无二的地址。Session ID与您的真实身份无关,它在设计上完全是匿名且私密的。
+
+
恢复您的帐号在您重新登陆并需要恢复账户时,请输入您注册帐号时的恢复口令。输入您的恢复口令
- 选择您想显示的名称
- 这就是您在使用Session时的名字。它可以是您的真实姓名,别名或您喜欢的其他任何名称。
- 输入您想显示的名称
- 请设定一个名称
- 请设定一个较短的名称
+ 选择您想显示的名称
+ 这就是您在使用Session时的名字。它可以是您的真实姓名,别名或您喜欢的其他任何名称。
+ 输入您想显示的名称
+ 请设定一个名称
+ 请设定一个较短的名称推荐的选项请选择一个选项您还没有任何联系人
@@ -544,11 +541,6 @@
"无法离开群组"您确定要删除此对话吗?对话已删除
- 您的恢复口令
- 这里是您的恢复口令
- 您的恢复口令是Session ID的主密钥 - 如果您无法访问您的现有设备,则可以使用它在其他设备上恢复您的Session ID。请将您的恢复口令存储在安全的地方,不要将其提供给任何人。
- 长按显示内容
- 就快完成了!80%保存恢复口令以保护您的帐号安全点击并按住遮盖住的单词以显示您的恢复口令,请将它安全地存储以保护您的Session ID。请确保将恢复口令存储在安全的地方
@@ -593,7 +585,6 @@
设备邀请朋友常见问题
- 恢复口令清除数据清除包括网络在内的数据帮助我们翻译 Session
@@ -606,8 +597,6 @@
新消息将通过 Google 通知服务器即时可靠地发送。更换名称断开设备关联
- 您的恢复口令
- 这是您的恢复口令。您可以通过该口令将Session ID还原或迁移到新设备上。清除所有数据这将永久删除您的消息、对话和联系人。你想只清除这个设备,还是删除你的整个账户?
@@ -651,7 +640,6 @@
选择一个备份文件,并输入创建该文件时使用的密码。30位数的密码这需要一点时间,您想要跳过吗?
- 关联设备恢复口令扫描二维码在您的其他设备上导航到设置 -> 恢复口令以显示您的 QR 代码。
@@ -662,7 +650,6 @@
慢速模式新消息将通过 Google 通知服务器即时可靠地发送。Session 将不时在后台获取新消息。
- 恢复口令Session 已锁定点击解锁输入昵称
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
index ae38d0c057..51c5d37b40 100644
--- a/app/src/main/res/values/attrs.xml
+++ b/app/src/main/res/values/attrs.xml
@@ -28,6 +28,9 @@
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 640b9f005d..ad7d28a87e 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -17,11 +17,10 @@
Create session IDRestore Your Session
- Link a deviceLink DeviceSession ID
- Recovery phrase reminder
+ Account IDContinue
@@ -35,9 +34,6 @@
Fast mode notifications optionSlow mode notifications optionContinue with settings
-
- Recovery Phrase
- Copy Recovery PhraseUser settingsSearch icon
@@ -137,7 +133,7 @@
User settingsUsernamePrivacy
- Show recovery phrase
+ Recovery password menu itemEdit user nicknameApplyCancel
@@ -727,6 +723,7 @@
ContinueCopy
+ CopiedCloseInvalid URLCopied to clipboard
@@ -735,24 +732,17 @@
Invalid Session IDCancelYour Session ID
- Your Session begins here...
- Create Session ID
- Continue Your Session
- What\'s Session?
- It\'s a decentralized, encrypted messaging app
- So it doesn\'t collect my personal information or my conversation metadata? How does it work?
- Using a combination of advanced anonymous routing and end-to-end encryption technologies.
- Friends don\'t let friends use compromised messengers. You\'re welcome.
- Say hello to your Session ID
- Your Session ID is the unique address people can use to contact you on Session. With no connection to your real identity, your Session ID is totally anonymous and private by design.
- Restore your account
- Enter the recovery phrase that was given to you when you signed up to restore your account.
- Enter your recovery phrase
- Pick your display name
- This will be your name when you use Session. It can be your real name, an alias, or anything else you like.
- Enter a display name
- Please pick a display name
- Please pick a shorter display name
+ Open URL
+ This will open in your browser.
+ Terms of Service
+ Privacy Policy
+ Pick your display name
+ Pick a new display name
+ It can be your real name, an alias, or anything else you like — and you can change it any time.
+ We were unable to load your display name. Please enter a new display name to continue.
+ Enter a display name
+ Please pick a display name
+ Please pick a shorter display nameRecommendedPlease Pick an OptionYou don\'t have any contacts yet
@@ -761,11 +751,6 @@
"Couldn\'t leave group"Are you sure you want to delete this conversation?Conversation deleted
- Your Recovery Phrase
- Meet your recovery phrase
- Your recovery phrase is the master key to your Session ID — you can use it to restore your Session ID if you lose access to your device. Store your recovery phrase in a safe place, and don\'t give it to anyone.
- Hold to reveal
- You\'re almost finished! 80%Secure your account by saving your recovery phraseTap and hold the redacted words to reveal your recovery phrase, then store it safely to secure your Session ID.Make sure to store your recovery phrase in a safe place
@@ -814,7 +799,6 @@
DevicesInvite a FriendFAQ
- Recovery PhraseClear DataClear Data Including NetworkHelp us Translate Session
@@ -836,8 +820,6 @@
You\'ll be notified of new messages reliably and immediately using Google\'s notification servers.Change nameUnlink device
- Your Recovery Phrase
- You can use your recovery phrase to restore your account or link a device.Clear All DataThis will permanently delete your messages, sessions, and contacts.Would you like to clear only this device, or delete your entire account?
@@ -885,19 +867,13 @@
Select a fileSelect a backup file and enter the passphrase it was created with.30-digit passphrase
- This is taking a while, would you like to skip?
- Link a Device
- Recovery Phrase
- Scan QR Code
+ Scan QR CodeNavigate to Settings → Recovery Phrase on your other device to show your QR code.Or join one of these…
- Message Notifications
- There are two ways Session can notify you of new messages.Fast ModeSlow ModeYou’ll be notified of new messages reliably and immediately using Google’s notification servers.Session will occasionally check for new messages in the background.
- Recovery PhraseSession is LockedTap to UnlockEnter a nickname
@@ -1082,4 +1058,62 @@
Unread MessagesAuto-deletes in %1$s
+ Privacy in your pocket.
+ Welcome to Session 👋
+ Welcome to Session
+ Session is engineered to protect your privacy.
+ "You don’t even need a phone number to sign up. "
+ Creating an account is \ninstant, free, and \nanonymous 👇
+ Create account
+ I have an account
+ By using this service, you agree to our Terms of Service and Privacy Policy
+
+ This QR code does not contain a Recovery Password.
+
+ The Recovery Password you entered is not long enough. Please check and try again.
+ Some of the words in your Recovery Password are incorrect. Please check and try again.
+ Please check your Recovery Password and try again.
+
+ Grant Camera Access
+ Recovery Password
+ Enter your recovery password
+
+ Settings
+
+ Load Account
+ Camera Permission permanently denied. Configure in settings.
+ Enter your recovery password to load your account. If you haven\'t saved it, you can find it in your app settings.
+ One moment please..
+ Loading your account
+ Message notifications
+ There are two ways Session can notify you of new messages.
+ Hide Recovery Password Permanently
+ We strongly recommend you save your recovery password in a safe and secure place before continuing.]]>
+ Are you sure you want to permanently hide your recovery password on this device? This cannot be undone.
+ Use your recovery password to load your account on new devices. Your account cannot be recovered without your recovery password. Make sure it\'s stored somewhere safe and secure — and don\'t share it with anyone.
+ Hide
+ Hide Recovery Password
+ View QR
+ View Password
+ Permanently hide your recovery password on this device.
+ You don\'t have any conversations yet
+ Hit the plus button to start a chat, create a group, or join an official communitiy!
+ Because you are the creator of this group it will be deleted for everyone. This cannot be undone.
+ Hide message requests?
+ Save your recovery password
+ Save your recovery password to make sure you don\'t lose access to your account.
+ Account Created
+ Fast mode notifications button
+ Slow mode notifications button
+ Reveal recovery phrase button
+ Create account button
+ Restore your session button
+ Privacy policy link
+ Terms of service link
+ Loading animation
+ Recovery phrase input
+ Error message
+ Hide recovery password button
+ Confirm button
+ Open URL
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 412eec96db..5b27ef5eac 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -205,28 +205,6 @@
sans-serif-medium
-
-
-
-
-
@@ -342,6 +343,9 @@
?colorAccent@color/classic_dark_3
+ @color/white
+ @color/black
+
false
@@ -421,6 +425,9 @@
?android:textColorPrimary@color/classic_light_3
+ @color/classic_light_5
+ @color/black
+
light?colorPrimary
@@ -509,6 +516,9 @@
?colorAccent@color/ocean_dark_4
+ @color/white
+ @color/ocean_dark_2
+
false
@@ -592,6 +602,9 @@
?android:textColorPrimary@color/ocean_light_3
+ @color/ocean_light_6
+ @color/ocean_light_1
+
light?colorPrimary
diff --git a/build.gradle b/build.gradle
index 9ac76c9d07..70d1f63fa4 100644
--- a/build.gradle
+++ b/build.gradle
@@ -12,6 +12,7 @@ buildscript {
dependencies {
classpath "com.android.tools.build:gradle:$gradlePluginVersion"
+ classpath files('libs/gradle-witness.jar')
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlinVersion"
classpath "com.google.gms:google-services:$googleServicesVersion"
diff --git a/gradle.properties b/gradle.properties
index 1d7bc62d40..66ea0fcba8 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -13,10 +13,10 @@
#Mon Jun 26 09:56:43 AEST 2023
android.enableJetifier=true
-gradlePluginVersion=7.3.1
org.gradle.jvmargs=-Xmx2048M -Dkotlin.daemon.jvm.options\="-Xmx2048M"
org.gradle.unsafe.configuration-cache=true
+gradlePluginVersion=7.4.2
googleServicesVersion=4.3.12
kotlinVersion=1.8.21
android.useAndroidX=true
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index cd825d0848..ab85dbb695 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Thu Dec 30 07:09:53 SAST 2021
distributionBase=GRADLE_USER_HOME
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
diff --git a/libsession/src/main/java/org/session/libsession/utilities/TextSecurePreferences.kt b/libsession/src/main/java/org/session/libsession/utilities/TextSecurePreferences.kt
index af16d93f5a..be2ca1eca6 100644
--- a/libsession/src/main/java/org/session/libsession/utilities/TextSecurePreferences.kt
+++ b/libsession/src/main/java/org/session/libsession/utilities/TextSecurePreferences.kt
@@ -18,6 +18,7 @@ import org.session.libsession.utilities.TextSecurePreferences.Companion.CALL_NOT
import org.session.libsession.utilities.TextSecurePreferences.Companion.CLASSIC_DARK
import org.session.libsession.utilities.TextSecurePreferences.Companion.CLASSIC_LIGHT
import org.session.libsession.utilities.TextSecurePreferences.Companion.FOLLOW_SYSTEM_SETTINGS
+import org.session.libsession.utilities.TextSecurePreferences.Companion.HIDE_PASSWORD
import org.session.libsession.utilities.TextSecurePreferences.Companion.LAST_VACUUM_TIME
import org.session.libsession.utilities.TextSecurePreferences.Companion.LEGACY_PREF_KEY_SELECTED_UI_MODE
import org.session.libsession.utilities.TextSecurePreferences.Companion.OCEAN_DARK
@@ -30,6 +31,7 @@ import java.io.IOException
import java.util.Arrays
import java.util.Date
import javax.inject.Inject
+import javax.inject.Singleton
interface TextSecurePreferences {
@@ -182,6 +184,8 @@ interface TextSecurePreferences {
fun hasForcedNewConfig(): Boolean
fun hasPreference(key: String): Boolean
fun clearAll()
+ fun getHidePassword(): Boolean
+ fun setHidePassword(value: Boolean)
companion object {
val TAG = TextSecurePreferences::class.simpleName
@@ -283,6 +287,7 @@ interface TextSecurePreferences {
const val SELECTED_STYLE = "pref_selected_style" // classic_dark/light, ocean_dark/light
const val FOLLOW_SYSTEM_SETTINGS = "pref_follow_system" // follow system day/night
+ const val HIDE_PASSWORD = "pref_hide_password"
const val LEGACY_PREF_KEY_SELECTED_UI_MODE = "SELECTED_UI_MODE" // this will be cleared upon launching app, for users migrating to theming build
const val CLASSIC_DARK = "classic.dark"
@@ -1016,6 +1021,7 @@ interface TextSecurePreferences {
}
}
+@Singleton
class AppTextSecurePreferences @Inject constructor(
@ApplicationContext private val context: Context
): TextSecurePreferences {
@@ -1711,4 +1717,9 @@ class AppTextSecurePreferences @Inject constructor(
getDefaultSharedPreferences(context).edit().clear().commit()
}
-}
\ No newline at end of file
+ override fun getHidePassword() = getBooleanPreference(HIDE_PASSWORD, false)
+
+ override fun setHidePassword(value: Boolean) {
+ setBooleanPreference(HIDE_PASSWORD, value)
+ }
+}
diff --git a/libsignal/src/main/java/org/session/libsignal/crypto/MnemonicCodec.kt b/libsignal/src/main/java/org/session/libsignal/crypto/MnemonicCodec.kt
index 73c86f321e..512a07fa5f 100644
--- a/libsignal/src/main/java/org/session/libsignal/crypto/MnemonicCodec.kt
+++ b/libsignal/src/main/java/org/session/libsignal/crypto/MnemonicCodec.kt
@@ -21,31 +21,15 @@ class MnemonicCodec(private val loadFileContents: (String) -> String) {
companion object {
internal val wordSetCache = mutableMapOf>()
- internal val truncatedWordSetCache = mutableMapOf>()
}
- internal fun loadWordSet(): List {
- val cachedResult = wordSetCache[this]
- if (cachedResult != null) {
- return cachedResult
- } else {
- val contents = loadFileContents(configuration.filename)
- val result = contents.split(",")
- wordSetCache[this] = result
- return result
- }
+ internal fun loadWordSet(): List = wordSetCache.getOrPut(this) {
+ loadFileContents(configuration.filename).split(",")
}
- internal fun loadTruncatedWordSet(): List {
- val cachedResult = wordSetCache[this]
- if (cachedResult != null) {
- return cachedResult
- } else {
- val prefixLength = configuration.prefixLength
- val result = loadWordSet().map { it.substring(0 until prefixLength) }
- truncatedWordSetCache[this] = result
- return result
- }
+ internal fun loadTruncatedWordSet(): List = wordSetCache.getOrPut(this) {
+ val prefixLength = configuration.prefixLength
+ loadWordSet().map { it.substring(0 until prefixLength) }
}
}
@@ -94,10 +78,8 @@ class MnemonicCodec(private val loadFileContents: (String) -> String) {
var result = ""
val n = truncatedWordSet.size.toLong()
// Check preconditions
- if (words.size < 12) { throw DecodingError.InputTooShort
- }
- if (words.size % 3 == 0) { throw DecodingError.MissingLastWord
- }
+ if (words.size < 12) throw DecodingError.InputTooShort
+ if (words.size % 3 == 0) throw DecodingError.MissingLastWord
// Get checksum word
val checksumWord = words.removeAt(words.lastIndex)
// Decode