From 8e5327f915c027239e43a1f33995b9e53658e91a Mon Sep 17 00:00:00 2001 From: Mikunj Date: Mon, 29 Apr 2019 13:48:27 +1000 Subject: [PATCH] Set loki profile name upon registration --- ...boardingAccountDetailsViewController.swift | 26 ++++++++++++++++--- .../Registration/OnboardingController.swift | 4 +-- .../OnboardingPublicKeyViewController.swift | 24 ++++++++++++++++- 3 files changed, 48 insertions(+), 6 deletions(-) diff --git a/Signal/src/ViewControllers/Registration/OnboardingAccountDetailsViewController.swift b/Signal/src/ViewControllers/Registration/OnboardingAccountDetailsViewController.swift index f96794967..7be08f50f 100644 --- a/Signal/src/ViewControllers/Registration/OnboardingAccountDetailsViewController.swift +++ b/Signal/src/ViewControllers/Registration/OnboardingAccountDetailsViewController.swift @@ -24,6 +24,12 @@ final class OnboardingAccountDetailsViewController : OnboardingBaseViewControlle return result }() + private var normalizedName: String? { + get { + return displayNameTextField.text?.ows_stripped() + } + } + override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = Theme.backgroundColor @@ -36,7 +42,7 @@ final class OnboardingAccountDetailsViewController : OnboardingBaseViewControlle let passwordLabel = createExplanationLabel(text: NSLocalizedString("Type an optional password for added security", comment: "")) passwordLabel.accessibilityIdentifier = "onboarding.accountDetailsStep.passwordLabel" let bottomSpacer = UIView.vStretchingSpacer() - let nextButton = button(title: NSLocalizedString("Next", comment: ""), selector: #selector(goToSeedStep)) + let nextButton = button(title: NSLocalizedString("Next", comment: ""), selector: #selector(updateProfile)) nextButton.accessibilityIdentifier = "onboarding.accountDetailsStep.nextButton" let stackView = UIStackView(arrangedSubviews: [ titleLabel, @@ -67,7 +73,21 @@ final class OnboardingAccountDetailsViewController : OnboardingBaseViewControlle displayNameTextField.becomeFirstResponder() } - @objc private func goToSeedStep() { - onboardingController.pushPublicKeyViewController(from: self) + @objc private func goToSeedStep(profileName: String? = nil) { + onboardingController.pushPublicKeyViewController(from: self, profileName: profileName) + } + + @objc private func updateProfile() { + guard let normalizedName = self.normalizedName else { + self.goToSeedStep() + return + } + + if (OWSProfileManager.shared().isProfileNameTooLong(normalizedName)) { + OWSAlerts.showErrorAlert(message: NSLocalizedString("PROFILE_VIEW_ERROR_PROFILE_NAME_TOO_LONG", comment: "Error message shown when user tries to update profile with a profile name that is too long")) + return + } + + self.goToSeedStep(profileName: normalizedName) } } diff --git a/Signal/src/ViewControllers/Registration/OnboardingController.swift b/Signal/src/ViewControllers/Registration/OnboardingController.swift index 5b25f375b..4ebb142a3 100644 --- a/Signal/src/ViewControllers/Registration/OnboardingController.swift +++ b/Signal/src/ViewControllers/Registration/OnboardingController.swift @@ -128,9 +128,9 @@ public class OnboardingController: NSObject { viewController.navigationController?.pushViewController(accountDetailsVC, animated: true) } - func pushPublicKeyViewController(from viewController: UIViewController) { + func pushPublicKeyViewController(from viewController: UIViewController, profileName: String?) { AssertIsOnMainThread() - let publicKeyVC = OnboardingPublicKeyViewController(onboardingController: self) + let publicKeyVC = OnboardingPublicKeyViewController(onboardingController: self, profileName: profileName) viewController.navigationController?.pushViewController(publicKeyVC, animated: true) } diff --git a/Signal/src/ViewControllers/Registration/OnboardingPublicKeyViewController.swift b/Signal/src/ViewControllers/Registration/OnboardingPublicKeyViewController.swift index 95f48464a..f2ad6cc53 100644 --- a/Signal/src/ViewControllers/Registration/OnboardingPublicKeyViewController.swift +++ b/Signal/src/ViewControllers/Registration/OnboardingPublicKeyViewController.swift @@ -5,6 +5,7 @@ final class OnboardingPublicKeyViewController : OnboardingBaseViewController { private var keyPair: ECKeyPair! { didSet { updateMnemonic() } } private var hexEncodedPublicKey: String! private var mnemonic: String! { didSet { mnemonicLabel.text = mnemonic } } + private var profileName: String? private lazy var mnemonicLabel: UILabel = { let result = createExplanationLabel(text: "") @@ -16,6 +17,12 @@ final class OnboardingPublicKeyViewController : OnboardingBaseViewController { return result }() + @objc + public init(onboardingController: OnboardingController, profileName: String?) { + super.init(onboardingController: onboardingController); + self.profileName = profileName + } + override public func viewDidLoad() { super.loadView() setUpViewHierarchy() @@ -68,6 +75,21 @@ final class OnboardingPublicKeyViewController : OnboardingBaseViewController { let accountManager = TSAccountManager.sharedInstance() accountManager.phoneNumberAwaitingVerification = hexEncodedPublicKey accountManager.didRegister() - onboardingController.verificationDidComplete(fromView: self) + + let verificationComplete: () -> Void = { [weak self] in + guard let strongSelf = self else { return } + strongSelf.onboardingController.verificationDidComplete(fromView: strongSelf) + } + + if let name = self.profileName { + // Try save the profile name + OWSProfileManager.shared().updateLocalProfileName(name, avatarImage: nil, success: verificationComplete, failure: { + Logger.warn("Failed to set profile name") + verificationComplete() + }) + } else { + verificationComplete() + } + } }