Ver código fonte

layouting welcome screen

nayooti 5 anos atrás
pai
commit
4acc0abcee

+ 5 - 5
deltachat-ios.xcodeproj/project.pbxproj

@@ -132,6 +132,7 @@
 		AE52EA19229EB53C00C586C9 /* ContactDetailHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE52EA18229EB53C00C586C9 /* ContactDetailHeader.swift */; };
 		AE52EA20229EB9F000C586C9 /* EditGroupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE52EA1F229EB9F000C586C9 /* EditGroupViewController.swift */; };
 		AE728F15229D5C390047565B /* PhotoPickerAlertAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE728F14229D5C390047565B /* PhotoPickerAlertAction.swift */; };
+		AE76E5EE242BF2EA003CF461 /* WelcomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE76E5ED242BF2EA003CF461 /* WelcomeViewController.swift */; };
 		AE77838D23E32ED20093EABD /* ContactDetailViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE77838C23E32ED20093EABD /* ContactDetailViewModel.swift */; };
 		AE77838F23E4276D0093EABD /* ContactCellViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE77838E23E4276D0093EABD /* ContactCellViewModel.swift */; };
 		AE8519EA2272FDCA00ED86F0 /* DeviceContactsHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE8519E92272FDCA00ED86F0 /* DeviceContactsHandler.swift */; };
@@ -155,7 +156,6 @@
 		AEE6EC3F2282C59C00EDC689 /* GroupMembersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEE6EC3E2282C59C00EDC689 /* GroupMembersViewController.swift */; };
 		AEE6EC412282DF5700EDC689 /* MailboxViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEE6EC402282DF5700EDC689 /* MailboxViewController.swift */; };
 		AEE6EC482283045D00EDC689 /* EditSettingsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEE6EC472283045D00EDC689 /* EditSettingsController.swift */; };
-		AEFA301C2428DA7300152C24 /* WelcomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEFA301B2428DA7300152C24 /* WelcomeViewController.swift */; };
 		AEFBE22F23FEF23D0045327A /* ProviderInfoCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEFBE22E23FEF23D0045327A /* ProviderInfoCell.swift */; };
 		AEFBE23123FF09B20045327A /* TypeAlias.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEFBE23023FF09B20045327A /* TypeAlias.swift */; };
 		B21005DB23383664004C70C5 /* SettingsClassicViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B21005DA23383664004C70C5 /* SettingsClassicViewController.swift */; };
@@ -365,6 +365,7 @@
 		AE52EA18229EB53C00C586C9 /* ContactDetailHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactDetailHeader.swift; sourceTree = "<group>"; };
 		AE52EA1F229EB9F000C586C9 /* EditGroupViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditGroupViewController.swift; sourceTree = "<group>"; };
 		AE728F14229D5C390047565B /* PhotoPickerAlertAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoPickerAlertAction.swift; sourceTree = "<group>"; };
+		AE76E5ED242BF2EA003CF461 /* WelcomeViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WelcomeViewController.swift; sourceTree = "<group>"; };
 		AE77838C23E32ED20093EABD /* ContactDetailViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactDetailViewModel.swift; sourceTree = "<group>"; };
 		AE77838E23E4276D0093EABD /* ContactCellViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactCellViewModel.swift; sourceTree = "<group>"; };
 		AE8519E92272FDCA00ED86F0 /* DeviceContactsHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceContactsHandler.swift; sourceTree = "<group>"; };
@@ -390,7 +391,6 @@
 		AEE6EC3E2282C59C00EDC689 /* GroupMembersViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupMembersViewController.swift; sourceTree = "<group>"; };
 		AEE6EC402282DF5700EDC689 /* MailboxViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MailboxViewController.swift; sourceTree = "<group>"; };
 		AEE6EC472283045D00EDC689 /* EditSettingsController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditSettingsController.swift; sourceTree = "<group>"; };
-		AEFA301B2428DA7300152C24 /* WelcomeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeViewController.swift; sourceTree = "<group>"; };
 		AEFBE22E23FEF23D0045327A /* ProviderInfoCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProviderInfoCell.swift; sourceTree = "<group>"; };
 		AEFBE23023FF09B20045327A /* TypeAlias.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TypeAlias.swift; sourceTree = "<group>"; };
 		B21005DA23383664004C70C5 /* SettingsClassicViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsClassicViewController.swift; sourceTree = "<group>"; };
@@ -755,6 +755,7 @@
 				AEE6EC472283045D00EDC689 /* EditSettingsController.swift */,
 				AE851ACF227DF50900ED86F0 /* GroupChatDetailViewController.swift */,
 				AEE6EC3E2282C59C00EDC689 /* GroupMembersViewController.swift */,
+				AE19887423EB264000B4CD5F /* HelpViewController.swift */,
 				AEE6EC402282DF5700EDC689 /* MailboxViewController.swift */,
 				785BE16721E247F1003BE98C /* MessageInfoViewController.swift */,
 				7AE0A5481FC42F65005ECB4B /* NewChatViewController.swift */,
@@ -766,8 +767,7 @@
 				30149D9222F21129003C12B5 /* QrViewController.swift */,
 				B21005DA23383664004C70C5 /* SettingsClassicViewController.swift */,
 				78E45E3921D3CFBC00D4B15E /* SettingsController.swift */,
-				AE19887423EB264000B4CD5F /* HelpViewController.swift */,
-				AEFA301B2428DA7300152C24 /* WelcomeViewController.swift */,
+				AE76E5ED242BF2EA003CF461 /* WelcomeViewController.swift */,
 			);
 			path = Controller;
 			sourceTree = "<group>";
@@ -1204,7 +1204,7 @@
 				302B84CE2397F6CD001C261F /* URL+Extension.swift in Sources */,
 				305961CC2346125100C80F33 /* UIView+Extensions.swift in Sources */,
 				7A9FB1441FB061E2001FEA36 /* AppDelegate.swift in Sources */,
-				AEFA301C2428DA7300152C24 /* WelcomeViewController.swift in Sources */,
+				AE76E5EE242BF2EA003CF461 /* WelcomeViewController.swift in Sources */,
 				305961F52346125100C80F33 /* TypingIndicatorCell.swift in Sources */,
 				AEE56D7D2253ADB4007DC082 /* HudHandler.swift in Sources */,
 				305961FF2346125100C80F33 /* AvatarView.swift in Sources */,

+ 72 - 16
deltachat-ios/Controller/WelcomeViewController.swift

@@ -44,6 +44,10 @@ class WelcomeViewController: UIViewController, UITableViewDataSource {
 
 class WelcomeCell: UITableViewCell {
 
+    var onLogin: VoidFunction?
+    var onScanQRCode: VoidFunction?
+    var onImportBackup: VoidFunction?
+
     private let fontSize: CGFloat = 24 // probably better to make larger for ipad
 
     private var logoView: UIImageView = {
@@ -68,12 +72,48 @@ class WelcomeCell: UITableViewCell {
         label.textColor = DcColors.grayTextColor
         label.numberOfLines = 0
         label.textAlignment = .center
+        label.makeBorder()
         return label
     }()
 
+    private lazy var loginButton: UIButton = {
+        let button = UIButton(type: .roundedRect)
+        let title = "log in to your server".uppercased()
+        button.setTitle(title, for: .normal)
+        button.titleLabel?.font = UIFont.systemFont(ofSize: 18, weight: .regular)
+        button.setTitleColor(.white, for: .normal)
+        button.backgroundColor = DcColors.primary
+        let insets = button.contentEdgeInsets
+        button.contentEdgeInsets = UIEdgeInsets(top: 8, left: 15, bottom: 8, right: 15)
+        button.layer.cornerRadius = 5
+        button.clipsToBounds = true
+        button.addTarget(self, action: #selector(loginButtonPressed(_:)), for: .touchUpInside)
+        return button
+    }()
+
+    private lazy var qrCodeButton: UIButton = {
+        let button = UIButton()
+        let title = "Scan QR code"
+        button.setTitleColor(UIColor.systemBlue, for: .normal)
+        button.setTitle(title, for: .normal)
+        button.addTarget(self, action: #selector(qrCodeButtonPressed(_:)), for: .touchUpInside)
+        return button
+    }()
+
+    private lazy var importBackupButton: UIButton = {
+        let button = UIButton()
+        let title = "Import backup"
+        button.setTitleColor(UIColor.systemBlue, for: .normal)
+        button.setTitle(title, for: .normal)
+        button.addTarget(self, action: #selector(importBackupButtonPressed(_:)), for: .touchUpInside)
+        return button
+    }()
+
+
     init() {
         super.init(style: .default, reuseIdentifier: nil)
         setupSubviews()
+        contentView.makeBorder()
     }
 
     required init?(coder: NSCoder) {
@@ -81,28 +121,44 @@ class WelcomeCell: UITableViewCell {
     }
 
     private func setupSubviews() {
-        _ = [subtitleLabel, titleLabel, logoView].map {
-            contentView.addSubview($0)
-            $0.translatesAutoresizingMaskIntoConstraints = false
-            $0.centerXAnchor.constraint(equalTo: contentView.centerXAnchor).isActive = true
-        }
 
-        // subtitleLabel.centerYAnchor.constraint(equalTo: contentView.centerYAnchor).isActive = true
-        subtitleLabel.centerYAnchor.constraint(equalTo: contentView.centerYAnchor).isActive = true
-        subtitleLabel.widthAnchor.constraint(lessThanOrEqualTo: contentView.widthAnchor, multiplier: 0.8).isActive = true
+        let verticalStackview = UIStackView(arrangedSubviews: [titleLabel, subtitleLabel])
+        verticalStackview.axis = .vertical
+        verticalStackview.spacing = 20
+        contentView.addSubview(verticalStackview)
+        verticalStackview.translatesAutoresizingMaskIntoConstraints = false
+        verticalStackview.centerYAnchor.constraint(equalTo: centerYAnchor, constant: 0).isActive = true
+        verticalStackview.centerXAnchor.constraint(equalTo: centerXAnchor).isActive = true
+        verticalStackview.widthAnchor.constraint(equalTo: contentView.widthAnchor, multiplier: 0.75).isActive = true
+
+        contentView.addSubview(logoView)
+        logoView.translatesAutoresizingMaskIntoConstraints = false
+        logoView.heightAnchor.constraint(equalTo: verticalStackview.heightAnchor, multiplier: 0.75).isActive = true
+        logoView.widthAnchor.constraint(equalTo: logoView.heightAnchor).isActive = true
+        logoView.centerXAnchor.constraint(equalTo: contentView.centerXAnchor).isActive = true
+        logoView.bottomAnchor.constraint(equalTo: verticalStackview.topAnchor, constant: -20).isActive = true
+        let logoTopAnchor = logoView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 20) // this will allow the cell to grow if needed
+        logoTopAnchor.priority = UILayoutPriority.defaultLow
+        logoTopAnchor.isActive = true
 
-        titleLabel.bottomAnchor.constraint(equalTo: subtitleLabel.topAnchor, constant: -20).isActive = true
+        contentView.addSubview(loginButton)
+        loginButton.translatesAutoresizingMaskIntoConstraints = false
+        loginButton.topAnchor.constraint(equalTo: verticalStackview.bottomAnchor, constant: 20).isActive = true
+        loginButton.centerXAnchor.constraint(equalTo: contentView.centerXAnchor).isActive = true
 
-        let layoutGuide = UILayoutGuide()
-        contentView.addLayoutGuide(layoutGuide)
 
-        layoutGuide.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 0).isActive = true
-        layoutGuide.bottomAnchor.constraint(equalTo: titleLabel.topAnchor).isActive = true
+    }
 
-        logoView.heightAnchor.constraint(equalTo: layoutGuide.heightAnchor, multiplier: 0.3).isActive = true
-        logoView.widthAnchor.constraint(equalTo: logoView.heightAnchor).isActive = true
-        logoView.bottomAnchor.constraint(equalTo: layoutGuide.bottomAnchor, constant: -20).isActive = true
+    // MARK: - actions
+    @objc private func loginButtonPressed(_ sender: UIButton) {
+        onLogin?()
+    }
 
+    @objc private func qrCodeButtonPressed(_ sender: UIButton) {
+        onScanQRCode?()
+    }
 
+    @objc private func importBackupButtonPressed(_ sender: UIButton) {
+        onImportBackup?()
     }
 }