diff --git a/app/build.gradle b/app/build.gradle
index bfb73f9fc..6e7e60605 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -5,7 +5,7 @@ buildscript {
mavenCentral()
}
dependencies {
- classpath "com.android.tools.build:gradle:$gradlePluginVersion"
+ classpath 'com.android.tools.build:gradle:7.4.2'
classpath files('libs/gradle-witness.jar')
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlinVersion"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f2a4642b7..3ba789b60 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -106,23 +106,23 @@
android:name="org.thoughtcrime.securesms.onboarding.RegisterActivity"
android:screenOrientation="portrait"
android:theme="@style/Theme.Session.DayNight.FlatActionBar" />
-
+ Unit = {}
) = button(
text,
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 70d83ef5e..60abb7cf0 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
@@ -113,7 +113,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
@@ -163,6 +162,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
@@ -1579,9 +1579,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()
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 61732827f..4f2d29edb 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
@@ -362,7 +362,7 @@ fun FileDetails(fileDetails: List) {
fun TitledErrorText(titledText: TitledText?) {
TitledText(
titledText,
- valueStyle = LocalTextStyle.current.copy(color = colorDestructive)
+ style = LocalTextStyle.current.copy(color = colorDestructive)
)
}
@@ -370,7 +370,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)
)
}
@@ -378,11 +378,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/conversation/v2/utilities/ThumbnailProgressBar.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/utilities/ThumbnailProgressBar.kt
index 8188c4f7d..d5ef6434e 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/utilities/ThumbnailProgressBar.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/utilities/ThumbnailProgressBar.kt
@@ -31,7 +31,6 @@ class ThumbnailProgressBar: View {
private val drawingRect = Rect()
override fun dispatchDraw(canvas: Canvas) {
-
getDrawingRect(objectRect)
drawingRect.set(objectRect)
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 f25545572..e806266ba 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/home/HomeActivity.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/home/HomeActivity.kt
@@ -10,9 +10,33 @@ import android.content.Intent
import android.content.IntentFilter
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.foundation.layout.wrapContentSize
+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
@@ -69,12 +93,18 @@ 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.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.DateUtils
import org.thoughtcrime.securesms.util.IP2Country
@@ -89,7 +119,6 @@ import javax.inject.Inject
@AndroidEntryPoint
class HomeActivity : PassphraseRequiredActionBarActivity(),
ConversationClickListener,
- SeedReminderViewDelegate,
GlobalSearchInputLayout.GlobalSearchInputLayoutListener {
companion object {
@@ -178,15 +207,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()
}
}
setupMessageRequestsBanner()
@@ -203,7 +225,8 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
}
// Set up empty state view
- binding.createNewPrivateChatButton.setOnClickListener { showNewConversation() }
+ binding.emptyStateContainer.setContent { EmptyView() }
+
IP2Country.configureIfNeeded(this@HomeActivity)
startObservingUpdates()
@@ -315,6 +338,76 @@ 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("Save your recovery password", style = MaterialTheme.typography.h8)
+ Spacer(Modifier.requiredWidth(8.dp))
+ SessionShieldIcon()
+ }
+ Text("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)
+ ) { startRecoveryPasswordActivity() }
+ }
+ }
+ }
+ }
+
+ @Composable
+ private fun EmptyView() {
+ AppTheme {
+ Column(
+ horizontalAlignment = Alignment.CenterHorizontally,
+ modifier = Modifier
+ .padding(horizontal = 50.dp)
+ .padding(bottom = 12.dp)
+ ) {
+ Spacer(modifier = Modifier.weight(1f))
+ Icon(
+ painter = painterResource(id = R.drawable.emoji_tada),
+ contentDescription = null,
+ tint = Color.Unspecified
+ )
+ Text("Account Created", style = MaterialTheme.typography.h4, textAlign = TextAlign.Center)
+ Text("Welcome to Session", color = MaterialTheme.colors.secondary, textAlign = TextAlign.Center)
+ Divider(modifier = Modifier.padding(vertical = 16.dp))
+ Text("You don't have any conversations yet",
+ style = MaterialTheme.typography.h8,
+ textAlign = TextAlign.Center,
+ modifier = Modifier.padding(bottom = 12.dp))
+ Text("Hit the plus button to start a chat, create a group, or join an official communitiy!", textAlign = TextAlign.Center)
+ Spacer(modifier = Modifier.weight(2f))
+ }
+ }
+ }
+
override fun onInputFocusChanged(hasFocus: Boolean) {
if (hasFocus) {
setSearchShown(true)
@@ -463,11 +556,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)
@@ -491,7 +579,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()
}
@@ -500,7 +588,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()
}
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 c0699e3eb..000000000
--- 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 dcd4d783e..000000000
--- 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 f67f0fbaa..d0f073516 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/onboarding/LandingActivity.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/onboarding/LandingActivity.kt
@@ -1,41 +1,147 @@
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.text.style.TextAlign
+import androidx.compose.ui.tooling.preview.Preview
+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.OutlineButton
+import org.thoughtcrime.securesms.ui.classicDarkColors
+import org.thoughtcrime.securesms.ui.session_accent
import org.thoughtcrime.securesms.util.setUpActionBarSessionLogo
class LandingActivity : BaseActionBarActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- 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 { 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() {
+ AppTheme {
+ Column(modifier = Modifier.padding(horizontal = 36.dp)) {
+ Spacer(modifier = Modifier.weight(1f))
+ Text("Privacy in your pocket.", modifier = Modifier.align(Alignment.CenterHorizontally), style = MaterialTheme.typography.h4, textAlign = TextAlign.Center)
+ Spacer(modifier = Modifier.height(24.dp))
+ IncomingText("Welcome to Session \uD83D\uDC4B")
+ Spacer(modifier = Modifier.height(14.dp))
+ OutgoingText("Session is engineered\nto protect your privacy.")
+ Spacer(modifier = Modifier.height(14.dp))
+ IncomingText("You don’t even need a phone number to sign up. ")
+ Spacer(modifier = Modifier.height(14.dp))
+ OutgoingText("Creating an account is \ninstant, free, and \nanonymous \uD83D\uDC47")
+ Spacer(modifier = Modifier.weight(1f))
+
+ OutlineButton(text = "Create account", modifier = Modifier
+ .width(262.dp)
+ .align(Alignment.CenterHorizontally)) { startPickDisplayNameActivity() }
+ Spacer(modifier = Modifier.height(14.dp))
+ FilledButton(text = "I have an account", modifier = Modifier
+ .width(262.dp)
+ .align(Alignment.CenterHorizontally)) { startLinkDeviceActivity() }
+ Spacer(modifier = Modifier.height(8.dp))
+ BorderlessButton(
+ text = "By using this service, you agree to our Terms of Service and Privacy Policy",
+ modifier = Modifier
+ .width(262.dp)
+ .align(Alignment.CenterHorizontally),
+ fontSize = 11.sp,
+ lineHeight = 13.sp
+ ) { openDialog() }
+ Spacer(modifier = Modifier.height(8.dp))
+ }
+ }
}
- private fun link() {
- val intent = Intent(this, LinkDeviceActivity::class.java)
- push(intent)
+ private fun openDialog() {
+ showSessionDialog {
+ title(R.string.activity_landing_open_url_title)
+ text(R.string.activity_landing_open_url_explanation)
+ button(R.string.activity_landing_terms_of_service) { open("https://getsession.org/terms-of-service") }
+ button(R.string.activity_landing_privacy_policy) { open("https://getsession.org/privacy-policy") }
+ }
}
-}
\ No newline at end of file
+
+ 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,
+ textColor: Color = Color.Unspecified,
+ modifier: Modifier = Modifier
+ ) {
+ 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 edd1bc274..0e06bdb93 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/onboarding/LinkDeviceActivity.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/onboarding/LinkDeviceActivity.kt
@@ -10,54 +10,28 @@ 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 androidx.lifecycle.lifecycleScope
-import com.google.android.material.snackbar.Snackbar
import dagger.hilt.android.AndroidEntryPoint
-import kotlinx.coroutines.Job
-import kotlinx.coroutines.delay
-import kotlinx.coroutines.flow.filter
-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 javax.inject.Inject
@AndroidEntryPoint
class LinkDeviceActivity : BaseActionBarActivity(), ScanQRCodeWrapperFragmentDelegate {
- @Inject
- lateinit var configFactory: ConfigFactory
-
private lateinit var binding: ActivityLinkDeviceBinding
- internal val database: LokiAPIDatabaseProtocol
- get() = SnodeModule.shared.storage
- private val adapter = LinkDeviceActivityAdapter(this)
- private var restoreJob: Job? = null
- override fun onBackPressed() {
- if (restoreJob?.isActive == true) return // Don't allow going back with a pending job
- super.onBackPressed()
- }
+ private val adapter = LinkDeviceActivityAdapter(this)
// region Lifecycle
override fun onCreate(savedInstanceState: Bundle?) {
@@ -106,58 +80,7 @@ class LinkDeviceActivity : BaseActionBarActivity(), ScanQRCodeWrapperFragmentDel
}
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)
+ startLoadingActivity(seed)
}
// endregion
}
@@ -227,3 +150,7 @@ class RecoveryPhraseFragment : Fragment() {
}
}
// endregion
+
+fun Context.startLinkDeviceActivity() {
+ Intent(this, LinkDeviceActivity::class.java).let(::startActivity)
+}
\ No newline at end of file
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 000000000..0d053de05
--- /dev/null
+++ b/app/src/main/java/org/thoughtcrime/securesms/onboarding/LoadingActivity.kt
@@ -0,0 +1,111 @@
+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.lifecycle.lifecycleScope
+import dagger.hilt.android.AndroidEntryPoint
+import kotlinx.coroutines.launch
+import org.session.libsession.utilities.TextSecurePreferences
+import org.thoughtcrime.securesms.BaseActionBarActivity
+import org.thoughtcrime.securesms.dependencies.ConfigFactory
+import org.thoughtcrime.securesms.onboarding.messagenotifications.startPNModeActivity
+import org.thoughtcrime.securesms.onboarding.pickname.startPickDisplayNameActivity
+import org.thoughtcrime.securesms.ui.AppTheme
+import org.thoughtcrime.securesms.ui.ProgressArc
+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 -> startPNModeActivity(flags)
+ }
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ ComposeView(this)
+ .apply { setContent { LoadingScreen() } }
+ .let(::setContentView)
+
+ 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))
+ Text("One moment please..", modifier = Modifier.align(Alignment.CenterHorizontally), style = MaterialTheme.typography.h6)
+ Text("Loading your account", 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 000000000..68bc5cc12
--- /dev/null
+++ b/app/src/main/java/org/thoughtcrime/securesms/onboarding/LoadingViewModel.kt
@@ -0,0 +1,102 @@
+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.hours
+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 e4e8e6a9a..000000000
--- 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/RecoveryPhraseRestoreActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/onboarding/RecoveryPhraseRestoreActivity.kt
deleted file mode 100644
index 051cd7542..000000000
--- a/app/src/main/java/org/thoughtcrime/securesms/onboarding/RecoveryPhraseRestoreActivity.kt
+++ /dev/null
@@ -1,114 +0,0 @@
-package org.thoughtcrime.securesms.onboarding
-
-import android.content.Intent
-import android.graphics.Typeface
-import android.net.Uri
-import android.os.Bundle
-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 dagger.hilt.android.AndroidEntryPoint
-import network.loki.messenger.R
-import network.loki.messenger.databinding.ActivityRecoveryPhraseRestoreBinding
-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.hexEncodedPublicKey
-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.push
-import org.thoughtcrime.securesms.util.setUpActionBarSessionLogo
-import javax.inject.Inject
-
-@AndroidEntryPoint
-class RecoveryPhraseRestoreActivity : BaseActionBarActivity() {
-
- @Inject
- lateinit var configFactory: ConfigFactory
-
- private lateinit var binding: ActivityRecoveryPhraseRestoreBinding
- internal val database: LokiAPIDatabaseProtocol
- get() = SnodeModule.shared.storage
- // region Lifecycle
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setUpActionBarSessionLogo()
- TextSecurePreferences.apply {
- setHasViewedSeed(this@RecoveryPhraseRestoreActivity, true)
- setConfigurationMessageSynced(this@RecoveryPhraseRestoreActivity, false)
- setRestorationTime(this@RecoveryPhraseRestoreActivity, System.currentTimeMillis())
- setLastProfileUpdateTime(this@RecoveryPhraseRestoreActivity, System.currentTimeMillis())
- }
- binding = ActivityRecoveryPhraseRestoreBinding.inflate(layoutInflater)
- setContentView(binding.root)
- binding.mnemonicEditText.imeOptions = binding.mnemonicEditText.imeOptions or 16777216 // Always use incognito keyboard
- binding.restoreButton.setOnClickListener { restore() }
- 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
- }
- // endregion
-
- // region Interaction
- private fun restore() {
- val mnemonic = binding.mnemonicEditText.text.toString()
- try {
- // 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()
-
- val loadFileContents: (String) -> String = { fileName ->
- MnemonicUtilities.loadFileContents(this, fileName)
- }
- val hexEncodedSeed = MnemonicCodec(loadFileContents).decode(mnemonic)
- val seed = Hex.fromStringCondensed(hexEncodedSeed)
- val keyPairGenerationResult = KeyPairUtilities.generate(seed)
- val x25519KeyPair = keyPairGenerationResult.x25519KeyPair
- KeyPairUtilities.store(this, seed, keyPairGenerationResult.ed25519KeyPair, x25519KeyPair)
- configFactory.keyPairChanged()
- val userHexEncodedPublicKey = x25519KeyPair.hexEncodedPublicKey
- val registrationID = KeyHelper.generateRegistrationId(false)
- TextSecurePreferences.setLocalRegistrationId(this, registrationID)
- TextSecurePreferences.setLocalNumber(this, userHexEncodedPublicKey)
- val intent = Intent(this, DisplayNameActivity::class.java)
- push(intent)
- } catch (e: Exception) {
- val message = if (e is MnemonicCodec.DecodingError) e.description else MnemonicCodec.DecodingError.Generic.description
- return Toast.makeText(this, message, 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/RegisterActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/onboarding/RegisterActivity.kt
deleted file mode 100644
index 6e082e000..000000000
--- a/app/src/main/java/org/thoughtcrime/securesms/onboarding/RegisterActivity.kt
+++ /dev/null
@@ -1,157 +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() {
-
- @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()
- }
- // endregion
-
- // region Updating
- private fun updateKeyPair() {
- val keyPairGenerationResult = 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 0eab58fa0..000000000
--- 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 28611985f..000000000
--- 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 000000000..42fc83f05
--- /dev/null
+++ b/app/src/main/java/org/thoughtcrime/securesms/onboarding/messagenotifications/MessageNotificationsActivity.kt
@@ -0,0 +1,168 @@
+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.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 { MessageNotifications() } }
+ .let(::setContentView)
+ }
+
+ @Composable
+ private fun MessageNotifications() {
+ val state by viewModel.stateFlow.collectAsState()
+
+ AppTheme {
+ MessageNotifications(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 MessageNotificationsPreview(
+ @PreviewParameter(ThemeResPreviewParameterProvider::class) themeResId: Int
+) {
+ PreviewTheme(themeResId) {
+ MessageNotifications()
+ }
+}
+
+@Composable
+fun MessageNotifications(
+ state: MessageNotificationsState = MessageNotificationsState(),
+ setEnabled: (Boolean) -> Unit = {},
+ onContinue: () -> Unit = {}
+) {
+ Column(Modifier.padding(horizontal = 32.dp)) {
+ Spacer(Modifier.weight(1f))
+ Text("Message notifications", style = MaterialTheme.typography.h4)
+ Spacer(Modifier.height(16.dp))
+ Text("There are two ways Session can notify you of new messages.")
+ 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,
+ 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,
+ 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,
+ selected: Boolean = false,
+ onClick: () -> Unit = {}
+) {
+ Row {
+ OutlinedButton(
+ onClick = onClick,
+ modifier = Modifier.weight(1f),
+ 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.startPNModeActivity(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 000000000..f913e0444
--- /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 000000000..729194a5d
--- /dev/null
+++ b/app/src/main/java/org/thoughtcrime/securesms/onboarding/pickname/PickDisplayNameActivity.kt
@@ -0,0 +1,150 @@
+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.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.unit.dp
+import androidx.lifecycle.lifecycleScope
+import dagger.hilt.android.AndroidEntryPoint
+import kotlinx.coroutines.launch
+import network.loki.messenger.R
+import org.thoughtcrime.securesms.BaseActionBarActivity
+import org.thoughtcrime.securesms.onboarding.messagenotifications.startPNModeActivity
+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.colorDestructive
+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 {
+ startPNModeActivity()
+ }
+ }
+ }
+
+ @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,
+ onValueChange = { onChange(it) },
+ placeholder = { Text(stringResource(R.string.activity_display_name_edit_text_hint)) },
+ colors = TextFieldDefaults.outlinedTextFieldColors(
+ textColor = state.error?.let { colorDestructive } ?:
+ LocalContentColor.current.copy(LocalContentAlpha.current),
+ focusedBorderColor = Color(0xff414141),
+ unfocusedBorderColor = Color(0xff414141),
+ cursorColor = LocalContentColor.current,
+ placeholderColor = state.error?.let { colorDestructive }
+ ?: MaterialTheme.colors.onSurface.copy(ContentAlpha.medium)
+ ),
+ 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) {
+ 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 000000000..9ede264ab
--- /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.activity_display_name_display_name_missing_error) } }
+ displayName.length > NAME_PADDED_LENGTH -> { state.update { it.copy(error = R.string.activity_display_name_display_name_too_long_error) } }
+ 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.activity_display_name_display_name_too_long_error }
+ )
+ }
+ }
+
+ @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.activity_display_name_title_2,
+ @StringRes val description: Int = R.string.activity_display_name_explanation,
+ @StringRes val error: Int? = null,
+ val displayName: String = ""
+)
+
+fun pickNewNameState() = State(
+ title = R.string.activity_display_name_pick_a_new_display_name,
+ description = R.string.activity_display_name_unable_to_load_new_name_explanation
+)
+
+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 000000000..d35e9722b
--- /dev/null
+++ b/app/src/main/java/org/thoughtcrime/securesms/onboarding/recoverypassword/RecoveryPasswordActivity.kt
@@ -0,0 +1,244 @@
+package org.thoughtcrime.securesms.onboarding.recoverypassword
+
+import android.content.ClipData
+import android.content.ClipboardManager
+import android.content.Context
+import android.content.Intent
+import android.graphics.Bitmap
+import android.os.Bundle
+import android.widget.Toast
+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.MutableState
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+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 network.loki.messenger.R
+import org.session.libsession.utilities.TextSecurePreferences
+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.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.h8
+import org.thoughtcrime.securesms.ui.small
+
+class RecoveryPasswordActivity : BaseActionBarActivity() {
+
+ private val viewModel: RecoveryPasswordViewModel by viewModels()
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ supportActionBar!!.title = resources.getString(R.string.activity_recovery_password)
+
+ ComposeView(this).apply {
+ setContent {
+ RecoveryPassword(viewModel.seed, viewModel.qrBitmap, { copySeed() }) { onHide() }
+ }
+ }.let(::setContentView)
+ }
+
+ private fun revealSeed() {
+ TextSecurePreferences.setHasViewedSeed(this, true)
+ }
+
+ private fun copySeed() {
+ revealSeed()
+ val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
+ val clip = ClipData.newPlainText("Seed", viewModel.seed)
+ clipboard.setPrimaryClip(clip)
+ Toast.makeText(this, R.string.copied_to_clipboard, Toast.LENGTH_SHORT).show()
+ }
+
+ private fun onHide() {
+ showSessionDialog {
+ title("Hide Recovery Password Permanently")
+ text("Without your recovery password, you cannot load your account on new devices.\n" +
+ "\n" +
+ "We strongly recommend you save your recovery password in a safe and secure place before continuing.")
+ destructiveButton(R.string.continue_2) { onHideConfirm() }
+ button(R.string.cancel) {}
+ }
+ }
+
+ private fun onHideConfirm() {
+ showSessionDialog {
+ title("Hide Recovery Password Permanently")
+ text("Are you sure you want to permanently hide your recovery password on this device? This cannot be undone.")
+ button(R.string.cancel) {}
+ destructiveButton(R.string.yes) {
+ viewModel.permanentlyHidePassword()
+ finish()
+ }
+ }
+ }
+}
+
+@Preview
+@Composable
+fun PreviewMessageDetails(
+ @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("Recovery Password")
+ Spacer(Modifier.width(8.dp))
+ SessionShieldIcon()
+ }
+
+ Text("Use your recovery password to load your account on new devices.\n\nYour account cannot be recovered without your recovery password. Make sure it's stored somewhere safe and secure — and don't share it with anyone.")
+
+ AnimatedVisibility(!showQr.value) {
+ Text(
+ seed,
+ modifier = Modifier
+ .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(text = stringResource(R.string.copy), modifier = Modifier.weight(1f), color = MaterialTheme.colors.onPrimary) { copySeed() }
+ OutlineButton(text = "View QR", modifier = Modifier.weight(1f), color = MaterialTheme.colors.onPrimary) { showQr.toggle() }
+ }
+ }
+
+ AnimatedVisibility(showQr.value, modifier = Modifier.align(Alignment.CenterHorizontally)) {
+ OutlineButton(
+ text = "View Password",
+ 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 = "Hide Recovery Password", style = MaterialTheme.typography.h8)
+ Text(text = "Permanently hide your recovery password on this device.")
+ }
+ OutlineButton(
+ "Hide",
+ 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 000000000..9b7ff3227
--- /dev/null
+++ b/app/src/main/java/org/thoughtcrime/securesms/onboarding/recoverypassword/RecoveryPasswordViewModel.kt
@@ -0,0 +1,44 @@
+package org.thoughtcrime.securesms.onboarding.recoverypassword
+
+import android.app.Application
+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)
+ }
+
+ 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 bae5f1960..000000000
--- 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 5f2485576..fbecc18a6 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsActivity.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsActivity.kt
@@ -19,6 +19,7 @@ import android.view.MenuItem
import android.view.View
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
@@ -44,6 +45,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
@@ -63,6 +65,10 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() {
@Inject
lateinit var configFactory: ConfigFactory
+ @Inject
+ lateinit var prefs: TextSecurePreferences
+
+
private lateinit var binding: ActivitySettingsBinding
private var displayNameEditActionMode: ActionMode? = null
@@ -85,13 +91,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() }
@@ -104,7 +114,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() }
versionTextView.text = String.format(getString(R.string.version_s), "${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})")
}
@@ -383,8 +395,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 55bc1be62..ca7d3de7b 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,21 @@
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.MaterialTheme
+import androidx.compose.material.Text
+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 +53,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 +73,45 @@ fun transparentButtonColors() = ButtonDefaults.buttonColors(backgroundColor = Co
@Composable
fun destructiveButtonColors() = ButtonDefaults.buttonColors(backgroundColor = Color.Transparent, contentColor = colorDestructive)
+
+@Preview
+@Composable
+fun Context.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")
+ }
+ }
+ }
+}
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 1724bde8a..27370e048 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/ui/Components.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/ui/Components.kt
@@ -1,6 +1,8 @@
package org.thoughtcrime.securesms.ui
import androidx.annotation.DrawableRes
+import androidx.compose.foundation.BorderStroke
+import androidx.compose.foundation.Canvas
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxScope
@@ -10,26 +12,35 @@ import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
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.pager.PagerState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.ButtonColors
+import androidx.compose.material.ButtonDefaults
import androidx.compose.material.Card
import androidx.compose.material.Colors
import androidx.compose.material.Icon
import androidx.compose.material.IconButton
import androidx.compose.material.MaterialTheme
+import androidx.compose.material.OutlinedButton
import androidx.compose.material.Text
import androidx.compose.material.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
+import androidx.compose.ui.geometry.Size
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.res.painterResource
+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.viewinterop.AndroidView
import com.google.accompanist.pager.HorizontalPagerIndicator
@@ -37,6 +48,69 @@ import kotlinx.coroutines.launch
import network.loki.messenger.R
import org.session.libsession.utilities.recipients.Recipient
import org.thoughtcrime.securesms.components.ProfilePictureView
+import kotlin.math.roundToInt
+
+@Composable
+fun OutlineButton(
+ text: String,
+ modifier: Modifier = Modifier,
+ color: Color = LocalExtraColors.current.prominentButtonColor,
+ onClick: () -> Unit
+) {
+ OutlinedButton(
+ modifier = modifier,
+ 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 FilledButton(text: String, modifier: Modifier = Modifier, 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,
+ fontSize: TextUnit = TextUnit.Unspecified,
+ lineHeight: TextUnit = TextUnit.Unspecified,
+ onClick: () -> Unit) {
+ TextButton(
+ onClick = onClick,
+ modifier = modifier,
+ 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)
+ )
+ }
+}
@Composable
fun ItemButton(
@@ -180,3 +254,59 @@ 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)
+ )
+}
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 64bbd21d8..469b11eee 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,23 @@ import androidx.annotation.AttrRes
import androidx.appcompat.view.ContextThemeWrapper
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
+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,6 +30,9 @@ val LocalExtraColors = staticCompositionLocalOf { error("No Custom
data class ExtraColors(
val settingsBackground: Color,
+ val prominentButtonColor: Color,
+ val lightCell: Color,
+ val onLightCell: Color,
)
/**
@@ -31,19 +42,85 @@ 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 {
+ AppCompatTheme(surface = surface) {
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/util/QRCodeUtilities.kt b/app/src/main/java/org/thoughtcrime/securesms/util/QRCodeUtilities.kt
index f7d1e3e8a..d70bb3be8 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.xml b/app/src/main/res/drawable/emoji_tada.xml
new file mode 100644
index 000000000..ce0f30067
--- /dev/null
+++ b/app/src/main/res/drawable/emoji_tada.xml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/session_logo.xml b/app/src/main/res/drawable/session_logo.xml
index f88a4f21a..b2f931990 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 000000000..a7c6d1a24
--- /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_landing.xml b/app/src/main/res/layout-sw400dp/activity_landing.xml
deleted file mode 100644
index 5e5a36704..000000000
--- 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 b55b35f14..000000000
--- 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_recovery_phrase_restore.xml b/app/src/main/res/layout-sw400dp/activity_recovery_phrase_restore.xml
deleted file mode 100644
index 88d90f5aa..000000000
--- a/app/src/main/res/layout-sw400dp/activity_recovery_phrase_restore.xml
+++ /dev/null
@@ -1,78 +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 b642bb292..000000000
--- 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 97b63ede5..000000000
--- 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/view_seed_reminder.xml b/app/src/main/res/layout-sw400dp/view_seed_reminder.xml
deleted file mode 100644
index 5be50ebe6..000000000
--- 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_home.xml b/app/src/main/res/layout/activity_home.xml
index 124a44b37..dc129821d 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 b267c08ac..5c93e251c 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 0cdbeb992..000000000
--- 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_recovery_phrase_restore.xml b/app/src/main/res/layout/activity_recovery_phrase_restore.xml
deleted file mode 100644
index 5f2012e9c..000000000
--- a/app/src/main/res/layout/activity_recovery_phrase_restore.xml
+++ /dev/null
@@ -1,78 +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 e2434e7c7..000000000
--- 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 4587bc01d..000000000
--- 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 44df7e82e..96e011b53 100644
--- a/app/src/main/res/layout/activity_settings.xml
+++ b/app/src/main/res/layout/activity_settings.xml
@@ -369,14 +369,14 @@
android:background="?colorDividerBackground" />
+ android:contentDescription="@string/AccessibilityId_recovery_password">
+ android:layout_toEndOf="@+id/passwordContainer"
+ android:text="@string/activity_settings_recovery_password_button_title" />
-
-
-
-
-
-
-
-
-
-
-
-
-
\ 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 850ceaef5..000000000
--- 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 a3dcff339..000000000
--- 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 b1dbe91ee..9bba096d1 100644
--- a/app/src/main/res/values-ar-rSA/strings.xml
+++ b/app/src/main/res/values-ar-rSA/strings.xml
@@ -585,8 +585,8 @@
اِذن لا يقوم بجمع المعلومات الشخصية أو المعلومات الوصفية لمحادثاتي؟ كيف يعمل؟باِستخدام مُركَب من تكنولوجيات التشفير من الطرفين و توجيه مجهول للمعلومات.الأصدقاء لا يتركون أصدقائهم يستعملون تطبيق مراسلة مكشوف. مرحبا بك.
- رحب بعنوان تعريفك
- عنوان تعريفك هو عنوان وحيد خاص بك, يمكن للناس الاتصال بك عن طريقه. دون معرفة هويتك الحقيقية, هذا العنوان مصمم ليكون خاص و مجهول.
+
+
استرجع حسابكأدخل عبارة الأسترجاع التي اعطيت لك عندما سجلت الدخول لاِسترجاع حسابك.ادخل عبارة الاسترجاع
@@ -603,11 +603,6 @@
"لا يمكن مغادرة المجموعة"هل أنت متأكد من حذفك المحادثة؟تم حذف المحادثة
- عبارة الاسترجاع
- هذه هي عبارة الاسترجاع
- عبارة الاسترجاع هي مفتاح عنوان تعريفك - يمكنك استخدامها لاسترجاع عنوان تعريفك اذا فقدت الوصول لجهازك. قم بحفظها في مكان امن و لا تعطها الى اي أحد.
- انقر مطولاً للكشف
- انت على وشك الإنتهاء! ٨٠٪أمّن حسابك بحفظ كلمات إسترجاع الحسابانقر بإستمرار على الكلمات المغطاة للكشف عن كلمات إسترداد حسابك، ثم قم بتخزينها بأمان للحفاظ على معرّف الجلسة الخاص بك.تأكد من الإحتفاظ بكلمات الإسترجاع الخاصة بك في مكان آمن
@@ -652,7 +647,6 @@
الأجهزةأُدع صديقالأسئلة الأكثر طرحاً
- عبارة الإستردادمسح البياناتمسح البيانات بما في ذلك الشبكةساعدنا في ترجمة سيشن
@@ -665,8 +659,6 @@
سوف يتم تنبيهك بالرسائل الجديدة بشكل موثوق و فوري بإستخدام خوادم غوغل.غَير الاسمألغي ربط الجهاز
- عبارة الاسترجاع الخاصة بك
- هذه هي عبارة الاِسترجاع, يمكن بواسطتها اِسترجاع عنوان التعريف أو الاِنتقال اِلى جهاز جديد.اِمسح جميع البياناتسيؤدي هذا إلى حذف رسائلك, محادثاتك و متصليك نهائيا.هل تريد مسح من هذا الجهاز فقط، أو حذف حسابك كليا ؟
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index b1dbe91ee..9bba096d1 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -585,8 +585,8 @@
اِذن لا يقوم بجمع المعلومات الشخصية أو المعلومات الوصفية لمحادثاتي؟ كيف يعمل؟باِستخدام مُركَب من تكنولوجيات التشفير من الطرفين و توجيه مجهول للمعلومات.الأصدقاء لا يتركون أصدقائهم يستعملون تطبيق مراسلة مكشوف. مرحبا بك.
- رحب بعنوان تعريفك
- عنوان تعريفك هو عنوان وحيد خاص بك, يمكن للناس الاتصال بك عن طريقه. دون معرفة هويتك الحقيقية, هذا العنوان مصمم ليكون خاص و مجهول.
+
+
استرجع حسابكأدخل عبارة الأسترجاع التي اعطيت لك عندما سجلت الدخول لاِسترجاع حسابك.ادخل عبارة الاسترجاع
@@ -603,11 +603,6 @@
"لا يمكن مغادرة المجموعة"هل أنت متأكد من حذفك المحادثة؟تم حذف المحادثة
- عبارة الاسترجاع
- هذه هي عبارة الاسترجاع
- عبارة الاسترجاع هي مفتاح عنوان تعريفك - يمكنك استخدامها لاسترجاع عنوان تعريفك اذا فقدت الوصول لجهازك. قم بحفظها في مكان امن و لا تعطها الى اي أحد.
- انقر مطولاً للكشف
- انت على وشك الإنتهاء! ٨٠٪أمّن حسابك بحفظ كلمات إسترجاع الحسابانقر بإستمرار على الكلمات المغطاة للكشف عن كلمات إسترداد حسابك، ثم قم بتخزينها بأمان للحفاظ على معرّف الجلسة الخاص بك.تأكد من الإحتفاظ بكلمات الإسترجاع الخاصة بك في مكان آمن
@@ -652,7 +647,6 @@
الأجهزةأُدع صديقالأسئلة الأكثر طرحاً
- عبارة الإستردادمسح البياناتمسح البيانات بما في ذلك الشبكةساعدنا في ترجمة سيشن
@@ -665,8 +659,6 @@
سوف يتم تنبيهك بالرسائل الجديدة بشكل موثوق و فوري بإستخدام خوادم غوغل.غَير الاسمألغي ربط الجهاز
- عبارة الاسترجاع الخاصة بك
- هذه هي عبارة الاِسترجاع, يمكن بواسطتها اِسترجاع عنوان التعريف أو الاِنتقال اِلى جهاز جديد.اِمسح جميع البياناتسيؤدي هذا إلى حذف رسائلك, محادثاتك و متصليك نهائيا.هل تريد مسح من هذا الجهاز فقط، أو حذف حسابك كليا ؟
diff --git a/app/src/main/res/values-az-rAZ/strings.xml b/app/src/main/res/values-az-rAZ/strings.xml
index 35f7167ac..f481295cc 100644
--- a/app/src/main/res/values-az-rAZ/strings.xml
+++ b/app/src/main/res/values-az-rAZ/strings.xml
@@ -539,8 +539,8 @@
Yə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
@@ -557,11 +557,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 +601,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 +613,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?
diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml
index 35f7167ac..3aacd54a3 100644
--- a/app/src/main/res/values-az/strings.xml
+++ b/app/src/main/res/values-az/strings.xml
@@ -539,8 +539,6 @@
Yə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
@@ -557,11 +555,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 +599,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 +611,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?
diff --git a/app/src/main/res/values-bal-rBA/strings.xml b/app/src/main/res/values-bal-rBA/strings.xml
index 36f8ac55b..d6fd592ac 100644
--- a/app/src/main/res/values-bal-rBA/strings.xml
+++ b/app/src/main/res/values-bal-rBA/strings.xml
@@ -437,8 +437,8 @@ memproses pertukaran kunci korupsi.
Bagaimana 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
@@ -455,10 +455,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 +492,6 @@ memproses pertukaran kunci korupsi.
NotifikasiPercakapanPerangkat
- Kata pemulihanHapus dataNotifikasiGaya notifikasi
@@ -505,8 +500,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 36f8ac55b..d6fd592ac 100644
--- a/app/src/main/res/values-bal/strings.xml
+++ b/app/src/main/res/values-bal/strings.xml
@@ -437,8 +437,8 @@ memproses pertukaran kunci korupsi.
Bagaimana 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
@@ -455,10 +455,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 +492,6 @@ memproses pertukaran kunci korupsi.
NotifikasiPercakapanPerangkat
- Kata pemulihanHapus dataNotifikasiGaya notifikasi
@@ -505,8 +500,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-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml
index 9e2928bc3..593a0c4e5 100644
--- a/app/src/main/res/values-ca-rES/strings.xml
+++ b/app/src/main/res/values-ca-rES/strings.xml
@@ -531,8 +531,8 @@ d\'intercanvi de claus!
Per 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ó
@@ -549,11 +549,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 +588,6 @@ d\'intercanvi de claus!
NotificacionsXatsDispositius
- Frase de recuperacióNeteja les dadesAjuda\'ns a traduir SessionNotificacions
@@ -603,8 +597,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
diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml
index 9e2928bc3..593a0c4e5 100644
--- a/app/src/main/res/values-ca/strings.xml
+++ b/app/src/main/res/values-ca/strings.xml
@@ -531,8 +531,8 @@ d\'intercanvi de claus!
Per 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ó
@@ -549,11 +549,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 +588,6 @@ d\'intercanvi de claus!
NotificacionsXatsDispositius
- Frase de recuperacióNeteja les dadesAjuda\'ns a traduir SessionNotificacions
@@ -603,8 +597,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
diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml
index d022499e0..accda9b02 100644
--- a/app/src/main/res/values-cs-rCZ/strings.xml
+++ b/app/src/main/res/values-cs-rCZ/strings.xml
@@ -561,8 +561,8 @@
Takž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í
@@ -579,11 +579,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 +623,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 +635,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?
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index d022499e0..accda9b02 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -561,8 +561,8 @@
Takž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í
@@ -579,11 +579,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 +623,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 +635,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?
diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml
index 604e21423..ca5c07405 100644
--- a/app/src/main/res/values-da-rDK/strings.xml
+++ b/app/src/main/res/values-da-rDK/strings.xml
@@ -537,8 +537,8 @@ udveksel besked!
Så 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
@@ -554,11 +554,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 +583,6 @@ udveksel besked!
EnhederInviter en venOfte stillede spørgsmål
- GendannelsesssætningRyd dataRyd Data Inklusiv NetværkHjælp os med at oversætte Session
diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml
index 604e21423..ca5c07405 100644
--- a/app/src/main/res/values-da/strings.xml
+++ b/app/src/main/res/values-da/strings.xml
@@ -537,8 +537,8 @@ udveksel besked!
Så 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
@@ -554,11 +554,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 +583,6 @@ udveksel besked!
EnhederInviter en venOfte stillede spørgsmål
- GendannelsesssætningRyd dataRyd Data Inklusiv NetværkHjælp os med at oversætte Session
diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml
index e08da18a3..bd2a8d070 100644
--- a/app/src/main/res/values-de-rDE/strings.xml
+++ b/app/src/main/res/values-de-rDE/strings.xml
@@ -537,8 +537,8 @@
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
@@ -555,11 +555,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 +599,6 @@
GeräteEinen Freund einladenHäufig gestellte Fragen
- WiederherstellungssatzDaten löschenDaten löschen, einschließlich NetzwerkHilf uns, Session zu übersetzen
@@ -617,8 +611,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?
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index e08da18a3..bd2a8d070 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -537,8 +537,8 @@
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
@@ -555,11 +555,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 +599,6 @@
GeräteEinen Freund einladenHäufig gestellte Fragen
- WiederherstellungssatzDaten löschenDaten löschen, einschließlich NetzwerkHilf uns, Session zu übersetzen
@@ -617,8 +611,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?
diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml
index 5e7b292c2..b77daadf2 100644
--- a/app/src/main/res/values-el-rGR/strings.xml
+++ b/app/src/main/res/values-el-rGR/strings.xml
@@ -539,8 +539,8 @@
Δηλαδή δεν συλλέγει τα προσωπικά μου στοιχεία ή τα μεταδεδομένα των συνομιλιών μου; Πώς λειτουργεί;Χρησιμοποιώντας ένα συνδυασμό προηγμένων ανώνυμων τεχνολογιών δρομολόγησης και τεχνολογίας κρυπτογράφησης από άκρο σε άκρο.Οι φίλοι δεν αφήνουν τους φίλους να χρησιμοποιούν ευάλωτες εφαρμογές μηνυμάτων. Είστε ευπρόσδεκτοι.
- Πείτε γεια στη Session ταυτότητά σας
- Η Session ταυτότητά σας είναι η μοναδική διεύθυνση που μπορούν να χρησιμοποιήσουν τα άτομα για να επικοινωνήσουν μαζί σας στο Session. Χωρίς σύνδεση με την πραγματική σας ταυτότητα, η Session ταυτότητά σας είναι εντελώς ανώνυμη και ιδιωτική.
+
+
Επαναφορά του λογαριασμού σαςΕισάγετε τη φράση ανάκτησης που σας δόθηκε κατά την εγγραφή σας για να επαναφέρετε το λογαριασμό σας.Εισάγετε τη φράση ανάκτησης σας
@@ -557,11 +557,6 @@
"Αδυναμία αποχώρησης από την ομάδα"Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν την συνομιλία;Η συνομιλία διαγράφηκε
- Φράση ανάκτησης
- Γνωρίστε τη φράση ανάκτησής σας
- Η φράση ανάκτησης είναι το κύριο κλειδί στο Session ID σας - μπορείτε να τη χρησιμοποιήσετε για να επαναφέρετε το Session ID σας εάν χάσετε πρόσβαση στη συσκευή σας. Αποθηκεύστε τη φράση ανάκτησης σε ασφαλές μέρος, και μην τη δώσετε σε κανέναν.
- Πατήστε για εμφάνιση
- Σχεδόν τελειώσατε! 80%Ασφαλίστε το λογαριασμό σας αποθηκεύοντας τη φράση ανάκτησής σαςΠατήστε παρατεταμένα τις λέξεις που τροποποιήθηκαν για να αποκαλύψετε τη φράση ανάκτησης και μετά αποθηκεύστε την με ασφάλεια για να εξασφαλίσετε το αναγνωριστικό σας.Φροντίστε να αποθηκεύσετε τη φράση ανάκτησής σας σε ασφαλές μέρος
@@ -606,7 +601,6 @@
ΣυσκευέςΠροσκαλέστε ένα φίλοΣυχνές ερωτήσεις
- Φράση ΑνάκτησηςΕκκαθάριση ΔεδομένωνΕκκαθάριση Δεδομένων Με Το ΔίκτυοΒοηθήστε μας να μεταφράσουμε τo Session
@@ -619,8 +613,6 @@
Θα ειδοποιηθείτε για νέα μηνύματα αξιόπιστα και άμεσα χρησιμοποιώντας τους διακομιστές ειδοποιήσεων της Google.Αλλαγή ονόματοςΑποσύνδεση Συσκευής
- Η φράση ανάκτησής σας
- Αυτή είναι η φράση ανάκτησης σας. Με αυτή, μπορείτε να επαναφέρετε ή να μεταφέρετε τη Session ταυτότητά σας σε μια νέα συσκευή.Εκκαθάριση όλων των δεδομένωνΑυτό θα διαγράψει μόνιμα τα μηνύματα, τις συνομιλίες και τις επαφές σας.Θέλετε να γίνει εκκαθάριση μόνο αυτής της συσκευής, ή να διαγράψετε ολόκληρο το λογαριασμό σας;
diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml
index 5e7b292c2..b77daadf2 100644
--- a/app/src/main/res/values-el/strings.xml
+++ b/app/src/main/res/values-el/strings.xml
@@ -539,8 +539,8 @@
Δηλαδή δεν συλλέγει τα προσωπικά μου στοιχεία ή τα μεταδεδομένα των συνομιλιών μου; Πώς λειτουργεί;Χρησιμοποιώντας ένα συνδυασμό προηγμένων ανώνυμων τεχνολογιών δρομολόγησης και τεχνολογίας κρυπτογράφησης από άκρο σε άκρο.Οι φίλοι δεν αφήνουν τους φίλους να χρησιμοποιούν ευάλωτες εφαρμογές μηνυμάτων. Είστε ευπρόσδεκτοι.
- Πείτε γεια στη Session ταυτότητά σας
- Η Session ταυτότητά σας είναι η μοναδική διεύθυνση που μπορούν να χρησιμοποιήσουν τα άτομα για να επικοινωνήσουν μαζί σας στο Session. Χωρίς σύνδεση με την πραγματική σας ταυτότητα, η Session ταυτότητά σας είναι εντελώς ανώνυμη και ιδιωτική.
+
+
Επαναφορά του λογαριασμού σαςΕισάγετε τη φράση ανάκτησης που σας δόθηκε κατά την εγγραφή σας για να επαναφέρετε το λογαριασμό σας.Εισάγετε τη φράση ανάκτησης σας
@@ -557,11 +557,6 @@
"Αδυναμία αποχώρησης από την ομάδα"Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν την συνομιλία;Η συνομιλία διαγράφηκε
- Φράση ανάκτησης
- Γνωρίστε τη φράση ανάκτησής σας
- Η φράση ανάκτησης είναι το κύριο κλειδί στο Session ID σας - μπορείτε να τη χρησιμοποιήσετε για να επαναφέρετε το Session ID σας εάν χάσετε πρόσβαση στη συσκευή σας. Αποθηκεύστε τη φράση ανάκτησης σε ασφαλές μέρος, και μην τη δώσετε σε κανέναν.
- Πατήστε για εμφάνιση
- Σχεδόν τελειώσατε! 80%Ασφαλίστε το λογαριασμό σας αποθηκεύοντας τη φράση ανάκτησής σαςΠατήστε παρατεταμένα τις λέξεις που τροποποιήθηκαν για να αποκαλύψετε τη φράση ανάκτησης και μετά αποθηκεύστε την με ασφάλεια για να εξασφαλίσετε το αναγνωριστικό σας.Φροντίστε να αποθηκεύσετε τη φράση ανάκτησής σας σε ασφαλές μέρος
@@ -606,7 +601,6 @@
ΣυσκευέςΠροσκαλέστε ένα φίλοΣυχνές ερωτήσεις
- Φράση ΑνάκτησηςΕκκαθάριση ΔεδομένωνΕκκαθάριση Δεδομένων Με Το ΔίκτυοΒοηθήστε μας να μεταφράσουμε τo Session
@@ -619,8 +613,6 @@
Θα ειδοποιηθείτε για νέα μηνύματα αξιόπιστα και άμεσα χρησιμοποιώντας τους διακομιστές ειδοποιήσεων της Google.Αλλαγή ονόματοςΑποσύνδεση Συσκευής
- Η φράση ανάκτησής σας
- Αυτή είναι η φράση ανάκτησης σας. Με αυτή, μπορείτε να επαναφέρετε ή να μεταφέρετε τη Session ταυτότητά σας σε μια νέα συσκευή.Εκκαθάριση όλων των δεδομένωνΑυτό θα διαγράψει μόνιμα τα μηνύματα, τις συνομιλίες και τις επαφές σας.Θέλετε να γίνει εκκαθάριση μόνο αυτής της συσκευής, ή να διαγράψετε ολόκληρο το λογαριασμό σας;
diff --git a/app/src/main/res/values-eo-rUY/strings.xml b/app/src/main/res/values-eo-rUY/strings.xml
index eedb13a44..13be8938a 100644
--- a/app/src/main/res/values-eo-rUY/strings.xml
+++ b/app/src/main/res/values-eo-rUY/strings.xml
@@ -538,8 +538,8 @@
Do ĝ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
@@ -556,11 +556,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 +598,6 @@
AparatojInviti AmikonOftaj Demandoj
- Ripara FrazoViŝi DatumojnHelpu nin Traduki SessionSciigoj
@@ -614,8 +608,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
diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml
index eedb13a44..13be8938a 100644
--- a/app/src/main/res/values-eo/strings.xml
+++ b/app/src/main/res/values-eo/strings.xml
@@ -538,8 +538,8 @@
Do ĝ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
@@ -556,11 +556,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 +598,6 @@
AparatojInviti AmikonOftaj Demandoj
- Ripara FrazoViŝi DatumojnHelpu nin Traduki SessionSciigoj
@@ -614,8 +608,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
diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml
index f3df44aee..d02fb0bea 100644
--- a/app/src/main/res/values-es-rES/strings.xml
+++ b/app/src/main/res/values-es-rES/strings.xml
@@ -538,8 +538,8 @@ de intercambio de claves!
¿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
@@ -556,11 +556,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 +600,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 +612,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?
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index f3df44aee..d02fb0bea 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -538,8 +538,8 @@ de intercambio de claves!
¿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
@@ -556,11 +556,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 +600,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 +612,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?
diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml
index a4467b5f6..00477dd3c 100644
--- a/app/src/main/res/values-fa-rIR/strings.xml
+++ b/app/src/main/res/values-fa-rIR/strings.xml
@@ -561,8 +561,8 @@
پس اطلاعات شخصی من یا دادههای گفتوگوهایم جمعآوری نمیشود؟ چگونه کار میکند؟Session با استفاده از ترکیبی از فناوریهای پیشرفته مسیریابی ناشناس و رمزگذاری سرتاسری این کار را انجام میدهد.یک دوست هیچوقت به دوستان خود اجازه استفاده از پیامرسانهای در معرض خطر را نمیدهد.
- به شناسهی Session خود سلام کنید
- شناسهی Session شما آدرس منحصر به فردی است که افراد میتوانند از طریق آن با شما در Session تماس بگیرند. شناسهی Session شما، بدون اتصال با هویت واقعی شما، کاملاً ناشناس و خصوصی است.
+
+
حساب کاربری خود را بازیابی کنیدعبارت بازیابی را که هنگام نامنویسی برای بازیابی حساب به شما داده شده، وارد کنید.عبارت بازیابی خود را وارد کنید
@@ -579,11 +579,6 @@
"ترک گروه انجام نشد"آیا مطمئن هستید که میخواهید این مکالمه را حذف کنید؟مکالمه حذف شد
- عبارت بازیابی شما
- این عبارت بازیابی شماست
- عبارت بازیابی شما کلید اصلی شناسهی Session شما است - در صورت عدم دسترسی به دستگاه خود می توانید از آن برای بازگرداندن شناسهی Session خود استفاده کنید. عبارت بازیابی خود را در مکانی امن ذخیره کنید و آن را به کسی ندهید.
- نگه دارید تا نشان داده شود
- شما تقریبا تمام کردید! ۸۰٪با ذخیره کردن عبارت بازیابی، از حساب خود محافظت کنیدبرای دیدن عبارت بازیابی، بر روی کلمات پنهان شده ضربه زده و نگه دارید، سپس با خیال راحت آن را ذخیره کنید تا از شناسهی Session خود محافظت نمایید.حتماً عبارت بازیابی خود را در مکانی امن ذخیره کنید
@@ -629,7 +624,6 @@
دستگاههادعوت از یک دوستسوالات متداول
- عبارت بازیابیپاک کردن اطلاعاتپاک کردن دادهها همراه با شبکهبه ما کمک کنید که سشن را ترجمه کنیم
@@ -651,8 +645,6 @@
با استفاده از سرورهای اعلان گوگل به طور قابل اعتماد و بلافاصله از پیام جدید مطلع خواهید شد.تغییر نامقطع اتصال دستگاه
- عبارت بازیابی شما
- می توانید از عبارت بازیابی یا برای بازیابی حساب خود و یا برای وصل با یک دستگاه استفاده کنید.پاک کردن همه داتااین گزینه به طور دائم پیامها، جلسات و مخاطبین شما را حذف میکند.آیا فقط میخواهید این دستگاه را پاک کنید یا میخواهید کل اکانت را پاک کنید؟
diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml
index 0aa6b5a88..6282a8a1f 100644
--- a/app/src/main/res/values-fa/strings.xml
+++ b/app/src/main/res/values-fa/strings.xml
@@ -538,8 +538,8 @@
پس اطلاعات شخصی من یا دادههای گفتوگوهایم جمعآوری نمیشود؟ چگونه کار میکند؟Session با استفاده از ترکیبی از فناوریهای پیشرفته مسیریابی ناشناس و رمزگذاری سرتاسری این کار را انجام میدهد.یک دوست هیچوقت به دوستان خود اجازه استفاده از پیامرسانهای در معرض خطر را نمیدهد.
- به شناسهی Session خود سلام کنید
- شناسهی Session شما آدرس منحصر به فردی است که افراد میتوانند از طریق آن با شما در Session تماس بگیرند. شناسهی Session شما، بدون اتصال با هویت واقعی شما، کاملاً ناشناس و خصوصی است.
+
+
حساب کاربری خود را بازیابی کنیدعبارت بازیابی را که هنگام نامنویسی برای بازیابی حساب به شما داده شده، وارد کنید.عبارت بازیابی خود را وارد کنید
@@ -556,11 +556,6 @@
"ترک گروه انجام نشد"آیا مطمئن هستید که میخواهید این مکالمه را حذف کنید؟مکالمه حذف شد
- عبارت بازیابی شما
- این عبارت بازیابی شماست
- عبارت بازیابی شما کلید اصلی شناسهی Session شما است - در صورت عدم دسترسی به دستگاه خود می توانید از آن برای بازگرداندن شناسهی Session خود استفاده کنید. عبارت بازیابی خود را در مکانی امن ذخیره کنید و آن را به کسی ندهید.
- نگه دارید تا نشان داده شود
- شما تقریبا تمام کردید! ۸۰٪با ذخیره کردن عبارت بازیابی، از حساب خود را محافظت کنیدبرای فاش کردن عبارت بازیابی، بر روی کلمات redacted ضربه زده و نگه دارید، سپس با خیال راحت آن را ذخیره کنید تا از شناسهی Session خود محافظت نمایید.حتماً عبارت بازیابی خود را در مکانی امن ذخیره کنید
@@ -605,7 +600,6 @@
دستگاههادعوت از یک دوستسوالات متداول
- عبارت بازیابیپاک کردن اطلاعاتپاک کردن دادهها همراه با شبکهبه ما کمک کنید که سشن را ترجمه کنیم
@@ -618,8 +612,6 @@
با استفاده از سرورهای گوگل، شما به صورت سریع و مطمئن از پیامهای جدید مطلع میشوید.تغییر نامقطع اتصال دستگاه
- عبارت بازیابی شما
- این عبارت بازیابی شماست. با استفاده از آن میتوانید شناسهی Session خود را به دستگاه جدید بازیابی یا انتقال دهید.پاک کردن همه دادههااین به طور دائم پیامها، جلسات و مخاطبین شما را حذف میکند.آیا فقط میخواهید این دستگاه را پاک کنید یا میخواهید کل اکانت را پاک کنید؟
diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml
index 3a7bf07fe..a672774b5 100644
--- a/app/src/main/res/values-fi-rFI/strings.xml
+++ b/app/src/main/res/values-fi-rFI/strings.xml
@@ -537,8 +537,8 @@ on viallinen!
Joten 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
@@ -555,11 +555,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 +599,6 @@ on viallinen!
LaitteetKutsu ystäviäUKK
- PalautuslausekeTyhjennä tiedotTyhjennä Tiedot Mukaan Lukien VerkkoAuta meitä kääntämään Session
@@ -617,8 +611,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?
diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml
index 3a7bf07fe..a672774b5 100644
--- a/app/src/main/res/values-fi/strings.xml
+++ b/app/src/main/res/values-fi/strings.xml
@@ -537,8 +537,8 @@ on viallinen!
Joten 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
@@ -555,11 +555,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 +599,6 @@ on viallinen!
LaitteetKutsu ystäviäUKK
- PalautuslausekeTyhjennä tiedotTyhjennä Tiedot Mukaan Lukien VerkkoAuta meitä kääntämään Session
@@ -617,8 +611,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?
diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml
index 3aeeba055..28966fcac 100644
--- a/app/src/main/res/values-fr-rFR/strings.xml
+++ b/app/src/main/res/values-fr-rFR/strings.xml
@@ -564,8 +564,8 @@
Elle 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
@@ -582,11 +582,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 +627,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 +648,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 ?
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 3aeeba055..28966fcac 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -564,8 +564,8 @@
Elle 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
@@ -582,11 +582,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 +627,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 +648,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 ?
diff --git a/app/src/main/res/values-gl-rES/strings.xml b/app/src/main/res/values-gl-rES/strings.xml
index 7ab41a727..bfd653906 100644
--- a/app/src/main/res/values-gl-rES/strings.xml
+++ b/app/src/main/res/values-gl-rES/strings.xml
@@ -528,7 +528,7 @@
É 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 7ab41a727..bfd653906 100644
--- a/app/src/main/res/values-gl/strings.xml
+++ b/app/src/main/res/values-gl/strings.xml
@@ -528,7 +528,7 @@
É 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 9a4a5c730..37eb11daa 100644
--- a/app/src/main/res/values-hi-rIN/strings.xml
+++ b/app/src/main/res/values-hi-rIN/strings.xml
@@ -538,8 +538,8 @@
इसलिए यह मेरी निजी जानकारी या बातचीत का metadata इकठ्ठा नहीं करता? यह कैसे काम करता है?एडवांस्ड anonymous routing और end-to-end encryption के मिश्रण का प्रयोग करके।दोस्त दोस्तों को असुरक्षित मैसेंजर नहीं उपयोग करने देते। आपका स्वागत है।
- अपनी सेशन आईडी को हेल्लो कहें
- आपकी Session ID एक ऐसा अनोखा पता है जिसका उपयोग करके लोग आपसे Session पर संपर्क कर सकते हैं। आपकी वास्तविक पहचान से कोई संबंध नहीं होने के कारण, आपका Session ID डिज़ाइन द्वारा पूरी तरह से गुमनाम और निजी है |
+
+
अकाउंट रिस्टोर करेंअकाउंट बनाते समय बनाया गया अपना रिकवरी वाक्य डालें।अपना पुनर्प्राप्ति वाक्यांश लिखें
@@ -556,11 +556,6 @@
"ग्रुप नहीं छोड़ सके"क्या वाकई आप इस वार्तालाप को हटाना चाहते हैं?बातचीत हटाई गई
- आपका पुनर्प्राप्ति वाक्यांश
- अपने पुनर्प्राप्ति वाक्यांश से मिलें
- आपका रिकवरी फ्रेज आपके Session Id की मास्टर कीय है — आप इसका इस्तेमाल अपनी Session ID को वापिस पाने के लिए कर सकते है अगर आपका फ़ोन गुम हो गया है | अपने रिकवरी फ्रेज को एक सुरक्षित जगह रखे और इसे किसी के साथ शेयर न करे |
- देखने के लिए दबाएं
- पूर्ण होने वाला है! 80%अकाउंट सुरक्षित रखने के लिए अपनी पुनर्व्यप्ती वाक्यांश को सेव करके रखेंअपना पुनर्प्राप्ति वाक्यांश प्रकट करने के लिए संशोधित शब्दों को टैप और होल्ड करें, फिर अपनी Session ID को सुरक्षित करने के लिए इसे सुरक्षित रूप से संग्रहीत करें।अपने रिकवरी फ्रेज को एक सुरक्षित जगह रखे
@@ -605,7 +600,6 @@
डिवाइसेज़किसी मित्र को आमंत्रित करेंअकसर किये गए सवाल
- पुनर्प्राप्ति वाक्यांशडेटा हटाएंडाटा नेटवर्क के समेत साफ करें।सेशन का अनुवाद करने में सहायता करें
@@ -618,8 +612,6 @@
आपको नई सूचनाओं के बारे में google के नोटीफिकेशन servers से तत्काल सूचित किया जाएगा।नाम बदलेंडिवाइस को अनलिंक करें
- आपका पुनर्प्राप्ति वाक्यांश
- यह आपका रिकवरी फ्रेज है | इसके साथ, आप अपनी Session ID को किसी नए डिवाइस पर माइग्रेट कर सकते हैं।सभी डेटा हटाएंयह आपके मैसेजस, सेशन और कॉन्टैक्टस को स्थायी रूप से हटा देगा।क्या आप सिर्फ इस यंत्र को साफ करना चाहेंगे या अपना पूरा अकाउंट डिलीट करना चाहिएं?
diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml
index 9a4a5c730..37eb11daa 100644
--- a/app/src/main/res/values-hi/strings.xml
+++ b/app/src/main/res/values-hi/strings.xml
@@ -538,8 +538,8 @@
इसलिए यह मेरी निजी जानकारी या बातचीत का metadata इकठ्ठा नहीं करता? यह कैसे काम करता है?एडवांस्ड anonymous routing और end-to-end encryption के मिश्रण का प्रयोग करके।दोस्त दोस्तों को असुरक्षित मैसेंजर नहीं उपयोग करने देते। आपका स्वागत है।
- अपनी सेशन आईडी को हेल्लो कहें
- आपकी Session ID एक ऐसा अनोखा पता है जिसका उपयोग करके लोग आपसे Session पर संपर्क कर सकते हैं। आपकी वास्तविक पहचान से कोई संबंध नहीं होने के कारण, आपका Session ID डिज़ाइन द्वारा पूरी तरह से गुमनाम और निजी है |
+
+
अकाउंट रिस्टोर करेंअकाउंट बनाते समय बनाया गया अपना रिकवरी वाक्य डालें।अपना पुनर्प्राप्ति वाक्यांश लिखें
@@ -556,11 +556,6 @@
"ग्रुप नहीं छोड़ सके"क्या वाकई आप इस वार्तालाप को हटाना चाहते हैं?बातचीत हटाई गई
- आपका पुनर्प्राप्ति वाक्यांश
- अपने पुनर्प्राप्ति वाक्यांश से मिलें
- आपका रिकवरी फ्रेज आपके Session Id की मास्टर कीय है — आप इसका इस्तेमाल अपनी Session ID को वापिस पाने के लिए कर सकते है अगर आपका फ़ोन गुम हो गया है | अपने रिकवरी फ्रेज को एक सुरक्षित जगह रखे और इसे किसी के साथ शेयर न करे |
- देखने के लिए दबाएं
- पूर्ण होने वाला है! 80%अकाउंट सुरक्षित रखने के लिए अपनी पुनर्व्यप्ती वाक्यांश को सेव करके रखेंअपना पुनर्प्राप्ति वाक्यांश प्रकट करने के लिए संशोधित शब्दों को टैप और होल्ड करें, फिर अपनी Session ID को सुरक्षित करने के लिए इसे सुरक्षित रूप से संग्रहीत करें।अपने रिकवरी फ्रेज को एक सुरक्षित जगह रखे
@@ -605,7 +600,6 @@
डिवाइसेज़किसी मित्र को आमंत्रित करेंअकसर किये गए सवाल
- पुनर्प्राप्ति वाक्यांशडेटा हटाएंडाटा नेटवर्क के समेत साफ करें।सेशन का अनुवाद करने में सहायता करें
@@ -618,8 +612,6 @@
आपको नई सूचनाओं के बारे में google के नोटीफिकेशन servers से तत्काल सूचित किया जाएगा।नाम बदलेंडिवाइस को अनलिंक करें
- आपका पुनर्प्राप्ति वाक्यांश
- यह आपका रिकवरी फ्रेज है | इसके साथ, आप अपनी Session ID को किसी नए डिवाइस पर माइग्रेट कर सकते हैं।सभी डेटा हटाएंयह आपके मैसेजस, सेशन और कॉन्टैक्टस को स्थायी रूप से हटा देगा।क्या आप सिर्फ इस यंत्र को साफ करना चाहेंगे या अपना पूरा अकाउंट डिलीट करना चाहिएं?
diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml
index 517efa560..111b3ec04 100644
--- a/app/src/main/res/values-hu-rHU/strings.xml
+++ b/app/src/main/res/values-hu-rHU/strings.xml
@@ -540,8 +540,8 @@
Tehá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
@@ -558,11 +558,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 +602,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 +614,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?
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index 517efa560..111b3ec04 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -540,8 +540,8 @@
Tehá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
@@ -558,11 +558,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 +602,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 +614,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?
diff --git a/app/src/main/res/values-hy-rAM/strings.xml b/app/src/main/res/values-hy-rAM/strings.xml
index 994d95e16..81724321c 100644
--- a/app/src/main/res/values-hy-rAM/strings.xml
+++ b/app/src/main/res/values-hy-rAM/strings.xml
@@ -546,8 +546,8 @@
Դա նշանակում է, որ այն չի՞ հավաքում իմ անձնական տվյալները կամ իմ զրույցի մետատվյալները։Այն օգտվում է հատուկ տվյալների փոխանցման միջոցներից և ամբողջական կոդավորման տեխնոլոգիաներից։Ընկերները չեն թողնի ընկերներին, որ նրանք օգտվեն վտանգավոր նամակների ծրագրերից։ Խնդրեմ։
- Ասեք «բարև» Ձեր Սեանսի ինքնությանը
- Ձեր Սեանսի ինքնությունը հատուկ հասցե է, որը մարդիկ պիտի օգտագործեն Ձեզ հետ Սեանսով կապ հաստատելու համար։ Ձեր իրական ինքնության հետ կապ չունենալով, Ձեր Սեանսի ինքնությունն լիովին գաղտնի է։
+
+
Վերականգնել ձեր հաշիվըՄուտքագրեք վերականգնման բառակապակցությունը, որը տրվել է ձեզ, երբ գրանցվել եք ձեր հաշիվը վերականգնելու համար:Գրեք գաղտնի արտահայտությունը
@@ -564,11 +564,6 @@
"Չստացվեց հեռանալ խումբից"Վստա՞հ եք, որ ցանկանում եք ջնջել այս խոսակցությունը:Ջնջված է
- Ձեր վերականգնման բառակապակցություն
- Ծանոթացեք ձեր վերականգնման բառակապակցության հետ
- Session այդին Ձեր Session բանալին է, որը կարող եք վերականգնել եթե կորցնեք ձեր սարքը, ձեր բանալին պահեք և մի տվեք ինչ-որ մեկին.
- Սեղմած պահեք տեսնելու համար
- Դուք վերջացրել եք 80%Պահեք ձեր անվտանգությունը պահպանելով session-ի բանալինՀպեք և պահեք տրված բառերը՝ ձեր վերականգնման բանալին գտնելու համար, այնուհետև պահեք այն ապահով՝ ձեր Session ID-ն ապահով պահելու համար.Վստահ եղեք որ ձեր վերականգման բանալին հուսալի տեղում է
@@ -613,7 +608,6 @@
ՍարքերՀրավիրել ընկերոջըՀաճախակի տրվող հարցեր
- Վերականգնման ԱրտահայտությունԶրոյացնելՄաքրել տվյալները, ներառյալ ցանցըՕգնեք մեզ թարգմանելով Session֊ը
@@ -626,8 +620,6 @@
Դուք մշտապես և անմիջապես կտեղեկացվեք նոր հաղորդագրությունների մասին՝ օգտագործելով Google-ի ծանուցումների սերվերները:Փոխել անունըԱռանձնացնել սարքը
- Ձեր վերականգնման բառակապակցություն
- Սա ձեր վերականգնման բառակապակցություն է: Դրա միջոցով դուք կարող եք վերականգնել կամ տեղափոխել ձեր Session ID-ն նոր սարք:Ջնջել բոլոր տվյալներըՍա ընդմիշտ կջնջի ձեր հաղորդագրությունները, սեսիաներն ու կոնտակտները:Ցանկանու՞մ եք մաքրել միայն այս սարքը, թե՞ ջնջել ձեր ամբողջ հաշիվը:
diff --git a/app/src/main/res/values-hy/strings.xml b/app/src/main/res/values-hy/strings.xml
index 994d95e16..81724321c 100644
--- a/app/src/main/res/values-hy/strings.xml
+++ b/app/src/main/res/values-hy/strings.xml
@@ -546,8 +546,8 @@
Դա նշանակում է, որ այն չի՞ հավաքում իմ անձնական տվյալները կամ իմ զրույցի մետատվյալները։Այն օգտվում է հատուկ տվյալների փոխանցման միջոցներից և ամբողջական կոդավորման տեխնոլոգիաներից։Ընկերները չեն թողնի ընկերներին, որ նրանք օգտվեն վտանգավոր նամակների ծրագրերից։ Խնդրեմ։
- Ասեք «բարև» Ձեր Սեանսի ինքնությանը
- Ձեր Սեանսի ինքնությունը հատուկ հասցե է, որը մարդիկ պիտի օգտագործեն Ձեզ հետ Սեանսով կապ հաստատելու համար։ Ձեր իրական ինքնության հետ կապ չունենալով, Ձեր Սեանսի ինքնությունն լիովին գաղտնի է։
+
+
Վերականգնել ձեր հաշիվըՄուտքագրեք վերականգնման բառակապակցությունը, որը տրվել է ձեզ, երբ գրանցվել եք ձեր հաշիվը վերականգնելու համար:Գրեք գաղտնի արտահայտությունը
@@ -564,11 +564,6 @@
"Չստացվեց հեռանալ խումբից"Վստա՞հ եք, որ ցանկանում եք ջնջել այս խոսակցությունը:Ջնջված է
- Ձեր վերականգնման բառակապակցություն
- Ծանոթացեք ձեր վերականգնման բառակապակցության հետ
- Session այդին Ձեր Session բանալին է, որը կարող եք վերականգնել եթե կորցնեք ձեր սարքը, ձեր բանալին պահեք և մի տվեք ինչ-որ մեկին.
- Սեղմած պահեք տեսնելու համար
- Դուք վերջացրել եք 80%Պահեք ձեր անվտանգությունը պահպանելով session-ի բանալինՀպեք և պահեք տրված բառերը՝ ձեր վերականգնման բանալին գտնելու համար, այնուհետև պահեք այն ապահով՝ ձեր Session ID-ն ապահով պահելու համար.Վստահ եղեք որ ձեր վերականգման բանալին հուսալի տեղում է
@@ -613,7 +608,6 @@
ՍարքերՀրավիրել ընկերոջըՀաճախակի տրվող հարցեր
- Վերականգնման ԱրտահայտությունԶրոյացնելՄաքրել տվյալները, ներառյալ ցանցըՕգնեք մեզ թարգմանելով Session֊ը
@@ -626,8 +620,6 @@
Դուք մշտապես և անմիջապես կտեղեկացվեք նոր հաղորդագրությունների մասին՝ օգտագործելով Google-ի ծանուցումների սերվերները:Փոխել անունըԱռանձնացնել սարքը
- Ձեր վերականգնման բառակապակցություն
- Սա ձեր վերականգնման բառակապակցություն է: Դրա միջոցով դուք կարող եք վերականգնել կամ տեղափոխել ձեր Session ID-ն նոր սարք:Ջնջել բոլոր տվյալներըՍա ընդմիշտ կջնջի ձեր հաղորդագրությունները, սեսիաներն ու կոնտակտները:Ցանկանու՞մ եք մաքրել միայն այս սարքը, թե՞ ջնջել ձեր ամբողջ հաշիվը:
diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml
index 25b13ebbb..028c501e1 100644
--- a/app/src/main/res/values-in-rID/strings.xml
+++ b/app/src/main/res/values-in-rID/strings.xml
@@ -414,8 +414,8 @@
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
@@ -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 25b13ebbb..8a8d68cc5 100644
--- a/app/src/main/res/values-in/strings.xml
+++ b/app/src/main/res/values-in/strings.xml
@@ -414,8 +414,6 @@
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
@@ -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 113eaf994..b92e6ca25 100644
--- a/app/src/main/res/values-it-rIT/strings.xml
+++ b/app/src/main/res/values-it-rIT/strings.xml
@@ -539,8 +539,8 @@ scambia un altro messaggio!
Quindi 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
@@ -557,11 +557,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 +601,6 @@ scambia un altro messaggio!
DispositiviInvita un amicoFAQ
- Frase di recuperoElimina datiCancella i dati e la reteAiutaci a tradurre Session
@@ -619,8 +613,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?
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 113eaf994..b92e6ca25 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -539,8 +539,8 @@ scambia un altro messaggio!
Quindi 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
@@ -557,11 +557,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 +601,6 @@ scambia un altro messaggio!
DispositiviInvita un amicoFAQ
- Frase di recuperoElimina datiCancella i dati e la reteAiutaci a tradurre Session
@@ -619,8 +613,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?
diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml
index 3e86ad180..be7f6d3ff 100644
--- a/app/src/main/res/values-ja-rJP/strings.xml
+++ b/app/src/main/res/values-ja-rJP/strings.xml
@@ -523,8 +523,8 @@
個人情報や会話のメタデータは収集されませんか?どのように機能しますか?高度な匿名ルーティングとエンドツーエンドの暗号化テクノロジーを組み合わせて使用します。友人は、セキュリティ侵害されたメッセンジャーを自らの友人に使用させません。どういたしまして。
- Session ID をご紹介します
- Session ID は、Session で連絡を取るために使用できる一意のアドレスです。本当のアイデンティティに関係なく、あなたの Session ID は設計上完全に匿名でプライベートです。
+
+
アカウントを復元するアカウントを復元するためにサインアップしたときに与えられたリカバリーフレーズを入力します。リカバリーフレーズを入力してください
@@ -541,11 +541,6 @@
"グループを脱退できませんでした"この会話を削除してもよろしいですか?会話を削除しました
- あなたのリカバリーフレーズ
- リカバリーフレーズに合致する
- リカバリーフレーズは、Session ID のマスターキーです。デバイスにアクセスできなくなった場合、これを使用して Session ID を復元できます。リカバリーフレーズを安全な場所に保管し、誰にも教えないでください。
- 明らかにする
- あと少しで終了です。80%リカバリーフレーズを保存してアカウントを保護する編集された単語をタップして長押ししてリカバリーフレーズを表示し、それを安全に保管して Session ID を保護します。リカバリーフレーズは安全な場所に保管してください
@@ -590,7 +585,6 @@
デバイス友達を招待よくある質問
- リカバリーフレーズデータを消去するネットワークを含むデータを消去セッションの翻訳にご協力ください
@@ -603,8 +597,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 3e86ad180..be7f6d3ff 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -523,8 +523,8 @@
個人情報や会話のメタデータは収集されませんか?どのように機能しますか?高度な匿名ルーティングとエンドツーエンドの暗号化テクノロジーを組み合わせて使用します。友人は、セキュリティ侵害されたメッセンジャーを自らの友人に使用させません。どういたしまして。
- Session ID をご紹介します
- Session ID は、Session で連絡を取るために使用できる一意のアドレスです。本当のアイデンティティに関係なく、あなたの Session ID は設計上完全に匿名でプライベートです。
+
+
アカウントを復元するアカウントを復元するためにサインアップしたときに与えられたリカバリーフレーズを入力します。リカバリーフレーズを入力してください
@@ -541,11 +541,6 @@
"グループを脱退できませんでした"この会話を削除してもよろしいですか?会話を削除しました
- あなたのリカバリーフレーズ
- リカバリーフレーズに合致する
- リカバリーフレーズは、Session ID のマスターキーです。デバイスにアクセスできなくなった場合、これを使用して Session ID を復元できます。リカバリーフレーズを安全な場所に保管し、誰にも教えないでください。
- 明らかにする
- あと少しで終了です。80%リカバリーフレーズを保存してアカウントを保護する編集された単語をタップして長押ししてリカバリーフレーズを表示し、それを安全に保管して Session ID を保護します。リカバリーフレーズは安全な場所に保管してください
@@ -590,7 +585,6 @@
デバイス友達を招待よくある質問
- リカバリーフレーズデータを消去するネットワークを含むデータを消去セッションの翻訳にご協力ください
@@ -603,8 +597,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 a96220650..37ef4b834 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 코드 보기
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index a96220650..37ef4b834 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 코드 보기
diff --git a/app/src/main/res/values-lt-rLT/strings.xml b/app/src/main/res/values-lt-rLT/strings.xml
index 050015734..7bbb01d5b 100644
--- a/app/src/main/res/values-lt-rLT/strings.xml
+++ b/app/src/main/res/values-lt-rLT/strings.xml
@@ -556,8 +556,8 @@
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ą
@@ -572,10 +572,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 +607,6 @@
PranešimaiPokalbiaiĮrenginiai
- Atkūrimo frazėIšvalyti duomenisPadėkite išversti SessionPranešimai
@@ -623,8 +618,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
diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml
index 050015734..7bbb01d5b 100644
--- a/app/src/main/res/values-lt/strings.xml
+++ b/app/src/main/res/values-lt/strings.xml
@@ -556,8 +556,8 @@
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ą
@@ -572,10 +572,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 +607,6 @@
PranešimaiPokalbiaiĮrenginiai
- Atkūrimo frazėIšvalyti duomenisPadėkite išversti SessionPranešimai
@@ -623,8 +618,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
diff --git a/app/src/main/res/values-lv-rLV/strings.xml b/app/src/main/res/values-lv-rLV/strings.xml
index 2e6bd9d0e..cb8edbaea 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 2e6bd9d0e..cb8edbaea 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 4ebaa0428..00e2ba0cb 100644
--- a/app/src/main/res/values-nb-rNO/strings.xml
+++ b/app/src/main/res/values-nb-rNO/strings.xml
@@ -538,8 +538,8 @@ nøkkelutvekslingsmelding.
Så 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
@@ -556,11 +556,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 +600,6 @@ nøkkelutvekslingsmelding.
EnheterInviter en vennOfte Stilte Spørsmål
- GjenopprettingsfraseFjern dataFjern data inkludert nettverkHjelp oss med å oversette Session
@@ -618,8 +612,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?
diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml
index 4ebaa0428..00e2ba0cb 100644
--- a/app/src/main/res/values-nb/strings.xml
+++ b/app/src/main/res/values-nb/strings.xml
@@ -538,8 +538,8 @@ nøkkelutvekslingsmelding.
Så 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
@@ -556,11 +556,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 +600,6 @@ nøkkelutvekslingsmelding.
EnheterInviter en vennOfte Stilte Spørsmål
- GjenopprettingsfraseFjern dataFjern data inkludert nettverkHjelp oss med å oversette Session
@@ -618,8 +612,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?
diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml
index 50e2fec37..618f21eb3 100644
--- a/app/src/main/res/values-nl-rNL/strings.xml
+++ b/app/src/main/res/values-nl-rNL/strings.xml
@@ -539,8 +539,8 @@
Dus 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
@@ -557,11 +557,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 +601,6 @@
ApparatenNodig een vriend uitVeelgestelde vragen (FAQ)
- Herstel zinGegevens wissenWis Data, Inclusief NetwerkHelp ons om Sessie the vertalen
@@ -619,8 +613,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?
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 50e2fec37..618f21eb3 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -539,8 +539,8 @@
Dus 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
@@ -557,11 +557,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 +601,6 @@
ApparatenNodig een vriend uitVeelgestelde vragen (FAQ)
- Herstel zinGegevens wissenWis Data, Inclusief NetwerkHelp ons om Sessie the vertalen
@@ -619,8 +613,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?
diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml
index 6f9ca55e7..8a8efb24d 100644
--- a/app/src/main/res/values-pl-rPL/strings.xml
+++ b/app/src/main/res/values-pl-rPL/strings.xml
@@ -561,8 +561,8 @@
Wię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
@@ -579,11 +579,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 +623,6 @@
UrządzeniaZaproś znajomegoFAQ
- Fraza odzyskiwaniaWyczyść daneWyczyść dane łącznie z sieciąPomóż nam w tłumaczeniu Session
@@ -641,8 +635,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?
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 6f9ca55e7..8a8efb24d 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -561,8 +561,8 @@
Wię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
@@ -579,11 +579,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 +623,6 @@
UrządzeniaZaproś znajomegoFAQ
- Fraza odzyskiwaniaWyczyść daneWyczyść dane łącznie z sieciąPomóż nam w tłumaczeniu Session
@@ -641,8 +635,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?
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 6c5540e37..84a194a71 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -539,8 +539,8 @@
Entã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
@@ -557,11 +557,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 +601,6 @@
DispositivosConvide um amigoPerguntas Frequentes
- Frase de RecuperaçãoLimpar DadosLimpar Dados Incluindo RedeAjude-nos a traduzir o Session
@@ -619,8 +613,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?
diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml
index 05fd1e043..a7373c267 100644
--- a/app/src/main/res/values-pt-rPT/strings.xml
+++ b/app/src/main/res/values-pt-rPT/strings.xml
@@ -534,8 +534,8 @@ foi recebida está corrompida!
Entã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
@@ -552,11 +552,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 +593,6 @@ foi recebida está corrompida!
NotificaçõesBate-paposDispositivos
- Frase de recuperaçãoApagar os dadosNotificaçõesEstilo de notificação
@@ -607,8 +601,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 6c5540e37..84a194a71 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -539,8 +539,8 @@
Entã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
@@ -557,11 +557,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 +601,6 @@
DispositivosConvide um amigoPerguntas Frequentes
- Frase de RecuperaçãoLimpar DadosLimpar Dados Incluindo RedeAjude-nos a traduzir o Session
@@ -619,8 +613,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?
diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml
index 8f2c5f6ed..3139cac87 100644
--- a/app/src/main/res/values-ro-rRO/strings.xml
+++ b/app/src/main/res/values-ro-rRO/strings.xml
@@ -553,8 +553,8 @@ schimbul de chei este corupt
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
diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml
index 8f2c5f6ed..3139cac87 100644
--- a/app/src/main/res/values-ro/strings.xml
+++ b/app/src/main/res/values-ro/strings.xml
@@ -553,8 +553,8 @@ schimbul de chei este corupt
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
diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml
index 6b907ee40..eaff21977 100644
--- a/app/src/main/res/values-ru-rRU/strings.xml
+++ b/app/src/main/res/values-ru-rRU/strings.xml
@@ -563,8 +563,8 @@
Значит ли это, что оно не собирает мою личную информацию или метаданные моего разговора? Как оно работает?С использованием комбинации передовых технологий анонимной маршрутизации и сквозного шифрования.Друзья не позволят друзьям использовать ненадежные мессенджеры. Пользуйтесь на здоровье.
- Познакомьтесь со своим Session ID
- Ваш Session ID - это уникальный адрес, который другие пользователи могут использовать для связи с вами при помощи Session. Поскольку ваш Session ID никак не связан с вашей настоящей личностью, он по определению является полностью анонимным и конфиденциальным.
+
+
Восстановите свой аккаунтДля восстановления учетной записи введите секретную фразу, которая была предоставлена вам при регистрации.Введите секретную фразу
@@ -581,11 +581,6 @@
"Не удалось покинуть группу"Вы уверены, что хотите удалить этот разговор?Разговор удален
- Ваша секретная фраза для восстановления
- А вот и ваша секретная фраза для восстановления
- Ваша секретная фраза является главным ключом к вашему Session ID. Вы можете использовать ее для восстановления Session ID, если потеряете доступ к своему устройству. Сохраните свою секретную фразу в безопасном месте, и никому ее не передавайте.
- Удерживайте, чтобы показать
- Вы почти закончили! 80%Защитите свой аккаунт, сохранив секретную фразуНажмите и удерживайте сокращенные слова, чтобы открыть секретную фразу, а затем сохраните ее в надежном месте, чтобы защитить свой Session ID.Обязательно сохраните секретную фразу в надежном месте
@@ -630,7 +625,6 @@
УстройстваПригласить другаЧасто задаваемые вопросы
- Секретная фразаОчистить данныеОчистить данные включая учетную записьПомогите нам перевести Session
@@ -643,8 +637,6 @@
Вы будете получать уведомления о новых сообщениях надежно и сразу же с помощью серверов уведомлений Google.Сменить имяОтключить устройство
- Ваша секретная фраза
- Это ваша секретная фраза. С ее помощью вы можете восстановить или перенести свой Session ID на новое устройство.Очистить все данныеЭто навсегда удалит ваши сообщения, сессии и контакты.Вы хотите очистить только это устройство или полностью удалить ваш аккаунт?
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 6b907ee40..eaff21977 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -563,8 +563,8 @@
Значит ли это, что оно не собирает мою личную информацию или метаданные моего разговора? Как оно работает?С использованием комбинации передовых технологий анонимной маршрутизации и сквозного шифрования.Друзья не позволят друзьям использовать ненадежные мессенджеры. Пользуйтесь на здоровье.
- Познакомьтесь со своим Session ID
- Ваш Session ID - это уникальный адрес, который другие пользователи могут использовать для связи с вами при помощи Session. Поскольку ваш Session ID никак не связан с вашей настоящей личностью, он по определению является полностью анонимным и конфиденциальным.
+
+
Восстановите свой аккаунтДля восстановления учетной записи введите секретную фразу, которая была предоставлена вам при регистрации.Введите секретную фразу
@@ -581,11 +581,6 @@
"Не удалось покинуть группу"Вы уверены, что хотите удалить этот разговор?Разговор удален
- Ваша секретная фраза для восстановления
- А вот и ваша секретная фраза для восстановления
- Ваша секретная фраза является главным ключом к вашему Session ID. Вы можете использовать ее для восстановления Session ID, если потеряете доступ к своему устройству. Сохраните свою секретную фразу в безопасном месте, и никому ее не передавайте.
- Удерживайте, чтобы показать
- Вы почти закончили! 80%Защитите свой аккаунт, сохранив секретную фразуНажмите и удерживайте сокращенные слова, чтобы открыть секретную фразу, а затем сохраните ее в надежном месте, чтобы защитить свой Session ID.Обязательно сохраните секретную фразу в надежном месте
@@ -630,7 +625,6 @@
УстройстваПригласить другаЧасто задаваемые вопросы
- Секретная фразаОчистить данныеОчистить данные включая учетную записьПомогите нам перевести Session
@@ -643,8 +637,6 @@
Вы будете получать уведомления о новых сообщениях надежно и сразу же с помощью серверов уведомлений Google.Сменить имяОтключить устройство
- Ваша секретная фраза
- Это ваша секретная фраза. С ее помощью вы можете восстановить или перенести свой Session ID на новое устройство.Очистить все данныеЭто навсегда удалит ваши сообщения, сессии и контакты.Вы хотите очистить только это устройство или полностью удалить ваш аккаунт?
diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml
index f6071f00d..acbd512e6 100644
--- a/app/src/main/res/values-sk-rSK/strings.xml
+++ b/app/src/main/res/values-sk-rSK/strings.xml
@@ -551,8 +551,8 @@ výmeny kľúčov.
Takž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
@@ -568,11 +568,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 +603,6 @@ výmeny kľúčov.
SúkromieUpozorneniaZariadenia
- Fráza pre obnovenieOdstrániť dátaPomôžte nám preložiť SessionUpozornenia
@@ -617,8 +611,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
diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml
index f6071f00d..acbd512e6 100644
--- a/app/src/main/res/values-sk/strings.xml
+++ b/app/src/main/res/values-sk/strings.xml
@@ -551,8 +551,8 @@ výmeny kľúčov.
Takž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
@@ -568,11 +568,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 +603,6 @@ výmeny kľúčov.
SúkromieUpozorneniaZariadenia
- Fráza pre obnovenieOdstrániť dátaPomôžte nám preložiť SessionUpozornenia
@@ -617,8 +611,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
diff --git a/app/src/main/res/values-sq-rAL/strings.xml b/app/src/main/res/values-sq-rAL/strings.xml
index 9d441ac48..3988b30ff 100644
--- a/app/src/main/res/values-sq-rAL/strings.xml
+++ b/app/src/main/res/values-sq-rAL/strings.xml
@@ -535,8 +535,8 @@
Si ë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 9d441ac48..3988b30ff 100644
--- a/app/src/main/res/values-sq/strings.xml
+++ b/app/src/main/res/values-sq/strings.xml
@@ -535,8 +535,8 @@
Si ë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 ffbee3007..3ddb512a9 100644
--- a/app/src/main/res/values-sr-rSP/strings.xml
+++ b/app/src/main/res/values-sr-rSP/strings.xml
@@ -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 ffbee3007..3ddb512a9 100644
--- a/app/src/main/res/values-sr/strings.xml
+++ b/app/src/main/res/values-sr/strings.xml
@@ -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 c966df21f..0bf4a8983 100644
--- a/app/src/main/res/values-sv-rSE/strings.xml
+++ b/app/src/main/res/values-sv-rSE/strings.xml
@@ -538,8 +538,8 @@ för nyckelutbyte!
Så 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
@@ -556,11 +556,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 +600,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 +612,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?
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index c966df21f..0bf4a8983 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -538,8 +538,8 @@ för nyckelutbyte!
Så 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
@@ -556,11 +556,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 +600,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 +612,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?
diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml
index 5e696160d..c0fa141cd 100644
--- a/app/src/main/res/values-tr-rTR/strings.xml
+++ b/app/src/main/res/values-tr-rTR/strings.xml
@@ -538,8 +538,8 @@ iletisi alındı!
Yani 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
@@ -556,11 +556,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 +600,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 +612,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?
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 5e696160d..c0fa141cd 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -538,8 +538,8 @@ iletisi alındı!
Yani 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
@@ -556,11 +556,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 +600,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 +612,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?
diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml
index 010bdae04..3aa41d4a1 100644
--- a/app/src/main/res/values-uk-rUA/strings.xml
+++ b/app/src/main/res/values-uk-rUA/strings.xml
@@ -564,8 +564,8 @@
Отже, він не збирає мою особисту інформацію чи мою метадані розмови? Як це працює?Він використовує комбінацію анонімної мережі та скрізного енд-ту-енд шифрування.Друзі не дозволяють друзям користуватися скомпромітованими мессенджерами. Ласкаво просимо.
- Привітайтесь з вашою Session ID адрессою
- Ваш Session ID є унікальною адресою, якою люди будуть зв’язуватимися з вами в Session. При відсутньому з\'єднанні з вашою реальною особистістю, Session ID є абсолютно анонімним та приватним, по дизайну.
+
+
Відновити обліковий записВведіть фразу відновлення, яку вам було сказано записати на папері під час реєстрації, для відновлення облікового запису.Введіть вашу фразу відновлення
@@ -582,11 +582,6 @@
"Не вдалося покинути групу"Ви дійсно хочете видалити цю бесіду?Бесіду видалено
- Ваша фраза відновлення
- Знайомтесь з вашою фразою відновлення
- Ваша фраза відновлення - це головний ключ до вашогї Session ID адреси - ви можете використовувати її для відновлення вашої Session ID адреси якщо ви втратите доступ до пристрою. Запишіть на папері та зберігайте вашу фразу відновлення у безпечному місці і не дайте її нікому.
- Натисніть, щоб відобразити
- Ви майже закінчили! 80%Захистіть свій обліковий запис, записавши на папері відновлювальну фразуНатисніть і втримуйте приховані слова, щоб розкрити вашу фразу відновлення, запишіть її на папері, щоб безпечно захистити вашу Session ID адресу.Переконайтеся, що ви записали свою фразу відновлення на папері і поклали її в безпечне місце
@@ -631,7 +626,6 @@
ПристроїЗапросити другаЧасті питання
- Фраза відновленняВидалити даніВидалити дані та аккаунтДопоможіть нам перекласти Session
@@ -644,8 +638,6 @@
Вас надійно повідомлятимуть про нові сповіщення негайно, використовуючи сервери сповіщень Google.Змінити їм’яВідв’язати цей пристрій
- Ваша фраза відновлення
- Запишіть це на папері. Це ваша фраза відновлення. З нею ви можете відновити або перенести ваш Session ID на новий пристрій.Видалити всі даніЦе остаточно видалить ваші повідомлення, сеанси та контакти.Ви хочете видалити тільки цей пристрій або видалити весь обліковий запис?
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index 55dbcd63e..ee20f862c 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -564,8 +564,8 @@
Отже, він не збирає мою особисту інформацію чи мою метадані розмови? Як це працює?Він використовує комбінацію анонімної мережі та скрізного енд-ту-енд шифрування.Друзі не дозволяють друзям користуватися скомпромітованими мессенджерами. Ласкаво просимо.
- Привітайтесь з вашою Session ID адрессою
- Ваш Session ID є унікальною адресою, якою люди будуть зв’язуватимися з вами в Session. При відсутньому з\'єднанні з вашою реальною особистістю, Session ID є абсолютно анонімним та приватним, по дизайну.
+
+
Відновити обліковий записВведіть фразу відновлення, яку вам було сказано записати на папері під час реєстрації, для відновлення облікового запису.Введіть вашу фразу відновлення
@@ -582,11 +582,6 @@
"Не вдалося покинути групу"Ви дійсно хочете видалити цю бесіду?Бесіду видалено
- Ваша фраза відновлення
- Знайомтесь з вашою фразою відновлення
- Ваша фраза відновлення - це головний ключ до вашогї Session ID адреси - ви можете використовувати її для відновлення вашої Session ID адреси якщо ви втратите доступ до пристрою. Запишіть на папері та зберігайте вашу фразу відновлення у безпечному місці і не дайте її нікому.
- Натисніть, щоб відобразити
- Ви майже закінчили! 80%Захистіть свій обліковий запис, записавши на папері відновлювальну фразуНатисніть і втримуйте приховані слова, щоб розкрити вашу фразу відновлення, запишіть її на папері, щоб безпечно захистити вашу Session ID адресу.Переконайтеся, що ви записали свою фразу відновлення на папері і поклали її в безпечне місце
@@ -631,7 +626,6 @@
ПристроїЗапросити другаЧасті питання
- Фраза відновленняВидалити даніВидалити дані та аккаунтДопоможіть нам перекласти Session
@@ -644,8 +638,6 @@
Вас надійно повідомлятимуть про нові сповіщення негайно, використовуючи сервери сповіщень Google.Змінити їм’яВідв’язати цей пристрій
- Ваша фраза відновлення
- Запишіть це на папері. Це ваша фраза відновлення. З нею ви можете відновити або перенести ваш Session ID на новий пристрій.Видалити всі даніЦе остаточно видалить ваші повідомлення, сеанси та контакти.Ви хочете видалити тільки цей пристрій або видалити весь обліковий запис?
diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml
index 3c6146ec4..efe03656f 100644
--- a/app/src/main/res/values-vi-rVN/strings.xml
+++ b/app/src/main/res/values-vi-rVN/strings.xml
@@ -344,8 +344,8 @@ trao đổi chìa khóa bị hỏng!
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.
@@ -362,10 +362,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 +400,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 +408,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 3c6146ec4..efe03656f 100644
--- a/app/src/main/res/values-vi/strings.xml
+++ b/app/src/main/res/values-vi/strings.xml
@@ -344,8 +344,8 @@ trao đổi chìa khóa bị hỏng!
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.
@@ -362,10 +362,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 +400,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 +408,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 6452efb83..17e7d5078 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -526,8 +526,8 @@
所以Session不会收集我的个人信息或者对话元数据?怎么做到的?通过结合高效的匿名路由和端到端的加密技术。好朋友之间就要使用能够保证信息安全的聊天工具,不用谢啦!
- 向您的Session ID打个招呼吧
- 您的Session ID是其他用户在与您聊天时使用的独一无二的地址。Session ID与您的真实身份无关,它在设计上完全是匿名且私密的
+
+
恢复您的帐号在您重新登陆并需要恢复账户时,请输入您注册帐号时的恢复口令输入您的恢复口令
@@ -544,11 +544,6 @@
"无法离开群组"您确定要删除此对话吗?对话已删除
- 您的恢复口令
- 这里是您的恢复口令
- 您的恢复口令是Session ID的主密钥 - 如果您无法访问您的现有设备,则可以使用它在其他设备上恢复您的Session ID。请将您的恢复口令存储在安全的地方,不要将其提供给任何人。
- 长按显示内容
- 就快完成了!80%保存恢复口令以保护您的帐号安全点击并按住遮盖住的单词以显示您的恢复口令,请将它安全地存储以保护您的Session ID请确保将恢复口令存储在安全的地方
@@ -593,7 +588,6 @@
设备邀请朋友常见问题
- 恢复口令清除数据清除包括网络在内的数据帮助我们翻译 Session
@@ -606,8 +600,6 @@
新消息将通过 Google 通知服务器即时可靠地发送更换名称断开设备关联
- 您的恢复口令
- 这是您的恢复口令。您可以通过该口令将Session ID还原或迁移到新设备上清除所有数据这将永久删除您的消息、对话和联系人你想只清除这个设备,还是删除你的整个账户?
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 525d53418..1668f7215 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -532,8 +532,8 @@
所以牠不會收集我的個人資訊或我的對話元數據? 它是如何工作的?我們結合了進階匿名連線與端對端加密技術。我們不會讓自己的朋友使用不夠好的聊天 app,不客氣。
- 與您的 Session ID 打個招呼
- 您的 Session ID 是人們可以用來在 Session 上聯繫您的唯一地址。 並且與您的真實身份毫無關聯,因此您的 Session ID 在設計上是完全匿名和私密的。
+
+
恢復您的帳號輸入您註冊時提供的恢復短語以恢復您的帳號。請輸入您的回復用字句
@@ -550,11 +550,6 @@
"無法離開群組"您確定要刪除此對話嗎?對話已刪除
- 你的恢復密語
- 查看您的恢復短語
- 您的恢復短語是您的 Session ID 的主金鑰——如果您無法存取您的裝置,您可以使用它來恢復您的Session ID。 將您的恢復短語存放在安全的地方,不要將其提供給任何人。
- 按住以解除隱藏
- 安裝快完成囉!80%透過儲存您的恢復短語來保護您的帳戶點擊並按住已編輯的字詞以顯示您的恢復短語,然後將其妥善保管以保護您的 Session ID。請確保將您的恢復短語存儲在安全的地方
@@ -599,7 +594,6 @@
裝置邀請好友常見問題
- 回復用字句清除資料清除包括網路在內的資料協助我們翻譯 Session
@@ -612,8 +606,6 @@
您將會透過 Google 的通知服務可靠且迅速的收到通知。變更名稱取消連結裝置
- 您的恢復短語
- 這是您的恢復短語。 有了它,您可以將 Session ID 恢復或轉移到新裝置。清除所有數據這將永久刪除您的訊息、帳號和聯絡人。您想僅清除此裝置的資料,還是刪除您整個帳戶的資料?
diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml
index 86963c540..94f97f7a3 100644
--- a/app/src/main/res/values-zh/strings.xml
+++ b/app/src/main/res/values-zh/strings.xml
@@ -526,8 +526,8 @@
所以Session不会收集我的个人信息或者对话元数据?怎么做到的?通过结合高效的匿名路由和端到端的加密技术。好朋友之间就要使用能够保证信息安全的聊天工具,不用谢啦!
- 向您的Session ID打个招呼吧
- 您的Session ID是其他用户在与您聊天时使用的独一无二的地址。Session ID与您的真实身份无关,它在设计上完全是匿名且私密的。
+
+
恢复您的帐号在您重新登陆并需要恢复账户时,请输入您注册帐号时的恢复口令。输入您的恢复口令
@@ -544,11 +544,6 @@
"无法离开群组"您确定要删除此对话吗?对话已删除
- 您的恢复口令
- 这里是您的恢复口令
- 您的恢复口令是Session ID的主密钥 - 如果您无法访问您的现有设备,则可以使用它在其他设备上恢复您的Session ID。请将您的恢复口令存储在安全的地方,不要将其提供给任何人。
- 长按显示内容
- 就快完成了!80%保存恢复口令以保护您的帐号安全点击并按住遮盖住的单词以显示您的恢复口令,请将它安全地存储以保护您的Session ID。请确保将恢复口令存储在安全的地方
@@ -593,7 +588,6 @@
设备邀请朋友常见问题
- 恢复口令清除数据清除包括网络在内的数据帮助我们翻译 Session
@@ -606,8 +600,6 @@
新消息将通过 Google 通知服务器即时可靠地发送。更换名称断开设备关联
- 您的恢复口令
- 这是您的恢复口令。您可以通过该口令将Session ID还原或迁移到新设备上。清除所有数据这将永久删除您的消息、对话和联系人。你想只清除这个设备,还是删除你的整个账户?
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
index d8aedf3de..6de1d1a9c 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 d794bf5f8..929a624e9 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -21,7 +21,6 @@
Link DeviceSession ID
- Recovery phrase reminderContinue
@@ -35,9 +34,6 @@
Fast mode notifications optionSlow mode notifications optionContinue with settings
-
- Recovery Phrase
- Copy Recovery PhraseUser settingsSearch icon
@@ -139,7 +135,7 @@
User settingsUsernamePrivacy
- Show recovery phrase
+ Show recovery passwordEdit user nicknameApplyCancel
@@ -722,18 +718,22 @@
Your Session begins here...Create Session IDContinue Your Session
+ Open URL
+ This will open in your browser.
+ Terms of Service
+ Privacy PolicyWhat\'s Session?It\'s a decentralized, encrypted messaging appSo 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 accountEnter the recovery phrase that was given to you when you signed up to restore your account.Enter your recovery phrasePick 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.
+ 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 namePlease pick a display namePlease pick a shorter display name
@@ -745,11 +745,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
@@ -798,7 +793,7 @@
DevicesInvite a FriendFAQ
- Recovery Phrase
+ Recovery PasswordClear DataClear Data Including NetworkHelp us Translate Session
@@ -820,8 +815,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?
@@ -1044,5 +1037,6 @@
You have no messages from %s.\nSend a message to start the conversation!Unread Messages
+ Recovery Password
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 2928fc771..6d9e373cd 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -189,28 +189,6 @@
1
-
-
-
-
-
@@ -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 9ac76c9d0..e30df3fdf 100644
--- a/build.gradle
+++ b/build.gradle
@@ -11,10 +11,12 @@ buildscript {
}
dependencies {
- classpath "com.android.tools.build:gradle:$gradlePluginVersion"
+ classpath 'com.android.tools.build:gradle:7.4.2'
+ 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"
+ classpath files('libs/gradle-witness.jar')
classpath "com.squareup:javapoet:1.13.0"
classpath "com.google.dagger:hilt-android-gradle-plugin:$daggerVersion"
if (project.hasProperty('huawei')) classpath 'com.huawei.agconnect:agcp:1.9.1.300'
diff --git a/gradle.properties b/gradle.properties
index 1d7bc62d4..dbd8b30b6 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -13,7 +13,6 @@
#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
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index cd825d084..ab85dbb69 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 1b431d62b..ce5564fb0 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)
+ }
+}