diff --git a/apps/ios/Shared/Views/Call/ActiveCallView.swift b/apps/ios/Shared/Views/Call/ActiveCallView.swift
index cffdefaaa2..751eba80ae 100644
--- a/apps/ios/Shared/Views/Call/ActiveCallView.swift
+++ b/apps/ios/Shared/Views/Call/ActiveCallView.swift
@@ -277,9 +277,7 @@ struct ActiveCallOverlay: View {
.foregroundColor(.white.opacity(0.8))
}
VStack {
- ProfileImage(imageStr: call.contact.profile.image)
- .scaledToFit()
- .frame(width: 192, height: 192)
+ ProfileImage(imageStr: call.contact.profile.image, size: 192)
audioCallInfoView(call)
}
.foregroundColor(.white)
diff --git a/apps/ios/Shared/Views/Call/IncomingCallView.swift b/apps/ios/Shared/Views/Call/IncomingCallView.swift
index c2d5dabd48..4647995b28 100644
--- a/apps/ios/Shared/Views/Call/IncomingCallView.swift
+++ b/apps/ios/Shared/Views/Call/IncomingCallView.swift
@@ -30,8 +30,7 @@ struct IncomingCallView: View {
VStack(alignment: .leading, spacing: 6) {
HStack {
if m.users.count > 1 {
- ProfileImage(imageStr: invitation.user.image, color: .white)
- .frame(width: 24, height: 24)
+ ProfileImage(imageStr: invitation.user.image, size: 24, color: .white)
}
Image(systemName: invitation.callType.media == .video ? "video.fill" : "phone.fill").foregroundColor(.green)
Text(invitation.callTypeText)
diff --git a/apps/ios/Shared/Views/Chat/ChatInfoToolbar.swift b/apps/ios/Shared/Views/Chat/ChatInfoToolbar.swift
index d0f4b6e55a..140b609902 100644
--- a/apps/ios/Shared/Views/Chat/ChatInfoToolbar.swift
+++ b/apps/ios/Shared/Views/Chat/ChatInfoToolbar.swift
@@ -25,11 +25,11 @@ struct ChatInfoToolbar: View {
}
ChatInfoImage(
chat: chat,
+ size: imageSize,
color: colorScheme == .dark
? chatImageColorDark
: chatImageColorLight
)
- .frame(width: imageSize, height: imageSize)
.padding(.trailing, 4)
VStack {
let t = Text(cInfo.displayName).font(.headline)
diff --git a/apps/ios/Shared/Views/Chat/ChatInfoView.swift b/apps/ios/Shared/Views/Chat/ChatInfoView.swift
index 56e7cec697..55e84f20d3 100644
--- a/apps/ios/Shared/Views/Chat/ChatInfoView.swift
+++ b/apps/ios/Shared/Views/Chat/ChatInfoView.swift
@@ -271,8 +271,7 @@ struct ChatInfoView: View {
private func contactInfoHeader() -> some View {
VStack {
let cInfo = chat.chatInfo
- ChatInfoImage(chat: chat, color: Color(uiColor: .tertiarySystemFill))
- .frame(width: 192, height: 192)
+ ChatInfoImage(chat: chat, size: 192, color: Color(uiColor: .tertiarySystemFill))
.padding(.top, 12)
.padding()
if contact.verified {
diff --git a/apps/ios/Shared/Views/Chat/ChatItem/CIGroupInvitationView.swift b/apps/ios/Shared/Views/Chat/ChatItem/CIGroupInvitationView.swift
index 72013877ca..44bc579623 100644
--- a/apps/ios/Shared/Views/Chat/ChatItem/CIGroupInvitationView.swift
+++ b/apps/ios/Shared/Views/Chat/ChatItem/CIGroupInvitationView.swift
@@ -100,9 +100,9 @@ struct CIGroupInvitationView: View {
ProfileImage(
imageStr: groupInvitation.groupProfile.image,
iconName: "person.2.circle.fill",
+ size: 44,
color: color
)
- .frame(width: 44, height: 44)
.padding(.trailing, 4)
VStack(alignment: .leading) {
let p = groupInvitation.groupProfile
diff --git a/apps/ios/Shared/Views/Chat/ChatItemForwardingView.swift b/apps/ios/Shared/Views/Chat/ChatItemForwardingView.swift
index f575b6f9a2..7237711a2a 100644
--- a/apps/ios/Shared/Views/Chat/ChatItemForwardingView.swift
+++ b/apps/ios/Shared/Views/Chat/ChatItemForwardingView.swift
@@ -123,8 +123,7 @@ struct ChatItemForwardingView: View {
}
} label: {
HStack {
- ChatInfoImage(chat: chat)
- .frame(width: 30, height: 30)
+ ChatInfoImage(chat: chat, size: 30)
.padding(.trailing, 2)
Text(chat.chatInfo.chatViewName)
.foregroundColor(.primary)
diff --git a/apps/ios/Shared/Views/Chat/ChatItemInfoView.swift b/apps/ios/Shared/Views/Chat/ChatItemInfoView.swift
index 0d1f99f3bd..19aa261396 100644
--- a/apps/ios/Shared/Views/Chat/ChatItemInfoView.swift
+++ b/apps/ios/Shared/Views/Chat/ChatItemInfoView.swift
@@ -334,8 +334,7 @@ struct ChatItemInfoView: View {
@ViewBuilder private func forwardedFromSender(_ forwardedFromItem: AChatItem) -> some View {
HStack {
- ChatInfoImage(chat: Chat(chatInfo: forwardedFromItem.chatInfo))
- .frame(width: 48, height: 48)
+ ChatInfoImage(chat: Chat(chatInfo: forwardedFromItem.chatInfo), size: 48)
.padding(.trailing, 6)
if forwardedFromItem.chatItem.chatDir.sent {
@@ -405,8 +404,7 @@ struct ChatItemInfoView: View {
private func memberDeliveryStatusView(_ member: GroupMember, _ status: CIStatus) -> some View {
HStack{
- ProfileImage(imageStr: member.image)
- .frame(width: 30, height: 30)
+ ProfileImage(imageStr: member.image, size: 30)
.padding(.trailing, 2)
Text(member.chatViewName)
.lineLimit(1)
diff --git a/apps/ios/Shared/Views/Chat/ChatView.swift b/apps/ios/Shared/Views/Chat/ChatView.swift
index 45819851f0..97ffd61116 100644
--- a/apps/ios/Shared/Views/Chat/ChatView.swift
+++ b/apps/ios/Shared/Views/Chat/ChatView.swift
@@ -597,8 +597,7 @@ struct ChatView: View {
.padding(.top, 7)
}
HStack(alignment: .top, spacing: 8) {
- ProfileImage(imageStr: member.memberProfile.image)
- .frame(width: memberImageSize, height: memberImageSize)
+ ProfileImage(imageStr: member.memberProfile.image, size: memberImageSize)
.onTapGesture {
if chatView.membersLoaded {
selectedMember = m.getGroupMember(member.groupMemberId)
diff --git a/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift b/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift
index b89c006c61..ed2afb91b3 100644
--- a/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift
+++ b/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift
@@ -194,8 +194,7 @@ struct AddGroupMembersViewCommon: View {
}
} label: {
HStack{
- ProfileImage(imageStr: contact.image)
- .frame(width: 30, height: 30)
+ ProfileImage(imageStr: contact.image, size: 30)
.padding(.trailing, 2)
Text(ChatInfo.direct(contact: contact).chatViewName)
.foregroundColor(prohibitedToInviteIncognito ? .secondary : .primary)
diff --git a/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift b/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift
index c6509c9502..c22f3f0fed 100644
--- a/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift
+++ b/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift
@@ -172,8 +172,7 @@ struct GroupChatInfoView: View {
private func groupInfoHeader() -> some View {
VStack {
let cInfo = chat.chatInfo
- ChatInfoImage(chat: chat, color: Color(uiColor: .tertiarySystemFill))
- .frame(width: 192, height: 192)
+ ChatInfoImage(chat: chat, size: 192, color: Color(uiColor: .tertiarySystemFill))
.padding(.top, 12)
.padding()
Text(cInfo.displayName)
@@ -217,8 +216,7 @@ struct GroupChatInfoView: View {
var body: some View {
let member = groupMember.wrapped
let v = HStack{
- ProfileImage(imageStr: member.image)
- .frame(width: 38, height: 38)
+ ProfileImage(imageStr: member.image, size: 38)
.padding(.trailing, 2)
// TODO server connection status
VStack(alignment: .leading) {
diff --git a/apps/ios/Shared/Views/Chat/Group/GroupMemberInfoView.swift b/apps/ios/Shared/Views/Chat/Group/GroupMemberInfoView.swift
index 766aaf6577..a24608b7e7 100644
--- a/apps/ios/Shared/Views/Chat/Group/GroupMemberInfoView.swift
+++ b/apps/ios/Shared/Views/Chat/Group/GroupMemberInfoView.swift
@@ -305,8 +305,7 @@ struct GroupMemberInfoView: View {
private func groupMemberInfoHeader(_ mem: GroupMember) -> some View {
VStack {
- ProfileImage(imageStr: mem.image, color: Color(uiColor: .tertiarySystemFill))
- .frame(width: 192, height: 192)
+ ProfileImage(imageStr: mem.image, size: 192, color: Color(uiColor: .tertiarySystemFill))
.padding(.top, 12)
.padding()
if mem.verified {
diff --git a/apps/ios/Shared/Views/ChatList/ChatListView.swift b/apps/ios/Shared/Views/ChatList/ChatListView.swift
index 38aabdc21d..6bf63bb2e3 100644
--- a/apps/ios/Shared/Views/ChatList/ChatListView.swift
+++ b/apps/ios/Shared/Views/ChatList/ChatListView.swift
@@ -92,8 +92,7 @@ struct ChatListView: View {
ToolbarItem(placement: .navigationBarLeading) {
let user = chatModel.currentUser ?? User.sampleData
ZStack(alignment: .topTrailing) {
- ProfileImage(imageStr: user.image, color: Color(uiColor: .quaternaryLabel))
- .frame(width: 32, height: 32)
+ ProfileImage(imageStr: user.image, size: 32, color: Color(uiColor: .quaternaryLabel))
.padding(.trailing, 4)
let allRead = chatModel.users
.filter { u in !u.user.activeUser && !u.user.hidden }
diff --git a/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift b/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift
index 8bfc8fec03..fe8fd8b28e 100644
--- a/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift
+++ b/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift
@@ -23,8 +23,7 @@ struct ChatPreviewView: View {
let cItem = chat.chatItems.last
return HStack(spacing: 8) {
ZStack(alignment: .bottomTrailing) {
- ChatInfoImage(chat: chat)
- .frame(width: 63, height: 63)
+ ChatInfoImage(chat: chat, size: 63)
chatPreviewImageOverlayIcon()
.padding([.bottom, .trailing], 1)
}
diff --git a/apps/ios/Shared/Views/ChatList/ContactRequestView.swift b/apps/ios/Shared/Views/ChatList/ContactRequestView.swift
index c5c062a6ec..dacf51a5e8 100644
--- a/apps/ios/Shared/Views/ChatList/ContactRequestView.swift
+++ b/apps/ios/Shared/Views/ChatList/ContactRequestView.swift
@@ -16,8 +16,7 @@ struct ContactRequestView: View {
var body: some View {
HStack(spacing: 8) {
- ChatInfoImage(chat: chat)
- .frame(width: 63, height: 63)
+ ChatInfoImage(chat: chat, size: 63)
.padding(.leading, 4)
VStack(alignment: .leading, spacing: 0) {
HStack(alignment: .top) {
diff --git a/apps/ios/Shared/Views/ChatList/UserPicker.swift b/apps/ios/Shared/Views/ChatList/UserPicker.swift
index 922fc84e53..a615f9c118 100644
--- a/apps/ios/Shared/Views/ChatList/UserPicker.swift
+++ b/apps/ios/Shared/Views/ChatList/UserPicker.swift
@@ -127,8 +127,7 @@ struct UserPicker: View {
}
}, label: {
HStack(spacing: 0) {
- ProfileImage(imageStr: user.image, color: Color(uiColor: .tertiarySystemFill))
- .frame(width: 44, height: 44)
+ ProfileImage(imageStr: user.image, size: 44, color: Color(uiColor: .tertiarySystemFill))
.padding(.trailing, 12)
Text(user.chatViewName)
.fontWeight(user.activeUser ? .medium : .regular)
diff --git a/apps/ios/Shared/Views/Helpers/ChatInfoImage.swift b/apps/ios/Shared/Views/Helpers/ChatInfoImage.swift
index e253cdd72c..0180b066ab 100644
--- a/apps/ios/Shared/Views/Helpers/ChatInfoImage.swift
+++ b/apps/ios/Shared/Views/Helpers/ChatInfoImage.swift
@@ -12,6 +12,7 @@ import SimpleXChat
struct ChatInfoImage: View {
@Environment(\.colorScheme) var colorScheme
@ObservedObject var chat: Chat
+ var size: CGFloat
var color = Color(uiColor: .tertiarySystemGroupedBackground)
var body: some View {
@@ -28,6 +29,7 @@ struct ChatInfoImage: View {
return ProfileImage(
imageStr: chat.chatInfo.image,
iconName: iconName,
+ size: size,
color: iconColor
)
}
@@ -36,8 +38,9 @@ struct ChatInfoImage: View {
struct ChatInfoImage_Previews: PreviewProvider {
static var previews: some View {
ChatInfoImage(
- chat: Chat(chatInfo: ChatInfo.sampleData.direct, chatItems: [])
- , color: Color(red: 0.9, green: 0.9, blue: 0.9)
+ chat: Chat(chatInfo: ChatInfo.sampleData.direct, chatItems: []),
+ size: 63,
+ color: Color(red: 0.9, green: 0.9, blue: 0.9)
)
.previewLayout(.fixed(width: 63, height: 63))
}
diff --git a/apps/ios/Shared/Views/Helpers/ProfileImage.swift b/apps/ios/Shared/Views/Helpers/ProfileImage.swift
index cc4f09ae3b..96f0152d9e 100644
--- a/apps/ios/Shared/Views/Helpers/ProfileImage.swift
+++ b/apps/ios/Shared/Views/Helpers/ProfileImage.swift
@@ -9,29 +9,43 @@
import SwiftUI
import SimpleXChat
+let defaultProfileImageCorner = 22.5
+
struct ProfileImage: View {
var imageStr: String? = nil
var iconName: String = "person.crop.circle.fill"
+ var size: CGFloat
var color = Color(uiColor: .tertiarySystemGroupedBackground)
-
+ @AppStorage(DEFAULT_PROFILE_IMAGE_CORNER_RADIUS) private var radius = defaultProfileImageCorner
+
var body: some View {
if let image = imageStr,
let data = Data(base64Encoded: dropImagePrefix(image)),
let uiImage = UIImage(data: data) {
- Image(uiImage: uiImage)
- .resizable()
- .clipShape(Circle())
+ clipProfileImage(Image(uiImage: uiImage), size: size, radius: radius)
} else {
Image(systemName: iconName)
.resizable()
.foregroundColor(color)
+ .frame(width: size, height: size)
}
}
}
+@ViewBuilder func clipProfileImage(_ img: Image, size: CGFloat, radius: Double) -> some View {
+ let v = img.resizable().frame(width: size, height: size)
+ if radius <= 0 {
+ v.clipShape(Rectangle())
+ } else if radius >= 50 {
+ v.clipShape(Circle())
+ } else {
+ v.clipShape(RoundedRectangle(cornerRadius: size * radius / 100, style: .continuous))
+ }
+}
+
struct ProfileImage_Previews: PreviewProvider {
static var previews: some View {
- ProfileImage(imageStr: "data:image/png;base64,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")
+ ProfileImage(imageStr: "data:image/png;base64,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", size: 63)
.previewLayout(.fixed(width: 63, height: 63))
.background(.black)
}
diff --git a/apps/ios/Shared/Views/NewChat/AddGroupView.swift b/apps/ios/Shared/Views/NewChat/AddGroupView.swift
index 3f3623033e..4b272f4caa 100644
--- a/apps/ios/Shared/Views/NewChat/AddGroupView.swift
+++ b/apps/ios/Shared/Views/NewChat/AddGroupView.swift
@@ -70,9 +70,7 @@ struct AddGroupView: View {
ZStack(alignment: .center) {
ZStack(alignment: .topTrailing) {
- ProfileImage(imageStr: profile.image, color: Color(uiColor: .secondarySystemGroupedBackground))
- .aspectRatio(1, contentMode: .fit)
- .frame(maxWidth: 128, maxHeight: 128)
+ ProfileImage(imageStr: profile.image, size: 128, color: Color(uiColor: .secondarySystemGroupedBackground))
if profile.image != nil {
Button {
profile.image = nil
diff --git a/apps/ios/Shared/Views/Onboarding/WhatsNewView.swift b/apps/ios/Shared/Views/Onboarding/WhatsNewView.swift
index edb3dc17d3..6886c18447 100644
--- a/apps/ios/Shared/Views/Onboarding/WhatsNewView.swift
+++ b/apps/ios/Shared/Views/Onboarding/WhatsNewView.swift
@@ -394,6 +394,11 @@ private let versionDescriptions: [VersionDescription] = [
title: "In-call sounds",
description: "When connecting audio and video calls."
),
+ FeatureDescription(
+ icon: "person.crop.square",
+ title: "Shape profile images",
+ description: "Square, circle, or anything in between."
+ ),
FeatureDescription(
icon: "antenna.radiowaves.left.and.right",
title: "Network management",
diff --git a/apps/ios/Shared/Views/UserSettings/AppearanceSettings.swift b/apps/ios/Shared/Views/UserSettings/AppearanceSettings.swift
index 1f648b09dc..b91d2c9369 100644
--- a/apps/ios/Shared/Views/UserSettings/AppearanceSettings.swift
+++ b/apps/ios/Shared/Views/UserSettings/AppearanceSettings.swift
@@ -17,11 +17,14 @@ let interfaceStyleNames: [LocalizedStringKey] = ["System", "Light", "Dark"]
let appSettingsURL = URL(string: UIApplication.openSettingsURLString)!
struct AppearanceSettings: View {
+ @EnvironmentObject var m: ChatModel
+ @Environment(\.colorScheme) var colorScheme
@EnvironmentObject var sceneDelegate: SceneDelegate
@State private var iconLightTapped = false
@State private var iconDarkTapped = false
@State private var userInterfaceStyle = getUserInterfaceStyleDefault()
@State private var uiTintColor = getUIAccentColorDefault()
+ @AppStorage(DEFAULT_PROFILE_IMAGE_CORNER_RADIUS) private var profileImageCornerRadius = defaultProfileImageCorner
var body: some View {
VStack{
@@ -44,6 +47,23 @@ struct AppearanceSettings: View {
}
}
+ Section("Profile images") {
+ HStack(spacing: 16) {
+ if let img = m.currentUser?.image, img != "" {
+ ProfileImage(imageStr: img, size: 60)
+ } else {
+ clipProfileImage(Image(colorScheme == .light ? "icon-dark" : "icon-light"), size: 60, radius: profileImageCornerRadius)
+ }
+
+ Slider(
+ value: $profileImageCornerRadius,
+ in: 0...50,
+ step: 2.5
+ )
+ }
+ .foregroundColor(.secondary)
+ }
+
Section {
Picker("Theme", selection: $userInterfaceStyle) {
ForEach(interfaceStyles, id: \.self) { style in
@@ -93,7 +113,7 @@ struct AppearanceSettings: View {
}
._onButtonGesture { tapped.wrappedValue = $0 } perform: {}
.overlay(tapped.wrappedValue ? Color.secondary : Color.clear)
- .cornerRadius(20)
+ .cornerRadius(13.5)
}
}
diff --git a/apps/ios/Shared/Views/UserSettings/SettingsView.swift b/apps/ios/Shared/Views/UserSettings/SettingsView.swift
index 1799d8136a..e532448a90 100644
--- a/apps/ios/Shared/Views/UserSettings/SettingsView.swift
+++ b/apps/ios/Shared/Views/UserSettings/SettingsView.swift
@@ -45,6 +45,7 @@ let DEFAULT_ACCENT_COLOR_RED = "accentColorRed"
let DEFAULT_ACCENT_COLOR_GREEN = "accentColorGreen"
let DEFAULT_ACCENT_COLOR_BLUE = "accentColorBlue"
let DEFAULT_USER_INTERFACE_STYLE = "userInterfaceStyle"
+let DEFAULT_PROFILE_IMAGE_CORNER_RADIUS = "profileImageCornerRadius"
let DEFAULT_CONNECT_VIA_LINK_TAB = "connectViaLinkTab"
let DEFAULT_LIVE_MESSAGE_ALERT_SHOWN = "liveMessageAlertShown"
let DEFAULT_SHOW_HIDDEN_PROFILES_NOTICE = "showHiddenProfilesNotice"
@@ -87,6 +88,7 @@ let appDefaults: [String: Any] = [
DEFAULT_ACCENT_COLOR_GREEN: 0.533,
DEFAULT_ACCENT_COLOR_BLUE: 1.000,
DEFAULT_USER_INTERFACE_STYLE: 0,
+ DEFAULT_PROFILE_IMAGE_CORNER_RADIUS: defaultProfileImageCorner,
DEFAULT_CONNECT_VIA_LINK_TAB: ConnectViaLinkTab.scan.rawValue,
DEFAULT_LIVE_MESSAGE_ALERT_SHOWN: false,
DEFAULT_SHOW_HIDDEN_PROFILES_NOTICE: true,
@@ -425,8 +427,7 @@ struct ProfilePreview: View {
var body: some View {
HStack {
- ProfileImage(imageStr: profileOf.image, color: color)
- .frame(width: 44, height: 44)
+ ProfileImage(imageStr: profileOf.image, size: 44, color: color)
.padding(.trailing, 6)
.padding(.vertical, 6)
VStack(alignment: .leading) {
diff --git a/apps/ios/Shared/Views/UserSettings/UserProfile.swift b/apps/ios/Shared/Views/UserSettings/UserProfile.swift
index e5ec23178d..198fd495bd 100644
--- a/apps/ios/Shared/Views/UserSettings/UserProfile.swift
+++ b/apps/ios/Shared/Views/UserSettings/UserProfile.swift
@@ -188,9 +188,7 @@ struct UserProfile: View {
}
func profileImageView(_ imageStr: String?) -> some View {
- ProfileImage(imageStr: imageStr)
- .aspectRatio(1, contentMode: .fit)
- .frame(maxWidth: 192, maxHeight: 192)
+ ProfileImage(imageStr: imageStr, size: 192)
}
func editImageButton(action: @escaping () -> Void) -> some View {
diff --git a/apps/ios/Shared/Views/UserSettings/UserProfilesView.swift b/apps/ios/Shared/Views/UserSettings/UserProfilesView.swift
index af3d60c9c0..8c1a3bf4e1 100644
--- a/apps/ios/Shared/Views/UserSettings/UserProfilesView.swift
+++ b/apps/ios/Shared/Views/UserSettings/UserProfilesView.swift
@@ -309,8 +309,7 @@ struct UserProfilesView: View {
}
} label: {
HStack {
- ProfileImage(imageStr: user.image, color: Color(uiColor: .tertiarySystemFill))
- .frame(width: 44, height: 44)
+ ProfileImage(imageStr: user.image, size: 44, color: Color(uiColor: .tertiarySystemFill))
.padding(.vertical, 4)
.padding(.trailing, 12)
Text(user.chatViewName)
diff --git a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff b/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff
index f62ef9fa92..2887496f78 100644
--- a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff
+++ b/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff
@@ -4369,6 +4369,10 @@ Error: %@
Профилно изображение
No comment provided by engineer.
+
+ Profile images
+ No comment provided by engineer.
+
Profile name
Име на профила
@@ -5189,6 +5193,10 @@ Error: %@
Настройки
No comment provided by engineer.
+
+ Shape profile images
+ No comment provided by engineer.
+
Share
Сподели
@@ -5354,6 +5362,10 @@ Error: %@
Някой
notification title
+
+ Square, circle, or anything in between.
+ No comment provided by engineer.
+
Start chat
Започни чат
diff --git a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff
index 000dfd11bc..a1ef39b2fb 100644
--- a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff
+++ b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff
@@ -4195,6 +4195,10 @@ Error: %@
Profilový obrázek
No comment provided by engineer.
+
+ Profile images
+ No comment provided by engineer.
+
Profile name
No comment provided by engineer.
@@ -4990,6 +4994,10 @@ Error: %@
Nastavení
No comment provided by engineer.
+
+ Shape profile images
+ No comment provided by engineer.
+
Share
Sdílet
@@ -5151,6 +5159,10 @@ Error: %@
Někdo
notification title
+
+ Square, circle, or anything in between.
+ No comment provided by engineer.
+
Start chat
Začít chat
diff --git a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff
index c756573675..4f22a82e09 100644
--- a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff
+++ b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff
@@ -4374,6 +4374,10 @@ Fehler: %@
Profilbild
No comment provided by engineer.
+
+ Profile images
+ No comment provided by engineer.
+
Profile name
Profilname
@@ -5194,6 +5198,10 @@ Fehler: %@
Einstellungen
No comment provided by engineer.
+
+ Shape profile images
+ No comment provided by engineer.
+
Share
Teilen
@@ -5359,6 +5367,10 @@ Fehler: %@
Jemand
notification title
+
+ Square, circle, or anything in between.
+ No comment provided by engineer.
+
Start chat
Starten Sie den Chat
diff --git a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff
index 71e1a726b8..2b5677dd61 100644
--- a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff
+++ b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff
@@ -4374,6 +4374,11 @@ Error: %@
Profile image
No comment provided by engineer.
+
+ Profile images
+ Profile images
+ No comment provided by engineer.
+
Profile name
Profile name
@@ -5194,6 +5199,11 @@ Error: %@
Settings
No comment provided by engineer.
+
+ Shape profile images
+ Shape profile images
+ No comment provided by engineer.
+
Share
Share
@@ -5359,6 +5369,11 @@ Error: %@
Somebody
notification title
+
+ Square, circle, or anything in between.
+ Square, circle, or anything in between.
+ No comment provided by engineer.
+
Start chat
Start chat
diff --git a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff
index 3f1b2deb11..61a5e235bc 100644
--- a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff
+++ b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff
@@ -4374,6 +4374,10 @@ Error: %@
Imagen del perfil
No comment provided by engineer.
+
+ Profile images
+ No comment provided by engineer.
+
Profile name
Nombre del perfil
@@ -5194,6 +5198,10 @@ Error: %@
Configuración
No comment provided by engineer.
+
+ Shape profile images
+ No comment provided by engineer.
+
Share
Compartir
@@ -5359,6 +5367,10 @@ Error: %@
Alguien
notification title
+
+ Square, circle, or anything in between.
+ No comment provided by engineer.
+
Start chat
Iniciar chat
diff --git a/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff b/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff
index 90ce66b8d9..a239bebbcf 100644
--- a/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff
+++ b/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff
@@ -4183,6 +4183,10 @@ Error: %@
Profiilikuva
No comment provided by engineer.
+
+ Profile images
+ No comment provided by engineer.
+
Profile name
No comment provided by engineer.
@@ -4977,6 +4981,10 @@ Error: %@
Asetukset
No comment provided by engineer.
+
+ Shape profile images
+ No comment provided by engineer.
+
Share
Jaa
@@ -5137,6 +5145,10 @@ Error: %@
Joku
notification title
+
+ Square, circle, or anything in between.
+ No comment provided by engineer.
+
Start chat
Aloita keskustelu
diff --git a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff
index 2dcc0dfd0c..d0e3babe6f 100644
--- a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff
+++ b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff
@@ -4357,6 +4357,10 @@ Erreur : %@
Image de profil
No comment provided by engineer.
+
+ Profile images
+ No comment provided by engineer.
+
Profile name
Nom du profil
@@ -5172,6 +5176,10 @@ Erreur : %@
Paramètres
No comment provided by engineer.
+
+ Shape profile images
+ No comment provided by engineer.
+
Share
Partager
@@ -5335,6 +5343,10 @@ Erreur : %@
Quelqu'un
notification title
+
+ Square, circle, or anything in between.
+ No comment provided by engineer.
+
Start chat
Démarrer le chat
diff --git a/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff b/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff
index dd1d4749cd..791f21a440 100644
--- a/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff
+++ b/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff
@@ -4374,6 +4374,10 @@ Hiba: %@
Profilkép
No comment provided by engineer.
+
+ Profile images
+ No comment provided by engineer.
+
Profile name
Profilnév
@@ -5194,6 +5198,10 @@ Hiba: %@
Beállítások
No comment provided by engineer.
+
+ Shape profile images
+ No comment provided by engineer.
+
Share
Megosztás
@@ -5359,6 +5367,10 @@ Hiba: %@
Valaki
notification title
+
+ Square, circle, or anything in between.
+ No comment provided by engineer.
+
Start chat
Csevegés indítása
diff --git a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff
index ae2888c12b..9bb90886f8 100644
--- a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff
+++ b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff
@@ -4369,6 +4369,10 @@ Errore: %@
Immagine del profilo
No comment provided by engineer.
+
+ Profile images
+ No comment provided by engineer.
+
Profile name
Nome del profilo
@@ -5189,6 +5193,10 @@ Errore: %@
Impostazioni
No comment provided by engineer.
+
+ Shape profile images
+ No comment provided by engineer.
+
Share
Condividi
@@ -5354,6 +5362,10 @@ Errore: %@
Qualcuno
notification title
+
+ Square, circle, or anything in between.
+ No comment provided by engineer.
+
Start chat
Avvia chat
diff --git a/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff b/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff
index b1f9294387..9f9915c0f9 100644
--- a/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff
+++ b/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff
@@ -4203,6 +4203,10 @@ Error: %@
プロフィール画像
No comment provided by engineer.
+
+ Profile images
+ No comment provided by engineer.
+
Profile name
No comment provided by engineer.
@@ -4989,6 +4993,10 @@ Error: %@
設定
No comment provided by engineer.
+
+ Shape profile images
+ No comment provided by engineer.
+
Share
共有する
@@ -5150,6 +5158,10 @@ Error: %@
誰か
notification title
+
+ Square, circle, or anything in between.
+ No comment provided by engineer.
+
Start chat
チャットを開始する
diff --git a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff
index 76f634f917..f4056e359e 100644
--- a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff
+++ b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff
@@ -4374,6 +4374,10 @@ Fout: %@
profielfoto
No comment provided by engineer.
+
+ Profile images
+ No comment provided by engineer.
+
Profile name
Profielnaam
@@ -5194,6 +5198,10 @@ Fout: %@
Instellingen
No comment provided by engineer.
+
+ Shape profile images
+ No comment provided by engineer.
+
Share
Deel
@@ -5359,6 +5367,10 @@ Fout: %@
Iemand
notification title
+
+ Square, circle, or anything in between.
+ No comment provided by engineer.
+
Start chat
Begin gesprek
diff --git a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff
index a73e253e92..b5c60c2e1e 100644
--- a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff
+++ b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff
@@ -4357,6 +4357,10 @@ Błąd: %@
Zdjęcie profilowe
No comment provided by engineer.
+
+ Profile images
+ No comment provided by engineer.
+
Profile name
Nazwa profilu
@@ -5172,6 +5176,10 @@ Błąd: %@
Ustawienia
No comment provided by engineer.
+
+ Shape profile images
+ No comment provided by engineer.
+
Share
Udostępnij
@@ -5335,6 +5343,10 @@ Błąd: %@
Ktoś
notification title
+
+ Square, circle, or anything in between.
+ No comment provided by engineer.
+
Start chat
Rozpocznij czat
diff --git a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff
index a4c0570bdb..ba1ac7a929 100644
--- a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff
+++ b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff
@@ -2890,7 +2890,7 @@ This cannot be undone!
Group image
- Аватар группы
+ Картинка группы
No comment provided by engineer.
@@ -4371,7 +4371,12 @@ Error: %@
Profile image
- Аватар
+ Картинка профиля
+ No comment provided by engineer.
+
+
+ Profile images
+ Картинки профилей
No comment provided by engineer.
@@ -5194,6 +5199,11 @@ Error: %@
Настройки
No comment provided by engineer.
+
+ Shape profile images
+ Форма картинок профилей
+ No comment provided by engineer.
+
Share
Поделиться
@@ -5359,6 +5369,11 @@ Error: %@
Контакт
notification title
+
+ Square, circle, or anything in between.
+ Квадрат, круг и все, что между ними.
+ No comment provided by engineer.
+
Start chat
Запустить чат
diff --git a/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff b/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff
index 71654d1578..1f62fad60f 100644
--- a/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff
+++ b/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff
@@ -4164,6 +4164,10 @@ Error: %@
รูปโปรไฟล์
No comment provided by engineer.
+
+ Profile images
+ No comment provided by engineer.
+
Profile name
No comment provided by engineer.
@@ -4954,6 +4958,10 @@ Error: %@
การตั้งค่า
No comment provided by engineer.
+
+ Shape profile images
+ No comment provided by engineer.
+
Share
แชร์
@@ -5112,6 +5120,10 @@ Error: %@
ใครบางคน
notification title
+
+ Square, circle, or anything in between.
+ No comment provided by engineer.
+
Start chat
เริ่มแชท
diff --git a/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff b/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff
index 602519a962..1d0783c5e5 100644
--- a/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff
+++ b/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff
@@ -4374,6 +4374,10 @@ Hata: %@
Profil fotoğrafı
No comment provided by engineer.
+
+ Profile images
+ No comment provided by engineer.
+
Profile name
Profil ismi
@@ -5194,6 +5198,10 @@ Hata: %@
Ayarlar
No comment provided by engineer.
+
+ Shape profile images
+ No comment provided by engineer.
+
Share
Paylaş
@@ -5359,6 +5367,10 @@ Hata: %@
Biri
notification title
+
+ Square, circle, or anything in between.
+ No comment provided by engineer.
+
Start chat
Sohbeti başlat
diff --git a/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff b/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff
index 348b06c16c..1ed1f5ffd6 100644
--- a/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff
+++ b/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff
@@ -4357,6 +4357,10 @@ Error: %@
Зображення профілю
No comment provided by engineer.
+
+ Profile images
+ No comment provided by engineer.
+
Profile name
Назва профілю
@@ -5172,6 +5176,10 @@ Error: %@
Налаштування
No comment provided by engineer.
+
+ Shape profile images
+ No comment provided by engineer.
+
Share
Поділіться
@@ -5335,6 +5343,10 @@ Error: %@
Хтось
notification title
+
+ Square, circle, or anything in between.
+ No comment provided by engineer.
+
Start chat
Почати чат
diff --git a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff
index 4190c5bc66..4bf9e05665 100644
--- a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff
+++ b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff
@@ -4269,6 +4269,10 @@ Error: %@
资料图片
No comment provided by engineer.
+
+ Profile images
+ No comment provided by engineer.
+
Profile name
No comment provided by engineer.
@@ -5075,6 +5079,10 @@ Error: %@
设置
No comment provided by engineer.
+
+ Shape profile images
+ No comment provided by engineer.
+
Share
分享
@@ -5237,6 +5245,10 @@ Error: %@
某人
notification title
+
+ Square, circle, or anything in between.
+ No comment provided by engineer.
+
Start chat
开始聊天
diff --git a/apps/ios/ru.lproj/Localizable.strings b/apps/ios/ru.lproj/Localizable.strings
index 758588bc35..2c703f0095 100644
--- a/apps/ios/ru.lproj/Localizable.strings
+++ b/apps/ios/ru.lproj/Localizable.strings
@@ -1951,7 +1951,7 @@
"Group full name (optional)" = "Полное имя (необязательно)";
/* No comment provided by engineer. */
-"Group image" = "Аватар группы";
+"Group image" = "Картинка группы";
/* No comment provided by engineer. */
"Group invitation" = "Приглашение в группу";
@@ -2958,7 +2958,10 @@
"Profile and server connections" = "Профиль и соединения на сервере";
/* No comment provided by engineer. */
-"Profile image" = "Аватар";
+"Profile image" = "Картинка профиля";
+
+/* No comment provided by engineer. */
+"Profile images" = "Картинки профилей";
/* No comment provided by engineer. */
"Profile name" = "Имя профиля";
@@ -3503,6 +3506,9 @@
/* No comment provided by engineer. */
"Settings" = "Настройки";
+/* No comment provided by engineer. */
+"Shape profile images" = "Форма картинок профилей";
+
/* chat item action */
"Share" = "Поделиться";
@@ -3605,6 +3611,9 @@
/* notification title */
"Somebody" = "Контакт";
+/* No comment provided by engineer. */
+"Square, circle, or anything in between." = "Квадрат, круг и все, что между ними.";
+
/* chat item text */
"standard end-to-end encryption" = "стандартное end-to-end шифрование";