From a36dbf142ebc185f8f14d1780ac14e20b18d59e4 Mon Sep 17 00:00:00 2001
From: Bruno Muniz Azevedo Filho <bruno@elixxir.io>
Date: Mon, 12 Dec 2022 16:41:08 -0300
Subject: [PATCH] Reusing code from gradient

---
 Sources/LaunchFeature/LaunchController.swift  |  5 +++
 Sources/LaunchFeature/LaunchView.swift        | 13 ++-----
 .../OnboardingStartController.swift           | 24 +++++--------
 .../OnboardingSuccessController.swift         | 14 +-------
 .../Views/OnboardingStartView.swift           |  3 ++
 .../Views/OnboardingSuccessView.swift         |  3 ++
 .../RestoreSuccessController.swift            | 15 +-------
 .../Views/RestoreSuccessView.swift            | 36 +++++++++----------
 Sources/Shared/Extensions/Gradient.swift      | 16 +++++++++
 .../TermsConditionsController.swift           | 12 +------
 .../TermsFeature/TermsConditionsView.swift    | 12 +++----
 11 files changed, 63 insertions(+), 90 deletions(-)
 create mode 100644 Sources/Shared/Extensions/Gradient.swift

diff --git a/Sources/LaunchFeature/LaunchController.swift b/Sources/LaunchFeature/LaunchController.swift
index 8a9b1071..e8e1911e 100644
--- a/Sources/LaunchFeature/LaunchController.swift
+++ b/Sources/LaunchFeature/LaunchController.swift
@@ -20,6 +20,11 @@ public final class LaunchController: UIViewController {
     view = screenView
   }
 
+  public override func viewDidLayoutSubviews() {
+    super.viewDidLayoutSubviews()
+    screenView.gradientLayer.frame = screenView.bounds
+  }
+
   public override func viewDidLoad() {
     super.viewDidLoad()
 
diff --git a/Sources/LaunchFeature/LaunchView.swift b/Sources/LaunchFeature/LaunchView.swift
index 40f6fb44..7fe9ebaf 100644
--- a/Sources/LaunchFeature/LaunchView.swift
+++ b/Sources/LaunchFeature/LaunchView.swift
@@ -3,26 +3,19 @@ import AppResources
 
 final class LaunchView: UIView {
   let imageView = UIImageView()
-  let gradientLayer = CAGradientLayer()
+  let gradientLayer = CAGradientLayer.xxGradient()
 
   init() {
     super.init(frame: .zero)
 
-    gradientLayer.colors = [
-      UIColor(red: 122/255, green: 235/255, blue: 239/255, alpha: 1).cgColor,
-      UIColor(red: 56/255, green: 204/255, blue: 232/255, alpha: 1).cgColor,
-      UIColor(red: 63/255, green: 186/255, blue: 253/255, alpha: 1).cgColor,
-      UIColor(red: 98/255, green: 163/255, blue: 255/255, alpha: 1).cgColor
-    ]
-    gradientLayer.startPoint = CGPoint(x: 1, y: 0)
-    gradientLayer.endPoint = CGPoint(x: 0, y: 1)
-    layer.insertSublayer(gradientLayer, at: 0)
     imageView.image = Asset.splash.image
     imageView.contentMode = .scaleAspectFit
     backgroundColor = Asset.neutralWhite.color
 
     addSubview(imageView)
 
+    layer.insertSublayer(gradientLayer, at: 0)
+
     imageView.snp.makeConstraints {
       $0.center.equalToSuperview()
       $0.left.equalToSuperview().offset(100)
diff --git a/Sources/OnboardingFeature/Controllers/OnboardingStartController.swift b/Sources/OnboardingFeature/Controllers/OnboardingStartController.swift
index cfa8dad0..ba4759a6 100644
--- a/Sources/OnboardingFeature/Controllers/OnboardingStartController.swift
+++ b/Sources/OnboardingFeature/Controllers/OnboardingStartController.swift
@@ -17,25 +17,13 @@ public final class OnboardingStartController: UIViewController {
   public override func viewWillAppear(_ animated: Bool) {
     super.viewWillAppear(animated)
     navigationItem.backButtonTitle = ""
-    navigationController?.navigationBar.customize(translucent: true)
+    navigationController?.navigationBar
+      .customize(translucent: true)
   }
 
   public override func viewDidLayoutSubviews() {
     super.viewDidLayoutSubviews()
-
-    let gradient = CAGradientLayer()
-    gradient.colors = [
-      UIColor(red: 122/255, green: 235/255, blue: 239/255, alpha: 1).cgColor,
-      UIColor(red: 56/255, green: 204/255, blue: 232/255, alpha: 1).cgColor,
-      UIColor(red: 63/255, green: 186/255, blue: 253/255, alpha: 1).cgColor,
-      UIColor(red: 98/255, green: 163/255, blue: 255/255, alpha: 1).cgColor
-    ]
-
-    gradient.startPoint = CGPoint(x: 0, y: 0)
-    gradient.endPoint = CGPoint(x: 1, y: 1)
-
-    gradient.frame = screenView.bounds
-    screenView.layer.insertSublayer(gradient, at: 0)
+    screenView.gradientLayer.frame = screenView.bounds
   }
 
   public override func viewDidLoad() {
@@ -45,7 +33,11 @@ public final class OnboardingStartController: UIViewController {
       .startButton
       .publisher(for: .touchUpInside)
       .sink { [unowned self] in
-        navigator.perform(PresentTermsAndConditions(replacing: false, on: navigationController!))
+        navigator.perform(
+          PresentTermsAndConditions(
+            replacing: false,
+            on: navigationController!
+          ))
       }.store(in: &cancellables)
   }
 }
diff --git a/Sources/OnboardingFeature/Controllers/OnboardingSuccessController.swift b/Sources/OnboardingFeature/Controllers/OnboardingSuccessController.swift
index cdf7a999..b0d3b01d 100644
--- a/Sources/OnboardingFeature/Controllers/OnboardingSuccessController.swift
+++ b/Sources/OnboardingFeature/Controllers/OnboardingSuccessController.swift
@@ -26,19 +26,7 @@ public final class OnboardingSuccessController: UIViewController {
 
   public override func viewDidLayoutSubviews() {
     super.viewDidLayoutSubviews()
-
-    let gradient = CAGradientLayer()
-    gradient.colors = [
-      UIColor(red: 122/255, green: 235/255, blue: 239/255, alpha: 1).cgColor,
-      UIColor(red: 56/255, green: 204/255, blue: 232/255, alpha: 1).cgColor,
-      UIColor(red: 63/255, green: 186/255, blue: 253/255, alpha: 1).cgColor,
-      UIColor(red: 98/255, green: 163/255, blue: 255/255, alpha: 1).cgColor
-    ]
-
-    gradient.startPoint = CGPoint(x: 0, y: 0)
-    gradient.endPoint = CGPoint(x: 1, y: 1)
-    gradient.frame = screenView.bounds
-    screenView.layer.insertSublayer(gradient, at: 0)
+    screenView.gradientLayer.frame = screenView.bounds
   }
 
   public override func viewWillAppear(_ animated: Bool) {
diff --git a/Sources/OnboardingFeature/Views/OnboardingStartView.swift b/Sources/OnboardingFeature/Views/OnboardingStartView.swift
index b0864bb3..fffc54b3 100644
--- a/Sources/OnboardingFeature/Views/OnboardingStartView.swift
+++ b/Sources/OnboardingFeature/Views/OnboardingStartView.swift
@@ -8,6 +8,7 @@ final class OnboardingStartView: UIView {
   let logoImageView = UIImageView()
   let startButton = CapsuleButton()
   let bottomImageView = UIImageView()
+  let gradientLayer = CAGradientLayer.xxGradient()
 
   init() {
     super.init(frame: .zero)
@@ -34,6 +35,8 @@ final class OnboardingStartView: UIView {
     addSubview(logoImageView)
     addSubview(stackView)
 
+    layer.insertSublayer(gradientLayer, at: 0)
+
     logoImageView.snp.makeConstraints {
       $0.top.equalToSuperview().offset(130)
       $0.centerX.equalToSuperview()
diff --git a/Sources/OnboardingFeature/Views/OnboardingSuccessView.swift b/Sources/OnboardingFeature/Views/OnboardingSuccessView.swift
index c539521c..bc3da3b6 100644
--- a/Sources/OnboardingFeature/Views/OnboardingSuccessView.swift
+++ b/Sources/OnboardingFeature/Views/OnboardingSuccessView.swift
@@ -6,6 +6,7 @@ final class OnboardingSuccessView: UIView {
   let titleLabel = UILabel()
   let imageView = UIImageView()
   let nextButton = CapsuleButton()
+  let gradientLayer = CAGradientLayer.xxGradient()
 
   init() {
     super.init(frame: .zero)
@@ -15,6 +16,8 @@ final class OnboardingSuccessView: UIView {
     addSubview(titleLabel)
     addSubview(nextButton)
 
+    layer.insertSublayer(gradientLayer, at: 0)
+
     imageView.snp.makeConstraints {
       $0.top.equalTo(safeAreaLayoutGuide).offset(40)
       $0.left.equalToSuperview().offset(40)
diff --git a/Sources/RestoreFeature/Controllers/RestoreSuccessController.swift b/Sources/RestoreFeature/Controllers/RestoreSuccessController.swift
index cad61bee..adb28a96 100644
--- a/Sources/RestoreFeature/Controllers/RestoreSuccessController.swift
+++ b/Sources/RestoreFeature/Controllers/RestoreSuccessController.swift
@@ -29,20 +29,7 @@ public final class RestoreSuccessController: UIViewController {
 
   public override func viewDidLayoutSubviews() {
     super.viewDidLayoutSubviews()
-
-    let gradient = CAGradientLayer()
-    gradient.colors = [
-      UIColor(red: 122/255, green: 235/255, blue: 239/255, alpha: 1).cgColor,
-      UIColor(red: 56/255, green: 204/255, blue: 232/255, alpha: 1).cgColor,
-      UIColor(red: 63/255, green: 186/255, blue: 253/255, alpha: 1).cgColor,
-      UIColor(red: 98/255, green: 163/255, blue: 255/255, alpha: 1).cgColor
-    ]
-
-    gradient.startPoint = CGPoint(x: 0, y: 0)
-    gradient.endPoint = CGPoint(x: 1, y: 1)
-
-    gradient.frame = screenView.bounds
-    screenView.layer.insertSublayer(gradient, at: 0)
+    screenView.gradientLayer.frame = screenView.bounds
   }
 
   private func setupBindings() {
diff --git a/Sources/RestoreFeature/Views/RestoreSuccessView.swift b/Sources/RestoreFeature/Views/RestoreSuccessView.swift
index e8551f0d..bfaac5b4 100644
--- a/Sources/RestoreFeature/Views/RestoreSuccessView.swift
+++ b/Sources/RestoreFeature/Views/RestoreSuccessView.swift
@@ -7,6 +7,7 @@ final class RestoreSuccessView: UIView {
   let titleLabel = UILabel()
   let subtitleLabel = UILabel()
   let nextButton = CapsuleButton()
+  let gradientLayer = CAGradientLayer.xxGradient()
 
   init() {
     super.init(frame: .zero)
@@ -24,27 +25,26 @@ final class RestoreSuccessView: UIView {
     addSubview(subtitleLabel)
     addSubview(nextButton)
 
-    iconImageView.snp.makeConstraints { make in
-      make.top.equalTo(safeAreaLayoutGuide).offset(40)
-      make.left.equalToSuperview().offset(40)
-    }
+    layer.insertSublayer(gradientLayer, at: 0)
 
-    titleLabel.snp.makeConstraints { make in
-      make.top.equalTo(iconImageView.snp.bottom).offset(40)
-      make.left.equalToSuperview().offset(40)
-      make.right.equalToSuperview().offset(-90)
+    iconImageView.snp.makeConstraints {
+      $0.top.equalTo(safeAreaLayoutGuide).offset(40)
+      $0.left.equalToSuperview().offset(40)
     }
-
-    subtitleLabel.snp.makeConstraints { make in
-      make.top.equalTo(titleLabel.snp.bottom).offset(30)
-      make.left.equalToSuperview().offset(40)
-      make.right.equalToSuperview().offset(-90)
+    titleLabel.snp.makeConstraints {
+      $0.top.equalTo(iconImageView.snp.bottom).offset(40)
+      $0.left.equalToSuperview().offset(40)
+      $0.right.equalToSuperview().offset(-90)
     }
-
-    nextButton.snp.makeConstraints { make in
-      make.left.equalToSuperview().offset(24)
-      make.right.equalToSuperview().offset(-24)
-      make.bottom.equalToSuperview().offset(-60)
+    subtitleLabel.snp.makeConstraints {
+      $0.top.equalTo(titleLabel.snp.bottom).offset(30)
+      $0.left.equalToSuperview().offset(40)
+      $0.right.equalToSuperview().offset(-90)
+    }
+    nextButton.snp.makeConstraints {
+      $0.left.equalToSuperview().offset(24)
+      $0.right.equalToSuperview().offset(-24)
+      $0.bottom.equalToSuperview().offset(-60)
     }
 
     setTitle(Localized.AccountRestore.Success.title)
diff --git a/Sources/Shared/Extensions/Gradient.swift b/Sources/Shared/Extensions/Gradient.swift
new file mode 100644
index 00000000..2587215c
--- /dev/null
+++ b/Sources/Shared/Extensions/Gradient.swift
@@ -0,0 +1,16 @@
+import UIKit
+
+public extension CAGradientLayer {
+  static func xxGradient() -> CAGradientLayer {
+    let gradient = CAGradientLayer()
+    gradient.colors = [
+      UIColor(red: 122/255, green: 235/255, blue: 239/255, alpha: 1).cgColor,
+      UIColor(red: 56/255, green: 204/255, blue: 232/255, alpha: 1).cgColor,
+      UIColor(red: 63/255, green: 186/255, blue: 253/255, alpha: 1).cgColor,
+      UIColor(red: 98/255, green: 163/255, blue: 255/255, alpha: 1).cgColor
+    ]
+    gradient.startPoint = CGPoint(x: 0, y: 0)
+    gradient.endPoint = CGPoint(x: 1, y: 1)
+    return gradient
+  }
+}
diff --git a/Sources/TermsFeature/TermsConditionsController.swift b/Sources/TermsFeature/TermsConditionsController.swift
index 708e8d33..84fd76d0 100644
--- a/Sources/TermsFeature/TermsConditionsController.swift
+++ b/Sources/TermsFeature/TermsConditionsController.swift
@@ -31,17 +31,7 @@ public final class TermsConditionsController: UIViewController {
 
   public override func viewDidLayoutSubviews() {
     super.viewDidLayoutSubviews()
-    let gradient = CAGradientLayer()
-    gradient.colors = [
-      UIColor(red: 122/255, green: 235/255, blue: 239/255, alpha: 1).cgColor,
-      UIColor(red: 56/255, green: 204/255, blue: 232/255, alpha: 1).cgColor,
-      UIColor(red: 63/255, green: 186/255, blue: 253/255, alpha: 1).cgColor,
-      UIColor(red: 98/255, green: 163/255, blue: 255/255, alpha: 1).cgColor
-    ]
-    gradient.startPoint = CGPoint(x: 0, y: 0)
-    gradient.endPoint = CGPoint(x: 1, y: 1)
-    gradient.frame = screenView.bounds
-    screenView.layer.insertSublayer(gradient, at: 0)
+    screenView.gradientLayer.frame = screenView.bounds
   }
 
   public override func viewDidLoad() {
diff --git a/Sources/TermsFeature/TermsConditionsView.swift b/Sources/TermsFeature/TermsConditionsView.swift
index e3dd19a9..e04670c3 100644
--- a/Sources/TermsFeature/TermsConditionsView.swift
+++ b/Sources/TermsFeature/TermsConditionsView.swift
@@ -7,6 +7,7 @@ final class TermsConditionsView: UIView {
   let logoImageView = UIImageView()
   let showTermsButton = CapsuleButton()
   let radioComponent = RadioTextComponent()
+  let gradientLayer = CAGradientLayer.xxGradient()
 
   init() {
     super.init(frame: .zero)
@@ -25,33 +26,28 @@ final class TermsConditionsView: UIView {
     addSubview(radioComponent)
     addSubview(showTermsButton)
 
-    setupConstraints()
-  }
-
-  required init?(coder: NSCoder) { nil }
+    layer.insertSublayer(gradientLayer, at: 0)
 
-  private func setupConstraints() {
     logoImageView.snp.makeConstraints {
       $0.top.equalTo(safeAreaLayoutGuide).offset(30)
       $0.centerX.equalToSuperview()
     }
-
     radioComponent.snp.makeConstraints {
       $0.left.equalToSuperview().offset(40)
       $0.right.equalToSuperview().offset(-40)
       $0.bottom.equalTo(nextButton.snp.top).offset(-20)
     }
-
     nextButton.snp.makeConstraints {
       $0.left.equalToSuperview().offset(40)
       $0.right.equalToSuperview().offset(-40)
       $0.bottom.equalTo(showTermsButton.snp.top).offset(-10)
     }
-
     showTermsButton.snp.makeConstraints {
       $0.left.equalToSuperview().offset(40)
       $0.right.equalToSuperview().offset(-40)
       $0.bottom.equalTo(safeAreaLayoutGuide).offset(-40)
     }
   }
+
+  required init?(coder: NSCoder) { nil }
 }
-- 
GitLab