This commit is contained in:
Ryan ZHAO 2024-05-30 10:28:44 +10:00
commit 4acc42730b
144 changed files with 2919 additions and 3573 deletions

View File

@ -372,14 +372,26 @@ dependencies {
testImplementation 'org.robolectric:shadows-multidex:4.4'
implementation 'com.github.bumptech.glide:compose:1.0.0-alpha.5'
implementation 'androidx.compose.ui:ui:1.5.2'
implementation 'androidx.compose.ui:ui-tooling:1.5.2'
implementation "com.google.accompanist:accompanist-themeadapter-appcompat:0.33.1-alpha"
implementation "com.google.accompanist:accompanist-pager-indicators:0.33.1-alpha"
implementation "androidx.compose.runtime:runtime-livedata:1.5.2"
implementation 'androidx.compose.ui:ui:1.6.2'
implementation 'androidx.compose.animation:animation:1.6.2'
implementation 'androidx.compose.ui:ui-tooling:1.6.2'
implementation "androidx.compose.runtime:runtime-livedata:1.6.2"
implementation 'androidx.compose.foundation:foundation-layout:1.6.2'
implementation 'androidx.compose.material:material:1.6.2'
androidTestImplementation 'androidx.compose.ui:ui-test-junit4-android:1.6.2'
debugImplementation 'androidx.compose.ui:ui-test-manifest:1.6.2'
implementation 'androidx.compose.foundation:foundation-layout:1.5.2'
implementation 'androidx.compose.material:material:1.5.2'
implementation "com.google.accompanist:accompanist-themeadapter-appcompat:0.33.1-alpha"
implementation "com.google.accompanist:accompanist-pager:0.33.1-alpha"
implementation "com.google.accompanist:accompanist-pager-indicators:0.33.1-alpha"
implementation "com.google.accompanist:accompanist-permissions:0.33.1-alpha"
implementation "androidx.camera:camera-camera2:1.3.1"
implementation "androidx.camera:camera-lifecycle:1.3.1"
implementation "androidx.camera:camera-view:1.3.1"
implementation 'com.google.firebase:firebase-core:21.1.1'
implementation "com.google.mlkit:barcode-scanning:17.2.0"
}
static def getLastCommitTimestamp() {

View File

@ -22,6 +22,8 @@ import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.By
import androidx.test.uiautomator.UiDevice
import com.adevinta.android.barista.interaction.PermissionGranter
import network.loki.messenger.util.InputBarButtonDrawableMatcher.Companion.inputButtonWithDrawable
import org.hamcrest.Matcher
@ -49,9 +51,14 @@ class HomeActivityTests {
private val activityMonitor = Instrumentation.ActivityMonitor(ConversationActivityV2::class.java.name, null, false)
private val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
private val context = InstrumentationRegistry.getInstrumentation().targetContext
@Before
fun setUp() {
InstrumentationRegistry.getInstrumentation().addMonitor(activityMonitor)
}
@After
@ -72,25 +79,34 @@ class HomeActivityTests {
onView(isRoot()).perform(waitFor(500))
}
private fun objectFromDesc(id: Int) = device.findObject(By.desc(context.getString(id)))
private fun setupLoggedInState(hasViewedSeed: Boolean = false) {
// landing activity
onView(withId(R.id.registerButton)).perform(ViewActions.click())
// session ID - register activity
onView(withId(R.id.registerButton)).perform(ViewActions.click())
objectFromDesc(R.string.onboardingAccountCreate).click()
// display name selection
onView(withId(R.id.displayNameEditText)).perform(ViewActions.typeText("test-user123"))
onView(withId(R.id.registerButton)).perform(ViewActions.click())
objectFromDesc(R.string.displayNameEnter).click()
device.pressKeyCode(28)
device.pressKeyCode(29)
device.pressKeyCode(30)
// Continue with display name
objectFromDesc(R.string.continue_2).click()
// Continue with default push notification setting
objectFromDesc(R.string.continue_2).click()
// PN select
if (hasViewedSeed) {
// has viewed seed is set to false after register activity
TextSecurePreferences.setHasViewedSeed(InstrumentationRegistry.getInstrumentation().targetContext, true)
}
onView(withId(R.id.backgroundPollingOptionView)).perform(ViewActions.click())
onView(withId(R.id.registerButton)).perform(ViewActions.click())
// allow notification permission
PermissionGranter.allowPermissionsIfNeeded(Manifest.permission.POST_NOTIFICATIONS)
}
private fun goToMyChat() {
onView(withId(R.id.newConversationButton)).perform(ViewActions.click())
onView(withId(R.id.createPrivateChatButton)).perform(ViewActions.click())
@ -111,8 +127,8 @@ class HomeActivityTests {
@Test
fun testLaunches_dismiss_seedView() {
setupLoggedInState()
onView(allOf(withId(R.id.button), isDescendantOfA(withId(R.id.seedReminderView)))).perform(ViewActions.click())
onView(withId(R.id.copyButton)).perform(ViewActions.click())
objectFromDesc(R.string.continue_2).click()
objectFromDesc(R.string.copy).click()
pressBack()
onView(withId(R.id.seedReminderView)).check(matches(not(isDisplayed())))
}
@ -133,7 +149,7 @@ class HomeActivityTests {
fun testChat_withSelf() {
setupLoggedInState()
goToMyChat()
TextSecurePreferences.setLinkPreviewsEnabled(InstrumentationRegistry.getInstrumentation().targetContext, true)
TextSecurePreferences.setLinkPreviewsEnabled(context, true)
sendMessage("howdy")
sendMessage("test")
// tests url rewriter doesn't crash

View File

@ -113,12 +113,17 @@
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
@ -153,7 +158,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

@ -156,6 +156,8 @@ public class ApplicationContext extends Application implements DefaultLifecycleO
private volatile boolean isAppVisible;
public boolean newAccount = false;
@Override
public Object getSystemService(String name) {
if (MessagingModuleConfiguration.MESSAGING_MODULE_SERVICE.equals(name)) {
@ -214,6 +216,7 @@ public class ApplicationContext extends Application implements DefaultLifecycleO
DatabaseModule.init(this);
MessagingModuleConfiguration.configure(this);
super.onCreate();
messagingModuleConfiguration = new MessagingModuleConfiguration(
this,
storage,

View File

@ -15,6 +15,7 @@ import androidx.annotation.LayoutRes
import androidx.annotation.StringRes
import androidx.annotation.StyleRes
import androidx.appcompat.app.AlertDialog
import androidx.core.text.HtmlCompat
import androidx.core.view.setMargins
import androidx.core.view.updateMargins
import androidx.fragment.app.Fragment
@ -80,6 +81,8 @@ class SessionDialogBuilder(val context: Context) {
}.let(topView::addView)
}
fun htmlText(@StringRes id: Int, @StyleRes style: Int = 0, modify: TextView.() -> Unit = {}) { text(context.resources.getText(id)) }
fun view(view: View) = contentView.addView(view)
fun view(@LayoutRes layout: Int): View = LayoutInflater.from(context).inflate(layout, contentView)

View File

@ -115,7 +115,6 @@ import org.thoughtcrime.securesms.conversation.v2.MessageDetailActivity.Companio
import org.thoughtcrime.securesms.conversation.v2.MessageDetailActivity.Companion.ON_RESEND
import org.thoughtcrime.securesms.conversation.v2.dialogs.BlockedDialog
import org.thoughtcrime.securesms.conversation.v2.dialogs.LinkPreviewDialog
import org.thoughtcrime.securesms.conversation.v2.dialogs.SendSeedDialog
import org.thoughtcrime.securesms.conversation.v2.input_bar.InputBarButton
import org.thoughtcrime.securesms.conversation.v2.input_bar.InputBarDelegate
import org.thoughtcrime.securesms.conversation.v2.input_bar.InputBarRecordingViewDelegate
@ -162,6 +161,7 @@ import org.thoughtcrime.securesms.mms.MediaConstraints
import org.thoughtcrime.securesms.mms.Slide
import org.thoughtcrime.securesms.mms.SlideDeck
import org.thoughtcrime.securesms.mms.VideoSlide
import org.thoughtcrime.securesms.onboarding.recoverypassword.startRecoveryPasswordActivity
import org.thoughtcrime.securesms.permissions.Permissions
import org.thoughtcrime.securesms.reactions.ReactionsDialogFragment
import org.thoughtcrime.securesms.reactions.any.ReactWithAnyEmojiDialogFragment
@ -1605,9 +1605,7 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
val userPublicKey = textSecurePreferences.getLocalNumber()
val isNoteToSelf = (recipient.isContactRecipient && recipient.address.toString() == userPublicKey)
if (text.contains(seed) && !isNoteToSelf && !hasPermissionToSendSeed) {
val dialog = SendSeedDialog { sendTextOnlyMessage(true) }
dialog.show(supportFragmentManager, "Send Seed Dialog")
return null
startRecoveryPasswordActivity()
}
// Create the message
val message = VisibleMessage().applyExpiryMode(viewModel.threadId)

View File

@ -364,7 +364,7 @@ fun FileDetails(fileDetails: List<TitledText>) {
fun TitledErrorText(titledText: TitledText?) {
TitledText(
titledText,
valueStyle = LocalTextStyle.current.copy(color = colorDestructive)
style = LocalTextStyle.current.copy(color = colorDestructive)
)
}
@ -372,7 +372,7 @@ fun TitledErrorText(titledText: TitledText?) {
fun TitledMonospaceText(titledText: TitledText?) {
TitledText(
titledText,
valueStyle = LocalTextStyle.current.copy(fontFamily = FontFamily.Monospace)
style = LocalTextStyle.current.copy(fontFamily = FontFamily.Monospace)
)
}
@ -380,11 +380,11 @@ fun TitledMonospaceText(titledText: TitledText?) {
fun TitledText(
titledText: TitledText?,
modifier: Modifier = Modifier,
valueStyle: TextStyle = LocalTextStyle.current,
style: TextStyle = LocalTextStyle.current,
) {
titledText?.apply {
TitledView(title, modifier) {
Text(text, style = valueStyle, modifier = Modifier.fillMaxWidth())
Text(text, style = style, modifier = Modifier.fillMaxWidth())
}
}
}

View File

@ -7,9 +7,32 @@ import android.content.ClipboardManager
import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.text.SpannableString
import android.widget.Toast
import androidx.activity.viewModels
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.requiredWidth
import androidx.compose.foundation.layout.width
import androidx.compose.material.Divider
import androidx.compose.material.Icon
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp
import androidx.core.os.bundleOf
import androidx.core.view.isVisible
import androidx.lifecycle.Lifecycle
@ -65,12 +88,19 @@ import org.thoughtcrime.securesms.messagerequests.MessageRequestsActivity
import org.thoughtcrime.securesms.mms.GlideApp
import org.thoughtcrime.securesms.mms.GlideRequests
import org.thoughtcrime.securesms.notifications.PushRegistry
import org.thoughtcrime.securesms.onboarding.SeedActivity
import org.thoughtcrime.securesms.onboarding.SeedReminderViewDelegate
import org.thoughtcrime.securesms.onboarding.recoverypassword.startRecoveryPasswordActivity
import org.thoughtcrime.securesms.permissions.Permissions
import org.thoughtcrime.securesms.preferences.SettingsActivity
import org.thoughtcrime.securesms.showMuteDialog
import org.thoughtcrime.securesms.showSessionDialog
import org.thoughtcrime.securesms.ui.AppTheme
import org.thoughtcrime.securesms.ui.GetString
import org.thoughtcrime.securesms.ui.OutlineButton
import org.thoughtcrime.securesms.ui.PreviewTheme
import org.thoughtcrime.securesms.ui.SessionShieldIcon
import org.thoughtcrime.securesms.ui.ThemeResPreviewParameterProvider
import org.thoughtcrime.securesms.ui.h8
import org.thoughtcrime.securesms.ui.small
import org.thoughtcrime.securesms.util.ConfigurationMessageUtilities
import org.thoughtcrime.securesms.util.IP2Country
import org.thoughtcrime.securesms.util.disableClipping
@ -82,7 +112,6 @@ import javax.inject.Inject
@AndroidEntryPoint
class HomeActivity : PassphraseRequiredActionBarActivity(),
ConversationClickListener,
SeedReminderViewDelegate,
GlobalSearchInputLayout.GlobalSearchInputLayoutListener {
companion object {
@ -170,15 +199,8 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
binding.sessionToolbar.disableClipping()
// Set up seed reminder view
lifecycleScope.launchWhenStarted {
val hasViewedSeed = textSecurePreferences.getHasViewedSeed()
if (!hasViewedSeed) {
binding.seedReminderView.isVisible = true
binding.seedReminderView.title = SpannableString("You're almost finished! 80%") // Intentionally not yet translated
binding.seedReminderView.subtitle = resources.getString(R.string.view_seed_reminder_subtitle_1)
binding.seedReminderView.setProgress(80, false)
binding.seedReminderView.delegate = this@HomeActivity
} else {
binding.seedReminderView.isVisible = false
binding.seedReminderView.setContent {
if (!textSecurePreferences.getHasViewedSeed()) SeedReminder()
}
}
// Set up recycler view
@ -194,7 +216,8 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
}
// Set up empty state view
binding.createNewPrivateChatButton.setOnClickListener { showNewConversation() }
binding.emptyStateContainer.setContent { EmptyView(ApplicationContext.getInstance(this).newAccount) }
IP2Country.configureIfNeeded(this@HomeActivity)
// Set up new conversation button
@ -317,6 +340,79 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
}
}
@Preview
@Composable
fun PreviewMessageDetails(
@PreviewParameter(ThemeResPreviewParameterProvider::class) themeResId: Int
) {
PreviewTheme(themeResId) {
SeedReminder()
}
}
@Composable
private fun SeedReminder() {
AppTheme {
Column {
Box(
Modifier
.fillMaxWidth()
.height(4.dp)
.background(MaterialTheme.colors.secondary))
Row(
Modifier
.background(MaterialTheme.colors.surface)
.padding(horizontal = 24.dp, vertical = 16.dp)
) {
Column(Modifier.weight(1f)) {
Row {
Text(stringResource(R.string.save_your_recovery_password), style = MaterialTheme.typography.h8)
Spacer(Modifier.requiredWidth(8.dp))
SessionShieldIcon()
}
Text(stringResource(R.string.save_your_recovery_password_to_make_sure_you_don_t_lose_access_to_your_account), style = MaterialTheme.typography.small)
}
Spacer(Modifier.width(12.dp))
OutlineButton(
stringResource(R.string.continue_2),
Modifier.align(Alignment.CenterVertically),
contentDescription = GetString(R.string.AccessibilityId_reveal_recovery_phrase_button)
) { startRecoveryPasswordActivity() }
}
}
}
}
@Composable
private fun EmptyView(newAccount: Boolean) {
AppTheme {
Column(
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier
.padding(horizontal = 50.dp)
.padding(bottom = 12.dp)
) {
Spacer(modifier = Modifier.weight(1f))
Icon(
painter = painterResource(id = if (newAccount) R.drawable.emoji_tada_large else R.drawable.ic_logo_large),
contentDescription = null,
tint = Color.Unspecified
)
if (newAccount) Text(stringResource(R.string.onboardingAccountCreated), style = MaterialTheme.typography.h4, textAlign = TextAlign.Center)
if (newAccount) Text(stringResource(R.string.welcome_to_session), color = MaterialTheme.colors.secondary, textAlign = TextAlign.Center)
Divider(modifier = Modifier.padding(vertical = 16.dp))
Text(
stringResource(R.string.conversationsNone),
style = MaterialTheme.typography.h8,
textAlign = TextAlign.Center,
modifier = Modifier.padding(bottom = 12.dp))
Text(stringResource(R.string.onboardingHitThePlusButton), textAlign = TextAlign.Center)
Spacer(modifier = Modifier.weight(2f))
}
}
}
override fun onInputFocusChanged(hasFocus: Boolean) {
if (hasFocus) {
setSearchShown(true)
@ -406,11 +502,6 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
super.onBackPressed()
}
override fun handleSeedReminderViewContinueButtonTapped() {
val intent = Intent(this, SeedActivity::class.java)
show(intent)
}
override fun onConversationClick(thread: ThreadRecord) {
val intent = Intent(this, ConversationActivityV2::class.java)
intent.putExtra(ConversationActivityV2.THREAD_ID, thread.threadId)
@ -434,7 +525,7 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
bottomSheet.dismiss()
if (!thread.recipient.isGroupRecipient && !thread.recipient.isLocalNumber) {
val clip = ClipData.newPlainText("Session ID", thread.recipient.address.toString())
val manager = getSystemService(PassphraseRequiredActionBarActivity.CLIPBOARD_SERVICE) as ClipboardManager
val manager = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
manager.setPrimaryClip(clip)
Toast.makeText(this, R.string.copied_to_clipboard, Toast.LENGTH_SHORT).show()
}
@ -443,7 +534,7 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
val openGroup = DatabaseComponent.get(this@HomeActivity).lokiThreadDatabase().getOpenGroupChat(threadId) ?: return@onCopyConversationId Unit
val clip = ClipData.newPlainText("Community URL", openGroup.joinURL)
val manager = getSystemService(PassphraseRequiredActionBarActivity.CLIPBOARD_SERVICE) as ClipboardManager
val manager = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
manager.setPrimaryClip(clip)
Toast.makeText(this, R.string.copied_to_clipboard, Toast.LENGTH_SHORT).show()
}
@ -571,7 +662,7 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
val message = if (recipient.isGroupRecipient) {
val group = groupDatabase.getGroup(recipient.address.toString()).orNull()
if (group != null && group.admins.map { it.toString() }.contains(textSecurePreferences.getLocalNumber())) {
"Because you are the creator of this group it will be deleted for everyone. This cannot be undone."
getString(R.string.admin_group_leave_warning)
} else {
resources.getString(R.string.activity_home_leave_group_dialog_message)
}
@ -627,7 +718,7 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
private fun hideMessageRequests() {
showSessionDialog {
text("Hide message requests?")
text(getString(R.string.hide_message_requests))
button(R.string.yes) {
textSecurePreferences.setHasHiddenMessageRequests()
homeViewModel.tryReload()

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,13 +1,47 @@
package org.thoughtcrime.securesms.onboarding
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import network.loki.messenger.databinding.ActivityLandingBinding
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import network.loki.messenger.R
import org.session.libsession.utilities.TextSecurePreferences
import org.thoughtcrime.securesms.BaseActionBarActivity
import org.thoughtcrime.securesms.crypto.IdentityKeyUtil
import org.thoughtcrime.securesms.onboarding.pickname.startPickDisplayNameActivity
import org.thoughtcrime.securesms.service.KeyCachingService
import org.thoughtcrime.securesms.util.push
import org.thoughtcrime.securesms.showSessionDialog
import org.thoughtcrime.securesms.ui.AppTheme
import org.thoughtcrime.securesms.ui.BorderlessButton
import org.thoughtcrime.securesms.ui.FilledButton
import org.thoughtcrime.securesms.ui.GetString
import org.thoughtcrime.securesms.ui.OutlineButton
import org.thoughtcrime.securesms.ui.PreviewTheme
import org.thoughtcrime.securesms.ui.ThemeResPreviewParameterProvider
import org.thoughtcrime.securesms.ui.classicDarkColors
import org.thoughtcrime.securesms.ui.contentDescription
import org.thoughtcrime.securesms.ui.session_accent
import org.thoughtcrime.securesms.util.setUpActionBarSessionLogo
class LandingActivity : BaseActionBarActivity() {
@ -19,28 +53,128 @@ class LandingActivity : BaseActionBarActivity() {
// Session then close this activity to resume the last activity from the previous instance.
if (!isTaskRoot) { finish(); return }
val binding = ActivityLandingBinding.inflate(layoutInflater)
setContentView(binding.root)
setUpActionBarSessionLogo(true)
with(binding) {
fakeChatView.startAnimating()
registerButton.setOnClickListener { register() }
restoreButton.setOnClickListener { link() }
linkButton.setOnClickListener { link() }
}
ComposeView(this)
.apply { setContent { AppTheme { LandingScreen() } } }
.let(::setContentView)
IdentityKeyUtil.generateIdentityKeyPair(this)
TextSecurePreferences.setPasswordDisabled(this, true)
// AC: This is a temporary workaround to trick the old code that the screen is unlocked.
KeyCachingService.setMasterSecret(applicationContext, Object())
}
private fun register() {
val intent = Intent(this, RegisterActivity::class.java)
push(intent)
@Preview
@Composable
private fun LandingScreen(
@PreviewParameter(ThemeResPreviewParameterProvider::class) themeResId: Int
) {
PreviewTheme(themeResId) {
LandingScreen()
}
}
private fun link() {
val intent = Intent(this, LinkDeviceActivity::class.java)
push(intent)
@Composable
private fun LandingScreen() {
Column(modifier = Modifier.padding(horizontal = 36.dp)) {
Spacer(modifier = Modifier.weight(1f))
Text(stringResource(R.string.onboardingBubblePrivacyInYourPocket), modifier = Modifier.align(Alignment.CenterHorizontally), style = MaterialTheme.typography.h4, textAlign = TextAlign.Center)
Spacer(modifier = Modifier.height(24.dp))
IncomingText(stringResource(R.string.onboardingBubbleWelcomeToSession))
Spacer(modifier = Modifier.height(14.dp))
OutgoingText(stringResource(R.string.onboardingBubbleSessionIsEngineered))
Spacer(modifier = Modifier.height(14.dp))
IncomingText(stringResource(R.string.onboardingBubbleNoPhoneNumber))
Spacer(modifier = Modifier.height(14.dp))
OutgoingText(stringResource(R.string.onboardingBubbleCreatingAnAccountIsEasy))
Spacer(modifier = Modifier.weight(1f))
OutlineButton(
text = stringResource(R.string.onboardingAccountCreate),
modifier = Modifier
.width(262.dp)
.align(Alignment.CenterHorizontally),
contentDescription = GetString(R.string.AccessibilityId_create_account_button)
) { startPickDisplayNameActivity() }
Spacer(modifier = Modifier.height(14.dp))
FilledButton(
text = stringResource(R.string.onboardingAccountExists),
modifier = Modifier
.width(262.dp)
.align(Alignment.CenterHorizontally),
contentDescription = GetString(R.string.AccessibilityId_restore_account_button)
) { startLinkDeviceActivity() }
Spacer(modifier = Modifier.height(8.dp))
BorderlessButton(
text = stringResource(R.string.onboardingTosPrivacy),
modifier = Modifier
.width(262.dp)
.align(Alignment.CenterHorizontally),
contentDescription = GetString(R.string.AccessibilityId_open_url),
fontSize = 11.sp,
lineHeight = 13.sp
) { openDialog() }
Spacer(modifier = Modifier.height(8.dp))
}
}
}
private fun openDialog() {
showSessionDialog {
title(R.string.urlOpen)
text(R.string.urlOpenBrowser)
button(
R.string.activity_landing_terms_of_service,
contentDescriptionRes = R.string.AccessibilityId_terms_of_service_link
) { open("https://getsession.org/terms-of-service") }
button(
R.string.activity_landing_privacy_policy,
contentDescriptionRes = R.string.AccessibilityId_privacy_policy_link
) { open("https://getsession.org/privacy-policy") }
}
}
private fun open(url: String) {
Intent(Intent.ACTION_VIEW, Uri.parse(url)).let(::startActivity)
}
@Composable
private fun IncomingText(text: String) {
ChatText(
text,
color = classicDarkColors[2]
)
}
@Composable
private fun ColumnScope.OutgoingText(text: String) {
ChatText(
text,
color = session_accent,
textColor = MaterialTheme.colors.primary,
modifier = Modifier.align(Alignment.End)
)
}
@Composable
private fun ChatText(
text: String,
color: Color,
modifier: Modifier = Modifier,
textColor: Color = Color.Unspecified
) {
Text(
text,
fontSize = 16.sp,
lineHeight = 19.sp,
color = textColor,
modifier = modifier
.fillMaxWidth(0.666f)
.background(
color = color,
shape = RoundedCornerShape(size = 13.dp)
)
.padding(horizontal = 16.dp, vertical = 12.dp)
)
}
}

View File

@ -1,230 +1,346 @@
package org.thoughtcrime.securesms.onboarding
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.text.InputType
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.inputmethod.EditorInfo
import android.view.inputmethod.InputMethodManager
import android.widget.Toast
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentPagerAdapter
import android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS
import androidx.activity.viewModels
import androidx.camera.core.CameraSelector
import androidx.camera.core.ExperimentalGetImage
import androidx.camera.core.ImageAnalysis
import androidx.camera.core.ImageAnalysis.Analyzer
import androidx.camera.core.ImageProxy
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.camera.view.PreviewView
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.pager.HorizontalPager
import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.material.Icon
import androidx.compose.material.MaterialTheme
import androidx.compose.material.OutlinedTextField
import androidx.compose.material.Scaffold
import androidx.compose.material.Snackbar
import androidx.compose.material.SnackbarHost
import androidx.compose.material.Text
import androidx.compose.material.rememberScaffoldState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.viewinterop.AndroidView
import androidx.lifecycle.lifecycleScope
import com.google.android.material.snackbar.Snackbar
import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.isGranted
import com.google.accompanist.permissions.rememberPermissionState
import com.google.accompanist.permissions.shouldShowRationale
import com.google.mlkit.vision.barcode.BarcodeScanner
import com.google.mlkit.vision.barcode.BarcodeScannerOptions
import com.google.mlkit.vision.barcode.BarcodeScanning
import com.google.mlkit.vision.barcode.common.Barcode
import com.google.mlkit.vision.common.InputImage
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.launch
import network.loki.messenger.R
import network.loki.messenger.databinding.ActivityLinkDeviceBinding
import network.loki.messenger.databinding.FragmentRecoveryPhraseBinding
import org.session.libsession.snode.SnodeModule
import org.session.libsession.utilities.TextSecurePreferences
import org.session.libsignal.crypto.MnemonicCodec
import org.session.libsignal.database.LokiAPIDatabaseProtocol
import org.session.libsignal.utilities.Hex
import org.session.libsignal.utilities.KeyHelper
import org.session.libsignal.utilities.Log
import org.session.libsignal.utilities.hexEncodedPublicKey
import org.thoughtcrime.securesms.ApplicationContext
import org.thoughtcrime.securesms.BaseActionBarActivity
import org.thoughtcrime.securesms.crypto.KeyPairUtilities
import org.thoughtcrime.securesms.crypto.MnemonicUtilities
import org.thoughtcrime.securesms.dependencies.ConfigFactory
import org.thoughtcrime.securesms.util.ScanQRCodeWrapperFragment
import org.thoughtcrime.securesms.util.ScanQRCodeWrapperFragmentDelegate
import org.thoughtcrime.securesms.util.push
import org.thoughtcrime.securesms.util.setUpActionBarSessionLogo
import org.thoughtcrime.securesms.ui.AppTheme
import org.thoughtcrime.securesms.ui.OutlineButton
import org.thoughtcrime.securesms.ui.baseBold
import org.thoughtcrime.securesms.ui.components.SessionTabRow
import org.thoughtcrime.securesms.ui.contentDescription
import org.thoughtcrime.securesms.ui.outlinedTextFieldColors
import java.util.concurrent.Executors
import javax.inject.Inject
private const val TAG = "LinkDeviceActivity"
private val TITLES = listOf(R.string.sessionRecoveryPassword, R.string.qrScan)
@AndroidEntryPoint
class LinkDeviceActivity : BaseActionBarActivity(), ScanQRCodeWrapperFragmentDelegate {
@androidx.annotation.OptIn(ExperimentalGetImage::class)
class LinkDeviceActivity : BaseActionBarActivity() {
@Inject
lateinit var configFactory: ConfigFactory
lateinit var prefs: TextSecurePreferences
private lateinit var binding: ActivityLinkDeviceBinding
internal val database: LokiAPIDatabaseProtocol
get() = SnodeModule.shared.storage
private val adapter = LinkDeviceActivityAdapter(this)
private var restoreJob: Job? = null
val viewModel: LinkDeviceViewModel by viewModels()
@Deprecated("Deprecated in Java")
override fun onBackPressed() {
if (restoreJob?.isActive == true) return // Don't allow going back with a pending job
super.onBackPressed()
}
val preview = androidx.camera.core.Preview.Builder().build()
val selector = CameraSelector.Builder()
.requireLensFacing(CameraSelector.LENS_FACING_BACK)
.build()
// region Lifecycle
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setUpActionBarSessionLogo()
TextSecurePreferences.apply {
setHasViewedSeed(this@LinkDeviceActivity, true)
setConfigurationMessageSynced(this@LinkDeviceActivity, false)
setRestorationTime(this@LinkDeviceActivity, System.currentTimeMillis())
setLastProfileUpdateTime(this@LinkDeviceActivity, 0)
}
binding = ActivityLinkDeviceBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.viewPager.adapter = adapter
binding.tabLayout.setupWithViewPager(binding.viewPager)
}
// endregion
supportActionBar?.setTitle(R.string.activity_link_load_account)
prefs.setHasViewedSeed(true)
prefs.setConfigurationMessageSynced(false)
prefs.setRestorationTime(System.currentTimeMillis())
prefs.setLastProfileUpdateTime(0)
// region Interaction
override fun handleQRCodeScanned(mnemonic: String) {
try {
val seed = Hex.fromStringCondensed(mnemonic)
continueWithSeed(seed)
} catch (e: Exception) {
Log.e("Loki","Error getting seed from QR code", e)
Toast.makeText(this, "An error occurred.", Toast.LENGTH_LONG).show()
}
}
fun continueWithMnemonic(mnemonic: String) {
val loadFileContents: (String) -> String = { fileName ->
MnemonicUtilities.loadFileContents(this, fileName)
}
try {
val hexEncodedSeed = MnemonicCodec(loadFileContents).decode(mnemonic)
val seed = Hex.fromStringCondensed(hexEncodedSeed)
continueWithSeed(seed)
} catch (error: Exception) {
val message = if (error is MnemonicCodec.DecodingError) {
error.description
} else {
"An error occurred."
lifecycleScope.launch {
viewModel.eventFlow.collect {
startLoadingActivity(it.mnemonic)
finish()
}
Toast.makeText(this, message, Toast.LENGTH_LONG).show()
}
}
private fun continueWithSeed(seed: ByteArray) {
// only have one sync job running at a time (prevent QR from trying to spawn a new job)
if (restoreJob?.isActive == true) return
restoreJob = lifecycleScope.launch {
// This is here to resolve a case where the app restarts before a user completes onboarding
// which can result in an invalid database state
database.clearAllLastMessageHashes()
database.clearReceivedMessageHashValues()
// RestoreActivity handles seed this way
val keyPairGenerationResult = KeyPairUtilities.generate(seed)
val x25519KeyPair = keyPairGenerationResult.x25519KeyPair
KeyPairUtilities.store(this@LinkDeviceActivity, seed, keyPairGenerationResult.ed25519KeyPair, x25519KeyPair)
configFactory.keyPairChanged()
val userHexEncodedPublicKey = x25519KeyPair.hexEncodedPublicKey
val registrationID = KeyHelper.generateRegistrationId(false)
TextSecurePreferences.setLocalRegistrationId(this@LinkDeviceActivity, registrationID)
TextSecurePreferences.setLocalNumber(this@LinkDeviceActivity, userHexEncodedPublicKey)
TextSecurePreferences.setRestorationTime(this@LinkDeviceActivity, System.currentTimeMillis())
TextSecurePreferences.setHasViewedSeed(this@LinkDeviceActivity, true)
binding.loader.isVisible = true
val snackBar = Snackbar.make(binding.containerLayout, R.string.activity_link_device_skip_prompt,Snackbar.LENGTH_INDEFINITE)
.setAction(R.string.registration_activity__skip) { register(true) }
val skipJob = launch {
delay(15_000L)
snackBar.show()
}
// start polling and wait for updated message
ApplicationContext.getInstance(this@LinkDeviceActivity).apply {
startPollingIfNeeded()
}
TextSecurePreferences.events.filter { it == TextSecurePreferences.CONFIGURATION_SYNCED }.collect {
// handle we've synced
snackBar.dismiss()
skipJob.cancel()
register(false)
}
binding.loader.isVisible = false
}
}
private fun register(skipped: Boolean) {
restoreJob?.cancel()
binding.loader.isVisible = false
TextSecurePreferences.setLastConfigurationSyncTime(this, System.currentTimeMillis())
val intent = Intent(this@LinkDeviceActivity, if (skipped) DisplayNameActivity::class.java else PNModeActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
push(intent)
}
// endregion
}
// region Adapter
private class LinkDeviceActivityAdapter(private val activity: LinkDeviceActivity) : FragmentPagerAdapter(activity.supportFragmentManager) {
val recoveryPhraseFragment = RecoveryPhraseFragment()
override fun getCount(): Int {
return 2
}
override fun getItem(index: Int): Fragment {
return when (index) {
0 -> recoveryPhraseFragment
1 -> {
val result = ScanQRCodeWrapperFragment()
result.delegate = activity
result.message = activity.getString(R.string.activity_link_device_qr_message)
result
}
else -> throw IllegalStateException()
}
}
override fun getPageTitle(index: Int): CharSequence {
return when (index) {
0 -> activity.getString(R.string.activity_link_device_recovery_phrase)
1 -> activity.getString(R.string.activity_link_device_scan_qr_code)
else -> throw IllegalStateException()
}
}
}
// endregion
// region Recovery Phrase Fragment
class RecoveryPhraseFragment : Fragment() {
private lateinit var binding: FragmentRecoveryPhraseBinding
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
binding = FragmentRecoveryPhraseBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
with(binding) {
mnemonicEditText.imeOptions = EditorInfo.IME_ACTION_DONE or 16777216 // Always use incognito keyboard
mnemonicEditText.setRawInputType(InputType.TYPE_CLASS_TEXT)
mnemonicEditText.setOnEditorActionListener { v, actionID, _ ->
if (actionID == EditorInfo.IME_ACTION_DONE) {
val imm = v.context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(v.windowToken, 0)
handleContinueButtonTapped()
true
} else {
false
ComposeView(this).apply {
setContent {
val state by viewModel.stateFlow.collectAsState()
AppTheme {
LoadAccountScreen(state, viewModel::onChange, viewModel::onContinue)
}
}
}.let(::setContentView)
}
@OptIn(ExperimentalFoundationApi::class)
@Composable
fun LoadAccountScreen(state: LinkDeviceState, onChange: (String) -> Unit = {}, onContinue: () -> Unit = {}) {
val pagerState = rememberPagerState { TITLES.size }
Column {
val localContext = LocalContext.current
val cameraProvider = remember { ProcessCameraProvider.getInstance(localContext) }
SessionTabRow(pagerState, TITLES)
HorizontalPager(
state = pagerState,
modifier = Modifier.weight(1f)
) { page ->
val title = TITLES[page]
val options = BarcodeScannerOptions.Builder()
.setBarcodeFormats(Barcode.FORMAT_QR_CODE)
.build()
val scanner = BarcodeScanning.getClient(options)
runCatching {
cameraProvider.get().unbindAll()
if (title == R.string.qrScan) {
LocalSoftwareKeyboardController.current?.hide()
cameraProvider.get().bindToLifecycle(
LocalLifecycleOwner.current,
selector,
preview,
buildAnalysisUseCase(scanner, viewModel::scan)
)
}
}.onFailure { Log.e(TAG, "error binding camera", it) }
when (title) {
R.string.sessionRecoveryPassword -> RecoveryPassword(state, onChange, onContinue)
R.string.qrScan -> MaybeScanQrCode()
}
}
continueButton.setOnClickListener { handleContinueButtonTapped() }
}
}
private fun handleContinueButtonTapped() {
val mnemonic = binding.mnemonicEditText.text?.trim().toString()
(requireActivity() as LinkDeviceActivity).continueWithMnemonic(mnemonic)
@OptIn(ExperimentalPermissionsApi::class)
@Composable
fun MaybeScanQrCode() {
Box(modifier = Modifier.fillMaxSize()) {
val cameraPermissionState = rememberPermissionState(android.Manifest.permission.CAMERA)
if (cameraPermissionState.status.isGranted) {
ScanQrCode(preview, viewModel.qrErrorsFlow)
} else if (cameraPermissionState.status.shouldShowRationale) {
Column(
modifier = Modifier
.align(Alignment.Center)
.padding(horizontal = 60.dp)
) {
Text(
stringResource(R.string.activity_link_camera_permission_permanently_denied_configure_in_settings),
textAlign = TextAlign.Center
)
Spacer(modifier = Modifier.size(20.dp))
OutlineButton(
text = stringResource(R.string.sessionSettings),
modifier = Modifier.align(Alignment.CenterHorizontally)
) {
Intent(ACTION_APPLICATION_DETAILS_SETTINGS).apply {
data = Uri.fromParts("package", packageName, null)
}.let(::startActivity)
}
}
} else {
OutlineButton(
text = stringResource(R.string.cameraGrantAccess),
modifier = Modifier.align(Alignment.Center)
) {
cameraPermissionState.run { launchPermissionRequest() }
}
}
}
}
@Composable
fun ScanQrCode(preview: androidx.camera.core.Preview, errors: Flow<String>) {
val scaffoldState = rememberScaffoldState()
LaunchedEffect(Unit) {
errors.collect { error ->
lifecycleScope.launch {
scaffoldState.snackbarHostState.showSnackbar(message = error)
}
}
}
Scaffold(
scaffoldState = scaffoldState,
snackbarHost = {
SnackbarHost(
hostState = scaffoldState.snackbarHostState,
modifier = Modifier.padding(16.dp)
) { data ->
Snackbar(
snackbarData = data,
modifier = Modifier.padding(16.dp)
)
}
}
) { padding ->
Box(modifier = Modifier.padding(padding)) {
AndroidView(
modifier = Modifier.fillMaxSize(),
factory = { PreviewView(it).apply { preview.setSurfaceProvider(surfaceProvider) } }
)
Box(
Modifier
.aspectRatio(1f)
.padding(20.dp)
.clip(shape = RoundedCornerShape(20.dp))
.background(Color(0x33ffffff))
.align(Alignment.Center)
)
}
}
}
}
@Preview
@Composable
fun PreviewRecoveryPassword() = RecoveryPassword(state = LinkDeviceState())
@Composable
fun RecoveryPassword(state: LinkDeviceState, onChange: (String) -> Unit = {}, onContinue: () -> Unit = {}) {
Column(
modifier = Modifier.padding(horizontal = 60.dp)
) {
Spacer(Modifier.weight(1f))
Row {
Text(stringResource(R.string.sessionRecoveryPassword), style = MaterialTheme.typography.h4)
Spacer(Modifier.width(6.dp))
Icon(
painter = painterResource(id = R.drawable.ic_shield_outline),
contentDescription = null,
)
}
Spacer(Modifier.size(28.dp))
Text(stringResource(R.string.activity_link_enter_your_recovery_password_to_load_your_account_if_you_haven_t_saved_it_you_can_find_it_in_your_app_settings))
Spacer(Modifier.size(24.dp))
OutlinedTextField(
value = state.recoveryPhrase,
onValueChange = { onChange(it) },
modifier = Modifier.contentDescription(R.string.AccessibilityId_recovery_phrase_input),
placeholder = { Text(stringResource(R.string.recoveryPasswordEnter)) },
colors = outlinedTextFieldColors(state.error != null),
singleLine = true,
keyboardActions = KeyboardActions(
onDone = { onContinue() },
onGo = { onContinue() },
onSearch = { onContinue() },
onSend = { onContinue() },
),
isError = state.error != null,
shape = RoundedCornerShape(12.dp)
)
Spacer(Modifier.size(12.dp))
state.error?.let {
Text(
it,
modifier = Modifier.contentDescription(R.string.AccessibilityId_error_message),
style = MaterialTheme.typography.baseBold,
color = MaterialTheme.colors.error
)
}
Spacer(Modifier.weight(2f))
OutlineButton(
text = stringResource(id = R.string.continue_2),
modifier = Modifier
.align(Alignment.CenterHorizontally)
.padding(horizontal = 64.dp, vertical = 20.dp)
.width(200.dp)
) { onContinue() }
}
}
fun Context.startLinkDeviceActivity() {
Intent(this, LinkDeviceActivity::class.java).let(::startActivity)
}
@SuppressLint("UnsafeOptInUsageError")
private fun buildAnalysisUseCase(
scanner: BarcodeScanner,
onBarcodeScanned: (String) -> Unit
): ImageAnalysis = ImageAnalysis.Builder()
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.build().apply {
setAnalyzer(Executors.newSingleThreadExecutor(), Analyzer(scanner, onBarcodeScanned))
}
class Analyzer(
private val scanner: BarcodeScanner,
private val onBarcodeScanned: (String) -> Unit
): Analyzer {
@SuppressLint("UnsafeOptInUsageError")
override fun analyze(image: ImageProxy) {
InputImage.fromMediaImage(
image.image!!,
image.imageInfo.rotationDegrees
).let(scanner::process).apply {
addOnSuccessListener { barcodes ->
barcodes.filter { it.valueType == Barcode.TYPE_TEXT }.forEach {
it.rawValue?.let(onBarcodeScanned)
}
}
addOnCompleteListener {
image.close()
}
}
}
}
// endregion

View File

@ -0,0 +1,6 @@
package org.thoughtcrime.securesms.onboarding
data class LinkDeviceState(
val recoveryPhrase: String = "",
val error: String? = null
)

View File

@ -0,0 +1,92 @@
package org.thoughtcrime.securesms.onboarding
import android.app.Application
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.consumeAsFlow
import kotlinx.coroutines.flow.debounce
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.mapNotNull
import kotlinx.coroutines.flow.receiveAsFlow
import kotlinx.coroutines.flow.take
import kotlinx.coroutines.flow.takeWhile
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import network.loki.messenger.R
import org.session.libsignal.crypto.MnemonicCodec
import org.session.libsignal.crypto.MnemonicCodec.DecodingError.InputTooShort
import org.session.libsignal.crypto.MnemonicCodec.DecodingError.InvalidWord
import org.session.libsignal.utilities.Hex
import org.thoughtcrime.securesms.crypto.MnemonicUtilities
import javax.inject.Inject
import kotlin.time.Duration.Companion.seconds
class LinkDeviceEvent(val mnemonic: ByteArray)
@HiltViewModel
class LinkDeviceViewModel @Inject constructor(
private val application: Application
): AndroidViewModel(application) {
private val QR_ERROR_TIME = 3.seconds
private val state = MutableStateFlow(LinkDeviceState())
val stateFlow = state.asStateFlow()
private val event = Channel<LinkDeviceEvent>()
val eventFlow = event.receiveAsFlow().take(1)
private val qrErrors = Channel<Throwable>()
val qrErrorsFlow = qrErrors.receiveAsFlow()
.debounce(QR_ERROR_TIME)
.takeWhile { event.isEmpty }
.mapNotNull { application.getString(R.string.qrNotRecoveryPassword) }
private val codec by lazy { MnemonicCodec { MnemonicUtilities.loadFileContents(getApplication(), it) } }
fun onContinue() {
viewModelScope.launch {
runDecodeCatching(state.value.recoveryPhrase)
.onSuccess(::onSuccess)
.onFailure(::onFailure)
}
}
fun scan(string: String) {
viewModelScope.launch {
runDecodeCatching(string)
.onSuccess(::onSuccess)
.onFailure(::onScanFailure)
}
}
fun onChange(recoveryPhrase: String) {
state.value = LinkDeviceState(recoveryPhrase)
}
private fun onSuccess(seed: ByteArray) {
viewModelScope.launch { event.send(LinkDeviceEvent(seed)) }
}
private fun onFailure(error: Throwable) {
state.update {
it.copy(
error = when (error) {
is InputTooShort -> R.string.recoveryPasswordErrorMessageShort
is InvalidWord -> R.string.recoveryPasswordErrorMessageIncorrect
else -> R.string.recoveryPasswordErrorMessageGeneric
}.let(application::getString)
)
}
}
private fun onScanFailure(error: Throwable) {
viewModelScope.launch { qrErrors.send(error) }
}
private fun runDecodeCatching(mnemonic: String) = runCatching {
decode(mnemonic)
}
private fun decode(mnemonic: String) = codec.decode(mnemonic).let(Hex::fromStringCondensed)!!
}

View File

@ -0,0 +1,122 @@
package org.thoughtcrime.securesms.onboarding
import android.content.Context
import android.content.Intent
import android.os.Bundle
import androidx.activity.viewModels
import androidx.compose.animation.core.Animatable
import androidx.compose.animation.core.TweenSpec
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.res.stringResource
import androidx.lifecycle.lifecycleScope
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import network.loki.messenger.R
import org.session.libsession.utilities.AppTextSecurePreferences
import org.session.libsession.utilities.TextSecurePreferences
import org.thoughtcrime.securesms.ApplicationContext
import org.thoughtcrime.securesms.BaseActionBarActivity
import org.thoughtcrime.securesms.dependencies.ConfigFactory
import org.thoughtcrime.securesms.onboarding.messagenotifications.MessageNotificationsActivity
import org.thoughtcrime.securesms.onboarding.messagenotifications.startMessageNotificationsActivity
import org.thoughtcrime.securesms.onboarding.pickname.startPickDisplayNameActivity
import org.thoughtcrime.securesms.ui.AppTheme
import org.thoughtcrime.securesms.ui.ProgressArc
import org.thoughtcrime.securesms.ui.contentDescription
import org.thoughtcrime.securesms.util.setUpActionBarSessionLogo
import javax.inject.Inject
private const val EXTRA_MNEMONIC = "mnemonic"
@AndroidEntryPoint
class LoadingActivity: BaseActionBarActivity() {
@Inject
lateinit var configFactory: ConfigFactory
@Inject
lateinit var prefs: TextSecurePreferences
private val viewModel: LoadingViewModel by viewModels()
@Deprecated("Deprecated in Java")
override fun onBackPressed() {
return
}
private fun register(skipped: Boolean) {
prefs.setLastConfigurationSyncTime(System.currentTimeMillis())
val flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
when {
skipped -> startPickDisplayNameActivity(true, flags)
else -> startMessageNotificationsActivity(flags)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
ApplicationContext.getInstance(this).newAccount = false
ComposeView(this)
.apply { setContent { LoadingScreen() } }
.let(::setContentView)
setUpActionBarSessionLogo(true)
viewModel.restore(application, intent.getByteArrayExtra(EXTRA_MNEMONIC)!!)
lifecycleScope.launch {
viewModel.eventFlow.collect {
when (it) {
Event.TIMEOUT -> register(skipped = true)
Event.SUCCESS -> register(skipped = false)
}
}
}
}
@Composable
fun LoadingScreen() {
val state by viewModel.stateFlow.collectAsState()
val animatable = remember { Animatable(initialValue = 0f, visibilityThreshold = 0.005f) }
LaunchedEffect(state) {
animatable.stop()
animatable.animateTo(
targetValue = 1f,
animationSpec = TweenSpec(durationMillis = state.duration.inWholeMilliseconds.toInt())
)
}
AppTheme {
Column {
Spacer(modifier = Modifier.weight(1f))
ProgressArc(animatable.value, modifier = Modifier.align(Alignment.CenterHorizontally).contentDescription(R.string.AccessibilityId_loading_animation))
Text(stringResource(R.string.waitOneMoment), modifier = Modifier.align(Alignment.CenterHorizontally), style = MaterialTheme.typography.h6)
Text(stringResource(R.string.loadAccountProgressMessage), modifier = Modifier.align(Alignment.CenterHorizontally))
Spacer(modifier = Modifier.weight(2f))
}
}
}
}
fun Context.startLoadingActivity(mnemonic: ByteArray) {
Intent(this, LoadingActivity::class.java)
.apply { putExtra(EXTRA_MNEMONIC, mnemonic) }
.also(::startActivity)
}

View File

@ -0,0 +1,101 @@
package org.thoughtcrime.securesms.onboarding
import android.content.Context
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.receiveAsFlow
import kotlinx.coroutines.launch
import org.session.libsession.snode.SnodeModule
import org.session.libsession.utilities.TextSecurePreferences
import org.session.libsignal.database.LokiAPIDatabaseProtocol
import org.session.libsignal.utilities.KeyHelper
import org.session.libsignal.utilities.hexEncodedPublicKey
import org.thoughtcrime.securesms.ApplicationContext
import org.thoughtcrime.securesms.crypto.KeyPairUtilities
import org.thoughtcrime.securesms.dependencies.ConfigFactory
import javax.inject.Inject
import kotlin.time.Duration
import kotlin.time.Duration.Companion.milliseconds
import kotlin.time.Duration.Companion.seconds
data class State(val duration: Duration)
private val DONE_TIME = 1.seconds
private val DONE_ANIMATE_TIME = 500.milliseconds
private val TOTAL_ANIMATE_TIME = 14.seconds
private val TOTAL_TIME = 15.seconds
@HiltViewModel
class LoadingViewModel @Inject constructor(
private val configFactory: ConfigFactory,
private val prefs: TextSecurePreferences,
) : ViewModel() {
private val state = MutableStateFlow(State(TOTAL_ANIMATE_TIME))
val stateFlow = state.asStateFlow()
private val event = Channel<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,165 +0,0 @@
package org.thoughtcrime.securesms.onboarding
import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
import android.content.Intent
import android.graphics.Typeface
import android.net.Uri
import android.os.Bundle
import android.os.Handler
import android.text.Spannable
import android.text.SpannableStringBuilder
import android.text.method.LinkMovementMethod
import android.text.style.ClickableSpan
import android.text.style.StyleSpan
import android.view.View
import android.widget.Toast
import com.goterl.lazysodium.utils.KeyPair
import dagger.hilt.android.AndroidEntryPoint
import network.loki.messenger.R
import network.loki.messenger.databinding.ActivityRegisterBinding
import org.session.libsession.snode.SnodeModule
import org.session.libsession.utilities.TextSecurePreferences
import org.session.libsignal.crypto.ecc.ECKeyPair
import org.session.libsignal.database.LokiAPIDatabaseProtocol
import org.session.libsignal.utilities.KeyHelper
import org.session.libsignal.utilities.hexEncodedPublicKey
import org.thoughtcrime.securesms.BaseActionBarActivity
import org.thoughtcrime.securesms.crypto.KeyPairUtilities
import org.thoughtcrime.securesms.dependencies.ConfigFactory
import org.thoughtcrime.securesms.util.push
import org.thoughtcrime.securesms.util.setUpActionBarSessionLogo
import javax.inject.Inject
@AndroidEntryPoint
class RegisterActivity : BaseActionBarActivity() {
private val temporarySeedKey = "TEMPORARY_SEED_KEY"
@Inject
lateinit var configFactory: ConfigFactory
private lateinit var binding: ActivityRegisterBinding
internal val database: LokiAPIDatabaseProtocol
get() = SnodeModule.shared.storage
private var seed: ByteArray? = null
private var ed25519KeyPair: KeyPair? = null
private var x25519KeyPair: ECKeyPair? = null
set(value) { field = value; updatePublicKeyTextView() }
// region Lifecycle
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityRegisterBinding.inflate(layoutInflater)
setContentView(binding.root)
setUpActionBarSessionLogo()
TextSecurePreferences.apply {
setHasViewedSeed(this@RegisterActivity, false)
setConfigurationMessageSynced(this@RegisterActivity, true)
setRestorationTime(this@RegisterActivity, 0)
setLastProfileUpdateTime(this@RegisterActivity, System.currentTimeMillis())
}
binding.registerButton.setOnClickListener { register() }
binding.copyButton.setOnClickListener { copyPublicKey() }
val termsExplanation = SpannableStringBuilder("By using this service, you agree to our Terms of Service and Privacy Policy")
termsExplanation.setSpan(StyleSpan(Typeface.BOLD), 40, 56, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
termsExplanation.setSpan(object : ClickableSpan() {
override fun onClick(widget: View) {
openURL("https://getsession.org/terms-of-service/")
}
}, 40, 56, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
termsExplanation.setSpan(StyleSpan(Typeface.BOLD), 61, 75, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
termsExplanation.setSpan(object : ClickableSpan() {
override fun onClick(widget: View) {
openURL("https://getsession.org/privacy-policy/")
}
}, 61, 75, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
binding.termsTextView.movementMethod = LinkMovementMethod.getInstance()
binding.termsTextView.text = termsExplanation
updateKeyPair(savedInstanceState?.getByteArray(temporarySeedKey))
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
seed?.let { tempSeed ->
outState.putByteArray(temporarySeedKey, tempSeed)
}
}
// endregion
// region Updating
private fun updateKeyPair(temporaryKey: ByteArray?) {
val keyPairGenerationResult = temporaryKey?.let(KeyPairUtilities::generate) ?: KeyPairUtilities.generate()
seed = keyPairGenerationResult.seed
ed25519KeyPair = keyPairGenerationResult.ed25519KeyPair
x25519KeyPair = keyPairGenerationResult.x25519KeyPair
}
private fun updatePublicKeyTextView() {
val hexEncodedPublicKey = x25519KeyPair!!.hexEncodedPublicKey
val characterCount = hexEncodedPublicKey.count()
var count = 0
val limit = 32
fun animate() {
val numberOfIndexesToShuffle = 32 - count
val indexesToShuffle = (0 until characterCount).shuffled().subList(0, numberOfIndexesToShuffle)
var mangledHexEncodedPublicKey = hexEncodedPublicKey
for (index in indexesToShuffle) {
try {
mangledHexEncodedPublicKey = mangledHexEncodedPublicKey.substring(0, index) + "0123456789abcdef__".random() + mangledHexEncodedPublicKey.substring(index + 1, mangledHexEncodedPublicKey.count())
} catch (exception: Exception) {
// Do nothing
}
}
count += 1
if (count < limit) {
binding.publicKeyTextView.text = mangledHexEncodedPublicKey
Handler().postDelayed({
animate()
}, 32)
} else {
binding.publicKeyTextView.text = hexEncodedPublicKey
}
}
animate()
}
// endregion
// region Interaction
private fun register() {
// This is here to resolve a case where the app restarts before a user completes onboarding
// which can result in an invalid database state
database.clearAllLastMessageHashes()
database.clearReceivedMessageHashValues()
KeyPairUtilities.store(this, seed!!, ed25519KeyPair!!, x25519KeyPair!!)
configFactory.keyPairChanged()
val userHexEncodedPublicKey = x25519KeyPair!!.hexEncodedPublicKey
val registrationID = KeyHelper.generateRegistrationId(false)
TextSecurePreferences.setLocalRegistrationId(this, registrationID)
TextSecurePreferences.setLocalNumber(this, userHexEncodedPublicKey)
TextSecurePreferences.setRestorationTime(this, 0)
TextSecurePreferences.setHasViewedSeed(this, false)
val intent = Intent(this, DisplayNameActivity::class.java)
push(intent)
}
private fun copyPublicKey() {
val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clip = ClipData.newPlainText("Session ID", x25519KeyPair!!.hexEncodedPublicKey)
clipboard.setPrimaryClip(clip)
Toast.makeText(this, R.string.copied_to_clipboard, Toast.LENGTH_SHORT).show()
}
private fun openURL(url: String) {
try {
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
startActivity(intent)
} catch (e: Exception) {
Toast.makeText(this, R.string.invalid_url, Toast.LENGTH_SHORT).show()
}
}
// endregion
}

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,172 @@
package org.thoughtcrime.securesms.onboarding.messagenotifications
import android.content.Context
import android.content.Intent
import android.os.Bundle
import androidx.activity.viewModels
import androidx.annotation.StringRes
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.ButtonDefaults
import androidx.compose.material.MaterialTheme
import androidx.compose.material.OutlinedButton
import androidx.compose.material.RadioButton
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp
import dagger.hilt.android.AndroidEntryPoint
import network.loki.messenger.R
import org.session.libsession.utilities.TextSecurePreferences
import org.thoughtcrime.securesms.ApplicationContext
import org.thoughtcrime.securesms.BaseActionBarActivity
import org.thoughtcrime.securesms.home.HomeActivity
import org.thoughtcrime.securesms.notifications.PushRegistry
import org.thoughtcrime.securesms.ui.AppTheme
import org.thoughtcrime.securesms.ui.OutlineButton
import org.thoughtcrime.securesms.ui.PreviewTheme
import org.thoughtcrime.securesms.ui.ThemeResPreviewParameterProvider
import org.thoughtcrime.securesms.ui.contentDescription
import org.thoughtcrime.securesms.ui.h8
import org.thoughtcrime.securesms.ui.h9
import org.thoughtcrime.securesms.ui.session_accent
import org.thoughtcrime.securesms.ui.small
import org.thoughtcrime.securesms.util.setUpActionBarSessionLogo
import javax.inject.Inject
@AndroidEntryPoint
class MessageNotificationsActivity : BaseActionBarActivity() {
@Inject lateinit var pushRegistry: PushRegistry
private val viewModel: MessageNotificationsViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setUpActionBarSessionLogo(true)
TextSecurePreferences.setHasSeenWelcomeScreen(this, true)
ComposeView(this)
.apply { setContent { MessageNotificationsScreen() } }
.let(::setContentView)
}
@Composable
private fun MessageNotificationsScreen() {
val state by viewModel.stateFlow.collectAsState()
AppTheme {
MessageNotificationsScreen(state, viewModel::setEnabled, ::register)
}
}
private fun register() {
TextSecurePreferences.setPushEnabled(this, viewModel.stateFlow.value.pushEnabled)
ApplicationContext.getInstance(this).startPollingIfNeeded()
pushRegistry.refresh(true)
Intent(this, HomeActivity::class.java).apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
putExtra(HomeActivity.FROM_ONBOARDING, true)
}.also(::startActivity)
}
}
@Preview
@Composable
fun MessageNotificationsScreenPreview(
@PreviewParameter(ThemeResPreviewParameterProvider::class) themeResId: Int
) {
PreviewTheme(themeResId) {
MessageNotificationsScreen()
}
}
@Composable
fun MessageNotificationsScreen(
state: MessageNotificationsState = MessageNotificationsState(),
setEnabled: (Boolean) -> Unit = {},
onContinue: () -> Unit = {}
) {
Column(Modifier.padding(horizontal = 32.dp)) {
Spacer(Modifier.weight(1f))
Text(stringResource(R.string.notificationsMessage), style = MaterialTheme.typography.h4)
Spacer(Modifier.height(16.dp))
Text(stringResource(R.string.onboardingMessageNotificationExplaination))
Spacer(Modifier.height(16.dp))
NotificationRadioButton(
R.string.activity_pn_mode_fast_mode,
R.string.activity_pn_mode_fast_mode_explanation,
R.string.activity_pn_mode_recommended_option_tag,
contentDescription = R.string.AccessibilityId_fast_mode_notifications_button,
selected = state.pushEnabled,
onClick = { setEnabled(true) }
)
Spacer(Modifier.height(16.dp))
NotificationRadioButton(
R.string.activity_pn_mode_slow_mode,
R.string.activity_pn_mode_slow_mode_explanation,
contentDescription = R.string.AccessibilityId_slow_mode_notifications_button,
selected = state.pushDisabled,
onClick = { setEnabled(false) }
)
Spacer(Modifier.weight(1f))
OutlineButton(
stringResource(R.string.continue_2),
modifier = Modifier
.align(Alignment.CenterHorizontally)
.width(262.dp),
onClick = onContinue
)
Spacer(modifier = Modifier.height(12.dp))
}
}
@Composable
fun NotificationRadioButton(
@StringRes title: Int,
@StringRes explanation: Int,
@StringRes tag: Int? = null,
@StringRes contentDescription: Int? = null,
selected: Boolean = false,
onClick: () -> Unit = {}
) {
Row {
OutlinedButton(
onClick = onClick,
modifier = Modifier.weight(1f).contentDescription(contentDescription),
colors = ButtonDefaults.outlinedButtonColors(backgroundColor = MaterialTheme.colors.background, contentColor = Color.White),
border = if (selected) BorderStroke(ButtonDefaults.OutlinedBorderSize, session_accent) else ButtonDefaults.outlinedBorder,
shape = RoundedCornerShape(8.dp)
) {
Column(
verticalArrangement = Arrangement.spacedBy(6.dp)
) {
Text(stringResource(title), style = MaterialTheme.typography.h8)
Text(stringResource(explanation), style = MaterialTheme.typography.small)
tag?.let { Text(stringResource(it), color = session_accent, style = MaterialTheme.typography.h9) }
}
}
RadioButton(selected = selected, modifier = Modifier.align(Alignment.CenterVertically), onClick = onClick)
}
}
fun Context.startMessageNotificationsActivity(flags: Int = 0) {
Intent(this, MessageNotificationsActivity::class.java)
.also { it.flags = flags }
.also(::startActivity)
}

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,149 @@
package org.thoughtcrime.securesms.onboarding.pickname
import android.content.Context
import android.content.Intent
import android.os.Bundle
import androidx.activity.viewModels
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.material.ContentAlpha
import androidx.compose.material.LocalContentAlpha
import androidx.compose.material.LocalContentColor
import androidx.compose.material.MaterialTheme
import androidx.compose.material.OutlinedTextField
import androidx.compose.material.Text
import androidx.compose.material.TextFieldDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.lifecycle.lifecycleScope
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import network.loki.messenger.R
import org.session.libsession.utilities.AppTextSecurePreferences
import org.thoughtcrime.securesms.ApplicationContext
import org.thoughtcrime.securesms.BaseActionBarActivity
import org.thoughtcrime.securesms.onboarding.messagenotifications.MessageNotificationsActivity
import org.thoughtcrime.securesms.onboarding.messagenotifications.startMessageNotificationsActivity
import org.thoughtcrime.securesms.ui.AppTheme
import org.thoughtcrime.securesms.ui.OutlineButton
import org.thoughtcrime.securesms.ui.PreviewTheme
import org.thoughtcrime.securesms.ui.base
import org.thoughtcrime.securesms.ui.baseBold
import org.thoughtcrime.securesms.ui.contentDescription
import org.thoughtcrime.securesms.ui.outlinedTextFieldColors
import org.thoughtcrime.securesms.util.setUpActionBarSessionLogo
import javax.inject.Inject
private const val EXTRA_PICK_NEW_NAME = "extra_pick_new_name"
@AndroidEntryPoint
class PickDisplayNameActivity : BaseActionBarActivity() {
@Inject
lateinit var viewModelFactory: PickDisplayNameViewModel.AssistedFactory
private val viewModel: PickDisplayNameViewModel by viewModels {
val pickNewName = intent.getBooleanExtra(EXTRA_PICK_NEW_NAME, false)
viewModelFactory.create(pickNewName)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setUpActionBarSessionLogo()
ComposeView(this)
.apply { setContent { DisplayNameScreen(viewModel) } }
.let(::setContentView)
lifecycleScope.launch {
viewModel.eventFlow.collect {
startMessageNotificationsActivity()
}
}
}
@Composable
private fun DisplayNameScreen(viewModel: PickDisplayNameViewModel) {
val state = viewModel.stateFlow.collectAsState()
AppTheme {
DisplayName(state.value, viewModel::onChange) { viewModel.onContinue(this) }
}
}
@Preview
@Composable
fun PreviewDisplayName() {
PreviewTheme(R.style.Classic_Dark) {
DisplayName(State())
}
}
@Composable
fun DisplayName(state: State, onChange: (String) -> Unit = {}, onContinue: () -> Unit = {}) {
Column(
verticalArrangement = Arrangement.spacedBy(20.dp),
modifier = Modifier
.padding(horizontal = 50.dp)
.padding(bottom = 12.dp)
) {
Spacer(modifier = Modifier.weight(1f))
Text(stringResource(state.title), style = MaterialTheme.typography.h4)
Text(
stringResource(state.description),
style = MaterialTheme.typography.base,
modifier = Modifier.padding(bottom = 12.dp))
OutlinedTextField(
value = state.displayName,
modifier = Modifier.contentDescription(R.string.AccessibilityId_enter_display_name),
onValueChange = { onChange(it) },
placeholder = { Text(stringResource(R.string.displayNameEnter)) },
colors = outlinedTextFieldColors(state.error != null),
singleLine = true,
keyboardActions = KeyboardActions(
onDone = { onContinue() },
onGo = { onContinue() },
onSearch = { onContinue() },
onSend = { onContinue() },
),
isError = state.error != null,
shape = RoundedCornerShape(12.dp)
)
state.error?.let {
Text(stringResource(it), style = MaterialTheme.typography.baseBold, color = MaterialTheme.colors.error)
}
Spacer(modifier = Modifier.weight(2f))
OutlineButton(
stringResource(R.string.continue_2),
modifier = Modifier
.align(Alignment.CenterHorizontally)
.width(262.dp)
) { onContinue() }
}
}
}
fun Context.startPickDisplayNameActivity(failedToLoad: Boolean = false, flags: Int = 0) {
ApplicationContext.getInstance(this).newAccount = !failedToLoad
Intent(this, PickDisplayNameActivity::class.java)
.apply { putExtra(EXTRA_PICK_NEW_NAME, failedToLoad) }
.also { it.flags = flags }
.also(::startActivity)
}

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.displayNameErrorDescription) } }
displayName.length > NAME_PADDED_LENGTH -> { state.update { it.copy(error = R.string.displayNameErrorDescriptionShorter) } }
else -> {
prefs.setProfileName(displayName)
// This is here to resolve a case where the app restarts before a user completes onboarding
// which can result in an invalid database state
database.clearAllLastMessageHashes()
database.clearReceivedMessageHashValues()
KeyPairUtilities.store(context, seed, ed25519KeyPair, x25519KeyPair)
configFactory.keyPairChanged()
val userHexEncodedPublicKey = x25519KeyPair.hexEncodedPublicKey
val registrationID = KeyHelper.generateRegistrationId(false)
prefs.setLocalRegistrationId(registrationID)
prefs.setLocalNumber(userHexEncodedPublicKey)
prefs.setRestorationTime(0)
prefs.setHasViewedSeed(false)
viewModelScope.launch { event.send(Event.DONE) }
}
}
}
fun onChange(value: String) {
state.update { state -> state.copy(
displayName = value,
error = value.takeIf { it.length > NAME_PADDED_LENGTH }?.let { R.string.displayNameErrorDescriptionShorter }
)
}
}
@dagger.assisted.AssistedFactory
interface AssistedFactory {
fun create(pickNewName: Boolean): Factory
}
@Suppress("UNCHECKED_CAST")
class Factory @AssistedInject constructor(
@Assisted private val pickNewName: Boolean,
private val prefs: TextSecurePreferences,
private val configFactory: ConfigFactory
) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return PickDisplayNameViewModel(pickNewName, prefs, configFactory) as T
}
}
}
data class State(
@StringRes val title: Int = R.string.displayNamePick,
@StringRes val description: Int = R.string.displayNameDescription,
@StringRes val error: Int? = null,
val displayName: String = ""
)
fun pickNewNameState() = State(
title = R.string.displayNameNew,
description = R.string.displayNameErrorNew
)
sealed interface Event {
object DONE: Event
}

View File

@ -0,0 +1,250 @@
package org.thoughtcrime.securesms.onboarding.recoverypassword
import android.content.Context
import android.content.Intent
import android.graphics.Bitmap
import android.os.Bundle
import androidx.activity.viewModels
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.Card
import androidx.compose.material.Icon
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import network.loki.messenger.R
import org.thoughtcrime.securesms.BaseActionBarActivity
import org.thoughtcrime.securesms.showSessionDialog
import org.thoughtcrime.securesms.ui.AppTheme
import org.thoughtcrime.securesms.ui.CellWithPaddingAndMargin
import org.thoughtcrime.securesms.ui.GetString
import org.thoughtcrime.securesms.ui.LaunchedEffectAsync
import org.thoughtcrime.securesms.ui.LocalExtraColors
import org.thoughtcrime.securesms.ui.OutlineButton
import org.thoughtcrime.securesms.ui.PreviewTheme
import org.thoughtcrime.securesms.ui.SessionShieldIcon
import org.thoughtcrime.securesms.ui.ThemeResPreviewParameterProvider
import org.thoughtcrime.securesms.ui.classicDarkColors
import org.thoughtcrime.securesms.ui.colorDestructive
import org.thoughtcrime.securesms.ui.contentDescription
import org.thoughtcrime.securesms.ui.h8
import org.thoughtcrime.securesms.ui.small
import kotlin.time.Duration.Companion.seconds
class RecoveryPasswordActivity : BaseActionBarActivity() {
private val viewModel: RecoveryPasswordViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
supportActionBar!!.title = resources.getString(R.string.sessionRecoveryPassword)
ComposeView(this).apply {
setContent {
RecoveryPassword(viewModel.seed, viewModel.qrBitmap, { viewModel.copySeed(context) }) { onHide() }
}
}.let(::setContentView)
}
private fun onHide() {
showSessionDialog {
title(R.string.recoveryPasswordHidePermanently)
htmlText(R.string.recoveryPasswordHidePermanentlyDescription1)
destructiveButton(R.string.continue_2) { onHideConfirm() }
cancelButton()
}
}
private fun onHideConfirm() {
showSessionDialog {
title(R.string.recoveryPasswordHidePermanently)
text(R.string.recoveryPasswordHidePermanentlyDescription2)
cancelButton()
destructiveButton(
R.string.yes,
contentDescription = R.string.AccessibilityId_confirm_button
) {
viewModel.permanentlyHidePassword()
finish()
}
}
}
}
@Preview
@Composable
fun PreviewRecoveryPassword(
@PreviewParameter(ThemeResPreviewParameterProvider::class) themeResId: Int
) {
PreviewTheme(themeResId) {
RecoveryPassword(seed = "Voyage urban toyed maverick peculiar tuxedo penguin tree grass building listen speak withdraw terminal plane")
}
}
@Composable
fun RecoveryPassword(
seed: String = "",
qrBitmap: Bitmap? = null,
copySeed:() -> Unit = {},
onHide:() -> Unit = {}
) {
AppTheme {
Column(
verticalArrangement = Arrangement.spacedBy(16.dp),
modifier = Modifier
.verticalScroll(rememberScrollState())
.padding(bottom = 16.dp)
) {
RecoveryPasswordCell(seed, qrBitmap, copySeed)
HideRecoveryPasswordCell(onHide)
}
}
}
@Composable
fun RecoveryPasswordCell(seed: String = "", qrBitmap: Bitmap? = null, copySeed:() -> Unit = {}) {
val showQr = remember {
mutableStateOf(false)
}
CellWithPaddingAndMargin {
Column {
Row {
Text(stringResource(R.string.sessionRecoveryPassword))
Spacer(Modifier.width(8.dp))
SessionShieldIcon()
}
Text(stringResource(R.string.recoveryPasswordDescription))
AnimatedVisibility(!showQr.value) {
Text(
seed,
modifier = Modifier
.contentDescription(R.string.AccessibilityId_hide_recovery_password_button)
.padding(vertical = 24.dp)
.border(
width = 1.dp,
color = classicDarkColors[3],
shape = RoundedCornerShape(11.dp)
)
.padding(24.dp),
style = MaterialTheme.typography.small.copy(fontFamily = FontFamily.Monospace),
color = LocalExtraColors.current.prominentButtonColor,
)
}
AnimatedVisibility(showQr.value, modifier = Modifier.align(Alignment.CenterHorizontally)) {
Card(
backgroundColor = LocalExtraColors.current.lightCell,
elevation = 0.dp,
modifier = Modifier
.align(Alignment.CenterHorizontally)
.padding(vertical = 24.dp)
) {
Box {
qrBitmap?.let {
Image(
bitmap = it.asImageBitmap(),
contentDescription = "QR code of your recovery password",
colorFilter = ColorFilter.tint(LocalExtraColors.current.onLightCell)
)
}
Icon(
painter = painterResource(id = R.drawable.session_shield),
contentDescription = "",
tint = LocalExtraColors.current.onLightCell,
modifier = Modifier
.align(Alignment.Center)
.width(46.dp)
.height(56.dp)
.background(color = LocalExtraColors.current.lightCell)
.padding(horizontal = 3.dp, vertical = 1.dp)
)
}
}
}
AnimatedVisibility(!showQr.value) {
Row(horizontalArrangement = Arrangement.spacedBy(32.dp)) {
OutlineButton(
modifier = Modifier.weight(1f),
color = MaterialTheme.colors.onPrimary,
onClick = copySeed,
temporaryContent = { Text(stringResource(R.string.copied)) }
) {
Text(stringResource(R.string.copy))
}
OutlineButton(text = stringResource(R.string.qrView), modifier = Modifier.weight(1f), color = MaterialTheme.colors.onPrimary) { showQr.toggle() }
}
}
AnimatedVisibility(showQr.value, modifier = Modifier.align(Alignment.CenterHorizontally)) {
OutlineButton(
text = stringResource(R.string.recoveryPasswordView),
color = MaterialTheme.colors.onPrimary,
modifier = Modifier.align(Alignment.CenterHorizontally)
) { showQr.toggle() }
}
}
}
}
private fun MutableState<Boolean>.toggle() { value = !value }
@Composable
fun HideRecoveryPasswordCell(onHide: () -> Unit = {}) {
CellWithPaddingAndMargin {
Row {
Column(Modifier.weight(1f)) {
Text(text = stringResource(R.string.recoveryPasswordHideRecoveryPassword), style = MaterialTheme.typography.h8)
Text(text = stringResource(R.string.recoveryPasswordHideRecoveryPasswordDescription))
}
OutlineButton(
stringResource(R.string.hide),
contentDescription = GetString(R.string.AccessibilityId_hide_recovery_password_button),
modifier = Modifier.align(Alignment.CenterVertically),
color = colorDestructive
) { onHide() }
}
}
}
fun Context.startRecoveryPasswordActivity() {
Intent(this, RecoveryPasswordActivity::class.java).also(::startActivity)
}

View File

@ -0,0 +1,54 @@
package org.thoughtcrime.securesms.onboarding.recoverypassword
import android.app.Application
import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
import android.graphics.Bitmap
import androidx.lifecycle.AndroidViewModel
import androidx.preference.PreferenceFragmentCompat.OnPreferenceStartFragmentCallback
import dagger.hilt.android.lifecycle.HiltViewModel
import org.session.libsession.utilities.AppTextSecurePreferences
import org.session.libsession.utilities.TextSecurePreferences
import org.session.libsignal.crypto.MnemonicCodec
import org.session.libsignal.utilities.hexEncodedPrivateKey
import org.thoughtcrime.securesms.crypto.IdentityKeyUtil
import org.thoughtcrime.securesms.crypto.MnemonicUtilities
import org.thoughtcrime.securesms.util.QRCodeUtilities
import org.thoughtcrime.securesms.util.toPx
import javax.inject.Inject
@HiltViewModel
class RecoveryPasswordViewModel @Inject constructor(
private val application: Application
): AndroidViewModel(application) {
val prefs = AppTextSecurePreferences(application)
fun permanentlyHidePassword() {
prefs.setHidePassword(true)
}
fun copySeed(context: Context) {
TextSecurePreferences.setHasViewedSeed(context, true)
val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clip = ClipData.newPlainText("Seed", seed)
clipboard.setPrimaryClip(clip)
}
val seed by lazy {
val hexEncodedSeed = IdentityKeyUtil.retrieve(application, IdentityKeyUtil.LOKI_SEED)
?: IdentityKeyUtil.getIdentityKeyPair(application).hexEncodedPrivateKey // Legacy account
MnemonicCodec { MnemonicUtilities.loadFileContents(application, it) }
.encode(hexEncodedSeed, MnemonicCodec.Language.Configuration.english)
}
val qrBitmap by lazy {
QRCodeUtilities.encode(
data = seed,
size = toPx(280, application.resources),
isInverted = false,
hasTransparentBackground = true
)
}
}

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

@ -20,6 +20,7 @@ import android.view.View
import android.view.inputmethod.EditorInfo
import android.view.inputmethod.InputMethodManager
import android.widget.Toast
import androidx.core.view.isGone
import androidx.core.view.isVisible
import dagger.hilt.android.AndroidEntryPoint
import network.loki.messenger.BuildConfig
@ -46,6 +47,7 @@ import org.thoughtcrime.securesms.home.PathActivity
import org.thoughtcrime.securesms.messagerequests.MessageRequestsActivity
import org.thoughtcrime.securesms.mms.GlideApp
import org.thoughtcrime.securesms.mms.GlideRequests
import org.thoughtcrime.securesms.onboarding.recoverypassword.startRecoveryPasswordActivity
import org.thoughtcrime.securesms.permissions.Permissions
import org.thoughtcrime.securesms.preferences.appearance.AppearanceSettingsActivity
import org.thoughtcrime.securesms.profiles.ProfileMediaConstraints
@ -65,6 +67,10 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() {
@Inject
lateinit var configFactory: ConfigFactory
@Inject
lateinit var prefs: TextSecurePreferences
private lateinit var binding: ActivitySettingsBinding
private var displayNameEditActionMode: ActionMode? = null
@ -87,13 +93,17 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() {
super.onCreate(savedInstanceState, isReady)
binding = ActivitySettingsBinding.inflate(layoutInflater)
setContentView(binding.root)
val displayName = getDisplayName()
glide = GlideApp.with(this)
with(binding) {
}
override fun onStart() {
super.onStart()
binding.run {
setupProfilePictureView(profilePictureView)
profilePictureView.setOnClickListener { showEditProfilePictureUI() }
ctnGroupNameSection.setOnClickListener { startActionMode(DisplayNameEditActionModeCallback()) }
btnGroupNameDisplay.text = displayName
btnGroupNameDisplay.text = getDisplayName()
publicKeyTextView.text = hexEncodedPublicKey
copyButton.setOnClickListener { copyPublicKey() }
shareButton.setOnClickListener { sharePublicKey() }
@ -106,7 +116,9 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() {
appearanceButton.setOnClickListener { showAppearanceSettings() }
inviteFriendButton.setOnClickListener { sendInvitation() }
helpButton.setOnClickListener { showHelp() }
seedButton.setOnClickListener { showSeed() }
passwordDivider.isGone = prefs.getHidePassword()
passwordButton.isGone = prefs.getHidePassword()
passwordButton.setOnClickListener { showPassword() }
clearAllDataButton.setOnClickListener { clearAllData() }
val gitCommitFirstSixChars = BuildConfig.GIT_HASH.take(6)
@ -403,8 +415,8 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() {
show(intent)
}
private fun showSeed() {
SeedDialog().show(supportFragmentManager, "Recovery Phrase Dialog")
private fun showPassword() {
startRecoveryPasswordActivity()
}
private fun clearAllData() {

View File

@ -1,10 +1,25 @@
package org.thoughtcrime.securesms.ui
import android.content.Context
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.material.ButtonDefaults
import androidx.compose.material.Card
import androidx.compose.material.Colors
import androidx.compose.material.ContentAlpha
import androidx.compose.material.LocalContentAlpha
import androidx.compose.material.LocalContentColor
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.material.TextFieldDefaults
import androidx.compose.material.primarySurface
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp
val colorDestructive = Color(0xffFF453A)
@ -42,6 +57,7 @@ const val oceanLight5 = 0xffE7F3F4
const val oceanLight6 = 0xffECFAFB
const val oceanLight7 = 0xffFCFFFF
val session_accent = Color(0xFF31F196)
val ocean_accent = Color(0xff57C9FA)
val oceanLights = arrayOf(oceanLight0, oceanLight1, oceanLight2, oceanLight3, oceanLight4, oceanLight5, oceanLight6, oceanLight7)
@ -61,3 +77,56 @@ fun transparentButtonColors() = ButtonDefaults.buttonColors(backgroundColor = Co
@Composable
fun destructiveButtonColors() = ButtonDefaults.buttonColors(backgroundColor = Color.Transparent, contentColor = colorDestructive)
@Preview
@Composable
fun PreviewMessageDetails(
@PreviewParameter(ThemeResPreviewParameterProvider::class) themeResId: Int
) {
PreviewTheme(themeResId) {
Colors()
}
}
@Composable
private fun Colors() {
AppTheme {
Column {
Box(Modifier.background(MaterialTheme.colors.primary)) {
Text("primary")
}
Box(Modifier.background(MaterialTheme.colors.primaryVariant)) {
Text("primaryVariant")
}
Box(Modifier.background(MaterialTheme.colors.secondary)) {
Text("secondary")
}
Box(Modifier.background(MaterialTheme.colors.secondaryVariant)) {
Text("secondaryVariant")
}
Box(Modifier.background(MaterialTheme.colors.surface)) {
Text("surface")
}
Box(Modifier.background(MaterialTheme.colors.primarySurface)) {
Text("primarySurface")
}
Box(Modifier.background(MaterialTheme.colors.background)) {
Text("background")
}
Box(Modifier.background(MaterialTheme.colors.error)) {
Text("error")
}
}
}
}
@Composable
fun outlinedTextFieldColors(
isError: Boolean
) = TextFieldDefaults.outlinedTextFieldColors(
textColor = if (isError) colorDestructive else LocalContentColor.current,
cursorColor = if (isError) colorDestructive else LocalContentColor.current,
focusedBorderColor = Color(classicDark3),
unfocusedBorderColor = Color(classicDark3),
placeholderColor = if (isError) colorDestructive else MaterialTheme.colors.onSurface.copy(ContentAlpha.medium)
)

View File

@ -1,7 +1,9 @@
package org.thoughtcrime.securesms.ui
import androidx.annotation.DrawableRes
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.ScrollState
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
@ -17,6 +19,7 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.foundation.shape.RoundedCornerShape
@ -31,28 +34,170 @@ import androidx.compose.material.RadioButton
import androidx.compose.material.Text
import androidx.compose.material.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.draw.drawWithContent
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.BlendMode
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.RectangleShape
import androidx.compose.ui.graphics.StrokeCap
import androidx.compose.ui.graphics.drawscope.Stroke
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.semantics.contentDescription
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.TextUnit
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.compose.ui.viewinterop.AndroidView
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import network.loki.messenger.R
import org.session.libsession.utilities.recipients.Recipient
import org.session.libsession.utilities.runIf
import org.thoughtcrime.securesms.components.ProfilePictureView
import org.thoughtcrime.securesms.conversation.disappearingmessages.ui.OptionsCard
import kotlin.math.min
import kotlin.math.roundToInt
import kotlin.time.Duration.Companion.seconds
@Composable
fun OutlineButton(
text: String,
modifier: Modifier = Modifier,
contentDescription: GetString = GetString(text),
color: Color = LocalExtraColors.current.prominentButtonColor,
onClick: () -> Unit
) {
OutlinedButton(
modifier = modifier.contentDescription(contentDescription),
onClick = onClick,
border = BorderStroke(1.dp, color),
shape = RoundedCornerShape(50), // = 50% percent
colors = ButtonDefaults.outlinedButtonColors(
contentColor = color,
backgroundColor = Color.Unspecified
)
) {
Text(text = text)
}
}
@Composable
fun OutlineButton(
modifier: Modifier = Modifier,
color: Color = LocalExtraColors.current.prominentButtonColor,
onClick: () -> Unit = {},
content: @Composable () -> Unit = {}
) {
OutlinedButton(
modifier = modifier,
onClick = onClick,
border = BorderStroke(1.dp, color),
shape = RoundedCornerShape(percent = 50),
colors = ButtonDefaults.outlinedButtonColors(
contentColor = color,
backgroundColor = Color.Unspecified
)
) {
content()
}
}
@Composable
fun OutlineButton(
temporaryContent: @Composable () -> Unit,
modifier: Modifier = Modifier,
color: Color = LocalExtraColors.current.prominentButtonColor,
onClick: () -> Unit = {},
content: @Composable () -> Unit = {}
) {
var clicked by remember { mutableStateOf(false) }
if (clicked) LaunchedEffectAsync {
delay(2.seconds)
clicked = false
}
OutlinedButton(
modifier = modifier,
onClick = {
onClick()
clicked = true
},
border = BorderStroke(1.dp, color),
shape = RoundedCornerShape(percent = 50),
colors = ButtonDefaults.outlinedButtonColors(
contentColor = color,
backgroundColor = Color.Unspecified
)
) {
AnimatedVisibility(clicked) {
temporaryContent()
}
AnimatedVisibility(!clicked) {
content()
}
}
}
@Composable
fun FilledButton(
text: String,
modifier: Modifier = Modifier,
contentDescription: GetString? = GetString(text),
onClick: () -> Unit) {
OutlinedButton(
modifier = modifier.size(108.dp, 34.dp),
onClick = onClick,
shape = RoundedCornerShape(50), // = 50% percent
colors = ButtonDefaults.outlinedButtonColors(
contentColor = MaterialTheme.colors.background,
backgroundColor = LocalExtraColors.current.prominentButtonColor
)
) {
Text(text = text)
}
}
@Composable
fun BorderlessButton(
text: String,
modifier: Modifier = Modifier,
contentDescription: GetString = GetString(text),
fontSize: TextUnit = TextUnit.Unspecified,
lineHeight: TextUnit = TextUnit.Unspecified,
onClick: () -> Unit) {
TextButton(
onClick = onClick,
modifier = modifier.contentDescription(contentDescription),
shape = RoundedCornerShape(50), // = 50% percent
colors = ButtonDefaults.outlinedButtonColors(
contentColor = MaterialTheme.colors.onBackground,
backgroundColor = MaterialTheme.colors.background
)
) {
Text(
text = text,
textAlign = TextAlign.Center,
fontSize = fontSize,
lineHeight = lineHeight,
modifier = Modifier.padding(horizontal = 2.dp)
)
}
}
interface Callbacks<in T> {
fun onSetClick(): Any?
@ -187,8 +332,16 @@ fun <T> TitledRadioButton(option: RadioOption<T>, onClick: () -> Unit) {
@Composable
fun Modifier.contentDescription(text: GetString?): Modifier {
return text?.let {
val context = LocalContext.current
semantics { contentDescription = it(context) }
} ?: this
}
@Composable
fun Modifier.contentDescription(id: Int?): Modifier {
val context = LocalContext.current
return text?.let { semantics { contentDescription = it(context) } } ?: this
return id?.let { semantics { contentDescription = context.getString(it) } } ?: this
}
@Composable
@ -274,3 +427,64 @@ fun RowScope.Avatar(recipient: Recipient) {
)
}
}
@Composable
fun ProgressArc(progress: Float, modifier: Modifier = Modifier) {
val text = (progress * 100).roundToInt()
Box(modifier = modifier) {
Arc(percentage = progress, modifier = Modifier.align(Alignment.Center))
Text("${text}%", color = Color.White, modifier = Modifier.align(Alignment.Center), style = MaterialTheme.typography.h2)
}
}
@Composable
fun Arc(
modifier: Modifier = Modifier,
percentage: Float = 0.25f,
fillColor: Color = session_accent,
backgroundColor: Color = classicDarkColors[3],
strokeWidth: Dp = 18.dp,
sweepAngle: Float = 310f,
startAngle: Float = (360f - sweepAngle) / 2 + 90f
) {
Canvas(
modifier = modifier
.padding(strokeWidth)
.size(186.dp)
) {
// Background Line
drawArc(
color = backgroundColor,
startAngle,
sweepAngle,
false,
style = Stroke(strokeWidth.toPx(), cap = StrokeCap.Round),
size = Size(size.width, size.height)
)
drawArc(
color = fillColor,
startAngle,
percentage * sweepAngle,
false,
style = Stroke(strokeWidth.toPx(), cap = StrokeCap.Round),
size = Size(size.width, size.height)
)
}
}
@Composable
fun RowScope.SessionShieldIcon() {
Icon(
painter = painterResource(R.drawable.session_shield),
contentDescription = null,
modifier = Modifier.align(Alignment.CenterVertically)
.wrapContentSize(unbounded = true)
)
}
@Composable
fun LaunchedEffectAsync(block: suspend CoroutineScope.() -> Unit) {
rememberCoroutineScope().apply { LaunchedEffect(Unit) { launch { block() } } }
}

View File

@ -5,15 +5,25 @@ import androidx.annotation.AttrRes
import androidx.appcompat.view.ContextThemeWrapper
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.text.selection.LocalTextSelectionColors
import androidx.compose.foundation.text.selection.TextSelectionColors
import androidx.compose.material.LocalContentColor
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Shapes
import androidx.compose.material.Typography
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.remember
import androidx.compose.runtime.staticCompositionLocalOf
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import com.google.accompanist.themeadapter.appcompat.AppCompatTheme
import androidx.compose.ui.unit.TextUnit
import androidx.compose.ui.unit.sp
import com.google.accompanist.themeadapter.appcompat.createAppCompatTheme
import com.google.android.material.color.MaterialColors
import network.loki.messenger.R
@ -22,7 +32,9 @@ val LocalExtraColors = staticCompositionLocalOf<ExtraColors> { error("No Custom
data class ExtraColors(
val settingsBackground: Color,
val prominentButtonColor: Color
val prominentButtonColor: Color,
val lightCell: Color,
val onLightCell: Color,
)
/**
@ -32,20 +44,91 @@ data class ExtraColors(
fun AppTheme(
content: @Composable () -> Unit
) {
val extraColors = LocalContext.current.run {
val context = LocalContext.current
val extraColors = context.run {
ExtraColors(
settingsBackground = getColorFromTheme(R.attr.colorSettingsBackground),
prominentButtonColor = getColorFromTheme(R.attr.prominentButtonColor),
lightCell = getColorFromTheme(R.attr.lightCell),
onLightCell = getColorFromTheme(R.attr.onLightCell),
)
}
val surface = context.getColorFromTheme(R.attr.colorSettingsBackground)
CompositionLocalProvider(LocalExtraColors provides extraColors) {
AppCompatTheme {
content()
AppCompatTheme(surface = surface) {
CompositionLocalProvider(LocalTextSelectionColors provides TextSelectionColors(
handleColor = MaterialTheme.colors.secondary,
backgroundColor = MaterialTheme.colors.secondary.copy(alpha = 0.5f)
)) {
content()
}
}
}
}
@Composable
fun AppCompatTheme(
context: Context = LocalContext.current,
readColors: Boolean = true,
typography: Typography = sessionTypography,
shapes: Shapes = MaterialTheme.shapes,
surface: Color? = null,
content: @Composable () -> Unit
) {
val themeParams = remember(context.theme) {
context.createAppCompatTheme(
readColors = readColors,
readTypography = false
)
}
val colors = themeParams.colors ?: MaterialTheme.colors
MaterialTheme(
colors = colors.copy(
surface = surface ?: colors.surface
),
typography = typography,
shapes = shapes,
) {
// We update the LocalContentColor to match our onBackground. This allows the default
// content color to be more appropriate to the theme background
CompositionLocalProvider(
LocalContentColor provides MaterialTheme.colors.onBackground,
content = content
)
}
}
fun boldStyle(size: TextUnit) = TextStyle.Default.copy(
fontWeight = FontWeight.Bold,
fontSize = size
)
fun defaultStyle(size: TextUnit) = TextStyle.Default.copy(fontSize = size)
val sessionTypography = Typography(
h1 = boldStyle(36.sp),
h2 = boldStyle(32.sp),
h3 = boldStyle(29.sp),
h4 = boldStyle(26.sp),
h5 = boldStyle(23.sp),
h6 = boldStyle(20.sp),
)
val Typography.base get() = defaultStyle(14.sp)
val Typography.baseBold get() = boldStyle(14.sp)
val Typography.small get() = defaultStyle(12.sp)
val Typography.extraSmall get() = defaultStyle(11.sp)
val Typography.h7 get() = boldStyle(18.sp)
val Typography.h8 get() = boldStyle(16.sp)
val Typography.h9 get() = boldStyle(14.sp)
fun Context.getColorFromTheme(@AttrRes attr: Int, defaultValue: Int = 0x0): Color =
MaterialColors.getColor(this, attr, defaultValue).let(::Color)

View File

@ -0,0 +1,64 @@
package org.thoughtcrime.securesms.ui.components
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.pager.PagerState
import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Tab
import androidx.compose.material.TabRow
import androidx.compose.material.TabRowDefaults
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp
import kotlinx.coroutines.launch
import network.loki.messenger.R
import org.thoughtcrime.securesms.ui.LocalExtraColors
import org.thoughtcrime.securesms.ui.PreviewTheme
import org.thoughtcrime.securesms.ui.ThemeResPreviewParameterProvider
private val TITLES = listOf(R.string.sessionRecoveryPassword, R.string.qrScan)
@OptIn(ExperimentalFoundationApi::class)
@Composable
fun SessionTabRow(pagerState: PagerState, titles: List<Int>) {
TabRow(
backgroundColor = Color.Unspecified,
selectedTabIndex = pagerState.currentPage,
contentColor = LocalExtraColors.current.prominentButtonColor,
divider = { TabRowDefaults.Divider(color = MaterialTheme.colors.onPrimary.copy(alpha = TabRowDefaults.DividerOpacity)) },
modifier = Modifier
.height(48.dp)
.background(color = Color.Unspecified)
) {
val animationScope = rememberCoroutineScope()
titles.forEachIndexed { i, it ->
Tab(
i == pagerState.currentPage,
onClick = { animationScope.launch { pagerState.animateScrollToPage(i) } },
selectedContentColor = MaterialTheme.colors.onPrimary,
unselectedContentColor = MaterialTheme.colors.onPrimary,
) {
Text(stringResource(id = it))
}
}
}
}
@OptIn(ExperimentalFoundationApi::class)
@androidx.compose.ui.tooling.preview.Preview
@Composable
fun PreviewSessionTabRow(
@PreviewParameter(ThemeResPreviewParameterProvider::class) themeResId: Int
) {
PreviewTheme(themeResId) {
val pagerState = rememberPagerState { TITLES.size }
SessionTabRow(pagerState = pagerState, titles = TITLES)
}
}

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="97dp"
android:viewportWidth="96"
android:viewportHeight="97">
<path
android:pathData="M5.586,92.751C7.289,94.596 14.301,91.379 19.836,88.799C23.984,86.871 40.581,80.061 48.831,76.529C51.059,75.576 54.299,74.331 56.631,71.264C58.701,68.534 64.191,56.939 53.136,45.194C41.916,33.269 30.359,36.561 26.039,39.621C23.496,41.421 21.426,45.479 20.496,47.541C16.566,56.256 10.964,72.224 8.684,78.501C7.011,83.129 3.899,90.921 5.586,92.751Z"
android:fillColor="#FFC107"/>
<path
android:pathData="M19.386,50.166C19.491,51.471 19.753,53.594 20.653,57.681C21.268,60.486 22.273,63.426 23.091,65.369C25.543,71.211 28.986,73.566 32.473,75.456C38.398,78.666 42.426,79.266 42.426,79.266L37.596,81.239C37.596,81.239 34.671,80.631 30.681,78.666C26.878,76.791 22.918,73.619 20.023,67.409C18.771,64.716 18.043,62.106 17.623,60.036C17.106,57.471 17.023,56.016 17.023,56.016L19.386,50.166Z"
android:fillColor="#FF8F00"/>
<path
android:pathData="M13.453,65.376C13.453,65.376 14.053,70.244 18.073,76.386C22.783,83.571 29.36,84.749 29.36,84.749L24.988,86.549C24.988,86.549 20.105,85.056 15.463,78.719C12.568,74.766 11.758,70.041 11.758,70.041L13.453,65.376Z"
android:fillColor="#FF8F00"/>
<path
android:pathData="M9.291,76.911C9.291,76.911 10.386,81.111 12.786,84.246C15.644,87.989 19.281,89.076 19.281,89.076L15.929,90.561C15.929,90.561 13.386,90.029 10.604,86.504C8.489,83.826 7.889,80.751 7.889,80.751L9.291,76.911Z"
android:fillColor="#FF8F00"/>
<path
android:pathData="M7.469,87.576C7.319,87.239 7.319,86.856 7.477,86.526L26.579,46.911L29.722,58.724L9.622,87.756C9.082,88.566 7.866,88.461 7.469,87.576Z"
android:strokeAlpha="0.44"
android:fillColor="#FFFDE7"
android:fillAlpha="0.44"/>
<path
android:pathData="M31.237,62.691C40.162,73.131 50.324,71.826 53.707,69.186C57.097,66.539 59.774,57.441 50.887,47.174C41.572,36.419 31.027,39.486 28.589,41.811C26.152,44.136 23.047,53.114 31.237,62.691Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="55.787"
android:startY="46.678"
android:endX="33.462"
android:endY="60.073"
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.989C58.633,64.259 56.901,64.746 54.576,65.714C51.576,66.959 46.858,67.881 40.453,65.714L42.381,61.071C46.183,62.354 48.936,61.731 51.313,60.329C54.373,58.529 58.558,56.061 65.068,61.529C67.783,63.809 70.566,65.324 72.606,64.634C74.091,64.139 74.878,61.926 75.276,60.164C75.313,60.006 75.373,59.556 75.418,59.159C75.778,56.406 76.378,50.466 80.803,47.429C85.536,44.181 90.508,44.181 90.508,44.181L91.408,53.121C89.121,52.784 87.531,53.249 86.188,53.991C81.133,56.804 85.536,67.604 77.668,71.234C70.101,74.751 63.913,68.684 61.888,66.989Z"
android:fillColor="#03A9F4"/>
<path
android:pathData="M34.048,55.589L30.793,52.671C36.771,45.996 35.195,41.091 34.048,37.521C33.815,36.801 33.598,36.119 33.456,35.466C32.945,33.156 32.84,31.146 32.998,29.391C30.703,26.534 29.691,23.541 29.623,23.339C28.228,19.116 29.278,14.999 31.685,11.136C36.553,3.299 45.366,3.299 45.366,3.299L48.306,11.166C46.07,11.076 38.743,11.189 36.493,14.736C33.651,19.206 35.518,21.966 35.653,22.281C36.201,21.569 36.756,20.999 37.25,20.556C40.843,17.369 43.963,16.911 45.951,17.091C48.186,17.294 50.21,18.419 51.658,20.264C53.241,22.289 53.893,24.921 53.39,27.314C52.903,29.646 51.35,31.619 49.018,32.871C44.945,35.061 41.556,34.761 39.283,34.004C39.298,34.056 39.306,34.116 39.32,34.169C39.403,34.544 39.568,35.069 39.763,35.676C41.09,39.786 43.558,46.311 34.048,55.589ZM39.561,27.441C39.995,27.756 40.453,28.019 40.925,28.206C42.5,28.836 44.218,28.626 46.168,27.576C47.315,26.961 47.451,26.301 47.495,26.084C47.631,25.431 47.405,24.599 46.918,23.976C46.491,23.429 45.995,23.144 45.403,23.084C44.278,22.986 42.756,23.699 41.233,25.056C40.506,25.709 39.951,26.511 39.561,27.441Z"
android:fillColor="#F44336"/>
<path
android:pathData="M47.076,56.811L42.418,56.684C42.418,56.684 44.631,44.189 51.793,42.089C53.136,41.699 54.605,41.301 56.083,41.084C56.96,40.949 58.348,40.746 59.03,40.491C59.188,39.314 58.693,37.814 58.138,36.111C57.703,34.791 57.253,33.434 57.013,31.949C56.548,29.054 57.32,26.496 59.188,24.734C61.468,22.596 65.15,21.914 69.305,22.859C71.675,23.399 73.423,24.561 74.961,25.581C77.158,27.044 78.44,27.786 81.126,25.979C84.373,23.789 80.128,15.216 77.87,10.266L86.293,6.756C87.425,9.231 92.893,21.966 89.285,29.234C88.071,31.679 85.978,33.299 83.233,33.906C77.263,35.241 73.768,32.916 71.218,31.221C70.01,30.419 68.953,29.789 67.805,29.459C59.833,27.186 70.963,38.916 65.751,44.189C62.623,47.346 54.98,48.179 54.486,48.299C49.565,49.484 47.076,56.811 47.076,56.811Z"
android:fillColor="#F48FB1"/>
<path
android:pathData="M32.992,29.391C32.849,31.041 32.782,32.024 33.209,34.169C35.272,35.684 39.764,35.684 39.764,35.684C39.569,35.076 39.397,34.551 39.322,34.176C39.307,34.124 39.299,34.064 39.284,34.011C34.717,31.731 32.992,29.391 32.992,29.391Z"
android:fillColor="#C92B27"/>
<path
android:pathData="M23.648,36.779L15.893,32.976L19.755,27.396L25.838,31.424L23.648,36.779Z"
android:fillColor="#FFC107"/>
<path
android:pathData="M12.217,26.249C8.257,25.716 4.222,22.356 3.779,21.974L7.672,17.406C8.849,18.404 11.347,20.076 13.019,20.301L12.217,26.249Z"
android:fillColor="#FB8C00"/>
<path
android:pathData="M19.206,16.251L13.506,14.384C14.158,12.389 14.331,10.236 13.993,8.159L19.918,7.206C20.406,10.221 20.158,13.349 19.206,16.251Z"
android:fillColor="#03A9F4"/>
<path
android:pathData="M60.666,10.51L54.805,11.792L56.497,19.53L62.359,18.247L60.666,10.51Z"
android:fillColor="#FB8C00"/>
<path
android:pathData="M69.344,13.626L65.219,9.269C67.379,7.221 67.874,4.544 67.874,4.514L73.799,5.481C73.724,5.954 72.966,10.199 69.344,13.626Z"
android:fillColor="#FFC107"/>
<path
android:pathData="M76.877,35.097L71.637,36.735L73.426,42.462L78.667,40.824L76.877,35.097Z"
android:fillColor="#FB8C00"/>
<path
android:pathData="M73.162,85.071L67.2,84.366C67.455,82.244 65.872,79.641 65.438,79.064L70.238,75.464C70.598,75.936 73.725,80.264 73.162,85.071Z"
android:fillColor="#F44336"/>
<path
android:pathData="M90.276,77.466C88.034,77.129 85.739,76.994 83.474,77.076L83.271,71.076C85.904,70.986 88.566,71.136 91.169,71.534L90.276,77.466Z"
android:fillColor="#FB8C00"/>
<path
android:pathData="M86.425,81.456L82.209,85.725L88.01,91.453L92.226,87.184L86.425,81.456Z"
android:fillColor="#F48FB1"/>
<path
android:pathData="M74.159,52.754L69.824,47.797L64.868,52.132L69.203,57.089L74.159,52.754Z"
android:fillColor="#F44336"/>
</vector>

View File

@ -0,0 +1,30 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="162dp"
android:height="146dp"
android:viewportWidth="162"
android:viewportHeight="146">
<path
android:pathData="M0.22,138.16H5.57C5.55,139.54 7.31,140.98 11.56,141.04C15.5,141.06 18.54,140.54 18.54,138.71C18.54,134.7 0.67,139.37 0.67,130.55C0.67,126.34 5.05,123.78 11.56,123.78C18.29,123.78 22.9,126.61 22.94,130.97H17.56C17.58,129.55 16.06,128.11 11.93,128.09C8.37,128.05 5.78,128.59 5.78,130.34C5.78,134.2 23.63,129.93 23.63,138.56C23.63,142.79 18.94,145.36 12,145.36C4.82,145.36 0.13,142.5 0.22,138.16Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M26.74,124.28H46.82V128.57H31.8V132.41H46.55V136.43H31.8V140.58H46.82V144.88H26.74V124.28Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M49.65,138.16H55.01C54.99,139.54 56.74,140.98 60.99,141.04C64.94,141.06 67.98,140.54 67.98,138.71C67.98,134.7 50.11,139.37 50.11,130.55C50.11,126.34 54.49,123.78 60.99,123.78C67.73,123.78 72.34,126.61 72.38,130.97H66.98C67,129.55 65.48,128.11 61.35,128.09C57.8,128.05 55.2,128.59 55.2,130.34C55.2,134.2 73.05,129.93 73.05,138.56C73.05,142.79 68.35,145.36 61.41,145.36C54.24,145.36 49.55,142.5 49.65,138.16Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M74.92,138.16H80.28C80.26,139.54 82.01,140.98 86.27,141.04C90.21,141.06 93.25,140.54 93.25,138.71C93.25,134.7 75.38,139.37 75.38,130.55C75.38,126.34 79.76,123.78 86.27,123.78C93,123.78 97.61,126.61 97.65,130.97H92.27C92.29,129.55 90.77,128.11 86.64,128.09C83.08,128.05 80.49,128.59 80.49,130.34C80.49,134.2 98.34,129.93 98.34,138.56C98.34,142.79 93.65,145.36 86.7,145.36C79.53,145.36 74.84,142.5 74.92,138.16Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M101.44,124.28H106.51V144.88H101.44V124.28Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M109.24,134.58C109.24,128.09 114.22,123.8 122.25,123.8C130.32,123.8 135.28,128.09 135.28,134.58C135.28,141.06 130.32,145.36 122.25,145.36C114.22,145.36 109.24,141.06 109.24,134.58ZM130.24,134.58C130.24,130.41 127.21,128.09 122.25,128.09C117.33,128.09 114.31,130.39 114.31,134.58C114.31,138.77 117.33,141.06 122.25,141.06C127.21,141.06 130.24,138.73 130.24,134.58Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M138.04,124.28H142.27L156.72,137.37V124.28H161.79V144.88H157.51L143.08,131.78V144.88H138.02V124.28H138.04Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M112.78,52.82L93.41,42.1H106.57C118.01,42.1 127.29,32.82 127.29,21.37C127.29,9.92 118.01,0.65 106.57,0.65H60.67C46.32,0.65 34.71,12.26 34.71,26.61C34.71,36.81 40.26,46.24 49.17,51.16L68.54,61.88H55.43C43.99,61.88 34.71,71.16 34.71,82.61C34.71,94.06 43.99,103.33 55.43,103.33H101.28C115.63,103.33 127.24,91.72 127.24,77.37C127.24,67.17 121.69,57.79 112.78,52.82ZM52.27,45.57C45.54,41.84 41.29,34.79 41.14,27.12C40.88,16.09 50.15,7.07 61.18,7.07H106.15C113.82,7.07 120.45,12.98 120.86,20.65C121.28,28.52 115.17,35.26 107.29,35.67C107.08,35.67 106.82,35.67 106.62,35.67H80.72C79.11,35.67 77.87,36.97 77.87,38.52V59.66L52.27,45.57ZM100.82,96.96H55.85C48.18,96.96 41.55,91.05 41.14,83.38C40.72,75.51 46.83,68.78 54.71,68.36C54.97,68.36 55.18,68.36 55.43,68.36H81.34C82.94,68.36 84.19,67.07 84.19,65.51V44.32L109.68,58.41C116.41,62.14 120.66,69.14 120.81,76.86C121.07,87.89 111.85,96.91 100.82,96.96Z"
android:fillColor="#00F782"/>
</vector>

View File

@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="19dp"
android:height="25dp"
android:viewportWidth="19"
android:viewportHeight="25">
<path
android:pathData="M12.477,12.869L10.682,11.837H11.899C12.408,11.837 12.896,11.628 13.256,11.254C13.616,10.881 13.818,10.375 13.818,9.847C13.818,9.319 13.616,8.813 13.256,8.44C12.896,8.066 12.408,7.857 11.899,7.857H7.649C7.012,7.857 6.401,8.12 5.95,8.588C5.499,9.055 5.246,9.689 5.245,10.35C5.245,10.832 5.37,11.305 5.606,11.72C5.842,12.135 6.181,12.477 6.587,12.71L8.383,13.742H7.164C6.91,13.739 6.658,13.788 6.423,13.887C6.188,13.986 5.973,14.132 5.793,14.317C5.612,14.502 5.469,14.722 5.371,14.965C5.273,15.208 5.223,15.469 5.223,15.733C5.223,15.996 5.273,16.257 5.371,16.5C5.469,16.743 5.612,16.963 5.793,17.148C5.973,17.333 6.188,17.479 6.423,17.578C6.658,17.677 6.91,17.726 7.164,17.723H11.414C12.051,17.722 12.663,17.459 13.113,16.992C13.564,16.524 13.818,15.89 13.818,15.229C13.818,14.748 13.694,14.275 13.458,13.86C13.222,13.445 12.884,13.103 12.477,12.869ZM6.874,12.171C6.568,11.995 6.311,11.738 6.13,11.428C5.948,11.117 5.849,10.762 5.84,10.399C5.816,9.34 6.674,8.473 7.695,8.473H11.861C12.573,8.473 13.187,9.039 13.222,9.778C13.231,9.964 13.203,10.15 13.141,10.324C13.078,10.499 12.982,10.658 12.858,10.793C12.735,10.928 12.586,11.035 12.421,11.109C12.256,11.182 12.078,11.22 11.899,11.22H9.5C9.43,11.221 9.362,11.25 9.313,11.302C9.263,11.354 9.236,11.424 9.236,11.497V13.527L6.874,12.171ZM11.368,17.106H7.203C6.49,17.106 5.877,16.541 5.841,15.802C5.833,15.616 5.86,15.43 5.923,15.255C5.985,15.081 6.081,14.921 6.205,14.786C6.328,14.652 6.477,14.544 6.642,14.471C6.807,14.397 6.985,14.359 7.164,14.359H9.563C9.598,14.359 9.633,14.352 9.665,14.338C9.697,14.324 9.727,14.304 9.751,14.278C9.776,14.252 9.796,14.222 9.809,14.189C9.822,14.155 9.829,14.119 9.829,14.083V12.052L12.189,13.408C12.496,13.585 12.752,13.841 12.934,14.152C13.115,14.463 13.215,14.818 13.223,15.182C13.247,16.239 12.39,17.106 11.368,17.106Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M9.505,0.964C9.232,0.964 8.962,1.03 8.705,1.158C8.431,1.294 8.154,1.422 7.877,1.554C7.707,1.632 7.538,1.715 7.373,1.793L7.357,1.801L7.342,1.81L7.246,1.859L7.188,1.888L5.813,2.544C4.297,3.265 2.784,3.987 1.267,4.709C0.555,5.06 0.162,5.736 0.193,6.536C0.197,6.668 0.193,6.816 0.193,6.977C0.193,7.089 0.193,7.204 0.193,7.316V10.759C0.193,10.85 0.193,10.941 0.193,11.031C0.193,11.097 0.193,11.159 0.193,11.225C0.193,11.931 0.185,12.669 0.278,13.448C0.328,13.906 0.413,14.339 0.493,14.76C0.516,14.884 0.54,15.003 0.563,15.127L0.582,15.222L0.609,15.317L0.667,15.506C0.821,16.018 0.978,16.546 1.194,17.086C1.452,17.725 1.768,18.369 2.187,19.107L2.245,19.21L2.299,19.276C3.508,21.219 5.078,22.72 6.968,23.734H6.98L6.991,23.747C7.654,24.089 8.323,24.357 8.982,24.543C9.163,24.592 9.332,24.613 9.498,24.613C9.663,24.613 9.836,24.592 10.006,24.547H10.021L10.036,24.538C10.741,24.337 11.384,24.052 11.923,23.796L11.981,23.767L12.038,23.734C12.073,23.714 12.111,23.689 12.146,23.668C13.251,23.062 14.263,22.27 15.16,21.305C15.707,20.715 16.219,20.039 16.769,19.173L16.792,19.14L16.812,19.107C17.278,18.294 17.635,17.548 17.909,16.822C18.113,16.269 18.271,15.733 18.409,15.23L18.425,15.181L18.436,15.131C18.598,14.393 18.783,13.411 18.802,12.376C18.813,11.984 18.817,11.58 18.821,11.18V10.788L18.825,10.767V10.747C18.813,9.621 18.813,8.474 18.825,7.349C18.825,7.225 18.825,7.118 18.821,7.014C18.821,6.891 18.813,6.775 18.821,6.701C18.887,5.814 18.455,5.051 17.666,4.676C16.25,4.004 14.837,3.327 13.424,2.655L11.649,1.805L11.272,1.628C10.945,1.476 10.618,1.323 10.298,1.162C10.036,1.034 9.775,0.972 9.509,0.972L9.505,0.964ZM9.498,22.959C9.467,22.959 9.424,22.959 9.37,22.942C8.808,22.786 8.231,22.555 7.657,22.258C6.01,21.375 4.636,20.064 3.577,18.36L3.531,18.286L3.5,18.245C3.119,17.573 2.834,16.999 2.611,16.434C2.422,15.964 2.283,15.494 2.133,14.995L2.076,14.805C2.052,14.686 2.029,14.566 2.002,14.426C1.925,14.022 1.852,13.642 1.806,13.242C1.725,12.57 1.729,11.922 1.733,11.225C1.733,11.151 1.733,11.081 1.733,10.994C1.733,10.916 1.733,10.842 1.733,10.763V7.32C1.733,7.217 1.733,7.113 1.733,7.01C1.733,6.837 1.741,6.66 1.733,6.466C1.733,6.383 1.725,6.301 1.891,6.218C3.407,5.497 4.924,4.775 6.441,4.053L7.815,3.397L7.831,3.389L7.846,3.381L7.904,3.352L8,3.303C8.166,3.224 8.327,3.146 8.508,3.063C8.789,2.931 9.066,2.799 9.363,2.655C9.432,2.622 9.478,2.618 9.509,2.618C9.54,2.618 9.586,2.622 9.655,2.655C9.983,2.816 10.31,2.973 10.652,3.133L11.026,3.311L12.8,4.16C14.217,4.837 15.63,5.513 17.046,6.185C17.293,6.301 17.301,6.445 17.293,6.581C17.281,6.738 17.285,6.895 17.293,7.064C17.293,7.151 17.297,7.241 17.297,7.328C17.285,8.47 17.285,9.625 17.297,10.767V11.159C17.289,11.551 17.285,11.947 17.274,12.339C17.254,13.222 17.089,14.096 16.947,14.756C16.816,15.222 16.669,15.721 16.492,16.203C16.253,16.843 15.93,17.511 15.511,18.241C15.014,19.02 14.556,19.622 14.078,20.138C13.297,20.979 12.415,21.672 11.457,22.196L11.403,22.225L11.349,22.258C11.349,22.258 11.322,22.274 11.311,22.283C10.83,22.509 10.252,22.769 9.652,22.938C9.601,22.951 9.548,22.959 9.501,22.959H9.498Z"
android:fillColor="#ffffff"/>
</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,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/very_large_font_size"
android:textStyle="bold"
android:textColor="?android:textColorPrimary"
android:text="@string/activity_display_name_title_2" />
<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_display_name_explanation" />
<EditText
style="@style/SessionEditText"
android:id="@+id/displayNameEditText"
android:contentDescription="@string/AccessibilityId_enter_display_name"
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="textCapWords"
android:maxLength="@integer/max_user_nickname_length_chars"
android:maxLines="1"
android:hint="@string/activity_display_name_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/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:layout_marginBottom="@dimen/medium_spacing"
android:text="@string/continue_2" />
</LinearLayout>

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,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,65 +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:textColor="?android:textColorPrimary"
android:text="@string/fragment_recovery_phrase_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/continueButton"
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:layout_marginBottom="@dimen/medium_spacing"
android:text="@string/continue_2" />
</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

@ -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="20sp"
android:textStyle="bold"
android:textColor="?android:textColorPrimary"
android:text="@string/activity_display_name_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="@dimen/small_font_size"
android:textColor="?android:textColorPrimary"
android:text="@string/activity_display_name_explanation" />
<EditText
style="@style/SmallSessionEditText"
android:contentDescription="@string/AccessibilityId_enter_display_name"
android:id="@+id/displayNameEditText"
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:paddingTop="0dp"
android:paddingBottom="0dp"
android:gravity="center_vertical"
android:inputType="textCapWords"
android:maxLength="@integer/max_user_nickname_length_chars"
android:maxLines="1"
android:hint="@string/activity_display_name_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: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:layout_marginBottom="@dimen/small_spacing"
android:text="@string/continue_2" />
</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,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

@ -86,7 +86,7 @@
android:textColor="?android:textColorPrimary"
android:fontFamily="@font/space_mono_regular"
android:textAlignment="center"
android:contentDescription="@string/AccessibilityId_session_id"
android:contentDescription="@string/AccessibilityId_account_id"
tools:text="05987d601943c267879be41830888066c6a024cbdc9a548d06813924bf3372ea78" />
<LinearLayout
@ -375,14 +375,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_menu_item">
<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"
@ -399,11 +399,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/sessionRecoveryPassword" />
</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,63 +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:textColor="?android:textColorPrimary"
android:text="@string/fragment_recovery_phrase_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
style="@style/SmallSessionEditText"
android:id="@+id/mnemonicEditText"
android:layout_width="match_parent"
android:layout_height="64dp"
android:layout_marginHorizontal="@dimen/very_large_spacing"
android:layout_marginTop="10dp"
android:contentDescription="@string/AccessibilityId_enter_your_recovery_phrase"
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/continueButton"
android:layout_width="match_parent"
android:layout_height="@dimen/medium_button_height"
android:layout_marginHorizontal="@dimen/massive_spacing"
android:layout_marginBottom="@dimen/medium_spacing"
android:contentDescription="@string/AccessibilityId_link_device"
android:text="@string/continue_2" />
</LinearLayout>

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

@ -577,24 +577,21 @@
<string name="invalid_session_id">عنوان تعريف خاطئ</string>
<string name="cancel">إلغاء</string>
<string name="your_session_id">عنوان تعريفك</string>
<string name="activity_landing_title_2">اِبدأ من هنا...</string>
<string name="activity_landing_register_button_title">أنشئ عنوان تعريف</string>
<string name="activity_landing_restore_button_title">واصل بالحساب القديم</string>
<string name="view_fake_chat_bubble_1">ما هي الجلسة (Session)؟</string>
<string name="view_fake_chat_bubble_2">هو تطبيق مراسلة مشفر, لامركزي</string>
<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>
<string name="activity_display_name_title_2">أختر اِسم الاِظهار</string>
<string name="activity_display_name_explanation">هذا سيكون اِسمك عندما تستخدم Session. قد يكون اِسمك الحقيقي, اِسم مستعار أو اي شيئ ترغب به.</string>
<string name="activity_display_name_edit_text_hint">ادخل اسم الِاظهار</string>
<string name="activity_display_name_display_name_missing_error">اِختر اسم من فضلك</string>
<string name="activity_display_name_display_name_too_long_error">اِختر اسم اقصر من فضلك</string>
<string name="displayNamePick">أختر اِسم الاِظهار</string>
<string name="displayNameDescription">هذا سيكون اِسمك عندما تستخدم Session. قد يكون اِسمك الحقيقي, اِسم مستعار أو اي شيئ ترغب به.</string>
<string name="displayNameEnter">ادخل اسم الِاظهار</string>
<string name="displayNameErrorDescription">اِختر اسم من فضلك</string>
<string name="displayNameErrorDescriptionShorter">اِختر اسم اقصر من فضلك</string>
<string name="activity_pn_mode_recommended_option_tag">محبذ</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">اِختر</string>
<string name="activity_home_empty_state_message">لا تملك اي متصلين لحد الان</string>
@ -603,11 +600,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 +644,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 +656,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>
@ -710,7 +699,6 @@
<string name="activity_backup_restore_explanation_1">اِختر ملف النسخ الاحتياطي وأدخل عبارة المرور التي تم إنشاؤه بها.</string>
<string name="activity_backup_restore_passphrase">جملة مرور مكونة من 30 عنصر</string>
<string name="activity_link_device_skip_prompt">هذا يستغرق بعض الوقت، هل تريد أن تتخطى؟</string>
<string name="activity_link_device_link_device">اربط جهاز</string>
<string name="activity_link_device_recovery_phrase">جملة الاسترجاع</string>
<string name="activity_link_device_scan_qr_code">اِفحص رمز QR</string>
<string name="activity_link_device_qr_message">اِذهب إلى التعديلات جملة الاِسترجاع في جهازك الاآخر لإظهار رمز QR الخاص بك.</string>
@ -721,7 +709,6 @@
<string name="activity_pn_mode_slow_mode">الوضع البطيء</string>
<string name="activity_pn_mode_fast_mode_explanation">سوف يتم إشعارك بالرسائل بشكل موثوق و فوري بإستخدام خوادم جوجل للإشعارات.</string>
<string name="activity_pn_mode_slow_mode_explanation">سيقوم سيشن بالتحقق من وجود رسائل جديدة بشكل دوري في الخلفية.</string>
<string name="fragment_recovery_phrase_title">عبارة الإسترداد</string>
<string name="activity_prompt_passphrase_session_locked">إن سيشن مُقفَل</string>
<string name="activity_prompt_passphrase_tap_to_unlock">انقر للفتح</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">أدخل اسم</string>

View File

@ -577,24 +577,21 @@
<string name="invalid_session_id">عنوان تعريف خاطئ</string>
<string name="cancel">إلغاء</string>
<string name="your_session_id">عنوان تعريفك</string>
<string name="activity_landing_title_2">اِبدأ من هنا...</string>
<string name="activity_landing_register_button_title">أنشئ عنوان تعريف</string>
<string name="activity_landing_restore_button_title">واصل بالحساب القديم</string>
<string name="view_fake_chat_bubble_1">ما هي الجلسة (Session)؟</string>
<string name="view_fake_chat_bubble_2">هو تطبيق مراسلة مشفر, لامركزي</string>
<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>
<string name="activity_display_name_title_2">أختر اِسم الاِظهار</string>
<string name="activity_display_name_explanation">هذا سيكون اِسمك عندما تستخدم Session. قد يكون اِسمك الحقيقي, اِسم مستعار أو اي شيئ ترغب به.</string>
<string name="activity_display_name_edit_text_hint">ادخل اسم الِاظهار</string>
<string name="activity_display_name_display_name_missing_error">اِختر اسم من فضلك</string>
<string name="activity_display_name_display_name_too_long_error">اِختر اسم اقصر من فضلك</string>
<string name="displayNamePick">أختر اِسم الاِظهار</string>
<string name="displayNameDescription">هذا سيكون اِسمك عندما تستخدم Session. قد يكون اِسمك الحقيقي, اِسم مستعار أو اي شيئ ترغب به.</string>
<string name="displayNameEnter">ادخل اسم الِاظهار</string>
<string name="displayNameErrorDescription">اِختر اسم من فضلك</string>
<string name="displayNameErrorDescriptionShorter">اِختر اسم اقصر من فضلك</string>
<string name="activity_pn_mode_recommended_option_tag">محبذ</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">اِختر</string>
<string name="activity_home_empty_state_message">لا تملك اي متصلين لحد الان</string>
@ -603,11 +600,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 +644,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 +656,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>
@ -710,7 +699,6 @@
<string name="activity_backup_restore_explanation_1">اِختر ملف النسخ الاحتياطي وأدخل عبارة المرور التي تم إنشاؤه بها.</string>
<string name="activity_backup_restore_passphrase">جملة مرور مكونة من 30 عنصر</string>
<string name="activity_link_device_skip_prompt">هذا يستغرق بعض الوقت، هل تريد أن تتخطى؟</string>
<string name="activity_link_device_link_device">اربط جهاز</string>
<string name="activity_link_device_recovery_phrase">جملة الاسترجاع</string>
<string name="activity_link_device_scan_qr_code">اِفحص رمز QR</string>
<string name="activity_link_device_qr_message">اِذهب إلى التعديلات جملة الاِسترجاع في جهازك الاآخر لإظهار رمز QR الخاص بك.</string>
@ -721,7 +709,6 @@
<string name="activity_pn_mode_slow_mode">الوضع البطيء</string>
<string name="activity_pn_mode_fast_mode_explanation">سوف يتم إشعارك بالرسائل بشكل موثوق و فوري بإستخدام خوادم جوجل للإشعارات.</string>
<string name="activity_pn_mode_slow_mode_explanation">سيقوم سيشن بالتحقق من وجود رسائل جديدة بشكل دوري في الخلفية.</string>
<string name="fragment_recovery_phrase_title">عبارة الإسترداد</string>
<string name="activity_prompt_passphrase_session_locked">إن سيشن مُقفَل</string>
<string name="activity_prompt_passphrase_tap_to_unlock">انقر للفتح</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">أدخل اسم</string>

View File

@ -531,24 +531,21 @@
<string name="invalid_session_id">Etibarsız Session Kimliyi</string>
<string name="cancel">İmtina</string>
<string name="your_session_id">Session Kimliyiniz</string>
<string name="activity_landing_title_2">Session-unuz burada başlayır...</string>
<string name="activity_landing_register_button_title">Session Kimliyini yarat</string>
<string name="activity_landing_restore_button_title">Seansınıza davam edin</string>
<string name="view_fake_chat_bubble_1">Session nədir?</string>
<string name="view_fake_chat_bubble_2">Mərkəzi olmayan, şifrəli bir mesajlaşma tətbiqidir</string>
<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>
<string name="activity_display_name_title_2">Ekran adınızı seçin</string>
<string name="activity_display_name_explanation">Bu, Session istifadə edərkən adınız olacaq. Gerçək adınız, ləqəbiniz və ya istədiyiniz başqa bir ad ola bilər.</string>
<string name="activity_display_name_edit_text_hint">Ekran adını daxil edin</string>
<string name="activity_display_name_display_name_missing_error">Zəhmət olmasa bir ekran adı seçin</string>
<string name="activity_display_name_display_name_too_long_error">Zəhmət olmasa qısa bir ekran adı seçin</string>
<string name="displayNamePick">Ekran adınızı seçin</string>
<string name="displayNameDescription">Bu, Session istifadə edərkən adınız olacaq. Gerçək adınız, ləqəbiniz və ya istədiyiniz başqa bir ad ola bilər.</string>
<string name="displayNameEnter">Ekran adını daxil edin</string>
<string name="displayNameErrorDescription">Zəhmət olmasa bir ekran adı seçin</string>
<string name="displayNameErrorDescriptionShorter">Zəhmət olmasa qısa bir ekran adı seçin</string>
<string name="activity_pn_mode_recommended_option_tag">Tövsiyə edilən</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Zəhmət olmasa bir variant seçin</string>
<string name="activity_home_empty_state_message">Hələ ki, heç bir əlaqəniz yoxdur</string>
@ -557,11 +554,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 +598,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 +610,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>
@ -664,7 +653,6 @@
<string name="activity_backup_restore_explanation_1">Bir nüsxə faylı seçin və ya yaradılan vaxt verilən parolu daxil edin.</string>
<string name="activity_backup_restore_passphrase">30 rəqəmli parol</string>
<string name="activity_link_device_skip_prompt">Bu bir az vaxt apara bilər, ötürmək istəyirsiniz?</string>
<string name="activity_link_device_link_device">Bir cihazla əlaqə yarat</string>
<string name="activity_link_device_recovery_phrase">Bərpa parolu</string>
<string name="activity_link_device_scan_qr_code">QR kodu skan et</string>
<string name="activity_link_device_qr_message">QR kodunu göstərmək üçün digər cihazınızda Tənzimləmələr → \"Bərpa parolu\"na gedin.</string>
@ -675,7 +663,6 @@
<string name="activity_pn_mode_slow_mode">Yavaş rejim</string>
<string name="activity_pn_mode_fast_mode_explanation">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="activity_pn_mode_slow_mode_explanation">Session, arada arxaplanda yeni mesajları yoxlayacaq.</string>
<string name="fragment_recovery_phrase_title">Bərpa parolu</string>
<string name="activity_prompt_passphrase_session_locked">Session kilidlidir</string>
<string name="activity_prompt_passphrase_tap_to_unlock">Kilidi açmaq üçün toxunun</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">Bir ləqəb daxil edin</string>

View File

@ -531,24 +531,19 @@
<string name="invalid_session_id">Etibarsız Session Kimliyi</string>
<string name="cancel">İmtina</string>
<string name="your_session_id">Session Kimliyiniz</string>
<string name="activity_landing_title_2">Session-unuz burada başlayır...</string>
<string name="activity_landing_register_button_title">Session Kimliyini yarat</string>
<string name="activity_landing_restore_button_title">Seansınıza davam edin</string>
<string name="view_fake_chat_bubble_1">Session nədir?</string>
<string name="view_fake_chat_bubble_2">Mərkəzi olmayan, şifrəli bir mesajlaşma tətbiqidir</string>
<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>
<string name="activity_display_name_title_2">Ekran adınızı seçin</string>
<string name="activity_display_name_explanation">Bu, Session istifadə edərkən adınız olacaq. Gerçək adınız, ləqəbiniz və ya istədiyiniz başqa bir ad ola bilər.</string>
<string name="activity_display_name_edit_text_hint">Ekran adını daxil edin</string>
<string name="activity_display_name_display_name_missing_error">Zəhmət olmasa bir ekran adı seçin</string>
<string name="activity_display_name_display_name_too_long_error">Zəhmət olmasa qısa bir ekran adı seçin</string>
<string name="displayNamePick">Ekran adınızı seçin</string>
<string name="displayNameDescription">Bu, Session istifadə edərkən adınız olacaq. Gerçək adınız, ləqəbiniz və ya istədiyiniz başqa bir ad ola bilər.</string>
<string name="displayNameEnter">Ekran adını daxil edin</string>
<string name="displayNameErrorDescription">Zəhmət olmasa bir ekran adı seçin</string>
<string name="displayNameErrorDescriptionShorter">Zəhmət olmasa qısa bir ekran adı seçin</string>
<string name="activity_pn_mode_recommended_option_tag">Tövsiyə edilən</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Zəhmət olmasa bir variant seçin</string>
<string name="activity_home_empty_state_message">Hələ ki, heç bir əlaqəniz yoxdur</string>
@ -557,11 +552,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 +596,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 +608,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>
@ -664,7 +651,6 @@
<string name="activity_backup_restore_explanation_1">Bir nüsxə faylı seçin və ya yaradılan vaxt verilən parolu daxil edin.</string>
<string name="activity_backup_restore_passphrase">30 rəqəmli parol</string>
<string name="activity_link_device_skip_prompt">Bu bir az vaxt apara bilər, ötürmək istəyirsiniz?</string>
<string name="activity_link_device_link_device">Bir cihazla əlaqə yarat</string>
<string name="activity_link_device_recovery_phrase">Bərpa parolu</string>
<string name="activity_link_device_scan_qr_code">QR kodu skan et</string>
<string name="activity_link_device_qr_message">QR kodunu göstərmək üçün digər cihazınızda Tənzimləmələr → \"Bərpa parolu\"na gedin.</string>
@ -675,7 +661,6 @@
<string name="activity_pn_mode_slow_mode">Yavaş rejim</string>
<string name="activity_pn_mode_fast_mode_explanation">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="activity_pn_mode_slow_mode_explanation">Session, arada arxaplanda yeni mesajları yoxlayacaq.</string>
<string name="fragment_recovery_phrase_title">Bərpa parolu</string>
<string name="activity_prompt_passphrase_session_locked">Session kilidlidir</string>
<string name="activity_prompt_passphrase_tap_to_unlock">Kilidi açmaq üçün toxunun</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">Bir ləqəb daxil edin</string>

View File

@ -429,24 +429,21 @@ memproses pertukaran kunci korupsi.</string>
<string name="invalid_session_id">Session salah</string>
<string name="cancel">Batal</string>
<string name="your_session_id">Session ID anda</string>
<string name="activity_landing_title_2">Session anda dimulai di sini</string>
<string name="activity_landing_register_button_title">Buat Session ID</string>
<string name="activity_landing_restore_button_title">Lanjutkan Session</string>
<string name="view_fake_chat_bubble_1">Apa itu Session?</string>
<string name="view_fake_chat_bubble_2">Session adalah aplikasi pesan terenkripsi yang terdesentralisasi</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>
<string name="activity_display_name_title_2">Pilih nama yang ditampilkan</string>
<string name="activity_display_name_explanation">Ini akan menjadi nama anda ketika menggunakan Session. Bisa merupakan nama asli, alias, atau apapun yang anda suka</string>
<string name="activity_display_name_edit_text_hint">Masukkan nama</string>
<string name="activity_display_name_display_name_missing_error">Pilih nama yang ditampilkan</string>
<string name="activity_display_name_display_name_too_long_error">Nama yang dibuat terlalu panjang</string>
<string name="displayNamePick">Pilih nama yang ditampilkan</string>
<string name="displayNameDescription">Ini akan menjadi nama anda ketika menggunakan Session. Bisa merupakan nama asli, alias, atau apapun yang anda suka</string>
<string name="displayNameEnter">Masukkan nama</string>
<string name="displayNameErrorDescription">Pilih nama yang ditampilkan</string>
<string name="displayNameErrorDescriptionShorter">Nama yang dibuat terlalu panjang</string>
<string name="activity_pn_mode_recommended_option_tag">Direkomendasikan</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Pilih salah satu opsi</string>
<string name="activity_home_empty_state_message">Anda belum memiliki kontak</string>
@ -455,10 +452,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 +489,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 +497,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

@ -429,24 +429,21 @@ memproses pertukaran kunci korupsi.</string>
<string name="invalid_session_id">Session salah</string>
<string name="cancel">Batal</string>
<string name="your_session_id">Session ID anda</string>
<string name="activity_landing_title_2">Session anda dimulai di sini</string>
<string name="activity_landing_register_button_title">Buat Session ID</string>
<string name="activity_landing_restore_button_title">Lanjutkan Session</string>
<string name="view_fake_chat_bubble_1">Apa itu Session?</string>
<string name="view_fake_chat_bubble_2">Session adalah aplikasi pesan terenkripsi yang terdesentralisasi</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>
<string name="activity_display_name_title_2">Pilih nama yang ditampilkan</string>
<string name="activity_display_name_explanation">Ini akan menjadi nama anda ketika menggunakan Session. Bisa merupakan nama asli, alias, atau apapun yang anda suka</string>
<string name="activity_display_name_edit_text_hint">Masukkan nama</string>
<string name="activity_display_name_display_name_missing_error">Pilih nama yang ditampilkan</string>
<string name="activity_display_name_display_name_too_long_error">Nama yang dibuat terlalu panjang</string>
<string name="displayNamePick">Pilih nama yang ditampilkan</string>
<string name="displayNameDescription">Ini akan menjadi nama anda ketika menggunakan Session. Bisa merupakan nama asli, alias, atau apapun yang anda suka</string>
<string name="displayNameEnter">Masukkan nama</string>
<string name="displayNameErrorDescription">Pilih nama yang ditampilkan</string>
<string name="displayNameErrorDescriptionShorter">Nama yang dibuat terlalu panjang</string>
<string name="activity_pn_mode_recommended_option_tag">Direkomendasikan</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Pilih salah satu opsi</string>
<string name="activity_home_empty_state_message">Anda belum memiliki kontak</string>
@ -455,10 +452,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 +489,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 +497,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

@ -499,7 +499,6 @@
<string name="activity_conversation_copy_public_key_button_title">Копиране на обществен ключ</string>
<!-- Session -->
<string name="continue_2">Продължи</string>
<string name="activity_landing_restore_button_title">Продължете Вашата Сесия</string>
<string name="activity_restore_title">Възстановяване на профил</string>
<string name="activity_path_device_row_title">Вие</string>
<!-- Next round of translation -->

View File

@ -499,7 +499,6 @@
<string name="activity_conversation_copy_public_key_button_title">Копиране на обществен ключ</string>
<!-- Session -->
<string name="continue_2">Продължи</string>
<string name="activity_landing_restore_button_title">Продължете Вашата Сесия</string>
<string name="activity_restore_title">Възстановяване на профил</string>
<string name="activity_path_device_row_title">Вие</string>
<!-- Next round of translation -->

View File

@ -523,24 +523,21 @@ d\'intercanvi de claus!</string>
<string name="invalid_session_id">ID de Session invàlid</string>
<string name="cancel">Cancel·la</string>
<string name="your_session_id">El teu ID de Session</string>
<string name="activity_landing_title_2">El teu Session comença aquí...</string>
<string name="activity_landing_register_button_title">Crea un ID de Session</string>
<string name="activity_landing_restore_button_title">Continua el teu Session</string>
<string name="view_fake_chat_bubble_1">Què és Session?</string>
<string name="view_fake_chat_bubble_2">És una app xifrada i descentralitzada</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>
<string name="activity_display_name_title_2">Tria el nom que es mostrarà</string>
<string name="activity_display_name_explanation">Aquest serà el teu nom quan facis servir Session. Pot ser el teu nom real, un àlies o qualsevol altra cosa que t\'agradi.</string>
<string name="activity_display_name_edit_text_hint">Escriu el nom a mostrar</string>
<string name="activity_display_name_display_name_missing_error">Tria un nom a mostrar, si us plau</string>
<string name="activity_display_name_display_name_too_long_error">Selecciona un nom de visualització més curt</string>
<string name="displayNamePick">Tria el nom que es mostrarà</string>
<string name="displayNameDescription">Aquest serà el teu nom quan facis servir Session. Pot ser el teu nom real, un àlies o qualsevol altra cosa que t\'agradi.</string>
<string name="displayNameEnter">Escriu el nom a mostrar</string>
<string name="displayNameErrorDescription">Tria un nom a mostrar, si us plau</string>
<string name="displayNameErrorDescriptionShorter">Selecciona un nom de visualització més curt</string>
<string name="activity_pn_mode_recommended_option_tag">Recomanat</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Selecciona una opció, si us plau</string>
<string name="activity_home_empty_state_message">Encara no tens cap contacte</string>
@ -549,11 +546,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 +585,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 +594,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>
@ -645,7 +634,6 @@ d\'intercanvi de claus!</string>
<string name="activity_backup_restore_explanation_1">Selecciona un fitxer de còpia de seguretat i entra la frase de pas amb el qual va ser creat.</string>
<string name="activity_backup_restore_passphrase">Frase de pas de 30 dígits</string>
<string name="activity_link_device_skip_prompt">Això triga un xic, t\'ho vols saltar?</string>
<string name="activity_link_device_link_device">Enllaça un dispositiu</string>
<string name="activity_join_public_chat_join_rooms">O uneix-te a alguns d\'aquests…</string>
<string name="activity_pn_mode_message_notifications">Notificacions de missatge</string>
<string name="activity_pn_mode_explanation">Hi ha dues maneres per les quals Session et pot notificar els missatges nous.</string>
@ -653,7 +641,6 @@ d\'intercanvi de claus!</string>
<string name="activity_pn_mode_slow_mode">Mode lent</string>
<string name="activity_pn_mode_fast_mode_explanation">Es notificaran els missatges de forma immediata i fiable fent servir els servidors de notificació de Google.</string>
<string name="activity_pn_mode_slow_mode_explanation">Session ocasionalment comprovarà en pla secundari si hi ha nous missatges.</string>
<string name="fragment_recovery_phrase_title">Frase de recuperació</string>
<string name="activity_prompt_passphrase_session_locked">El Session està blocat</string>
<string name="activity_prompt_passphrase_tap_to_unlock">Toca per a desblocar</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">Introdueix una sobrenom</string>

View File

@ -523,24 +523,21 @@ d\'intercanvi de claus!</string>
<string name="invalid_session_id">ID de Session invàlid</string>
<string name="cancel">Cancel·la</string>
<string name="your_session_id">El teu ID de Session</string>
<string name="activity_landing_title_2">El teu Session comença aquí...</string>
<string name="activity_landing_register_button_title">Crea un ID de Session</string>
<string name="activity_landing_restore_button_title">Continua el teu Session</string>
<string name="view_fake_chat_bubble_1">Què és Session?</string>
<string name="view_fake_chat_bubble_2">És una app xifrada i descentralitzada</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>
<string name="activity_display_name_title_2">Tria el nom que es mostrarà</string>
<string name="activity_display_name_explanation">Aquest serà el teu nom quan facis servir Session. Pot ser el teu nom real, un àlies o qualsevol altra cosa que t\'agradi.</string>
<string name="activity_display_name_edit_text_hint">Escriu el nom a mostrar</string>
<string name="activity_display_name_display_name_missing_error">Tria un nom a mostrar, si us plau</string>
<string name="activity_display_name_display_name_too_long_error">Selecciona un nom de visualització més curt</string>
<string name="displayNamePick">Tria el nom que es mostrarà</string>
<string name="displayNameDescription">Aquest serà el teu nom quan facis servir Session. Pot ser el teu nom real, un àlies o qualsevol altra cosa que t\'agradi.</string>
<string name="displayNameEnter">Escriu el nom a mostrar</string>
<string name="displayNameErrorDescription">Tria un nom a mostrar, si us plau</string>
<string name="displayNameErrorDescriptionShorter">Selecciona un nom de visualització més curt</string>
<string name="activity_pn_mode_recommended_option_tag">Recomanat</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Selecciona una opció, si us plau</string>
<string name="activity_home_empty_state_message">Encara no tens cap contacte</string>
@ -549,11 +546,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 +585,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 +594,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>
@ -645,7 +634,6 @@ d\'intercanvi de claus!</string>
<string name="activity_backup_restore_explanation_1">Selecciona un fitxer de còpia de seguretat i entra la frase de pas amb el qual va ser creat.</string>
<string name="activity_backup_restore_passphrase">Frase de pas de 30 dígits</string>
<string name="activity_link_device_skip_prompt">Això triga un xic, t\'ho vols saltar?</string>
<string name="activity_link_device_link_device">Enllaça un dispositiu</string>
<string name="activity_join_public_chat_join_rooms">O uneix-te a alguns d\'aquests…</string>
<string name="activity_pn_mode_message_notifications">Notificacions de missatge</string>
<string name="activity_pn_mode_explanation">Hi ha dues maneres per les quals Session et pot notificar els missatges nous.</string>
@ -653,7 +641,6 @@ d\'intercanvi de claus!</string>
<string name="activity_pn_mode_slow_mode">Mode lent</string>
<string name="activity_pn_mode_fast_mode_explanation">Es notificaran els missatges de forma immediata i fiable fent servir els servidors de notificació de Google.</string>
<string name="activity_pn_mode_slow_mode_explanation">Session ocasionalment comprovarà en pla secundari si hi ha nous missatges.</string>
<string name="fragment_recovery_phrase_title">Frase de recuperació</string>
<string name="activity_prompt_passphrase_session_locked">El Session està blocat</string>
<string name="activity_prompt_passphrase_tap_to_unlock">Toca per a desblocar</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">Introdueix una sobrenom</string>

View File

@ -553,24 +553,21 @@
<string name="invalid_session_id">Neplatné Session ID</string>
<string name="cancel">Zrušit</string>
<string name="your_session_id">ID vaší relace</string>
<string name="activity_landing_title_2">Vaše Session začíná zde...</string>
<string name="activity_landing_register_button_title">Vytvořit ID relace</string>
<string name="activity_landing_restore_button_title">Pokračujte ve své relaci</string>
<string name="view_fake_chat_bubble_1">Co je Session?</string>
<string name="view_fake_chat_bubble_2">Je to decentralizovaná a šifrovaná aplikace pro zasílání zpráv</string>
<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>
<string name="activity_display_name_title_2">Vaše jméno</string>
<string name="activity_display_name_explanation">Toto bude váš pseudonym během používání Session. Může to být vaše skutečné jméno, alias, nebo cokoliv jiného, co se vám líbí.</string>
<string name="activity_display_name_edit_text_hint">Zadejte pseudonym</string>
<string name="activity_display_name_display_name_missing_error">Vyberte prosím pseudonym</string>
<string name="activity_display_name_display_name_too_long_error">Vyberte prosím kratší pseudonym</string>
<string name="displayNamePick">Vaše jméno</string>
<string name="displayNameDescription">Toto bude váš pseudonym během používání Session. Může to být vaše skutečné jméno, alias, nebo cokoliv jiného, co se vám líbí.</string>
<string name="displayNameEnter">Zadejte pseudonym</string>
<string name="displayNameErrorDescription">Vyberte prosím pseudonym</string>
<string name="displayNameErrorDescriptionShorter">Vyberte prosím kratší pseudonym</string>
<string name="activity_pn_mode_recommended_option_tag">Doporučeno</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Prosím vyberte možnost</string>
<string name="activity_home_empty_state_message">Zatím nemáte žádné kontakty</string>
@ -579,11 +576,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 +620,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 +632,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>
@ -686,7 +675,6 @@
<string name="activity_backup_restore_explanation_1">Vyberte soubor se zálohou a vložte frázi pro obnovení, s níž byl vytvořen.</string>
<string name="activity_backup_restore_passphrase">Přístupové heslo o délce 30 čísel</string>
<string name="activity_link_device_skip_prompt">Trvá to trochu déle, chcete přeskočit?</string>
<string name="activity_link_device_link_device">Propojit zařízení</string>
<string name="activity_link_device_recovery_phrase">Fráze pro obnovení</string>
<string name="activity_link_device_scan_qr_code">Naskenovat QR kód</string>
<string name="activity_link_device_qr_message">Přejděte do Nastavení → Fráze pro obnovení na vašem dalším zařízení a zobrazte svůj QR kód.</string>
@ -697,7 +685,6 @@
<string name="activity_pn_mode_slow_mode">Pomalý režim</string>
<string name="activity_pn_mode_fast_mode_explanation">Budete spolehlivě a okamžitě informováni o nových zprávách pomocí oznamovacích serverů Google.</string>
<string name="activity_pn_mode_slow_mode_explanation">Session občas zkontroluje nové zprávy na pozadí.</string>
<string name="fragment_recovery_phrase_title">Fráze pro obnovení</string>
<string name="activity_prompt_passphrase_session_locked">Session je zamčený</string>
<string name="activity_prompt_passphrase_tap_to_unlock">Klepněte pro odemčení</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">Zadej přezdívku</string>

View File

@ -553,24 +553,21 @@
<string name="invalid_session_id">Neplatné Session ID</string>
<string name="cancel">Zrušit</string>
<string name="your_session_id">ID vaší relace</string>
<string name="activity_landing_title_2">Vaše Session začíná zde...</string>
<string name="activity_landing_register_button_title">Vytvořit ID relace</string>
<string name="activity_landing_restore_button_title">Pokračujte ve své relaci</string>
<string name="view_fake_chat_bubble_1">Co je Session?</string>
<string name="view_fake_chat_bubble_2">Je to decentralizovaná a šifrovaná aplikace pro zasílání zpráv</string>
<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>
<string name="activity_display_name_title_2">Vaše jméno</string>
<string name="activity_display_name_explanation">Toto bude váš pseudonym během používání Session. Může to být vaše skutečné jméno, alias, nebo cokoliv jiného, co se vám líbí.</string>
<string name="activity_display_name_edit_text_hint">Zadejte pseudonym</string>
<string name="activity_display_name_display_name_missing_error">Vyberte prosím pseudonym</string>
<string name="activity_display_name_display_name_too_long_error">Vyberte prosím kratší pseudonym</string>
<string name="displayNamePick">Vaše jméno</string>
<string name="displayNameDescription">Toto bude váš pseudonym během používání Session. Může to být vaše skutečné jméno, alias, nebo cokoliv jiného, co se vám líbí.</string>
<string name="displayNameEnter">Zadejte pseudonym</string>
<string name="displayNameErrorDescription">Vyberte prosím pseudonym</string>
<string name="displayNameErrorDescriptionShorter">Vyberte prosím kratší pseudonym</string>
<string name="activity_pn_mode_recommended_option_tag">Doporučeno</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Prosím vyberte možnost</string>
<string name="activity_home_empty_state_message">Zatím nemáte žádné kontakty</string>
@ -579,11 +576,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 +620,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 +632,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>
@ -686,7 +675,6 @@
<string name="activity_backup_restore_explanation_1">Vyberte soubor se zálohou a vložte frázi pro obnovení, s níž byl vytvořen.</string>
<string name="activity_backup_restore_passphrase">Přístupové heslo o délce 30 čísel</string>
<string name="activity_link_device_skip_prompt">Trvá to trochu déle, chcete přeskočit?</string>
<string name="activity_link_device_link_device">Propojit zařízení</string>
<string name="activity_link_device_recovery_phrase">Fráze pro obnovení</string>
<string name="activity_link_device_scan_qr_code">Naskenovat QR kód</string>
<string name="activity_link_device_qr_message">Přejděte do Nastavení → Fráze pro obnovení na vašem dalším zařízení a zobrazte svůj QR kód.</string>
@ -697,7 +685,6 @@
<string name="activity_pn_mode_slow_mode">Pomalý režim</string>
<string name="activity_pn_mode_fast_mode_explanation">Budete spolehlivě a okamžitě informováni o nových zprávách pomocí oznamovacích serverů Google.</string>
<string name="activity_pn_mode_slow_mode_explanation">Session občas zkontroluje nové zprávy na pozadí.</string>
<string name="fragment_recovery_phrase_title">Fráze pro obnovení</string>
<string name="activity_prompt_passphrase_session_locked">Session je zamčený</string>
<string name="activity_prompt_passphrase_tap_to_unlock">Klepněte pro odemčení</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">Zadej přezdívku</string>

View File

@ -529,24 +529,21 @@ udveksel besked!</string>
<string name="invalid_session_id">Ugyldigt Session ID</string>
<string name="cancel">Annuller</string>
<string name="your_session_id">Dit Sessions-ID</string>
<string name="activity_landing_title_2">Dit eventyr med Session begynder her...</string>
<string name="activity_landing_register_button_title">Opret Session ID</string>
<string name="activity_landing_restore_button_title">Fortsæt din Session</string>
<string name="view_fake_chat_bubble_1">Hvad er Session?</string>
<string name="view_fake_chat_bubble_2">Det er en decentraliseret, krypteret besked app</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>
<string name="activity_display_name_title_2">Vælg dit visningsnavn</string>
<string name="activity_display_name_explanation">Dette vil være dit navn, når du bruger Session. Det kan være dit rigtige navn, et alias eller noget helt andet.</string>
<string name="activity_display_name_edit_text_hint">Tast et visningsnavn</string>
<string name="activity_display_name_display_name_missing_error">Vælg venligst et display navn</string>
<string name="activity_display_name_display_name_too_long_error">Vælg venligst et kortere display navn</string>
<string name="displayNamePick">Vælg dit visningsnavn</string>
<string name="displayNameDescription">Dette vil være dit navn, når du bruger Session. Det kan være dit rigtige navn, et alias eller noget helt andet.</string>
<string name="displayNameEnter">Tast et visningsnavn</string>
<string name="displayNameErrorDescription">Vælg venligst et display navn</string>
<string name="displayNameErrorDescriptionShorter">Vælg venligst et kortere display navn</string>
<string name="activity_pn_mode_recommended_option_tag">Anbefalet</string>
<string name="activity_home_empty_state_message">Du har ingen kontakter endnu</string>
<string name="activity_home_empty_state_button_title">Start en Session</string>
@ -554,11 +551,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 +580,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>
@ -638,7 +629,6 @@ udveksel besked!</string>
<string name="activity_backup_restore_title">Gendan sikkerhedskopi</string>
<string name="activity_backup_restore_select_file">Vælg en fil</string>
<string name="activity_link_device_skip_prompt">Dette tager et stykke tid, vil du gerne springe over?</string>
<string name="activity_link_device_link_device">Forbind en enhed</string>
<string name="activity_link_device_recovery_phrase">Gendannelsessætning</string>
<string name="activity_link_device_scan_qr_code">Skan QR-kode</string>
<string name="activity_link_device_qr_message">Naviger til Indstillinger → Gendannelsessætning på din anden enhed, for at vise din QR-kode.</string>

View File

@ -529,24 +529,21 @@ udveksel besked!</string>
<string name="invalid_session_id">Ugyldigt Session ID</string>
<string name="cancel">Annuller</string>
<string name="your_session_id">Dit Sessions-ID</string>
<string name="activity_landing_title_2">Dit eventyr med Session begynder her...</string>
<string name="activity_landing_register_button_title">Opret Session ID</string>
<string name="activity_landing_restore_button_title">Fortsæt din Session</string>
<string name="view_fake_chat_bubble_1">Hvad er Session?</string>
<string name="view_fake_chat_bubble_2">Det er en decentraliseret, krypteret besked app</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>
<string name="activity_display_name_title_2">Vælg dit visningsnavn</string>
<string name="activity_display_name_explanation">Dette vil være dit navn, når du bruger Session. Det kan være dit rigtige navn, et alias eller noget helt andet.</string>
<string name="activity_display_name_edit_text_hint">Tast et visningsnavn</string>
<string name="activity_display_name_display_name_missing_error">Vælg venligst et display navn</string>
<string name="activity_display_name_display_name_too_long_error">Vælg venligst et kortere display navn</string>
<string name="displayNamePick">Vælg dit visningsnavn</string>
<string name="displayNameDescription">Dette vil være dit navn, når du bruger Session. Det kan være dit rigtige navn, et alias eller noget helt andet.</string>
<string name="displayNameEnter">Tast et visningsnavn</string>
<string name="displayNameErrorDescription">Vælg venligst et display navn</string>
<string name="displayNameErrorDescriptionShorter">Vælg venligst et kortere display navn</string>
<string name="activity_pn_mode_recommended_option_tag">Anbefalet</string>
<string name="activity_home_empty_state_message">Du har ingen kontakter endnu</string>
<string name="activity_home_empty_state_button_title">Start en Session</string>
@ -554,11 +551,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 +580,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>
@ -638,7 +629,6 @@ udveksel besked!</string>
<string name="activity_backup_restore_title">Gendan sikkerhedskopi</string>
<string name="activity_backup_restore_select_file">Vælg en fil</string>
<string name="activity_link_device_skip_prompt">Dette tager et stykke tid, vil du gerne springe over?</string>
<string name="activity_link_device_link_device">Forbind en enhed</string>
<string name="activity_link_device_recovery_phrase">Gendannelsessætning</string>
<string name="activity_link_device_scan_qr_code">Skan QR-kode</string>
<string name="activity_link_device_qr_message">Naviger til Indstillinger → Gendannelsessætning på din anden enhed, for at vise din QR-kode.</string>

View File

@ -529,24 +529,21 @@
<string name="invalid_session_id">Ungültige Session ID</string>
<string name="cancel">Abbrechen</string>
<string name="your_session_id">Ihre Session ID</string>
<string name="activity_landing_title_2">Ihre Session beginnt hier...</string>
<string name="activity_landing_register_button_title">Session ID erstellen</string>
<string name="activity_landing_restore_button_title">Ihre Session fortsetzen</string>
<string name="view_fake_chat_bubble_1">Was ist Session?</string>
<string name="view_fake_chat_bubble_2">Es ist eine dezentrale, verschlüsselte Messaging-App.</string>
<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>
<string name="activity_display_name_title_2">Wählen Sie Ihren Anzeigenamen</string>
<string name="activity_display_name_explanation">Dies ist Ihr Name, wenn Sie Session verwenden. Es kann Ihr richtiger Name, ein Alias oder etwas andere sein.</string>
<string name="activity_display_name_edit_text_hint">Geben Sie einen Anzeigenamen ein</string>
<string name="activity_display_name_display_name_missing_error">Bitte wählen Sie einen Anzeigenamen</string>
<string name="activity_display_name_display_name_too_long_error">Bitte wählen Sie einen kürzeren Anzeigenamen</string>
<string name="displayNamePick">Wählen Sie Ihren Anzeigenamen</string>
<string name="displayNameDescription">Dies ist Ihr Name, wenn Sie Session verwenden. Es kann Ihr richtiger Name, ein Alias oder etwas andere sein.</string>
<string name="displayNameEnter">Geben Sie einen Anzeigenamen ein</string>
<string name="displayNameErrorDescription">Bitte wählen Sie einen Anzeigenamen</string>
<string name="displayNameErrorDescriptionShorter">Bitte wählen Sie einen kürzeren Anzeigenamen</string>
<string name="activity_pn_mode_recommended_option_tag">Empfohlen</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Bitte wählen Sie eine Option aus.</string>
<string name="activity_home_empty_state_message">Sie haben noch keine Kontakte.</string>
@ -555,11 +552,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 +596,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 +608,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>
@ -662,7 +651,6 @@
<string name="activity_backup_restore_explanation_1">Wähle eine Sicherungs-Datei aus und gib die Passphrase von ihrer Erstellung ein.</string>
<string name="activity_backup_restore_passphrase">30-stellige Passphrase</string>
<string name="activity_link_device_skip_prompt">Dies dauert eine Weile, möchtest du überspringen?</string>
<string name="activity_link_device_link_device">Gerät verbinden</string>
<string name="activity_link_device_recovery_phrase">Wiederherstellungssatz</string>
<string name="activity_link_device_scan_qr_code">QR-Code scannen</string>
<string name="activity_link_device_qr_message">Navigiere zu Einstellungen → Wiederherstellungssatz auf deinem anderen Gerät, um deinen QR-Code anzuzeigen.</string>
@ -673,7 +661,6 @@
<string name="activity_pn_mode_slow_mode">Langsamer Modus</string>
<string name="activity_pn_mode_fast_mode_explanation">Du wirst über neue Nachrichten zuverlässig und sofort über Google\'s Server benachrichtigt.</string>
<string name="activity_pn_mode_slow_mode_explanation">Session sucht gelegentlich nach neuen Nachrichten im Hintergrund.</string>
<string name="fragment_recovery_phrase_title">Sicherungs-Passphrase</string>
<string name="activity_prompt_passphrase_session_locked">Session ist gesperrt</string>
<string name="activity_prompt_passphrase_tap_to_unlock">Tippe zum entsperren</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">Spitznamen eingeben</string>

View File

@ -529,24 +529,21 @@
<string name="invalid_session_id">Ungültige Session ID</string>
<string name="cancel">Abbrechen</string>
<string name="your_session_id">Ihre Session ID</string>
<string name="activity_landing_title_2">Ihre Session beginnt hier...</string>
<string name="activity_landing_register_button_title">Session ID erstellen</string>
<string name="activity_landing_restore_button_title">Ihre Session fortsetzen</string>
<string name="view_fake_chat_bubble_1">Was ist Session?</string>
<string name="view_fake_chat_bubble_2">Es ist eine dezentrale, verschlüsselte Messaging-App.</string>
<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>
<string name="activity_display_name_title_2">Wählen Sie Ihren Anzeigenamen</string>
<string name="activity_display_name_explanation">Dies ist Ihr Name, wenn Sie Session verwenden. Es kann Ihr richtiger Name, ein Alias oder etwas andere sein.</string>
<string name="activity_display_name_edit_text_hint">Geben Sie einen Anzeigenamen ein</string>
<string name="activity_display_name_display_name_missing_error">Bitte wählen Sie einen Anzeigenamen</string>
<string name="activity_display_name_display_name_too_long_error">Bitte wählen Sie einen kürzeren Anzeigenamen</string>
<string name="displayNamePick">Wählen Sie Ihren Anzeigenamen</string>
<string name="displayNameDescription">Dies ist Ihr Name, wenn Sie Session verwenden. Es kann Ihr richtiger Name, ein Alias oder etwas andere sein.</string>
<string name="displayNameEnter">Geben Sie einen Anzeigenamen ein</string>
<string name="displayNameErrorDescription">Bitte wählen Sie einen Anzeigenamen</string>
<string name="displayNameErrorDescriptionShorter">Bitte wählen Sie einen kürzeren Anzeigenamen</string>
<string name="activity_pn_mode_recommended_option_tag">Empfohlen</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Bitte wählen Sie eine Option aus.</string>
<string name="activity_home_empty_state_message">Sie haben noch keine Kontakte.</string>
@ -555,11 +552,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 +596,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 +608,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>
@ -662,7 +651,6 @@
<string name="activity_backup_restore_explanation_1">Wähle eine Sicherungs-Datei aus und gib die Passphrase von ihrer Erstellung ein.</string>
<string name="activity_backup_restore_passphrase">30-stellige Passphrase</string>
<string name="activity_link_device_skip_prompt">Dies dauert eine Weile, möchtest du überspringen?</string>
<string name="activity_link_device_link_device">Gerät verbinden</string>
<string name="activity_link_device_recovery_phrase">Wiederherstellungssatz</string>
<string name="activity_link_device_scan_qr_code">QR-Code scannen</string>
<string name="activity_link_device_qr_message">Navigiere zu Einstellungen → Wiederherstellungssatz auf deinem anderen Gerät, um deinen QR-Code anzuzeigen.</string>
@ -673,7 +661,6 @@
<string name="activity_pn_mode_slow_mode">Langsamer Modus</string>
<string name="activity_pn_mode_fast_mode_explanation">Du wirst über neue Nachrichten zuverlässig und sofort über Google\'s Server benachrichtigt.</string>
<string name="activity_pn_mode_slow_mode_explanation">Session sucht gelegentlich nach neuen Nachrichten im Hintergrund.</string>
<string name="fragment_recovery_phrase_title">Sicherungs-Passphrase</string>
<string name="activity_prompt_passphrase_session_locked">Session ist gesperrt</string>
<string name="activity_prompt_passphrase_tap_to_unlock">Tippe zum entsperren</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">Spitznamen eingeben</string>

View File

@ -531,24 +531,21 @@
<string name="invalid_session_id">Μη έγκυρη Session ταυτότητα</string>
<string name="cancel">Ακύρωση</string>
<string name="your_session_id">Η ταυτότητά σας</string>
<string name="activity_landing_title_2">Η συνομιλία σας ξεκινά εδώ...</string>
<string name="activity_landing_register_button_title">Δημιουργία Session ταυτότητας</string>
<string name="activity_landing_restore_button_title">Συνέχεια συνομιλίας</string>
<string name="view_fake_chat_bubble_1">Τι είναι το Session;</string>
<string name="view_fake_chat_bubble_2">Είναι μια αποκεντρωμένη, κρυπτογραφημένη εφαρμογή μηνυμάτων</string>
<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>
<string name="activity_display_name_title_2">Επιλέξτε το εμφανιζόμενο όνομα σας</string>
<string name="activity_display_name_explanation">Αυτό θα είναι το όνομά σας όταν χρησιμοποιείτε το Session. Μπορεί να είναι το πραγματικό σας όνομα, ένα ψευδώνυμο ή οτιδήποτε άλλο θέλετε.</string>
<string name="activity_display_name_edit_text_hint">Εισάγετε όνομα εμφάνισης</string>
<string name="activity_display_name_display_name_missing_error">Παρακαλώ επιλέξτε ένα εμφανιζόμενο όνομα</string>
<string name="activity_display_name_display_name_too_long_error">Παρακαλώ επιλέξτε ένα μικρότερο όνομα εμφάνισης</string>
<string name="displayNamePick">Επιλέξτε το εμφανιζόμενο όνομα σας</string>
<string name="displayNameDescription">Αυτό θα είναι το όνομά σας όταν χρησιμοποιείτε το Session. Μπορεί να είναι το πραγματικό σας όνομα, ένα ψευδώνυμο ή οτιδήποτε άλλο θέλετε.</string>
<string name="displayNameEnter">Εισάγετε όνομα εμφάνισης</string>
<string name="displayNameErrorDescription">Παρακαλώ επιλέξτε ένα εμφανιζόμενο όνομα</string>
<string name="displayNameErrorDescriptionShorter">Παρακαλώ επιλέξτε ένα μικρότερο όνομα εμφάνισης</string>
<string name="activity_pn_mode_recommended_option_tag">Προτεινόμενο</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Παρακαλούμε κάντε μια επιλογή</string>
<string name="activity_home_empty_state_message">Δεν υπάρχουν επαφές</string>
@ -557,11 +554,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 +598,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 +610,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>
@ -664,7 +653,6 @@
<string name="activity_backup_restore_explanation_1">Επιλέξτε ένα αντίγραφο ασφαλείας και εισάγετε τη φράση πρόσβασης με την οποία δημιουργήθηκε.</string>
<string name="activity_backup_restore_passphrase">φράση 30-ψηφίων</string>
<string name="activity_link_device_skip_prompt">Αυτό παίρνει λίγο χρόνο, θα θέλατε να παραλείψετε;</string>
<string name="activity_link_device_link_device">Σύνδεση Συσκευής</string>
<string name="activity_link_device_recovery_phrase">Φράση Ανάκτησης</string>
<string name="activity_link_device_scan_qr_code">Σάρωση QR κωδικού</string>
<string name="activity_link_device_qr_message">Μεταβείτε στις Ρυθμίσεις → Φράση Ανάκτησης στην άλλη συσκευή σας για να εμφανίσετε τον QR κωδικό σας.</string>
@ -675,7 +663,6 @@
<string name="activity_pn_mode_slow_mode">Αργή Επιλογή</string>
<string name="activity_pn_mode_fast_mode_explanation">Θα ειδοποιηθείτε για νέα μηνύματα αξιόπιστα και άμεσα χρησιμοποιώντας τους διακομιστές ειδοποιήσεων της Google.</string>
<string name="activity_pn_mode_slow_mode_explanation">Το Session θα ελέγχει κατά καιρούς για νέα μηνύματα στο παρασκήνιο.</string>
<string name="fragment_recovery_phrase_title">Φράση Ανάκτησης</string>
<string name="activity_prompt_passphrase_session_locked">Το Session είναι κλειδωμένο</string>
<string name="activity_prompt_passphrase_tap_to_unlock">Πατήστε για ξεκλείδωμα</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">Εισαγωγή ψευδώνυμου</string>

View File

@ -531,24 +531,21 @@
<string name="invalid_session_id">Μη έγκυρη Session ταυτότητα</string>
<string name="cancel">Ακύρωση</string>
<string name="your_session_id">Η ταυτότητά σας</string>
<string name="activity_landing_title_2">Η συνομιλία σας ξεκινά εδώ...</string>
<string name="activity_landing_register_button_title">Δημιουργία Session ταυτότητας</string>
<string name="activity_landing_restore_button_title">Συνέχεια συνομιλίας</string>
<string name="view_fake_chat_bubble_1">Τι είναι το Session;</string>
<string name="view_fake_chat_bubble_2">Είναι μια αποκεντρωμένη, κρυπτογραφημένη εφαρμογή μηνυμάτων</string>
<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>
<string name="activity_display_name_title_2">Επιλέξτε το εμφανιζόμενο όνομα σας</string>
<string name="activity_display_name_explanation">Αυτό θα είναι το όνομά σας όταν χρησιμοποιείτε το Session. Μπορεί να είναι το πραγματικό σας όνομα, ένα ψευδώνυμο ή οτιδήποτε άλλο θέλετε.</string>
<string name="activity_display_name_edit_text_hint">Εισάγετε όνομα εμφάνισης</string>
<string name="activity_display_name_display_name_missing_error">Παρακαλώ επιλέξτε ένα εμφανιζόμενο όνομα</string>
<string name="activity_display_name_display_name_too_long_error">Παρακαλώ επιλέξτε ένα μικρότερο όνομα εμφάνισης</string>
<string name="displayNamePick">Επιλέξτε το εμφανιζόμενο όνομα σας</string>
<string name="displayNameDescription">Αυτό θα είναι το όνομά σας όταν χρησιμοποιείτε το Session. Μπορεί να είναι το πραγματικό σας όνομα, ένα ψευδώνυμο ή οτιδήποτε άλλο θέλετε.</string>
<string name="displayNameEnter">Εισάγετε όνομα εμφάνισης</string>
<string name="displayNameErrorDescription">Παρακαλώ επιλέξτε ένα εμφανιζόμενο όνομα</string>
<string name="displayNameErrorDescriptionShorter">Παρακαλώ επιλέξτε ένα μικρότερο όνομα εμφάνισης</string>
<string name="activity_pn_mode_recommended_option_tag">Προτεινόμενο</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Παρακαλούμε κάντε μια επιλογή</string>
<string name="activity_home_empty_state_message">Δεν υπάρχουν επαφές</string>
@ -557,11 +554,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 +598,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 +610,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>
@ -664,7 +653,6 @@
<string name="activity_backup_restore_explanation_1">Επιλέξτε ένα αντίγραφο ασφαλείας και εισάγετε τη φράση πρόσβασης με την οποία δημιουργήθηκε.</string>
<string name="activity_backup_restore_passphrase">φράση 30-ψηφίων</string>
<string name="activity_link_device_skip_prompt">Αυτό παίρνει λίγο χρόνο, θα θέλατε να παραλείψετε;</string>
<string name="activity_link_device_link_device">Σύνδεση Συσκευής</string>
<string name="activity_link_device_recovery_phrase">Φράση Ανάκτησης</string>
<string name="activity_link_device_scan_qr_code">Σάρωση QR κωδικού</string>
<string name="activity_link_device_qr_message">Μεταβείτε στις Ρυθμίσεις → Φράση Ανάκτησης στην άλλη συσκευή σας για να εμφανίσετε τον QR κωδικό σας.</string>
@ -675,7 +663,6 @@
<string name="activity_pn_mode_slow_mode">Αργή Επιλογή</string>
<string name="activity_pn_mode_fast_mode_explanation">Θα ειδοποιηθείτε για νέα μηνύματα αξιόπιστα και άμεσα χρησιμοποιώντας τους διακομιστές ειδοποιήσεων της Google.</string>
<string name="activity_pn_mode_slow_mode_explanation">Το Session θα ελέγχει κατά καιρούς για νέα μηνύματα στο παρασκήνιο.</string>
<string name="fragment_recovery_phrase_title">Φράση Ανάκτησης</string>
<string name="activity_prompt_passphrase_session_locked">Το Session είναι κλειδωμένο</string>
<string name="activity_prompt_passphrase_tap_to_unlock">Πατήστε για ξεκλείδωμα</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">Εισαγωγή ψευδώνυμου</string>

View File

@ -530,24 +530,21 @@
<string name="invalid_session_id">Malvalida Session ID</string>
<string name="cancel">Nuligi</string>
<string name="your_session_id">Via Session ID</string>
<string name="activity_landing_title_2">Via Sesio komenci ĉi tie...</string>
<string name="activity_landing_register_button_title">Krei Session ID-on</string>
<string name="activity_landing_restore_button_title">Daŭrigi Vian Sesion</string>
<string name="view_fake_chat_bubble_1">Kio estas Session?</string>
<string name="view_fake_chat_bubble_2">Ĝi estas malcentraliza kaj ĉifrita mesaĝilo</string>
<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>
<string name="activity_display_name_title_2">Elektu vian vidigan nomon</string>
<string name="activity_display_name_explanation">Ĉi tio estos via nomo kiam vi uzas Sesion. Ĝi povas esti via vera nomo, alinomo, aŭ io ajn alia vi volas.</string>
<string name="activity_display_name_edit_text_hint">Entajpu vidigan nomon</string>
<string name="activity_display_name_display_name_missing_error">Bonvolu elekti vidigan nomon</string>
<string name="activity_display_name_display_name_too_long_error">Bonvolu elekti plej mallongan vidigan nomon</string>
<string name="displayNamePick">Elektu vian vidigan nomon</string>
<string name="displayNameDescription">Ĉi tio estos via nomo kiam vi uzas Sesion. Ĝi povas esti via vera nomo, alinomo, aŭ io ajn alia vi volas.</string>
<string name="displayNameEnter">Entajpu vidigan nomon</string>
<string name="displayNameErrorDescription">Bonvolu elekti vidigan nomon</string>
<string name="displayNameErrorDescriptionShorter">Bonvolu elekti plej mallongan vidigan nomon</string>
<string name="activity_pn_mode_recommended_option_tag">Rekomendate</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Bonvolu Elekti Opcion</string>
<string name="activity_home_empty_state_message">Vi ankoraŭ ne havas kontaktojn</string>
@ -556,11 +553,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 +595,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 +605,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>
@ -656,7 +645,6 @@
<string name="activity_backup_restore_title">Restaŭri savkopion</string>
<string name="activity_backup_restore_select_file">Elekti dosieron</string>
<string name="activity_backup_restore_passphrase">30-cifera pasfrazo</string>
<string name="activity_link_device_link_device">Ligi Aparaton</string>
<string name="activity_link_device_recovery_phrase">Ripara Frazo</string>
<string name="activity_link_device_scan_qr_code">Skani QR-Kodon</string>
<string name="activity_join_public_chat_join_rooms">Aŭ aliĝu unu de ĉi tiuj…</string>
@ -664,7 +652,6 @@
<string name="activity_pn_mode_fast_mode">Rapida Reĝimo</string>
<string name="activity_pn_mode_slow_mode">Malrapida Maniero</string>
<string name="activity_pn_mode_slow_mode_explanation">Session foje serĉos novajn mesaĝojn en la fono.</string>
<string name="fragment_recovery_phrase_title">Ripara Frazo</string>
<string name="activity_prompt_passphrase_session_locked">Session estas Ŝlosita</string>
<string name="activity_prompt_passphrase_tap_to_unlock">Tuŝetu por Malŝlosi</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">Entajpu alnomon</string>

View File

@ -530,24 +530,21 @@
<string name="invalid_session_id">Malvalida Session ID</string>
<string name="cancel">Nuligi</string>
<string name="your_session_id">Via Session ID</string>
<string name="activity_landing_title_2">Via Sesio komenci ĉi tie...</string>
<string name="activity_landing_register_button_title">Krei Session ID-on</string>
<string name="activity_landing_restore_button_title">Daŭrigi Vian Sesion</string>
<string name="view_fake_chat_bubble_1">Kio estas Session?</string>
<string name="view_fake_chat_bubble_2">Ĝi estas malcentraliza kaj ĉifrita mesaĝilo</string>
<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>
<string name="activity_display_name_title_2">Elektu vian vidigan nomon</string>
<string name="activity_display_name_explanation">Ĉi tio estos via nomo kiam vi uzas Sesion. Ĝi povas esti via vera nomo, alinomo, aŭ io ajn alia vi volas.</string>
<string name="activity_display_name_edit_text_hint">Entajpu vidigan nomon</string>
<string name="activity_display_name_display_name_missing_error">Bonvolu elekti vidigan nomon</string>
<string name="activity_display_name_display_name_too_long_error">Bonvolu elekti plej mallongan vidigan nomon</string>
<string name="displayNamePick">Elektu vian vidigan nomon</string>
<string name="displayNameDescription">Ĉi tio estos via nomo kiam vi uzas Sesion. Ĝi povas esti via vera nomo, alinomo, aŭ io ajn alia vi volas.</string>
<string name="displayNameEnter">Entajpu vidigan nomon</string>
<string name="displayNameErrorDescription">Bonvolu elekti vidigan nomon</string>
<string name="displayNameErrorDescriptionShorter">Bonvolu elekti plej mallongan vidigan nomon</string>
<string name="activity_pn_mode_recommended_option_tag">Rekomendate</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Bonvolu Elekti Opcion</string>
<string name="activity_home_empty_state_message">Vi ankoraŭ ne havas kontaktojn</string>
@ -556,11 +553,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 +595,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 +605,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>
@ -656,7 +645,6 @@
<string name="activity_backup_restore_title">Restaŭri savkopion</string>
<string name="activity_backup_restore_select_file">Elekti dosieron</string>
<string name="activity_backup_restore_passphrase">30-cifera pasfrazo</string>
<string name="activity_link_device_link_device">Ligi Aparaton</string>
<string name="activity_link_device_recovery_phrase">Ripara Frazo</string>
<string name="activity_link_device_scan_qr_code">Skani QR-Kodon</string>
<string name="activity_join_public_chat_join_rooms">Aŭ aliĝu unu de ĉi tiuj…</string>
@ -664,7 +652,6 @@
<string name="activity_pn_mode_fast_mode">Rapida Reĝimo</string>
<string name="activity_pn_mode_slow_mode">Malrapida Maniero</string>
<string name="activity_pn_mode_slow_mode_explanation">Session foje serĉos novajn mesaĝojn en la fono.</string>
<string name="fragment_recovery_phrase_title">Ripara Frazo</string>
<string name="activity_prompt_passphrase_session_locked">Session estas Ŝlosita</string>
<string name="activity_prompt_passphrase_tap_to_unlock">Tuŝetu por Malŝlosi</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">Entajpu alnomon</string>

View File

@ -530,24 +530,21 @@ de intercambio de claves!</string>
<string name="invalid_session_id">ID de Session no válida</string>
<string name="cancel">Cancelar</string>
<string name="your_session_id">Tu ID de Session</string>
<string name="activity_landing_title_2">Tu Session comienza aquí...</string>
<string name="activity_landing_register_button_title">Crear ID de Session</string>
<string name="activity_landing_restore_button_title">Continúa tu Session</string>
<string name="view_fake_chat_bubble_1">¿Qué es Session?</string>
<string name="view_fake_chat_bubble_2">Es una aplicación de mensajería descentralizada y cifrada</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>
<string name="activity_display_name_title_2">Elige tu nombre</string>
<string name="activity_display_name_explanation">Este será tu nombre al usar Session. Puede ser tu nombre real, un alias, o lo que prefieras.</string>
<string name="activity_display_name_edit_text_hint">Ingresa un nombre para mostrar</string>
<string name="activity_display_name_display_name_missing_error">Por favor, elige un nombre para mostrar</string>
<string name="activity_display_name_display_name_too_long_error">Por favor, elige un nombre para mostrar más corto</string>
<string name="displayNamePick">Elige tu nombre</string>
<string name="displayNameDescription">Este será tu nombre al usar Session. Puede ser tu nombre real, un alias, o lo que prefieras.</string>
<string name="displayNameEnter">Ingresa un nombre para mostrar</string>
<string name="displayNameErrorDescription">Por favor, elige un nombre para mostrar</string>
<string name="displayNameErrorDescriptionShorter">Por favor, elige un nombre para mostrar más corto</string>
<string name="activity_pn_mode_recommended_option_tag">Recomendado</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Por favor, elige una opción</string>
<string name="activity_home_empty_state_message">Aún no tienes contactos</string>
@ -556,11 +553,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 +597,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 +609,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>
@ -663,7 +652,6 @@ de intercambio de claves!</string>
<string name="activity_backup_restore_explanation_1">Seleccione un archivo de copia de seguridad e introduzca la clave de acceso con la que fue creada.</string>
<string name="activity_backup_restore_passphrase">Clave de acceso de 30 dígitos</string>
<string name="activity_link_device_skip_prompt">Esto está tomando un tiempo, ¿te gustaría saltarlo?</string>
<string name="activity_link_device_link_device">Vincular un Dispositivo</string>
<string name="activity_link_device_recovery_phrase">Frase de Recuperación</string>
<string name="activity_link_device_scan_qr_code">Escanear Código QR</string>
<string name="activity_link_device_qr_message">Navega a Ajustes → Frase de Recuperación en tu otro dispositivo para mostrar tu código QR.</string>
@ -674,7 +662,6 @@ de intercambio de claves!</string>
<string name="activity_pn_mode_slow_mode">Modo Lento</string>
<string name="activity_pn_mode_fast_mode_explanation">Se le notificará de los nuevos mensajes de forma fiable e inmediata usando los servidores de notificaciones de Google.</string>
<string name="activity_pn_mode_slow_mode_explanation">Session comprobará ocasionalmente si hay nuevos mensajes en segundo plano.</string>
<string name="fragment_recovery_phrase_title">Frase de recuperación</string>
<string name="activity_prompt_passphrase_session_locked">Session está Bloqueado</string>
<string name="activity_prompt_passphrase_tap_to_unlock">Toca para Desbloquear</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">Escriba un apodo</string>

View File

@ -530,24 +530,21 @@ de intercambio de claves!</string>
<string name="invalid_session_id">ID de Session no válida</string>
<string name="cancel">Cancelar</string>
<string name="your_session_id">Tu ID de Session</string>
<string name="activity_landing_title_2">Tu Session comienza aquí...</string>
<string name="activity_landing_register_button_title">Crear ID de Session</string>
<string name="activity_landing_restore_button_title">Continúa tu Session</string>
<string name="view_fake_chat_bubble_1">¿Qué es Session?</string>
<string name="view_fake_chat_bubble_2">Es una aplicación de mensajería descentralizada y cifrada</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>
<string name="activity_display_name_title_2">Elige tu nombre</string>
<string name="activity_display_name_explanation">Este será tu nombre al usar Session. Puede ser tu nombre real, un alias, o lo que prefieras.</string>
<string name="activity_display_name_edit_text_hint">Ingresa un nombre para mostrar</string>
<string name="activity_display_name_display_name_missing_error">Por favor, elige un nombre para mostrar</string>
<string name="activity_display_name_display_name_too_long_error">Por favor, elige un nombre para mostrar más corto</string>
<string name="displayNamePick">Elige tu nombre</string>
<string name="displayNameDescription">Este será tu nombre al usar Session. Puede ser tu nombre real, un alias, o lo que prefieras.</string>
<string name="displayNameEnter">Ingresa un nombre para mostrar</string>
<string name="displayNameErrorDescription">Por favor, elige un nombre para mostrar</string>
<string name="displayNameErrorDescriptionShorter">Por favor, elige un nombre para mostrar más corto</string>
<string name="activity_pn_mode_recommended_option_tag">Recomendado</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Por favor, elige una opción</string>
<string name="activity_home_empty_state_message">Aún no tienes contactos</string>
@ -556,11 +553,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 +597,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 +609,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>
@ -663,7 +652,6 @@ de intercambio de claves!</string>
<string name="activity_backup_restore_explanation_1">Seleccione un archivo de copia de seguridad e introduzca la clave de acceso con la que fue creada.</string>
<string name="activity_backup_restore_passphrase">Clave de acceso de 30 dígitos</string>
<string name="activity_link_device_skip_prompt">Esto está tomando un tiempo, ¿te gustaría saltarlo?</string>
<string name="activity_link_device_link_device">Vincular un Dispositivo</string>
<string name="activity_link_device_recovery_phrase">Frase de Recuperación</string>
<string name="activity_link_device_scan_qr_code">Escanear Código QR</string>
<string name="activity_link_device_qr_message">Navega a Ajustes → Frase de Recuperación en tu otro dispositivo para mostrar tu código QR.</string>
@ -674,7 +662,6 @@ de intercambio de claves!</string>
<string name="activity_pn_mode_slow_mode">Modo Lento</string>
<string name="activity_pn_mode_fast_mode_explanation">Se le notificará de los nuevos mensajes de forma fiable e inmediata usando los servidores de notificaciones de Google.</string>
<string name="activity_pn_mode_slow_mode_explanation">Session comprobará ocasionalmente si hay nuevos mensajes en segundo plano.</string>
<string name="fragment_recovery_phrase_title">Frase de recuperación</string>
<string name="activity_prompt_passphrase_session_locked">Session está Bloqueado</string>
<string name="activity_prompt_passphrase_tap_to_unlock">Toca para Desbloquear</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">Escriba un apodo</string>

View File

@ -553,24 +553,21 @@
<string name="invalid_session_id">شناسه‌ی Session نامعتبر است.</string>
<string name="cancel">لغو</string>
<string name="your_session_id">شناسه‌ی Session شما</string>
<string name="activity_landing_title_2">Session شما از اینجا شروع می‌شود...</string>
<string name="activity_landing_register_button_title">ساخت شناسه‌ی Session</string>
<string name="activity_landing_restore_button_title">Session خود را ادامه دهید</string>
<string name="view_fake_chat_bubble_1">Session چیست؟</string>
<string name="view_fake_chat_bubble_2">Session یک برنامه پیام‌رسان غیرمتمرکز و رمزگذاری شده است.</string>
<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>
<string name="activity_display_name_title_2">نام خود را برای نمایش انتخاب کنید</string>
<string name="activity_display_name_explanation">این نام شما هنگام استفاده از Session خواهد بود. این نام می‌تواند نام واقعی شما، نام مستعار یا هر چیز دیگری که دوست دارید، باشد.</string>
<string name="activity_display_name_edit_text_hint">یک نام وارد کنید</string>
<string name="activity_display_name_display_name_missing_error">لطفا یک نام انتخاب کنید</string>
<string name="activity_display_name_display_name_too_long_error">لطفا نام کوتاه‌تری انتخاب کنید</string>
<string name="displayNamePick">نام خود را برای نمایش انتخاب کنید</string>
<string name="displayNameDescription">این نام شما هنگام استفاده از Session خواهد بود. این نام می‌تواند نام واقعی شما، نام مستعار یا هر چیز دیگری که دوست دارید، باشد.</string>
<string name="displayNameEnter">یک نام وارد کنید</string>
<string name="displayNameErrorDescription">لطفا یک نام انتخاب کنید</string>
<string name="displayNameErrorDescriptionShorter">لطفا نام کوتاه‌تری انتخاب کنید</string>
<string name="activity_pn_mode_recommended_option_tag">گزینه پیشنهادی</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">لطفا یک گزینه را انتخاب کنید</string>
<string name="activity_home_empty_state_message">فهرست مخاطبان شما خالی است.</string>
@ -579,11 +576,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 +621,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 +642,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>
@ -701,7 +690,6 @@
<string name="activity_backup_restore_explanation_1">یک فایل پشتیبان انتخاب و عبارت عبوری که با آن ساخته شده است را وارد کنید.</string>
<string name="activity_backup_restore_passphrase">عبارت عبور ۳۰رقمی</string>
<string name="activity_link_device_skip_prompt">این فرآیند کمی طولانی است، دوست دارید ردش کنید؟</string>
<string name="activity_link_device_link_device">اتصال به یک دستگاه</string>
<string name="activity_link_device_recovery_phrase">عبارت بازیابی</string>
<string name="activity_link_device_scan_qr_code">اسکن کد QR</string>
<string name="activity_link_device_qr_message">برای دیدن کد QR خود، در دستگاه دیگرتان به «تنظیمات ← عبارت بازیابی» مراجعه کنید.</string>
@ -712,7 +700,6 @@
<string name="activity_pn_mode_slow_mode">حالت آهسته</string>
<string name="activity_pn_mode_fast_mode_explanation">با استفاده از سرورهای گوگل، شما به صورت سریع و مطمئن از پیام‌های جدید مطلع می‌شوید.</string>
<string name="activity_pn_mode_slow_mode_explanation">Session هرازگاهی در پس زمینه وجود پیام‌های جدید را بررسی می‌کند.</string>
<string name="fragment_recovery_phrase_title">متن بازیابی</string>
<string name="activity_prompt_passphrase_session_locked">نشست قفل شده‌است</string>
<string name="activity_prompt_passphrase_tap_to_unlock"> ﺑﺮﺍﯼ ﮔﺸﻮﺩﻥ ﺿﺮﺑﻪ ﺑﺰﻧﻴﺪ</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">یک نام مستعار وارد کنید</string>

View File

@ -530,24 +530,21 @@
<string name="invalid_session_id">شناسه‌ی Session نامعتبر است.</string>
<string name="cancel">لغو</string>
<string name="your_session_id">شناسه‌ی Session شما</string>
<string name="activity_landing_title_2">Session شما از اینجا شروع می‌شود...</string>
<string name="activity_landing_register_button_title">ساخت شناسه‌ی Session</string>
<string name="activity_landing_restore_button_title">Session خود را ادامه دهید</string>
<string name="view_fake_chat_bubble_1">Session چیست؟</string>
<string name="view_fake_chat_bubble_2">Session یک برنامه پیام‌رسان غیرمتمرکز و رمزگذاری شده است.</string>
<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>
<string name="activity_display_name_title_2">نام خود را برای نمایش انتخاب کنید</string>
<string name="activity_display_name_explanation">این نام شما هنگام استفاده از Session خواهد بود. این نام می‌تواند نام واقعی شما، نام مستعار یا هر چیز دیگری که دوست دارید، باشد.</string>
<string name="activity_display_name_edit_text_hint">نام نمایشی را وارد کنید</string>
<string name="activity_display_name_display_name_missing_error">لطفا نام نمایشی را انتخاب کنید</string>
<string name="activity_display_name_display_name_too_long_error">لطفا نام نمایشی کوتاه‌تری انتخاب کنید</string>
<string name="displayNamePick">نام خود را برای نمایش انتخاب کنید</string>
<string name="displayNameDescription">این نام شما هنگام استفاده از Session خواهد بود. این نام می‌تواند نام واقعی شما، نام مستعار یا هر چیز دیگری که دوست دارید، باشد.</string>
<string name="displayNameEnter">نام نمایشی را وارد کنید</string>
<string name="displayNameErrorDescription">لطفا نام نمایشی را انتخاب کنید</string>
<string name="displayNameErrorDescriptionShorter">لطفا نام نمایشی کوتاه‌تری انتخاب کنید</string>
<string name="activity_pn_mode_recommended_option_tag">گزینه پیشنهادی</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">لطفا یک گزینه را انتخاب کنید</string>
<string name="activity_home_empty_state_message">فهرست مخاطبان شما خالی است.</string>
@ -556,11 +553,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 +597,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 +609,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>
@ -663,7 +652,6 @@
<string name="activity_backup_restore_explanation_1">یک فایل پشتیبان انتخاب و گذرمتنی که با آن ساخته شده است را وارد کنید.</string>
<string name="activity_backup_restore_passphrase">گذرمتن ۳۰رقمی</string>
<string name="activity_link_device_skip_prompt">این مقداری طول می‌کشد، دوست دارید ردش کنید؟</string>
<string name="activity_link_device_link_device">اتصال به یک دستگاه</string>
<string name="activity_link_device_recovery_phrase">عبارت بازیابی</string>
<string name="activity_link_device_scan_qr_code">اسکن کد QR</string>
<string name="activity_link_device_qr_message">برای دیدن کد QR خود، در دستگاه دیگرتان به «تنظیمات ← عبارت بازیابی» مراجعه کنید.</string>
@ -674,7 +662,6 @@
<string name="activity_pn_mode_slow_mode">حالت آهسته</string>
<string name="activity_pn_mode_fast_mode_explanation">شما سریع و مطمئن با استفاده از سرور‌های اطلاع‌رسانی گوگل از پیام‌های جدید مطلع می‌شوید.</string>
<string name="activity_pn_mode_slow_mode_explanation">نشست هرازگاهی در پس زمینه وجود پیام‌های جدید را بررسی می‌کند.</string>
<string name="fragment_recovery_phrase_title">متن بازیابی</string>
<string name="activity_prompt_passphrase_session_locked">نشست قفل شده‌است</string>
<string name="activity_prompt_passphrase_tap_to_unlock"> ﺑﺮﺍﯼ ﮔﺸﻮﺩﻥ ﺿﺮﺑﻪ ﺑﺰﻧﻴﺪ</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">یک نام مستعار وارد کنید</string>

View File

@ -529,24 +529,21 @@ on viallinen!</string>
<string name="invalid_session_id">Virheellinen Session ID</string>
<string name="cancel">Peruuta</string>
<string name="your_session_id">Sinun Session ID</string>
<string name="activity_landing_title_2">Session alkaa täältä...</string>
<string name="activity_landing_register_button_title">Tee Session ID</string>
<string name="activity_landing_restore_button_title">Jatka Istuntoasi</string>
<string name="view_fake_chat_bubble_1">Mikä on Session?</string>
<string name="view_fake_chat_bubble_2">Se on hajautettu, salattu viestisovellus</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>
<string name="activity_display_name_title_2">Valitse näyttönimi</string>
<string name="activity_display_name_explanation">Tämä on nimesi, kun käytät Sessionia. Se voi olla oikea nimesi, kutsumanimi tai mitä tahansa muuta haluat.</string>
<string name="activity_display_name_edit_text_hint">Syötä näyttönimi</string>
<string name="activity_display_name_display_name_missing_error">Valitse näyttönimi</string>
<string name="activity_display_name_display_name_too_long_error">Valitse lyhyempi näyttönimi</string>
<string name="displayNamePick">Valitse näyttönimi</string>
<string name="displayNameDescription">Tämä on nimesi, kun käytät Sessionia. Se voi olla oikea nimesi, kutsumanimi tai mitä tahansa muuta haluat.</string>
<string name="displayNameEnter">Syötä näyttönimi</string>
<string name="displayNameErrorDescription">Valitse näyttönimi</string>
<string name="displayNameErrorDescriptionShorter">Valitse lyhyempi näyttönimi</string>
<string name="activity_pn_mode_recommended_option_tag">Suositeltu</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Valitse vaihtoehto</string>
<string name="activity_home_empty_state_message">Sinulla ei ole yhteystietoja</string>
@ -555,11 +552,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 +596,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 +608,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>
@ -662,7 +651,6 @@ on viallinen!</string>
<string name="activity_backup_restore_explanation_1">Valitse varmuuskopiotiedosto ja kirjoita salasana, jonka kanssa se on luotu.</string>
<string name="activity_backup_restore_passphrase">30-merkkinen pääsykoodi</string>
<string name="activity_link_device_skip_prompt">Tämä kestää jonkin aikaa, haluaisitko ohittaa?</string>
<string name="activity_link_device_link_device">Yhdistä laite</string>
<string name="activity_link_device_recovery_phrase">Palautusvirke</string>
<string name="activity_link_device_scan_qr_code">Skannaa QR-koodi</string>
<string name="activity_link_device_qr_message">Siirry asetuksiin → palautusvirke toisella laitteellasi näyttääksesi QR-koodisi.</string>
@ -673,7 +661,6 @@ on viallinen!</string>
<string name="activity_pn_mode_slow_mode">Hidastila</string>
<string name="activity_pn_mode_fast_mode_explanation">Sinulle ilmoitetaan uusista viesteistä luotettavasti ja viivyttelemättä Applen ilmoituspalvelua käyttäen.</string>
<string name="activity_pn_mode_slow_mode_explanation">Session tarkistaa taustalla ajoittain uudet viestit.</string>
<string name="fragment_recovery_phrase_title">Palautusvirke</string>
<string name="activity_prompt_passphrase_session_locked">Session on lukittu</string>
<string name="activity_prompt_passphrase_tap_to_unlock">Avaa napauttamalla</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">Anna nimimerkki</string>

View File

@ -529,24 +529,21 @@ on viallinen!</string>
<string name="invalid_session_id">Virheellinen Session ID</string>
<string name="cancel">Peruuta</string>
<string name="your_session_id">Sinun Session ID</string>
<string name="activity_landing_title_2">Session alkaa täältä...</string>
<string name="activity_landing_register_button_title">Tee Session ID</string>
<string name="activity_landing_restore_button_title">Jatka Istuntoasi</string>
<string name="view_fake_chat_bubble_1">Mikä on Session?</string>
<string name="view_fake_chat_bubble_2">Se on hajautettu, salattu viestisovellus</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>
<string name="activity_display_name_title_2">Valitse näyttönimi</string>
<string name="activity_display_name_explanation">Tämä on nimesi, kun käytät Sessionia. Se voi olla oikea nimesi, kutsumanimi tai mitä tahansa muuta haluat.</string>
<string name="activity_display_name_edit_text_hint">Syötä näyttönimi</string>
<string name="activity_display_name_display_name_missing_error">Valitse näyttönimi</string>
<string name="activity_display_name_display_name_too_long_error">Valitse lyhyempi näyttönimi</string>
<string name="displayNamePick">Valitse näyttönimi</string>
<string name="displayNameDescription">Tämä on nimesi, kun käytät Sessionia. Se voi olla oikea nimesi, kutsumanimi tai mitä tahansa muuta haluat.</string>
<string name="displayNameEnter">Syötä näyttönimi</string>
<string name="displayNameErrorDescription">Valitse näyttönimi</string>
<string name="displayNameErrorDescriptionShorter">Valitse lyhyempi näyttönimi</string>
<string name="activity_pn_mode_recommended_option_tag">Suositeltu</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Valitse vaihtoehto</string>
<string name="activity_home_empty_state_message">Sinulla ei ole yhteystietoja</string>
@ -555,11 +552,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 +596,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 +608,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>
@ -662,7 +651,6 @@ on viallinen!</string>
<string name="activity_backup_restore_explanation_1">Valitse varmuuskopiotiedosto ja kirjoita salasana, jonka kanssa se on luotu.</string>
<string name="activity_backup_restore_passphrase">30-merkkinen pääsykoodi</string>
<string name="activity_link_device_skip_prompt">Tämä kestää jonkin aikaa, haluaisitko ohittaa?</string>
<string name="activity_link_device_link_device">Yhdistä laite</string>
<string name="activity_link_device_recovery_phrase">Palautusvirke</string>
<string name="activity_link_device_scan_qr_code">Skannaa QR-koodi</string>
<string name="activity_link_device_qr_message">Siirry asetuksiin → palautusvirke toisella laitteellasi näyttääksesi QR-koodisi.</string>
@ -673,7 +661,6 @@ on viallinen!</string>
<string name="activity_pn_mode_slow_mode">Hidastila</string>
<string name="activity_pn_mode_fast_mode_explanation">Sinulle ilmoitetaan uusista viesteistä luotettavasti ja viivyttelemättä Applen ilmoituspalvelua käyttäen.</string>
<string name="activity_pn_mode_slow_mode_explanation">Session tarkistaa taustalla ajoittain uudet viestit.</string>
<string name="fragment_recovery_phrase_title">Palautusvirke</string>
<string name="activity_prompt_passphrase_session_locked">Session on lukittu</string>
<string name="activity_prompt_passphrase_tap_to_unlock">Avaa napauttamalla</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">Anna nimimerkki</string>

View File

@ -556,24 +556,21 @@
<string name="invalid_session_id">Session ID non valide</string>
<string name="cancel">Annuler</string>
<string name="your_session_id">Votre Session ID</string>
<string name="activity_landing_title_2">Votre Session débute ici...</string>
<string name="activity_landing_register_button_title">Créer un Session ID</string>
<string name="activity_landing_restore_button_title">Continuez votre Session</string>
<string name="view_fake_chat_bubble_1">Qu\'est-ce que Session ?</string>
<string name="view_fake_chat_bubble_2">C\'est une application de messagerie décentralisée et cryptée</string>
<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>
<string name="activity_display_name_title_2">Choisissez votre nom d\'utilisateur</string>
<string name="activity_display_name_explanation">Ce sera votre nom lorsque vous utiliserez Session. Il peut s\'agir de votre vrai nom, d\'un pseudo ou de ce que vous voulez.</string>
<string name="activity_display_name_edit_text_hint">Saisissez un nom d\'utilisateur</string>
<string name="activity_display_name_display_name_missing_error">Veuillez choisir un nom d\'utilisateur</string>
<string name="activity_display_name_display_name_too_long_error">Veuillez choisir un nom d\'utilisateur plus court</string>
<string name="displayNamePick">Choisissez votre nom d\'utilisateur</string>
<string name="displayNameDescription">Ce sera votre nom lorsque vous utiliserez Session. Il peut s\'agir de votre vrai nom, d\'un pseudo ou de ce que vous voulez.</string>
<string name="displayNameEnter">Saisissez un nom d\'utilisateur</string>
<string name="displayNameErrorDescription">Veuillez choisir un nom d\'utilisateur</string>
<string name="displayNameErrorDescriptionShorter">Veuillez choisir un nom d\'utilisateur plus court</string>
<string name="activity_pn_mode_recommended_option_tag">Recommandé</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Veuillez choisir une option</string>
<string name="activity_home_empty_state_message">Vous n\'avez pas encore de contacts</string>
@ -582,11 +579,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 +624,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 +645,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>
@ -704,7 +693,6 @@
<string name="activity_backup_restore_explanation_1">Sélectionnez un fichier de sauvegarde et entrez la phrase de passe avec laquelle il a été créé.</string>
<string name="activity_backup_restore_passphrase">Phrase de passe de 30 caractères</string>
<string name="activity_link_device_skip_prompt">Cela prend un certain temps, voulez-vous passer ?</string>
<string name="activity_link_device_link_device">Relier un appareil</string>
<string name="activity_link_device_recovery_phrase">Phrase de récupération</string>
<string name="activity_link_device_scan_qr_code">Scanner le QR Code</string>
<string name="activity_link_device_qr_message">Allez dans Paramètres → Phrase de récupération sur votre autre appareil pour afficher votre QR code.</string>
@ -715,7 +703,6 @@
<string name="activity_pn_mode_slow_mode">Mode lent</string>
<string name="activity_pn_mode_fast_mode_explanation">Vous serez averti de nouveaux messages de manière fiable et immédiate en utilisant les serveurs de notification de Google.</string>
<string name="activity_pn_mode_slow_mode_explanation">Session vérifiera occasionnellement la présence de nouveaux messages en tâche de fond.</string>
<string name="fragment_recovery_phrase_title">Phrase de récupération</string>
<string name="activity_prompt_passphrase_session_locked">Session est Verrouillé</string>
<string name="activity_prompt_passphrase_tap_to_unlock">Toucher pour déverrouiller</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">Saisissez un nom</string>

View File

@ -556,24 +556,21 @@
<string name="invalid_session_id">Session ID non valide</string>
<string name="cancel">Annuler</string>
<string name="your_session_id">Votre Session ID</string>
<string name="activity_landing_title_2">Votre Session débute ici...</string>
<string name="activity_landing_register_button_title">Créer un Session ID</string>
<string name="activity_landing_restore_button_title">Continuez votre Session</string>
<string name="view_fake_chat_bubble_1">Qu\'est-ce que Session ?</string>
<string name="view_fake_chat_bubble_2">C\'est une application de messagerie décentralisée et cryptée</string>
<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>
<string name="activity_display_name_title_2">Choisissez votre nom d\'utilisateur</string>
<string name="activity_display_name_explanation">Ce sera votre nom lorsque vous utiliserez Session. Il peut s\'agir de votre vrai nom, d\'un pseudo ou de ce que vous voulez.</string>
<string name="activity_display_name_edit_text_hint">Saisissez un nom d\'utilisateur</string>
<string name="activity_display_name_display_name_missing_error">Veuillez choisir un nom d\'utilisateur</string>
<string name="activity_display_name_display_name_too_long_error">Veuillez choisir un nom d\'utilisateur plus court</string>
<string name="displayNamePick">Choisissez votre nom d\'utilisateur</string>
<string name="displayNameDescription">Ce sera votre nom lorsque vous utiliserez Session. Il peut s\'agir de votre vrai nom, d\'un pseudo ou de ce que vous voulez.</string>
<string name="displayNameEnter">Saisissez un nom d\'utilisateur</string>
<string name="displayNameErrorDescription">Veuillez choisir un nom d\'utilisateur</string>
<string name="displayNameErrorDescriptionShorter">Veuillez choisir un nom d\'utilisateur plus court</string>
<string name="activity_pn_mode_recommended_option_tag">Recommandé</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Veuillez choisir une option</string>
<string name="activity_home_empty_state_message">Vous n\'avez pas encore de contacts</string>
@ -582,11 +579,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 +624,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 +645,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>
@ -704,7 +693,6 @@
<string name="activity_backup_restore_explanation_1">Sélectionnez un fichier de sauvegarde et entrez la phrase de passe avec laquelle il a été créé.</string>
<string name="activity_backup_restore_passphrase">Phrase de passe de 30 caractères</string>
<string name="activity_link_device_skip_prompt">Cela prend un certain temps, voulez-vous passer ?</string>
<string name="activity_link_device_link_device">Relier un appareil</string>
<string name="activity_link_device_recovery_phrase">Phrase de récupération</string>
<string name="activity_link_device_scan_qr_code">Scanner le QR Code</string>
<string name="activity_link_device_qr_message">Allez dans Paramètres → Phrase de récupération sur votre autre appareil pour afficher votre QR code.</string>
@ -715,7 +703,6 @@
<string name="activity_pn_mode_slow_mode">Mode lent</string>
<string name="activity_pn_mode_fast_mode_explanation">Vous serez averti de nouveaux messages de manière fiable et immédiate en utilisant les serveurs de notification de Google.</string>
<string name="activity_pn_mode_slow_mode_explanation">Session vérifiera occasionnellement la présence de nouveaux messages en tâche de fond.</string>
<string name="fragment_recovery_phrase_title">Phrase de récupération</string>
<string name="activity_prompt_passphrase_session_locked">Session est Verrouillé</string>
<string name="activity_prompt_passphrase_tap_to_unlock">Toucher pour déverrouiller</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">Saisissez un nom</string>

View File

@ -521,14 +521,11 @@
<string name="invalid_session_id">ID de Session inválido</string>
<string name="cancel">Cancelar</string>
<string name="your_session_id">O teu ID de Session</string>
<string name="activity_landing_title_2">A túa sesión comeza aquí...</string>
<string name="activity_landing_register_button_title">Crear ID de Session</string>
<string name="activity_landing_restore_button_title">Continuar coa túa sesión</string>
<string name="view_fake_chat_bubble_1">Que é Session?</string>
<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

@ -521,14 +521,11 @@
<string name="invalid_session_id">ID de Session inválido</string>
<string name="cancel">Cancelar</string>
<string name="your_session_id">O teu ID de Session</string>
<string name="activity_landing_title_2">A túa sesión comeza aquí...</string>
<string name="activity_landing_register_button_title">Crear ID de Session</string>
<string name="activity_landing_restore_button_title">Continuar coa túa sesión</string>
<string name="view_fake_chat_bubble_1">Que é Session?</string>
<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

@ -530,24 +530,21 @@
<string name="invalid_session_id">अमान्य सेशन आईडी</string>
<string name="cancel">रद्द करें</string>
<string name="your_session_id">आपकी सेशन आईडी</string>
<string name="activity_landing_title_2">आपका सेशन यहां आरंभ होता है...</string>
<string name="activity_landing_register_button_title">सेशन आईडी बनाएं</string>
<string name="activity_landing_restore_button_title">अपना सेशन जारी रखें</string>
<string name="view_fake_chat_bubble_1">सेशन क्या है?</string>
<string name="view_fake_chat_bubble_2">यह एक decentralized, encrypted मेसेजिंग ऐप है</string>
<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>
<string name="activity_display_name_title_2">अपना प्रदर्शन नाम चुनें</string>
<string name="activity_display_name_explanation">यह सेशन इस्तेमाल करते समय आपका नाम होगा। यह आपका असली नाम, उपनाम या कुछ और भी हो सकता है।</string>
<string name="activity_display_name_edit_text_hint">डिस्प्ले नाम डालें</string>
<string name="activity_display_name_display_name_missing_error">कृपया एक डिस्प्ले नाम चुनें</string>
<string name="activity_display_name_display_name_too_long_error">कृपया एक छोटा डिसप्ले नाम चुनें</string>
<string name="displayNamePick">अपना प्रदर्शन नाम चुनें</string>
<string name="displayNameDescription">यह सेशन इस्तेमाल करते समय आपका नाम होगा। यह आपका असली नाम, उपनाम या कुछ और भी हो सकता है।</string>
<string name="displayNameEnter">डिस्प्ले नाम डालें</string>
<string name="displayNameErrorDescription">कृपया एक डिस्प्ले नाम चुनें</string>
<string name="displayNameErrorDescriptionShorter">कृपया एक छोटा डिसप्ले नाम चुनें</string>
<string name="activity_pn_mode_recommended_option_tag">सुझाया गया</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">कृपया एक विकल्प चुनें।</string>
<string name="activity_home_empty_state_message">अभी तक आपके पास कोई कॉन्टैक्ट्स नहीं हैं</string>
@ -556,11 +553,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 +597,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 +609,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>
@ -663,7 +652,6 @@
<string name="activity_backup_restore_explanation_1">एक बैकअप फ़ाइल चुनें और वह पासफ़्रेज़ दर्ज करें जिसके साथ इसे बनाया गया था।</string>
<string name="activity_backup_restore_passphrase">30 अंक का पासफ्रेस</string>
<string name="activity_link_device_skip_prompt">यह समय ले रहा है, इसे छोड़ दें?</string>
<string name="activity_link_device_link_device">डिवाइस को लिंक करें</string>
<string name="activity_link_device_recovery_phrase">पुनर्प्राप्ति वाक्यांश</string>
<string name="activity_link_device_scan_qr_code">QR कोड को स्कैन करें</string>
<string name="activity_link_device_qr_message">अपना क्यूआर कोड दिखाने के लिए अपने अन्य डिवाइस पर सेटिंग्स →पुनर्प्राप्ति वाक्यांश में जाएंं।</string>
@ -674,7 +662,6 @@
<string name="activity_pn_mode_slow_mode">स्लो मोड</string>
<string name="activity_pn_mode_fast_mode_explanation">आपको नई सूचनाओं के बारे में google के नोटीफिकेशन servers से तत्काल सूचित किया जाएगा।</string>
<string name="activity_pn_mode_slow_mode_explanation">Session कभी-कभी पृष्ठभूमि में नए संदेशों की जांच करेगा।</string>
<string name="fragment_recovery_phrase_title">पुनर्प्राप्ति वाक्यांश</string>
<string name="activity_prompt_passphrase_session_locked">Session लॉक है</string>
<string name="activity_prompt_passphrase_tap_to_unlock">अनलॉक करने के लिए टैप करें</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">उपनाम चुनें</string>

View File

@ -530,24 +530,21 @@
<string name="invalid_session_id">अमान्य सेशन आईडी</string>
<string name="cancel">रद्द करें</string>
<string name="your_session_id">आपकी सेशन आईडी</string>
<string name="activity_landing_title_2">आपका सेशन यहां आरंभ होता है...</string>
<string name="activity_landing_register_button_title">सेशन आईडी बनाएं</string>
<string name="activity_landing_restore_button_title">अपना सेशन जारी रखें</string>
<string name="view_fake_chat_bubble_1">सेशन क्या है?</string>
<string name="view_fake_chat_bubble_2">यह एक decentralized, encrypted मेसेजिंग ऐप है</string>
<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>
<string name="activity_display_name_title_2">अपना प्रदर्शन नाम चुनें</string>
<string name="activity_display_name_explanation">यह सेशन इस्तेमाल करते समय आपका नाम होगा। यह आपका असली नाम, उपनाम या कुछ और भी हो सकता है।</string>
<string name="activity_display_name_edit_text_hint">डिस्प्ले नाम डालें</string>
<string name="activity_display_name_display_name_missing_error">कृपया एक डिस्प्ले नाम चुनें</string>
<string name="activity_display_name_display_name_too_long_error">कृपया एक छोटा डिसप्ले नाम चुनें</string>
<string name="displayNamePick">अपना प्रदर्शन नाम चुनें</string>
<string name="displayNameDescription">यह सेशन इस्तेमाल करते समय आपका नाम होगा। यह आपका असली नाम, उपनाम या कुछ और भी हो सकता है।</string>
<string name="displayNameEnter">डिस्प्ले नाम डालें</string>
<string name="displayNameErrorDescription">कृपया एक डिस्प्ले नाम चुनें</string>
<string name="displayNameErrorDescriptionShorter">कृपया एक छोटा डिसप्ले नाम चुनें</string>
<string name="activity_pn_mode_recommended_option_tag">सुझाया गया</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">कृपया एक विकल्प चुनें।</string>
<string name="activity_home_empty_state_message">अभी तक आपके पास कोई कॉन्टैक्ट्स नहीं हैं</string>
@ -556,11 +553,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 +597,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 +609,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>
@ -663,7 +652,6 @@
<string name="activity_backup_restore_explanation_1">एक बैकअप फ़ाइल चुनें और वह पासफ़्रेज़ दर्ज करें जिसके साथ इसे बनाया गया था।</string>
<string name="activity_backup_restore_passphrase">30 अंक का पासफ्रेस</string>
<string name="activity_link_device_skip_prompt">यह समय ले रहा है, इसे छोड़ दें?</string>
<string name="activity_link_device_link_device">डिवाइस को लिंक करें</string>
<string name="activity_link_device_recovery_phrase">पुनर्प्राप्ति वाक्यांश</string>
<string name="activity_link_device_scan_qr_code">QR कोड को स्कैन करें</string>
<string name="activity_link_device_qr_message">अपना क्यूआर कोड दिखाने के लिए अपने अन्य डिवाइस पर सेटिंग्स →पुनर्प्राप्ति वाक्यांश में जाएंं।</string>
@ -674,7 +662,6 @@
<string name="activity_pn_mode_slow_mode">स्लो मोड</string>
<string name="activity_pn_mode_fast_mode_explanation">आपको नई सूचनाओं के बारे में google के नोटीफिकेशन servers से तत्काल सूचित किया जाएगा।</string>
<string name="activity_pn_mode_slow_mode_explanation">Session कभी-कभी पृष्ठभूमि में नए संदेशों की जांच करेगा।</string>
<string name="fragment_recovery_phrase_title">पुनर्प्राप्ति वाक्यांश</string>
<string name="activity_prompt_passphrase_session_locked">Session लॉक है</string>
<string name="activity_prompt_passphrase_tap_to_unlock">अनलॉक करने के लिए टैप करें</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">उपनाम चुनें</string>

View File

@ -532,24 +532,21 @@
<string name="invalid_session_id">Érvénytelen Session azonosító</string>
<string name="cancel">Mégse</string>
<string name="your_session_id">A session azonosítód</string>
<string name="activity_landing_title_2">A Session itt kezdődik...</string>
<string name="activity_landing_register_button_title">Session azonosító létrehozása</string>
<string name="activity_landing_restore_button_title">Session azonosító helyreállítása</string>
<string name="view_fake_chat_bubble_1">Mi az a Session?</string>
<string name="view_fake_chat_bubble_2">Ez egy decentralizált, titkosított üzenetküldő alkalmazás</string>
<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>
<string name="activity_display_name_title_2">Válassza ki a megjelenítendő nevet</string>
<string name="activity_display_name_explanation">Ez lesz az ön neve, amikor használja a Session alkalmazást. Ez lehet a valódi neve, álneve, vagy bármi más, ami tetszik.</string>
<string name="activity_display_name_edit_text_hint">Írja be a megjelenítendő nevet</string>
<string name="activity_display_name_display_name_missing_error">Kérjük, válassza ki a megjelenítendő nevet</string>
<string name="activity_display_name_display_name_too_long_error">Válasszon rövidebb megjelenítési nevet</string>
<string name="displayNamePick">Válassza ki a megjelenítendő nevet</string>
<string name="displayNameDescription">Ez lesz az ön neve, amikor használja a Session alkalmazást. Ez lehet a valódi neve, álneve, vagy bármi más, ami tetszik.</string>
<string name="displayNameEnter">Írja be a megjelenítendő nevet</string>
<string name="displayNameErrorDescription">Kérjük, válassza ki a megjelenítendő nevet</string>
<string name="displayNameErrorDescriptionShorter">Válasszon rövidebb megjelenítési nevet</string>
<string name="activity_pn_mode_recommended_option_tag">Ajánlott</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Kérjük, válasszon egy lehetőséget</string>
<string name="activity_home_empty_state_message">Még nincsenek névjegyei</string>
@ -558,11 +555,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 +599,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 +611,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>
@ -665,7 +654,6 @@
<string name="activity_backup_restore_explanation_1">Válassz ki egy visszaállítási fájlt és add meg a hozzá tartozó visszaálítási kódmondatot.</string>
<string name="activity_backup_restore_passphrase">30-betűs kódmondat</string>
<string name="activity_link_device_skip_prompt">Ez eltarthat egy ideig, szeretnéd átugrani?</string>
<string name="activity_link_device_link_device">Eszköz társítása</string>
<string name="activity_link_device_recovery_phrase">Visszaállítási kódmondat</string>
<string name="activity_link_device_scan_qr_code">QR kód beolvasása</string>
<string name="activity_link_device_qr_message">A QR-kód megjelenítéséhez nyissa meg a Beállítások → Helyreállítási kifejezés elemet másik eszközén. </string>
@ -676,7 +664,6 @@
<string name="activity_pn_mode_slow_mode">Lassított mód</string>
<string name="activity_pn_mode_fast_mode_explanation">A Google értesítési szerverein keresztül megbízhatóan és azonnal értesítést kapsz az új üzenetekről.</string>
<string name="activity_pn_mode_slow_mode_explanation">A Session alkalmanként, az új üzeneteket a háttérben fogja ellenőrizni.</string>
<string name="fragment_recovery_phrase_title">Visszaállítási kódmondat</string>
<string name="activity_prompt_passphrase_session_locked">Session zárolva</string>
<string name="activity_prompt_passphrase_tap_to_unlock">Koppintson a feloldáshoz</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">Írjon be egy becenevet</string>

View File

@ -532,24 +532,21 @@
<string name="invalid_session_id">Érvénytelen Session azonosító</string>
<string name="cancel">Mégse</string>
<string name="your_session_id">A session azonosítód</string>
<string name="activity_landing_title_2">A Session itt kezdődik...</string>
<string name="activity_landing_register_button_title">Session azonosító létrehozása</string>
<string name="activity_landing_restore_button_title">Session azonosító helyreállítása</string>
<string name="view_fake_chat_bubble_1">Mi az a Session?</string>
<string name="view_fake_chat_bubble_2">Ez egy decentralizált, titkosított üzenetküldő alkalmazás</string>
<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>
<string name="activity_display_name_title_2">Válassza ki a megjelenítendő nevet</string>
<string name="activity_display_name_explanation">Ez lesz az ön neve, amikor használja a Session alkalmazást. Ez lehet a valódi neve, álneve, vagy bármi más, ami tetszik.</string>
<string name="activity_display_name_edit_text_hint">Írja be a megjelenítendő nevet</string>
<string name="activity_display_name_display_name_missing_error">Kérjük, válassza ki a megjelenítendő nevet</string>
<string name="activity_display_name_display_name_too_long_error">Válasszon rövidebb megjelenítési nevet</string>
<string name="displayNamePick">Válassza ki a megjelenítendő nevet</string>
<string name="displayNameDescription">Ez lesz az ön neve, amikor használja a Session alkalmazást. Ez lehet a valódi neve, álneve, vagy bármi más, ami tetszik.</string>
<string name="displayNameEnter">Írja be a megjelenítendő nevet</string>
<string name="displayNameErrorDescription">Kérjük, válassza ki a megjelenítendő nevet</string>
<string name="displayNameErrorDescriptionShorter">Válasszon rövidebb megjelenítési nevet</string>
<string name="activity_pn_mode_recommended_option_tag">Ajánlott</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Kérjük, válasszon egy lehetőséget</string>
<string name="activity_home_empty_state_message">Még nincsenek névjegyei</string>
@ -558,11 +555,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 +599,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 +611,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>
@ -665,7 +654,6 @@
<string name="activity_backup_restore_explanation_1">Válassz ki egy visszaállítási fájlt és add meg a hozzá tartozó visszaálítási kódmondatot.</string>
<string name="activity_backup_restore_passphrase">30-betűs kódmondat</string>
<string name="activity_link_device_skip_prompt">Ez eltarthat egy ideig, szeretnéd átugrani?</string>
<string name="activity_link_device_link_device">Eszköz társítása</string>
<string name="activity_link_device_recovery_phrase">Visszaállítási kódmondat</string>
<string name="activity_link_device_scan_qr_code">QR kód beolvasása</string>
<string name="activity_link_device_qr_message">A QR-kód megjelenítéséhez nyissa meg a Beállítások → Helyreállítási kifejezés elemet másik eszközén. </string>
@ -676,7 +664,6 @@
<string name="activity_pn_mode_slow_mode">Lassított mód</string>
<string name="activity_pn_mode_fast_mode_explanation">A Google értesítési szerverein keresztül megbízhatóan és azonnal értesítést kapsz az új üzenetekről.</string>
<string name="activity_pn_mode_slow_mode_explanation">A Session alkalmanként, az új üzeneteket a háttérben fogja ellenőrizni.</string>
<string name="fragment_recovery_phrase_title">Visszaállítási kódmondat</string>
<string name="activity_prompt_passphrase_session_locked">Session zárolva</string>
<string name="activity_prompt_passphrase_tap_to_unlock">Koppintson a feloldáshoz</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">Írjon be egy becenevet</string>

View File

@ -538,24 +538,21 @@
<string name="invalid_session_id">Սխալ Session ID</string>
<string name="cancel">Փակել</string>
<string name="your_session_id">Ձեր Session ID֊ն</string>
<string name="activity_landing_title_2">Ձեր Սեանսը սկսվում է այստեղ...</string>
<string name="activity_landing_register_button_title">Ստեղծել Session֊ի հաշիվ</string>
<string name="activity_landing_restore_button_title">Շարունակել Session֊ից օգտվելը</string>
<string name="view_fake_chat_bubble_1">Ի՞նչ է Սեանսը։</string>
<string name="view_fake_chat_bubble_2">Այն ապահով, ծածկագրված նամակների ծրագիր է</string>
<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>
<string name="activity_display_name_title_2">Ընտրեք ցուցադրվող անուն</string>
<string name="activity_display_name_explanation">Այս անունը կցուցադրվի, երբ Դուք կօգտվեք Սեանսից։ Այն կարող է լինել Ձեր անունը, կեղծանուն, կամ որևիցե այլ բան։</string>
<string name="activity_display_name_edit_text_hint">Մուտքագրեք ցուցադրվող անուն</string>
<string name="activity_display_name_display_name_missing_error">Խնդրում ենք գրել անուն</string>
<string name="activity_display_name_display_name_too_long_error">Խնդրում ենք ընտրել կարճ անուն</string>
<string name="displayNamePick">Ընտրեք ցուցադրվող անուն</string>
<string name="displayNameDescription">Այս անունը կցուցադրվի, երբ Դուք կօգտվեք Սեանսից։ Այն կարող է լինել Ձեր անունը, կեղծանուն, կամ որևիցե այլ բան։</string>
<string name="displayNameEnter">Մուտքագրեք ցուցադրվող անուն</string>
<string name="displayNameErrorDescription">Խնդրում ենք գրել անուն</string>
<string name="displayNameErrorDescriptionShorter">Խնդրում ենք ընտրել կարճ անուն</string>
<string name="activity_pn_mode_recommended_option_tag">[Խորհուրդ է տրվում]</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Խնդրում ենք ընտրել</string>
<string name="activity_home_empty_state_message">Դուք չունեք կոնտակտներ</string>
@ -564,11 +561,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 +605,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 +617,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>
@ -671,7 +660,6 @@
<string name="activity_backup_restore_explanation_1">Ընտրեք կրկնօրինակի ֆայլ և մուտքագրեք այն գաղտնաբառը, որով ստեղծվել է:</string>
<string name="activity_backup_restore_passphrase">30֊թվանոց գախտնաբառ</string>
<string name="activity_link_device_skip_prompt">Սա որոշ ժամանակ է տևում, կցանկանա՞ք բաց թողնել:</string>
<string name="activity_link_device_link_device">Ավելացնել սարք</string>
<string name="activity_link_device_recovery_phrase">Վերականգնման բառակապակցություն</string>
<string name="activity_link_device_scan_qr_code">Սկանավորել QR Կոդը</string>
<string name="activity_link_device_qr_message">Անցեք Կարգավորումներ → Վերականգնման Բառակապակցություն՝ ձեր QR կոդը ցուցադրելու համար:</string>
@ -682,7 +670,6 @@
<string name="activity_pn_mode_slow_mode">Դանդաղ ռեժիմ</string>
<string name="activity_pn_mode_fast_mode_explanation">Դուք մշտապես և անմիջապես կտեղեկացվեք նոր հաղորդագրությունների մասին՝ օգտագործելով Google-ի ծանուցումների սերվերները:</string>
<string name="activity_pn_mode_slow_mode_explanation">Session-ը երբեմն, ֆոնային կստուգի նոր հաղորդագրությունների առկայությունը:</string>
<string name="fragment_recovery_phrase_title">Գաղտնի արտահայտություն</string>
<string name="activity_prompt_passphrase_session_locked">Session֊ը արգելափակված է</string>
<string name="activity_prompt_passphrase_tap_to_unlock">Հպեք՝ ապակողպելու համար</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">Մուտքագրե՛ք կեղծանունը</string>

View File

@ -538,24 +538,21 @@
<string name="invalid_session_id">Սխալ Session ID</string>
<string name="cancel">Փակել</string>
<string name="your_session_id">Ձեր Session ID֊ն</string>
<string name="activity_landing_title_2">Ձեր Սեանսը սկսվում է այստեղ...</string>
<string name="activity_landing_register_button_title">Ստեղծել Session֊ի հաշիվ</string>
<string name="activity_landing_restore_button_title">Շարունակել Session֊ից օգտվելը</string>
<string name="view_fake_chat_bubble_1">Ի՞նչ է Սեանսը։</string>
<string name="view_fake_chat_bubble_2">Այն ապահով, ծածկագրված նամակների ծրագիր է</string>
<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>
<string name="activity_display_name_title_2">Ընտրեք ցուցադրվող անուն</string>
<string name="activity_display_name_explanation">Այս անունը կցուցադրվի, երբ Դուք կօգտվեք Սեանսից։ Այն կարող է լինել Ձեր անունը, կեղծանուն, կամ որևիցե այլ բան։</string>
<string name="activity_display_name_edit_text_hint">Մուտքագրեք ցուցադրվող անուն</string>
<string name="activity_display_name_display_name_missing_error">Խնդրում ենք գրել անուն</string>
<string name="activity_display_name_display_name_too_long_error">Խնդրում ենք ընտրել կարճ անուն</string>
<string name="displayNamePick">Ընտրեք ցուցադրվող անուն</string>
<string name="displayNameDescription">Այս անունը կցուցադրվի, երբ Դուք կօգտվեք Սեանսից։ Այն կարող է լինել Ձեր անունը, կեղծանուն, կամ որևիցե այլ բան։</string>
<string name="displayNameEnter">Մուտքագրեք ցուցադրվող անուն</string>
<string name="displayNameErrorDescription">Խնդրում ենք գրել անուն</string>
<string name="displayNameErrorDescriptionShorter">Խնդրում ենք ընտրել կարճ անուն</string>
<string name="activity_pn_mode_recommended_option_tag">[Խորհուրդ է տրվում]</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Խնդրում ենք ընտրել</string>
<string name="activity_home_empty_state_message">Դուք չունեք կոնտակտներ</string>
@ -564,11 +561,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 +605,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 +617,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>
@ -671,7 +660,6 @@
<string name="activity_backup_restore_explanation_1">Ընտրեք կրկնօրինակի ֆայլ և մուտքագրեք այն գաղտնաբառը, որով ստեղծվել է:</string>
<string name="activity_backup_restore_passphrase">30֊թվանոց գախտնաբառ</string>
<string name="activity_link_device_skip_prompt">Սա որոշ ժամանակ է տևում, կցանկանա՞ք բաց թողնել:</string>
<string name="activity_link_device_link_device">Ավելացնել սարք</string>
<string name="activity_link_device_recovery_phrase">Վերականգնման բառակապակցություն</string>
<string name="activity_link_device_scan_qr_code">Սկանավորել QR Կոդը</string>
<string name="activity_link_device_qr_message">Անցեք Կարգավորումներ → Վերականգնման Բառակապակցություն՝ ձեր QR կոդը ցուցադրելու համար:</string>
@ -682,7 +670,6 @@
<string name="activity_pn_mode_slow_mode">Դանդաղ ռեժիմ</string>
<string name="activity_pn_mode_fast_mode_explanation">Դուք մշտապես և անմիջապես կտեղեկացվեք նոր հաղորդագրությունների մասին՝ օգտագործելով Google-ի ծանուցումների սերվերները:</string>
<string name="activity_pn_mode_slow_mode_explanation">Session-ը երբեմն, ֆոնային կստուգի նոր հաղորդագրությունների առկայությունը:</string>
<string name="fragment_recovery_phrase_title">Գաղտնի արտահայտություն</string>
<string name="activity_prompt_passphrase_session_locked">Session֊ը արգելափակված է</string>
<string name="activity_prompt_passphrase_tap_to_unlock">Հպեք՝ ապակողպելու համար</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">Մուտքագրե՛ք կեղծանունը</string>

View File

@ -414,16 +414,16 @@
<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>
<string name="activity_display_name_title_2">Pilih nama yang ditampilkan</string>
<string name="activity_display_name_explanation">Ini akan menjadi nama anda ketika menggunakan Session. Bisa merupakan nama asli, alias, atau apapun yang anda suka.</string>
<string name="activity_display_name_edit_text_hint">Masukkan nama</string>
<string name="activity_display_name_display_name_missing_error">Pilih nama yang ditampilkan</string>
<string name="activity_display_name_display_name_too_long_error">Pilih nama yang lebih pendek</string>
<string name="displayNamePick">Pilih nama yang ditampilkan</string>
<string name="displayNameDescription">Ini akan menjadi nama anda ketika menggunakan Session. Bisa merupakan nama asli, alias, atau apapun yang anda suka.</string>
<string name="displayNameEnter">Masukkan nama</string>
<string name="displayNameErrorDescription">Pilih nama yang ditampilkan</string>
<string name="displayNameErrorDescriptionShorter">Pilih nama yang lebih pendek</string>
<string name="activity_pn_mode_recommended_option_tag">Direkomendasikan</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Pilih salah satu opsi</string>
<string name="activity_home_empty_state_message">Anda belum memiliki kontak</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,16 +414,14 @@
<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>
<string name="activity_display_name_title_2">Pilih nama yang ditampilkan</string>
<string name="activity_display_name_explanation">Ini akan menjadi nama anda ketika menggunakan Session. Bisa merupakan nama asli, alias, atau apapun yang anda suka.</string>
<string name="activity_display_name_edit_text_hint">Masukkan nama</string>
<string name="activity_display_name_display_name_missing_error">Pilih nama yang ditampilkan</string>
<string name="activity_display_name_display_name_too_long_error">Pilih nama yang lebih pendek</string>
<string name="displayNamePick">Pilih nama yang ditampilkan</string>
<string name="displayNameDescription">Ini akan menjadi nama anda ketika menggunakan Session. Bisa merupakan nama asli, alias, atau apapun yang anda suka.</string>
<string name="displayNameEnter">Masukkan nama</string>
<string name="displayNameErrorDescription">Pilih nama yang ditampilkan</string>
<string name="displayNameErrorDescriptionShorter">Pilih nama yang lebih pendek</string>
<string name="activity_pn_mode_recommended_option_tag">Direkomendasikan</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Pilih salah satu opsi</string>
<string name="activity_home_empty_state_message">Anda belum memiliki kontak</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

@ -531,24 +531,21 @@ scambia un altro messaggio!</string>
<string name="invalid_session_id">ID Sessione non valido</string>
<string name="cancel">Annulla</string>
<string name="your_session_id">Il tuo ID Sessione</string>
<string name="activity_landing_title_2">La tua Sessione inizia qui...</string>
<string name="activity_landing_register_button_title">Crea ID Sessione</string>
<string name="activity_landing_restore_button_title">Continua la Sessione</string>
<string name="view_fake_chat_bubble_1">Cos\'è Session?</string>
<string name="view_fake_chat_bubble_2">È un\'app di messaggistica decentralizzata e crittografata</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>
<string name="activity_display_name_title_2">Scegli il nome da visualizzare</string>
<string name="activity_display_name_explanation">Questo sarà il tuo nome quando usi una Sessione. Può essere il tuo vero nome, un soprannome o qualsiasi altra cosa.</string>
<string name="activity_display_name_edit_text_hint">Inserisci il nome da visualizzare</string>
<string name="activity_display_name_display_name_missing_error">Scegli il nome da visualizzare</string>
<string name="activity_display_name_display_name_too_long_error">Scegli un nome più breve</string>
<string name="displayNamePick">Scegli il nome da visualizzare</string>
<string name="displayNameDescription">Questo sarà il tuo nome quando usi una Sessione. Può essere il tuo vero nome, un soprannome o qualsiasi altra cosa.</string>
<string name="displayNameEnter">Inserisci il nome da visualizzare</string>
<string name="displayNameErrorDescription">Scegli il nome da visualizzare</string>
<string name="displayNameErrorDescriptionShorter">Scegli un nome più breve</string>
<string name="activity_pn_mode_recommended_option_tag">Consigliato</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Scegli un\'opzione</string>
<string name="activity_home_empty_state_message">Non hai ancora nessun contatto</string>
@ -557,11 +554,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 +598,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 +610,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>
@ -664,7 +653,6 @@ scambia un altro messaggio!</string>
<string name="activity_backup_restore_explanation_1">Selezionare un file di backup ed inserire la passphrase con cui è stato creato.</string>
<string name="activity_backup_restore_passphrase">Frase di recupero di 30 caratteri</string>
<string name="activity_link_device_skip_prompt">Questo sta impiegando un po\' di tempo, vorresti saltare?</string>
<string name="activity_link_device_link_device">Collega dispositivo</string>
<string name="activity_link_device_recovery_phrase">Frase di recupero</string>
<string name="activity_link_device_scan_qr_code">Scansiona codice QR</string>
<string name="activity_link_device_qr_message">Vai su Impostazioni → Frase di recupero sul tuo altro dispositivo per mostrare il tuo codice QR.</string>
@ -675,7 +663,6 @@ scambia un altro messaggio!</string>
<string name="activity_pn_mode_slow_mode">Modalità Lenta</string>
<string name="activity_pn_mode_fast_mode_explanation">Riceverai notifiche di nuovi messaggi in modo affidabile e immediato utilizzando i server di notifica di Google.</string>
<string name="activity_pn_mode_slow_mode_explanation">Session controllerà di tanto in tanto la presenza di nuovi messaggi in background.</string>
<string name="fragment_recovery_phrase_title">Frase di recupero</string>
<string name="activity_prompt_passphrase_session_locked">Session è Bloccato</string>
<string name="activity_prompt_passphrase_tap_to_unlock">Tocca per Sbloccare</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">Inserisci un nickname</string>

View File

@ -531,24 +531,21 @@ scambia un altro messaggio!</string>
<string name="invalid_session_id">ID Sessione non valido</string>
<string name="cancel">Annulla</string>
<string name="your_session_id">Il tuo ID Sessione</string>
<string name="activity_landing_title_2">La tua Sessione inizia qui...</string>
<string name="activity_landing_register_button_title">Crea ID Sessione</string>
<string name="activity_landing_restore_button_title">Continua la Sessione</string>
<string name="view_fake_chat_bubble_1">Cos\'è Session?</string>
<string name="view_fake_chat_bubble_2">È un\'app di messaggistica decentralizzata e crittografata</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>
<string name="activity_display_name_title_2">Scegli il nome da visualizzare</string>
<string name="activity_display_name_explanation">Questo sarà il tuo nome quando usi una Sessione. Può essere il tuo vero nome, un soprannome o qualsiasi altra cosa.</string>
<string name="activity_display_name_edit_text_hint">Inserisci il nome da visualizzare</string>
<string name="activity_display_name_display_name_missing_error">Scegli il nome da visualizzare</string>
<string name="activity_display_name_display_name_too_long_error">Scegli un nome più breve</string>
<string name="displayNamePick">Scegli il nome da visualizzare</string>
<string name="displayNameDescription">Questo sarà il tuo nome quando usi una Sessione. Può essere il tuo vero nome, un soprannome o qualsiasi altra cosa.</string>
<string name="displayNameEnter">Inserisci il nome da visualizzare</string>
<string name="displayNameErrorDescription">Scegli il nome da visualizzare</string>
<string name="displayNameErrorDescriptionShorter">Scegli un nome più breve</string>
<string name="activity_pn_mode_recommended_option_tag">Consigliato</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Scegli un\'opzione</string>
<string name="activity_home_empty_state_message">Non hai ancora nessun contatto</string>
@ -557,11 +554,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 +598,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 +610,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>
@ -664,7 +653,6 @@ scambia un altro messaggio!</string>
<string name="activity_backup_restore_explanation_1">Selezionare un file di backup ed inserire la passphrase con cui è stato creato.</string>
<string name="activity_backup_restore_passphrase">Frase di recupero di 30 caratteri</string>
<string name="activity_link_device_skip_prompt">Questo sta impiegando un po\' di tempo, vorresti saltare?</string>
<string name="activity_link_device_link_device">Collega dispositivo</string>
<string name="activity_link_device_recovery_phrase">Frase di recupero</string>
<string name="activity_link_device_scan_qr_code">Scansiona codice QR</string>
<string name="activity_link_device_qr_message">Vai su Impostazioni → Frase di recupero sul tuo altro dispositivo per mostrare il tuo codice QR.</string>
@ -675,7 +663,6 @@ scambia un altro messaggio!</string>
<string name="activity_pn_mode_slow_mode">Modalità Lenta</string>
<string name="activity_pn_mode_fast_mode_explanation">Riceverai notifiche di nuovi messaggi in modo affidabile e immediato utilizzando i server di notifica di Google.</string>
<string name="activity_pn_mode_slow_mode_explanation">Session controllerà di tanto in tanto la presenza di nuovi messaggi in background.</string>
<string name="fragment_recovery_phrase_title">Frase di recupero</string>
<string name="activity_prompt_passphrase_session_locked">Session è Bloccato</string>
<string name="activity_prompt_passphrase_tap_to_unlock">Tocca per Sbloccare</string>
<string name="fragment_user_details_bottom_sheet_edit_text_hint">Inserisci un nickname</string>

View File

@ -515,24 +515,21 @@
<string name="invalid_session_id">Session ID が無効です</string>
<string name="cancel">取り消す</string>
<string name="your_session_id">あなたの Session ID</string>
<string name="activity_landing_title_2">ここから Session が始まります...</string>
<string name="activity_landing_register_button_title">Session ID を作成する</string>
<string name="activity_landing_restore_button_title">Session を続ける</string>
<string name="view_fake_chat_bubble_1">Session とは?</string>
<string name="view_fake_chat_bubble_2">分散型の暗号化されたメッセージングアプリです</string>
<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>
<string name="activity_display_name_title_2">表示名を選択してください</string>
<string name="activity_display_name_explanation">これは、Session を使用するときの名前になります。あなたの本当の名前、エイリアス、またはあなたが好きな他のものに設定することができます。</string>
<string name="activity_display_name_edit_text_hint">表示名を入力してください</string>
<string name="activity_display_name_display_name_missing_error">表示名を選択してください</string>
<string name="activity_display_name_display_name_too_long_error">短い表示名を選択してください</string>
<string name="displayNamePick">表示名を選択してください</string>
<string name="displayNameDescription">これは、Session を使用するときの名前になります。あなたの本当の名前、エイリアス、またはあなたが好きな他のものに設定することができます。</string>
<string name="displayNameEnter">表示名を入力してください</string>
<string name="displayNameErrorDescription">表示名を選択してください</string>
<string name="displayNameErrorDescriptionShorter">短い表示名を選択してください</string>
<string name="activity_pn_mode_recommended_option_tag">オススメ</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">オプションを選択してください</string>
<string name="activity_home_empty_state_message">まだ連絡先がありません</string>
@ -541,11 +538,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 +582,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 +594,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

@ -515,24 +515,21 @@
<string name="invalid_session_id">Session ID が無効です</string>
<string name="cancel">取り消す</string>
<string name="your_session_id">あなたの Session ID</string>
<string name="activity_landing_title_2">ここから Session が始まります...</string>
<string name="activity_landing_register_button_title">Session ID を作成する</string>
<string name="activity_landing_restore_button_title">Session を続ける</string>
<string name="view_fake_chat_bubble_1">Session とは?</string>
<string name="view_fake_chat_bubble_2">分散型の暗号化されたメッセージングアプリです</string>
<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>
<string name="activity_display_name_title_2">表示名を選択してください</string>
<string name="activity_display_name_explanation">これは、Session を使用するときの名前になります。あなたの本当の名前、エイリアス、またはあなたが好きな他のものに設定することができます。</string>
<string name="activity_display_name_edit_text_hint">表示名を入力してください</string>
<string name="activity_display_name_display_name_missing_error">表示名を選択してください</string>
<string name="activity_display_name_display_name_too_long_error">短い表示名を選択してください</string>
<string name="displayNamePick">表示名を選択してください</string>
<string name="displayNameDescription">これは、Session を使用するときの名前になります。あなたの本当の名前、エイリアス、またはあなたが好きな他のものに設定することができます。</string>
<string name="displayNameEnter">表示名を入力してください</string>
<string name="displayNameErrorDescription">表示名を選択してください</string>
<string name="displayNameErrorDescriptionShorter">短い表示名を選択してください</string>
<string name="activity_pn_mode_recommended_option_tag">オススメ</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">オプションを選択してください</string>
<string name="activity_home_empty_state_message">まだ連絡先がありません</string>
@ -541,11 +538,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 +582,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 +594,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>
@ -441,7 +437,6 @@
<string name="activity_edit_closed_group_add_members">멤버 추가</string>
<string name="activity_link_device_recovery_phrase">복구 코드</string>
<string name="activity_link_device_scan_qr_code">QR 코드 스캔</string>
<string name="fragment_recovery_phrase_title">복구 코드</string>
<string name="notify_type_all">모두</string>
<string name="notify_type_mentions">멘션만</string>
<string name="activity_settings_survey_feedback">피드백/설문 조사</string>

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