final class DisplayNameVC : OnboardingBaseViewController {
private lazy var userNameTextField : UITextField = {
let result = UITextField ( )
result . textColor = Theme . primaryColor
result . font = . ows_dynamicTypeBodyClamped
result . textAlignment = . center
let placeholder = NSMutableAttributedString ( string : NSLocalizedString ( " Display Name " , comment : " " ) )
placeholder . addAttribute ( . foregroundColor , value : Theme . placeholderColor , range : NSRange ( location : 0 , length : placeholder . length ) )
result . attributedPlaceholder = placeholder
result . tintColor = . lokiGreen ( )
result . accessibilityIdentifier = " onboarding.accountDetailsStep.userNameTextField "
result . keyboardAppearance = . dark
return result
} ( )
override func viewDidLoad ( ) {
super . viewDidLoad ( )
view . backgroundColor = Theme . backgroundColor
view . layoutMargins = . zero
let titleLabel = self . createTitleLabel ( text : NSLocalizedString ( " Create Your Loki Messenger Account " , comment : " " ) )
titleLabel . accessibilityIdentifier = " onboarding.accountDetailsStep.titleLabel "
let topSpacer = UIView . vStretchingSpacer ( )
let displayNameLabel = createExplanationLabel ( text : NSLocalizedString ( " Enter a name to be shown to your contacts " , comment : " " ) )
displayNameLabel . accessibilityIdentifier = " onboarding.accountDetailsStep.displayNameLabel "
let bottomSpacer = UIView . vStretchingSpacer ( )
let nextButton = createButton ( title : NSLocalizedString ( " Next " , comment : " " ) , selector : #selector ( handleNextButtonPressed ) )
nextButton . accessibilityIdentifier = " onboarding.accountDetailsStep.nextButton "
let stackView = UIStackView ( arrangedSubviews : [
titleLabel ,
topSpacer ,
displayNameLabel ,
UIView . spacer ( withHeight : 8 ) ,
userNameTextField ,
bottomSpacer ,
nextButton
] )
stackView . axis = . vertical
stackView . alignment = . fill
stackView . layoutMargins = UIEdgeInsets ( top : 32 , left : 32 , bottom : 32 , right : 32 )
stackView . isLayoutMarginsRelativeArrangement = true
view . addSubview ( stackView )
stackView . autoPinWidthToSuperview ( )
stackView . autoPin ( toTopLayoutGuideOf : self , withInset : 0 )
autoPinView ( toBottomOfViewControllerOrKeyboard : stackView , avoidNotch : true )
topSpacer . autoMatch ( . height , to : . height , of : bottomSpacer )
Analytics . shared . track ( " Display Name Screen Viewed " )
}
override func viewDidAppear ( _ animated : Bool ) {
super . viewDidAppear ( animated )
userNameTextField . becomeFirstResponder ( )
}
@objc private func handleNextButtonPressed ( ) {
let displayName = userNameTextField . text ! . ows_stripped ( )
guard ! displayName . isEmpty else {
return OWSAlerts . showErrorAlert ( message : NSLocalizedString ( " Please pick a display name " , comment : " " ) )
}
guard displayName . allSatisfy ( { " 0 " . . . " 9 " ~= $0 || " a " . . . " z " ~= $0 || " A " . . . " Z " ~= $0 || $0 = = " _ " || $0 = = " " } ) else {
return OWSAlerts . showErrorAlert ( message : NSLocalizedString ( " Please pick a display name that consists of only a-z, A-Z, 0-9 and _ characters " , comment : " " ) )
}
guard ! OWSProfileManager . shared ( ) . isProfileNameTooLong ( displayName ) else {
return OWSAlerts . showErrorAlert ( message : NSLocalizedString ( " Please pick a shorter display name " , comment : " " ) )
}
TSAccountManager . sharedInstance ( ) . didRegister ( )
UserDefaults . standard . set ( true , forKey : " didUpdateForMainnet " )
onboardingController . verificationDidComplete ( fromView : self )
let appDelegate = UIApplication . shared . delegate as ! AppDelegate
appDelegate . setUpDefaultPublicChatsIfNeeded ( )
appDelegate . createRSSFeedsIfNeeded ( )
LokiPublicChatManager . shared . startPollersIfNeeded ( )
appDelegate . startRSSFeedPollersIfNeeded ( )
OWSProfileManager . shared ( ) . updateLocalProfileName ( displayName , avatarImage : nil , success : { } , failure : { } ) // T r y t o s a v e t h e u s e r n a m e b u t i g n o r e t h e r e s u l t
}
}