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 шифрование";