diff --git a/Ring/Ring/Constants/Generated/Strings.swift b/Ring/Ring/Constants/Generated/Strings.swift index b8aca969752fd943782f1e4c7ac88a6b4ab7213e..b1cd370f9ba6b89747bec6360467fb44c6b46bb7 100644 --- a/Ring/Ring/Constants/Generated/Strings.swift +++ b/Ring/Ring/Constants/Generated/Strings.swift @@ -153,6 +153,8 @@ internal enum L10n { internal static let linkedDevices = L10n.tr("Localizable", "accountPage.linkedDevices", fallback: "Linked devices") /// Manage account internal static let manageAccount = L10n.tr("Localizable", "accountPage.manageAccount", fallback: "Manage account") + /// Name server + internal static let nameServer = L10n.tr("Localizable", "accountPage.nameServer", fallback: "Name server") /// Confirm new password internal static let newPasswordConfirmPlaceholder = L10n.tr("Localizable", "accountPage.newPasswordConfirmPlaceholder", fallback: "Confirm new password") /// Enter new password diff --git a/Ring/Ring/Features/Settings/Me/AccountSettings.swift b/Ring/Ring/Features/Settings/Me/AccountSettings.swift index 005ef89181a1fbee5bb5a7fd0a73b484068fe62a..5234b16a7910fad91d0016fafefd536138967dc5 100644 --- a/Ring/Ring/Features/Settings/Me/AccountSettings.swift +++ b/Ring/Ring/Features/Settings/Me/AccountSettings.swift @@ -47,6 +47,8 @@ class AccountSettings: ObservableObject { @Published var bootstrap = "" + @Published var serverName = "" + var notificationsPermitted: Bool = LocalNotificationsHelper.isEnabled() let accountService: AccountsService let account: AccountModel @@ -110,6 +112,7 @@ class AccountSettings: ObservableObject { // MARK: - Jami account extension AccountSettings { private func setUPJamiParameters() { + self.serverName = self.getStringState(for: .ringNsURI) self.proxyEnabled = self.getBoolState(for: .proxyEnabled) self.proxyListUrl = self.getStringState(for: ConfigKey.dhtProxyListUrl) self.bootstrap = self.getStringState(for: ConfigKey.accountHostname) @@ -197,6 +200,11 @@ extension AccountSettings { let property = ConfigKeyModel(withKey: .dhtProxyListUrl) self.accountService.setAccountProperty(property: property, value: self.proxyListUrl, accountId: account.id) } + + func saveNameServer() { + let property = ConfigKeyModel(withKey: ConfigKey.ringNsURI) + self.accountService.setAccountProperty(property: property, value: self.serverName, accountId: account.id) + } } // MARK: - SIP account diff --git a/Ring/Ring/Features/Settings/Me/AccountSettingsViews.swift b/Ring/Ring/Features/Settings/Me/AccountSettingsViews.swift index 03ffc257bed7f43b5aa9e17dd2d3d51c7f6c6d52..5ac855bed8c137235d1f83dc44045b17f68f6022 100644 --- a/Ring/Ring/Features/Settings/Me/AccountSettingsViews.swift +++ b/Ring/Ring/Features/Settings/Me/AccountSettingsViews.swift @@ -125,6 +125,26 @@ struct NotificationsSettingsView: View { } } +struct NameServerView: View { + @StateObject var model: AccountSettings + + init(injectionBag: InjectionBag, account: AccountModel) { + _model = StateObject(wrappedValue: AccountSettings(account: account, injectionBag: injectionBag)) + } + + var body: some View { + List { + NavigationLink(destination: EditableFieldView(value: $model.serverName, title: L10n.AccountPage.nameServer, placeholder: L10n.Account.serverLabel, onDisappearAction: { + model.saveNameServer() + })) { + FieldRowView(label: L10n.AccountPage.nameServer, value: model.serverName) + } + } + .navigationBarTitleDisplayMode(.inline) + .navigationTitle(L10n.AccountPage.notificationTitle) + } +} + struct ConnectivitySettingsView: View { @StateObject var model: AccountSettings diff --git a/Ring/Ring/Features/Settings/Me/SettingsSummaryView.swift b/Ring/Ring/Features/Settings/Me/SettingsSummaryView.swift index bcff11a10e864bd9563caad81aa80714cd2f4f7a..64cf6320a5a75a1a0c1fa9f4f913803ccebd4577 100644 --- a/Ring/Ring/Features/Settings/Me/SettingsSummaryView.swift +++ b/Ring/Ring/Features/Settings/Me/SettingsSummaryView.swift @@ -37,6 +37,10 @@ struct SettingsSummaryView: View { NavigationLink(destination: NotificationsSettingsView(injectionBag: model.injectionBag, account: model.account)) { SettingsRow(iconName: "bell", title: L10n.AccountPage.notificationsHeader) } + + NavigationLink(destination: NameServerView(injectionBag: model.injectionBag, account: model.account)) { + SettingsRow(iconName: "server.rack", title: L10n.AccountPage.nameServer) + } } NavigationLink(destination: ConnectivitySettingsView(injectionBag: model.injectionBag, account: model.account)) { SettingsRow(iconName: "link", title: L10n.AccountPage.connectivityAndConfiguration) diff --git a/Ring/Ring/Resources/en.lproj/Localizable.strings b/Ring/Ring/Resources/en.lproj/Localizable.strings index 0d7df059c4de727f8cc4b2a2ac605cf909536289..d6f852ef906a4f88656562785fa78c227d68288f 100644 --- a/Ring/Ring/Resources/en.lproj/Localizable.strings +++ b/Ring/Ring/Resources/en.lproj/Localizable.strings @@ -387,6 +387,7 @@ "accountPage.accountIdentity" = "Account identity"; "accountPage.bootstrap" = "Bootstrap"; "accountPage.dhtConfiguration" = "OpenDHT configuration"; +"accountPage.nameServer" = "Name server"; // Backup Account "backupAccount.explanation" = "This Jami account exists only on this device. The account will be lost if this device is lost or if the application is uninstalled. It is recommended to make a backup of this account.";