This commit is contained in:
Andrew 2023-12-08 09:46:46 +00:00 committed by GitHub
commit 15248aab5f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
134 changed files with 1789 additions and 2755 deletions

View File

@ -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"

View File

@ -106,23 +106,23 @@
android:name="org.thoughtcrime.securesms.onboarding.RegisterActivity"
android:screenOrientation="portrait"
android:theme="@style/Theme.Session.DayNight.FlatActionBar" />
<activity
android:name="org.thoughtcrime.securesms.onboarding.RecoveryPhraseRestoreActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize"
android:theme="@style/Theme.Session.DayNight.FlatActionBar" />
<activity
android:name="org.thoughtcrime.securesms.onboarding.LinkDeviceActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize"
android:theme="@style/Theme.Session.DayNight.FlatActionBar" />
<activity
android:name="org.thoughtcrime.securesms.onboarding.DisplayNameActivity"
android:name="org.thoughtcrime.securesms.onboarding.LoadingActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize"
android:theme="@style/Theme.Session.DayNight.FlatActionBar" />
<activity
android:name="org.thoughtcrime.securesms.onboarding.PNModeActivity"
android:name="org.thoughtcrime.securesms.onboarding.pickname.PickDisplayNameActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize"
android:theme="@style/Theme.Session.DayNight.FlatActionBar" />
<activity
android:name="org.thoughtcrime.securesms.onboarding.messagenotifications.MessageNotificationsActivity"
android:screenOrientation="portrait"
android:theme="@style/Theme.Session.DayNight.FlatActionBar" />
<activity
@ -157,7 +157,7 @@
android:label="@string/activity_edit_closed_group_title"
android:screenOrientation="portrait" />
<activity
android:name="org.thoughtcrime.securesms.onboarding.SeedActivity"
android:name="org.thoughtcrime.securesms.onboarding.recoverypassword.RecoveryPasswordActivity"
android:screenOrientation="portrait" />
<activity
android:name="org.thoughtcrime.securesms.contacts.SelectContactsActivity"

View File

@ -105,7 +105,7 @@ class SessionDialogBuilder(val context: Context) {
fun destructiveButton(
@StringRes text: Int,
@StringRes contentDescription: Int,
@StringRes contentDescription: Int = text,
listener: () -> Unit = {}
) = button(
text,

View File

@ -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()

View File

@ -362,7 +362,7 @@ fun FileDetails(fileDetails: List<TitledText>) {
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())
}
}
}

View File

@ -31,7 +31,6 @@ class ThumbnailProgressBar: View {
private val drawingRect = Rect()
override fun dispatchDraw(canvas: Canvas) {
getDrawingRect(objectRect)
drawingRect.set(objectRect)

View File

@ -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()
}

View File

@ -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)
}
}

View File

@ -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
}

View File

@ -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 dont 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") }
}
}
}
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)
)
}
}

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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<Event>()
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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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()
}

View File

@ -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)
}

View File

@ -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
}

View File

@ -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)
}

View File

@ -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<Event>()
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 <T : ViewModel> create(modelClass: Class<T>): 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
}

View File

@ -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<Boolean>.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)
}

View File

@ -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
)
}
}

View File

@ -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()
}
}

View File

@ -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() {

View File

@ -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")
}
}
}
}

View File

@ -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)
)
}

View File

@ -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<ExtraColors> { 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)

View File

@ -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)
}
}
}

View File

@ -0,0 +1,80 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="96dp"
android:height="96dp"
android:viewportWidth="96"
android:viewportHeight="96">
<path
android:pathData="M5.586,92.452C7.289,94.298 14.301,91.08 19.836,88.5C23.984,86.573 40.581,79.762 48.831,76.23C51.059,75.277 54.299,74.033 56.631,70.965C58.701,68.235 64.191,56.64 53.136,44.895C41.916,32.97 30.359,36.263 26.039,39.322C23.496,41.123 21.426,45.18 20.496,47.243C16.566,55.958 10.964,71.925 8.684,78.202C7.011,82.83 3.899,90.622 5.586,92.452Z"
android:fillColor="#FFC107"/>
<path
android:pathData="M19.386,49.868C19.491,51.173 19.753,53.295 20.653,57.382C21.268,60.188 22.273,63.127 23.091,65.07C25.543,70.912 28.986,73.268 32.473,75.158C38.398,78.368 42.426,78.967 42.426,78.967L37.596,80.94C37.596,80.94 34.671,80.332 30.681,78.368C26.878,76.493 22.918,73.32 20.023,67.11C18.771,64.418 18.043,61.807 17.623,59.737C17.106,57.173 17.023,55.717 17.023,55.717L19.386,49.868Z"
android:fillColor="#FF8F00"/>
<path
android:pathData="M13.453,65.077C13.453,65.077 14.053,69.945 18.073,76.088C22.783,83.272 29.36,84.45 29.36,84.45L24.988,86.25C24.988,86.25 20.105,84.757 15.463,78.42C12.568,74.467 11.758,69.743 11.758,69.743L13.453,65.077Z"
android:fillColor="#FF8F00"/>
<path
android:pathData="M9.291,76.613C9.291,76.613 10.386,80.813 12.786,83.948C15.644,87.69 19.281,88.777 19.281,88.777L15.929,90.262C15.929,90.262 13.386,89.73 10.604,86.205C8.489,83.527 7.889,80.452 7.889,80.452L9.291,76.613Z"
android:fillColor="#FF8F00"/>
<path
android:pathData="M7.469,87.277C7.319,86.94 7.319,86.558 7.477,86.228L26.579,46.612L29.722,58.425L9.622,87.457C9.082,88.268 7.866,88.162 7.469,87.277Z"
android:strokeAlpha="0.44"
android:fillColor="#FFFDE7"
android:fillAlpha="0.44"/>
<path
android:pathData="M31.237,62.393C40.162,72.832 50.324,71.527 53.707,68.887C57.097,66.24 59.774,57.143 50.887,46.875C41.572,36.12 31.027,39.188 28.589,41.513C26.152,43.838 23.047,52.815 31.237,62.393Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="55.787"
android:startY="46.379"
android:endX="33.462"
android:endY="59.774"
android:type="linear">
<item android:offset="0.024" android:color="#FF8F4700"/>
<item android:offset="1" android:color="#FF703E2D"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M61.888,66.69C58.633,63.96 56.901,64.448 54.576,65.415C51.576,66.66 46.858,67.582 40.453,65.415L42.381,60.772C46.183,62.055 48.936,61.432 51.313,60.03C54.373,58.23 58.558,55.763 65.068,61.23C67.783,63.51 70.566,65.025 72.606,64.335C74.091,63.84 74.878,61.627 75.276,59.865C75.313,59.708 75.373,59.257 75.418,58.86C75.778,56.107 76.378,50.167 80.803,47.13C85.536,43.882 90.508,43.882 90.508,43.882L91.408,52.822C89.121,52.485 87.531,52.95 86.188,53.693C81.133,56.505 85.536,67.305 77.668,70.935C70.101,74.452 63.913,68.385 61.888,66.69Z"
android:fillColor="#03A9F4"/>
<path
android:pathData="M34.048,55.29L30.793,52.373C36.771,45.697 35.195,40.792 34.048,37.222C33.815,36.502 33.598,35.82 33.456,35.167C32.945,32.857 32.84,30.847 32.998,29.093C30.703,26.235 29.691,23.243 29.623,23.04C28.228,18.817 29.278,14.7 31.685,10.837C36.553,3 45.366,3 45.366,3L48.306,10.868C46.07,10.778 38.743,10.89 36.493,14.438C33.651,18.907 35.518,21.667 35.653,21.983C36.201,21.27 36.756,20.7 37.25,20.257C40.843,17.07 43.963,16.612 45.951,16.792C48.186,16.995 50.21,18.12 51.658,19.965C53.241,21.99 53.893,24.622 53.39,27.015C52.903,29.347 51.35,31.32 49.018,32.572C44.945,34.763 41.556,34.463 39.283,33.705C39.298,33.757 39.306,33.818 39.32,33.87C39.403,34.245 39.568,34.77 39.763,35.377C41.09,39.487 43.558,46.013 34.048,55.29ZM39.561,27.142C39.995,27.458 40.453,27.72 40.925,27.907C42.5,28.538 44.218,28.327 46.168,27.278C47.315,26.663 47.451,26.003 47.495,25.785C47.631,25.132 47.405,24.3 46.918,23.677C46.491,23.13 45.995,22.845 45.403,22.785C44.278,22.688 42.756,23.4 41.233,24.757C40.506,25.41 39.951,26.212 39.561,27.142Z"
android:fillColor="#F44336"/>
<path
android:pathData="M47.076,56.513L42.418,56.385C42.418,56.385 44.631,43.89 51.793,41.79C53.136,41.4 54.605,41.002 56.083,40.785C56.96,40.65 58.348,40.447 59.03,40.193C59.188,39.015 58.693,37.515 58.138,35.813C57.703,34.493 57.253,33.135 57.013,31.65C56.548,28.755 57.32,26.198 59.188,24.435C61.468,22.298 65.15,21.615 69.305,22.56C71.675,23.1 73.423,24.263 74.961,25.282C77.158,26.745 78.44,27.487 81.126,25.68C84.373,23.49 80.128,14.917 77.87,9.968L86.293,6.458C87.425,8.933 92.893,21.667 89.285,28.935C88.071,31.38 85.978,33 83.233,33.607C77.263,34.943 73.768,32.618 71.218,30.923C70.01,30.12 68.953,29.49 67.805,29.16C59.833,26.888 70.963,38.618 65.751,43.89C62.623,47.048 54.98,47.88 54.486,48C49.565,49.185 47.076,56.513 47.076,56.513Z"
android:fillColor="#F48FB1"/>
<path
android:pathData="M32.992,29.093C32.849,30.743 32.782,31.725 33.209,33.87C35.272,35.385 39.764,35.385 39.764,35.385C39.569,34.778 39.397,34.252 39.322,33.877C39.307,33.825 39.299,33.765 39.284,33.713C34.717,31.433 32.992,29.093 32.992,29.093Z"
android:fillColor="#C92B27"/>
<path
android:pathData="M23.648,36.48L15.893,32.678L19.755,27.097L25.838,31.125L23.648,36.48Z"
android:fillColor="#FFC107"/>
<path
android:pathData="M12.217,25.95C8.257,25.417 4.222,22.058 3.779,21.675L7.672,17.108C8.849,18.105 11.347,19.778 13.019,20.003L12.217,25.95Z"
android:fillColor="#FB8C00"/>
<path
android:pathData="M19.206,15.953L13.506,14.085C14.158,12.09 14.331,9.937 13.993,7.86L19.918,6.907C20.406,9.922 20.158,13.05 19.206,15.953Z"
android:fillColor="#03A9F4"/>
<path
android:pathData="M60.666,10.212L54.805,11.494L56.497,19.231L62.359,17.949L60.666,10.212Z"
android:fillColor="#FB8C00"/>
<path
android:pathData="M69.344,13.328L65.219,8.97C67.379,6.923 67.874,4.245 67.874,4.215L73.799,5.183C73.724,5.655 72.966,9.9 69.344,13.328Z"
android:fillColor="#FFC107"/>
<path
android:pathData="M76.877,34.798L71.637,36.436L73.426,42.163L78.667,40.525L76.877,34.798Z"
android:fillColor="#FB8C00"/>
<path
android:pathData="M73.162,84.772L67.2,84.067C67.455,81.945 65.872,79.342 65.438,78.765L70.238,75.165C70.598,75.637 73.725,79.965 73.162,84.772Z"
android:fillColor="#F44336"/>
<path
android:pathData="M90.276,77.168C88.034,76.83 85.739,76.695 83.474,76.777L83.271,70.777C85.904,70.688 88.566,70.838 91.169,71.235L90.276,77.168Z"
android:fillColor="#FB8C00"/>
<path
android:pathData="M86.425,81.157L82.209,85.426L88.01,91.154L92.226,86.885L86.425,81.157Z"
android:fillColor="#F48FB1"/>
<path
android:pathData="M74.159,52.455L69.824,47.498L64.868,51.833L69.203,56.79L74.159,52.455Z"
android:fillColor="#F44336"/>
</vector>

View File

@ -1,9 +1,9 @@
<vector android:height="24dp" android:viewportHeight="448.40668"
android:viewportWidth="404.08533" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<group>
<clip-path android:pathData="M0,0L404.085,0L404.085,448.407L0,448.407Z M 0,0"/>
<path android:fillAlpha="1" android:fillColor="#00f782"
android:fillType="nonZero"
android:pathData="m288.607,420.376l-196.335,-0c-33.576,-0 -62.508,-25.748 -64.164,-59.281 -1.771,-35.847 26.883,-65.576 62.353,-65.576l113.072,-0c6.919,-0 12.527,-5.608 12.527,-12.525l0,-92.305L327.307,252.333C356.723,268.633 375.241,299.335 376.027,332.848 377.161,380.975 336.746,420.376 288.607,420.376m-211.829,-224.303c-29.416,-16.3 -47.933,-47.001 -48.721,-80.515 -1.132,-48.127 39.283,-87.528 87.42,-87.528L311.811,28.031c33.576,-0 62.508,25.748 64.165,59.283 1.771,35.845 -26.883,65.575 -62.352,65.575 0,-0 -81.316,0.013 -113.077,0.019 -6.915,0.001 -12.499,5.608 -12.501,12.523l-0.021,92.289zM340.891,227.816 L256.254,180.919l57.371,-0c49.877,-0 90.46,-40.579 90.46,-90.457 0,-49.877 -40.583,-90.461 -90.46,-90.461l-200.299,-0c-62.485,-0 -113.327,50.841 -113.327,113.327 0,44.567 24.216,85.664 63.195,107.265l84.636,46.896l-57.368,-0c-49.88,-0 -90.463,40.58 -90.463,90.457 0,49.877 40.583,90.461 90.463,90.461L290.758,448.407c62.488,-0 113.327,-50.84 113.327,-113.327 0,-44.567 -24.216,-85.664 -63.193,-107.264" android:strokeColor="#00000000"/>
</group>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="31dp"
android:height="35dp"
android:viewportWidth="31"
android:viewportHeight="35">
<path
android:pathData="M26.165,17.975L19.689,14.419H24.078C25.914,14.419 27.674,13.697 28.973,12.41C30.271,11.124 31,9.379 31,7.56C31,5.741 30.271,3.996 28.973,2.71C27.674,1.424 25.914,0.701 24.078,0.701L8.752,0.701C6.453,0.704 4.249,1.61 2.623,3.221C0.998,4.832 0.083,7.016 0.081,9.294C0.081,10.954 0.531,12.584 1.382,14.014C2.233,15.444 3.455,16.623 4.92,17.427L11.398,20.983H7.002C6.087,20.973 5.178,21.142 4.329,21.482C3.48,21.822 2.707,22.326 2.056,22.964C1.405,23.602 0.888,24.361 0.535,25.199C0.182,26.036 0,26.935 0,27.842C0,28.75 0.182,29.648 0.535,30.485C0.888,31.323 1.405,32.082 2.056,32.72C2.707,33.358 3.48,33.862 4.329,34.202C5.178,34.542 6.087,34.711 7.002,34.701H22.329C24.628,34.698 26.832,33.792 28.458,32.181C30.083,30.57 30.997,28.386 31,26.108C31,24.448 30.551,22.819 29.701,21.388C28.851,19.958 27.63,18.78 26.165,17.975ZM5.955,15.568C4.851,14.961 3.925,14.078 3.271,13.007C2.618,11.936 2.258,10.714 2.228,9.463C2.141,5.814 5.233,2.826 8.917,2.826H23.94C26.509,2.826 28.722,4.775 28.85,7.322C28.882,7.963 28.782,8.603 28.556,9.204C28.331,9.806 27.985,10.356 27.539,10.82C27.092,11.285 26.556,11.655 25.961,11.909C25.366,12.162 24.726,12.293 24.078,12.293H15.427C15.173,12.295 14.93,12.395 14.751,12.574C14.573,12.752 14.473,12.993 14.473,13.245V20.242L5.955,15.568ZM22.164,32.576H7.141C4.572,32.576 2.358,30.627 2.232,28.081C2.2,27.44 2.299,26.8 2.525,26.198C2.75,25.597 3.096,25.047 3.542,24.582C3.988,24.117 4.525,23.747 5.12,23.494C5.715,23.24 6.355,23.109 7.002,23.109H15.655C15.781,23.109 15.906,23.084 16.022,23.036C16.138,22.989 16.244,22.919 16.333,22.83C16.422,22.742 16.492,22.637 16.54,22.522C16.588,22.407 16.613,22.283 16.613,22.158V15.16L25.125,19.834C26.231,20.441 27.157,21.324 27.811,22.396C28.465,23.469 28.824,24.691 28.854,25.944C28.941,29.588 25.848,32.576 22.164,32.576Z"
android:fillColor="#31F196"/>
</vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="15dp"
android:height="17dp"
android:viewportWidth="15"
android:viewportHeight="17">
<path
android:pathData="M6.938,0.486C7.132,0.399 7.334,0.354 7.54,0.354L7.543,0.36C7.742,0.36 7.939,0.402 8.135,0.488C8.375,0.597 8.621,0.7 8.867,0.804L9.15,0.924L10.484,1.499C10.918,1.685 11.352,1.871 11.786,2.058C12.413,2.327 13.042,2.597 13.67,2.866C14.263,3.12 14.587,3.636 14.538,4.236C14.534,4.268 14.535,4.313 14.537,4.362V4.362V4.362C14.537,4.39 14.538,4.418 14.538,4.448C14.541,4.518 14.541,4.59 14.541,4.674C14.532,5.436 14.532,6.211 14.541,6.973V6.987L14.538,7.001V7.266L14.538,7.27V7.27C14.535,7.54 14.532,7.812 14.524,8.075C14.509,8.776 14.37,9.44 14.249,9.939L14.24,9.973L14.229,10.006C14.125,10.347 14.006,10.71 13.853,11.083C13.647,11.575 13.378,12.08 13.028,12.629L13.014,12.652L12.997,12.674C12.583,13.26 12.198,13.718 11.788,14.117C11.114,14.77 10.354,15.305 9.524,15.715C9.511,15.722 9.497,15.73 9.483,15.738C9.476,15.742 9.469,15.746 9.461,15.75C9.455,15.753 9.449,15.757 9.443,15.76L9.399,15.783L9.356,15.802C8.951,15.975 8.468,16.167 7.939,16.304L7.927,16.31H7.916C7.788,16.34 7.658,16.354 7.534,16.354C7.41,16.354 7.282,16.34 7.146,16.307C6.652,16.181 6.149,16 5.651,15.769L5.643,15.76H5.634C4.214,15.074 3.034,14.058 2.126,12.744L2.086,12.699L2.042,12.629C1.727,12.13 1.49,11.695 1.296,11.262C1.137,10.904 1.02,10.554 0.907,10.214L0.9,10.193L0.857,10.065L0.836,10.001L0.822,9.937L0.796,9.812L0.77,9.688L0.763,9.658C0.705,9.383 0.644,9.1 0.608,8.801C0.543,8.311 0.544,7.845 0.544,7.399L0.544,7.297V7.166V6.982V4.652V4.423C0.544,4.385 0.545,4.349 0.545,4.314C0.546,4.246 0.546,4.183 0.544,4.124C0.521,3.583 0.816,3.125 1.351,2.888C1.921,2.644 2.49,2.4 3.059,2.156C3.628,1.911 4.197,1.667 4.766,1.423L5.799,0.98L5.842,0.96L5.914,0.927L5.938,0.915C5.982,0.896 6.027,0.877 6.071,0.858L6.072,0.858C6.153,0.823 6.235,0.788 6.316,0.754C6.377,0.728 6.437,0.702 6.498,0.676L6.498,0.676L6.498,0.676C6.645,0.613 6.793,0.551 6.938,0.486ZM8.416,7.697L9.764,8.409C10.07,8.57 10.324,8.806 10.501,9.093C10.678,9.379 10.772,9.705 10.772,10.038C10.771,10.494 10.581,10.931 10.242,11.254C9.903,11.576 9.444,11.758 8.965,11.758H5.773C5.582,11.76 5.393,11.726 5.216,11.658C5.039,11.59 4.879,11.489 4.743,11.362C4.607,11.234 4.499,11.082 4.426,10.914C4.352,10.747 4.315,10.567 4.315,10.385C4.315,10.203 4.352,10.023 4.426,9.856C4.499,9.688 4.607,9.536 4.743,9.408C4.879,9.28 5.039,9.18 5.216,9.112C5.393,9.043 5.582,9.01 5.773,9.012H6.689L5.34,8.3C5.034,8.139 4.78,7.903 4.602,7.616C4.425,7.33 4.332,7.003 4.331,6.671C4.332,6.215 4.522,5.778 4.861,5.455C5.2,5.133 5.659,4.951 6.138,4.951H9.33C9.712,4.951 10.079,5.095 10.349,5.353C10.62,5.61 10.772,5.96 10.772,6.324C10.772,6.688 10.62,7.038 10.349,7.295C10.079,7.553 9.712,7.697 9.33,7.697H8.416ZM4.996,7.415C5.132,7.629 5.325,7.806 5.555,7.927L7.329,8.863V7.462C7.329,7.412 7.35,7.363 7.387,7.328C7.424,7.292 7.475,7.272 7.528,7.272H9.33C9.465,7.272 9.598,7.245 9.722,7.195C9.846,7.144 9.958,7.07 10.051,6.977C10.144,6.884 10.216,6.774 10.263,6.653C10.31,6.533 10.33,6.404 10.324,6.276C10.297,5.766 9.836,5.376 9.301,5.376H6.172C5.405,5.376 4.761,5.974 4.779,6.705C4.785,6.955 4.86,7.2 4.996,7.415ZM5.802,11.333H8.931C9.699,11.333 10.343,10.734 10.325,10.005C10.318,9.754 10.244,9.509 10.107,9.295C9.971,9.08 9.778,8.903 9.548,8.781L7.775,7.846V9.247C7.775,9.272 7.77,9.297 7.76,9.32C7.75,9.343 7.735,9.364 7.717,9.381C7.698,9.399 7.676,9.413 7.652,9.423C7.628,9.432 7.602,9.437 7.575,9.437H5.773C5.638,9.437 5.505,9.464 5.381,9.514C5.257,9.565 5.145,9.639 5.052,9.732C4.96,9.825 4.887,9.935 4.841,10.056C4.794,10.176 4.773,10.304 4.779,10.433C4.806,10.943 5.267,11.333 5.802,11.333Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>

View File

@ -1,67 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginRight="@dimen/very_large_spacing"
android:textSize="@dimen/very_large_font_size"
android:textStyle="bold"
android:text="@string/activity_landing_title_2" />
<org.thoughtcrime.securesms.onboarding.FakeChatView
android:id="@+id/fakeChatView"
android:layout_width="match_parent"
android:layout_height="@dimen/fake_chat_view_height"
android:layout_marginTop="@dimen/medium_spacing" />
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<Button
style="@style/Widget.Session.Button.Common.ProminentFilled"
android:contentDescription="@string/AccessibilityId_create_session_id"
android:id="@+id/registerButton"
android:layout_width="match_parent"
android:layout_height="@dimen/medium_button_height"
android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginRight="@dimen/massive_spacing"
android:text="@string/activity_landing_register_button_title" />
<Button
style="@style/Widget.Session.Button.Common.ProminentOutline"
android:id="@+id/restoreButton"
android:contentDescription="@string/AccessibilityId_restore_your_session"
android:layout_width="match_parent"
android:layout_height="@dimen/medium_button_height"
android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginTop="@dimen/medium_spacing"
android:layout_marginRight="@dimen/massive_spacing"
android:text="@string/activity_landing_restore_button_title" />
<Button
style="@style/Widget.Session.Button.Common.Borderless"
android:id="@+id/linkButton"
android:contentDescription="@string/AccessibilityId_link_a_device"
android:layout_width="match_parent"
android:layout_height="@dimen/onboarding_button_bottom_offset"
android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginRight="@dimen/massive_spacing"
android:gravity="center"
android:textAllCaps="false"
android:textSize="@dimen/medium_font_size"
android:text="@string/activity_link_device_link_device" />
</LinearLayout>

View File

@ -1,119 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/contentView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginTop="@dimen/very_large_spacing"
android:layout_marginRight="@dimen/very_large_spacing"
android:textSize="@dimen/very_large_font_size"
android:textStyle="bold"
android:textColor="?android:textColorPrimary"
android:contentDescription="@string/AccessibilityId_message_notifications"
android:text="@string/activity_pn_mode_message_notifications" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginTop="@dimen/large_spacing"
android:layout_marginRight="@dimen/very_large_spacing"
android:textSize="@dimen/medium_font_size"
android:textColor="?android:textColorPrimary"
android:text="@string/activity_pn_mode_explanation" />
<org.thoughtcrime.securesms.util.PNModeView
android:contentDescription="@string/AccessibilityId_fast_mode_notifications_option"
android:id="@+id/fcmOptionView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginTop="@dimen/large_spacing"
android:layout_marginRight="@dimen/very_large_spacing"
android:padding="12dp"
android:orientation="vertical"
android:background="@drawable/pn_option_background">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="@dimen/medium_font_size"
android:textColor="?android:textColorPrimary"
android:textStyle="bold"
android:text="@string/activity_pn_mode_fast_mode" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:textSize="@dimen/very_small_font_size"
android:textColor="?android:textColorPrimary"
android:text="@string/activity_pn_mode_fast_mode_explanation" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:textSize="@dimen/small_font_size"
android:textColor="?colorAccent"
android:textStyle="bold"
android:text="@string/activity_pn_mode_recommended_option_tag" />
</org.thoughtcrime.securesms.util.PNModeView>
<org.thoughtcrime.securesms.util.PNModeView
android:contentDescription="@string/AccessibilityId_slow_mode_notifications_option"
android:id="@+id/backgroundPollingOptionView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginTop="@dimen/small_spacing"
android:layout_marginRight="@dimen/very_large_spacing"
android:padding="12dp"
android:orientation="vertical"
android:background="@drawable/pn_option_background">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="@dimen/medium_font_size"
android:textColor="?android:textColorPrimary"
android:textStyle="bold"
android:text="@string/activity_pn_mode_slow_mode"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:textSize="@dimen/very_small_font_size"
android:textColor="?android:textColorPrimary"
android:text="@string/activity_pn_mode_slow_mode_explanation" />
</org.thoughtcrime.securesms.util.PNModeView>
<Button
style="@style/Widget.Session.Button.Common.ProminentFilled"
android:id="@+id/registerButton"
android:contentDescription="@string/AccessibilityId_continue_message_notifications"
android:layout_width="match_parent"
android:layout_height="@dimen/medium_button_height"
android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginTop="@dimen/very_large_spacing"
android:layout_marginRight="@dimen/massive_spacing"
android:layout_marginBottom="@dimen/onboarding_button_bottom_offset"
android:text="@string/continue_2" />
</LinearLayout>
</ScrollView>

View File

@ -1,78 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginRight="@dimen/very_large_spacing"
android:textSize="@dimen/very_large_font_size"
android:textStyle="bold"
android:textColor="?android:textColorPrimary"
android:text="@string/activity_restore_title" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginTop="7dp"
android:layout_marginRight="@dimen/very_large_spacing"
android:textSize="@dimen/medium_font_size"
android:textColor="?android:textColorPrimary"
android:text="@string/activity_restore_explanation" />
<EditText
style="@style/SessionEditText"
android:id="@+id/mnemonicEditText"
android:contentDescription="@string/AccessibilityId_enter_your_recovery_phrase"
android:layout_width="match_parent"
android:layout_height="64dp"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginTop="12dp"
android:layout_marginRight="@dimen/very_large_spacing"
android:paddingTop="0dp"
android:paddingBottom="0dp"
android:gravity="center_vertical"
android:inputType="textMultiLine"
android:maxLines="3"
android:hint="@string/activity_restore_seed_edit_text_hint" />
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<Button
style="@style/Widget.Session.Button.Common.ProminentFilled"
android:id="@+id/restoreButton"
android:contentDescription="@string/AccessibilityId_continue"
android:layout_width="match_parent"
android:layout_height="@dimen/medium_button_height"
android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginRight="@dimen/massive_spacing"
android:text="@string/continue_2" />
<TextView
android:id="@+id/termsTextView"
android:layout_width="match_parent"
android:layout_height="@dimen/onboarding_button_bottom_offset"
android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginRight="@dimen/massive_spacing"
android:gravity="center"
android:textColor="?android:textColorTertiary"
android:textColorLink="?colorAccent"
android:textSize="@dimen/very_small_font_size"
android:text="By using this service, you agree to our Terms of Service and Privacy Policy"
tools:ignore="HardcodedText" /> <!-- Intentionally not yet translated -->
</LinearLayout>

View File

@ -1,83 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginRight="@dimen/very_large_spacing"
android:textSize="@dimen/very_large_font_size"
android:textStyle="bold"
android:textColor="?android:textColorPrimary"
android:text="@string/activity_register_title" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginTop="10dp"
android:layout_marginRight="@dimen/very_large_spacing"
android:textSize="@dimen/medium_font_size"
android:textColor="?android:textColorPrimary"
android:text="@string/activity_register_explanation" />
<TextView
style="@style/SessionIDTextView"
android:contentDescription="@string/AccessibilityId_session_id"
android:id="@+id/publicKeyTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginTop="@dimen/medium_spacing"
android:layout_marginRight="@dimen/very_large_spacing"
tools:text="05987d601943c267879be41830888066c6a024cbdc9a548d06813924bf3372ea78" />
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<Button
style="@style/Widget.Session.Button.Common.ProminentFilled"
android:id="@+id/registerButton"
android:contentDescription="@string/AccessibilityId_continue"
android:layout_width="match_parent"
android:layout_height="@dimen/medium_button_height"
android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginRight="@dimen/massive_spacing"
android:text="@string/continue_2" />
<Button
style="@style/Widget.Session.Button.Common.ProminentOutline"
android:id="@+id/copyButton"
android:layout_width="match_parent"
android:layout_height="@dimen/medium_button_height"
android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginTop="@dimen/medium_spacing"
android:layout_marginRight="@dimen/massive_spacing"
android:text="@string/copy" />
<TextView
android:id="@+id/termsTextView"
android:layout_width="match_parent"
android:layout_height="@dimen/onboarding_button_bottom_offset"
android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginRight="@dimen/massive_spacing"
android:gravity="center"
android:textColor="?android:textColorTertiary"
android:textColorLink="?colorAccent"
android:textSize="@dimen/very_small_font_size"
android:text="By using this service, you agree to our Terms of Service and Privacy Policy"
tools:ignore="HardcodedText" /> <!-- Intentionally not yet translated -->
</LinearLayout>

View File

@ -1,77 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:gravity="center_horizontal"
android:orientation="vertical">
<org.thoughtcrime.securesms.onboarding.SeedReminderView
android:id="@+id/seedReminderView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginRight="@dimen/very_large_spacing"
android:textSize="26sp"
android:textStyle="bold"
android:textColor="?android:textColorPrimary"
android:text="@string/activity_seed_title_2" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginTop="8dp"
android:layout_marginRight="@dimen/very_large_spacing"
android:textSize="16sp"
android:textColor="?android:textColorPrimary"
android:text="@string/activity_seed_explanation" />
<TextView
style="@style/SessionIDTextView"
android:id="@+id/seedTextView"
android:contentDescription="@string/AccessibilityId_recovery_phrase"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginTop="12dp"
android:layout_marginRight="@dimen/very_large_spacing"
android:gravity="center"
android:textSize="16sp"
android:textAlignment="center"
tools:text="nautical novelty populate onion awkward bent etiquette plant submarine itches vipers september axis maximum populate" />
<Button
android:id="@+id/revealButton"
android:layout_width="196dp"
android:layout_height="@dimen/onboarding_button_bottom_offset"
android:textAlignment="center"
android:textSize="16sp"
android:alpha="0.6"
style="@style/Widget.Session.Button.Common.Borderless"
android:text="@string/activity_seed_reveal_button_title" />
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<Button
style="@style/Widget.Session.Button.Common.ProminentOutline"
android:contentDescription="@string/AccessibilityId_copy_recovery_phrase"
android:id="@+id/copyButton"
android:layout_width="196dp"
android:layout_height="@dimen/medium_button_height"
android:layout_marginBottom="@dimen/medium_spacing"
android:text="@string/copy" />
</LinearLayout>

View File

@ -1,76 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?colorPrimary"
android:orientation="vertical">
<ProgressBar
style="@android:style/Widget.ProgressBar.Horizontal"
android:id="@+id/progressBar"
android:layout_width="match_parent"
android:layout_height="@dimen/accent_line_thickness"
android:paddingLeft="-2dp"
android:paddingRight="-2dp"
android:progressTint="?colorAccent"
android:progress="80" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:padding="@dimen/medium_spacing"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/titleTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="?android:textColor"
android:textSize="@dimen/small_font_size"
android:textStyle="bold"
android:text="@string/view_seed_reminder_title" />
<TextView
android:id="@+id/subtitleTextView"
android:layout_width="260dp"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:textColor="?android:textColor"
android:textSize="@dimen/very_small_font_size"
android:lines="2"
android:alpha="0.6"
android:text="@string/view_seed_reminder_subtitle_1" />
</LinearLayout>
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginLeft="4dp" />
<Button
style="@style/Widget.Session.Button.Common.ProminentOutline"
android:id="@+id/button"
android:contentDescription="@string/AccessibilityId_continue"
android:layout_width="wrap_content"
android:layout_height="28dp"
android:layout_marginLeft="4dp"
android:textStyle="normal"
android:text="@string/continue_2" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:background="?android:dividerHorizontal" />
</LinearLayout>

View File

@ -94,7 +94,7 @@
android:background="?android:dividerHorizontal"
android:elevation="1dp" />
<org.thoughtcrime.securesms.onboarding.SeedReminderView
<androidx.compose.ui.platform.ComposeView
tools:visibility="gone"
android:id="@+id/seedReminderView"
android:layout_width="match_parent"
@ -158,32 +158,11 @@
tools:itemCount="6"
tools:listitem="@layout/view_global_search_result" />
<LinearLayout
<androidx.compose.ui.platform.ComposeView
android:id="@+id/emptyStateContainer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center_horizontal"
android:orientation="vertical"
android:paddingBottom="32dp"
android:visibility="gone">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/activity_home_empty_state_message"
android:textColor="?android:textColorPrimary"
android:textSize="@dimen/medium_font_size" />
<Button
android:id="@+id/createNewPrivateChatButton"
style="@style/Widget.Session.Button.Common.ProminentOutline"
android:layout_width="196dp"
android:layout_height="@dimen/medium_button_height"
android:layout_marginTop="@dimen/medium_spacing"
android:text="@string/activity_home_empty_state_button_title" />
</LinearLayout>
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"/>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/newConversationButton"

View File

@ -1,66 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginRight="@dimen/very_large_spacing"
android:textSize="@dimen/large_font_size"
android:textStyle="bold"
android:text="@string/activity_landing_title_2" />
<org.thoughtcrime.securesms.onboarding.FakeChatView
android:id="@+id/fakeChatView"
android:layout_width="match_parent"
android:layout_height="@dimen/fake_chat_view_height"
android:layout_marginTop="@dimen/small_spacing" />
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<Button
style="@style/Widget.Session.Button.Common.ProminentFilled"
android:contentDescription="@string/AccessibilityId_create_session_id"
android:id="@+id/registerButton"
android:layout_width="match_parent"
android:layout_height="@dimen/medium_button_height"
android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginRight="@dimen/massive_spacing"
android:text="@string/activity_landing_register_button_title" />
<Button
style="@style/Widget.Session.Button.Common.ProminentOutline"
android:contentDescription="@string/AccessibilityId_restore_your_session"
android:id="@+id/restoreButton"
android:layout_width="match_parent"
android:layout_height="@dimen/medium_button_height"
android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginTop="@dimen/small_spacing"
android:layout_marginRight="@dimen/massive_spacing"
android:text="@string/activity_landing_restore_button_title" />
<Button
style="@style/Widget.Session.Button.Common.Borderless"
android:contentDescription="@string/AccessibilityId_link_a_device"
android:id="@+id/linkButton"
android:layout_width="match_parent"
android:layout_height="@dimen/onboarding_button_bottom_offset"
android:layout_marginHorizontal="@dimen/massive_spacing"
android:gravity="center"
android:textAllCaps="false"
android:textSize="@dimen/medium_font_size"
android:text="@string/activity_link_device_link_device" />
</LinearLayout>

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/containerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
@ -18,28 +17,4 @@
</androidx.viewpager.widget.ViewPager>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animateLayoutChanges="true">
<RelativeLayout
android:id="@+id/loader"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#A4000000"
android:visibility="gone">
<com.github.ybq.android.spinkit.SpinKitView
style="@style/SpinKitView.Large.ThreeBounce"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginTop="8dp"
app:SpinKit_Color="@android:color/white" />
</RelativeLayout>
</FrameLayout>
</RelativeLayout>

View File

@ -1,118 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/contentView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginTop="@dimen/very_large_spacing"
android:layout_marginRight="@dimen/very_large_spacing"
android:textSize="@dimen/large_font_size"
android:textStyle="bold"
android:textColor="?android:textColorPrimary"
android:contentDescription="@string/AccessibilityId_message_notifications"
android:text="@string/activity_pn_mode_message_notifications" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginTop="@dimen/medium_spacing"
android:layout_marginRight="@dimen/very_large_spacing"
android:textSize="@dimen/medium_font_size"
android:textColor="?android:textColorPrimary"
android:text="@string/activity_pn_mode_explanation" />
<org.thoughtcrime.securesms.util.PNModeView
android:contentDescription="@string/AccessibilityId_fast_mode_notifications_option"
android:id="@+id/fcmOptionView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginTop="@dimen/medium_spacing"
android:layout_marginRight="@dimen/very_large_spacing"
android:padding="12dp"
android:orientation="vertical"
android:background="@color/pn_option_border">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="@dimen/medium_font_size"
android:textColor="?android:textColorPrimary"
android:textStyle="bold"
android:text="@string/activity_pn_mode_fast_mode" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:textSize="@dimen/very_small_font_size"
android:textColor="?android:textColorPrimary"
android:text="@string/activity_pn_mode_fast_mode_explanation" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:textSize="@dimen/small_font_size"
android:textColor="?colorAccent"
android:textStyle="bold"
android:text="@string/activity_pn_mode_recommended_option_tag" />
</org.thoughtcrime.securesms.util.PNModeView>
<org.thoughtcrime.securesms.util.PNModeView
android:contentDescription="@string/AccessibilityId_slow_mode_notifications_option"
android:id="@+id/backgroundPollingOptionView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginTop="@dimen/small_spacing"
android:layout_marginRight="@dimen/very_large_spacing"
android:padding="12dp"
android:orientation="vertical"
android:background="@drawable/pn_option_background">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="@dimen/medium_font_size"
android:textColor="?android:textColorPrimary"
android:textStyle="bold"
android:text="@string/activity_pn_mode_slow_mode" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:textSize="@dimen/very_small_font_size"
android:textColor="?android:textColorPrimary"
android:text="@string/activity_pn_mode_slow_mode_explanation" />
</org.thoughtcrime.securesms.util.PNModeView>
<Button
style="@style/Widget.Session.Button.Common.ProminentFilled"
android:contentDescription="@string/AccessibilityId_continue_message_notifications"
android:id="@+id/registerButton"
android:layout_width="match_parent"
android:layout_height="@dimen/medium_button_height"
android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginTop="20dp"
android:layout_marginRight="@dimen/massive_spacing"
android:layout_marginBottom="@dimen/onboarding_button_bottom_offset"
android:text="@string/continue_2" />
</LinearLayout>
</ScrollView>

View File

@ -1,78 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginRight="@dimen/very_large_spacing"
android:textSize="@dimen/large_font_size"
android:textStyle="bold"
android:textColor="?android:textColorPrimary"
android:text="@string/activity_restore_title" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginTop="4dp"
android:layout_marginRight="@dimen/very_large_spacing"
android:textSize="@dimen/small_font_size"
android:textColor="?android:textColorPrimary"
android:text="@string/activity_restore_explanation" />
<EditText
android:id="@+id/mnemonicEditText"
style="@style/SmallSessionEditText"
android:contentDescription="@string/AccessibilityId_enter_your_recovery_phrase"
android:layout_width="match_parent"
android:layout_height="64dp"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginTop="10dp"
android:layout_marginRight="@dimen/very_large_spacing"
android:gravity="center_vertical"
android:hint="@string/activity_restore_seed_edit_text_hint"
android:inputType="textMultiLine"
android:maxLines="3"
android:paddingTop="0dp"
android:paddingBottom="0dp" />
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<Button
style="@style/Widget.Session.Button.Common.ProminentFilled"
android:contentDescription="@string/AccessibilityId_continue"
android:id="@+id/restoreButton"
android:layout_width="match_parent"
android:layout_height="@dimen/medium_button_height"
android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginRight="@dimen/massive_spacing"
android:text="@string/continue_2" />
<TextView
android:id="@+id/termsTextView"
android:layout_width="match_parent"
android:layout_height="@dimen/onboarding_button_bottom_offset"
android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginRight="@dimen/massive_spacing"
android:gravity="center"
android:textColorLink="?android:textColorPrimary"
android:textSize="@dimen/very_small_font_size"
android:textColor="?android:textColorPrimary"
android:text="By using this service, you agree to our Terms of Service and Privacy Policy"
tools:ignore="HardcodedText" /> <!-- Intentionally not yet translated -->
</LinearLayout>

View File

@ -1,85 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginRight="@dimen/very_large_spacing"
android:textSize="@dimen/large_font_size"
android:textStyle="bold"
android:textColor="?android:textColorPrimary"
android:text="@string/activity_register_title" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginTop="4dp"
android:layout_marginRight="@dimen/very_large_spacing"
android:textSize="@dimen/small_font_size"
android:textColor="?android:textColorPrimary"
android:text="@string/activity_register_explanation" />
<TextView
style="@style/SessionIDTextView"
android:contentDescription="@string/AccessibilityId_session_id"
android:id="@+id/publicKeyTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18sp"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginTop="10dp"
android:layout_marginRight="@dimen/very_large_spacing"
tools:text="05987d601943c267879be41830888066c6a024cbdc9a548d06813924bf3372ea78" />
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<Button
style="@style/Widget.Session.Button.Common.ProminentFilled"
android:contentDescription="@string/AccessibilityId_continue"
android:id="@+id/registerButton"
android:layout_width="match_parent"
android:layout_height="@dimen/medium_button_height"
android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginRight="@dimen/massive_spacing"
android:text="@string/continue_2" />
<Button
style="@style/Widget.Session.Button.Common.ProminentOutline"
android:contentDescription="@string/AccessibilityId_copy_session_id"
android:id="@+id/copyButton"
android:layout_width="match_parent"
android:layout_height="@dimen/medium_button_height"
android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginTop="@dimen/small_spacing"
android:layout_marginRight="@dimen/massive_spacing"
android:text="@string/copy" />
<TextView
android:id="@+id/termsTextView"
android:layout_width="match_parent"
android:layout_height="@dimen/onboarding_button_bottom_offset"
android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginRight="@dimen/massive_spacing"
android:gravity="center"
android:textColor="?android:textColorTertiary"
android:textColorLink="?colorAccent"
android:textSize="@dimen/very_small_font_size"
android:text="By using this service, you agree to our Terms of Service and Privacy Policy"
tools:ignore="HardcodedText" /> <!-- Intentionally not yet translated -->
</LinearLayout>

View File

@ -1,79 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:gravity="center_horizontal"
android:orientation="vertical">
<org.thoughtcrime.securesms.onboarding.SeedReminderView
android:id="@+id/seedReminderView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginRight="@dimen/very_large_spacing"
android:textSize="19sp"
android:textStyle="bold"
android:textColor="?android:textColorPrimary"
android:text="@string/activity_seed_title_2" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginTop="4dp"
android:layout_marginRight="@dimen/very_large_spacing"
android:textSize="14sp"
android:textColor="?android:textColorPrimary"
android:text="@string/activity_seed_explanation" />
<TextView
style="@style/SessionIDTextView"
android:contentDescription="@string/AccessibilityId_recovery_phrase"
android:id="@+id/seedTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginTop="10dp"
android:layout_marginRight="@dimen/very_large_spacing"
android:gravity="center"
android:textSize="14sp"
android:textAlignment="center"
tools:text="nautical novelty populate onion awkward bent etiquette plant submarine itches vipers september axis maximum populate" />
<Button
android:id="@+id/revealButton"
android:layout_width="196dp"
android:layout_height="@dimen/onboarding_button_bottom_offset"
android:layout_marginHorizontal="@dimen/massive_spacing"
android:textAlignment="center"
android:textSize="14sp"
android:alpha="0.6"
android:visibility="gone"
style="@style/Widget.Session.Button.Common.Borderless"
android:text="@string/activity_seed_reveal_button_title" />
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<Button
style="@style/Widget.Session.Button.Common.ProminentOutline"
android:contentDescription="@string/AccessibilityId_copy_recovery_phrase"
android:id="@+id/copyButton"
android:layout_width="196dp"
android:layout_height="@dimen/medium_button_height"
android:layout_marginBottom="@dimen/medium_spacing"
android:text="@string/copy" />
</LinearLayout>

View File

@ -369,14 +369,14 @@
android:background="?colorDividerBackground" />
<RelativeLayout
android:id="@+id/seedButton"
android:id="@+id/passwordButton"
android:background="?selectableItemBackground"
android:paddingHorizontal="@dimen/large_spacing"
android:layout_width="match_parent"
android:layout_height="@dimen/setting_button_height"
android:contentDescription="@string/AccessibilityId_recovery_phrase">
android:contentDescription="@string/AccessibilityId_recovery_password">
<ImageView
android:id="@+id/seedContainer"
android:id="@+id/passwordContainer"
android:layout_width="@dimen/small_profile_picture_size"
android:layout_height="@dimen/small_profile_picture_size"
android:layout_alignParentStart="true"
@ -393,11 +393,12 @@
android:layout_marginHorizontal="@dimen/medium_spacing"
android:textStyle="bold"
android:gravity="center"
android:layout_toEndOf="@+id/seedContainer"
android:text="@string/activity_settings_recovery_phrase_button_title" />
android:layout_toEndOf="@+id/passwordContainer"
android:text="@string/activity_settings_recovery_password_button_title" />
</RelativeLayout>
<View
android:id="@+id/passwordDivider"
android:layout_marginHorizontal="@dimen/very_large_spacing"
android:layout_width="match_parent"
android:layout_height="1dp"

View File

@ -1,56 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/very_large_spacing"
android:paddingRight="@dimen/very_large_spacing"
android:paddingBottom="@dimen/medium_spacing"
android:orientation="vertical">
<TextView
style="@style/FakeChatViewMessageBubble.Outgoing"
android:id="@+id/bubble1"
android:layout_width="@dimen/fake_chat_view_bubble_width"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_spacing"
android:text="@string/view_fake_chat_bubble_1"
android:layout_gravity="right" />
<TextView
style="@style/FakeChatViewMessageBubble.Incoming"
android:id="@+id/bubble2"
android:layout_width="@dimen/fake_chat_view_bubble_width"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_spacing"
android:text="@string/view_fake_chat_bubble_2"
android:layout_gravity="left" />
<TextView
style="@style/FakeChatViewMessageBubble.Outgoing"
android:id="@+id/bubble3"
android:layout_width="@dimen/fake_chat_view_bubble_width"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_spacing"
android:text="@string/view_fake_chat_bubble_3"
android:layout_gravity="right" />
<TextView
style="@style/FakeChatViewMessageBubble.Incoming"
android:id="@+id/bubble4"
android:layout_width="@dimen/fake_chat_view_bubble_width"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_spacing"
android:text="@string/view_fake_chat_bubble_4"
android:layout_gravity="left" />
<TextView
style="@style/FakeChatViewMessageBubble.Incoming"
android:id="@+id/bubble5"
android:layout_width="@dimen/fake_chat_view_bubble_width"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_spacing"
android:text="@string/view_fake_chat_bubble_5"
android:layout_gravity="left" />
</LinearLayout>

View File

@ -1,77 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?colorPrimary"
android:orientation="vertical">
<ProgressBar
style="@android:style/Widget.ProgressBar.Horizontal"
android:id="@+id/progressBar"
android:layout_width="match_parent"
android:layout_height="@dimen/accent_line_thickness"
android:paddingLeft="-2dp"
android:paddingRight="-2dp"
android:progressTint="?colorAccent"
android:progress="80" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:contentDescription="@string/AccessibilityId_recovery_phrase_reminder"
android:gravity="center_vertical"
android:padding="@dimen/medium_spacing"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/titleTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="?android:textColorPrimary"
android:textSize="@dimen/small_font_size"
android:textStyle="bold"
android:text="@string/view_seed_reminder_title" />
<TextView
android:id="@+id/subtitleTextView"
android:layout_width="224dp"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:textColor="?android:textColorPrimary"
android:textSize="@dimen/very_small_font_size"
android:lines="2"
android:alpha="0.6"
android:text="@string/view_seed_reminder_subtitle_1" />
</LinearLayout>
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginLeft="4dp" />
<Button
style="@style/Widget.Session.Button.Common.ProminentOutline"
android:contentDescription="@string/AccessibilityId_continue"
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="28dp"
android:layout_marginLeft="4dp"
android:textStyle="normal"
android:text="@string/continue_2" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:background="?android:dividerHorizontal" />
</LinearLayout>

View File

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:title="@string/activity_path_learn_more_button_title"
android:id="@+id/learnMoreButton"
android:icon="@drawable/ic_info_outline_white_24dp"
app:showAsAction="always" />
</menu>

View File

@ -585,8 +585,8 @@
<string name="view_fake_chat_bubble_3">اِذن لا يقوم بجمع المعلومات الشخصية أو المعلومات الوصفية لمحادثاتي؟ كيف يعمل؟</string>
<string name="view_fake_chat_bubble_4">باِستخدام مُركَب من تكنولوجيات التشفير من الطرفين و توجيه مجهول للمعلومات.</string>
<string name="view_fake_chat_bubble_5">الأصدقاء لا يتركون أصدقائهم يستعملون تطبيق مراسلة مكشوف. مرحبا بك.</string>
<string name="activity_register_title">رحب بعنوان تعريفك</string>
<string name="activity_register_explanation">عنوان تعريفك هو عنوان وحيد خاص بك, يمكن للناس الاتصال بك عن طريقه. دون معرفة هويتك الحقيقية, هذا العنوان مصمم ليكون خاص و مجهول.</string>
<string name="activity_restore_title">استرجع حسابك</string>
<string name="activity_restore_explanation">أدخل عبارة الأسترجاع التي اعطيت لك عندما سجلت الدخول لاِسترجاع حسابك.</string>
<string name="activity_restore_seed_edit_text_hint">ادخل عبارة الاسترجاع</string>
@ -603,11 +603,6 @@
<string name="activity_home_leaving_group_failed_message">"لا يمكن مغادرة المجموعة"</string>
<string name="activity_home_delete_conversation_dialog_message">هل أنت متأكد من حذفك المحادثة؟</string>
<string name="activity_home_conversation_deleted_message">تم حذف المحادثة</string>
<string name="activity_seed_title">عبارة الاسترجاع</string>
<string name="activity_seed_title_2">هذه هي عبارة الاسترجاع</string>
<string name="activity_seed_explanation">عبارة الاسترجاع هي مفتاح عنوان تعريفك - يمكنك استخدامها لاسترجاع عنوان تعريفك اذا فقدت الوصول لجهازك. قم بحفظها في مكان امن و لا تعطها الى اي أحد.</string>
<string name="activity_seed_reveal_button_title">انقر مطولاً للكشف</string>
<string name="view_seed_reminder_title">انت على وشك الإنتهاء! ٨٠٪</string>
<string name="view_seed_reminder_subtitle_1">أمّن حسابك بحفظ كلمات إسترجاع الحساب</string>
<string name="view_seed_reminder_subtitle_2">انقر بإستمرار على الكلمات المغطاة للكشف عن كلمات إسترداد حسابك، ثم قم بتخزينها بأمان للحفاظ على معرّف الجلسة الخاص بك.</string>
<string name="view_seed_reminder_subtitle_3">تأكد من الإحتفاظ بكلمات الإسترجاع الخاصة بك في مكان آمن</string>
@ -652,7 +647,6 @@
<string name="activity_settings_devices_button_title">الأجهزة</string>
<string name="activity_settings_invite_button_title">أُدع صديق</string>
<string name="activity_settings_faq_button_title">الأسئلة الأكثر طرحاً</string>
<string name="activity_settings_recovery_phrase_button_title">عبارة الإسترداد</string>
<string name="activity_settings_clear_all_data_button_title">مسح البيانات</string>
<string name="activity_settings_clear_all_data_and_network_button_title">مسح البيانات بما في ذلك الشبكة</string>
<string name="activity_settings_help_translate_session">ساعدنا في ترجمة سيشن</string>
@ -665,8 +659,6 @@
<string name="preferences_notifications_strategy_category_fast_mode_summary">سوف يتم تنبيهك بالرسائل الجديدة بشكل موثوق و فوري بإستخدام خوادم غوغل.</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">غَير الاسم</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">ألغي ربط الجهاز</string>
<string name="dialog_seed_title">عبارة الاسترجاع الخاصة بك</string>
<string name="dialog_seed_explanation">هذه هي عبارة الاِسترجاع, يمكن بواسطتها اِسترجاع عنوان التعريف أو الاِنتقال اِلى جهاز جديد.</string>
<string name="dialog_clear_all_data_title">اِمسح جميع البيانات</string>
<string name="dialog_clear_all_data_explanation">سيؤدي هذا إلى حذف رسائلك, محادثاتك و متصليك نهائيا.</string>
<string name="dialog_clear_all_data_network_explanation">هل تريد مسح من هذا الجهاز فقط، أو حذف حسابك كليا ؟</string>

View File

@ -585,8 +585,8 @@
<string name="view_fake_chat_bubble_3">اِذن لا يقوم بجمع المعلومات الشخصية أو المعلومات الوصفية لمحادثاتي؟ كيف يعمل؟</string>
<string name="view_fake_chat_bubble_4">باِستخدام مُركَب من تكنولوجيات التشفير من الطرفين و توجيه مجهول للمعلومات.</string>
<string name="view_fake_chat_bubble_5">الأصدقاء لا يتركون أصدقائهم يستعملون تطبيق مراسلة مكشوف. مرحبا بك.</string>
<string name="activity_register_title">رحب بعنوان تعريفك</string>
<string name="activity_register_explanation">عنوان تعريفك هو عنوان وحيد خاص بك, يمكن للناس الاتصال بك عن طريقه. دون معرفة هويتك الحقيقية, هذا العنوان مصمم ليكون خاص و مجهول.</string>
<string name="activity_restore_title">استرجع حسابك</string>
<string name="activity_restore_explanation">أدخل عبارة الأسترجاع التي اعطيت لك عندما سجلت الدخول لاِسترجاع حسابك.</string>
<string name="activity_restore_seed_edit_text_hint">ادخل عبارة الاسترجاع</string>
@ -603,11 +603,6 @@
<string name="activity_home_leaving_group_failed_message">"لا يمكن مغادرة المجموعة"</string>
<string name="activity_home_delete_conversation_dialog_message">هل أنت متأكد من حذفك المحادثة؟</string>
<string name="activity_home_conversation_deleted_message">تم حذف المحادثة</string>
<string name="activity_seed_title">عبارة الاسترجاع</string>
<string name="activity_seed_title_2">هذه هي عبارة الاسترجاع</string>
<string name="activity_seed_explanation">عبارة الاسترجاع هي مفتاح عنوان تعريفك - يمكنك استخدامها لاسترجاع عنوان تعريفك اذا فقدت الوصول لجهازك. قم بحفظها في مكان امن و لا تعطها الى اي أحد.</string>
<string name="activity_seed_reveal_button_title">انقر مطولاً للكشف</string>
<string name="view_seed_reminder_title">انت على وشك الإنتهاء! ٨٠٪</string>
<string name="view_seed_reminder_subtitle_1">أمّن حسابك بحفظ كلمات إسترجاع الحساب</string>
<string name="view_seed_reminder_subtitle_2">انقر بإستمرار على الكلمات المغطاة للكشف عن كلمات إسترداد حسابك، ثم قم بتخزينها بأمان للحفاظ على معرّف الجلسة الخاص بك.</string>
<string name="view_seed_reminder_subtitle_3">تأكد من الإحتفاظ بكلمات الإسترجاع الخاصة بك في مكان آمن</string>
@ -652,7 +647,6 @@
<string name="activity_settings_devices_button_title">الأجهزة</string>
<string name="activity_settings_invite_button_title">أُدع صديق</string>
<string name="activity_settings_faq_button_title">الأسئلة الأكثر طرحاً</string>
<string name="activity_settings_recovery_phrase_button_title">عبارة الإسترداد</string>
<string name="activity_settings_clear_all_data_button_title">مسح البيانات</string>
<string name="activity_settings_clear_all_data_and_network_button_title">مسح البيانات بما في ذلك الشبكة</string>
<string name="activity_settings_help_translate_session">ساعدنا في ترجمة سيشن</string>
@ -665,8 +659,6 @@
<string name="preferences_notifications_strategy_category_fast_mode_summary">سوف يتم تنبيهك بالرسائل الجديدة بشكل موثوق و فوري بإستخدام خوادم غوغل.</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">غَير الاسم</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">ألغي ربط الجهاز</string>
<string name="dialog_seed_title">عبارة الاسترجاع الخاصة بك</string>
<string name="dialog_seed_explanation">هذه هي عبارة الاِسترجاع, يمكن بواسطتها اِسترجاع عنوان التعريف أو الاِنتقال اِلى جهاز جديد.</string>
<string name="dialog_clear_all_data_title">اِمسح جميع البيانات</string>
<string name="dialog_clear_all_data_explanation">سيؤدي هذا إلى حذف رسائلك, محادثاتك و متصليك نهائيا.</string>
<string name="dialog_clear_all_data_network_explanation">هل تريد مسح من هذا الجهاز فقط، أو حذف حسابك كليا ؟</string>

View File

@ -539,8 +539,8 @@
<string name="view_fake_chat_bubble_3">Yəni, şəxsi məlumatlarımı və ya danışıq meta verilənlərimi yığmır? Necə işləyir?</string>
<string name="view_fake_chat_bubble_4">Qabaqcıl anonim yönləndirmə və bir ucdan digərinə qədər şifrələmə texnologiyalarının kombinasiyasını istifadə edir.</string>
<string name="view_fake_chat_bubble_5">Dostlar, dostlarının güvənliyi qorunmayan messencerlərdən istifadə etməsinə icazə verməz. Xoşdur, buyurun.</string>
<string name="activity_register_title">Session kimliyinizə salam deyin</string>
<string name="activity_register_explanation">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.</string>
<string name="activity_restore_title">Hesabınızı bərpa edin</string>
<string name="activity_restore_explanation">Hesabınızı bərpa etmək üçün qeydiyyatdan keçərkən sizə verliən bərpa paroluunu daxil edin.</string>
<string name="activity_restore_seed_edit_text_hint">Bərpa parolunu daxil edin</string>
@ -557,11 +557,6 @@
<string name="activity_home_leaving_group_failed_message">"Qrupu tərk etmək alınmadı"</string>
<string name="activity_home_delete_conversation_dialog_message">Bu danışığı silmək istədiyinizə əminsiniz?</string>
<string name="activity_home_conversation_deleted_message">Danışıq silindi</string>
<string name="activity_seed_title">Bərpa parolunuz</string>
<string name="activity_seed_title_2">Bərpa parolunuzla tanış olun</string>
<string name="activity_seed_explanation">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.</string>
<string name="activity_seed_reveal_button_title">Aşkarlamaq üçün basılı saxlayın</string>
<string name="view_seed_reminder_title">Demək olar ki, bitdi! 80%</string>
<string name="view_seed_reminder_subtitle_1">Bərpa parolunuzu bir yerdə saxlayaraq hesabınızı qoruyun</string>
<string name="view_seed_reminder_subtitle_2">Bə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.</string>
<string name="view_seed_reminder_subtitle_3">Bərpa parolunuzu etibarlı bir yerdə saxladığınıza əmin olun</string>
@ -606,7 +601,6 @@
<string name="activity_settings_devices_button_title">Cihazlar</string>
<string name="activity_settings_invite_button_title">Dostu dəvət edin</string>
<string name="activity_settings_faq_button_title">TSS</string>
<string name="activity_settings_recovery_phrase_button_title">Bərpa parolu</string>
<string name="activity_settings_clear_all_data_button_title">Verilənləri təmizlə</string>
<string name="activity_settings_clear_all_data_and_network_button_title">Şəbəkə daxil olmaqla verilənləri təmizlə</string>
<string name="activity_settings_help_translate_session">Session-un tərcüməsinə kömək et</string>
@ -619,8 +613,6 @@
<string name="preferences_notifications_strategy_category_fast_mode_summary">Google-un bildiriş serverlərini istifadə edərək yeni mesajlardan dərhal və etibarlı şəkildə xəbərdar olacaqsınız.</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Adı dəyişdir</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Cihazın əlaqəsini kəs</string>
<string name="dialog_seed_title">Bərpa parolunuz</string>
<string name="dialog_seed_explanation">Bu, bərpa parolunuzdur. Bununla, Session kimliyinizi bərpa edə və ya yeni bir cihaza daşıya bilərsiniz.</string>
<string name="dialog_clear_all_data_title">Bütün verilənləri təmizlə</string>
<string name="dialog_clear_all_data_explanation">Bu, bütün mesajlarınızı, seanslarınızı və əlaqələrinizi birdəfəlik siləcək.</string>
<string name="dialog_clear_all_data_network_explanation">Yalnız bu cihazı silmək istəyirsiniz, yoxsa hesabınızın tamamını silmək istəyirsiniz?</string>

View File

@ -539,8 +539,6 @@
<string name="view_fake_chat_bubble_3">Yəni, şəxsi məlumatlarımı və ya danışıq meta verilənlərimi yığmır? Necə işləyir?</string>
<string name="view_fake_chat_bubble_4">Qabaqcıl anonim yönləndirmə və bir ucdan digərinə qədər şifrələmə texnologiyalarının kombinasiyasını istifadə edir.</string>
<string name="view_fake_chat_bubble_5">Dostlar, dostlarının güvənliyi qorunmayan messencerlərdən istifadə etməsinə icazə verməz. Xoşdur, buyurun.</string>
<string name="activity_register_title">Session kimliyinizə salam deyin</string>
<string name="activity_register_explanation">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.</string>
<string name="activity_restore_title">Hesabınızı bərpa edin</string>
<string name="activity_restore_explanation">Hesabınızı bərpa etmək üçün qeydiyyatdan keçərkən sizə verliən bərpa paroluunu daxil edin.</string>
<string name="activity_restore_seed_edit_text_hint">Bərpa parolunu daxil edin</string>
@ -557,11 +555,6 @@
<string name="activity_home_leaving_group_failed_message">"Qrupu tərk etmək alınmadı"</string>
<string name="activity_home_delete_conversation_dialog_message">Bu danışığı silmək istədiyinizə əminsiniz?</string>
<string name="activity_home_conversation_deleted_message">Danışıq silindi</string>
<string name="activity_seed_title">Bərpa parolunuz</string>
<string name="activity_seed_title_2">Bərpa parolunuzla tanış olun</string>
<string name="activity_seed_explanation">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.</string>
<string name="activity_seed_reveal_button_title">Aşkarlamaq üçün basılı saxlayın</string>
<string name="view_seed_reminder_title">Demək olar ki, bitdi! 80%</string>
<string name="view_seed_reminder_subtitle_1">Bərpa parolunuzu bir yerdə saxlayaraq hesabınızı qoruyun</string>
<string name="view_seed_reminder_subtitle_2">Bə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.</string>
<string name="view_seed_reminder_subtitle_3">Bərpa parolunuzu etibarlı bir yerdə saxladığınıza əmin olun</string>
@ -606,7 +599,6 @@
<string name="activity_settings_devices_button_title">Cihazlar</string>
<string name="activity_settings_invite_button_title">Dostu dəvət edin</string>
<string name="activity_settings_faq_button_title">TSS</string>
<string name="activity_settings_recovery_phrase_button_title">Bərpa parolu</string>
<string name="activity_settings_clear_all_data_button_title">Verilənləri təmizlə</string>
<string name="activity_settings_clear_all_data_and_network_button_title">Şəbəkə daxil olmaqla verilənləri təmizlə</string>
<string name="activity_settings_help_translate_session">Session-un tərcüməsinə kömək et</string>
@ -619,8 +611,6 @@
<string name="preferences_notifications_strategy_category_fast_mode_summary">Google-un bildiriş serverlərini istifadə edərək yeni mesajlardan dərhal və etibarlı şəkildə xəbərdar olacaqsınız.</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Adı dəyişdir</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Cihazın əlaqəsini kəs</string>
<string name="dialog_seed_title">Bərpa parolunuz</string>
<string name="dialog_seed_explanation">Bu, bərpa parolunuzdur. Bununla, Session kimliyinizi bərpa edə və ya yeni bir cihaza daşıya bilərsiniz.</string>
<string name="dialog_clear_all_data_title">Bütün verilənləri təmizlə</string>
<string name="dialog_clear_all_data_explanation">Bu, bütün mesajlarınızı, seanslarınızı və əlaqələrinizi birdəfəlik siləcək.</string>
<string name="dialog_clear_all_data_network_explanation">Yalnız bu cihazı silmək istəyirsiniz, yoxsa hesabınızın tamamını silmək istəyirsiniz?</string>

View File

@ -437,8 +437,8 @@ memproses pertukaran kunci korupsi.</string>
<string name="view_fake_chat_bubble_3">Bagaimana dengan pengumpulan informasi personal atau metadata percakapan? Bagaimana cara kerjanya?</string>
<string name="view_fake_chat_bubble_4">Menggunakan kombinasi routing yang anonim canggih dan teknologi enkripsi ujung-ke-ujung (end-to-end encryption)</string>
<string name="view_fake_chat_bubble_5">Rekan yang baik tak membiarkan rekannya menggunakan aplikasi bertukar pesan yang tak aman. Terima kasih kembali.</string>
<string name="activity_register_title">Ucapkan halo pada Session ID anda</string>
<string name="activity_register_explanation">Session ID adalah alamat unik yang bisa digunakan untuk mengontak anda. Tanpa koneksi dengan identitas asli, Session ID anda didesain bersifat anonim dan rahasia.</string>
<string name="activity_restore_title">Kembalikan akun</string>
<string name="activity_restore_explanation">Masukkan kata pemulihan yang diberikan saat anda mencoba masuk ke akun</string>
<string name="activity_restore_seed_edit_text_hint">masukan kata pemulihan</string>
@ -455,10 +455,6 @@ memproses pertukaran kunci korupsi.</string>
<string name="activity_home_leaving_group_failed_message">"Tak bisa meninggalkan grup"</string>
<string name="activity_home_delete_conversation_dialog_message">Apakah anda yakin ingin menghapus percakapan ini?</string>
<string name="activity_home_conversation_deleted_message">Percakapan terhapus</string>
<string name="activity_seed_title">Kata pemulihan anda</string>
<string name="activity_seed_title_2">Inilah kata pemulihan anda</string>
<string name="activity_seed_explanation">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</string>
<string name="activity_seed_reveal_button_title">Tekan untuk melihat</string>
<string name="view_seed_reminder_subtitle_1">Amankan akun anda dengan menyimpan kata pemulihan</string>
<string name="view_seed_reminder_subtitle_2">Ketuk dan tekan kata yang disensor untuk mengetahui kata pemulihan anda, lalu simpan baik-baik untuk mengamnkan Session ID anda</string>
<string name="view_seed_reminder_subtitle_3">Pastikan untuk menyimpan kata pemulihan di tempat yang aman</string>
@ -496,7 +492,6 @@ memproses pertukaran kunci korupsi.</string>
<string name="activity_settings_notifications_button_title">Notifikasi</string>
<string name="activity_settings_chats_button_title">Percakapan</string>
<string name="activity_settings_devices_button_title">Perangkat</string>
<string name="activity_settings_recovery_phrase_button_title">Kata pemulihan</string>
<string name="activity_settings_clear_all_data_button_title">Hapus data</string>
<string name="activity_notification_settings_title">Notifikasi</string>
<string name="activity_notification_settings_style_section_title">Gaya notifikasi</string>
@ -505,8 +500,6 @@ memproses pertukaran kunci korupsi.</string>
<string name="preferences_notifications_strategy_category_title">Strategi notofikasi</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Ubah nama</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Putuskan koneksi dengan perangkat</string>
<string name="dialog_seed_title">Kata pemulihan anda</string>
<string name="dialog_seed_explanation">Ini adalah kata pemulihan anda. Gunakan untuk mengembalikan atau memindahkan Session ID anda ke perangkat lain</string>
<string name="dialog_clear_all_data_title">Hapus semua data</string>
<string name="dialog_clear_all_data_explanation">Pesan, Session, dan kontak anda akan dihapus secara permanen</string>
<string name="activity_qr_code_title">Kode QR</string>

View File

@ -437,8 +437,8 @@ memproses pertukaran kunci korupsi.</string>
<string name="view_fake_chat_bubble_3">Bagaimana dengan pengumpulan informasi personal atau metadata percakapan? Bagaimana cara kerjanya?</string>
<string name="view_fake_chat_bubble_4">Menggunakan kombinasi routing yang anonim canggih dan teknologi enkripsi ujung-ke-ujung (end-to-end encryption)</string>
<string name="view_fake_chat_bubble_5">Rekan yang baik tak membiarkan rekannya menggunakan aplikasi bertukar pesan yang tak aman. Terima kasih kembali.</string>
<string name="activity_register_title">Ucapkan halo pada Session ID anda</string>
<string name="activity_register_explanation">Session ID adalah alamat unik yang bisa digunakan untuk mengontak anda. Tanpa koneksi dengan identitas asli, Session ID anda didesain bersifat anonim dan rahasia.</string>
<string name="activity_restore_title">Kembalikan akun</string>
<string name="activity_restore_explanation">Masukkan kata pemulihan yang diberikan saat anda mencoba masuk ke akun</string>
<string name="activity_restore_seed_edit_text_hint">masukan kata pemulihan</string>
@ -455,10 +455,6 @@ memproses pertukaran kunci korupsi.</string>
<string name="activity_home_leaving_group_failed_message">"Tak bisa meninggalkan grup"</string>
<string name="activity_home_delete_conversation_dialog_message">Apakah anda yakin ingin menghapus percakapan ini?</string>
<string name="activity_home_conversation_deleted_message">Percakapan terhapus</string>
<string name="activity_seed_title">Kata pemulihan anda</string>
<string name="activity_seed_title_2">Inilah kata pemulihan anda</string>
<string name="activity_seed_explanation">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</string>
<string name="activity_seed_reveal_button_title">Tekan untuk melihat</string>
<string name="view_seed_reminder_subtitle_1">Amankan akun anda dengan menyimpan kata pemulihan</string>
<string name="view_seed_reminder_subtitle_2">Ketuk dan tekan kata yang disensor untuk mengetahui kata pemulihan anda, lalu simpan baik-baik untuk mengamnkan Session ID anda</string>
<string name="view_seed_reminder_subtitle_3">Pastikan untuk menyimpan kata pemulihan di tempat yang aman</string>
@ -496,7 +492,6 @@ memproses pertukaran kunci korupsi.</string>
<string name="activity_settings_notifications_button_title">Notifikasi</string>
<string name="activity_settings_chats_button_title">Percakapan</string>
<string name="activity_settings_devices_button_title">Perangkat</string>
<string name="activity_settings_recovery_phrase_button_title">Kata pemulihan</string>
<string name="activity_settings_clear_all_data_button_title">Hapus data</string>
<string name="activity_notification_settings_title">Notifikasi</string>
<string name="activity_notification_settings_style_section_title">Gaya notifikasi</string>
@ -505,8 +500,6 @@ memproses pertukaran kunci korupsi.</string>
<string name="preferences_notifications_strategy_category_title">Strategi notofikasi</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Ubah nama</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Putuskan koneksi dengan perangkat</string>
<string name="dialog_seed_title">Kata pemulihan anda</string>
<string name="dialog_seed_explanation">Ini adalah kata pemulihan anda. Gunakan untuk mengembalikan atau memindahkan Session ID anda ke perangkat lain</string>
<string name="dialog_clear_all_data_title">Hapus semua data</string>
<string name="dialog_clear_all_data_explanation">Pesan, Session, dan kontak anda akan dihapus secara permanen</string>
<string name="activity_qr_code_title">Kode QR</string>

View File

@ -531,8 +531,8 @@ d\'intercanvi de claus!</string>
<string name="view_fake_chat_bubble_3">Per tant, no agafa les meves dades personals o les metadades de les meves converses? Com funciona?</string>
<string name="view_fake_chat_bubble_4">Fent servir una combinació de tecnologies d\'encaminament anònim avançat i un xifratge d\'extrem a extrem.</string>
<string name="view_fake_chat_bubble_5">Amics no deixis que els amics facin servir missatgeries compromeses. Sigueu benvinguts.</string>
<string name="activity_register_title">Digues hola al teu ID de Session</string>
<string name="activity_register_explanation">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.</string>
<string name="activity_restore_title">Restableix el teu compte</string>
<string name="activity_restore_explanation">Introdueix la frase de recuperació que se\'t va proporcionar quan et vas registrar per a restaurar el compte.</string>
<string name="activity_restore_seed_edit_text_hint">Introdueix la frase de recuperació</string>
@ -549,11 +549,6 @@ d\'intercanvi de claus!</string>
<string name="activity_home_leaving_group_failed_message">"No s'ha pogut marxar del grup"</string>
<string name="activity_home_delete_conversation_dialog_message">Estàs segur que vols esborrar aquesta conversa?</string>
<string name="activity_home_conversation_deleted_message">S\'ha suprimit la conversa</string>
<string name="activity_seed_title">La teva frase de recuperació</string>
<string name="activity_seed_title_2">Coneix la teva frase de recuperació</string>
<string name="activity_seed_explanation">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ú.</string>
<string name="activity_seed_reveal_button_title">Mantingues premut per a revelar</string>
<string name="view_seed_reminder_title">Gairebé has acabat! 80%</string>
<string name="view_seed_reminder_subtitle_1">Protegeix el teu compte desant la frase de recuperació</string>
<string name="view_seed_reminder_subtitle_2">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.</string>
<string name="view_seed_reminder_subtitle_3">Assegura\'t d\'emmagatzemar la frase de recuperació en un lloc segur</string>
@ -593,7 +588,6 @@ d\'intercanvi de claus!</string>
<string name="activity_settings_notifications_button_title">Notificacions</string>
<string name="activity_settings_chats_button_title">Xats</string>
<string name="activity_settings_devices_button_title">Dispositius</string>
<string name="activity_settings_recovery_phrase_button_title">Frase de recuperació</string>
<string name="activity_settings_clear_all_data_button_title">Neteja les dades</string>
<string name="activity_settings_help_translate_session">Ajuda\'ns a traduir Session</string>
<string name="activity_notification_settings_title">Notificacions</string>
@ -603,8 +597,6 @@ d\'intercanvi de claus!</string>
<string name="preferences_notifications_strategy_category_title">Estratègia de les notificacions</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Canvia el nom</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Desenllaça el dispositiu</string>
<string name="dialog_seed_title">La teva frase de recuperació</string>
<string name="dialog_seed_explanation">Aquesta és la teva frase de recuperació. Pots restaurar-ne o migrar-ne el teu ID de Session cap a un nou dispositiu.</string>
<string name="dialog_clear_all_data_title">Esborra totes les dades</string>
<string name="dialog_clear_all_data_explanation">Això esborrarà tots els missatges, sessions i contactes permanentment.</string>
<string name="activity_qr_code_title">Codi QR</string>

View File

@ -531,8 +531,8 @@ d\'intercanvi de claus!</string>
<string name="view_fake_chat_bubble_3">Per tant, no agafa les meves dades personals o les metadades de les meves converses? Com funciona?</string>
<string name="view_fake_chat_bubble_4">Fent servir una combinació de tecnologies d\'encaminament anònim avançat i un xifratge d\'extrem a extrem.</string>
<string name="view_fake_chat_bubble_5">Amics no deixis que els amics facin servir missatgeries compromeses. Sigueu benvinguts.</string>
<string name="activity_register_title">Digues hola al teu ID de Session</string>
<string name="activity_register_explanation">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.</string>
<string name="activity_restore_title">Restableix el teu compte</string>
<string name="activity_restore_explanation">Introdueix la frase de recuperació que se\'t va proporcionar quan et vas registrar per a restaurar el compte.</string>
<string name="activity_restore_seed_edit_text_hint">Introdueix la frase de recuperació</string>
@ -549,11 +549,6 @@ d\'intercanvi de claus!</string>
<string name="activity_home_leaving_group_failed_message">"No s'ha pogut marxar del grup"</string>
<string name="activity_home_delete_conversation_dialog_message">Estàs segur que vols esborrar aquesta conversa?</string>
<string name="activity_home_conversation_deleted_message">S\'ha suprimit la conversa</string>
<string name="activity_seed_title">La teva frase de recuperació</string>
<string name="activity_seed_title_2">Coneix la teva frase de recuperació</string>
<string name="activity_seed_explanation">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ú.</string>
<string name="activity_seed_reveal_button_title">Mantingues premut per a revelar</string>
<string name="view_seed_reminder_title">Gairebé has acabat! 80%</string>
<string name="view_seed_reminder_subtitle_1">Protegeix el teu compte desant la frase de recuperació</string>
<string name="view_seed_reminder_subtitle_2">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.</string>
<string name="view_seed_reminder_subtitle_3">Assegura\'t d\'emmagatzemar la frase de recuperació en un lloc segur</string>
@ -593,7 +588,6 @@ d\'intercanvi de claus!</string>
<string name="activity_settings_notifications_button_title">Notificacions</string>
<string name="activity_settings_chats_button_title">Xats</string>
<string name="activity_settings_devices_button_title">Dispositius</string>
<string name="activity_settings_recovery_phrase_button_title">Frase de recuperació</string>
<string name="activity_settings_clear_all_data_button_title">Neteja les dades</string>
<string name="activity_settings_help_translate_session">Ajuda\'ns a traduir Session</string>
<string name="activity_notification_settings_title">Notificacions</string>
@ -603,8 +597,6 @@ d\'intercanvi de claus!</string>
<string name="preferences_notifications_strategy_category_title">Estratègia de les notificacions</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Canvia el nom</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Desenllaça el dispositiu</string>
<string name="dialog_seed_title">La teva frase de recuperació</string>
<string name="dialog_seed_explanation">Aquesta és la teva frase de recuperació. Pots restaurar-ne o migrar-ne el teu ID de Session cap a un nou dispositiu.</string>
<string name="dialog_clear_all_data_title">Esborra totes les dades</string>
<string name="dialog_clear_all_data_explanation">Això esborrarà tots els missatges, sessions i contactes permanentment.</string>
<string name="activity_qr_code_title">Codi QR</string>

View File

@ -561,8 +561,8 @@
<string name="view_fake_chat_bubble_3">Takže neshromažďuje mé osobní údaje ani metadata mých konverzací? Jak to funguje?</string>
<string name="view_fake_chat_bubble_4">Použitím kombinace pokročilých anonymních směrovacích a end-to-end šifrovacích technologií.</string>
<string name="view_fake_chat_bubble_5">Přátelé nenechávají přátelé používat kompromitované aplikace. Není zač.</string>
<string name="activity_register_title">Přivítejte své nové Session ID</string>
<string name="activity_register_explanation">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í.</string>
<string name="activity_restore_title">Obnovit účet</string>
<string name="activity_restore_explanation">Zadejte frázi pro obnovení, která vám byla vygenerována během registrace účtu.</string>
<string name="activity_restore_seed_edit_text_hint">Zadejte frázi pro obnovení</string>
@ -579,11 +579,6 @@
<string name="activity_home_leaving_group_failed_message">"Skupinu se nepodařilo opustit"</string>
<string name="activity_home_delete_conversation_dialog_message">Opravdu chcete smazat tuto konverzaci?</string>
<string name="activity_home_conversation_deleted_message">Konverzace byla smazána</string>
<string name="activity_seed_title">Vaše fráze pro obnovení</string>
<string name="activity_seed_title_2">Zadejte frázi pro obnovení</string>
<string name="activity_seed_explanation">Ahoj</string>
<string name="activity_seed_reveal_button_title">Podrž pro zobrazení</string>
<string name="view_seed_reminder_title">Jste skoro u konce! 80 %</string>
<string name="view_seed_reminder_subtitle_1">Zabezpečte svůj účet uložením Vašich klíčových slov</string>
<string name="view_seed_reminder_subtitle_2">Pro 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.</string>
<string name="view_seed_reminder_subtitle_3">Uchovejte svou frázi pro obnovení na bezpečném místě</string>
@ -628,7 +623,6 @@
<string name="activity_settings_devices_button_title">Zařízení</string>
<string name="activity_settings_invite_button_title">Pozvat přítele</string>
<string name="activity_settings_faq_button_title">Často kladené dotazy</string>
<string name="activity_settings_recovery_phrase_button_title">Fráze pro obnovení</string>
<string name="activity_settings_clear_all_data_button_title">Vymazat data</string>
<string name="activity_settings_clear_all_data_and_network_button_title">Smazat data včetně sítě</string>
<string name="activity_settings_help_translate_session">Pomozte nám přeložit Session</string>
@ -641,8 +635,6 @@
<string name="preferences_notifications_strategy_category_fast_mode_summary">Budete spolehlivě a okamžitě informováni o nových zprávách pomocí oznamovacích serverů Google.</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Změnit jméno</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Odpojit zařízení</string>
<string name="dialog_seed_title">Vaše fráze pro obnovení</string>
<string name="dialog_seed_explanation">Toto je vaše fráze pro obnovení. S její pomocí můžete obnovit nebo přesunout své Session ID na nové zařízení.</string>
<string name="dialog_clear_all_data_title">Vymazat všechna data</string>
<string name="dialog_clear_all_data_explanation">Tímto trvale odstraníte vaše zprávy, relace a kontakty.</string>
<string name="dialog_clear_all_data_network_explanation">Chcete vymazat data pouze na tomto zařízení, nebo odstranit celý účet?</string>

View File

@ -561,8 +561,8 @@
<string name="view_fake_chat_bubble_3">Takže neshromažďuje mé osobní údaje ani metadata mých konverzací? Jak to funguje?</string>
<string name="view_fake_chat_bubble_4">Použitím kombinace pokročilých anonymních směrovacích a end-to-end šifrovacích technologií.</string>
<string name="view_fake_chat_bubble_5">Přátelé nenechávají přátelé používat kompromitované aplikace. Není zač.</string>
<string name="activity_register_title">Přivítejte své nové Session ID</string>
<string name="activity_register_explanation">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í.</string>
<string name="activity_restore_title">Obnovit účet</string>
<string name="activity_restore_explanation">Zadejte frázi pro obnovení, která vám byla vygenerována během registrace účtu.</string>
<string name="activity_restore_seed_edit_text_hint">Zadejte frázi pro obnovení</string>
@ -579,11 +579,6 @@
<string name="activity_home_leaving_group_failed_message">"Skupinu se nepodařilo opustit"</string>
<string name="activity_home_delete_conversation_dialog_message">Opravdu chcete smazat tuto konverzaci?</string>
<string name="activity_home_conversation_deleted_message">Konverzace byla smazána</string>
<string name="activity_seed_title">Vaše fráze pro obnovení</string>
<string name="activity_seed_title_2">Zadejte frázi pro obnovení</string>
<string name="activity_seed_explanation">Ahoj</string>
<string name="activity_seed_reveal_button_title">Podrž pro zobrazení</string>
<string name="view_seed_reminder_title">Jste skoro u konce! 80 %</string>
<string name="view_seed_reminder_subtitle_1">Zabezpečte svůj účet uložením Vašich klíčových slov</string>
<string name="view_seed_reminder_subtitle_2">Pro 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.</string>
<string name="view_seed_reminder_subtitle_3">Uchovejte svou frázi pro obnovení na bezpečném místě</string>
@ -628,7 +623,6 @@
<string name="activity_settings_devices_button_title">Zařízení</string>
<string name="activity_settings_invite_button_title">Pozvat přítele</string>
<string name="activity_settings_faq_button_title">Často kladené dotazy</string>
<string name="activity_settings_recovery_phrase_button_title">Fráze pro obnovení</string>
<string name="activity_settings_clear_all_data_button_title">Vymazat data</string>
<string name="activity_settings_clear_all_data_and_network_button_title">Smazat data včetně sítě</string>
<string name="activity_settings_help_translate_session">Pomozte nám přeložit Session</string>
@ -641,8 +635,6 @@
<string name="preferences_notifications_strategy_category_fast_mode_summary">Budete spolehlivě a okamžitě informováni o nových zprávách pomocí oznamovacích serverů Google.</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Změnit jméno</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Odpojit zařízení</string>
<string name="dialog_seed_title">Vaše fráze pro obnovení</string>
<string name="dialog_seed_explanation">Toto je vaše fráze pro obnovení. S její pomocí můžete obnovit nebo přesunout své Session ID na nové zařízení.</string>
<string name="dialog_clear_all_data_title">Vymazat všechna data</string>
<string name="dialog_clear_all_data_explanation">Tímto trvale odstraníte vaše zprávy, relace a kontakty.</string>
<string name="dialog_clear_all_data_network_explanation">Chcete vymazat data pouze na tomto zařízení, nebo odstranit celý účet?</string>

View File

@ -537,8 +537,8 @@ udveksel besked!</string>
<string name="view_fake_chat_bubble_3">Så den indsamler ikke mine personlige oplysninger eller min samtale metadata? Hvordan virker det?</string>
<string name="view_fake_chat_bubble_4">Ved hjælp af en kombination af avanceret anonym routing og end-to-end krypteringsteknologier.</string>
<string name="view_fake_chat_bubble_5">Venner lader ikke venner bruge usikre besked tjenester. Du er velkommen.</string>
<string name="activity_register_title">Sig hej til dit Session ID</string>
<string name="activity_register_explanation">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.</string>
<string name="activity_restore_title">Gendan din konto</string>
<string name="activity_restore_explanation">Angiv den genoprettelsessætning, du fik, da du tilmeldte dig, for at kunne gendanne din konto.</string>
<string name="activity_restore_seed_edit_text_hint">Angiv din genoprettelsessætning</string>
@ -554,11 +554,6 @@ udveksel besked!</string>
<string name="activity_home_leaving_group_failed_message">"Kunne ikke forlade gruppen"</string>
<string name="activity_home_delete_conversation_dialog_message">Er du sikker på, at du vil slette denne samtale?</string>
<string name="activity_home_conversation_deleted_message">Samtale slettet</string>
<string name="activity_seed_title">Din gendannelsessætning</string>
<string name="activity_seed_title_2">Mød din gendannelsessætning</string>
<string name="activity_seed_explanation">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.</string>
<string name="activity_seed_reveal_button_title">Hold nede for at se</string>
<string name="view_seed_reminder_title">Du er næsten færdig! 80%</string>
<string name="view_seed_reminder_subtitle_1">Sikre din konto ved at gemme din gendannelsessætning</string>
<string name="view_seed_reminder_subtitle_2">Tryk 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.</string>
<string name="view_seed_reminder_subtitle_3">Sørg for at gemme din gendannelsessætning et sikkert sted</string>
@ -588,7 +583,6 @@ udveksel besked!</string>
<string name="activity_settings_devices_button_title">Enheder</string>
<string name="activity_settings_invite_button_title">Inviter en ven</string>
<string name="activity_settings_faq_button_title">Ofte stillede spørgsmål</string>
<string name="activity_settings_recovery_phrase_button_title">Gendannelsesssætning</string>
<string name="activity_settings_clear_all_data_button_title">Ryd data</string>
<string name="activity_settings_clear_all_data_and_network_button_title">Ryd Data Inklusiv Netværk</string>
<string name="activity_settings_help_translate_session">Hjælp os med at oversætte Session</string>

View File

@ -537,8 +537,8 @@ udveksel besked!</string>
<string name="view_fake_chat_bubble_3">Så den indsamler ikke mine personlige oplysninger eller min samtale metadata? Hvordan virker det?</string>
<string name="view_fake_chat_bubble_4">Ved hjælp af en kombination af avanceret anonym routing og end-to-end krypteringsteknologier.</string>
<string name="view_fake_chat_bubble_5">Venner lader ikke venner bruge usikre besked tjenester. Du er velkommen.</string>
<string name="activity_register_title">Sig hej til dit Session ID</string>
<string name="activity_register_explanation">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.</string>
<string name="activity_restore_title">Gendan din konto</string>
<string name="activity_restore_explanation">Angiv den genoprettelsessætning, du fik, da du tilmeldte dig, for at kunne gendanne din konto.</string>
<string name="activity_restore_seed_edit_text_hint">Angiv din genoprettelsessætning</string>
@ -554,11 +554,6 @@ udveksel besked!</string>
<string name="activity_home_leaving_group_failed_message">"Kunne ikke forlade gruppen"</string>
<string name="activity_home_delete_conversation_dialog_message">Er du sikker på, at du vil slette denne samtale?</string>
<string name="activity_home_conversation_deleted_message">Samtale slettet</string>
<string name="activity_seed_title">Din gendannelsessætning</string>
<string name="activity_seed_title_2">Mød din gendannelsessætning</string>
<string name="activity_seed_explanation">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.</string>
<string name="activity_seed_reveal_button_title">Hold nede for at se</string>
<string name="view_seed_reminder_title">Du er næsten færdig! 80%</string>
<string name="view_seed_reminder_subtitle_1">Sikre din konto ved at gemme din gendannelsessætning</string>
<string name="view_seed_reminder_subtitle_2">Tryk 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.</string>
<string name="view_seed_reminder_subtitle_3">Sørg for at gemme din gendannelsessætning et sikkert sted</string>
@ -588,7 +583,6 @@ udveksel besked!</string>
<string name="activity_settings_devices_button_title">Enheder</string>
<string name="activity_settings_invite_button_title">Inviter en ven</string>
<string name="activity_settings_faq_button_title">Ofte stillede spørgsmål</string>
<string name="activity_settings_recovery_phrase_button_title">Gendannelsesssætning</string>
<string name="activity_settings_clear_all_data_button_title">Ryd data</string>
<string name="activity_settings_clear_all_data_and_network_button_title">Ryd Data Inklusiv Netværk</string>
<string name="activity_settings_help_translate_session">Hjælp os med at oversætte Session</string>

View File

@ -537,8 +537,8 @@
<string name="view_fake_chat_bubble_3">Es werden also weder meine persönlichen Daten noch die Metadaten meiner Konversation erfasst? Wie funktioniert das?</string>
<string name="view_fake_chat_bubble_4">Mit einer Kombination fortschrittlicher anonyme Routing- und End-to-End-Verschlüsselungstechnologien.</string>
<string name="view_fake_chat_bubble_5">Freunde lassen Freunde keine kompromittierten Messenger verwenden. Herzlich Willkommen.</string>
<string name="activity_register_title">Das ist Ihre Session ID.</string>
<string name="activity_register_explanation">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.</string>
<string name="activity_restore_title">Ihr Konto wiederherstellen</string>
<string name="activity_restore_explanation">Geben Sie den Wiederherstellungssatz ein, den Sie bei der Anmeldung zur Wiederherstellung Ihres Kontos erhalten haben.</string>
<string name="activity_restore_seed_edit_text_hint">Ihr Wiederherstellungssatz</string>
@ -555,11 +555,6 @@
<string name="activity_home_leaving_group_failed_message">"Gruppe konnte nicht verlassen werden."</string>
<string name="activity_home_delete_conversation_dialog_message">Möchten Sie diese Unterhaltung wirklich löschen?</string>
<string name="activity_home_conversation_deleted_message">Die Unterhaltung wurde gelöscht.</string>
<string name="activity_seed_title">Ihr Wiederherstellungssatz</string>
<string name="activity_seed_title_2">Das ist Ihr Wiederherstellungssatz.</string>
<string name="activity_seed_explanation">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.</string>
<string name="activity_seed_reveal_button_title">Zur Anzeige gedrückt halten</string>
<string name="view_seed_reminder_title">Du bist fast fertgi! 80%</string>
<string name="view_seed_reminder_subtitle_1">Sichern Sie Ihr Konto, indem Sie Ihren Wiederherstellungssatz speichern</string>
<string name="view_seed_reminder_subtitle_2">Tippen und halten Sie die verborgenen Wörter, um Ihren Wiederherstellungssatz anzuzeigen, und speichern Sie ihn dann sicher, um Ihre Session ID zu sichern.</string>
<string name="view_seed_reminder_subtitle_3">Bewahren Sie Ihren Wiederherstellungssatz an einem sicheren Ort auf.</string>
@ -604,7 +599,6 @@
<string name="activity_settings_devices_button_title">Geräte</string>
<string name="activity_settings_invite_button_title">Einen Freund einladen</string>
<string name="activity_settings_faq_button_title">Häufig gestellte Fragen</string>
<string name="activity_settings_recovery_phrase_button_title">Wiederherstellungssatz</string>
<string name="activity_settings_clear_all_data_button_title">Daten löschen</string>
<string name="activity_settings_clear_all_data_and_network_button_title">Daten löschen, einschließlich Netzwerk</string>
<string name="activity_settings_help_translate_session">Hilf uns, Session zu übersetzen</string>
@ -617,8 +611,6 @@
<string name="preferences_notifications_strategy_category_fast_mode_summary">Über neue Nachrichten wirst du zuverlässig und sofort von Googles Benachrichtigungsservern informiert.</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Namen ändern</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Gerät trennen</string>
<string name="dialog_seed_title">Ihr Wiederherstellungssatz</string>
<string name="dialog_seed_explanation">Das ist Ihr Wiederherstellungssatz. Damit können Sie Ihre Session ID wiederherstellen oder auf ein neues Gerät migrieren.</string>
<string name="dialog_clear_all_data_title">Alle Daten löschen</string>
<string name="dialog_clear_all_data_explanation">Dadurch werden Ihre Nachrichten, Sessions und Kontakte dauerhaft gelöscht.</string>
<string name="dialog_clear_all_data_network_explanation">Möchtest du nur dieses Gerät leeren oder dein gesamtes Konto löschen?</string>

View File

@ -537,8 +537,8 @@
<string name="view_fake_chat_bubble_3">Es werden also weder meine persönlichen Daten noch die Metadaten meiner Konversation erfasst? Wie funktioniert das?</string>
<string name="view_fake_chat_bubble_4">Mit einer Kombination fortschrittlicher anonyme Routing- und End-to-End-Verschlüsselungstechnologien.</string>
<string name="view_fake_chat_bubble_5">Freunde lassen Freunde keine kompromittierten Messenger verwenden. Herzlich Willkommen.</string>
<string name="activity_register_title">Das ist Ihre Session ID.</string>
<string name="activity_register_explanation">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.</string>
<string name="activity_restore_title">Ihr Konto wiederherstellen</string>
<string name="activity_restore_explanation">Geben Sie den Wiederherstellungssatz ein, den Sie bei der Anmeldung zur Wiederherstellung Ihres Kontos erhalten haben.</string>
<string name="activity_restore_seed_edit_text_hint">Ihr Wiederherstellungssatz</string>
@ -555,11 +555,6 @@
<string name="activity_home_leaving_group_failed_message">"Gruppe konnte nicht verlassen werden."</string>
<string name="activity_home_delete_conversation_dialog_message">Möchten Sie diese Unterhaltung wirklich löschen?</string>
<string name="activity_home_conversation_deleted_message">Die Unterhaltung wurde gelöscht.</string>
<string name="activity_seed_title">Ihr Wiederherstellungssatz</string>
<string name="activity_seed_title_2">Das ist Ihr Wiederherstellungssatz.</string>
<string name="activity_seed_explanation">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.</string>
<string name="activity_seed_reveal_button_title">Zur Anzeige gedrückt halten</string>
<string name="view_seed_reminder_title">Du bist fast fertgi! 80%</string>
<string name="view_seed_reminder_subtitle_1">Sichern Sie Ihr Konto, indem Sie Ihren Wiederherstellungssatz speichern</string>
<string name="view_seed_reminder_subtitle_2">Tippen und halten Sie die verborgenen Wörter, um Ihren Wiederherstellungssatz anzuzeigen, und speichern Sie ihn dann sicher, um Ihre Session ID zu sichern.</string>
<string name="view_seed_reminder_subtitle_3">Bewahren Sie Ihren Wiederherstellungssatz an einem sicheren Ort auf.</string>
@ -604,7 +599,6 @@
<string name="activity_settings_devices_button_title">Geräte</string>
<string name="activity_settings_invite_button_title">Einen Freund einladen</string>
<string name="activity_settings_faq_button_title">Häufig gestellte Fragen</string>
<string name="activity_settings_recovery_phrase_button_title">Wiederherstellungssatz</string>
<string name="activity_settings_clear_all_data_button_title">Daten löschen</string>
<string name="activity_settings_clear_all_data_and_network_button_title">Daten löschen, einschließlich Netzwerk</string>
<string name="activity_settings_help_translate_session">Hilf uns, Session zu übersetzen</string>
@ -617,8 +611,6 @@
<string name="preferences_notifications_strategy_category_fast_mode_summary">Über neue Nachrichten wirst du zuverlässig und sofort von Googles Benachrichtigungsservern informiert.</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Namen ändern</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Gerät trennen</string>
<string name="dialog_seed_title">Ihr Wiederherstellungssatz</string>
<string name="dialog_seed_explanation">Das ist Ihr Wiederherstellungssatz. Damit können Sie Ihre Session ID wiederherstellen oder auf ein neues Gerät migrieren.</string>
<string name="dialog_clear_all_data_title">Alle Daten löschen</string>
<string name="dialog_clear_all_data_explanation">Dadurch werden Ihre Nachrichten, Sessions und Kontakte dauerhaft gelöscht.</string>
<string name="dialog_clear_all_data_network_explanation">Möchtest du nur dieses Gerät leeren oder dein gesamtes Konto löschen?</string>

View File

@ -539,8 +539,8 @@
<string name="view_fake_chat_bubble_3">Δηλαδή δεν συλλέγει τα προσωπικά μου στοιχεία ή τα μεταδεδομένα των συνομιλιών μου; Πώς λειτουργεί;</string>
<string name="view_fake_chat_bubble_4">Χρησιμοποιώντας ένα συνδυασμό προηγμένων ανώνυμων τεχνολογιών δρομολόγησης και τεχνολογίας κρυπτογράφησης από άκρο σε άκρο.</string>
<string name="view_fake_chat_bubble_5">Οι φίλοι δεν αφήνουν τους φίλους να χρησιμοποιούν ευάλωτες εφαρμογές μηνυμάτων. Είστε ευπρόσδεκτοι.</string>
<string name="activity_register_title">Πείτε γεια στη Session ταυτότητά σας</string>
<string name="activity_register_explanation">Η Session ταυτότητά σας είναι η μοναδική διεύθυνση που μπορούν να χρησιμοποιήσουν τα άτομα για να επικοινωνήσουν μαζί σας στο Session. Χωρίς σύνδεση με την πραγματική σας ταυτότητα, η Session ταυτότητά σας είναι εντελώς ανώνυμη και ιδιωτική.</string>
<string name="activity_restore_title">Επαναφορά του λογαριασμού σας</string>
<string name="activity_restore_explanation">Εισάγετε τη φράση ανάκτησης που σας δόθηκε κατά την εγγραφή σας για να επαναφέρετε το λογαριασμό σας.</string>
<string name="activity_restore_seed_edit_text_hint">Εισάγετε τη φράση ανάκτησης σας</string>
@ -557,11 +557,6 @@
<string name="activity_home_leaving_group_failed_message">"Αδυναμία αποχώρησης από την ομάδα"</string>
<string name="activity_home_delete_conversation_dialog_message">Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν την συνομιλία;</string>
<string name="activity_home_conversation_deleted_message">Η συνομιλία διαγράφηκε</string>
<string name="activity_seed_title">Φράση ανάκτησης</string>
<string name="activity_seed_title_2">Γνωρίστε τη φράση ανάκτησής σας</string>
<string name="activity_seed_explanation">Η φράση ανάκτησης είναι το κύριο κλειδί στο Session ID σας - μπορείτε να τη χρησιμοποιήσετε για να επαναφέρετε το Session ID σας εάν χάσετε πρόσβαση στη συσκευή σας. Αποθηκεύστε τη φράση ανάκτησης σε ασφαλές μέρος, και μην τη δώσετε σε κανέναν.</string>
<string name="activity_seed_reveal_button_title">Πατήστε για εμφάνιση</string>
<string name="view_seed_reminder_title">Σχεδόν τελειώσατε! 80%</string>
<string name="view_seed_reminder_subtitle_1">Ασφαλίστε το λογαριασμό σας αποθηκεύοντας τη φράση ανάκτησής σας</string>
<string name="view_seed_reminder_subtitle_2">Πατήστε παρατεταμένα τις λέξεις που τροποποιήθηκαν για να αποκαλύψετε τη φράση ανάκτησης και μετά αποθηκεύστε την με ασφάλεια για να εξασφαλίσετε το αναγνωριστικό σας.</string>
<string name="view_seed_reminder_subtitle_3">Φροντίστε να αποθηκεύσετε τη φράση ανάκτησής σας σε ασφαλές μέρος</string>
@ -606,7 +601,6 @@
<string name="activity_settings_devices_button_title">Συσκευές</string>
<string name="activity_settings_invite_button_title">Προσκαλέστε ένα φίλο</string>
<string name="activity_settings_faq_button_title">Συχνές ερωτήσεις</string>
<string name="activity_settings_recovery_phrase_button_title">Φράση Ανάκτησης</string>
<string name="activity_settings_clear_all_data_button_title">Εκκαθάριση Δεδομένων</string>
<string name="activity_settings_clear_all_data_and_network_button_title">Εκκαθάριση Δεδομένων Με Το Δίκτυο</string>
<string name="activity_settings_help_translate_session">Βοηθήστε μας να μεταφράσουμε τo Session</string>
@ -619,8 +613,6 @@
<string name="preferences_notifications_strategy_category_fast_mode_summary">Θα ειδοποιηθείτε για νέα μηνύματα αξιόπιστα και άμεσα χρησιμοποιώντας τους διακομιστές ειδοποιήσεων της Google.</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Αλλαγή ονόματος</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Αποσύνδεση Συσκευής</string>
<string name="dialog_seed_title">Η φράση ανάκτησής σας</string>
<string name="dialog_seed_explanation">Αυτή είναι η φράση ανάκτησης σας. Με αυτή, μπορείτε να επαναφέρετε ή να μεταφέρετε τη Session ταυτότητά σας σε μια νέα συσκευή.</string>
<string name="dialog_clear_all_data_title">Εκκαθάριση όλων των δεδομένων</string>
<string name="dialog_clear_all_data_explanation">Αυτό θα διαγράψει μόνιμα τα μηνύματα, τις συνομιλίες και τις επαφές σας.</string>
<string name="dialog_clear_all_data_network_explanation">Θέλετε να γίνει εκκαθάριση μόνο αυτής της συσκευής, ή να διαγράψετε ολόκληρο το λογαριασμό σας;</string>

View File

@ -539,8 +539,8 @@
<string name="view_fake_chat_bubble_3">Δηλαδή δεν συλλέγει τα προσωπικά μου στοιχεία ή τα μεταδεδομένα των συνομιλιών μου; Πώς λειτουργεί;</string>
<string name="view_fake_chat_bubble_4">Χρησιμοποιώντας ένα συνδυασμό προηγμένων ανώνυμων τεχνολογιών δρομολόγησης και τεχνολογίας κρυπτογράφησης από άκρο σε άκρο.</string>
<string name="view_fake_chat_bubble_5">Οι φίλοι δεν αφήνουν τους φίλους να χρησιμοποιούν ευάλωτες εφαρμογές μηνυμάτων. Είστε ευπρόσδεκτοι.</string>
<string name="activity_register_title">Πείτε γεια στη Session ταυτότητά σας</string>
<string name="activity_register_explanation">Η Session ταυτότητά σας είναι η μοναδική διεύθυνση που μπορούν να χρησιμοποιήσουν τα άτομα για να επικοινωνήσουν μαζί σας στο Session. Χωρίς σύνδεση με την πραγματική σας ταυτότητα, η Session ταυτότητά σας είναι εντελώς ανώνυμη και ιδιωτική.</string>
<string name="activity_restore_title">Επαναφορά του λογαριασμού σας</string>
<string name="activity_restore_explanation">Εισάγετε τη φράση ανάκτησης που σας δόθηκε κατά την εγγραφή σας για να επαναφέρετε το λογαριασμό σας.</string>
<string name="activity_restore_seed_edit_text_hint">Εισάγετε τη φράση ανάκτησης σας</string>
@ -557,11 +557,6 @@
<string name="activity_home_leaving_group_failed_message">"Αδυναμία αποχώρησης από την ομάδα"</string>
<string name="activity_home_delete_conversation_dialog_message">Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν την συνομιλία;</string>
<string name="activity_home_conversation_deleted_message">Η συνομιλία διαγράφηκε</string>
<string name="activity_seed_title">Φράση ανάκτησης</string>
<string name="activity_seed_title_2">Γνωρίστε τη φράση ανάκτησής σας</string>
<string name="activity_seed_explanation">Η φράση ανάκτησης είναι το κύριο κλειδί στο Session ID σας - μπορείτε να τη χρησιμοποιήσετε για να επαναφέρετε το Session ID σας εάν χάσετε πρόσβαση στη συσκευή σας. Αποθηκεύστε τη φράση ανάκτησης σε ασφαλές μέρος, και μην τη δώσετε σε κανέναν.</string>
<string name="activity_seed_reveal_button_title">Πατήστε για εμφάνιση</string>
<string name="view_seed_reminder_title">Σχεδόν τελειώσατε! 80%</string>
<string name="view_seed_reminder_subtitle_1">Ασφαλίστε το λογαριασμό σας αποθηκεύοντας τη φράση ανάκτησής σας</string>
<string name="view_seed_reminder_subtitle_2">Πατήστε παρατεταμένα τις λέξεις που τροποποιήθηκαν για να αποκαλύψετε τη φράση ανάκτησης και μετά αποθηκεύστε την με ασφάλεια για να εξασφαλίσετε το αναγνωριστικό σας.</string>
<string name="view_seed_reminder_subtitle_3">Φροντίστε να αποθηκεύσετε τη φράση ανάκτησής σας σε ασφαλές μέρος</string>
@ -606,7 +601,6 @@
<string name="activity_settings_devices_button_title">Συσκευές</string>
<string name="activity_settings_invite_button_title">Προσκαλέστε ένα φίλο</string>
<string name="activity_settings_faq_button_title">Συχνές ερωτήσεις</string>
<string name="activity_settings_recovery_phrase_button_title">Φράση Ανάκτησης</string>
<string name="activity_settings_clear_all_data_button_title">Εκκαθάριση Δεδομένων</string>
<string name="activity_settings_clear_all_data_and_network_button_title">Εκκαθάριση Δεδομένων Με Το Δίκτυο</string>
<string name="activity_settings_help_translate_session">Βοηθήστε μας να μεταφράσουμε τo Session</string>
@ -619,8 +613,6 @@
<string name="preferences_notifications_strategy_category_fast_mode_summary">Θα ειδοποιηθείτε για νέα μηνύματα αξιόπιστα και άμεσα χρησιμοποιώντας τους διακομιστές ειδοποιήσεων της Google.</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Αλλαγή ονόματος</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Αποσύνδεση Συσκευής</string>
<string name="dialog_seed_title">Η φράση ανάκτησής σας</string>
<string name="dialog_seed_explanation">Αυτή είναι η φράση ανάκτησης σας. Με αυτή, μπορείτε να επαναφέρετε ή να μεταφέρετε τη Session ταυτότητά σας σε μια νέα συσκευή.</string>
<string name="dialog_clear_all_data_title">Εκκαθάριση όλων των δεδομένων</string>
<string name="dialog_clear_all_data_explanation">Αυτό θα διαγράψει μόνιμα τα μηνύματα, τις συνομιλίες και τις επαφές σας.</string>
<string name="dialog_clear_all_data_network_explanation">Θέλετε να γίνει εκκαθάριση μόνο αυτής της συσκευής, ή να διαγράψετε ολόκληρο το λογαριασμό σας;</string>

View File

@ -538,8 +538,8 @@
<string name="view_fake_chat_bubble_3">Do ĝi ne kolektas miajn personajn informojn aŭ miajn konversaciajn metadatumojn? Kiel ĝi funkcias?</string>
<string name="view_fake_chat_bubble_4">Uzante kombinon de progresinta anonima enkursigo kaj tutvoje ĉifraj teknologioj.</string>
<string name="view_fake_chat_bubble_5">Amikoj ne permesas amikojn uzi kompromititajn mesaĝilojn. Nedankinde.</string>
<string name="activity_register_title">Diru saluton al via Session ID</string>
<string name="activity_register_explanation">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.</string>
<string name="activity_restore_title">Restaŭri vian konton</string>
<string name="activity_restore_explanation">Entajpu la riparan frazon, kiu estis donita al vi kiam vi aliĝis, por ripari vian konton.</string>
<string name="activity_restore_seed_edit_text_hint">Entajpu vian riparan frazon</string>
@ -556,11 +556,6 @@
<string name="activity_home_leaving_group_failed_message">"Ne povis foriri el la grupo"</string>
<string name="activity_home_delete_conversation_dialog_message">Ĉu vi certas, ke vi volas forviŝi ĉi tiun konversacion?</string>
<string name="activity_home_conversation_deleted_message">Konversacio forviŝite</string>
<string name="activity_seed_title">Via Ripara Frazo</string>
<string name="activity_seed_title_2">Ekkonu vian riparan frazon</string>
<string name="activity_seed_explanation">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.</string>
<string name="activity_seed_reveal_button_title">Tuŝadu por malkaŝi</string>
<string name="view_seed_reminder_title">Vi preskaŭ estas fininta! 80%</string>
<string name="view_seed_reminder_subtitle_1">Sekurigi vian konton per konservi vian riparan frazon</string>
<string name="view_seed_reminder_subtitle_2">Tuŝadu la kaŝitajn vortojn por malkaŝi vian riparan frazon, tiam konservi ĝin sekure por sekurigi vian Session ID-on.</string>
<string name="view_seed_reminder_subtitle_3">Certigu konservi vian riparan frazon en sekura loko</string>
@ -603,7 +598,6 @@
<string name="activity_settings_devices_button_title">Aparatoj</string>
<string name="activity_settings_invite_button_title">Inviti Amikon</string>
<string name="activity_settings_faq_button_title">Oftaj Demandoj</string>
<string name="activity_settings_recovery_phrase_button_title">Ripara Frazo</string>
<string name="activity_settings_clear_all_data_button_title">Viŝi Datumojn</string>
<string name="activity_settings_help_translate_session">Helpu nin Traduki Session</string>
<string name="activity_notification_settings_title">Sciigoj</string>
@ -614,8 +608,6 @@
<string name="preferences_notifications_strategy_category_fast_mode_title">Uzi Rapidan Reĝimon</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Ŝanĝi nomon</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Malligi aparaton</string>
<string name="dialog_seed_title">Via Ripara Frazo</string>
<string name="dialog_seed_explanation">Ĉi tio estas via ripara frazo. Kun ĝi, vi povas restaŭri aŭ migri vian Session ID-on al nova aparato.</string>
<string name="dialog_clear_all_data_title">Viŝi Tutajn Datumojn</string>
<string name="dialog_clear_all_data_explanation">Ĉi tio daŭre forviŝi viajn mesaĝojn, sesiojn, kaj kontaktojn.</string>
<string name="dialog_clear_all_data_local_only">Forviŝi Sole</string>

View File

@ -538,8 +538,8 @@
<string name="view_fake_chat_bubble_3">Do ĝi ne kolektas miajn personajn informojn aŭ miajn konversaciajn metadatumojn? Kiel ĝi funkcias?</string>
<string name="view_fake_chat_bubble_4">Uzante kombinon de progresinta anonima enkursigo kaj tutvoje ĉifraj teknologioj.</string>
<string name="view_fake_chat_bubble_5">Amikoj ne permesas amikojn uzi kompromititajn mesaĝilojn. Nedankinde.</string>
<string name="activity_register_title">Diru saluton al via Session ID</string>
<string name="activity_register_explanation">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.</string>
<string name="activity_restore_title">Restaŭri vian konton</string>
<string name="activity_restore_explanation">Entajpu la riparan frazon, kiu estis donita al vi kiam vi aliĝis, por ripari vian konton.</string>
<string name="activity_restore_seed_edit_text_hint">Entajpu vian riparan frazon</string>
@ -556,11 +556,6 @@
<string name="activity_home_leaving_group_failed_message">"Ne povis foriri el la grupo"</string>
<string name="activity_home_delete_conversation_dialog_message">Ĉu vi certas, ke vi volas forviŝi ĉi tiun konversacion?</string>
<string name="activity_home_conversation_deleted_message">Konversacio forviŝite</string>
<string name="activity_seed_title">Via Ripara Frazo</string>
<string name="activity_seed_title_2">Ekkonu vian riparan frazon</string>
<string name="activity_seed_explanation">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.</string>
<string name="activity_seed_reveal_button_title">Tuŝadu por malkaŝi</string>
<string name="view_seed_reminder_title">Vi preskaŭ estas fininta! 80%</string>
<string name="view_seed_reminder_subtitle_1">Sekurigi vian konton per konservi vian riparan frazon</string>
<string name="view_seed_reminder_subtitle_2">Tuŝadu la kaŝitajn vortojn por malkaŝi vian riparan frazon, tiam konservi ĝin sekure por sekurigi vian Session ID-on.</string>
<string name="view_seed_reminder_subtitle_3">Certigu konservi vian riparan frazon en sekura loko</string>
@ -603,7 +598,6 @@
<string name="activity_settings_devices_button_title">Aparatoj</string>
<string name="activity_settings_invite_button_title">Inviti Amikon</string>
<string name="activity_settings_faq_button_title">Oftaj Demandoj</string>
<string name="activity_settings_recovery_phrase_button_title">Ripara Frazo</string>
<string name="activity_settings_clear_all_data_button_title">Viŝi Datumojn</string>
<string name="activity_settings_help_translate_session">Helpu nin Traduki Session</string>
<string name="activity_notification_settings_title">Sciigoj</string>
@ -614,8 +608,6 @@
<string name="preferences_notifications_strategy_category_fast_mode_title">Uzi Rapidan Reĝimon</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Ŝanĝi nomon</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Malligi aparaton</string>
<string name="dialog_seed_title">Via Ripara Frazo</string>
<string name="dialog_seed_explanation">Ĉi tio estas via ripara frazo. Kun ĝi, vi povas restaŭri aŭ migri vian Session ID-on al nova aparato.</string>
<string name="dialog_clear_all_data_title">Viŝi Tutajn Datumojn</string>
<string name="dialog_clear_all_data_explanation">Ĉi tio daŭre forviŝi viajn mesaĝojn, sesiojn, kaj kontaktojn.</string>
<string name="dialog_clear_all_data_local_only">Forviŝi Sole</string>

View File

@ -538,8 +538,8 @@ de intercambio de claves!</string>
<string name="view_fake_chat_bubble_3">¿Entonces no recopila mi información personal ni los metadatos de mi conversación? ¿Cómo funciona?</string>
<string name="view_fake_chat_bubble_4">Utiliza una combinación de enrutamiento anónimo avanzado y tecnologías de cifrado de extremo a extremo.</string>
<string name="view_fake_chat_bubble_5">Los amigos no dejan que sus amigos usen messengers riesgosos. De nada.</string>
<string name="activity_register_title">Saluda a tu ID de Session</string>
<string name="activity_register_explanation">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.</string>
<string name="activity_restore_title">Restaura tu cuenta</string>
<string name="activity_restore_explanation">Ingresa la frase de recuperación que se te dio cuando te registraste para restaurar tu cuenta.</string>
<string name="activity_restore_seed_edit_text_hint">Ingresa tu frase de recuperación</string>
@ -556,11 +556,6 @@ de intercambio de claves!</string>
<string name="activity_home_leaving_group_failed_message">"No pudiste salir del grupo"</string>
<string name="activity_home_delete_conversation_dialog_message">¿Seguro que quieres eliminar esta conversación?</string>
<string name="activity_home_conversation_deleted_message">Conversación eliminada</string>
<string name="activity_seed_title">Tu frase de recuperación</string>
<string name="activity_seed_title_2">Guarda tu frase de recuperación</string>
<string name="activity_seed_explanation">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.</string>
<string name="activity_seed_reveal_button_title">Mantén pulsado para revelar</string>
<string name="view_seed_reminder_title">¡Ya casi has terminado! 80%</string>
<string name="view_seed_reminder_subtitle_1">Protege tu cuenta guardando tu frase de recuperación</string>
<string name="view_seed_reminder_subtitle_2">Toca 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.</string>
<string name="view_seed_reminder_subtitle_3">Asegúrate de guardar tu frase de recuperación en un lugar seguro</string>
@ -605,7 +600,6 @@ de intercambio de claves!</string>
<string name="activity_settings_devices_button_title">Dispositivos</string>
<string name="activity_settings_invite_button_title">Invitar a un amigo</string>
<string name="activity_settings_faq_button_title">Preguntas frecuentes</string>
<string name="activity_settings_recovery_phrase_button_title">Frase de recuperación</string>
<string name="activity_settings_clear_all_data_button_title">Borrar datos</string>
<string name="activity_settings_clear_all_data_and_network_button_title">Limpiar Datos Incluyendo La Red</string>
<string name="activity_settings_help_translate_session">Ayúdanos a traducir Session</string>
@ -618,8 +612,6 @@ de intercambio de claves!</string>
<string name="preferences_notifications_strategy_category_fast_mode_summary">Se te notificará de nuevos mensajes de forma fiable e inmediata usando los servidores de notificaciones de Google.</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Cambiar nombre</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Desvincular dispositivo</string>
<string name="dialog_seed_title">Tu frase de recuperación</string>
<string name="dialog_seed_explanation">Esta es tu frase de recuperación. Con ella, puedes restaurar o migrar tu ID de Session a un nuevo dispositivo.</string>
<string name="dialog_clear_all_data_title">Borrar todos los datos</string>
<string name="dialog_clear_all_data_explanation">Esto eliminará permanentemente tu ID de Session, incluyendo todos los mensajes, sesiones y contactos.</string>
<string name="dialog_clear_all_data_network_explanation">¿Quieres borrar sólo este dispositivo o eliminar toda tu cuenta?</string>

View File

@ -538,8 +538,8 @@ de intercambio de claves!</string>
<string name="view_fake_chat_bubble_3">¿Entonces no recopila mi información personal ni los metadatos de mi conversación? ¿Cómo funciona?</string>
<string name="view_fake_chat_bubble_4">Utiliza una combinación de enrutamiento anónimo avanzado y tecnologías de cifrado de extremo a extremo.</string>
<string name="view_fake_chat_bubble_5">Los amigos no dejan que sus amigos usen messengers riesgosos. De nada.</string>
<string name="activity_register_title">Saluda a tu ID de Session</string>
<string name="activity_register_explanation">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.</string>
<string name="activity_restore_title">Restaura tu cuenta</string>
<string name="activity_restore_explanation">Ingresa la frase de recuperación que se te dio cuando te registraste para restaurar tu cuenta.</string>
<string name="activity_restore_seed_edit_text_hint">Ingresa tu frase de recuperación</string>
@ -556,11 +556,6 @@ de intercambio de claves!</string>
<string name="activity_home_leaving_group_failed_message">"No pudiste salir del grupo"</string>
<string name="activity_home_delete_conversation_dialog_message">¿Seguro que quieres eliminar esta conversación?</string>
<string name="activity_home_conversation_deleted_message">Conversación eliminada</string>
<string name="activity_seed_title">Tu frase de recuperación</string>
<string name="activity_seed_title_2">Guarda tu frase de recuperación</string>
<string name="activity_seed_explanation">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.</string>
<string name="activity_seed_reveal_button_title">Mantén pulsado para revelar</string>
<string name="view_seed_reminder_title">¡Ya casi has terminado! 80%</string>
<string name="view_seed_reminder_subtitle_1">Protege tu cuenta guardando tu frase de recuperación</string>
<string name="view_seed_reminder_subtitle_2">Toca 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.</string>
<string name="view_seed_reminder_subtitle_3">Asegúrate de guardar tu frase de recuperación en un lugar seguro</string>
@ -605,7 +600,6 @@ de intercambio de claves!</string>
<string name="activity_settings_devices_button_title">Dispositivos</string>
<string name="activity_settings_invite_button_title">Invitar a un amigo</string>
<string name="activity_settings_faq_button_title">Preguntas frecuentes</string>
<string name="activity_settings_recovery_phrase_button_title">Frase de recuperación</string>
<string name="activity_settings_clear_all_data_button_title">Borrar datos</string>
<string name="activity_settings_clear_all_data_and_network_button_title">Limpiar Datos Incluyendo La Red</string>
<string name="activity_settings_help_translate_session">Ayúdanos a traducir Session</string>
@ -618,8 +612,6 @@ de intercambio de claves!</string>
<string name="preferences_notifications_strategy_category_fast_mode_summary">Se te notificará de nuevos mensajes de forma fiable e inmediata usando los servidores de notificaciones de Google.</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Cambiar nombre</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Desvincular dispositivo</string>
<string name="dialog_seed_title">Tu frase de recuperación</string>
<string name="dialog_seed_explanation">Esta es tu frase de recuperación. Con ella, puedes restaurar o migrar tu ID de Session a un nuevo dispositivo.</string>
<string name="dialog_clear_all_data_title">Borrar todos los datos</string>
<string name="dialog_clear_all_data_explanation">Esto eliminará permanentemente tu ID de Session, incluyendo todos los mensajes, sesiones y contactos.</string>
<string name="dialog_clear_all_data_network_explanation">¿Quieres borrar sólo este dispositivo o eliminar toda tu cuenta?</string>

View File

@ -561,8 +561,8 @@
<string name="view_fake_chat_bubble_3">پس اطلاعات شخصی من یا داده‌های گفت‌وگو‌هایم جمع‌آوری نمی‌شود؟ چگونه کار می‌کند؟</string>
<string name="view_fake_chat_bubble_4">Session با استفاده از ترکیبی از فناوری‌های پیشرفته مسیریابی ناشناس و رمزگذاری سرتاسری این کار را انجام می‌دهد.</string>
<string name="view_fake_chat_bubble_5">یک دوست هیچ‌وقت به دوستان خود اجازه استفاده از پیام‌رسان‌های در معرض خطر را نمی‌دهد.</string>
<string name="activity_register_title">به شناسه‌ی Session خود سلام کنید</string>
<string name="activity_register_explanation">شناسه‌ی Session شما آدرس منحصر به فردی است که افراد می‌توانند از طریق آن با شما در Session تماس بگیرند. شناسه‌ی Session شما، بدون اتصال با هویت واقعی شما، کاملاً ناشناس و خصوصی است.</string>
<string name="activity_restore_title">حساب کاربری خود را بازیابی کنید</string>
<string name="activity_restore_explanation">عبارت بازیابی را که هنگام نام‌نویسی برای بازیابی حساب به شما داده شده، وارد کنید.</string>
<string name="activity_restore_seed_edit_text_hint">عبارت بازیابی خود را وارد کنید</string>
@ -579,11 +579,6 @@
<string name="activity_home_leaving_group_failed_message">"ترک گروه انجام نشد"</string>
<string name="activity_home_delete_conversation_dialog_message">آیا مطمئن هستید که می‌خواهید این مکالمه را حذف کنید؟</string>
<string name="activity_home_conversation_deleted_message">مکالمه حذف شد</string>
<string name="activity_seed_title">عبارت بازیابی شما</string>
<string name="activity_seed_title_2">این عبارت بازیابی شماست</string>
<string name="activity_seed_explanation">عبارت بازیابی شما کلید اصلی شناسه‌ی Session شما است - در صورت عدم دسترسی به دستگاه خود می توانید از آن برای بازگرداندن شناسه‌ی Session خود استفاده کنید. عبارت بازیابی خود را در مکانی امن ذخیره کنید و آن را به کسی ندهید.</string>
<string name="activity_seed_reveal_button_title">نگه دارید تا نشان داده شود</string>
<string name="view_seed_reminder_title">شما تقریبا تمام کردید! ۸۰٪</string>
<string name="view_seed_reminder_subtitle_1">با ذخیره کردن عبارت بازیابی، از حساب خود محافظت کنید</string>
<string name="view_seed_reminder_subtitle_2">برای دیدن عبارت بازیابی، بر روی کلمات پنهان شده ضربه زده و نگه دارید، سپس با خیال راحت آن را ذخیره کنید تا از شناسه‌ی Session خود محافظت نمایید.</string>
<string name="view_seed_reminder_subtitle_3">حتماً عبارت بازیابی خود را در مکانی امن ذخیره کنید</string>
@ -629,7 +624,6 @@
<string name="activity_settings_devices_button_title">دستگاه‌ها</string>
<string name="activity_settings_invite_button_title">دعوت از یک دوست</string>
<string name="activity_settings_faq_button_title">سوالات متداول</string>
<string name="activity_settings_recovery_phrase_button_title">عبارت بازیابی</string>
<string name="activity_settings_clear_all_data_button_title">پاک کردن اطلاعات</string>
<string name="activity_settings_clear_all_data_and_network_button_title">پاک کردن داده‌ها همراه با شبکه</string>
<string name="activity_settings_help_translate_session">به ما کمک کنید که سشن را ترجمه کنیم</string>
@ -651,8 +645,6 @@
<string name="preferences_notifications_strategy_category_fast_mode_summary">با استفاده از سرورهای اعلان گوگل به طور قابل اعتماد و بلافاصله از پیام جدید مطلع خواهید شد.</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">تغییر نام</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">قطع اتصال دستگاه</string>
<string name="dialog_seed_title">عبارت بازیابی شما</string>
<string name="dialog_seed_explanation">می توانید از عبارت بازیابی یا برای بازیابی حساب خود و یا برای وصل با یک دستگاه استفاده کنید.</string>
<string name="dialog_clear_all_data_title">پاک کردن همه داتا</string>
<string name="dialog_clear_all_data_explanation">این گزینه به طور دائم پیام‌ها، جلسات و مخاطبین شما را حذف می‌کند.</string>
<string name="dialog_clear_all_data_network_explanation">آیا فقط می‌خواهید این دستگاه را پاک کنید یا می‌خواهید کل اکانت را پاک کنید؟</string>

View File

@ -538,8 +538,8 @@
<string name="view_fake_chat_bubble_3">پس اطلاعات شخصی من یا داده‌های گفت‌وگو‌هایم جمع‌آوری نمی‌شود؟ چگونه کار می‌کند؟</string>
<string name="view_fake_chat_bubble_4">Session با استفاده از ترکیبی از فناوری‌های پیشرفته مسیریابی ناشناس و رمزگذاری سرتاسری این کار را انجام می‌دهد.</string>
<string name="view_fake_chat_bubble_5">یک دوست هیچ‌وقت به دوستان خود اجازه استفاده از پیام‌رسان‌های در معرض خطر را نمی‌دهد.</string>
<string name="activity_register_title">به شناسه‌ی Session خود سلام کنید</string>
<string name="activity_register_explanation">شناسه‌ی Session شما آدرس منحصر به فردی است که افراد می‌توانند از طریق آن با شما در Session تماس بگیرند. شناسه‌ی Session شما، بدون اتصال با هویت واقعی شما، کاملاً ناشناس و خصوصی است.</string>
<string name="activity_restore_title">حساب کاربری خود را بازیابی کنید</string>
<string name="activity_restore_explanation">عبارت بازیابی را که هنگام نام‌نویسی برای بازیابی حساب به شما داده شده، وارد کنید.</string>
<string name="activity_restore_seed_edit_text_hint">عبارت بازیابی خود را وارد کنید</string>
@ -556,11 +556,6 @@
<string name="activity_home_leaving_group_failed_message">"ترک گروه انجام نشد"</string>
<string name="activity_home_delete_conversation_dialog_message">آیا مطمئن هستید که می‌خواهید این مکالمه را حذف کنید؟</string>
<string name="activity_home_conversation_deleted_message">مکالمه حذف شد</string>
<string name="activity_seed_title">عبارت بازیابی شما</string>
<string name="activity_seed_title_2">این عبارت بازیابی شماست</string>
<string name="activity_seed_explanation">عبارت بازیابی شما کلید اصلی شناسه‌ی Session شما است - در صورت عدم دسترسی به دستگاه خود می توانید از آن برای بازگرداندن شناسه‌ی Session خود استفاده کنید. عبارت بازیابی خود را در مکانی امن ذخیره کنید و آن را به کسی ندهید.</string>
<string name="activity_seed_reveal_button_title">نگه دارید تا نشان داده شود</string>
<string name="view_seed_reminder_title">شما تقریبا تمام کردید! ۸۰٪</string>
<string name="view_seed_reminder_subtitle_1">با ذخیره کردن عبارت بازیابی، از حساب خود را محافظت کنید</string>
<string name="view_seed_reminder_subtitle_2">برای فاش کردن عبارت بازیابی، بر روی کلمات redacted ضربه زده و نگه دارید، سپس با خیال راحت آن را ذخیره کنید تا از شناسه‌ی Session خود محافظت نمایید.</string>
<string name="view_seed_reminder_subtitle_3">حتماً عبارت بازیابی خود را در مکانی امن ذخیره کنید</string>
@ -605,7 +600,6 @@
<string name="activity_settings_devices_button_title">دستگاه‌ها</string>
<string name="activity_settings_invite_button_title">دعوت از یک دوست</string>
<string name="activity_settings_faq_button_title">سوالات متداول</string>
<string name="activity_settings_recovery_phrase_button_title">عبارت بازیابی</string>
<string name="activity_settings_clear_all_data_button_title">پاک کردن اطلاعات</string>
<string name="activity_settings_clear_all_data_and_network_button_title">پاک کردن داده‌ها همراه با شبکه</string>
<string name="activity_settings_help_translate_session">به ما کمک کنید که سشن را ترجمه کنیم</string>
@ -618,8 +612,6 @@
<string name="preferences_notifications_strategy_category_fast_mode_summary">با استفاده از سرورهای گوگل، شما به صورت سریع و مطمئن از پیام‌های جدید مطلع می‌شوید.</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">تغییر نام</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">قطع اتصال دستگاه</string>
<string name="dialog_seed_title">عبارت بازیابی شما</string>
<string name="dialog_seed_explanation">این عبارت بازیابی شماست. با استفاده از آن می‌توانید شناسه‌ی Session خود را به دستگاه جدید بازیابی یا انتقال دهید.</string>
<string name="dialog_clear_all_data_title">پاک کردن همه داده‌ها</string>
<string name="dialog_clear_all_data_explanation">این به طور دائم پیام‌ها، جلسات و مخاطبین شما را حذف می‌کند.</string>
<string name="dialog_clear_all_data_network_explanation">آیا فقط می‌خواهید این دستگاه را پاک کنید یا می‌خواهید کل اکانت را پاک کنید؟</string>

View File

@ -537,8 +537,8 @@ on viallinen!</string>
<string name="view_fake_chat_bubble_3">Joten se ei kerää henkilökohtaisia tietoja tai keskustelun metatietoja? Miten se toimii?</string>
<string name="view_fake_chat_bubble_4">Käyttämällä kehittyneitä nimettömiä reititys- ja päästä päähän -salaustekniikoita.</string>
<string name="view_fake_chat_bubble_5">Ystävät eivät anna ystävien käyttää vaarantunutta viestintäsovellusta. Olet tervetullut.</string>
<string name="activity_register_title">Sano tervehdys Session tunnuksellesi</string>
<string name="activity_register_explanation">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.</string>
<string name="activity_restore_title">Palauta sinun tili</string>
<string name="activity_restore_explanation">Syötä palautuslause joka annettiin sinulle, kun olet rekisteröitynyt palauttamaan tilisi.</string>
<string name="activity_restore_seed_edit_text_hint">Syötä palautuslauseesi</string>
@ -555,11 +555,6 @@ on viallinen!</string>
<string name="activity_home_leaving_group_failed_message">"Ryhmästä ei voitu poistua"</string>
<string name="activity_home_delete_conversation_dialog_message">Haluatko varmasti poistaa tämän keskustelun?</string>
<string name="activity_home_conversation_deleted_message">Keskustelu poistettu</string>
<string name="activity_seed_title">Palautuslauseke</string>
<string name="activity_seed_title_2">Tutustu palautuslauseesi</string>
<string name="activity_seed_explanation">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.</string>
<string name="activity_seed_reveal_button_title">Pidä pohjassa paljastaaksesi</string>
<string name="view_seed_reminder_title">Olet melkein valmis! 80%</string>
<string name="view_seed_reminder_subtitle_1">Suojaa tilisi tallentamalla palautuslauseke</string>
<string name="view_seed_reminder_subtitle_2">Napauta ja pidä piiloteettuja sanoja paljastaaksesi palautuslauseen, ja säästä se turvallisesti suojataksesi Session tilisi.</string>
<string name="view_seed_reminder_subtitle_3">Varmista, että säilytät palautuslauseesi turvallisessa paikassa</string>
@ -604,7 +599,6 @@ on viallinen!</string>
<string name="activity_settings_devices_button_title">Laitteet</string>
<string name="activity_settings_invite_button_title">Kutsu ystäviä</string>
<string name="activity_settings_faq_button_title">UKK</string>
<string name="activity_settings_recovery_phrase_button_title">Palautuslauseke</string>
<string name="activity_settings_clear_all_data_button_title">Tyhjennä tiedot</string>
<string name="activity_settings_clear_all_data_and_network_button_title">Tyhjennä Tiedot Mukaan Lukien Verkko</string>
<string name="activity_settings_help_translate_session">Auta meitä kääntämään Session</string>
@ -617,8 +611,6 @@ on viallinen!</string>
<string name="preferences_notifications_strategy_category_fast_mode_summary">Sinulle ilmoitetaan uusista viesteistä luotettavasti ja viivyttelemättä Applen ilmoituspalvelua käyttäen.</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Vaihda nimi</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Poista laitteen linkitys</string>
<string name="dialog_seed_title">Palautuslauseke</string>
<string name="dialog_seed_explanation">Tämä on palautuslause. Sen avulla voit palauttaa tai siirtää Session tunnuksesi uudelle laitteelle.</string>
<string name="dialog_clear_all_data_title">Tyhjennä tiedot</string>
<string name="dialog_clear_all_data_explanation">Tämä poistaa pysyvästi viestit, istunnot ja yhteystiedot.</string>
<string name="dialog_clear_all_data_network_explanation">Haluatko tyhjentää datan vain tästä laitteesta vai poistaa koko tilin?</string>

View File

@ -537,8 +537,8 @@ on viallinen!</string>
<string name="view_fake_chat_bubble_3">Joten se ei kerää henkilökohtaisia tietoja tai keskustelun metatietoja? Miten se toimii?</string>
<string name="view_fake_chat_bubble_4">Käyttämällä kehittyneitä nimettömiä reititys- ja päästä päähän -salaustekniikoita.</string>
<string name="view_fake_chat_bubble_5">Ystävät eivät anna ystävien käyttää vaarantunutta viestintäsovellusta. Olet tervetullut.</string>
<string name="activity_register_title">Sano tervehdys Session tunnuksellesi</string>
<string name="activity_register_explanation">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.</string>
<string name="activity_restore_title">Palauta sinun tili</string>
<string name="activity_restore_explanation">Syötä palautuslause joka annettiin sinulle, kun olet rekisteröitynyt palauttamaan tilisi.</string>
<string name="activity_restore_seed_edit_text_hint">Syötä palautuslauseesi</string>
@ -555,11 +555,6 @@ on viallinen!</string>
<string name="activity_home_leaving_group_failed_message">"Ryhmästä ei voitu poistua"</string>
<string name="activity_home_delete_conversation_dialog_message">Haluatko varmasti poistaa tämän keskustelun?</string>
<string name="activity_home_conversation_deleted_message">Keskustelu poistettu</string>
<string name="activity_seed_title">Palautuslauseke</string>
<string name="activity_seed_title_2">Tutustu palautuslauseesi</string>
<string name="activity_seed_explanation">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.</string>
<string name="activity_seed_reveal_button_title">Pidä pohjassa paljastaaksesi</string>
<string name="view_seed_reminder_title">Olet melkein valmis! 80%</string>
<string name="view_seed_reminder_subtitle_1">Suojaa tilisi tallentamalla palautuslauseke</string>
<string name="view_seed_reminder_subtitle_2">Napauta ja pidä piiloteettuja sanoja paljastaaksesi palautuslauseen, ja säästä se turvallisesti suojataksesi Session tilisi.</string>
<string name="view_seed_reminder_subtitle_3">Varmista, että säilytät palautuslauseesi turvallisessa paikassa</string>
@ -604,7 +599,6 @@ on viallinen!</string>
<string name="activity_settings_devices_button_title">Laitteet</string>
<string name="activity_settings_invite_button_title">Kutsu ystäviä</string>
<string name="activity_settings_faq_button_title">UKK</string>
<string name="activity_settings_recovery_phrase_button_title">Palautuslauseke</string>
<string name="activity_settings_clear_all_data_button_title">Tyhjennä tiedot</string>
<string name="activity_settings_clear_all_data_and_network_button_title">Tyhjennä Tiedot Mukaan Lukien Verkko</string>
<string name="activity_settings_help_translate_session">Auta meitä kääntämään Session</string>
@ -617,8 +611,6 @@ on viallinen!</string>
<string name="preferences_notifications_strategy_category_fast_mode_summary">Sinulle ilmoitetaan uusista viesteistä luotettavasti ja viivyttelemättä Applen ilmoituspalvelua käyttäen.</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Vaihda nimi</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Poista laitteen linkitys</string>
<string name="dialog_seed_title">Palautuslauseke</string>
<string name="dialog_seed_explanation">Tämä on palautuslause. Sen avulla voit palauttaa tai siirtää Session tunnuksesi uudelle laitteelle.</string>
<string name="dialog_clear_all_data_title">Tyhjennä tiedot</string>
<string name="dialog_clear_all_data_explanation">Tämä poistaa pysyvästi viestit, istunnot ja yhteystiedot.</string>
<string name="dialog_clear_all_data_network_explanation">Haluatko tyhjentää datan vain tästä laitteesta vai poistaa koko tilin?</string>

View File

@ -564,8 +564,8 @@
<string name="view_fake_chat_bubble_3">Elle ne recueille donc pas mes informations personnelles ou mes métadonnées de conversations ? Comment ça marche ?</string>
<string name="view_fake_chat_bubble_4">En utilisant une combinaison de technologies avancées de routage anonyme et de chiffrement de bout en bout.</string>
<string name="view_fake_chat_bubble_5">Les vrais amis ne laissent pas leurs amis utiliser des outils de messagerie compromis. De rien.</string>
<string name="activity_register_title">Dites bonjour à votre Session ID</string>
<string name="activity_register_explanation">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é.</string>
<string name="activity_restore_title">Restaurez votre compte</string>
<string name="activity_restore_explanation">Pour restaurer votre compte, veuillez entrer la phrase de récupération qui vous a été fournie lors de la création de votre compte.</string>
<string name="activity_restore_seed_edit_text_hint">Saisissez votre phrase de récupération</string>
@ -582,11 +582,6 @@
<string name="activity_home_leaving_group_failed_message">"Impossible de quitter le groupe"</string>
<string name="activity_home_delete_conversation_dialog_message">Voulez-vous vraiment supprimer cette conversation ?</string>
<string name="activity_home_conversation_deleted_message">Conversation supprimée</string>
<string name="activity_seed_title">Votre phrase de récupération</string>
<string name="activity_seed_title_2">Voici votre phrase de récupération</string>
<string name="activity_seed_explanation">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.</string>
<string name="activity_seed_reveal_button_title">Appuyer pour révéler</string>
<string name="view_seed_reminder_title">Vous avez presque terminé ! 80%</string>
<string name="view_seed_reminder_subtitle_1">Sécurisez votre compte en sauvegardant votre phrase de récupération</string>
<string name="view_seed_reminder_subtitle_2">Appuyez 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.</string>
<string name="view_seed_reminder_subtitle_3">Assurez-vous de conserver votre phrase de récupération dans un endroit sûr</string>
@ -632,7 +627,6 @@
<string name="activity_settings_devices_button_title">Appareils reliés</string>
<string name="activity_settings_invite_button_title">Inviter un ami</string>
<string name="activity_settings_faq_button_title">FAQ</string>
<string name="activity_settings_recovery_phrase_button_title">Phrase de récupération</string>
<string name="activity_settings_clear_all_data_button_title">Effacer les données</string>
<string name="activity_settings_clear_all_data_and_network_button_title">Effacer les données et le réseau</string>
<string name="activity_settings_help_translate_session">Aidez-nous à traduire Session</string>
@ -654,8 +648,6 @@
<string name="preferences_notifications_strategy_category_fast_mode_summary">Vous serez averti de nouveaux messages de manière fiable et immédiate en utilisant les serveurs de notification de Google.</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Modifier le nom</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Déconnecter l\'appareil</string>
<string name="dialog_seed_title">Votre phrase de récupération</string>
<string name="dialog_seed_explanation">Vous pouvez utiliser votre phrase de récupération pour restaurer votre compte ou relier un appareil.</string>
<string name="dialog_clear_all_data_title">Effacer toutes les données</string>
<string name="dialog_clear_all_data_explanation">Cela supprimera définitivement vos messages, vos sessions et vos contacts.</string>
<string name="dialog_clear_all_data_network_explanation">Souhaitez-vous effacer seulement cet appareil ou supprimer l\'ensemble de votre compte ?</string>

View File

@ -564,8 +564,8 @@
<string name="view_fake_chat_bubble_3">Elle ne recueille donc pas mes informations personnelles ou mes métadonnées de conversations ? Comment ça marche ?</string>
<string name="view_fake_chat_bubble_4">En utilisant une combinaison de technologies avancées de routage anonyme et de chiffrement de bout en bout.</string>
<string name="view_fake_chat_bubble_5">Les vrais amis ne laissent pas leurs amis utiliser des outils de messagerie compromis. De rien.</string>
<string name="activity_register_title">Dites bonjour à votre Session ID</string>
<string name="activity_register_explanation">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é.</string>
<string name="activity_restore_title">Restaurez votre compte</string>
<string name="activity_restore_explanation">Pour restaurer votre compte, veuillez entrer la phrase de récupération qui vous a été fournie lors de la création de votre compte.</string>
<string name="activity_restore_seed_edit_text_hint">Saisissez votre phrase de récupération</string>
@ -582,11 +582,6 @@
<string name="activity_home_leaving_group_failed_message">"Impossible de quitter le groupe"</string>
<string name="activity_home_delete_conversation_dialog_message">Voulez-vous vraiment supprimer cette conversation ?</string>
<string name="activity_home_conversation_deleted_message">Conversation supprimée</string>
<string name="activity_seed_title">Votre phrase de récupération</string>
<string name="activity_seed_title_2">Voici votre phrase de récupération</string>
<string name="activity_seed_explanation">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.</string>
<string name="activity_seed_reveal_button_title">Appuyer pour révéler</string>
<string name="view_seed_reminder_title">Vous avez presque terminé ! 80%</string>
<string name="view_seed_reminder_subtitle_1">Sécurisez votre compte en sauvegardant votre phrase de récupération</string>
<string name="view_seed_reminder_subtitle_2">Appuyez 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.</string>
<string name="view_seed_reminder_subtitle_3">Assurez-vous de conserver votre phrase de récupération dans un endroit sûr</string>
@ -632,7 +627,6 @@
<string name="activity_settings_devices_button_title">Appareils reliés</string>
<string name="activity_settings_invite_button_title">Inviter un ami</string>
<string name="activity_settings_faq_button_title">FAQ</string>
<string name="activity_settings_recovery_phrase_button_title">Phrase de récupération</string>
<string name="activity_settings_clear_all_data_button_title">Effacer les données</string>
<string name="activity_settings_clear_all_data_and_network_button_title">Effacer les données et le réseau</string>
<string name="activity_settings_help_translate_session">Aidez-nous à traduire Session</string>
@ -654,8 +648,6 @@
<string name="preferences_notifications_strategy_category_fast_mode_summary">Vous serez averti de nouveaux messages de manière fiable et immédiate en utilisant les serveurs de notification de Google.</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Modifier le nom</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Déconnecter l\'appareil</string>
<string name="dialog_seed_title">Votre phrase de récupération</string>
<string name="dialog_seed_explanation">Vous pouvez utiliser votre phrase de récupération pour restaurer votre compte ou relier un appareil.</string>
<string name="dialog_clear_all_data_title">Effacer toutes les données</string>
<string name="dialog_clear_all_data_explanation">Cela supprimera définitivement vos messages, vos sessions et vos contacts.</string>
<string name="dialog_clear_all_data_network_explanation">Souhaitez-vous effacer seulement cet appareil ou supprimer l\'ensemble de votre compte ?</string>

View File

@ -528,7 +528,7 @@
<string name="view_fake_chat_bubble_2">É unha app de mensaxería cifrada e descentralizada</string>
<string name="view_fake_chat_bubble_3">Entón non recompila a miña información persoal ou os metadatos das miñas conversas? Como funciona?</string>
<string name="view_fake_chat_bubble_4">Empregando unha combinación de tecnoloxías avanzadas de encamiñamento anónimo e cifrado punto-a-punto.</string>
<string name="activity_register_title">Di ola ao teu ID de Session</string>
<string name="activity_home_empty_state_button_title">Iniciar unha sesión</string>
<string name="activity_home_leave_group_dialog_message">Tes a certeza de querer abandonar este grupo?</string>
<string name="activity_home_leaving_group_failed_message">"Non foi posible abandonar o grupo"</string>

View File

@ -528,7 +528,7 @@
<string name="view_fake_chat_bubble_2">É unha app de mensaxería cifrada e descentralizada</string>
<string name="view_fake_chat_bubble_3">Entón non recompila a miña información persoal ou os metadatos das miñas conversas? Como funciona?</string>
<string name="view_fake_chat_bubble_4">Empregando unha combinación de tecnoloxías avanzadas de encamiñamento anónimo e cifrado punto-a-punto.</string>
<string name="activity_register_title">Di ola ao teu ID de Session</string>
<string name="activity_home_empty_state_button_title">Iniciar unha sesión</string>
<string name="activity_home_leave_group_dialog_message">Tes a certeza de querer abandonar este grupo?</string>
<string name="activity_home_leaving_group_failed_message">"Non foi posible abandonar o grupo"</string>

View File

@ -538,8 +538,8 @@
<string name="view_fake_chat_bubble_3">इसलिए यह मेरी निजी जानकारी या बातचीत का metadata इकठ्ठा नहीं करता? यह कैसे काम करता है?</string>
<string name="view_fake_chat_bubble_4">एडवांस्ड anonymous routing और end-to-end encryption के मिश्रण का प्रयोग करके।</string>
<string name="view_fake_chat_bubble_5">दोस्त दोस्तों को असुरक्षित मैसेंजर नहीं उपयोग करने देते। आपका स्वागत है।</string>
<string name="activity_register_title">अपनी सेशन आईडी को हेल्लो कहें</string>
<string name="activity_register_explanation">आपकी Session ID एक ऐसा अनोखा पता है जिसका उपयोग करके लोग आपसे Session पर संपर्क कर सकते हैं। आपकी वास्तविक पहचान से कोई संबंध नहीं होने के कारण, आपका Session ID डिज़ाइन द्वारा पूरी तरह से गुमनाम और निजी है |</string>
<string name="activity_restore_title">अकाउंट रिस्टोर करें</string>
<string name="activity_restore_explanation">अकाउंट बनाते समय बनाया गया अपना रिकवरी वाक्य डालें।</string>
<string name="activity_restore_seed_edit_text_hint">अपना पुनर्प्राप्ति वाक्यांश लिखें</string>
@ -556,11 +556,6 @@
<string name="activity_home_leaving_group_failed_message">"ग्रुप नहीं छोड़ सके"</string>
<string name="activity_home_delete_conversation_dialog_message">क्या वाकई आप इस वार्तालाप को हटाना चाहते हैं?</string>
<string name="activity_home_conversation_deleted_message">बातचीत हटाई गई</string>
<string name="activity_seed_title">आपका पुनर्प्राप्ति वाक्यांश</string>
<string name="activity_seed_title_2">अपने पुनर्प्राप्ति वाक्यांश से मिलें</string>
<string name="activity_seed_explanation">आपका रिकवरी फ्रेज आपके Session Id की मास्टर कीय है — आप इसका इस्तेमाल अपनी Session ID को वापिस पाने के लिए कर सकते है अगर आपका फ़ोन गुम हो गया है | अपने रिकवरी फ्रेज को एक सुरक्षित जगह रखे और इसे किसी के साथ शेयर न करे |</string>
<string name="activity_seed_reveal_button_title">देखने के लिए दबाएं</string>
<string name="view_seed_reminder_title">पूर्ण होने वाला है! 80%</string>
<string name="view_seed_reminder_subtitle_1">अकाउंट सुरक्षित रखने के लिए अपनी पुनर्व्यप्ती वाक्यांश को सेव करके रखें</string>
<string name="view_seed_reminder_subtitle_2">अपना पुनर्प्राप्ति वाक्यांश प्रकट करने के लिए संशोधित शब्दों को टैप और होल्ड करें, फिर अपनी Session ID को सुरक्षित करने के लिए इसे सुरक्षित रूप से संग्रहीत करें।</string>
<string name="view_seed_reminder_subtitle_3">अपने रिकवरी फ्रेज को एक सुरक्षित जगह रखे</string>
@ -605,7 +600,6 @@
<string name="activity_settings_devices_button_title">डिवाइसेज़</string>
<string name="activity_settings_invite_button_title">किसी मित्र को आमंत्रित करें</string>
<string name="activity_settings_faq_button_title">अकसर किये गए सवाल</string>
<string name="activity_settings_recovery_phrase_button_title">पुनर्प्राप्ति वाक्यांश</string>
<string name="activity_settings_clear_all_data_button_title">डेटा हटाएं</string>
<string name="activity_settings_clear_all_data_and_network_button_title">डाटा नेटवर्क के समेत साफ करें।</string>
<string name="activity_settings_help_translate_session">सेशन का अनुवाद करने में सहायता करें</string>
@ -618,8 +612,6 @@
<string name="preferences_notifications_strategy_category_fast_mode_summary">आपको नई सूचनाओं के बारे में google के नोटीफिकेशन servers से तत्काल सूचित किया जाएगा।</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">नाम बदलें</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">डिवाइस को अनलिंक करें</string>
<string name="dialog_seed_title">आपका पुनर्प्राप्ति वाक्यांश</string>
<string name="dialog_seed_explanation">यह आपका रिकवरी फ्रेज है | इसके साथ, आप अपनी Session ID को किसी नए डिवाइस पर माइग्रेट कर सकते हैं।</string>
<string name="dialog_clear_all_data_title">सभी डेटा हटाएं</string>
<string name="dialog_clear_all_data_explanation">यह आपके मैसेजस, सेशन और कॉन्टैक्टस को स्थायी रूप से हटा देगा।</string>
<string name="dialog_clear_all_data_network_explanation">क्या आप सिर्फ इस यंत्र को साफ करना चाहेंगे या अपना पूरा अकाउंट डिलीट करना चाहिएं?</string>

View File

@ -538,8 +538,8 @@
<string name="view_fake_chat_bubble_3">इसलिए यह मेरी निजी जानकारी या बातचीत का metadata इकठ्ठा नहीं करता? यह कैसे काम करता है?</string>
<string name="view_fake_chat_bubble_4">एडवांस्ड anonymous routing और end-to-end encryption के मिश्रण का प्रयोग करके।</string>
<string name="view_fake_chat_bubble_5">दोस्त दोस्तों को असुरक्षित मैसेंजर नहीं उपयोग करने देते। आपका स्वागत है।</string>
<string name="activity_register_title">अपनी सेशन आईडी को हेल्लो कहें</string>
<string name="activity_register_explanation">आपकी Session ID एक ऐसा अनोखा पता है जिसका उपयोग करके लोग आपसे Session पर संपर्क कर सकते हैं। आपकी वास्तविक पहचान से कोई संबंध नहीं होने के कारण, आपका Session ID डिज़ाइन द्वारा पूरी तरह से गुमनाम और निजी है |</string>
<string name="activity_restore_title">अकाउंट रिस्टोर करें</string>
<string name="activity_restore_explanation">अकाउंट बनाते समय बनाया गया अपना रिकवरी वाक्य डालें।</string>
<string name="activity_restore_seed_edit_text_hint">अपना पुनर्प्राप्ति वाक्यांश लिखें</string>
@ -556,11 +556,6 @@
<string name="activity_home_leaving_group_failed_message">"ग्रुप नहीं छोड़ सके"</string>
<string name="activity_home_delete_conversation_dialog_message">क्या वाकई आप इस वार्तालाप को हटाना चाहते हैं?</string>
<string name="activity_home_conversation_deleted_message">बातचीत हटाई गई</string>
<string name="activity_seed_title">आपका पुनर्प्राप्ति वाक्यांश</string>
<string name="activity_seed_title_2">अपने पुनर्प्राप्ति वाक्यांश से मिलें</string>
<string name="activity_seed_explanation">आपका रिकवरी फ्रेज आपके Session Id की मास्टर कीय है — आप इसका इस्तेमाल अपनी Session ID को वापिस पाने के लिए कर सकते है अगर आपका फ़ोन गुम हो गया है | अपने रिकवरी फ्रेज को एक सुरक्षित जगह रखे और इसे किसी के साथ शेयर न करे |</string>
<string name="activity_seed_reveal_button_title">देखने के लिए दबाएं</string>
<string name="view_seed_reminder_title">पूर्ण होने वाला है! 80%</string>
<string name="view_seed_reminder_subtitle_1">अकाउंट सुरक्षित रखने के लिए अपनी पुनर्व्यप्ती वाक्यांश को सेव करके रखें</string>
<string name="view_seed_reminder_subtitle_2">अपना पुनर्प्राप्ति वाक्यांश प्रकट करने के लिए संशोधित शब्दों को टैप और होल्ड करें, फिर अपनी Session ID को सुरक्षित करने के लिए इसे सुरक्षित रूप से संग्रहीत करें।</string>
<string name="view_seed_reminder_subtitle_3">अपने रिकवरी फ्रेज को एक सुरक्षित जगह रखे</string>
@ -605,7 +600,6 @@
<string name="activity_settings_devices_button_title">डिवाइसेज़</string>
<string name="activity_settings_invite_button_title">किसी मित्र को आमंत्रित करें</string>
<string name="activity_settings_faq_button_title">अकसर किये गए सवाल</string>
<string name="activity_settings_recovery_phrase_button_title">पुनर्प्राप्ति वाक्यांश</string>
<string name="activity_settings_clear_all_data_button_title">डेटा हटाएं</string>
<string name="activity_settings_clear_all_data_and_network_button_title">डाटा नेटवर्क के समेत साफ करें।</string>
<string name="activity_settings_help_translate_session">सेशन का अनुवाद करने में सहायता करें</string>
@ -618,8 +612,6 @@
<string name="preferences_notifications_strategy_category_fast_mode_summary">आपको नई सूचनाओं के बारे में google के नोटीफिकेशन servers से तत्काल सूचित किया जाएगा।</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">नाम बदलें</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">डिवाइस को अनलिंक करें</string>
<string name="dialog_seed_title">आपका पुनर्प्राप्ति वाक्यांश</string>
<string name="dialog_seed_explanation">यह आपका रिकवरी फ्रेज है | इसके साथ, आप अपनी Session ID को किसी नए डिवाइस पर माइग्रेट कर सकते हैं।</string>
<string name="dialog_clear_all_data_title">सभी डेटा हटाएं</string>
<string name="dialog_clear_all_data_explanation">यह आपके मैसेजस, सेशन और कॉन्टैक्टस को स्थायी रूप से हटा देगा।</string>
<string name="dialog_clear_all_data_network_explanation">क्या आप सिर्फ इस यंत्र को साफ करना चाहेंगे या अपना पूरा अकाउंट डिलीट करना चाहिएं?</string>

View File

@ -540,8 +540,8 @@
<string name="view_fake_chat_bubble_3">Tehát nem gyűjti a személyes adataimat vagy a beszélgetés metaadatait? Hogyan működik?</string>
<string name="view_fake_chat_bubble_4">Fejlett anonim útválasztási és végponttól-végpontig titkosítási technológiák használatával.</string>
<string name="view_fake_chat_bubble_5">A barátként nem engedhetem, hogy megbízhatatlan üzenetküldő appokat használj. Szívesen.</string>
<string name="activity_register_title">Ismerd meg a Session ID-d</string>
<string name="activity_register_explanation">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.</string>
<string name="activity_restore_title">Fiók visszaállítása</string>
<string name="activity_restore_explanation">Írja be azt a helyreállítási kifejezést, amelyet a fiók visszaállításához regisztrálásakor kapott.</string>
<string name="activity_restore_seed_edit_text_hint">Írja be a helyreállítási kifejezést</string>
@ -558,11 +558,6 @@
<string name="activity_home_leaving_group_failed_message">"Nem sikerült kilépni a csoportból"</string>
<string name="activity_home_delete_conversation_dialog_message">Biztosan törli ezt a beszélgetést?</string>
<string name="activity_home_conversation_deleted_message">A beszélgetés törölve</string>
<string name="activity_seed_title">A helyreállítási kifejezés</string>
<string name="activity_seed_title_2">Írja be a helyreállítási kifejezést</string>
<string name="activity_seed_explanation">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.</string>
<string name="activity_seed_reveal_button_title">Tartsa lenyomva, hogy felfedje</string>
<string name="view_seed_reminder_title">Már majdnem kész! 80%</string>
<string name="view_seed_reminder_subtitle_1">Biztosítsa fiókját a helyreállítási szöveg elmentésével</string>
<string name="view_seed_reminder_subtitle_2">É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.</string>
<string name="view_seed_reminder_subtitle_3">Ügyeljen arra, hogy a helyreállítási szöveget biztonságos helyen tárolja</string>
@ -607,7 +602,6 @@
<string name="activity_settings_devices_button_title">Eszközök</string>
<string name="activity_settings_invite_button_title">Barát meghívása</string>
<string name="activity_settings_faq_button_title">Gyakori kérdések</string>
<string name="activity_settings_recovery_phrase_button_title">Helyreállítási kódmondat</string>
<string name="activity_settings_clear_all_data_button_title">Adataid törlése</string>
<string name="activity_settings_clear_all_data_and_network_button_title">Adatok törlése, beleértve a hálózatot is</string>
<string name="activity_settings_help_translate_session">Segítsen nekünk a Session lefordításában</string>
@ -620,8 +614,6 @@
<string name="preferences_notifications_strategy_category_fast_mode_summary">A Google értesítési szerverein keresztül megbízhatóan és azonnal értesítést kap az új üzenetekről.</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Név módosítása</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Eszköz társításának megszüntetése</string>
<string name="dialog_seed_title">A helyreállítási kifejezés</string>
<string name="dialog_seed_explanation">Ez a helyreállítási kódmondatod. Ezzel, visszaálíthatod, vagy migrálhatod a Session azonosítódat egy új eszközre.</string>
<string name="dialog_clear_all_data_title">Az összes adat törlése</string>
<string name="dialog_clear_all_data_explanation">Ez végleg törölni fogja üzeneteit, beszélgetéseit és ismerőseit.</string>
<string name="dialog_clear_all_data_network_explanation">Csak ezt az eszközt szeretné törölni, vagy törölni szeretné az egész fiókját?</string>

View File

@ -540,8 +540,8 @@
<string name="view_fake_chat_bubble_3">Tehát nem gyűjti a személyes adataimat vagy a beszélgetés metaadatait? Hogyan működik?</string>
<string name="view_fake_chat_bubble_4">Fejlett anonim útválasztási és végponttól-végpontig titkosítási technológiák használatával.</string>
<string name="view_fake_chat_bubble_5">A barátként nem engedhetem, hogy megbízhatatlan üzenetküldő appokat használj. Szívesen.</string>
<string name="activity_register_title">Ismerd meg a Session ID-d</string>
<string name="activity_register_explanation">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.</string>
<string name="activity_restore_title">Fiók visszaállítása</string>
<string name="activity_restore_explanation">Írja be azt a helyreállítási kifejezést, amelyet a fiók visszaállításához regisztrálásakor kapott.</string>
<string name="activity_restore_seed_edit_text_hint">Írja be a helyreállítási kifejezést</string>
@ -558,11 +558,6 @@
<string name="activity_home_leaving_group_failed_message">"Nem sikerült kilépni a csoportból"</string>
<string name="activity_home_delete_conversation_dialog_message">Biztosan törli ezt a beszélgetést?</string>
<string name="activity_home_conversation_deleted_message">A beszélgetés törölve</string>
<string name="activity_seed_title">A helyreállítási kifejezés</string>
<string name="activity_seed_title_2">Írja be a helyreállítási kifejezést</string>
<string name="activity_seed_explanation">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.</string>
<string name="activity_seed_reveal_button_title">Tartsa lenyomva, hogy felfedje</string>
<string name="view_seed_reminder_title">Már majdnem kész! 80%</string>
<string name="view_seed_reminder_subtitle_1">Biztosítsa fiókját a helyreállítási szöveg elmentésével</string>
<string name="view_seed_reminder_subtitle_2">É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.</string>
<string name="view_seed_reminder_subtitle_3">Ügyeljen arra, hogy a helyreállítási szöveget biztonságos helyen tárolja</string>
@ -607,7 +602,6 @@
<string name="activity_settings_devices_button_title">Eszközök</string>
<string name="activity_settings_invite_button_title">Barát meghívása</string>
<string name="activity_settings_faq_button_title">Gyakori kérdések</string>
<string name="activity_settings_recovery_phrase_button_title">Helyreállítási kódmondat</string>
<string name="activity_settings_clear_all_data_button_title">Adataid törlése</string>
<string name="activity_settings_clear_all_data_and_network_button_title">Adatok törlése, beleértve a hálózatot is</string>
<string name="activity_settings_help_translate_session">Segítsen nekünk a Session lefordításában</string>
@ -620,8 +614,6 @@
<string name="preferences_notifications_strategy_category_fast_mode_summary">A Google értesítési szerverein keresztül megbízhatóan és azonnal értesítést kap az új üzenetekről.</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Név módosítása</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Eszköz társításának megszüntetése</string>
<string name="dialog_seed_title">A helyreállítási kifejezés</string>
<string name="dialog_seed_explanation">Ez a helyreállítási kódmondatod. Ezzel, visszaálíthatod, vagy migrálhatod a Session azonosítódat egy új eszközre.</string>
<string name="dialog_clear_all_data_title">Az összes adat törlése</string>
<string name="dialog_clear_all_data_explanation">Ez végleg törölni fogja üzeneteit, beszélgetéseit és ismerőseit.</string>
<string name="dialog_clear_all_data_network_explanation">Csak ezt az eszközt szeretné törölni, vagy törölni szeretné az egész fiókját?</string>

View File

@ -546,8 +546,8 @@
<string name="view_fake_chat_bubble_3">Դա նշանակում է, որ այն չի՞ հավաքում իմ անձնական տվյալները կամ իմ զրույցի մետատվյալները։</string>
<string name="view_fake_chat_bubble_4">Այն օգտվում է հատուկ տվյալների փոխանցման միջոցներից և ամբողջական կոդավորման տեխնոլոգիաներից։</string>
<string name="view_fake_chat_bubble_5">Ընկերները չեն թողնի ընկերներին, որ նրանք օգտվեն վտանգավոր նամակների ծրագրերից։ Խնդրեմ։</string>
<string name="activity_register_title">Ասեք «բարև» Ձեր Սեանսի ինքնությանը</string>
<string name="activity_register_explanation">Ձեր Սեանսի ինքնությունը հատուկ հասցե է, որը մարդիկ պիտի օգտագործեն Ձեզ հետ Սեանսով կապ հաստատելու համար։ Ձեր իրական ինքնության հետ կապ չունենալով, Ձեր Սեանսի ինքնությունն լիովին գաղտնի է։</string>
<string name="activity_restore_title">Վերականգնել ձեր հաշիվը</string>
<string name="activity_restore_explanation">Մուտքագրեք վերականգնման բառակապակցությունը, որը տրվել է ձեզ, երբ գրանցվել եք ձեր հաշիվը վերականգնելու համար:</string>
<string name="activity_restore_seed_edit_text_hint">Գրեք գաղտնի արտահայտությունը</string>
@ -564,11 +564,6 @@
<string name="activity_home_leaving_group_failed_message">"Չստացվեց հեռանալ խումբից"</string>
<string name="activity_home_delete_conversation_dialog_message">Վստա՞հ եք, որ ցանկանում եք ջնջել այս խոսակցությունը:</string>
<string name="activity_home_conversation_deleted_message">Ջնջված է</string>
<string name="activity_seed_title">Ձեր վերականգնման բառակապակցություն</string>
<string name="activity_seed_title_2">Ծանոթացեք ձեր վերականգնման բառակապակցության հետ</string>
<string name="activity_seed_explanation">Session այդին Ձեր Session բանալին է, որը կարող եք վերականգնել եթե կորցնեք ձեր սարքը, ձեր բանալին պահեք և մի տվեք ինչ-որ մեկին.</string>
<string name="activity_seed_reveal_button_title">Սեղմած պահեք տեսնելու համար</string>
<string name="view_seed_reminder_title">Դուք վերջացրել եք 80%</string>
<string name="view_seed_reminder_subtitle_1">Պահեք ձեր անվտանգությունը պահպանելով session-ի բանալին</string>
<string name="view_seed_reminder_subtitle_2">Հպեք և պահեք տրված բառերը՝ ձեր վերականգնման բանալին գտնելու համար, այնուհետև պահեք այն ապահով՝ ձեր Session ID-ն ապահով պահելու համար.</string>
<string name="view_seed_reminder_subtitle_3">Վստահ եղեք որ ձեր վերականգման բանալին հուսալի տեղում է</string>
@ -613,7 +608,6 @@
<string name="activity_settings_devices_button_title">Սարքեր</string>
<string name="activity_settings_invite_button_title">Հրավիրել ընկերոջը</string>
<string name="activity_settings_faq_button_title">Հաճախակի տրվող հարցեր</string>
<string name="activity_settings_recovery_phrase_button_title">Վերականգնման Արտահայտություն</string>
<string name="activity_settings_clear_all_data_button_title">Զրոյացնել</string>
<string name="activity_settings_clear_all_data_and_network_button_title">Մաքրել տվյալները, ներառյալ ցանցը</string>
<string name="activity_settings_help_translate_session">Օգնեք մեզ թարգմանելով Session֊ը</string>
@ -626,8 +620,6 @@
<string name="preferences_notifications_strategy_category_fast_mode_summary">Դուք մշտապես և անմիջապես կտեղեկացվեք նոր հաղորդագրությունների մասին՝ օգտագործելով Google-ի ծանուցումների սերվերները:</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Փոխել անունը</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Առանձնացնել սարքը</string>
<string name="dialog_seed_title">Ձեր վերականգնման բառակապակցություն</string>
<string name="dialog_seed_explanation">Սա ձեր վերականգնման բառակապակցություն է: Դրա միջոցով դուք կարող եք վերականգնել կամ տեղափոխել ձեր Session ID-ն նոր սարք:</string>
<string name="dialog_clear_all_data_title">Ջնջել բոլոր տվյալները</string>
<string name="dialog_clear_all_data_explanation">Սա ընդմիշտ կջնջի ձեր հաղորդագրությունները, սեսիաներն ու կոնտակտները:</string>
<string name="dialog_clear_all_data_network_explanation">Ցանկանու՞մ եք մաքրել միայն այս սարքը, թե՞ ջնջել ձեր ամբողջ հաշիվը:</string>

View File

@ -546,8 +546,8 @@
<string name="view_fake_chat_bubble_3">Դա նշանակում է, որ այն չի՞ հավաքում իմ անձնական տվյալները կամ իմ զրույցի մետատվյալները։</string>
<string name="view_fake_chat_bubble_4">Այն օգտվում է հատուկ տվյալների փոխանցման միջոցներից և ամբողջական կոդավորման տեխնոլոգիաներից։</string>
<string name="view_fake_chat_bubble_5">Ընկերները չեն թողնի ընկերներին, որ նրանք օգտվեն վտանգավոր նամակների ծրագրերից։ Խնդրեմ։</string>
<string name="activity_register_title">Ասեք «բարև» Ձեր Սեանսի ինքնությանը</string>
<string name="activity_register_explanation">Ձեր Սեանսի ինքնությունը հատուկ հասցե է, որը մարդիկ պիտի օգտագործեն Ձեզ հետ Սեանսով կապ հաստատելու համար։ Ձեր իրական ինքնության հետ կապ չունենալով, Ձեր Սեանսի ինքնությունն լիովին գաղտնի է։</string>
<string name="activity_restore_title">Վերականգնել ձեր հաշիվը</string>
<string name="activity_restore_explanation">Մուտքագրեք վերականգնման բառակապակցությունը, որը տրվել է ձեզ, երբ գրանցվել եք ձեր հաշիվը վերականգնելու համար:</string>
<string name="activity_restore_seed_edit_text_hint">Գրեք գաղտնի արտահայտությունը</string>
@ -564,11 +564,6 @@
<string name="activity_home_leaving_group_failed_message">"Չստացվեց հեռանալ խումբից"</string>
<string name="activity_home_delete_conversation_dialog_message">Վստա՞հ եք, որ ցանկանում եք ջնջել այս խոսակցությունը:</string>
<string name="activity_home_conversation_deleted_message">Ջնջված է</string>
<string name="activity_seed_title">Ձեր վերականգնման բառակապակցություն</string>
<string name="activity_seed_title_2">Ծանոթացեք ձեր վերականգնման բառակապակցության հետ</string>
<string name="activity_seed_explanation">Session այդին Ձեր Session բանալին է, որը կարող եք վերականգնել եթե կորցնեք ձեր սարքը, ձեր բանալին պահեք և մի տվեք ինչ-որ մեկին.</string>
<string name="activity_seed_reveal_button_title">Սեղմած պահեք տեսնելու համար</string>
<string name="view_seed_reminder_title">Դուք վերջացրել եք 80%</string>
<string name="view_seed_reminder_subtitle_1">Պահեք ձեր անվտանգությունը պահպանելով session-ի բանալին</string>
<string name="view_seed_reminder_subtitle_2">Հպեք և պահեք տրված բառերը՝ ձեր վերականգնման բանալին գտնելու համար, այնուհետև պահեք այն ապահով՝ ձեր Session ID-ն ապահով պահելու համար.</string>
<string name="view_seed_reminder_subtitle_3">Վստահ եղեք որ ձեր վերականգման բանալին հուսալի տեղում է</string>
@ -613,7 +608,6 @@
<string name="activity_settings_devices_button_title">Սարքեր</string>
<string name="activity_settings_invite_button_title">Հրավիրել ընկերոջը</string>
<string name="activity_settings_faq_button_title">Հաճախակի տրվող հարցեր</string>
<string name="activity_settings_recovery_phrase_button_title">Վերականգնման Արտահայտություն</string>
<string name="activity_settings_clear_all_data_button_title">Զրոյացնել</string>
<string name="activity_settings_clear_all_data_and_network_button_title">Մաքրել տվյալները, ներառյալ ցանցը</string>
<string name="activity_settings_help_translate_session">Օգնեք մեզ թարգմանելով Session֊ը</string>
@ -626,8 +620,6 @@
<string name="preferences_notifications_strategy_category_fast_mode_summary">Դուք մշտապես և անմիջապես կտեղեկացվեք նոր հաղորդագրությունների մասին՝ օգտագործելով Google-ի ծանուցումների սերվերները:</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Փոխել անունը</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Առանձնացնել սարքը</string>
<string name="dialog_seed_title">Ձեր վերականգնման բառակապակցություն</string>
<string name="dialog_seed_explanation">Սա ձեր վերականգնման բառակապակցություն է: Դրա միջոցով դուք կարող եք վերականգնել կամ տեղափոխել ձեր Session ID-ն նոր սարք:</string>
<string name="dialog_clear_all_data_title">Ջնջել բոլոր տվյալները</string>
<string name="dialog_clear_all_data_explanation">Սա ընդմիշտ կջնջի ձեր հաղորդագրությունները, սեսիաներն ու կոնտակտները:</string>
<string name="dialog_clear_all_data_network_explanation">Ցանկանու՞մ եք մաքրել միայն այս սարքը, թե՞ ջնջել ձեր ամբողջ հաշիվը:</string>

View File

@ -414,8 +414,8 @@
<string name="invalid_url">URL salah</string>
<string name="copied_to_clipboard">Salin ke clipboard</string>
<string name="next">Berikutnya</string>
<string name="activity_register_title">Ucapkan halo pada Session ID anda</string>
<string name="activity_register_explanation">Session ID adalah alamat unik yang bisa digunakan untuk mengontak anda. Tanpa koneksi dengan identitas asli, Session ID anda didesain bersifat anonim dan rahasia.</string>
<string name="activity_restore_title">Memulihkan akun Anda</string>
<string name="activity_restore_explanation">Masukkan kata pemulihan yang diberikan saat anda masuk untuk memulihkan akun anda.</string>
<string name="activity_restore_seed_edit_text_hint">Masukan kata pemulihan</string>
@ -431,10 +431,6 @@
<string name="activity_home_leave_group_dialog_message">Apakah anda yakin ingin meninggalkan grup ini?</string>
<string name="activity_home_leaving_group_failed_message">"Tidak dapat meninggalkan grup"</string>
<string name="activity_home_conversation_deleted_message">Percakapan dihapus</string>
<string name="activity_seed_title">Kata pemulihan anda</string>
<string name="activity_seed_title_2">Inilah kata pemulihan anda</string>
<string name="activity_seed_reveal_button_title">Tekan untuk melihat</string>
<string name="view_seed_reminder_title">Hampir selesai! 80%</string>
<string name="activity_path_device_row_title">Anda</string>
<string name="activity_path_destination_row_title">Tujuan</string>
<string name="activity_path_learn_more_button_title">Selengkapnya</string>

View File

@ -414,8 +414,6 @@
<string name="invalid_url">URL salah</string>
<string name="copied_to_clipboard">Salin ke clipboard</string>
<string name="next">Berikutnya</string>
<string name="activity_register_title">Ucapkan halo pada Session ID anda</string>
<string name="activity_register_explanation">Session ID adalah alamat unik yang bisa digunakan untuk mengontak anda. Tanpa koneksi dengan identitas asli, Session ID anda didesain bersifat anonim dan rahasia.</string>
<string name="activity_restore_title">Memulihkan akun Anda</string>
<string name="activity_restore_explanation">Masukkan kata pemulihan yang diberikan saat anda masuk untuk memulihkan akun anda.</string>
<string name="activity_restore_seed_edit_text_hint">Masukan kata pemulihan</string>
@ -431,10 +429,6 @@
<string name="activity_home_leave_group_dialog_message">Apakah anda yakin ingin meninggalkan grup ini?</string>
<string name="activity_home_leaving_group_failed_message">"Tidak dapat meninggalkan grup"</string>
<string name="activity_home_conversation_deleted_message">Percakapan dihapus</string>
<string name="activity_seed_title">Kata pemulihan anda</string>
<string name="activity_seed_title_2">Inilah kata pemulihan anda</string>
<string name="activity_seed_reveal_button_title">Tekan untuk melihat</string>
<string name="view_seed_reminder_title">Hampir selesai! 80%</string>
<string name="activity_path_device_row_title">Anda</string>
<string name="activity_path_destination_row_title">Tujuan</string>
<string name="activity_path_learn_more_button_title">Selengkapnya</string>

View File

@ -539,8 +539,8 @@ scambia un altro messaggio!</string>
<string name="view_fake_chat_bubble_3">Quindi non raccoglie informazioni personali o metadati di conversazione? Come funziona?</string>
<string name="view_fake_chat_bubble_4">Utilizza una combinazione di tecnologie avanzate come instradamento anonimo e crittografia end-to-end.</string>
<string name="view_fake_chat_bubble_5">Gli amici non lasciano che i propri amici utilizzino app di messaggistica compromesse. Benvenuto/a.</string>
<string name="activity_register_title">Ecco il tuo ID Sessione</string>
<string name="activity_register_explanation">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.</string>
<string name="activity_restore_title">Ripristina il tuo account</string>
<string name="activity_restore_explanation">Inserisci la frase di recupero che ti è stata data quando ti sei registrato per ripristinare il tuo account.</string>
<string name="activity_restore_seed_edit_text_hint">Inserisci la frase di recupero</string>
@ -557,11 +557,6 @@ scambia un altro messaggio!</string>
<string name="activity_home_leaving_group_failed_message">"Impossibile lasciare il gruppo"</string>
<string name="activity_home_delete_conversation_dialog_message">Sei sicuro di voler eliminare questa conversazione?</string>
<string name="activity_home_conversation_deleted_message">Conversazione eliminata</string>
<string name="activity_seed_title">Frase di recupero</string>
<string name="activity_seed_title_2">La frase di recupero</string>
<string name="activity_seed_explanation">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.</string>
<string name="activity_seed_reveal_button_title">Tieni premuto per rivelare</string>
<string name="view_seed_reminder_title">Hai quasi finito! 80%</string>
<string name="view_seed_reminder_subtitle_1">Proteggi il tuo account salvando la frase di recupero</string>
<string name="view_seed_reminder_subtitle_2">Tocca e tieni premute le parole redatte per rivelare la frase di recupero, salva in modo sicuro per proteggere il tuo ID Sessione.</string>
<string name="view_seed_reminder_subtitle_3">Assicurati di salvare la frase di recupero in un luogo sicuro</string>
@ -606,7 +601,6 @@ scambia un altro messaggio!</string>
<string name="activity_settings_devices_button_title">Dispositivi</string>
<string name="activity_settings_invite_button_title">Invita un amico</string>
<string name="activity_settings_faq_button_title">FAQ</string>
<string name="activity_settings_recovery_phrase_button_title">Frase di recupero</string>
<string name="activity_settings_clear_all_data_button_title">Elimina dati</string>
<string name="activity_settings_clear_all_data_and_network_button_title">Cancella i dati e la rete</string>
<string name="activity_settings_help_translate_session">Aiutaci a tradurre Session</string>
@ -619,8 +613,6 @@ scambia un altro messaggio!</string>
<string name="preferences_notifications_strategy_category_fast_mode_summary">Riceverai notifiche di nuovi messaggi in modo affidabile e immediato utilizzando i server di notifica di Google.</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Cambia nome</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Scollega dispositivo</string>
<string name="dialog_seed_title">Frase di recupero</string>
<string name="dialog_seed_explanation">Questa è la tua frase di recupero. Usala per ripristinare o migrare l\'ID Sessione a un nuovo dispositivo.</string>
<string name="dialog_clear_all_data_title">Elimina tutti i dati</string>
<string name="dialog_clear_all_data_explanation">Ciò eliminerà permanentemente i tuoi messaggi, sessioni e contatti.</string>
<string name="dialog_clear_all_data_network_explanation">Vuoi formattare solo questo dispositivo o cancellare del tutto l\'account?</string>

View File

@ -539,8 +539,8 @@ scambia un altro messaggio!</string>
<string name="view_fake_chat_bubble_3">Quindi non raccoglie informazioni personali o metadati di conversazione? Come funziona?</string>
<string name="view_fake_chat_bubble_4">Utilizza una combinazione di tecnologie avanzate come instradamento anonimo e crittografia end-to-end.</string>
<string name="view_fake_chat_bubble_5">Gli amici non lasciano che i propri amici utilizzino app di messaggistica compromesse. Benvenuto/a.</string>
<string name="activity_register_title">Ecco il tuo ID Sessione</string>
<string name="activity_register_explanation">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.</string>
<string name="activity_restore_title">Ripristina il tuo account</string>
<string name="activity_restore_explanation">Inserisci la frase di recupero che ti è stata data quando ti sei registrato per ripristinare il tuo account.</string>
<string name="activity_restore_seed_edit_text_hint">Inserisci la frase di recupero</string>
@ -557,11 +557,6 @@ scambia un altro messaggio!</string>
<string name="activity_home_leaving_group_failed_message">"Impossibile lasciare il gruppo"</string>
<string name="activity_home_delete_conversation_dialog_message">Sei sicuro di voler eliminare questa conversazione?</string>
<string name="activity_home_conversation_deleted_message">Conversazione eliminata</string>
<string name="activity_seed_title">Frase di recupero</string>
<string name="activity_seed_title_2">La frase di recupero</string>
<string name="activity_seed_explanation">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.</string>
<string name="activity_seed_reveal_button_title">Tieni premuto per rivelare</string>
<string name="view_seed_reminder_title">Hai quasi finito! 80%</string>
<string name="view_seed_reminder_subtitle_1">Proteggi il tuo account salvando la frase di recupero</string>
<string name="view_seed_reminder_subtitle_2">Tocca e tieni premute le parole redatte per rivelare la frase di recupero, salva in modo sicuro per proteggere il tuo ID Sessione.</string>
<string name="view_seed_reminder_subtitle_3">Assicurati di salvare la frase di recupero in un luogo sicuro</string>
@ -606,7 +601,6 @@ scambia un altro messaggio!</string>
<string name="activity_settings_devices_button_title">Dispositivi</string>
<string name="activity_settings_invite_button_title">Invita un amico</string>
<string name="activity_settings_faq_button_title">FAQ</string>
<string name="activity_settings_recovery_phrase_button_title">Frase di recupero</string>
<string name="activity_settings_clear_all_data_button_title">Elimina dati</string>
<string name="activity_settings_clear_all_data_and_network_button_title">Cancella i dati e la rete</string>
<string name="activity_settings_help_translate_session">Aiutaci a tradurre Session</string>
@ -619,8 +613,6 @@ scambia un altro messaggio!</string>
<string name="preferences_notifications_strategy_category_fast_mode_summary">Riceverai notifiche di nuovi messaggi in modo affidabile e immediato utilizzando i server di notifica di Google.</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Cambia nome</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Scollega dispositivo</string>
<string name="dialog_seed_title">Frase di recupero</string>
<string name="dialog_seed_explanation">Questa è la tua frase di recupero. Usala per ripristinare o migrare l\'ID Sessione a un nuovo dispositivo.</string>
<string name="dialog_clear_all_data_title">Elimina tutti i dati</string>
<string name="dialog_clear_all_data_explanation">Ciò eliminerà permanentemente i tuoi messaggi, sessioni e contatti.</string>
<string name="dialog_clear_all_data_network_explanation">Vuoi formattare solo questo dispositivo o cancellare del tutto l\'account?</string>

View File

@ -523,8 +523,8 @@
<string name="view_fake_chat_bubble_3">個人情報や会話のメタデータは収集されませんか?どのように機能しますか?</string>
<string name="view_fake_chat_bubble_4">高度な匿名ルーティングとエンドツーエンドの暗号化テクノロジーを組み合わせて使用します。</string>
<string name="view_fake_chat_bubble_5">友人は、セキュリティ侵害されたメッセンジャーを自らの友人に使用させません。どういたしまして。</string>
<string name="activity_register_title">Session ID をご紹介します</string>
<string name="activity_register_explanation">Session ID は、Session で連絡を取るために使用できる一意のアドレスです。本当のアイデンティティに関係なく、あなたの Session ID は設計上完全に匿名でプライベートです。</string>
<string name="activity_restore_title">アカウントを復元する</string>
<string name="activity_restore_explanation">アカウントを復元するためにサインアップしたときに与えられたリカバリーフレーズを入力します。</string>
<string name="activity_restore_seed_edit_text_hint">リカバリーフレーズを入力してください</string>
@ -541,11 +541,6 @@
<string name="activity_home_leaving_group_failed_message">"グループを脱退できませんでした"</string>
<string name="activity_home_delete_conversation_dialog_message">この会話を削除してもよろしいですか?</string>
<string name="activity_home_conversation_deleted_message">会話を削除しました</string>
<string name="activity_seed_title">あなたのリカバリーフレーズ</string>
<string name="activity_seed_title_2">リカバリーフレーズに合致する</string>
<string name="activity_seed_explanation">リカバリーフレーズは、Session ID のマスターキーです。デバイスにアクセスできなくなった場合、これを使用して Session ID を復元できます。リカバリーフレーズを安全な場所に保管し、誰にも教えないでください。</string>
<string name="activity_seed_reveal_button_title">明らかにする</string>
<string name="view_seed_reminder_title">あと少しで終了です。80%</string>
<string name="view_seed_reminder_subtitle_1">リカバリーフレーズを保存してアカウントを保護する</string>
<string name="view_seed_reminder_subtitle_2">編集された単語をタップして長押ししてリカバリーフレーズを表示し、それを安全に保管して Session ID を保護します。</string>
<string name="view_seed_reminder_subtitle_3">リカバリーフレーズは安全な場所に保管してください</string>
@ -590,7 +585,6 @@
<string name="activity_settings_devices_button_title">デバイス</string>
<string name="activity_settings_invite_button_title">友達を招待</string>
<string name="activity_settings_faq_button_title">よくある質問</string>
<string name="activity_settings_recovery_phrase_button_title">リカバリーフレーズ</string>
<string name="activity_settings_clear_all_data_button_title">データを消去する</string>
<string name="activity_settings_clear_all_data_and_network_button_title">ネットワークを含むデータを消去</string>
<string name="activity_settings_help_translate_session">セッションの翻訳にご協力ください</string>
@ -603,8 +597,6 @@
<string name="preferences_notifications_strategy_category_fast_mode_summary">Googleの通知サーバーを使用して、新しいメッセージが確実かつ即座に通知されます。</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">名前を変更する</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">デバイスのリンクを解除する</string>
<string name="dialog_seed_title">あなたのリカバリーフレーズ</string>
<string name="dialog_seed_explanation">これはあなたのリカバリーフレーズです。これにより、Session ID を新しいデバイスに復元または移行できます。</string>
<string name="dialog_clear_all_data_title">すべてのデータを消去する</string>
<string name="dialog_clear_all_data_explanation">これにより、メッセージ、Session、連絡先が完全に削除されます。</string>
<string name="dialog_clear_all_data_network_explanation">この端末のみを消去するか、アカウント全体を削除しますか?</string>

View File

@ -523,8 +523,8 @@
<string name="view_fake_chat_bubble_3">個人情報や会話のメタデータは収集されませんか?どのように機能しますか?</string>
<string name="view_fake_chat_bubble_4">高度な匿名ルーティングとエンドツーエンドの暗号化テクノロジーを組み合わせて使用します。</string>
<string name="view_fake_chat_bubble_5">友人は、セキュリティ侵害されたメッセンジャーを自らの友人に使用させません。どういたしまして。</string>
<string name="activity_register_title">Session ID をご紹介します</string>
<string name="activity_register_explanation">Session ID は、Session で連絡を取るために使用できる一意のアドレスです。本当のアイデンティティに関係なく、あなたの Session ID は設計上完全に匿名でプライベートです。</string>
<string name="activity_restore_title">アカウントを復元する</string>
<string name="activity_restore_explanation">アカウントを復元するためにサインアップしたときに与えられたリカバリーフレーズを入力します。</string>
<string name="activity_restore_seed_edit_text_hint">リカバリーフレーズを入力してください</string>
@ -541,11 +541,6 @@
<string name="activity_home_leaving_group_failed_message">"グループを脱退できませんでした"</string>
<string name="activity_home_delete_conversation_dialog_message">この会話を削除してもよろしいですか?</string>
<string name="activity_home_conversation_deleted_message">会話を削除しました</string>
<string name="activity_seed_title">あなたのリカバリーフレーズ</string>
<string name="activity_seed_title_2">リカバリーフレーズに合致する</string>
<string name="activity_seed_explanation">リカバリーフレーズは、Session ID のマスターキーです。デバイスにアクセスできなくなった場合、これを使用して Session ID を復元できます。リカバリーフレーズを安全な場所に保管し、誰にも教えないでください。</string>
<string name="activity_seed_reveal_button_title">明らかにする</string>
<string name="view_seed_reminder_title">あと少しで終了です。80%</string>
<string name="view_seed_reminder_subtitle_1">リカバリーフレーズを保存してアカウントを保護する</string>
<string name="view_seed_reminder_subtitle_2">編集された単語をタップして長押ししてリカバリーフレーズを表示し、それを安全に保管して Session ID を保護します。</string>
<string name="view_seed_reminder_subtitle_3">リカバリーフレーズは安全な場所に保管してください</string>
@ -590,7 +585,6 @@
<string name="activity_settings_devices_button_title">デバイス</string>
<string name="activity_settings_invite_button_title">友達を招待</string>
<string name="activity_settings_faq_button_title">よくある質問</string>
<string name="activity_settings_recovery_phrase_button_title">リカバリーフレーズ</string>
<string name="activity_settings_clear_all_data_button_title">データを消去する</string>
<string name="activity_settings_clear_all_data_and_network_button_title">ネットワークを含むデータを消去</string>
<string name="activity_settings_help_translate_session">セッションの翻訳にご協力ください</string>
@ -603,8 +597,6 @@
<string name="preferences_notifications_strategy_category_fast_mode_summary">Googleの通知サーバーを使用して、新しいメッセージが確実かつ即座に通知されます。</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">名前を変更する</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">デバイスのリンクを解除する</string>
<string name="dialog_seed_title">あなたのリカバリーフレーズ</string>
<string name="dialog_seed_explanation">これはあなたのリカバリーフレーズです。これにより、Session ID を新しいデバイスに復元または移行できます。</string>
<string name="dialog_clear_all_data_title">すべてのデータを消去する</string>
<string name="dialog_clear_all_data_explanation">これにより、メッセージ、Session、連絡先が完全に削除されます。</string>
<string name="dialog_clear_all_data_network_explanation">この端末のみを消去するか、アカウント全体を削除しますか?</string>

View File

@ -409,7 +409,6 @@
<string name="your_session_id">당신의 세션 ID</string>
<string name="activity_home_empty_state_message">아직 연락처가 없습니다</string>
<string name="activity_home_empty_state_button_title">세션 시작하기</string>
<string name="activity_seed_title">당신의 복구 코드</string>
<string name="activity_path_explanation">Session 분산 네트워크의 여러 서비스 노드를 통해 메시지를 분산해 IP를 숨깁니다. 이들이 현재 연결을 분산하는 국가입니다:</string>
<string name="activity_path_device_row_title">당신</string>
<string name="activity_path_destination_row_title">목적지</string>
@ -422,13 +421,10 @@
<string name="activity_settings_notifications_button_title">알림</string>
<string name="activity_settings_invite_button_title">친구 초대</string>
<string name="activity_settings_faq_button_title">자주 하는 질문</string>
<string name="activity_settings_recovery_phrase_button_title">복구 코드</string>
<string name="activity_settings_clear_all_data_button_title">데이터 지우기</string>
<string name="activity_settings_help_translate_session">세션을 번역하는 데 기여하기</string>
<string name="activity_notification_settings_title">알림</string>
<string name="activity_privacy_settings_title">개인정보</string>
<string name="dialog_seed_title">당신의 복구 코드</string>
<string name="dialog_seed_explanation">이것은 당신의 복구 코드입니다. 이것으로 세션 ID를 새 장치로 복원하거나 이동할 수 있습니다.</string>
<string name="dialog_clear_all_data_explanation">메시지, 세션 및 연락처가 영구적으로 삭제됩니다.</string>
<string name="activity_qr_code_title">QR 코드</string>
<string name="activity_qr_code_view_my_qr_code_tab_title">내 QR 코드 보기</string>

View File

@ -409,7 +409,6 @@
<string name="your_session_id">당신의 세션 ID</string>
<string name="activity_home_empty_state_message">아직 연락처가 없습니다</string>
<string name="activity_home_empty_state_button_title">세션 시작하기</string>
<string name="activity_seed_title">당신의 복구 코드</string>
<string name="activity_path_explanation">Session 분산 네트워크의 여러 서비스 노드를 통해 메시지를 분산해 IP를 숨깁니다. 이들이 현재 연결을 분산하는 국가입니다:</string>
<string name="activity_path_device_row_title">당신</string>
<string name="activity_path_destination_row_title">목적지</string>
@ -422,13 +421,10 @@
<string name="activity_settings_notifications_button_title">알림</string>
<string name="activity_settings_invite_button_title">친구 초대</string>
<string name="activity_settings_faq_button_title">자주 하는 질문</string>
<string name="activity_settings_recovery_phrase_button_title">복구 코드</string>
<string name="activity_settings_clear_all_data_button_title">데이터 지우기</string>
<string name="activity_settings_help_translate_session">세션을 번역하는 데 기여하기</string>
<string name="activity_notification_settings_title">알림</string>
<string name="activity_privacy_settings_title">개인정보</string>
<string name="dialog_seed_title">당신의 복구 코드</string>
<string name="dialog_seed_explanation">이것은 당신의 복구 코드입니다. 이것으로 세션 ID를 새 장치로 복원하거나 이동할 수 있습니다.</string>
<string name="dialog_clear_all_data_explanation">메시지, 세션 및 연락처가 영구적으로 삭제됩니다.</string>
<string name="activity_qr_code_title">QR 코드</string>
<string name="activity_qr_code_view_my_qr_code_tab_title">내 QR 코드 보기</string>

View File

@ -556,8 +556,8 @@
<string name="view_fake_chat_bubble_3">Ji nerenka mano asmeninės informacijos ar mano pokalbių metaduomenų? Kaip ji veikia?</string>
<string name="view_fake_chat_bubble_4">Naudodama išplėstinio anoniminio nukreipimo ir ištisinio šifravimo technologijų kombinaciją.</string>
<string name="view_fake_chat_bubble_5">Draugai neleidžia savo draugams naudotis į pavojų statančiomis programėlėmis. Prašom.</string>
<string name="activity_register_title">Pasisveikinkite su savo Session ID</string>
<string name="activity_register_explanation">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.</string>
<string name="activity_restore_title">Atkurkite savo paskyrą</string>
<string name="activity_restore_seed_edit_text_hint">Įveskite savo atkūrimo frazę</string>
<string name="activity_display_name_title_2">Pasirinkite savo rodomą vardą</string>
@ -572,10 +572,6 @@
<string name="activity_home_leaving_group_failed_message">"Nepavyko išeiti iš grupės"</string>
<string name="activity_home_delete_conversation_dialog_message">Ar tikrai norite ištrinti šį pokalbį?</string>
<string name="activity_home_conversation_deleted_message">Pokalbis ištrintas</string>
<string name="activity_seed_title">Jūsų atkūrimo frazė</string>
<string name="activity_seed_title_2">Pasitikite savo atkūrimo frazę</string>
<string name="activity_seed_explanation">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.</string>
<string name="view_seed_reminder_title">Beveik užbaigėte! 80%</string>
<string name="view_seed_reminder_subtitle_1">Apsaugokite savo paskyrą įsirašydami atkūrimo frazę</string>
<string name="view_seed_reminder_subtitle_2">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.</string>
<string name="view_seed_reminder_subtitle_3">Užtikrinkite, kad laikytumėte savo atkūrimo frazę saugioje vietoje</string>
@ -611,7 +607,6 @@
<string name="activity_settings_notifications_button_title">Pranešimai</string>
<string name="activity_settings_chats_button_title">Pokalbiai</string>
<string name="activity_settings_devices_button_title">Įrenginiai</string>
<string name="activity_settings_recovery_phrase_button_title">Atkūrimo frazė</string>
<string name="activity_settings_clear_all_data_button_title">Išvalyti duomenis</string>
<string name="activity_settings_help_translate_session">Padėkite išversti Session</string>
<string name="activity_notification_settings_title">Pranešimai</string>
@ -623,8 +618,6 @@
<string name="preferences_notifications_strategy_category_fast_mode_summary">Jums bus nedelsiant ir patikimai pranešama apie naujas žinutes, naudojant „Google“ pranešimų serverius.</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Keisti pavadinimą</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Atsieti įrenginį</string>
<string name="dialog_seed_title">Jūsų atkūrimo frazė</string>
<string name="dialog_seed_explanation">Tai yra jūsų atkūrimo frazė. Naudodami ją, galite atkurti ir perkelti savo Session ID į naują įrenginį.</string>
<string name="dialog_clear_all_data_title">Išvalyti visus duomenis</string>
<string name="dialog_clear_all_data_explanation">Tai visam laikui ištrins jūsų žinutes, seansus ir adresatus.</string>
<string name="dialog_clear_all_data_local_only">Tik ištrinti</string>

View File

@ -556,8 +556,8 @@
<string name="view_fake_chat_bubble_3">Ji nerenka mano asmeninės informacijos ar mano pokalbių metaduomenų? Kaip ji veikia?</string>
<string name="view_fake_chat_bubble_4">Naudodama išplėstinio anoniminio nukreipimo ir ištisinio šifravimo technologijų kombinaciją.</string>
<string name="view_fake_chat_bubble_5">Draugai neleidžia savo draugams naudotis į pavojų statančiomis programėlėmis. Prašom.</string>
<string name="activity_register_title">Pasisveikinkite su savo Session ID</string>
<string name="activity_register_explanation">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.</string>
<string name="activity_restore_title">Atkurkite savo paskyrą</string>
<string name="activity_restore_seed_edit_text_hint">Įveskite savo atkūrimo frazę</string>
<string name="activity_display_name_title_2">Pasirinkite savo rodomą vardą</string>
@ -572,10 +572,6 @@
<string name="activity_home_leaving_group_failed_message">"Nepavyko išeiti iš grupės"</string>
<string name="activity_home_delete_conversation_dialog_message">Ar tikrai norite ištrinti šį pokalbį?</string>
<string name="activity_home_conversation_deleted_message">Pokalbis ištrintas</string>
<string name="activity_seed_title">Jūsų atkūrimo frazė</string>
<string name="activity_seed_title_2">Pasitikite savo atkūrimo frazę</string>
<string name="activity_seed_explanation">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.</string>
<string name="view_seed_reminder_title">Beveik užbaigėte! 80%</string>
<string name="view_seed_reminder_subtitle_1">Apsaugokite savo paskyrą įsirašydami atkūrimo frazę</string>
<string name="view_seed_reminder_subtitle_2">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.</string>
<string name="view_seed_reminder_subtitle_3">Užtikrinkite, kad laikytumėte savo atkūrimo frazę saugioje vietoje</string>
@ -611,7 +607,6 @@
<string name="activity_settings_notifications_button_title">Pranešimai</string>
<string name="activity_settings_chats_button_title">Pokalbiai</string>
<string name="activity_settings_devices_button_title">Įrenginiai</string>
<string name="activity_settings_recovery_phrase_button_title">Atkūrimo frazė</string>
<string name="activity_settings_clear_all_data_button_title">Išvalyti duomenis</string>
<string name="activity_settings_help_translate_session">Padėkite išversti Session</string>
<string name="activity_notification_settings_title">Pranešimai</string>
@ -623,8 +618,6 @@
<string name="preferences_notifications_strategy_category_fast_mode_summary">Jums bus nedelsiant ir patikimai pranešama apie naujas žinutes, naudojant „Google“ pranešimų serverius.</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Keisti pavadinimą</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Atsieti įrenginį</string>
<string name="dialog_seed_title">Jūsų atkūrimo frazė</string>
<string name="dialog_seed_explanation">Tai yra jūsų atkūrimo frazė. Naudodami ją, galite atkurti ir perkelti savo Session ID į naują įrenginį.</string>
<string name="dialog_clear_all_data_title">Išvalyti visus duomenis</string>
<string name="dialog_clear_all_data_explanation">Tai visam laikui ištrins jūsų žinutes, seansus ir adresatus.</string>
<string name="dialog_clear_all_data_local_only">Tik ištrinti</string>

View File

@ -187,7 +187,6 @@
<string name="activity_settings_devices_button_title">Ierīces</string>
<string name="activity_settings_invite_button_title">Uzaicināt draugu</string>
<string name="activity_settings_faq_button_title">Biežāk uzdotie jautājumi</string>
<string name="activity_settings_recovery_phrase_button_title">Atjaunošanas frāze</string>
<string name="activity_settings_clear_all_data_button_title">Izdzēst datus</string>
<string name="activity_settings_help_translate_session">Palīdzi mums pārtulkot Session</string>
<string name="activity_notification_settings_title">Paziņojumi</string>

View File

@ -187,7 +187,6 @@
<string name="activity_settings_devices_button_title">Ierīces</string>
<string name="activity_settings_invite_button_title">Uzaicināt draugu</string>
<string name="activity_settings_faq_button_title">Biežāk uzdotie jautājumi</string>
<string name="activity_settings_recovery_phrase_button_title">Atjaunošanas frāze</string>
<string name="activity_settings_clear_all_data_button_title">Izdzēst datus</string>
<string name="activity_settings_help_translate_session">Palīdzi mums pārtulkot Session</string>
<string name="activity_notification_settings_title">Paziņojumi</string>

View File

@ -538,8 +538,8 @@ nøkkelutvekslingsmelding.</string>
<string name="view_fake_chat_bubble_3">Så den henter ikke min personlige informasjon eller samtaletadata? Hvordan virker det?</string>
<string name="view_fake_chat_bubble_4">Bruker en kombinasjon av avansert anonym ruting og ende-til-ende-krypteringsteknologi.</string>
<string name="view_fake_chat_bubble_5">Venner lar ikke venner bruke kompromitterte meldinger. Du er velkommen.</string>
<string name="activity_register_title">Si hei til din Session-ID</string>
<string name="activity_register_explanation">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.</string>
<string name="activity_restore_title">Gjenopprett kontoen din</string>
<string name="activity_restore_explanation">Angi gjenopprettingsfrasen som ble gitt til deg når du registrerte deg for å gjenopprette din konto.</string>
<string name="activity_restore_seed_edit_text_hint">Skriv inn din gjenopprettelsesfrase</string>
@ -556,11 +556,6 @@ nøkkelutvekslingsmelding.</string>
<string name="activity_home_leaving_group_failed_message">"Kunne ikke forlate gruppen"</string>
<string name="activity_home_delete_conversation_dialog_message">Er du sikker på at du vil slette denne samtalen?</string>
<string name="activity_home_conversation_deleted_message">Samtalen slettet</string>
<string name="activity_seed_title">Din gjenopprettingsfrase</string>
<string name="activity_seed_title_2">Møt din gjenopprettingsfrase</string>
<string name="activity_seed_explanation">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.</string>
<string name="activity_seed_reveal_button_title">Hold for å vise</string>
<string name="view_seed_reminder_title">Du er nesten ferdig! 80%</string>
<string name="view_seed_reminder_subtitle_1">Sikre kontoen din ved å lagre din gjenopprettingsfrase</string>
<string name="view_seed_reminder_subtitle_2">Trykk og hold inne de overflødige ordene for å hente gjenopprettingsfrasen din, og lagre den trygt å sikre din Session-ID.</string>
<string name="view_seed_reminder_subtitle_3">Pass på å lagre gjenopprettingsfrasen på et sikkert sted</string>
@ -605,7 +600,6 @@ nøkkelutvekslingsmelding.</string>
<string name="activity_settings_devices_button_title">Enheter</string>
<string name="activity_settings_invite_button_title">Inviter en venn</string>
<string name="activity_settings_faq_button_title">Ofte Stilte Spørsmål</string>
<string name="activity_settings_recovery_phrase_button_title">Gjenopprettingsfrase</string>
<string name="activity_settings_clear_all_data_button_title">Fjern data</string>
<string name="activity_settings_clear_all_data_and_network_button_title">Fjern data inkludert nettverk</string>
<string name="activity_settings_help_translate_session">Hjelp oss med å oversette Session</string>
@ -618,8 +612,6 @@ nøkkelutvekslingsmelding.</string>
<string name="preferences_notifications_strategy_category_fast_mode_summary">Du vil bli varslet om nye meldinger på en pålitelig måte, og umiddelbart ved hjelp av Googles varslingsservere.</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Endre navn</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Koble fra enhet</string>
<string name="dialog_seed_title">Din gjenopprettingsfrase</string>
<string name="dialog_seed_explanation">Dette er din gjenopprettingsfrase, med den, du kan gjenopprette eller overføre din Session-ID til en ny enhet.</string>
<string name="dialog_clear_all_data_title">Fjern alle data</string>
<string name="dialog_clear_all_data_explanation">Dette vil permanent slette dine meldinger, økter og kontakter.</string>
<string name="dialog_clear_all_data_network_explanation">Ønsker du å rense kun denne enheten, eller slette hele kontoen din?</string>

View File

@ -538,8 +538,8 @@ nøkkelutvekslingsmelding.</string>
<string name="view_fake_chat_bubble_3">Så den henter ikke min personlige informasjon eller samtaletadata? Hvordan virker det?</string>
<string name="view_fake_chat_bubble_4">Bruker en kombinasjon av avansert anonym ruting og ende-til-ende-krypteringsteknologi.</string>
<string name="view_fake_chat_bubble_5">Venner lar ikke venner bruke kompromitterte meldinger. Du er velkommen.</string>
<string name="activity_register_title">Si hei til din Session-ID</string>
<string name="activity_register_explanation">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.</string>
<string name="activity_restore_title">Gjenopprett kontoen din</string>
<string name="activity_restore_explanation">Angi gjenopprettingsfrasen som ble gitt til deg når du registrerte deg for å gjenopprette din konto.</string>
<string name="activity_restore_seed_edit_text_hint">Skriv inn din gjenopprettelsesfrase</string>
@ -556,11 +556,6 @@ nøkkelutvekslingsmelding.</string>
<string name="activity_home_leaving_group_failed_message">"Kunne ikke forlate gruppen"</string>
<string name="activity_home_delete_conversation_dialog_message">Er du sikker på at du vil slette denne samtalen?</string>
<string name="activity_home_conversation_deleted_message">Samtalen slettet</string>
<string name="activity_seed_title">Din gjenopprettingsfrase</string>
<string name="activity_seed_title_2">Møt din gjenopprettingsfrase</string>
<string name="activity_seed_explanation">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.</string>
<string name="activity_seed_reveal_button_title">Hold for å vise</string>
<string name="view_seed_reminder_title">Du er nesten ferdig! 80%</string>
<string name="view_seed_reminder_subtitle_1">Sikre kontoen din ved å lagre din gjenopprettingsfrase</string>
<string name="view_seed_reminder_subtitle_2">Trykk og hold inne de overflødige ordene for å hente gjenopprettingsfrasen din, og lagre den trygt å sikre din Session-ID.</string>
<string name="view_seed_reminder_subtitle_3">Pass på å lagre gjenopprettingsfrasen på et sikkert sted</string>
@ -605,7 +600,6 @@ nøkkelutvekslingsmelding.</string>
<string name="activity_settings_devices_button_title">Enheter</string>
<string name="activity_settings_invite_button_title">Inviter en venn</string>
<string name="activity_settings_faq_button_title">Ofte Stilte Spørsmål</string>
<string name="activity_settings_recovery_phrase_button_title">Gjenopprettingsfrase</string>
<string name="activity_settings_clear_all_data_button_title">Fjern data</string>
<string name="activity_settings_clear_all_data_and_network_button_title">Fjern data inkludert nettverk</string>
<string name="activity_settings_help_translate_session">Hjelp oss med å oversette Session</string>
@ -618,8 +612,6 @@ nøkkelutvekslingsmelding.</string>
<string name="preferences_notifications_strategy_category_fast_mode_summary">Du vil bli varslet om nye meldinger på en pålitelig måte, og umiddelbart ved hjelp av Googles varslingsservere.</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Endre navn</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Koble fra enhet</string>
<string name="dialog_seed_title">Din gjenopprettingsfrase</string>
<string name="dialog_seed_explanation">Dette er din gjenopprettingsfrase, med den, du kan gjenopprette eller overføre din Session-ID til en ny enhet.</string>
<string name="dialog_clear_all_data_title">Fjern alle data</string>
<string name="dialog_clear_all_data_explanation">Dette vil permanent slette dine meldinger, økter og kontakter.</string>
<string name="dialog_clear_all_data_network_explanation">Ønsker du å rense kun denne enheten, eller slette hele kontoen din?</string>

View File

@ -539,8 +539,8 @@
<string name="view_fake_chat_bubble_3">Dus het verzamelt geen persoonlijke informatie of de metagegevens van mijn gesprek? Hoe werkt het?</string>
<string name="view_fake_chat_bubble_4">Met behulp van een combinatie van geavanceerde anonieme routing en end-to-end encryptietechnologieën.</string>
<string name="view_fake_chat_bubble_5">Vrienden laten vrienden geen gecomprimeerde berichten apps gebruiken. Graag gedaan.</string>
<string name="activity_register_title">Zeg hallo tegen uw Sessie-ID</string>
<string name="activity_register_explanation">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é.</string>
<string name="activity_restore_title">Uw account herstellen</string>
<string name="activity_restore_explanation">Voer de herstel zin in die u hebt gekregen toen u uwzelf hebt aangemeld om uw account te herstellen.</string>
<string name="activity_restore_seed_edit_text_hint">Voer uw herstel zin in</string>
@ -557,11 +557,6 @@
<string name="activity_home_leaving_group_failed_message">"Kon de groep niet verlaten"</string>
<string name="activity_home_delete_conversation_dialog_message">Weet u zeker dat u deze groep wilt verlaten?</string>
<string name="activity_home_conversation_deleted_message">Gesprek verwijderd</string>
<string name="activity_seed_title">Uw herstel zin</string>
<string name="activity_seed_title_2">Maak kennis met uw herstel zin</string>
<string name="activity_seed_explanation">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.</string>
<string name="activity_seed_reveal_button_title">Ingedrukt houden om te onthullen</string>
<string name="view_seed_reminder_title">Je bent bijna klaar! 80%</string>
<string name="view_seed_reminder_subtitle_1">Beveilig uw account door uw herstel zin op te slaan</string>
<string name="view_seed_reminder_subtitle_2">Hou de herschreven woorden ingedrukt om uw herstelzin te onthullen, en sla het vervolgens veilig op om uw Sessie-ID te beveiligen.</string>
<string name="view_seed_reminder_subtitle_3">Zorg ervoor dat u uw herstel zin op een veilige plek opslaat</string>
@ -606,7 +601,6 @@
<string name="activity_settings_devices_button_title">Apparaten</string>
<string name="activity_settings_invite_button_title">Nodig een vriend uit</string>
<string name="activity_settings_faq_button_title">Veelgestelde vragen (FAQ)</string>
<string name="activity_settings_recovery_phrase_button_title">Herstel zin</string>
<string name="activity_settings_clear_all_data_button_title">Gegevens wissen</string>
<string name="activity_settings_clear_all_data_and_network_button_title">Wis Data, Inclusief Netwerk</string>
<string name="activity_settings_help_translate_session">Help ons om Sessie the vertalen</string>
@ -619,8 +613,6 @@
<string name="preferences_notifications_strategy_category_fast_mode_summary">U wordt op een op een betrouwbare manier direct op de hoogte gebracht van nieuwe berichten via de notificatieservers van Google.</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Naam wijzigen</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Apparaat ontkoppelen</string>
<string name="dialog_seed_title">Uw herstel zin</string>
<string name="dialog_seed_explanation">Dit is uw herstel zin, Hiermee kun je je Sessie-ID herstellen of migreren naar een nieuw apparaat.</string>
<string name="dialog_clear_all_data_title">Wis alle gegevens</string>
<string name="dialog_clear_all_data_explanation">Hiermee worden uw berichten, sessies en contacten permanent verwijderd.</string>
<string name="dialog_clear_all_data_network_explanation">Wilt u alleen de data op dit apparaat verwijderen, of wilt u uw hele account verwijderen?</string>

View File

@ -539,8 +539,8 @@
<string name="view_fake_chat_bubble_3">Dus het verzamelt geen persoonlijke informatie of de metagegevens van mijn gesprek? Hoe werkt het?</string>
<string name="view_fake_chat_bubble_4">Met behulp van een combinatie van geavanceerde anonieme routing en end-to-end encryptietechnologieën.</string>
<string name="view_fake_chat_bubble_5">Vrienden laten vrienden geen gecomprimeerde berichten apps gebruiken. Graag gedaan.</string>
<string name="activity_register_title">Zeg hallo tegen uw Sessie-ID</string>
<string name="activity_register_explanation">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é.</string>
<string name="activity_restore_title">Uw account herstellen</string>
<string name="activity_restore_explanation">Voer de herstel zin in die u hebt gekregen toen u uwzelf hebt aangemeld om uw account te herstellen.</string>
<string name="activity_restore_seed_edit_text_hint">Voer uw herstel zin in</string>
@ -557,11 +557,6 @@
<string name="activity_home_leaving_group_failed_message">"Kon de groep niet verlaten"</string>
<string name="activity_home_delete_conversation_dialog_message">Weet u zeker dat u deze groep wilt verlaten?</string>
<string name="activity_home_conversation_deleted_message">Gesprek verwijderd</string>
<string name="activity_seed_title">Uw herstel zin</string>
<string name="activity_seed_title_2">Maak kennis met uw herstel zin</string>
<string name="activity_seed_explanation">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.</string>
<string name="activity_seed_reveal_button_title">Ingedrukt houden om te onthullen</string>
<string name="view_seed_reminder_title">Je bent bijna klaar! 80%</string>
<string name="view_seed_reminder_subtitle_1">Beveilig uw account door uw herstel zin op te slaan</string>
<string name="view_seed_reminder_subtitle_2">Hou de herschreven woorden ingedrukt om uw herstelzin te onthullen, en sla het vervolgens veilig op om uw Sessie-ID te beveiligen.</string>
<string name="view_seed_reminder_subtitle_3">Zorg ervoor dat u uw herstel zin op een veilige plek opslaat</string>
@ -606,7 +601,6 @@
<string name="activity_settings_devices_button_title">Apparaten</string>
<string name="activity_settings_invite_button_title">Nodig een vriend uit</string>
<string name="activity_settings_faq_button_title">Veelgestelde vragen (FAQ)</string>
<string name="activity_settings_recovery_phrase_button_title">Herstel zin</string>
<string name="activity_settings_clear_all_data_button_title">Gegevens wissen</string>
<string name="activity_settings_clear_all_data_and_network_button_title">Wis Data, Inclusief Netwerk</string>
<string name="activity_settings_help_translate_session">Help ons om Sessie the vertalen</string>
@ -619,8 +613,6 @@
<string name="preferences_notifications_strategy_category_fast_mode_summary">U wordt op een op een betrouwbare manier direct op de hoogte gebracht van nieuwe berichten via de notificatieservers van Google.</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Naam wijzigen</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Apparaat ontkoppelen</string>
<string name="dialog_seed_title">Uw herstel zin</string>
<string name="dialog_seed_explanation">Dit is uw herstel zin, Hiermee kun je je Sessie-ID herstellen of migreren naar een nieuw apparaat.</string>
<string name="dialog_clear_all_data_title">Wis alle gegevens</string>
<string name="dialog_clear_all_data_explanation">Hiermee worden uw berichten, sessies en contacten permanent verwijderd.</string>
<string name="dialog_clear_all_data_network_explanation">Wilt u alleen de data op dit apparaat verwijderen, of wilt u uw hele account verwijderen?</string>

Some files were not shown because too many files have changed in this diff Show More