Privacy: IS Settings: Plug the UITextField to the model

This commit is contained in:
manuroe 2019-09-25 10:14:00 +02:00
parent 9faddc70d4
commit 46702f11d3
5 changed files with 26 additions and 9 deletions

View file

@ -518,7 +518,7 @@
"identity_server_settings_title" = "Identity Server";
"identity_server_settings_description" = "You are currently using %@ to discover and be discoverable by existing contacts you know.";
"identity_server_settings_no_is_description" = "You are not currently using an identity server. To discover and be discoverable by existing contacts, add one.";
"identity_server_settings_no_is_description" = "You are not currently using an identity server. To discover and be discoverable by existing contacts, add one above.";
"identity_server_settings_add" = "Add";
"identity_server_settings_change" = "Change";

View file

@ -1170,7 +1170,7 @@ internal enum VectorL10n {
internal static var identityServerSettingsDisconnectInfo: String {
return VectorL10n.tr("Vector", "identity_server_settings_disconnect_info")
}
/// You are not currently using an identity server. To discover and be discoverable by existing contacts, add one.
/// You are not currently using an identity server. To discover and be discoverable by existing contacts, add one above.
internal static var identityServerSettingsNoIsDescription: String {
return VectorL10n.tr("Vector", "identity_server_settings_no_is_description")
}

View file

@ -136,6 +136,8 @@ final class SettingsIdentityServerViewController: UIViewController {
self.identityServerLabel.text = VectorL10n.identityServerSettingsTitle
self.identityServerTextField.addTarget(self, action: #selector(identityServerTextFieldDidChange(_:)), for: .editingChanged)
self.disconnectMessageLabel.text = VectorL10n.identityServerSettingsDisconnectInfo
self.disconnectButton.setTitle(VectorL10n.identityServerSettingsDisconnect, for: .normal)
self.disconnectButton.setTitle(VectorL10n.identityServerSettingsDisconnect, for: .highlighted)
@ -159,6 +161,8 @@ final class SettingsIdentityServerViewController: UIViewController {
private func renderLoaded(displayMode: SettingsIdentityServerDisplayMode) {
self.activityPresenter.removeCurrentActivityIndicator(animated: true)
self.displayMode = displayMode
switch displayMode {
case .noIdentityServer:
self.renderNoIdentityServer()
@ -179,12 +183,10 @@ final class SettingsIdentityServerViewController: UIViewController {
private func renderIdentityServer(host: String) {
let hostname = URL(string: host)?.host ?? host
self.identityServerTextField.text = host
self.identityServerTextField.placeholder = RiotDefaults.identityserverurl
self.messageLabel.text = VectorL10n.identityServerSettingsDescription(hostname)
self.messageLabel.text = VectorL10n.identityServerSettingsDescription(host.hostname())
self.addOrChangeButton.setTitle(VectorL10n.identityServerSettingsChange, for: .normal)
self.addOrChangeButton.setTitle(VectorL10n.identityServerSettingsChange, for: .highlighted)
@ -205,13 +207,18 @@ final class SettingsIdentityServerViewController: UIViewController {
// MARK: - Actions
@objc private func identityServerTextFieldDidChange(_ textField: UITextField) {
self.addOrChangeButton.isUserInteractionEnabled = textField.text?.count ?? 0 > 0
&& (textField.text?.hostname() != self.viewModel.identityServer?.hostname())
}
@IBAction private func addOrChangeButtonAction(_ sender: Any) {
guard let displayMode = self.displayMode else {
self.identityServerTextField.resignFirstResponder()
guard let displayMode = self.displayMode, let identityServer = self.identityServerTextField.text else {
return
}
let identityServer = "TODO"
let viewAction: SettingsIdentityServerViewAction?
switch displayMode {
@ -240,3 +247,9 @@ extension SettingsIdentityServerViewController: SettingsIdentityServerViewModelV
self.render(viewState: viewState)
}
}
fileprivate extension String {
func hostname() -> String {
return URL(string: self)?.host ?? self
}
}

View file

@ -47,7 +47,8 @@ final class SettingsIdentityServerViewModel: SettingsIdentityServerViewModelType
// MARK: Public
weak var viewDelegate: SettingsIdentityServerViewModelViewDelegate?
var identityServer: String?
// MARK: - Setup
init(session: MXSession) {
@ -125,6 +126,7 @@ final class SettingsIdentityServerViewModel: SettingsIdentityServerViewModelType
private func refreshIdentityServerViewState() {
if let identityService = self.session.identityService {
let host = identityService.identityServer
self.identityServer = host
self.update(viewState: .loaded(displayMode: .identityServer(host: host)))
} else {
self.update(viewState: .loaded(displayMode: .noIdentityServer))

View file

@ -26,6 +26,8 @@ protocol SettingsIdentityServerViewModelViewDelegate: class {
protocol SettingsIdentityServerViewModelType {
var viewDelegate: SettingsIdentityServerViewModelViewDelegate? { get set }
var identityServer: String? { get }
func process(viewAction: SettingsIdentityServerViewAction)
}