Merge branch 'master' into callkit

This commit is contained in:
Evgeny Poberezkin
2023-03-19 12:14:34 +00:00
64 changed files with 5500 additions and 2850 deletions

View File

@@ -553,6 +553,15 @@ final class Chat: ObservableObject, Identifiable {
}
}
var userIsObserver: Bool {
switch chatInfo {
case let .group(groupInfo):
let m = groupInfo.membership
return m.memberActive && m.memberRole == .observer
default: return false
}
}
var id: ChatId { get { chatInfo.id } }
var viewId: String { get { "\(chatInfo.id) \(created.timeIntervalSince1970)" } }

View File

@@ -291,7 +291,7 @@ struct ComposeView: View {
.background(.background)
.disabled(!chat.userCanSend)
if (!chat.userCanSend) {
if chat.userIsObserver {
Text("you are observer")
.italic()
.foregroundColor(.secondary)

View File

@@ -140,7 +140,7 @@ struct AddGroupMembersView: View {
private func rolePicker() -> some View {
Picker("New member role", selection: $selectedRole) {
ForEach(GroupMemberRole.allCases) { role in
if role <= groupInfo.membership.memberRole {
if role <= groupInfo.membership.memberRole && role != .observer {
Text(role.text)
}
}

View File

@@ -34,15 +34,15 @@ struct GroupLinkView: View {
Text("You can share a link or a QR code - anybody will be able to join the group. You won't lose members of the group if you later delete it.")
.padding(.bottom)
if let groupLink = groupLink {
HStack {
Text("Initial role")
Picker("Initial role", selection: $groupLinkMemberRole) {
ForEach([GroupMemberRole.member, GroupMemberRole.observer]) { role in
Text(role.text)
}
}
}
.frame(maxWidth: .infinity, alignment: .leading)
// HStack {
// Text("Initial role")
// Picker("Initial role", selection: $groupLinkMemberRole) {
// ForEach([GroupMemberRole.member, GroupMemberRole.observer]) { role in
// Text(role.text)
// }
// }
// }
// .frame(maxWidth: .infinity, alignment: .leading)
QRCode(uri: groupLink)
HStack {
Button {

View File

@@ -14,6 +14,8 @@ let interfaceStyles: [UIUserInterfaceStyle] = [.unspecified, .light, .dark]
let interfaceStyleNames: [LocalizedStringKey] = ["System", "Light", "Dark"]
let appSettingsURL = URL(string: UIApplication.openSettingsURLString)!
struct AppearanceSettings: View {
@EnvironmentObject var sceneDelegate: SceneDelegate
@State private var iconLightTapped = false
@@ -24,6 +26,16 @@ struct AppearanceSettings: View {
var body: some View {
VStack{
List {
Section(String("Language")) {
HStack {
Text(currentLanguage)
Spacer()
Button("Change") {
UIApplication.shared.open(appSettingsURL)
}
}
}
Section("App icon") {
HStack {
updateAppIcon(image: "icon-light", icon: nil, tapped: $iconLightTapped)
@@ -62,6 +74,11 @@ struct AppearanceSettings: View {
}
}
private var currentLanguage: String {
let lang = Bundle.main.preferredLocalizations.first ?? "en"
return Locale.current.localizedString(forIdentifier: lang)?.localizedCapitalized ?? lang
}
private func updateAppIcon(image: String, icon: String?, tapped: Binding<Bool>) -> some View {
Image(image)
.resizable()