mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2024-12-17 17:20:21 +01:00
Merge branch 'master' into master-android
This commit is contained in:
+2
-2
@@ -156,13 +156,13 @@ actual object AudioPlayer: AudioPlayerInterface {
|
||||
}
|
||||
}.onFailure {
|
||||
Log.e(TAG, it.stackTraceToString())
|
||||
AlertManager.shared.showAlertMsg(generalGetString(MR.strings.unknown_error), it.message)
|
||||
AlertManager.shared.showAlertMsg(generalGetString(MR.strings.unknown_error), it.stackTraceToString())
|
||||
return null
|
||||
}
|
||||
runCatching { player.prepare() }.onFailure {
|
||||
// Can happen when audio file is broken
|
||||
Log.e(TAG, it.stackTraceToString())
|
||||
AlertManager.shared.showAlertMsg(generalGetString(MR.strings.unknown_error), it.message)
|
||||
AlertManager.shared.showAlertMsg(generalGetString(MR.strings.unknown_error), it.stackTraceToString())
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
+2
@@ -46,6 +46,7 @@ actual fun shareFile(text: String, fileSource: CryptoFile) {
|
||||
decryptCryptoFile(getAppFilePath(fileSource.filePath), fileSource.cryptoArgs, tmpFile.absolutePath)
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Unable to decrypt crypto file: " + e.stackTraceToString())
|
||||
AlertManager.shared.showAlertMsg(title = generalGetString(MR.strings.error), text = e.stackTraceToString())
|
||||
return
|
||||
}
|
||||
getAppFileUri(tmpFile.absolutePath)
|
||||
@@ -112,6 +113,7 @@ fun saveImage(ciFile: CIFile?) {
|
||||
decryptCryptoFile(filePath, ciFile.fileSource.cryptoArgs, tmpFile.absolutePath)
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Unable to decrypt crypto file: " + e.stackTraceToString())
|
||||
AlertManager.shared.showAlertMsg(title = generalGetString(MR.strings.error), text = e.stackTraceToString())
|
||||
return@createTmpFileAndDelete
|
||||
}
|
||||
tmpFile.inputStream().use { it.copyTo(outputStream) }
|
||||
|
||||
+2
-2
@@ -88,7 +88,7 @@ actual class VideoPlayer actual constructor(
|
||||
player.setMediaSource(source, seek ?: 0L)
|
||||
}.onFailure {
|
||||
Log.e(TAG, it.stackTraceToString())
|
||||
AlertManager.shared.showAlertMsg(generalGetString(MR.strings.unknown_error), it.message)
|
||||
AlertManager.shared.showAlertMsg(generalGetString(MR.strings.unknown_error), it.stackTraceToString())
|
||||
brokenVideo.value = true
|
||||
return false
|
||||
}
|
||||
@@ -97,7 +97,7 @@ actual class VideoPlayer actual constructor(
|
||||
runCatching { player.prepare() }.onFailure {
|
||||
// Can happen when video file is broken
|
||||
Log.e(TAG, it.stackTraceToString())
|
||||
AlertManager.shared.showAlertMsg(generalGetString(MR.strings.unknown_error), it.message)
|
||||
AlertManager.shared.showAlertMsg(generalGetString(MR.strings.unknown_error), it.stackTraceToString())
|
||||
brokenVideo.value = true
|
||||
return false
|
||||
}
|
||||
|
||||
+15
-14
@@ -18,7 +18,7 @@ interface CallAudioDeviceManagerInterface {
|
||||
fun start()
|
||||
fun stop()
|
||||
// AudioDeviceInfo.AudioDeviceType
|
||||
fun selectLastExternalDeviceOrDefault(speaker: Boolean, keepAnyNonEarpiece: Boolean)
|
||||
fun selectLastExternalDeviceOrDefault(speaker: Boolean, keepAnyExternal: Boolean)
|
||||
// AudioDeviceInfo.AudioDeviceType
|
||||
fun selectDevice(id: Int)
|
||||
|
||||
@@ -65,6 +65,7 @@ class PostSCallAudioDeviceManager: CallAudioDeviceManagerInterface {
|
||||
|
||||
override fun start() {
|
||||
am.mode = AudioManager.MODE_IN_COMMUNICATION
|
||||
currentDevice.value = am.communicationDevice
|
||||
am.registerAudioDeviceCallback(audioCallback, null)
|
||||
am.addOnCommunicationDeviceChangedListener(Executors.newSingleThreadExecutor(), listener)
|
||||
}
|
||||
@@ -74,24 +75,24 @@ class PostSCallAudioDeviceManager: CallAudioDeviceManagerInterface {
|
||||
am.removeOnCommunicationDeviceChangedListener(listener)
|
||||
}
|
||||
|
||||
override fun selectLastExternalDeviceOrDefault(speaker: Boolean, keepAnyNonEarpiece: Boolean) {
|
||||
override fun selectLastExternalDeviceOrDefault(speaker: Boolean, keepAnyExternal: Boolean) {
|
||||
Log.d(TAG, "selectLastExternalDeviceOrDefault: set audio mode, speaker enabled: $speaker")
|
||||
val commDevice = am.communicationDevice
|
||||
if (keepAnyNonEarpiece && commDevice != null && commDevice.type != AudioDeviceInfo.TYPE_BUILTIN_EARPIECE) {
|
||||
// some external device or speaker selected already, no need to change it
|
||||
if (keepAnyExternal && commDevice != null && commDevice.type != AudioDeviceInfo.TYPE_BUILTIN_EARPIECE && commDevice.type != AudioDeviceInfo.TYPE_BUILTIN_SPEAKER) {
|
||||
// some external device selected already, no need to change it
|
||||
return
|
||||
}
|
||||
|
||||
val preferredSecondaryDevice = if (speaker) AudioDeviceInfo.TYPE_BUILTIN_SPEAKER else AudioDeviceInfo.TYPE_BUILTIN_EARPIECE
|
||||
val externalDevice = devices.value.lastOrNull { it.type != AudioDeviceInfo.TYPE_BUILTIN_SPEAKER && it.type != AudioDeviceInfo.TYPE_BUILTIN_EARPIECE }
|
||||
val preferredInternalDevice = if (speaker) AudioDeviceInfo.TYPE_BUILTIN_SPEAKER else AudioDeviceInfo.TYPE_BUILTIN_EARPIECE
|
||||
val externalDevice = devices.value.lastOrNull { it.type != AudioDeviceInfo.TYPE_BUILTIN_EARPIECE && it.type != AudioDeviceInfo.TYPE_BUILTIN_SPEAKER }
|
||||
// External device already selected
|
||||
if (externalDevice != null && externalDevice.type == am.communicationDevice?.type) {
|
||||
return
|
||||
}
|
||||
if (externalDevice != null) {
|
||||
am.setCommunicationDevice(externalDevice)
|
||||
} else if (am.communicationDevice?.type != preferredSecondaryDevice) {
|
||||
am.availableCommunicationDevices.firstOrNull { it.type == preferredSecondaryDevice }?.let {
|
||||
} else if (am.communicationDevice?.type != preferredInternalDevice) {
|
||||
am.availableCommunicationDevices.firstOrNull { it.type == preferredInternalDevice }?.let {
|
||||
am.setCommunicationDevice(it)
|
||||
}
|
||||
}
|
||||
@@ -136,25 +137,25 @@ class PreSCallAudioDeviceManager: CallAudioDeviceManagerInterface {
|
||||
am.stopBluetoothSco()
|
||||
}
|
||||
|
||||
override fun selectLastExternalDeviceOrDefault(speaker: Boolean, keepAnyNonEarpiece: Boolean) {
|
||||
override fun selectLastExternalDeviceOrDefault(speaker: Boolean, keepAnyExternal: Boolean) {
|
||||
Log.d(TAG, "selectLastExternalDeviceOrDefault: set audio mode, speaker enabled: $speaker")
|
||||
val preferredSecondaryDevice = if (speaker) AudioDeviceInfo.TYPE_BUILTIN_SPEAKER else AudioDeviceInfo.TYPE_BUILTIN_EARPIECE
|
||||
val externalDevice = devices.value.lastOrNull { it.type != AudioDeviceInfo.TYPE_BUILTIN_SPEAKER && it.type != AudioDeviceInfo.TYPE_BUILTIN_EARPIECE }
|
||||
val preferredInternalDevice = if (speaker) AudioDeviceInfo.TYPE_BUILTIN_SPEAKER else AudioDeviceInfo.TYPE_BUILTIN_EARPIECE
|
||||
val externalDevice = devices.value.lastOrNull { it.type != AudioDeviceInfo.TYPE_BUILTIN_EARPIECE && it.type != AudioDeviceInfo.TYPE_BUILTIN_SPEAKER }
|
||||
if (externalDevice != null) {
|
||||
selectDevice(externalDevice.id)
|
||||
} else {
|
||||
am.stopBluetoothSco()
|
||||
am.isWiredHeadsetOn = false
|
||||
am.isSpeakerphoneOn = preferredSecondaryDevice == AudioDeviceInfo.TYPE_BUILTIN_SPEAKER
|
||||
am.isSpeakerphoneOn = preferredInternalDevice == AudioDeviceInfo.TYPE_BUILTIN_SPEAKER
|
||||
am.isBluetoothScoOn = false
|
||||
val newCurrentDevice = devices.value.firstOrNull { it.type == preferredSecondaryDevice }
|
||||
val newCurrentDevice = devices.value.firstOrNull { it.type == preferredInternalDevice }
|
||||
adaptToCurrentlyActiveDevice(newCurrentDevice)
|
||||
}
|
||||
}
|
||||
|
||||
override fun selectDevice(id: Int) {
|
||||
val device = devices.value.lastOrNull { it.id == id }
|
||||
val isExternalDevice = device != null && device.type != AudioDeviceInfo.TYPE_BUILTIN_SPEAKER && device.type != AudioDeviceInfo.TYPE_BUILTIN_EARPIECE
|
||||
val isExternalDevice = device != null && device.type != AudioDeviceInfo.TYPE_BUILTIN_EARPIECE && device.type != AudioDeviceInfo.TYPE_BUILTIN_SPEAKER
|
||||
if (isExternalDevice) {
|
||||
am.isSpeakerphoneOn = false
|
||||
if (device?.type == AudioDeviceInfo.TYPE_WIRED_HEADSET || device?.type == AudioDeviceInfo.TYPE_WIRED_HEADPHONES) {
|
||||
|
||||
+11
-12
@@ -26,7 +26,6 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.painter.Painter
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.text.TextStyle
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
@@ -95,8 +94,8 @@ actual fun ActiveCallView() {
|
||||
if (wasConnected.value) {
|
||||
CallSoundsPlayer.vibrate()
|
||||
}
|
||||
dropAudioManagerOverrides()
|
||||
callAudioDeviceManager.stop()
|
||||
dropAudioManagerOverrides()
|
||||
if (proximityLock?.isHeld == true) {
|
||||
proximityLock.release()
|
||||
}
|
||||
@@ -126,7 +125,7 @@ actual fun ActiveCallView() {
|
||||
// Starting is delayed to make Android <= 11 working good with Bluetooth
|
||||
callAudioDeviceManager.start()
|
||||
} else {
|
||||
callAudioDeviceManager.selectLastExternalDeviceOrDefault(call.soundSpeaker, true)
|
||||
callAudioDeviceManager.selectLastExternalDeviceOrDefault(call.supportsVideo(), true)
|
||||
}
|
||||
CallSoundsPlayer.startConnectingCallSound(scope)
|
||||
activeCallWaitDeliveryReceipt(scope)
|
||||
@@ -138,7 +137,7 @@ actual fun ActiveCallView() {
|
||||
// Starting is delayed to make Android <= 11 working good with Bluetooth
|
||||
callAudioDeviceManager.start()
|
||||
} else {
|
||||
callAudioDeviceManager.selectLastExternalDeviceOrDefault(call.soundSpeaker, true)
|
||||
callAudioDeviceManager.selectLastExternalDeviceOrDefault(call.supportsVideo(), true)
|
||||
}
|
||||
}
|
||||
is WCallResponse.Answer -> withBGApi {
|
||||
@@ -241,11 +240,10 @@ private fun ActiveCallOverlay(call: Call, chatModel: ChatModel, callAudioDeviceM
|
||||
selectDevice = { callAudioDeviceManager.selectDevice(it.id) },
|
||||
toggleVideo = { chatModel.callCommand.add(WCallCommand.Media(CallMediaType.Video, enable = !call.videoEnabled)) },
|
||||
toggleSound = {
|
||||
var call = chatModel.activeCall.value
|
||||
if (call != null) {
|
||||
call = call.copy(soundSpeaker = !call.soundSpeaker)
|
||||
chatModel.activeCall.value = call
|
||||
callAudioDeviceManager.selectLastExternalDeviceOrDefault(call.soundSpeaker, true)
|
||||
val enableSpeaker = callAudioDeviceManager.currentDevice.value?.type == AudioDeviceInfo.TYPE_BUILTIN_EARPIECE
|
||||
val preferredInternalDevice = callAudioDeviceManager.devices.value.firstOrNull { it.type == if (enableSpeaker) AudioDeviceInfo.TYPE_BUILTIN_SPEAKER else AudioDeviceInfo.TYPE_BUILTIN_EARPIECE }
|
||||
if (preferredInternalDevice != null) {
|
||||
callAudioDeviceManager.selectDevice(preferredInternalDevice.id)
|
||||
}
|
||||
},
|
||||
flipCamera = { chatModel.callCommand.add(WCallCommand.Camera(call.localCamera.flipped)) }
|
||||
@@ -308,7 +306,8 @@ private fun ActiveCallOverlayLayout(
|
||||
currentDevice.value == null ||
|
||||
devices.none { it.id == currentDevice.value?.id }
|
||||
) {
|
||||
ToggleSoundButton(call, enabled, toggleSound)
|
||||
val isSpeaker = currentDevice.value?.type == AudioDeviceInfo.TYPE_BUILTIN_SPEAKER
|
||||
ToggleSoundButton(call, enabled, isSpeaker, toggleSound)
|
||||
} else {
|
||||
ExposedDropDownSettingWithIcon(
|
||||
devices.map { Triple(it, it.icon, if (it.name != null) generalGetString(it.name!!) else it.productName.toString()) },
|
||||
@@ -404,8 +403,8 @@ private fun ToggleAudioButton(call: Call, enabled: Boolean = true, toggleAudio:
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun ToggleSoundButton(call: Call, enabled: Boolean, toggleSound: () -> Unit) {
|
||||
if (call.soundSpeaker) {
|
||||
private fun ToggleSoundButton(call: Call, enabled: Boolean, speaker: Boolean, toggleSound: () -> Unit) {
|
||||
if (speaker) {
|
||||
ControlButton(call, painterResource(MR.images.ic_volume_up), MR.strings.icon_descr_speaker_off, enabled, toggleSound)
|
||||
} else {
|
||||
ControlButton(call, painterResource(MR.images.ic_volume_down), MR.strings.icon_descr_speaker_on, enabled, toggleSound)
|
||||
|
||||
+7
-1
@@ -27,6 +27,7 @@ import androidx.core.text.HtmlCompat
|
||||
import chat.simplex.common.helpers.*
|
||||
import chat.simplex.common.model.*
|
||||
import chat.simplex.common.platform.*
|
||||
import chat.simplex.res.MR
|
||||
import dev.icerock.moko.resources.StringResource
|
||||
import java.io.*
|
||||
import java.net.URI
|
||||
@@ -187,7 +188,12 @@ actual suspend fun getLoadedImage(file: CIFile?): Pair<ImageBitmap, ByteArray>?
|
||||
return if (filePath != null && file != null) {
|
||||
try {
|
||||
val data = if (file.fileSource?.cryptoArgs != null) {
|
||||
readCryptoFile(getAppFilePath(file.fileSource.filePath), file.fileSource.cryptoArgs)
|
||||
try {
|
||||
readCryptoFile(getAppFilePath(file.fileSource.filePath), file.fileSource.cryptoArgs)
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Unable to read crypto file: " + e.stackTraceToString())
|
||||
return null
|
||||
}
|
||||
} else {
|
||||
File(getAppFilePath(file.fileName)).readBytes()
|
||||
}
|
||||
|
||||
+12
-5
@@ -12,10 +12,12 @@ import androidx.compose.desktop.ui.tooling.preview.Preview
|
||||
import androidx.compose.foundation.*
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.lazy.LazyRow
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.material.MaterialTheme.colors
|
||||
import androidx.compose.runtime.*
|
||||
import androidx.compose.runtime.saveable.rememberSaveable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.draw.shadow
|
||||
import androidx.compose.ui.graphics.*
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
@@ -34,11 +36,13 @@ import chat.simplex.common.helpers.APPLICATION_ID
|
||||
import chat.simplex.common.helpers.saveAppLocale
|
||||
import chat.simplex.common.views.usersettings.AppearanceScope.ColorEditor
|
||||
import chat.simplex.res.MR
|
||||
import dev.icerock.moko.resources.ImageResource
|
||||
import dev.icerock.moko.resources.compose.painterResource
|
||||
import kotlinx.coroutines.delay
|
||||
|
||||
enum class AppIcon(val resId: Int) {
|
||||
DEFAULT(R.drawable.icon_round_common),
|
||||
DARK_BLUE(R.drawable.icon_dark_blue_round_common),
|
||||
enum class AppIcon(val image: ImageResource) {
|
||||
DEFAULT(MR.images.ic_simplex_light),
|
||||
DARK_BLUE(MR.images.ic_simplex_dark),
|
||||
}
|
||||
|
||||
@Composable
|
||||
@@ -122,9 +126,8 @@ fun AppearanceScope.AppearanceLayout(
|
||||
LazyRow {
|
||||
items(AppIcon.values().size, { index -> AppIcon.values()[index] }) { index ->
|
||||
val item = AppIcon.values()[index]
|
||||
val mipmap = ContextCompat.getDrawable(LocalContext.current, item.resId)!!
|
||||
Image(
|
||||
bitmap = mipmap.toBitmap().asImageBitmap(),
|
||||
painterResource(item.image),
|
||||
contentDescription = "",
|
||||
contentScale = ContentScale.Fit,
|
||||
modifier = Modifier
|
||||
@@ -132,6 +135,7 @@ fun AppearanceScope.AppearanceLayout(
|
||||
.size(70.dp)
|
||||
.clickable { changeIcon(item) }
|
||||
.padding(10.dp)
|
||||
.clip(CircleShape)
|
||||
)
|
||||
|
||||
if (index + 1 != AppIcon.values().size) {
|
||||
@@ -141,6 +145,9 @@ fun AppearanceScope.AppearanceLayout(
|
||||
}
|
||||
}
|
||||
|
||||
SectionDividerSpaced(maxTopPadding = true)
|
||||
ProfileImageSection()
|
||||
|
||||
SectionDividerSpaced(maxTopPadding = true)
|
||||
ThemesSection(systemDarkTheme, showSettingsModal, editColor)
|
||||
SectionBottomSpacer()
|
||||
|
||||
BIN
Binary file not shown.
|
Before Width: | Height: | Size: 9.6 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 11 KiB |
+7
-1
@@ -2696,7 +2696,13 @@ data class CryptoFile(
|
||||
private fun decryptToTmpFile(): URI? {
|
||||
val absoluteFilePath = if (isAbsolutePath) filePath else getAppFilePath(filePath)
|
||||
val tmpFile = createTmpFileIfNeeded()
|
||||
decryptCryptoFile(absoluteFilePath, cryptoArgs ?: return null, tmpFile.absolutePath)
|
||||
try {
|
||||
decryptCryptoFile(absoluteFilePath, cryptoArgs ?: return null, tmpFile.absolutePath)
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Unable to decrypt crypto file: " + e.stackTraceToString())
|
||||
AlertManager.shared.showAlertMsg(title = generalGetString(MR.strings.error), text = e.stackTraceToString())
|
||||
return null
|
||||
}
|
||||
return tmpFile.toURI()
|
||||
}
|
||||
|
||||
|
||||
+8
@@ -171,6 +171,7 @@ class AppPreferences {
|
||||
}, decode = {
|
||||
json.decodeFromString(MapSerializer(String.serializer(), ThemeOverrides.serializer()), it)
|
||||
}, settingsThemes)
|
||||
val profileImageCornerRadius = mkFloatPreference(SHARED_PREFS_PROFILE_IMAGE_CORNER_RADIUS, 22.5f)
|
||||
|
||||
val whatsNewVersion = mkStrPreference(SHARED_PREFS_WHATS_NEW_VERSION, null)
|
||||
val lastMigratedVersionCode = mkIntPreference(SHARED_PREFS_LAST_MIGRATED_VERSION_CODE, 0)
|
||||
@@ -201,6 +202,12 @@ class AppPreferences {
|
||||
set = fun(value) = settings.putLong(prefName, value)
|
||||
)
|
||||
|
||||
private fun mkFloatPreference(prefName: String, default: Float) =
|
||||
SharedPreference(
|
||||
get = fun() = settings.getFloat(prefName, default),
|
||||
set = fun(value) = settings.putFloat(prefName, value)
|
||||
)
|
||||
|
||||
private fun mkTimeoutPreference(prefName: String, default: Long, proxyDefault: Long): SharedPreference<Long> {
|
||||
val d = if (networkUseSocksProxy.get()) proxyDefault else default
|
||||
return SharedPreference(
|
||||
@@ -331,6 +338,7 @@ class AppPreferences {
|
||||
private const val SHARED_PREFS_CURRENT_THEME = "CurrentTheme"
|
||||
private const val SHARED_PREFS_SYSTEM_DARK_THEME = "SystemDarkTheme"
|
||||
private const val SHARED_PREFS_THEMES = "Themes"
|
||||
private const val SHARED_PREFS_PROFILE_IMAGE_CORNER_RADIUS = "ProfileImageCornerRadius"
|
||||
private const val SHARED_PREFS_WHATS_NEW_VERSION = "WhatsNewVersion"
|
||||
private const val SHARED_PREFS_LAST_MIGRATED_VERSION_CODE = "LastMigratedVersionCode"
|
||||
private const val SHARED_PREFS_CUSTOM_DISAPPEARING_MESSAGE_TIME = "CustomDisappearingMessageTime"
|
||||
|
||||
-1
@@ -20,7 +20,6 @@ data class Call(
|
||||
val sharedKey: String? = null,
|
||||
val audioEnabled: Boolean = true,
|
||||
val videoEnabled: Boolean = localMedia == CallMediaType.Video,
|
||||
val soundSpeaker: Boolean = localMedia == CallMediaType.Video,
|
||||
var localCamera: VideoCamera = VideoCamera.User,
|
||||
val connectionInfo: ConnectionInfo? = null,
|
||||
var connectedAt: Instant? = null,
|
||||
|
||||
+30
-19
@@ -1,6 +1,5 @@
|
||||
package chat.simplex.common.views.chat
|
||||
|
||||
import androidx.compose.animation.core.Animatable
|
||||
import androidx.compose.desktop.ui.tooling.preview.Preview
|
||||
import androidx.compose.foundation.*
|
||||
import androidx.compose.foundation.gestures.*
|
||||
@@ -22,7 +21,6 @@ import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.intl.Locale
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.graphics.ImageBitmap
|
||||
import androidx.compose.ui.input.pointer.*
|
||||
import androidx.compose.ui.text.*
|
||||
import androidx.compose.ui.unit.*
|
||||
import chat.simplex.common.model.*
|
||||
@@ -398,23 +396,42 @@ fun ChatView(chatId: String, chatModel: ChatModel, onComposed: suspend (chatId:
|
||||
}
|
||||
},
|
||||
showItemDetails = { cInfo, cItem ->
|
||||
withBGApi {
|
||||
suspend fun loadChatItemInfo(): ChatItemInfo? {
|
||||
val ciInfo = chatModel.controller.apiGetChatItemInfo(chatRh, cInfo.chatType, cInfo.apiId, cItem.id)
|
||||
if (ciInfo != null) {
|
||||
if (chat.chatInfo is ChatInfo.Group) {
|
||||
setGroupMembers(chatRh, chat.chatInfo.groupInfo, chatModel)
|
||||
}
|
||||
ModalManager.end.closeModals()
|
||||
ModalManager.end.showModalCloseable(endButtons = {
|
||||
ShareButton {
|
||||
clipboard.shareText(itemInfoShareText(chatModel, cItem, ciInfo, chatModel.controller.appPrefs.developerTools.get()))
|
||||
}
|
||||
}) { close ->
|
||||
ChatItemInfoView(chatRh, cItem, ciInfo, devTools = chatModel.controller.appPrefs.developerTools.get())
|
||||
KeyChangeEffect(chatModel.chatId.value) {
|
||||
close()
|
||||
}
|
||||
return ciInfo
|
||||
}
|
||||
withBGApi {
|
||||
var initialCiInfo = loadChatItemInfo() ?: return@withBGApi
|
||||
ModalManager.end.closeModals()
|
||||
ModalManager.end.showModalCloseable(endButtons = {
|
||||
ShareButton {
|
||||
clipboard.shareText(itemInfoShareText(chatModel, cItem, initialCiInfo, chatModel.controller.appPrefs.developerTools.get()))
|
||||
}
|
||||
}) { close ->
|
||||
var ciInfo by remember(cItem.id) { mutableStateOf(initialCiInfo) }
|
||||
ChatItemInfoView(chatRh, cItem, ciInfo, devTools = chatModel.controller.appPrefs.developerTools.get())
|
||||
LaunchedEffect(cItem.id) {
|
||||
withContext(Dispatchers.Default) {
|
||||
for (apiResp in controller.messagesChannel) {
|
||||
val msg = apiResp.resp
|
||||
if (apiResp.remoteHostId == chatRh &&
|
||||
msg is CR.ChatItemStatusUpdated &&
|
||||
msg.chatItem.chatItem.id == cItem.id
|
||||
) {
|
||||
ciInfo = loadChatItemInfo() ?: return@withContext
|
||||
initialCiInfo = ciInfo
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
KeyChangeEffect(chatModel.chatId.value) {
|
||||
close()
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -993,13 +1010,7 @@ fun BoxWithConstraintsScope.ChatItemsList(
|
||||
swipeableModifier,
|
||||
horizontalArrangement = Arrangement.spacedBy(4.dp)
|
||||
) {
|
||||
Box(
|
||||
Modifier
|
||||
.clip(CircleShape)
|
||||
.clickable {
|
||||
showMemberInfo(chat.chatInfo.groupInfo, member)
|
||||
}
|
||||
) {
|
||||
Box(Modifier.clickable { showMemberInfo(chat.chatInfo.groupInfo, member) }) {
|
||||
MemberImage(member)
|
||||
}
|
||||
ChatItemViewShortHand(cItem, range)
|
||||
|
||||
+16
-5
@@ -534,23 +534,34 @@ fun ComposeView(
|
||||
AudioPlayer.stop(tmpFile.absolutePath)
|
||||
if (remoteHost == null) {
|
||||
val actualFile = File(getAppFilePath(tmpFile.name.replaceAfter(RecorderInterface.extension, "")))
|
||||
files.add(withContext(Dispatchers.IO) {
|
||||
val file = withContext(Dispatchers.IO) {
|
||||
if (chatController.appPrefs.privacyEncryptLocalFiles.get()) {
|
||||
val args = encryptCryptoFile(tmpFile.absolutePath, actualFile.absolutePath)
|
||||
tmpFile.delete()
|
||||
val args = try {
|
||||
encryptCryptoFile(tmpFile.absolutePath, actualFile.absolutePath)
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Unable to encrypt plain file: " + e.stackTraceToString())
|
||||
AlertManager.shared.showAlertMsg(title = generalGetString(MR.strings.error), text = e.stackTraceToString())
|
||||
return@withContext null
|
||||
} finally {
|
||||
tmpFile.delete()
|
||||
}
|
||||
CryptoFile(actualFile.name, args)
|
||||
} else {
|
||||
Files.move(tmpFile.toPath(), actualFile.toPath())
|
||||
CryptoFile.plain(actualFile.name)
|
||||
}
|
||||
})
|
||||
}
|
||||
if (file != null) {
|
||||
files.add(file)
|
||||
msgs.add(MsgContent.MCVoice(if (msgs.isEmpty()) msgText else "", preview.durationMs / 1000))
|
||||
}
|
||||
deleteUnusedFiles()
|
||||
} else {
|
||||
files.add(CryptoFile.plain(tmpFile.absolutePath))
|
||||
// It will be deleted on JVM shutdown or next start (if the app crashes unexpectedly)
|
||||
filesToDelete.remove(tmpFile)
|
||||
msgs.add(MsgContent.MCVoice(if (msgs.isEmpty()) msgText else "", preview.durationMs / 1000))
|
||||
}
|
||||
msgs.add(MsgContent.MCVoice(if (msgs.isEmpty()) msgText else "", preview.durationMs / 1000))
|
||||
}
|
||||
is ComposePreview.FilePreview -> {
|
||||
val file = if (remoteHost == null) {
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ import chat.simplex.common.ui.theme.*
|
||||
|
||||
@Composable
|
||||
fun CIEventView(text: AnnotatedString) {
|
||||
Text(text, Modifier.padding(horizontal = 6.dp, vertical = 6.dp), style = MaterialTheme.typography.body1.copy(lineHeight = 22.sp), maxLines = 3)
|
||||
Text(text, Modifier.padding(horizontal = 6.dp, vertical = 6.dp), style = MaterialTheme.typography.body1.copy(lineHeight = 22.sp), maxLines = 4)
|
||||
}
|
||||
@Preview/*(
|
||||
uiMode = Configuration.UI_MODE_NIGHT_YES,
|
||||
|
||||
+1
@@ -222,6 +222,7 @@ fun rememberSaveFileLauncher(ciFile: CIFile?): FileChooserLauncher =
|
||||
decryptCryptoFile(filePath, ciFile.fileSource.cryptoArgs, tmpFile.absolutePath)
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Unable to decrypt crypto file: " + e.stackTraceToString())
|
||||
AlertManager.shared.showAlertMsg(title = generalGetString(MR.strings.error), text = e.stackTraceToString())
|
||||
tmpFile.delete()
|
||||
return@createTmpFileAndDelete
|
||||
}
|
||||
|
||||
+31
-6
@@ -175,6 +175,13 @@ fun ChatItemView(
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun DeleteItemMenu() {
|
||||
DefaultDropdownMenu(showMenu) {
|
||||
DeleteItemAction(cItem, revealed, showMenu, questionText = deleteMessageQuestionText(), deleteMessage, deleteMessages)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun MsgContentItemDropdownMenu() {
|
||||
val saveFileLauncher = rememberSaveFileLauncher(ciFile = cItem.file)
|
||||
@@ -305,10 +312,13 @@ fun ChatItemView(
|
||||
} else {
|
||||
ExpandItemAction(revealed, showMenu)
|
||||
}
|
||||
DeleteItemAction(cItem, revealed, showMenu, questionText = deleteMessageQuestionText(), deleteMessage, deleteMessages)
|
||||
}
|
||||
}
|
||||
else -> {
|
||||
showMenu.value = false
|
||||
DefaultDropdownMenu(showMenu) {
|
||||
DeleteItemAction(cItem, revealed, showMenu, questionText = deleteMessageQuestionText(), deleteMessage, deleteMessages)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -356,6 +366,7 @@ fun ChatItemView(
|
||||
|
||||
@Composable fun CallItem(status: CICallStatus, duration: Int) {
|
||||
CICallItemView(cInfo, cItem, status, duration, acceptCall)
|
||||
DeleteItemMenu()
|
||||
}
|
||||
|
||||
fun mergedGroupEventText(chatItem: ChatItem): String? {
|
||||
@@ -439,12 +450,22 @@ fun ChatItemView(
|
||||
is CIContent.RcvCall -> CallItem(c.status, c.duration)
|
||||
is CIContent.RcvIntegrityError -> if (developerTools) {
|
||||
IntegrityErrorItemView(c.msgError, cItem, cInfo.timedMessagesTTL)
|
||||
DeleteItemMenu()
|
||||
} else {
|
||||
Box(Modifier.size(0.dp)) {}
|
||||
}
|
||||
is CIContent.RcvDecryptionError -> CIRcvDecryptionError(c.msgDecryptError, c.msgCount, cInfo, cItem, updateContactStats = updateContactStats, updateMemberStats = updateMemberStats, syncContactConnection = syncContactConnection, syncMemberConnection = syncMemberConnection, findModelChat = findModelChat, findModelMember = findModelMember)
|
||||
is CIContent.RcvGroupInvitation -> CIGroupInvitationView(cItem, c.groupInvitation, c.memberRole, joinGroup = joinGroup, chatIncognito = cInfo.incognito)
|
||||
is CIContent.SndGroupInvitation -> CIGroupInvitationView(cItem, c.groupInvitation, c.memberRole, joinGroup = joinGroup, chatIncognito = cInfo.incognito)
|
||||
is CIContent.RcvDecryptionError -> {
|
||||
CIRcvDecryptionError(c.msgDecryptError, c.msgCount, cInfo, cItem, updateContactStats = updateContactStats, updateMemberStats = updateMemberStats, syncContactConnection = syncContactConnection, syncMemberConnection = syncMemberConnection, findModelChat = findModelChat, findModelMember = findModelMember)
|
||||
DeleteItemMenu()
|
||||
}
|
||||
is CIContent.RcvGroupInvitation -> {
|
||||
CIGroupInvitationView(cItem, c.groupInvitation, c.memberRole, joinGroup = joinGroup, chatIncognito = cInfo.incognito)
|
||||
DeleteItemMenu()
|
||||
}
|
||||
is CIContent.SndGroupInvitation -> {
|
||||
CIGroupInvitationView(cItem, c.groupInvitation, c.memberRole, joinGroup = joinGroup, chatIncognito = cInfo.incognito)
|
||||
DeleteItemMenu()
|
||||
}
|
||||
is CIContent.RcvDirectEventContent -> {
|
||||
EventItemView()
|
||||
MsgContentItemDropdownMenu()
|
||||
@@ -479,6 +500,7 @@ fun ChatItemView(
|
||||
is CIContent.RcvChatPreference -> {
|
||||
val ct = if (cInfo is ChatInfo.Direct) cInfo.contact else null
|
||||
CIFeaturePreferenceView(cItem, ct, c.feature, c.allowed, acceptFeature)
|
||||
DeleteItemMenu()
|
||||
}
|
||||
is CIContent.SndChatPreference -> {
|
||||
CIChatFeatureView(cInfo, cItem, c.feature, MaterialTheme.colors.secondary, icon = c.feature.icon, revealed, showMenu = showMenu)
|
||||
@@ -507,7 +529,10 @@ fun ChatItemView(
|
||||
is CIContent.RcvDirectE2EEInfo -> DirectE2EEInfoText(c.e2eeInfo)
|
||||
is CIContent.SndGroupE2EEInfo -> E2EEInfoNoPQText()
|
||||
is CIContent.RcvGroupE2EEInfo -> E2EEInfoNoPQText()
|
||||
is CIContent.InvalidJSON -> CIInvalidJSONView(c.json)
|
||||
is CIContent.InvalidJSON -> {
|
||||
CIInvalidJSONView(c.json)
|
||||
DeleteItemMenu()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -574,7 +599,7 @@ fun DeleteItemAction(
|
||||
painterResource(MR.images.ic_delete),
|
||||
onClick = {
|
||||
showMenu.value = false
|
||||
if (!revealed.value && cItem.meta.itemDeleted != null) {
|
||||
if (!revealed.value) {
|
||||
val currIndex = chatModel.getChatItemIndexOrNull(cItem)
|
||||
val ciCategory = cItem.mergeCategory
|
||||
if (currIndex != null && ciCategory != null) {
|
||||
|
||||
+6
-2
@@ -16,6 +16,7 @@ import chat.simplex.common.model.CryptoFile
|
||||
import chat.simplex.common.platform.*
|
||||
import chat.simplex.common.views.chat.ProviderMedia
|
||||
import chat.simplex.common.views.helpers.*
|
||||
import chat.simplex.res.MR
|
||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||
import kotlinx.coroutines.launch
|
||||
import java.net.URI
|
||||
@@ -145,7 +146,7 @@ fun ImageFullScreenView(imageProvider: () -> ImageGalleryProvider, close: () ->
|
||||
onDispose { playersToRelease.add(decrypted) }
|
||||
}
|
||||
} else if (media.fileSource != null) {
|
||||
VideoViewEncrypted(uriDecrypted, media.fileSource, preview)
|
||||
VideoViewEncrypted(uriDecrypted, media.fileSource, preview, close)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -162,10 +163,13 @@ fun ImageFullScreenView(imageProvider: () -> ImageGalleryProvider, close: () ->
|
||||
expect fun FullScreenImageView(modifier: Modifier, data: ByteArray, imageBitmap: ImageBitmap)
|
||||
|
||||
@Composable
|
||||
private fun VideoViewEncrypted(uriUnencrypted: MutableState<URI?>, fileSource: CryptoFile, defaultPreview: ImageBitmap) {
|
||||
private fun VideoViewEncrypted(uriUnencrypted: MutableState<URI?>, fileSource: CryptoFile, defaultPreview: ImageBitmap, close: () -> Unit) {
|
||||
LaunchedEffect(Unit) {
|
||||
withBGApi {
|
||||
uriUnencrypted.value = fileSource.decryptedGetOrCreate()
|
||||
if (uriUnencrypted.value == null) {
|
||||
close()
|
||||
}
|
||||
}
|
||||
}
|
||||
Box(contentAlignment = Alignment.Center) {
|
||||
|
||||
+1
@@ -300,6 +300,7 @@ private fun setChatItemTTLAlert(
|
||||
confirmText = generalGetString(MR.strings.delete_messages),
|
||||
onConfirm = { setCiTTL(m, rhId, selectedChatItemTTL, progressIndicator, appFilesCountAndSize) },
|
||||
onDismiss = { selectedChatItemTTL.value = m.chatItemTTL.value },
|
||||
onDismissRequest = { selectedChatItemTTL.value = m.chatItemTTL.value },
|
||||
destructive = true,
|
||||
)
|
||||
}
|
||||
|
||||
+48
-7
@@ -3,22 +3,24 @@ package chat.simplex.common.views.helpers
|
||||
import androidx.compose.desktop.ui.tooling.preview.Preview
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.foundation.shape.*
|
||||
import androidx.compose.material.Icon
|
||||
import androidx.compose.material.MaterialTheme
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.geometry.Size
|
||||
import androidx.compose.ui.graphics.*
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import androidx.compose.ui.platform.InspectableValue
|
||||
import androidx.compose.ui.unit.*
|
||||
import dev.icerock.moko.resources.compose.painterResource
|
||||
import dev.icerock.moko.resources.compose.stringResource
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.dp
|
||||
import chat.simplex.common.model.ChatInfo
|
||||
import chat.simplex.common.platform.appPreferences
|
||||
import chat.simplex.common.platform.base64ToBitmap
|
||||
import chat.simplex.common.ui.theme.NoteFolderIconColor
|
||||
import chat.simplex.common.ui.theme.SimpleXTheme
|
||||
import chat.simplex.common.ui.theme.*
|
||||
import chat.simplex.res.MR
|
||||
import dev.icerock.moko.resources.ImageResource
|
||||
|
||||
@@ -79,12 +81,32 @@ fun ProfileImage(
|
||||
imageBitmap,
|
||||
stringResource(MR.strings.image_descr_profile_image),
|
||||
contentScale = ContentScale.Crop,
|
||||
modifier = Modifier.size(size).padding(size / 12).clip(CircleShape)
|
||||
modifier = Modifier.size(size).padding(size / 12).clip(ProfileIconShape())
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun ProfileImage(size: Dp, image: ImageResource) {
|
||||
Image(
|
||||
painterResource(image),
|
||||
stringResource(MR.strings.image_descr_profile_image),
|
||||
contentScale = ContentScale.Crop,
|
||||
modifier = Modifier.size(size).padding(size / 12).clip(ProfileIconShape())
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun ProfileIconShape(): Shape {
|
||||
val percent = remember { appPreferences.profileImageCornerRadius.state }
|
||||
return when {
|
||||
percent.value <= 0 -> RectangleShape
|
||||
percent.value >= 50 -> CircleShape
|
||||
else -> RoundedCornerShape(PercentCornerSize(percent.value))
|
||||
}
|
||||
}
|
||||
|
||||
/** [AccountCircleFilled] has its inner padding which leads to visible border if there is background underneath.
|
||||
* This is workaround
|
||||
* */
|
||||
@@ -109,11 +131,30 @@ fun ProfileImageForActiveCall(
|
||||
imageBitmap,
|
||||
stringResource(MR.strings.image_descr_profile_image),
|
||||
contentScale = ContentScale.Crop,
|
||||
modifier = Modifier.size(size).clip(CircleShape)
|
||||
modifier = Modifier.size(size).clip(ProfileIconShape())
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/** (c) [androidx.compose.foundation.shape.CornerSize] */
|
||||
private data class PercentCornerSize(
|
||||
private val percent: Float
|
||||
) : CornerSize, InspectableValue {
|
||||
init {
|
||||
if (percent < 0 || percent > 100) {
|
||||
throw IllegalArgumentException("The percent should be in the range of [0, 100]")
|
||||
}
|
||||
}
|
||||
|
||||
override fun toPx(shapeSize: Size, density: Density) =
|
||||
shapeSize.minDimension * (percent / 100f)
|
||||
|
||||
override fun toString(): String = "CornerSize(size = $percent%)"
|
||||
|
||||
override val valueOverride: String
|
||||
get() = "$percent%"
|
||||
}
|
||||
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
|
||||
+24
-6
@@ -169,8 +169,14 @@ fun saveImage(image: ImageBitmap): CryptoFile? {
|
||||
val destFileName = generateNewFileName("IMG", ext, File(getAppFilePath("")))
|
||||
val destFile = File(getAppFilePath(destFileName))
|
||||
if (encrypted) {
|
||||
val args = writeCryptoFile(destFile.absolutePath, dataResized.toByteArray())
|
||||
CryptoFile(destFileName, args)
|
||||
try {
|
||||
val args = writeCryptoFile(destFile.absolutePath, dataResized.toByteArray())
|
||||
CryptoFile(destFileName, args)
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Unable to write crypto file: " + e.stackTraceToString())
|
||||
AlertManager.shared.showAlertMsg(title = generalGetString(MR.strings.error), text = e.stackTraceToString())
|
||||
null
|
||||
}
|
||||
} else {
|
||||
val output = FileOutputStream(destFile)
|
||||
dataResized.writeTo(output)
|
||||
@@ -216,8 +222,14 @@ fun saveAnimImage(uri: URI): CryptoFile? {
|
||||
val destFileName = generateNewFileName("IMG", ext, File(getAppFilePath("")))
|
||||
val destFile = File(getAppFilePath(destFileName))
|
||||
if (encrypted) {
|
||||
val args = writeCryptoFile(destFile.absolutePath, uri.inputStream()?.readBytes() ?: return null)
|
||||
CryptoFile(destFileName, args)
|
||||
try {
|
||||
val args = writeCryptoFile(destFile.absolutePath, uri.inputStream()?.readBytes() ?: return null)
|
||||
CryptoFile(destFileName, args)
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Unable to read crypto file: " + e.stackTraceToString())
|
||||
AlertManager.shared.showAlertMsg(title = generalGetString(MR.strings.error), text = e.stackTraceToString())
|
||||
null
|
||||
}
|
||||
} else {
|
||||
Files.copy(uri.inputStream(), destFile.toPath())
|
||||
CryptoFile.plain(destFileName)
|
||||
@@ -241,8 +253,14 @@ fun saveFileFromUri(uri: URI, withAlertOnException: Boolean = true): CryptoFile?
|
||||
if (encrypted) {
|
||||
createTmpFileAndDelete { tmpFile ->
|
||||
Files.copy(inputStream, tmpFile.toPath())
|
||||
val args = encryptCryptoFile(tmpFile.absolutePath, destFile.absolutePath)
|
||||
CryptoFile(destFileName, args)
|
||||
try {
|
||||
val args = encryptCryptoFile(tmpFile.absolutePath, destFile.absolutePath)
|
||||
CryptoFile(destFileName, args)
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Unable to encrypt plain file: " + e.stackTraceToString())
|
||||
AlertManager.shared.showAlertMsg(title = generalGetString(MR.strings.error), text = e.stackTraceToString())
|
||||
null
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Files.copy(inputStream, destFile.toPath())
|
||||
|
||||
+1
-1
@@ -158,7 +158,7 @@ fun AddGroupLayout(
|
||||
)
|
||||
|
||||
LaunchedEffect(Unit) {
|
||||
delay(300)
|
||||
delay(1000)
|
||||
focusRequester.requestFocus()
|
||||
}
|
||||
}
|
||||
|
||||
+5
@@ -539,6 +539,11 @@ private val versionDescriptions: List<VersionDescription> = listOf(
|
||||
titleId = MR.strings.v5_7_call_sounds,
|
||||
descrId = MR.strings.v5_7_call_sounds_descr
|
||||
),
|
||||
FeatureDescription(
|
||||
icon = MR.images.ic_account_box,
|
||||
titleId = MR.strings.v5_7_shape_profile_images,
|
||||
descrId = MR.strings.v5_7_shape_profile_images_descr
|
||||
),
|
||||
FeatureDescription(
|
||||
icon = MR.images.ic_wifi_tethering,
|
||||
titleId = MR.strings.v5_7_network,
|
||||
|
||||
+35
-3
@@ -5,14 +5,16 @@ import SectionItemView
|
||||
import SectionItemViewSpaceBetween
|
||||
import SectionSpacer
|
||||
import SectionView
|
||||
import androidx.compose.foundation.*
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material.*
|
||||
import androidx.compose.material.MaterialTheme.colors
|
||||
import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.*
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import dev.icerock.moko.resources.compose.painterResource
|
||||
import dev.icerock.moko.resources.compose.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
@@ -24,7 +26,6 @@ import chat.simplex.common.platform.*
|
||||
import chat.simplex.res.MR
|
||||
import com.godaddy.android.colorpicker.*
|
||||
import kotlinx.serialization.encodeToString
|
||||
import java.io.File
|
||||
import java.net.URI
|
||||
import java.util.*
|
||||
import kotlin.collections.ArrayList
|
||||
@@ -33,6 +34,37 @@ import kotlin.collections.ArrayList
|
||||
expect fun AppearanceView(m: ChatModel, showSettingsModal: (@Composable (ChatModel) -> Unit) -> (() -> Unit))
|
||||
|
||||
object AppearanceScope {
|
||||
@Composable
|
||||
fun ProfileImageSection() {
|
||||
SectionView(stringResource(MR.strings.settings_section_title_profile_images).uppercase(), padding = PaddingValues(horizontal = DEFAULT_PADDING)) {
|
||||
val image = remember { chatModel.currentUser }.value?.image
|
||||
Row(Modifier.padding(top = 10.dp), horizontalArrangement = Arrangement.Center, verticalAlignment = Alignment.CenterVertically) {
|
||||
val size = 60
|
||||
Box(Modifier.offset(x = -(size / 12).dp)) {
|
||||
if (!image.isNullOrEmpty()) {
|
||||
ProfileImage(size.dp, image, MR.images.ic_simplex_light, color = Color.Unspecified)
|
||||
} else {
|
||||
ProfileImage(size.dp, if (isInDarkTheme()) MR.images.ic_simplex_light else MR.images.ic_simplex_dark)
|
||||
}
|
||||
}
|
||||
Spacer(Modifier.width(DEFAULT_PADDING_HALF - (size / 12).dp))
|
||||
Slider(
|
||||
remember { appPreferences.profileImageCornerRadius.state }.value,
|
||||
valueRange = 0f..50f,
|
||||
steps = 20,
|
||||
onValueChange = {
|
||||
val diff = it % 2.5f
|
||||
appPreferences.profileImageCornerRadius.set(it + (if (diff >= 1.25f) -diff + 2.5f else -diff))
|
||||
},
|
||||
colors = SliderDefaults.colors(
|
||||
activeTickColor = Color.Transparent,
|
||||
inactiveTickColor = Color.Transparent,
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun ThemesSection(
|
||||
systemDarkTheme: SharedPreference<String?>,
|
||||
@@ -41,7 +73,7 @@ object AppearanceScope {
|
||||
) {
|
||||
val currentTheme by CurrentColors.collectAsState()
|
||||
SectionView(stringResource(MR.strings.settings_section_title_themes)) {
|
||||
val darkTheme = chat.simplex.common.ui.theme.isSystemInDarkTheme()
|
||||
val darkTheme = isSystemInDarkTheme()
|
||||
val state = remember { derivedStateOf { currentTheme.name } }
|
||||
ThemeSelector(state) {
|
||||
ThemeManager.applyTheme(it, darkTheme)
|
||||
|
||||
@@ -1741,4 +1741,18 @@
|
||||
<string name="feature_enabled_for">مفعّل لـ</string>
|
||||
<string name="feature_roles_owners">المالكون</string>
|
||||
<string name="files_and_media_not_allowed">الملفات والوسائط غير مسموح بها</string>
|
||||
<string name="forwarded_chat_item_info_tab">محوّلة</string>
|
||||
<string name="forward_message">حوّل الرسالة…</string>
|
||||
<string name="network_option_rcv_concurrency">تلقي التزامن</string>
|
||||
<string name="recipients_can_not_see_who_message_from">لا يستطيع المُستلم/ون معرفة مَن أرسل هذه الرسالة.</string>
|
||||
<string name="saved_description">حُفظت</string>
|
||||
<string name="saved_from_chat_item_info_title">حُفظت مِن</string>
|
||||
<string name="saved_from_description">حُفظت مِن %s</string>
|
||||
<string name="audio_device_speaker">السماعة</string>
|
||||
<string name="audio_device_earpiece">سماعة الأذن</string>
|
||||
<string name="audio_device_wired_headphones">سماعات الرأس</string>
|
||||
<string name="forwarded_from_chat_item_info_title">محوّلة مِن</string>
|
||||
<string name="saved_chat_item_info_tab">حُفظت</string>
|
||||
<string name="download_file">نزّل</string>
|
||||
<string name="forward_chat_item">حوّل</string>
|
||||
</resources>
|
||||
@@ -1033,6 +1033,7 @@
|
||||
<string name="settings_section_title_language" translatable="false">LANGUAGE</string>
|
||||
<string name="settings_section_title_icon">APP ICON</string>
|
||||
<string name="settings_section_title_themes">THEMES</string>
|
||||
<string name="settings_section_title_profile_images">Profile images</string>
|
||||
<string name="settings_section_title_messages">MESSAGES AND FILES</string>
|
||||
<string name="settings_section_title_calls">CALLS</string>
|
||||
<string name="settings_section_title_network_connection">Network connection</string>
|
||||
@@ -1770,6 +1771,8 @@
|
||||
<string name="v5_7_forward_descr">Message source remains private.</string>
|
||||
<string name="v5_7_call_sounds">In-call sounds</string>
|
||||
<string name="v5_7_call_sounds_descr">When connecting audio and video calls.</string>
|
||||
<string name="v5_7_shape_profile_images">Shape profile images</string>
|
||||
<string name="v5_7_shape_profile_images_descr">Square, circle, or anything in between.</string>
|
||||
<string name="v5_7_network">Network management</string>
|
||||
<string name="v5_7_network_descr">More reliable network connection.</string>
|
||||
<string name="v5_7_new_interface_languages">Lithuanian UI</string>
|
||||
|
||||
@@ -1712,34 +1712,55 @@
|
||||
<string name="migrate_from_device_check_connection_and_try_again">Проверете вашата интернет връзка и опитайте отново</string>
|
||||
<string name="migrate_from_device_archive_will_be_deleted"><![CDATA[<b>Внимание</b>: архивът ще бъде изтрит.]]></string>
|
||||
<string name="v5_6_quantum_resistant_encryption_descr">Активиране в личните чатове (БЕТА)!</string>
|
||||
<string name="allow_to_send_simplex_links">Разрешаване на SimpleX изпращане на връзки /линкове/.</string>
|
||||
<string name="forwarded_description">1. препратено
|
||||
\n2. предадено</string>
|
||||
<string name="error_showing_desktop_notification">Грешка при показване на уведомление
|
||||
\nГрешка при показване на съобщение</string>
|
||||
<string name="permissions_open_settings">Отворени настройки</string>
|
||||
<string name="permissions_find_in_settings_and_grant">"Намерете това разрешение /права/ в настройките на Android и го задайте ръчно."</string>
|
||||
<string name="network_type_other">Друг
|
||||
\nДруги</string>
|
||||
<string name="allow_to_send_simplex_links">Разрешаване на изпращане на SimpleX линкове.</string>
|
||||
<string name="forwarded_description">препратено</string>
|
||||
<string name="error_showing_desktop_notification">Грешка при показване на известие, свържете се с разработчиците.</string>
|
||||
<string name="permissions_open_settings">Отвори настройки</string>
|
||||
<string name="permissions_find_in_settings_and_grant">Намерете това разрешение в настройките на Android и го задайте ръчно.</string>
|
||||
<string name="network_type_other">Други</string>
|
||||
<string name="network_type_cellular">Мобилна мрежа</string>
|
||||
<string name="network_type_no_network_connection">Няма мрежова връзка</string>
|
||||
<string name="network_type_network_wifi">Безжична мрежа</string>
|
||||
<string name="network_type_ethernet">Кабелна мрежа /кабелна технология/</string>
|
||||
<string name="simplex_links_not_allowed">SimpleX връзките не са разрешени</string>
|
||||
<string name="network_type_network_wifi">WiFi</string>
|
||||
<string name="network_type_ethernet">Кабелен Ethernet</string>
|
||||
<string name="simplex_links_not_allowed">SimpleX линковете не са разрешени</string>
|
||||
<string name="voice_messages_not_allowed">Гласовите съобщения не са разрешени</string>
|
||||
<string name="permissions_grant_in_settings">Предоставян в настройките</string>
|
||||
<string name="permissions_grant_in_settings">Предоставяне в настройките</string>
|
||||
<string name="settings_section_title_network_connection">Мрежова връзка</string>
|
||||
<string name="simplex_links">SimpleX връзки
|
||||
\nСимпълХикс връзки</string>
|
||||
<string name="prohibit_sending_simplex_links">Забранено изпращането на SimpleX връзки</string>
|
||||
<string name="group_members_can_send_simplex_links">Членовете на групата могат да изпращат връзки към SimpleX.</string>
|
||||
<string name="simplex_links_are_prohibited_in_group">SimpleX връзки са забранени в тази група.</string>
|
||||
<string name="feature_enabled_for">Активиране на
|
||||
\nАктивиране за</string>
|
||||
<string name="feature_roles_owners">Собственици</string>
|
||||
<string name="simplex_links">SimpleX линкове</string>
|
||||
<string name="prohibit_sending_simplex_links">Забранете изпращането на SimpleX линкове</string>
|
||||
<string name="group_members_can_send_simplex_links">Членовете на групата могат да изпращат SimpleX линкове.</string>
|
||||
<string name="simplex_links_are_prohibited_in_group">SimpleX линкове са забранени в тази група.</string>
|
||||
<string name="feature_enabled_for">Активирано за</string>
|
||||
<string name="feature_roles_owners">собственици</string>
|
||||
<string name="permissions_camera">Камера</string>
|
||||
<string name="permissions_camera_and_record_audio">Камера и микрофон</string>
|
||||
<string name="permissions_required">Предоставени разрешения</string>
|
||||
<string name="permissions_required">Предоставяне на разрешения</string>
|
||||
<string name="permissions_grant">Дадени разрешение(я) за извършване на повикване</string>
|
||||
<string name="permissions_record_audio">Микрофон</string>
|
||||
<string name="audio_device_bluetooth">Bluetooth</string>
|
||||
<string name="audio_device_wired_headphones">Слушалки жични</string>
|
||||
<string name="network_option_rcv_concurrency">Паралелност на получаване</string>
|
||||
<string name="v5_7_forward">Препращане и запазване на съобщения</string>
|
||||
<string name="v5_7_call_sounds">Звуци по време на разговор</string>
|
||||
<string name="saved_description">запазено</string>
|
||||
<string name="saved_from_description">запазено от %s</string>
|
||||
<string name="saved_chat_item_info_tab">Запазено</string>
|
||||
<string name="saved_from_chat_item_info_title">Запазено от</string>
|
||||
<string name="recipients_can_not_see_who_message_from">Получателят(ите) не могат да видят от кого е това съобщение.</string>
|
||||
<string name="download_file">Изтегли</string>
|
||||
<string name="forward_message">Препращане на съобщение…</string>
|
||||
<string name="files_and_media_not_allowed">Файлове и медия не са разрешени</string>
|
||||
<string name="feature_roles_all_members">всички членове</string>
|
||||
<string name="feature_roles_admins">администратори</string>
|
||||
<string name="forward_chat_item">Препрати</string>
|
||||
<string name="audio_device_earpiece">Слушалки безжични</string>
|
||||
<string name="forwarded_chat_item_info_tab">Препратено</string>
|
||||
<string name="forwarded_from_chat_item_info_title">Препратено от</string>
|
||||
<string name="audio_device_speaker">Високоговорител</string>
|
||||
<string name="v5_7_quantum_resistant_encryption_descr">Ще бъде активирано в личните чатове!</string>
|
||||
<string name="v5_7_forward_descr">Източникът на съобщението остава скрит.</string>
|
||||
<string name="v5_7_network">Управление на мрежата</string>
|
||||
<string name="v5_7_call_sounds_descr">При свързване на аудио и видео разговори.</string>
|
||||
<string name="v5_7_network_descr">По-надеждна мрежова връзка.</string>
|
||||
<string name="v5_7_new_interface_languages">Литовски потребителски интерфейс</string>
|
||||
</resources>
|
||||
@@ -936,7 +936,7 @@
|
||||
<string name="onboarding_notifications_mode_service_desc"><![CDATA[<b>Benötigt mehr Leistung Ihrer Batterie</b>! Der Hintergrundservice läuft permanent ab. Benachrichtigungen werden Ihnen angezeigt, sobald Sie neue Nachrichten erhalten haben.]]></string>
|
||||
<string name="create_group_link">Gruppenlink erstellen</string>
|
||||
<string name="allow_your_contacts_to_send_disappearing_messages">Erlauben Sie Ihren Kontakten das Senden von verschwindenden Nachrichten.</string>
|
||||
<string name="prohibit_sending_disappearing_messages">Das Senden von verschwindenden Nachrichten verbieten.</string>
|
||||
<string name="prohibit_sending_disappearing_messages">Das Senden von verschwindenden Nachrichten nicht erlauben.</string>
|
||||
<string name="disappearing_messages_are_prohibited">In dieser Gruppe sind verschwindende Nachrichten nicht erlaubt.</string>
|
||||
<string name="group_members_can_send_disappearing">Gruppenmitglieder können verschwindende Nachrichten senden.</string>
|
||||
<string name="v4_3_improved_server_configuration_desc">Fügen Sie Server durch Scannen der QR-Codes hinzu.</string>
|
||||
@@ -956,7 +956,7 @@
|
||||
<string name="ttl_h">%dh</string>
|
||||
<string name="v4_2_group_links">Gruppen-Links</string>
|
||||
<string name="new_in_version">Neu in %s</string>
|
||||
<string name="prohibit_sending_disappearing">Das Senden von verschwindenden Nachrichten verbieten.</string>
|
||||
<string name="prohibit_sending_disappearing">Das Senden von verschwindenden Nachrichten nicht erlauben.</string>
|
||||
<string name="v4_2_security_assessment">Sicherheits-Gutachten</string>
|
||||
<string name="v4_2_security_assessment_desc">Die Sicherheit von SimpleX Chat wurde von Trail of Bits überprüft.</string>
|
||||
<string name="whats_new">Was ist neu</string>
|
||||
@@ -1811,7 +1811,7 @@
|
||||
<string name="network_type_cellular">Zellulär</string>
|
||||
<string name="network_type_other">Andere</string>
|
||||
<string name="network_type_network_wifi">WiFi</string>
|
||||
<string name="network_type_ethernet">Kabelgebundenes Ethernet</string>
|
||||
<string name="network_type_ethernet">Kabelgebundenes Netzwerk</string>
|
||||
<string name="files_and_media_not_allowed">Dateien und Medien sind nicht erlaubt</string>
|
||||
<string name="simplex_links_not_allowed">SimpleX-Links sind nicht erlaubt</string>
|
||||
<string name="voice_messages_not_allowed">Sprachnachrichten sind nicht erlaubt</string>
|
||||
@@ -1819,9 +1819,32 @@
|
||||
<string name="group_members_can_send_simplex_links">Gruppenmitglieder können SimpleX-Links senden.</string>
|
||||
<string name="feature_roles_admins">Administratoren</string>
|
||||
<string name="feature_roles_all_members">Alle Mitglieder</string>
|
||||
<string name="feature_enabled_for">Für aktiviert</string>
|
||||
<string name="feature_enabled_for">Aktiviert für</string>
|
||||
<string name="feature_roles_owners">Eigentümer</string>
|
||||
<string name="simplex_links_are_prohibited_in_group">In dieser Gruppe sind SimpleX-Links verboten.</string>
|
||||
<string name="prohibit_sending_simplex_links">Das Senden von SimpleX-Links verbieten</string>
|
||||
<string name="simplex_links_are_prohibited_in_group">In dieser Gruppe sind SimpleX-Links nicht erlaubt.</string>
|
||||
<string name="prohibit_sending_simplex_links">Das Senden von SimpleX-Links nicht erlauben.</string>
|
||||
<string name="allow_to_send_simplex_links">Das Senden von SimpleX-Links erlauben.</string>
|
||||
<string name="audio_device_speaker">Lautsprecher</string>
|
||||
<string name="audio_device_earpiece">Kopfhörer</string>
|
||||
<string name="forward_chat_item">Weiterleiten</string>
|
||||
<string name="audio_device_bluetooth">Bluetooth</string>
|
||||
<string name="forwarded_from_chat_item_info_title">Weitergeleitet aus</string>
|
||||
<string name="forward_message">Nachricht weiterleiten…</string>
|
||||
<string name="audio_device_wired_headphones">Kopfhörer</string>
|
||||
<string name="network_option_rcv_concurrency">Gelijktijdige ontvangst</string>
|
||||
<string name="recipients_can_not_see_who_message_from">Empfänger können nicht sehen, von wem die Nachricht stammt.</string>
|
||||
<string name="saved_from_description">abgespeichert von %s</string>
|
||||
<string name="saved_chat_item_info_tab">Abgespeichert</string>
|
||||
<string name="saved_description">abgespeichert</string>
|
||||
<string name="forwarded_chat_item_info_tab">Weitergeleitet</string>
|
||||
<string name="saved_from_chat_item_info_title">Abgespeichert von</string>
|
||||
<string name="download_file">Herunterladen</string>
|
||||
<string name="v5_7_forward">Nachrichten weiterleiten und speichern</string>
|
||||
<string name="v5_7_call_sounds">Klingeltöne</string>
|
||||
<string name="v5_7_forward_descr">Die Nachrichtenquelle bleibt privat.</string>
|
||||
<string name="v5_7_network">Netzwerk-Verwaltung</string>
|
||||
<string name="v5_7_call_sounds_descr">Bei der Verbindung über Audio- und Video-Anrufe.</string>
|
||||
<string name="v5_7_new_interface_languages">Litauische Bedienoberfläche</string>
|
||||
<string name="v5_7_network_descr">Zuverlässigere Netzwerkverbindung.</string>
|
||||
<string name="v5_7_quantum_resistant_encryption_descr">Wird in direkten Chats automatisch aktiviert!</string>
|
||||
</resources>
|
||||
@@ -788,8 +788,8 @@
|
||||
<string name="first_platform_without_user_ids">La primera plataforma sin identificadores de usuario: diseñada para la privacidad.</string>
|
||||
<string name="alert_message_no_group">Este grupo ya no existe.</string>
|
||||
<string name="accept_feature_set_1_day">Establecer 1 día</string>
|
||||
<string name="v4_4_french_interface_descr">¡Gracias a los colaboradores! Contribuye a través de Weblate.</string>
|
||||
<string name="v4_5_italian_interface_descr">¡Gracias a los colaboradores! Contribuye a través de Weblate.</string>
|
||||
<string name="v4_4_french_interface_descr">¡Nuestro agradecimiento a todos los colaboradores! Puedes contribuir a través de Weblate.</string>
|
||||
<string name="v4_5_italian_interface_descr">¡Nuestro agradecimiento a todos los colaboradores! Puedes contribuir a través de Weblate.</string>
|
||||
<string name="v4_5_private_filenames_descr">Para proteger la zona horaria, los archivos de imagen/voz usan la hora UTC.</string>
|
||||
<string name="v4_5_transport_isolation">Aislamiento de transporte</string>
|
||||
<string name="to_share_with_your_contact">(para compartir con tu contacto)</string>
|
||||
@@ -934,7 +934,7 @@
|
||||
<string name="app_name">SimpleX</string>
|
||||
<string name="profile_will_be_sent_to_contact_sending_link">Tu perfil se enviará al contacto del que has recibido este enlace.</string>
|
||||
<string name="you_will_join_group">Te conectarás con todos los miembros del grupo.</string>
|
||||
<string name="sender_you_pronoun">tú</string>
|
||||
<string name="sender_you_pronoun">tu</string>
|
||||
<string name="connected_to_server_to_receive_messages_from_contact">Estás conectado al servidor usado para recibir mensajes de este contacto.</string>
|
||||
<string name="description_via_contact_address_link">mediante enlace de dirección de contacto</string>
|
||||
<string name="description_via_group_link">mediante enlace de grupo</string>
|
||||
@@ -984,7 +984,7 @@
|
||||
<string name="v4_6_audio_video_calls_descr">Ahora con soporte bluetooth y otras mejoras.</string>
|
||||
<string name="v4_6_group_welcome_message_descr">¡Guarda un mensaje para ser mostrado a los miembros nuevos!</string>
|
||||
<string name="v4_6_chinese_spanish_interface">Interfaz en chino y español</string>
|
||||
<string name="v4_6_chinese_spanish_interface_descr">¡Gracias a los colaboradores! Contribuye a través de Weblate.</string>
|
||||
<string name="v4_6_chinese_spanish_interface_descr">¡Nuestro agradecimiento a todos los colaboradores! Puedes contribuir a través de Weblate.</string>
|
||||
<string name="error_updating_user_privacy">Error al actualizar privacidad de usuario</string>
|
||||
<string name="confirm_password">Confirmar contraseña</string>
|
||||
<string name="v4_6_reduced_battery_usage">Reducción consumo de batería</string>
|
||||
@@ -1112,7 +1112,7 @@
|
||||
<string name="v5_0_app_passcode">Código de acceso de la aplicación</string>
|
||||
<string name="v5_0_polish_interface">Interfaz en polaco</string>
|
||||
<string name="v5_0_app_passcode_descr">Úsalo en lugar de la autenticación del sistema.</string>
|
||||
<string name="v5_0_polish_interface_descr">¡Gracias a los colaboradores! Contribuye a través de Weblate.</string>
|
||||
<string name="v5_0_polish_interface_descr">¡Nuestro agradecimiento a todos los colaboradores! Puedes contribuir a través de Weblate.</string>
|
||||
<string name="v5_0_large_files_support">Vídeos y archivos de hasta 1Gb</string>
|
||||
<string name="v5_0_large_files_support_descr">¡Rápido y sin necesidad de esperar a que el remitente esté en línea!</string>
|
||||
<string name="auth_open_chat_profiles">Abrir perfiles</string>
|
||||
@@ -1238,7 +1238,7 @@
|
||||
<string name="v5_1_better_messages_descr">- mensajes de voz de hasta 5 minutos.
|
||||
\n- tiempo personalizado para mensajes temporales.
|
||||
\n- historial de edición.</string>
|
||||
<string name="whats_new_thanks_to_users_contribute_weblate">¡Gracias a los colaboradores! Contribuye a través de Weblate.</string>
|
||||
<string name="whats_new_thanks_to_users_contribute_weblate">¡Nuestro agradecimiento a todos los colaboradores! Puedes contribuir a través de Weblate.</string>
|
||||
<string name="v5_1_better_messages">Mensajes mejorados</string>
|
||||
<string name="v5_1_self_destruct_passcode_descr">Al introducirlo todos los datos son eliminados.</string>
|
||||
<string name="v5_1_custom_themes_descr">Personalizar y compartir temas de color.</string>
|
||||
@@ -1731,7 +1731,7 @@
|
||||
<string name="simplex_links_not_allowed">Enlaces SimpleX no permitidos</string>
|
||||
<string name="voice_messages_not_allowed">Mensajes de voz no permitidos</string>
|
||||
<string name="simplex_links">Enlaces SimpleX</string>
|
||||
<string name="group_members_can_send_simplex_links">Los miembros del grupo pueden enviar enlaces SimpleX</string>
|
||||
<string name="group_members_can_send_simplex_links">Los miembros del grupo pueden enviar enlaces SimpleX.</string>
|
||||
<string name="simplex_links_are_prohibited_in_group">Los enlaces SimpleX no se permiten en este grupo.</string>
|
||||
<string name="feature_roles_owners">propietarios</string>
|
||||
<string name="network_type_cellular">Móvil</string>
|
||||
@@ -1754,4 +1754,17 @@
|
||||
<string name="forwarded_chat_item_info_tab">Reenviado</string>
|
||||
<string name="forward_message">Mensaje reenviado…</string>
|
||||
<string name="recipients_can_not_see_who_message_from">Los destinatarios no ven de quién procede este mensaje.</string>
|
||||
<string name="audio_device_bluetooth">Bluetooth</string>
|
||||
<string name="network_option_rcv_concurrency">Concurrencia en la recepción</string>
|
||||
<string name="audio_device_earpiece">Auriculares</string>
|
||||
<string name="audio_device_wired_headphones">Auriculares</string>
|
||||
<string name="audio_device_speaker">Altavoz</string>
|
||||
<string name="v5_7_forward">Reenviar y guardar mensajes</string>
|
||||
<string name="v5_7_call_sounds">Sonido de llamada</string>
|
||||
<string name="v5_7_new_interface_languages">Interfaz en lituano</string>
|
||||
<string name="v5_7_network">Gestión de la red</string>
|
||||
<string name="v5_7_forward_descr">El autor del mensaje se mantiene privado.</string>
|
||||
<string name="v5_7_call_sounds_descr">Al iniciar llamadas de audio y vídeo.</string>
|
||||
<string name="v5_7_quantum_resistant_encryption_descr">¡Será habilitado en los chats directos!</string>
|
||||
<string name="v5_7_network_descr">Conexión de red más fiable.</string>
|
||||
</resources>
|
||||
@@ -99,7 +99,7 @@
|
||||
<string name="smp_servers_add_to_another_device">Hozzáadás egy másik eszközhöz</string>
|
||||
<string name="allow_message_reactions">Az üzenetreakciók küldése engedélyezve van.</string>
|
||||
<string name="icon_descr_cancel_file_preview">Fájl előnézet megszakítása</string>
|
||||
<string name="all_group_members_will_remain_connected">Minden csoporttag csatlakozva marad.</string>
|
||||
<string name="all_group_members_will_remain_connected">Minden csoporttag kapcsolatban marad.</string>
|
||||
<string name="onboarding_notifications_mode_service_desc"><![CDATA[<b>Több akkumulátort használ</b>! Háttérszolgáltatás mindig fut - az értesítések megjelennek, amint az üzenetek elérhetővé válnak.]]></string>
|
||||
<string name="block_member_confirmation">Letiltás</string>
|
||||
<string name="group_member_role_admin">admin</string>
|
||||
@@ -161,7 +161,7 @@
|
||||
<string name="icon_descr_call_progress">Hívás folyamatban</string>
|
||||
<string name="both_you_and_your_contact_can_add_message_reactions">Mindkét fél küldhet üzenetreakciókat.</string>
|
||||
<string name="both_you_and_your_contact_can_make_calls">Mindkét fél tud hívásokat indítani.</string>
|
||||
<string name="la_auth_failed">Hitelesítés sikertelen</string>
|
||||
<string name="la_auth_failed">Sikertelen hitelesítés</string>
|
||||
<string name="block_member_desc">Minden %s által írt új üzenet elrejtésre kerül!</string>
|
||||
<string name="app_version_name">Alkalmazás verzió: v%s</string>
|
||||
<string name="allow_calls_only_if">Hívások engedélyezése kizárólag abban az esetben, ha az ismerőse is engedélyezi.</string>
|
||||
@@ -180,9 +180,9 @@
|
||||
<string name="change_member_role_question">Csoport szerepkör megváltoztatása?</string>
|
||||
<string name="change_lock_mode">Zárolási mód megváltoztatása</string>
|
||||
<string name="notification_contact_connected">Csatlakozott</string>
|
||||
<string name="rcv_group_event_member_connected">csatlakozva</string>
|
||||
<string name="rcv_group_event_member_connected">kapcsolódva</string>
|
||||
<string name="connect_via_link_verb">Kapcsolódás</string>
|
||||
<string name="group_member_status_connected">csatlakozva</string>
|
||||
<string name="group_member_status_connected">kapcsolódva</string>
|
||||
<string name="connected_mobile">Csatlakoztatott telefon</string>
|
||||
<string name="server_connected">kapcsolódva</string>
|
||||
<string name="change_role">Szerepkör megváltoztatása</string>
|
||||
@@ -195,7 +195,7 @@
|
||||
<string name="connect_button">Kapcsolódás</string>
|
||||
<string name="connect_via_member_address_alert_title">Közvetlen csatlakozás?</string>
|
||||
<string name="smp_server_test_connect">Kapcsolódás</string>
|
||||
<string name="rcv_group_event_member_created_contact">közvetlenül csatlakozva</string>
|
||||
<string name="rcv_group_event_member_created_contact">közvetlenül kapcsolódva</string>
|
||||
<string name="connection_local_display_name">kapcsolat %1$d</string>
|
||||
<string name="status_contact_has_e2e_encryption">az ismerős e2e titkosítással rendelkezik</string>
|
||||
<string name="v5_4_incognito_groups_descr">Csoport létrehozása véletlenszerű profillal.</string>
|
||||
@@ -309,7 +309,7 @@
|
||||
<string name="chat_database_section">CSEVEGÉSI ADATBÁZIS</string>
|
||||
<string name="change_self_destruct_passcode">Önmegsemmisító jelkód megváltoztatása</string>
|
||||
<string name="smp_server_test_create_queue">Várólista létrehozása</string>
|
||||
<string name="colored_text">színes</string>
|
||||
<string name="colored_text">színezett</string>
|
||||
<string name="callstate_connecting">kapcsolódás…</string>
|
||||
<string name="dark_theme">Sötét téma</string>
|
||||
<string name="deleted_description">törölve</string>
|
||||
@@ -497,7 +497,7 @@
|
||||
<string name="enable_self_destruct">Önmegsemmisítés engedélyezése</string>
|
||||
<string name="v5_2_favourites_filter_descr">Olvasatlan és kedvenc csevegésekre való szűrés.</string>
|
||||
<string name="failed_to_parse_chats_title">A csevegések betöltése sikertelen</string>
|
||||
<string name="connect_plan_group_already_exists">Már tagja a csoportnak!</string>
|
||||
<string name="connect_plan_group_already_exists">A csoport már létezik!</string>
|
||||
<string name="v4_4_french_interface">Francia kezelőfelület</string>
|
||||
<string name="v4_2_group_links">Csoport hivatkozások</string>
|
||||
<string name="v5_1_message_reactions_descr">Végre, megvannak! 🚀</string>
|
||||
@@ -541,7 +541,7 @@
|
||||
<string name="fix_connection_question">Kapcsolat javítása?</string>
|
||||
<string name="files_and_media">Fájlok és médiatartalom</string>
|
||||
<string name="section_title_for_console">KONZOLHOZ</string>
|
||||
<string name="alert_text_encryption_renegotiation_failed">Titkosítás újraegyeztetése sikertelen.</string>
|
||||
<string name="alert_text_encryption_renegotiation_failed">Sikertelen titkosítás-újraegyeztetés.</string>
|
||||
<string name="error_deleting_user">Hiba a felhasználói profil törlésekor</string>
|
||||
<string name="fix_connection_not_supported_by_group_member">Csoporttag általi javítás nem támogatott</string>
|
||||
<string name="enter_welcome_message">Üdvözlő üzenetet megadása…</string>
|
||||
@@ -602,7 +602,7 @@
|
||||
<string name="export_database">Adatbázis exportálása</string>
|
||||
<string name="full_name__field">Teljes név:</string>
|
||||
<string name="v4_6_reduced_battery_usage">Tovább csökkentett akkumulátor használat</string>
|
||||
<string name="error_stopping_chat">Hiba a csevegés megállításakor</string>
|
||||
<string name="error_stopping_chat">Hiba a csevegés megszakításakor</string>
|
||||
<string name="snd_conn_event_ratchet_sync_ok">titkosítás rendben %s számára</string>
|
||||
<string name="delete_group_for_all_members_cannot_undo_warning">Csoport törlésre kerül minden tag számára - ez a művelet nem vonható vissza!</string>
|
||||
<string name="v5_2_fix_encryption_descr">Titkosítás javítása az adatmentések helyreállítása után.</string>
|
||||
@@ -794,7 +794,7 @@
|
||||
<string name="loading_remote_file_title">A fájl betöltése</string>
|
||||
<string name="no_contacts_to_add">Nincs hozzáadandó ismerős</string>
|
||||
<string name="v4_5_message_draft">Üzenetvázlat</string>
|
||||
<string name="display_name_invited_to_connect">meghívta</string>
|
||||
<string name="display_name_invited_to_connect">meghívta, hogy csatlakozzon</string>
|
||||
<string name="add_contact">Egyszer használatos meghívó hivatkozás</string>
|
||||
<string name="notifications">Értesítések</string>
|
||||
<string name="images_limit_desc">Egyszerre csak 10 kép küldhető el</string>
|
||||
@@ -859,7 +859,7 @@
|
||||
<string name="new_passphrase">Új jelmondat…</string>
|
||||
<string name="callstatus_missed">nem fogadott hívás</string>
|
||||
<string name="database_migrations">Átköltöztetés: %s</string>
|
||||
<string name="in_reply_to">Válasz neki</string>
|
||||
<string name="in_reply_to">Válaszul erre:</string>
|
||||
<string name="notification_preview_mode_message">Üzenet szövege</string>
|
||||
<string name="notifications_will_be_hidden">Az értesítések csak az alkalmazás bezárásáig érkeznek!</string>
|
||||
<string name="info_menu">Információ</string>
|
||||
@@ -897,16 +897,16 @@
|
||||
<string name="only_you_can_delete_messages">Véglegesen csak ön törölhet üzeneteket (ismerőse csak törlésre jelölheti őket ). (24 óra)</string>
|
||||
<string name="role_in_group">Szerepkör</string>
|
||||
<string name="simplex_link_contact">SimpleX ismerős azonosítója</string>
|
||||
<string name="stop_file__confirm">Megállítás</string>
|
||||
<string name="stop_file__confirm">Megszakítás</string>
|
||||
<string name="smp_servers_preset_server">Előre beállított kiszolgáló</string>
|
||||
<string name="add_contact_or_create_group">Új csevegés kezdése</string>
|
||||
<string name="opensource_protocol_and_code_anybody_can_run_servers">Nyílt forráskódú protokoll és forráskód – bárki üzemeltethet kiszolgálókat.</string>
|
||||
<string name="rcv_group_event_open_chat">Megnyitás</string>
|
||||
<string name="network_option_protocol_timeout">Protokoll időtúllépés</string>
|
||||
<string name="secret_text">titok</string>
|
||||
<string name="secret_text">titkos</string>
|
||||
<string name="settings_notification_preview_mode_title">Előnézet megjelenítése</string>
|
||||
<string name="callstate_waiting_for_confirmation">várakozás a visszaigazolásra…</string>
|
||||
<string name="stop_file__action">Fájl megállítása</string>
|
||||
<string name="stop_file__action">Fájl megszakítása</string>
|
||||
<string name="description_via_group_link">csoport hivatkozáson keresztül</string>
|
||||
<string name="network_option_ping_interval">PING időköze</string>
|
||||
<string name="send_disappearing_message">Eltűnő üzenet küldése</string>
|
||||
@@ -943,7 +943,7 @@
|
||||
<string name="only_your_contact_can_make_calls">Csak az ismerőse tud hívást indítani.</string>
|
||||
<string name="settings_section_title_themes">TÉMÁK</string>
|
||||
<string name="videos_limit_title">Túl sok videó!</string>
|
||||
<string name="stop_chat_to_enable_database_actions">Csevegési szolgáltatás megállítása az adatbázis műveletek elvégzéséhez.</string>
|
||||
<string name="stop_chat_to_enable_database_actions">Csevegési szolgáltatás megszakítása az adatbázis műveletek elvégzéséhez.</string>
|
||||
<string name="welcome">Üdvözöljük!</string>
|
||||
<string name="v5_1_self_destruct_passcode">Önmegsemmisítési jelkód</string>
|
||||
<string name="connect_via_link_or_qr_from_clipboard_or_in_person">(beolvasás, vagy beillesztés a vágólapról)</string>
|
||||
@@ -1012,7 +1012,7 @@
|
||||
<string name="images_limit_title">Túl sok kép!</string>
|
||||
<string name="save_archive">Archívum mentése</string>
|
||||
<string name="group_members_n">%s, %s és %d tag</string>
|
||||
<string name="auth_stop_chat">Csevegési szolgáltatás megállítása</string>
|
||||
<string name="auth_stop_chat">Csevegési szolgáltatás megszakítása</string>
|
||||
<string name="simplex_link_mode">SimpleX hivatkozások</string>
|
||||
<string name="v4_4_disappearing_messages_desc">Az elküldött üzenetek törlésre kerülnek a beállított idő után.</string>
|
||||
<string name="user_unmute">Némítás feloldása</string>
|
||||
@@ -1096,7 +1096,7 @@
|
||||
<string name="rcv_group_event_3_members_connected">%s, %s és %s csatlakoztak</string>
|
||||
<string name="simplex_link_invitation">SimpleX egyszer használatos meghívó</string>
|
||||
<string name="your_calls">Hívások</string>
|
||||
<string name="icon_descr_sent_msg_status_send_failed">küldés sikertelen</string>
|
||||
<string name="icon_descr_sent_msg_status_send_failed">nem sikerült elküldeni</string>
|
||||
<string name="theme_colors_section_title">TÉMA SZÍNEK</string>
|
||||
<string name="network_options_revert">Visszaállít</string>
|
||||
<string name="restore_database_alert_desc">Előző jelszó megadása az adatbázis biztonsági mentésének visszaállítása után. Ez a művelet nem vonható vissza.</string>
|
||||
@@ -1137,8 +1137,8 @@
|
||||
<string name="to_connect_via_link_title">Csatlakozás hivatkozáson keresztül</string>
|
||||
<string name="share_address">Azonosító megosztása</string>
|
||||
<string name="smp_servers_scan_qr">A kiszolgáló QR-kódjának beolvasása</string>
|
||||
<string name="stop_chat_confirmation">Megállítás</string>
|
||||
<string name="stop_sharing_address">Címmegosztás megállítása?</string>
|
||||
<string name="stop_chat_confirmation">Megszakítás</string>
|
||||
<string name="stop_sharing_address">Címmegosztás megszakítása?</string>
|
||||
<string name="auth_open_chat_profiles">Csevegés profilok megnyitása</string>
|
||||
<string name="connect_plan_repeat_join_request">Csatlakozási kérés megismétlése?</string>
|
||||
<string name="waiting_for_image">Képre várakozás</string>
|
||||
@@ -1225,7 +1225,7 @@
|
||||
<string name="share_file">Fájl megosztása…</string>
|
||||
<string name="save_verb">Mentés</string>
|
||||
<string name="call_connection_via_relay">átjátszón keresztül</string>
|
||||
<string name="stop_sharing">Megosztás leállítása</string>
|
||||
<string name="stop_sharing">Megosztás megszakítása</string>
|
||||
<string name="snd_group_event_member_deleted">eltávolította őt: %1$s</string>
|
||||
<string name="save_passphrase_and_open_chat">Jelmondat mentése és csevegés megnyitása</string>
|
||||
<string name="save_preferences_question">Beállítások mentése?</string>
|
||||
@@ -1275,11 +1275,11 @@
|
||||
<string name="your_settings">Beállítások</string>
|
||||
<string name="your_chat_database">Csevegési adatbázis</string>
|
||||
<string name="rcv_group_event_member_deleted">%1$s eltávolítva</string>
|
||||
<string name="smp_servers_test_failed">A kiszolgáló tesztje sikertelen!</string>
|
||||
<string name="smp_servers_test_failed">Sikertelen kiszolgáló-teszt!</string>
|
||||
<string name="verify_connection">Kapcsolat ellenőrzése</string>
|
||||
<string name="whats_new_read_more">Tudjon meg többet</string>
|
||||
<string name="sender_cancelled_file_transfer">A küldő megszakította a fájl átvitelt.</string>
|
||||
<string name="stop_chat_question">Csevegési szolgáltatás megállítása?</string>
|
||||
<string name="stop_chat_question">Csevegési szolgáltatás megszakítása?</string>
|
||||
<string name="info_row_received_at">Fogadva ekkor:</string>
|
||||
<string name="accept_feature_set_1_day">Beállítva 1 nap</string>
|
||||
<string name="user_unhide">Felfedés</string>
|
||||
@@ -1308,7 +1308,7 @@
|
||||
<string name="receiving_files_not_yet_supported">fájlok fogadása egyelőre még nem támogatott</string>
|
||||
<string name="save_group_profile">Csoport profil mentése</string>
|
||||
<string name="network_options_reset_to_defaults">Alaphelyzetbe állítás</string>
|
||||
<string name="connection_error_auth_desc">Hacsak az ismerőse nem törölte a kapcsolatot, vagy ez a hivatkozás már használatban volt, hiba lehet – kérjük, jelentse.
|
||||
<string name="connection_error_auth_desc">Hacsak az ismerőse nem törölte a kapcsolatot, vagy ez a hivatkozás már használatban volt, lehet hogy ez egy hiba – jelentse a problémát.
|
||||
\nA csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsolati hivatkozást, és ellenőrizze, hogy a hálózati kapcsolat stabil-e.</string>
|
||||
<string name="video_call_no_encryption">videóhívás (nem e2e titkosított)</string>
|
||||
<string name="smp_servers_use_server_for_new_conn">Alkalmazás új kapcsolatokhoz</string>
|
||||
@@ -1346,7 +1346,7 @@
|
||||
<string name="you_can_turn_on_lock">A SimpleX zárolás a Beállításokon keresztül kapcsolható be.</string>
|
||||
<string name="app_was_crashed">Az alkalmazás összeomlott</string>
|
||||
<string name="please_check_correct_link_and_maybe_ask_for_a_new_one">Ellenőrizze, hogy a megfelelő hivatkozást használta-e, vagy kérje meg ismerősét, hogy küldjön egy másikat.</string>
|
||||
<string name="image_decoding_exception_desc">A kép nem dekódolható. Kérjük, próbálja ki egy másik képpel, vagy lépjen kapcsolatba a fejlesztőkkel.</string>
|
||||
<string name="image_decoding_exception_desc">A kép nem dekódolható. Próbálja meg egy másik képpel, vagy lépjen kapcsolatba a fejlesztőkkel.</string>
|
||||
<string name="non_content_uri_alert_text">Érvénytelen fájl elérési útvonalat osztott meg. Jelentse a problémát az alkalmazás fejlesztőinek.</string>
|
||||
<string name="failed_to_create_user_duplicate_desc">Már van egy csevegési profil ugyanezzel a megjelenített névvel. Válasszon egy másik nevet.</string>
|
||||
<string name="trying_to_connect_to_server_to_receive_messages_with_error">Csatlakozási kísérlet a kapcsolat üzeneteinek fogadására használt kiszolgálóhoz ettől az ismerőstől (hiba: %1$s).</string>
|
||||
@@ -1374,7 +1374,7 @@
|
||||
<string name="you_can_also_connect_by_clicking_the_link"><![CDATA[A hivatkozásra kattintva is kapcsolódhat. Ha megnyílik böngészőben, kattintson a<b>Megnyitás alkalmazásban</b> gombra.]]></string>
|
||||
<string name="your_chat_profile_will_be_sent_to_your_contact">Csevegési profilja elküldésre kerül
|
||||
\naz ismerőse számára</string>
|
||||
<string name="invite_prohibited_description">Egy olyan ismerősét próbálja meghívni, akivel inkognitó profilt osztott meg abban a csoportban, amelyben a saját fő profilja van használatban</string>
|
||||
<string name="invite_prohibited_description">Egy olyan ismerősét próbálja meghívni, akivel inkognitóprofilt osztott meg abban a csoportban, amelyben a saját fő profilja van használatban</string>
|
||||
<string name="connect_plan_you_are_already_joining_the_group_vName"><![CDATA[Csatlakozás folyamatban van a(z) <b>%1$s</b> csoporthoz.]]></string>
|
||||
<string name="onboarding_notifications_mode_off">Amikor az alkalmazás fut</string>
|
||||
<string name="alert_title_cant_invite_contacts_descr">Inkognító profilt használ ehhez a csoporthoz - fő profilja megosztásának elkerülése érdekében meghívók küldése tiltott</string>
|
||||
@@ -1442,11 +1442,11 @@
|
||||
<string name="verify_code_with_desktop">Kód ellenőrzése a számítógépen</string>
|
||||
<string name="v4_5_private_filenames_descr">Az időzóna védelme érdekében a kép-/hangfájlok UTC-t használnak.</string>
|
||||
<string name="connect_via_member_address_alert_desc">Csoporttag részére a csatlakozási kérelem eküldésre kerül.</string>
|
||||
<string name="incognito_info_share">Inkognitó profil megosztása esetén a rendszer azt a profilt fogja használni azokhoz a csoportokhoz, amelyekbe meghívást kapott.</string>
|
||||
<string name="incognito_info_share">Inkognitóprofil megosztása esetén a rendszer azt a profilt fogja használni azokhoz a csoportokhoz, amelyekbe meghívást kapott.</string>
|
||||
<string name="connect_plan_you_have_already_requested_connection_via_this_address">Már kért egy csatlakozást ezen az azonosítón keresztül!</string>
|
||||
<string name="you_can_share_this_address_with_your_contacts">Megoszthatja ezt a SimpleX azonosítót ismerőseivel, hogy kapcsolatba léphessenek vele: %s.</string>
|
||||
<string name="you_can_accept_or_reject_connection">Csatlakozási kérelmek esetében, elfogadhatja vagy elutasíthatja azokat.</string>
|
||||
<string name="v4_6_group_welcome_message_descr">Megjelenő üzenetek beállítása az új tagok számára!</string>
|
||||
<string name="v4_6_group_welcome_message_descr">Megjelenítendő üzenet beállítása az új tagok számára!</string>
|
||||
<string name="whats_new_thanks_to_users_contribute_weblate">Köszönet a felhasználóknak - hozzájárulás a Weblaten!</string>
|
||||
<string name="sending_delivery_receipts_will_be_enabled">A kézbesítési jelentés küldése minden ismerős számára engedélyezésre kerül.</string>
|
||||
<string name="network_option_protocol_timeout_per_kb">Protokoll időkorlát KB-onként</string>
|
||||
@@ -1476,7 +1476,7 @@
|
||||
<string name="relay_server_if_necessary">Az átjátszó kiszolgáló csak szükség esetén kerül használatra. Egy másik fél megfigyelheti az IP-címét.</string>
|
||||
<string name="v5_0_app_passcode_descr">Rendszerhitelesítés helyetti beállítás.</string>
|
||||
<string name="switch_receiving_address_desc">A fogadó cím egy másik kiszolgálóra változik. A címváltoztatás a feladó online állapotba kerülése után fejeződik be.</string>
|
||||
<string name="stop_chat_to_export_import_or_delete_chat_database">A csevegés leállítása a csevegő adatbázis exportálásához, importálásához, vagy törléséhez. A csevegés leállítása alatt nem tud üzeneteket fogadni és küldeni.</string>
|
||||
<string name="stop_chat_to_export_import_or_delete_chat_database">A csevegés megszakítása a csevegő adatbázis exportálásához, importálásához, vagy törléséhez. A csevegés megszakítása alatt nem tud üzeneteket fogadni és küldeni.</string>
|
||||
<string name="save_passphrase_in_keychain">Jelmondat mentése a kulcstárolóba</string>
|
||||
<string name="v4_6_chinese_spanish_interface_descr">Köszönet a felhasználóknak - hozzájárulás a Weblaten!</string>
|
||||
<string name="save_passphrase_in_settings">Jelmondat mentése a beállításokban</string>
|
||||
@@ -1522,7 +1522,7 @@
|
||||
<string name="error_showing_content">hiba a tartalom megjelenítése közben</string>
|
||||
<string name="error_showing_message">hiba az üzenet megjelenítésekor</string>
|
||||
<string name="you_can_make_address_visible_via_settings">Láthatóvá teheti SimpleX beli ismerősei számára a Beállításokban.</string>
|
||||
<string name="recent_history_is_sent_to_new_members">Legfeljebb az utolsó 100 üzenet kerüljön elküldésre az új tagok számára.</string>
|
||||
<string name="recent_history_is_sent_to_new_members">Legfeljebb az utolsó 100 üzenet kerül elküldésre az új tagok számára.</string>
|
||||
<string name="code_you_scanned_is_not_simplex_link_qr_code">A beolvasott kód nem egy SimpleX hivatkozás QR-kód.</string>
|
||||
<string name="the_text_you_pasted_is_not_a_link">A beillesztett szöveg nem egy SimpleX hivatkozás.</string>
|
||||
<string name="you_can_view_invitation_link_again">A meghívó hivatkozását újra megtekintheti a kapcsolat részleteinél.</string>
|
||||
@@ -1641,15 +1641,15 @@
|
||||
<string name="migrate_from_device_confirm_upload">Feltöltés megerősítése</string>
|
||||
<string name="migrate_from_device_error_deleting_database">Hiba az adatbázis törlésekor</string>
|
||||
<string name="v5_6_safer_groups_descr">Az adminok egy tagot mindenki számára letilthatnak.</string>
|
||||
<string name="migrate_from_device_all_data_will_be_uploaded">Minden ismerős, a beszélgetések és a fájlok biztonságosan titkosításra kerülnek, melyek részletekben feltöltődnek a beállított XFTP átjátszókra.</string>
|
||||
<string name="migrate_from_device_all_data_will_be_uploaded">Minden ismerőse, a beszélgetései és a fájljai biztonságosan titkosításra kerülnek, melyek részletekben feltöltődnek a beállított XFTP átjátszókra.</string>
|
||||
<string name="v5_6_app_data_migration">Alkalmazásadatok átköltöztetése</string>
|
||||
<string name="migrate_from_device_archiving_database">Adatbázis archiválása</string>
|
||||
<string name="migrate_from_device_cancel_migration">Az átköltöztetés megszakítása</string>
|
||||
<string name="migrate_from_device_cancel_migration">Átköltöztetés megszakítása</string>
|
||||
<string name="migrate_to_device_chat_migrated">A csevegés átköltöztetve!</string>
|
||||
<string name="migrate_from_device_check_connection_and_try_again">Ellenőrizze az internetkapcsolatot, és próbálja újra</string>
|
||||
<string name="migrate_from_device_creating_archive_link">Archív hivatkozás létrehozása</string>
|
||||
<string name="migrate_from_device_delete_database_from_device">Adatbázis törlése erről az eszközről</string>
|
||||
<string name="migrate_to_device_download_failed">Letöltés sikertelen</string>
|
||||
<string name="migrate_to_device_download_failed">Sikertelen letöltés</string>
|
||||
<string name="migrate_to_device_downloading_archive">Archívum letöltése</string>
|
||||
<string name="migrate_to_device_downloading_details">Letöltési hivatkozás részletei</string>
|
||||
<string name="v5_6_quantum_resistant_encryption_descr">Engedélyezés a közvetlen csevegésekben (BÉTA)!</string>
|
||||
@@ -1669,24 +1669,24 @@
|
||||
<string name="v5_6_picture_in_picture_calls">Kép a képben hívások</string>
|
||||
<string name="v5_6_safer_groups">Biztonságosabb csoportok</string>
|
||||
<string name="v5_6_picture_in_picture_calls_descr">Használja az alkalmazást hívás közben.</string>
|
||||
<string name="or_paste_archive_link">Vagy illessze be az archívum hivatkozását</string>
|
||||
<string name="paste_archive_link">Az archívum hivatkozásának beillesztése</string>
|
||||
<string name="or_paste_archive_link">Vagy az archívum hivatkozásának beillesztése</string>
|
||||
<string name="paste_archive_link">Archívum hivatkozásának beillesztése</string>
|
||||
<string name="migrate_to_device_repeat_download">Letöltés ismét</string>
|
||||
<string name="migrate_to_device_import_failed">Sikertelen importálás</string>
|
||||
<string name="migrate_to_device_confirm_network_settings_footer">Ellenőrizze, hogy a hálózati beállítások megfelelőek-e ehhez az eszközhöz.</string>
|
||||
<string name="migrate_from_device_chat_should_be_stopped">A folytatáshoz a csevegést le kell állítani.</string>
|
||||
<string name="migrate_from_device_stopping_chat">Csevegés leállítása</string>
|
||||
<string name="migrate_from_device_or_share_this_file_link">Vagy ossza meg biztonságosan ezt a fájl hivatkozást</string>
|
||||
<string name="migrate_from_device_chat_should_be_stopped">A folytatáshoz a csevegést meg kell szakítani.</string>
|
||||
<string name="migrate_from_device_stopping_chat">Csevegés megszakítása</string>
|
||||
<string name="migrate_from_device_or_share_this_file_link">Vagy a fájl hivítkozásának biztonságos megosztása</string>
|
||||
<string name="migrate_from_device_start_chat">Csevegés indítása</string>
|
||||
<string name="migrate_from_device_you_must_not_start_database_on_two_device"><![CDATA[<b>Nem szabad</b> ugyanazt az adatbázist használni egyszerre két eszközön.]]></string>
|
||||
<string name="migrate_from_device_confirm_you_remember_passphrase">Erősítse meg, hogy emlékszik az adatbázis jelmondatára az átköltöztetéshez.</string>
|
||||
<string name="migrate_from_device_choose_migrate_from_another_device"><![CDATA[Válassza az <i>Átköltöztetés egy másik eszközről</i> opciót az új eszközön és szkennelje be a QR-kódot.]]></string>
|
||||
<string name="migrate_from_device_finalize_migration">Az átköltöztetés véglegesítése</string>
|
||||
<string name="migrate_to_device_finalize_migration">Az átköltöztetés véglegesítése egy másik eszközön.</string>
|
||||
<string name="migrate_from_device_finalize_migration">Átköltöztetés véglegesítése</string>
|
||||
<string name="migrate_to_device_finalize_migration">Átköltöztetés véglegesítése egy másik eszközön.</string>
|
||||
<string name="migrate_to_device_database_init">Letöltés előkészítése</string>
|
||||
<string name="migrate_from_device_repeat_upload">Feltöltés ismét</string>
|
||||
<string name="migrate_from_device_bytes_uploaded">%s feltöltve</string>
|
||||
<string name="migrate_from_device_upload_failed">A feltöltés sikertelen</string>
|
||||
<string name="migrate_from_device_upload_failed">Sikertelen feltöltés</string>
|
||||
<string name="migrate_from_device_uploading_archive">Archívum feltöltése</string>
|
||||
<string name="migrate_from_device_starting_chat_on_multiple_devices_unsupported">Figyelmeztetés: a csevegés elindítása egyszerre több eszközön nem támogatott, továbbá üzenetkézbesítési hibákat okozhat</string>
|
||||
<string name="migrate_to_device_repeat_import">Importálás ismét</string>
|
||||
@@ -1706,7 +1706,7 @@
|
||||
<string name="invalid_file_link">Hibás hivatkozás</string>
|
||||
<string name="conn_event_enabled_pq">végpontok közötti kvantumrezisztens titkosítás</string>
|
||||
<string name="e2ee_info_no_pq_short">Ez a csevegés végpontok közötti titkosítással védett.</string>
|
||||
<string name="auth_open_migration_to_another_device">A költöztetési párbeszédablak megnyitása</string>
|
||||
<string name="auth_open_migration_to_another_device">Átköltöztetési párbeszédablak megnyitása</string>
|
||||
<string name="e2ee_info_pq_short">Ez a csevegés végpontok közötti kvantumrezisztens tikosítással védett.</string>
|
||||
<string name="e2ee_info_no_pq"><![CDATA[Az üzeneteket, fájlokat és hívásokat <b>végpontok közötti titkosítással</b> és sérülés utáni titkosságvédelemmel, visszautasítással és sérülés utáni helyreállítással védi.]]></string>
|
||||
<string name="e2ee_info_pq"><![CDATA[Az üzeneteket, fájlokat és hívásokat <b>végpontok közötti kvantumrezisztens titkosítással</b> és sérülés utáni titkosságvédelemmel, visszautasítással és sérülés utáni helyreállítással védi.]]></string>
|
||||
@@ -1725,7 +1725,7 @@
|
||||
<string name="network_type_no_network_connection">Nincs hálózati kapcsolat</string>
|
||||
<string name="network_type_other">További</string>
|
||||
<string name="network_type_network_wifi">Wi-Fi</string>
|
||||
<string name="forwarded_description">továbbküldve</string>
|
||||
<string name="forwarded_description">továbbított</string>
|
||||
<string name="simplex_links_not_allowed">A SimpleX hivatkozások küldése le van tiltva</string>
|
||||
<string name="group_members_can_send_simplex_links">A csoport tagjai küldhetnek SimpleX hivatkozásokat.</string>
|
||||
<string name="feature_roles_owners">tulajdonosok</string>
|
||||
@@ -1751,4 +1751,14 @@
|
||||
<string name="audio_device_wired_headphones">Fejhallgató</string>
|
||||
<string name="audio_device_speaker">Hangszóró</string>
|
||||
<string name="audio_device_earpiece">Fülhallgató</string>
|
||||
<string name="network_option_rcv_concurrency">Egyidejű fogadás</string>
|
||||
<string name="audio_device_bluetooth">Bluetooth</string>
|
||||
<string name="v5_7_quantum_resistant_encryption_descr">A közvetlen csevegésekben engedélyezve lesz!</string>
|
||||
<string name="v5_7_new_interface_languages">Litván kezelőfelület</string>
|
||||
<string name="v5_7_network_descr">Megbízhatóbb hálózati kapcsolat.</string>
|
||||
<string name="v5_7_network">Hálózatkezelés</string>
|
||||
<string name="v5_7_call_sounds_descr">Amikor egy bejövő hang- vagy videóhívás érkezik.</string>
|
||||
<string name="v5_7_forward">Üzenetek továbbítása és mentése</string>
|
||||
<string name="v5_7_call_sounds">Bejövő hívás csengőhangja</string>
|
||||
<string name="v5_7_forward_descr">Az üzenet forrása titokban marad.</string>
|
||||
</resources>
|
||||
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M182-218q59.315-55.57 134.804-89.785Q392.293-342 479.896-342q87.604 0 163.197 34.215Q718.685-273.57 778-218v-560H182v560Zm300.232-200.5q57.268 0 96.518-39.482Q618-497.465 618-554.732q0-57.268-39.482-96.518-39.483-39.25-96.75-39.25-57.268 0-96.518 39.482Q346-611.535 346-554.268q0 57.268 39.482 96.518 39.483 39.25 96.75 39.25ZM182-124.5q-22.969 0-40.234-17.266Q124.5-159.031 124.5-182v-596q0-22.969 17.266-40.234Q159.031-835.5 182-835.5h596q22.969 0 40.234 17.266Q835.5-800.969 835.5-778v596q0 22.969-17.266 40.234Q800.969-124.5 778-124.5H182Zm52.5-57.5h491v-9.111Q671.5-237.5 609.161-261 546.823-284.5 480-284.5q-67.177 0-129.339 23.5Q288.5-237.5 234.5-191.111V-182Zm247.441-294q-32.733 0-55.587-22.913-22.854-22.913-22.854-55.646 0-32.733 22.913-55.587Q449.326-633 482.059-633q32.733 0 55.587 22.913 22.854 22.913 22.854 55.646 0 32.733-22.913 55.587Q514.674-476 481.941-476ZM480-498.5Z"/></svg>
|
||||
|
After Width: | Height: | Size: 994 B |
Binary file not shown.
|
After Width: | Height: | Size: 9.9 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 10 KiB |
@@ -1753,4 +1753,9 @@
|
||||
<string name="recipients_can_not_see_who_message_from">I destinatari non possono vedere da chi proviene questo messaggio.</string>
|
||||
<string name="saved_chat_item_info_tab">Salvato</string>
|
||||
<string name="saved_from_description">salvato da %s</string>
|
||||
<string name="audio_device_bluetooth">Bluetooth</string>
|
||||
<string name="audio_device_earpiece">Auricolari</string>
|
||||
<string name="audio_device_wired_headphones">Cuffie</string>
|
||||
<string name="audio_device_speaker">Altoparlante</string>
|
||||
<string name="network_option_rcv_concurrency">Ricezione concomitanza</string>
|
||||
</resources>
|
||||
@@ -1741,4 +1741,29 @@
|
||||
<string name="files_and_media_not_allowed">ファイルとメディアは許可されていません</string>
|
||||
<string name="prohibit_sending_simplex_links">SimpleXリンクの送信禁止</string>
|
||||
<string name="simplex_links">SimpleXリンク</string>
|
||||
<string name="audio_device_bluetooth">ブルートゥース</string>
|
||||
<string name="feature_enabled_for">有効化</string>
|
||||
<string name="audio_device_earpiece">イヤホン</string>
|
||||
<string name="audio_device_wired_headphones">ヘッドホン</string>
|
||||
<string name="audio_device_speaker">スピーカー</string>
|
||||
<string name="v5_7_call_sounds">着信音</string>
|
||||
<string name="v5_7_call_sounds_descr">音声通話とビデオ通話の接続時</string>
|
||||
<string name="v5_7_quantum_resistant_encryption_descr">ダイレクトチャットが有効化されます</string>
|
||||
<string name="v5_7_network_descr">より信頼性の高いネットワーク接続</string>
|
||||
<string name="v5_7_network">ネットワーク管理</string>
|
||||
<string name="saved_description">保存済</string>
|
||||
<string name="saved_from_description">%sから保存</string>
|
||||
<string name="forwarded_chat_item_info_tab">転送済</string>
|
||||
<string name="forwarded_from_chat_item_info_title">転送元</string>
|
||||
<string name="saved_from_chat_item_info_title">保存元</string>
|
||||
<string name="forward_chat_item">転送</string>
|
||||
<string name="forwarded_description">転送済</string>
|
||||
<string name="download_file">ダウンロード</string>
|
||||
<string name="v5_7_forward">メッセージの転送と保存</string>
|
||||
<string name="forward_message">メッセージの転送</string>
|
||||
<string name="v5_7_new_interface_languages">リトアニア語UI</string>
|
||||
<string name="v5_7_forward_descr">メッセージ発信者は非公開のままです</string>
|
||||
<string name="network_option_rcv_concurrency">並列受信</string>
|
||||
<string name="recipients_can_not_see_who_message_from">受信者は発信者を特定できません。</string>
|
||||
<string name="saved_chat_item_info_tab">保存済</string>
|
||||
</resources>
|
||||
@@ -49,14 +49,14 @@
|
||||
<string name="server_connected">prisijungta</string>
|
||||
<string name="server_connecting">jungiamasi</string>
|
||||
<string name="display_name_connection_established">ryšys užmegztas</string>
|
||||
<string name="display_name_connecting">jungiasi…</string>
|
||||
<string name="display_name_connecting">jungiamasi…</string>
|
||||
<string name="connection_error">Ryšio klaida</string>
|
||||
<string name="smp_server_test_connect">Prisijungti</string>
|
||||
<string name="notification_contact_connected">Prisijungė</string>
|
||||
<string name="connect_button">Prisijungti</string>
|
||||
<string name="group_member_status_connected">prisijungė</string>
|
||||
<string name="contact_connection_pending">jungiasi…</string>
|
||||
<string name="group_connection_pending">jungiasi…</string>
|
||||
<string name="contact_connection_pending">jungiamasi…</string>
|
||||
<string name="group_connection_pending">jungiamasi…</string>
|
||||
<string name="icon_descr_server_status_connected">Prisijungta</string>
|
||||
<string name="confirm_verb">Patvirtinti</string>
|
||||
<string name="configure_ICE_servers">Konfigūruoti ICE serverius</string>
|
||||
@@ -64,7 +64,7 @@
|
||||
<string name="rcv_group_event_member_connected">prisijungė</string>
|
||||
<string name="info_row_connection">Ryšys</string>
|
||||
<string name="confirm_database_upgrades">Patvirtinti duomenų bazių naujinimus</string>
|
||||
<string name="group_member_status_connecting">jungiasi</string>
|
||||
<string name="group_member_status_connecting">jungiamasi</string>
|
||||
<string name="network_session_mode_entity">Ryšys</string>
|
||||
<string name="database_passphrase_will_be_updated">Duomenų bazės šifravimo slaptafrazė bus atnaujinta.</string>
|
||||
<string name="core_version">Branduolio versija: v%s</string>
|
||||
@@ -1127,9 +1127,9 @@
|
||||
<string name="set_password_to_export">Nustatyti slaptafrazę eksportui</string>
|
||||
<string name="delete_chat_profile_action_cannot_be_undone_warning">Šis veiksmas negali būti atšauktas - jūsų profilis, kontaktai, žinutės ir failai bus negrįžtamai prarasti.</string>
|
||||
<string name="profile_update_event_set_new_address">nustatyti naują kontakto adresą</string>
|
||||
<string name="profile_update_event_set_new_picture">nustatyti naują profilio nuotrauką</string>
|
||||
<string name="profile_update_event_set_new_picture">nustatė naują profilio nuotrauką</string>
|
||||
<string name="conn_event_disabled_pq">Standartinis visapusis šifravimas</string>
|
||||
<string name="send_receipts">Nusiuntimo kvitai</string>
|
||||
<string name="send_receipts">Pristatymo kvitai</string>
|
||||
<string name="info_row_sent_at">Nusiųsta</string>
|
||||
<string name="v4_5_italian_interface_descr">Dėkojame naudotojams - prisidėkite per Weblate!</string>
|
||||
<string name="is_not_verified">%s nėra patvirtintas</string>
|
||||
@@ -1224,7 +1224,7 @@
|
||||
<string name="share_address">Bendrinti adresą</string>
|
||||
<string name="enable_sending_recent_history">Siųsti naujiems nariams iki 100 paskutinių žinučių.</string>
|
||||
<string name="receipts_contacts_override_enabled">Kvitų siuntimas yra įjungtas %d kontaktams</string>
|
||||
<string name="receipts_groups_override_enabled">Kvitų siuntimas yra įjungtas %d grupėms</string>
|
||||
<string name="receipts_groups_override_enabled">Pristatymo kvitai yra įjungti %d grupėms</string>
|
||||
<string name="set_database_passphrase">Nustatyti duomenų slaptafrazę</string>
|
||||
<string name="set_passphrase">Nustatyti slaptafrazę</string>
|
||||
<string name="privacy_show_last_messages">Rodyti paskutines žinutes</string>
|
||||
@@ -1369,7 +1369,7 @@
|
||||
<string name="revoke_file__action">Atšaukti failą</string>
|
||||
<string name="revoke_file__title">Atšaukti failą?</string>
|
||||
<string name="icon_descr_sent_msg_status_unauthorized_send">neteisėtas siuntimas</string>
|
||||
<string name="search_or_paste_simplex_link">Ieškoti arba įklijuoti SimpleX nuorodą</string>
|
||||
<string name="search_or_paste_simplex_link">Ieškoti ar įklijuoti SimpleX nuorodą</string>
|
||||
<string name="you_need_to_allow_to_send_voice">Jūs turite leisti savo kontaktui siųsti balso žinutes, kad galėtumėte siųsti jas.</string>
|
||||
<string name="connect_via_link_or_qr_from_clipboard_or_in_person">(nuskanuokite ar įklijuokite iš iškarpinės)</string>
|
||||
<string name="you_accepted_connection">Priėmėte prisijungimą</string>
|
||||
@@ -1670,7 +1670,7 @@
|
||||
<string name="call_connection_peer_to_peer">lygiaverčiai mazgai</string>
|
||||
<string name="remove_passphrase_from_settings">Pašalinti slaptafrazę iš nustatymų?</string>
|
||||
<string name="settings_section_title_delivery_receipts">SIŲSTI PRISTATYMO KVITUS PAS</string>
|
||||
<string name="receipts_groups_override_disabled">Pristatymo kvitų siuntimas yra išjungtas %d grupėms</string>
|
||||
<string name="receipts_groups_override_disabled">Pristatymo kvitai yra išjungti %d grupėms</string>
|
||||
<string name="you_must_use_the_most_recent_version_of_database">Turite naudoti pačią naujausią pokalbių duomenų bazės versiją TIK viename įrenginyje, kitaip galite nebegauti žinučių iš kai kurių kontaktų.</string>
|
||||
<string name="new_passphrase">Nauja slaptafrazė…</string>
|
||||
<string name="rcv_group_event_member_deleted">pašalino %1$s</string>
|
||||
@@ -1722,4 +1722,46 @@
|
||||
<string name="migrate_from_device_upload_failed">Įkėlimas nepavyko</string>
|
||||
<string name="migrate_from_device_uploading_archive">Įkeliamas archyvas</string>
|
||||
<string name="migrate_from_device_try_again">Galite bandyti dar kartą.</string>
|
||||
<string name="audio_device_bluetooth">Bluetooth</string>
|
||||
<string name="feature_roles_all_members">visi nariai</string>
|
||||
<string name="audio_device_earpiece">Ausinė</string>
|
||||
<string name="audio_device_wired_headphones">Ausinės</string>
|
||||
<string name="feature_roles_admins">administratoriai</string>
|
||||
<string name="forwarded_chat_item_info_tab">Persiųsta</string>
|
||||
<string name="download_file">Atsisiųsti</string>
|
||||
<string name="forward_chat_item">Persiųsti</string>
|
||||
<string name="files_and_media_not_allowed">Failai ir medija neleidžiami</string>
|
||||
<string name="forwarded_description">persiųsta</string>
|
||||
<string name="allow_to_send_simplex_links">Leisti siųsti SimpleX nuorodas</string>
|
||||
<string name="group_members_can_send_simplex_links">Grupės nariai gali siųsti SimpleX nuorodas.</string>
|
||||
<string name="feature_enabled_for">Įjungta:</string>
|
||||
<string name="network_type_cellular">Mobilusis</string>
|
||||
<string name="v5_7_forward">Persiųskite ir išsaugokite žinutes</string>
|
||||
<string name="forwarded_from_chat_item_info_title">Persiųsta iš</string>
|
||||
<string name="forward_message">Persiųsti žinutę…</string>
|
||||
<string name="v5_7_forward_descr">Žinutės šaltinis išlieka privatus.</string>
|
||||
<string name="v5_7_network_descr">Patikimesnis tinklo ryšys.</string>
|
||||
<string name="settings_section_title_network_connection">Tinklo ryšys</string>
|
||||
<string name="v5_7_call_sounds">Garsai skambučio metu</string>
|
||||
<string name="v5_7_new_interface_languages">Lietuviškas UI</string>
|
||||
<string name="network_option_rcv_concurrency">Gavimas vienu metu</string>
|
||||
<string name="audio_device_speaker">Garsiakalbis</string>
|
||||
<string name="v5_7_network">Tinklo valdymas</string>
|
||||
<string name="saved_description">išsaugota</string>
|
||||
<string name="saved_from_description">išsaugota iš %s</string>
|
||||
<string name="saved_chat_item_info_tab">Išsaugota</string>
|
||||
<string name="voice_messages_not_allowed">Balso žinutės neleidžiamos</string>
|
||||
<string name="network_type_network_wifi">WiFi</string>
|
||||
<string name="simplex_links">SimpleX nuorodos</string>
|
||||
<string name="prohibit_sending_simplex_links">Drausti SimpleX nuorodų siuntimą</string>
|
||||
<string name="simplex_links_are_prohibited_in_group">SimpleX nuorodos yra uždraustos šioje grupėje.</string>
|
||||
<string name="feature_roles_owners">savininkai</string>
|
||||
<string name="network_type_ethernet">Laidinis internetas</string>
|
||||
<string name="network_type_other">Kitas</string>
|
||||
<string name="network_type_no_network_connection">Nėra interneto ryšio</string>
|
||||
<string name="saved_from_chat_item_info_title">Išsaugota iš</string>
|
||||
<string name="recipients_can_not_see_who_message_from">Gavėjas(-ai) negali matyti kas šią žinutę išsiuntė.</string>
|
||||
<string name="simplex_links_not_allowed">SimpleX nuorodos neleidžiamos</string>
|
||||
<string name="v5_7_call_sounds_descr">Kai jungiami garso ir vaizdo skambučiai.</string>
|
||||
<string name="v5_7_quantum_resistant_encryption_descr">Bus įjungta tiesioginiuose pokalbiuose!</string>
|
||||
</resources>
|
||||
@@ -1728,7 +1728,7 @@
|
||||
<string name="network_type_no_network_connection">Geen netwerkverbinding</string>
|
||||
<string name="network_type_other">Ander</string>
|
||||
<string name="network_type_network_wifi">Wifi</string>
|
||||
<string name="network_type_ethernet">Wired ethernet</string>
|
||||
<string name="network_type_ethernet">Bekabeld Ethernet</string>
|
||||
<string name="files_and_media_not_allowed">Bestanden en media niet toegestaan</string>
|
||||
<string name="simplex_links_not_allowed">SimpleX-links zijn niet toegestaan</string>
|
||||
<string name="voice_messages_not_allowed">Spraakberichten niet toegestaan</string>
|
||||
@@ -1751,4 +1751,17 @@
|
||||
<string name="download_file">Downloaden</string>
|
||||
<string name="forwarded_from_chat_item_info_title">Doorgestuurd vanuit</string>
|
||||
<string name="saved_chat_item_info_tab">Opgeslagen</string>
|
||||
<string name="audio_device_earpiece">Oortje</string>
|
||||
<string name="audio_device_wired_headphones">Koptelefoon</string>
|
||||
<string name="audio_device_speaker">Luidspreker</string>
|
||||
<string name="audio_device_bluetooth">Bluetooth</string>
|
||||
<string name="v5_7_forward_descr">Berichtbron blijft privé.</string>
|
||||
<string name="v5_7_network">Netwerkbeheer</string>
|
||||
<string name="v5_7_call_sounds_descr">Bij het verbinden van audio- en video-oproepen.</string>
|
||||
<string name="v5_7_quantum_resistant_encryption_descr">Wordt ingeschakeld in directe chats!</string>
|
||||
<string name="network_option_rcv_concurrency">Gelijktijdig ontvangen</string>
|
||||
<string name="v5_7_forward">Berichten doorsturen en opslaan</string>
|
||||
<string name="v5_7_call_sounds">Geluiden tijdens het bellen</string>
|
||||
<string name="v5_7_new_interface_languages">Litouwse gebruikersinterface</string>
|
||||
<string name="v5_7_network_descr">Betrouwbaardere netwerkverbinding.</string>
|
||||
</resources>
|
||||
@@ -52,7 +52,7 @@
|
||||
<string name="users_delete_all_chats_deleted">Toate conversațiile și mesajele vor fi șterse - operațiunea este definitivă!</string>
|
||||
<string name="clear_note_folder_warning">Toate mesajele vor fi șterse - operațiunea este definitivă!</string>
|
||||
<string name="allow_message_reactions_only_if">Permite reacții la mesaje doar dacă și contactul tău le permite.</string>
|
||||
<string name="allow_to_delete_messages">Permite ștergerea ireversibila a mesajelor trimise. (24 ore)</string>
|
||||
<string name="allow_to_delete_messages">Permite ștergerea ireversibilă a mesajelor trimise. (24 ore)</string>
|
||||
<string name="allow_to_send_files">Permite trimiterea de fișiere și media.</string>
|
||||
<string name="v5_1_self_destruct_passcode_descr">Toate datele sunt șterse când este introdusă.</string>
|
||||
<string name="all_group_members_will_remain_connected">Toți membrii grupului vor rămâne conectați.</string>
|
||||
@@ -69,4 +69,23 @@
|
||||
<string name="allow_to_send_disappearing">Permite trimiterea de mesaje efemere.</string>
|
||||
<string name="allow_to_send_voice">Permite trimiterea de mesaje vocale.</string>
|
||||
<string name="allow_disappearing_messages_only_if">Permite mesaje efemere doar dacă le permite contactul tău.</string>
|
||||
<string name="allow_your_contacts_to_send_disappearing_messages">Permite contactelor tale să trimită mesaje care dispar.</string>
|
||||
<string name="appearance_settings">Aspect</string>
|
||||
<string name="app_version_title">Versiunea aplicației</string>
|
||||
<string name="feature_roles_all_members">toți membrii</string>
|
||||
<string name="allow_to_send_simplex_links">Permite trimiterea linkurilor SimpleX.</string>
|
||||
<string name="feature_roles_admins">administratori</string>
|
||||
<string name="v5_6_safer_groups_descr">Administratorii pot bloca un membru pentru toți.</string>
|
||||
<string name="chat_preferences_always">întotdeauna</string>
|
||||
<string name="app_version_name">Versiunea aplicației: v%s</string>
|
||||
<string name="allow_your_contacts_irreversibly_delete">Permite contactelor tale să șteargă ireversibil mesajele trimise. (24 de ore)</string>
|
||||
<string name="allow_your_contacts_adding_message_reactions">Permite contactelor tale să adauge reacții la mesaje.</string>
|
||||
<string name="allow_your_contacts_to_call">Permite contactelor tale să te apeleze.</string>
|
||||
<string name="allow_your_contacts_to_send_voice_messages">Permite contactelor tale să trimită mesaje vocale.</string>
|
||||
<string name="all_your_contacts_will_remain_connected">Toate contactele tale vor rămâne conectate.</string>
|
||||
<string name="cancel_verb">Anulare</string>
|
||||
<string name="camera_not_available">Camera indisponibilă</string>
|
||||
<string name="permissions_camera_and_record_audio">Camera și microfon</string>
|
||||
<string name="migrate_from_device_archive_will_be_deleted"><![CDATA[<b>Atenție</b>: arhiva va fi ștearsă.]]></string>
|
||||
<string name="icon_descr_cancel_file_preview">Anulează previzualizarea fișierului</string>
|
||||
</resources>
|
||||
@@ -1813,4 +1813,42 @@
|
||||
<string name="permissions_grant">Дать разрешение для совершения звонков</string>
|
||||
<string name="permissions_record_audio">Микрофон</string>
|
||||
<string name="permissions_open_settings">Открыть настройки</string>
|
||||
<string name="audio_device_bluetooth">Bluetooth</string>
|
||||
<string name="network_option_rcv_concurrency">Одновременный приём</string>
|
||||
<string name="audio_device_earpiece">Верхний динамик</string>
|
||||
<string name="audio_device_wired_headphones">Наушники</string>
|
||||
<string name="audio_device_speaker">Громкоговоритель</string>
|
||||
<string name="v5_7_call_sounds">Звуки во время звонков</string>
|
||||
<string name="v5_7_network_descr">Более надежное соединение с сетью.</string>
|
||||
<string name="v5_7_network">Статус сети</string>
|
||||
<string name="saved_description">сохранено</string>
|
||||
<string name="saved_from_description">сохранено из %s</string>
|
||||
<string name="forwarded_chat_item_info_tab">Переслано</string>
|
||||
<string name="forwarded_from_chat_item_info_title">Переслано из</string>
|
||||
<string name="recipients_can_not_see_who_message_from">Получатели не видят от кого это сообщение.</string>
|
||||
<string name="forwarded_description">переслано</string>
|
||||
<string name="files_and_media_not_allowed">Файлы и медиа не разрешены</string>
|
||||
<string name="simplex_links_not_allowed">Ссылки SimpleX не разрешены</string>
|
||||
<string name="voice_messages_not_allowed">Голосовые сообщения не разрешены</string>
|
||||
<string name="simplex_links">Ссылки SimpleX</string>
|
||||
<string name="allow_to_send_simplex_links">Разрешить отправлять ссылки SimpleX.</string>
|
||||
<string name="prohibit_sending_simplex_links">Запретить отправку ссылок SimpleX</string>
|
||||
<string name="group_members_can_send_simplex_links">Члены группы могут отправлять ссылки SimpleX</string>
|
||||
<string name="feature_roles_admins">админы</string>
|
||||
<string name="feature_roles_all_members">все члены</string>
|
||||
<string name="feature_roles_owners">владельцы</string>
|
||||
<string name="download_file">Загрузить</string>
|
||||
<string name="saved_chat_item_info_tab">Сохранено</string>
|
||||
<string name="saved_from_chat_item_info_title">Сохранено из</string>
|
||||
<string name="feature_enabled_for">Включено для</string>
|
||||
<string name="forward_chat_item">Переслать</string>
|
||||
<string name="v5_7_forward">Переслать и сохранить сообщение</string>
|
||||
<string name="simplex_links_are_prohibited_in_group">Ссылки SimpleX запрещены в этой группе.</string>
|
||||
<string name="forward_message">Переслать сообщение…</string>
|
||||
<string name="v5_7_new_interface_languages">Литовский интерфейс</string>
|
||||
<string name="v5_7_forward_descr">Источник сообщения остаётся конфиденциальным.</string>
|
||||
<string name="v5_7_call_sounds_descr">Во время соединения аудио и видео звонков.</string>
|
||||
<string name="v5_7_shape_profile_images">Форма картинок профилей</string>
|
||||
<string name="v5_7_shape_profile_images_descr">Квадрат, круг и все, что между ними.</string>
|
||||
<string name="v5_7_quantum_resistant_encryption_descr">Будет включено в прямых разговорах!</string>
|
||||
</resources>
|
||||
@@ -1725,4 +1725,46 @@
|
||||
<string name="permissions_camera_and_record_audio">Kamera ve mikrofon</string>
|
||||
<string name="error_showing_desktop_notification">Bildirim gösterilirken hata oluştu, geliştiricilerle irtibata geçin.</string>
|
||||
<string name="permissions_grant_in_settings">Ayarlarda izin verin</string>
|
||||
<string name="audio_device_bluetooth">Bluetooth</string>
|
||||
<string name="feature_roles_owners">sahipler</string>
|
||||
<string name="prohibit_sending_simplex_links">SimpleX bağlantısı gönderimini yasakla</string>
|
||||
<string name="network_option_rcv_concurrency">Eşzamanlılık alınıyor</string>
|
||||
<string name="simplex_links">SimpleX bağlantıları</string>
|
||||
<string name="simplex_links_are_prohibited_in_group">SimpleX bağlantıları bu grupta yasaklandı</string>
|
||||
<string name="audio_device_earpiece">Kulaklık</string>
|
||||
<string name="audio_device_speaker">Hoparlör</string>
|
||||
<string name="audio_device_wired_headphones">Kulaklıklar</string>
|
||||
<string name="v5_7_quantum_resistant_encryption_descr">Doğrudan sohbetlerde etkinleştirilecektir!</string>
|
||||
<string name="v5_7_network">Ağ yönetimi</string>
|
||||
<string name="v5_7_new_interface_languages">Litvanya Kullanıcı Arayüzü</string>
|
||||
<string name="network_type_other">Diğer</string>
|
||||
<string name="saved_description">kaydedildi</string>
|
||||
<string name="saved_from_description">%s tarafından kaydedildi</string>
|
||||
<string name="forwarded_chat_item_info_tab">İletildi</string>
|
||||
<string name="saved_chat_item_info_tab">Kaydedildi</string>
|
||||
<string name="download_file">İndir</string>
|
||||
<string name="forwarded_from_chat_item_info_title">Şuradan iletildi</string>
|
||||
<string name="forward_message">Mesaj ilet…</string>
|
||||
<string name="recipients_can_not_see_who_message_from">Alıcı(lar) bu mesajın kimden geldiğini göremez.</string>
|
||||
<string name="simplex_links_not_allowed">SimpleX bağlantılarına izin verilmiyor</string>
|
||||
<string name="files_and_media_not_allowed">Dosyalar ve medyaya izin verilmiyor</string>
|
||||
<string name="voice_messages_not_allowed">Sesli mesajlara izin verilmiyor</string>
|
||||
<string name="group_members_can_send_simplex_links">Grup üyeleri SimpleX bağlantıları gönderebilir.</string>
|
||||
<string name="forwarded_description">iletildi</string>
|
||||
<string name="settings_section_title_network_connection">Ağ bağlantısı</string>
|
||||
<string name="allow_to_send_simplex_links">SimpleX bağlantıları göndermesine izin ver.</string>
|
||||
<string name="network_type_no_network_connection">Ağ bağlantısı yok</string>
|
||||
<string name="forward_chat_item">İlet</string>
|
||||
<string name="v5_7_forward">Mesajları ilet ve kaydet</string>
|
||||
<string name="feature_roles_admins">yöneticiler</string>
|
||||
<string name="network_type_cellular">Hücresel Veri</string>
|
||||
<string name="feature_enabled_for">Şunlar için etkinleştirildi</string>
|
||||
<string name="feature_roles_all_members">bütün üyeler</string>
|
||||
<string name="v5_7_call_sounds">Arama içi sesler</string>
|
||||
<string name="saved_from_chat_item_info_title">Tarafından kaydedildi</string>
|
||||
<string name="v5_7_forward_descr">Mesaj kaynağı gizli kalır.</string>
|
||||
<string name="v5_7_network_descr">Daha güvenilir ağ bağlantısı.</string>
|
||||
<string name="network_type_network_wifi">WiFi</string>
|
||||
<string name="v5_7_call_sounds_descr">Sesli ve görüntülü aramalara bağlanırken.</string>
|
||||
<string name="network_type_ethernet">Kablolu ethernet</string>
|
||||
</resources>
|
||||
@@ -1753,4 +1753,17 @@
|
||||
<string name="saved_from_description">保存自%s</string>
|
||||
<string name="forwarded_chat_item_info_tab">已转发</string>
|
||||
<string name="forwarded_from_chat_item_info_title">转发自</string>
|
||||
<string name="audio_device_bluetooth">蓝牙</string>
|
||||
<string name="network_option_rcv_concurrency">并行接收</string>
|
||||
<string name="audio_device_earpiece">耳机</string>
|
||||
<string name="audio_device_wired_headphones">头戴式耳机</string>
|
||||
<string name="audio_device_speaker">扬声器</string>
|
||||
<string name="v5_7_call_sounds">通话声音</string>
|
||||
<string name="v5_7_forward_descr">消息来源保持私密。</string>
|
||||
<string name="v5_7_network_descr">更可靠的网络连接。</string>
|
||||
<string name="v5_7_network">网络管理</string>
|
||||
<string name="v5_7_forward">转发并保存消息</string>
|
||||
<string name="v5_7_new_interface_languages">立陶宛语用户界面</string>
|
||||
<string name="v5_7_call_sounds_descr">连接音频和视频通话时。</string>
|
||||
<string name="v5_7_quantum_resistant_encryption_descr">将在私聊中启用!</string>
|
||||
</resources>
|
||||
+1
-1
@@ -60,7 +60,7 @@ actual object AudioPlayer: AudioPlayerInterface {
|
||||
}.onFailure {
|
||||
Log.e(TAG, it.stackTraceToString())
|
||||
fileSource.deleteTmpFile()
|
||||
AlertManager.shared.showAlertMsg(generalGetString(MR.strings.unknown_error), it.message)
|
||||
AlertManager.shared.showAlertMsg(generalGetString(MR.strings.unknown_error), it.stackTraceToString())
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
+1
@@ -32,6 +32,7 @@ actual fun shareFile(text: String, fileSource: CryptoFile) {
|
||||
showToast(generalGetString(MR.strings.file_saved))
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Unable to decrypt crypto file: " + e.stackTraceToString())
|
||||
AlertManager.shared.showAlertMsg(title = generalGetString(MR.strings.error), text = e.stackTraceToString())
|
||||
}
|
||||
} else {
|
||||
copyFileToFile(File(absolutePath), to) {}
|
||||
|
||||
+1
-1
@@ -70,7 +70,7 @@ actual class VideoPlayer actual constructor(
|
||||
}
|
||||
}.onFailure {
|
||||
Log.e(TAG, it.stackTraceToString())
|
||||
AlertManager.shared.showAlertMsg(generalGetString(MR.strings.unknown_error), it.message)
|
||||
AlertManager.shared.showAlertMsg(generalGetString(MR.strings.unknown_error), it.stackTraceToString())
|
||||
brokenVideo.value = true
|
||||
return false
|
||||
}
|
||||
|
||||
+1
@@ -66,6 +66,7 @@ actual fun copyItemToClipboard(cItem: ChatItem, clipboard: ClipboardManager) = w
|
||||
decryptCryptoFile(getAppFilePath(fileSource.filePath), fileSource.cryptoArgs ?: return@withLongRunningApi, tmpFile.absolutePath)
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Unable to decrypt crypto file: " + e.stackTraceToString())
|
||||
AlertManager.shared.showAlertMsg(title = generalGetString(MR.strings.error), text = e.stackTraceToString())
|
||||
return@withLongRunningApi
|
||||
}
|
||||
tmpFile.absolutePath
|
||||
|
||||
-1
@@ -15,7 +15,6 @@ import chat.simplex.common.simplexWindowState
|
||||
import kotlinx.coroutines.delay
|
||||
import java.io.ByteArrayInputStream
|
||||
import java.io.File
|
||||
import java.io.*
|
||||
import java.net.URI
|
||||
import javax.imageio.ImageIO
|
||||
import kotlin.io.encoding.Base64
|
||||
|
||||
+3
@@ -62,6 +62,9 @@ fun AppearanceScope.AppearanceLayout(
|
||||
}
|
||||
}
|
||||
}
|
||||
SectionDividerSpaced(maxTopPadding = true)
|
||||
ProfileImageSection()
|
||||
|
||||
SectionDividerSpaced(maxTopPadding = true)
|
||||
ThemesSection(systemDarkTheme, showSettingsModal, editColor)
|
||||
SectionBottomSpacer()
|
||||
|
||||
Reference in New Issue
Block a user