Code refactoring
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
//
|
||||
// LicenceListViewController.swift
|
||||
// OpenSourceControllerDemo
|
||||
//
|
||||
// Created by Florian Gabach on 23/10/2018.
|
||||
// Copyright © 2018 OpenSourceController. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
final class LicenceListViewController: UITableViewController {
|
||||
|
||||
// MARK: - Var
|
||||
|
||||
fileprivate let reuseIdentifier = "openSourceCell"
|
||||
|
||||
fileprivate var config: OpenSourceControllerConfig
|
||||
|
||||
fileprivate var downloadedLicence: [LicenceFile]
|
||||
|
||||
// MARK: - Lifecyle
|
||||
|
||||
init(downloadedLicence: [LicenceFile], config: OpenSourceControllerConfig) {
|
||||
self.config = config
|
||||
self.downloadedLicence = downloadedLicence
|
||||
super.init(style: .plain)
|
||||
}
|
||||
|
||||
required init?(coder aDecoder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
self.prepareTableView()
|
||||
}
|
||||
|
||||
// MARK: - Prepare
|
||||
|
||||
fileprivate func prepareTableView() {
|
||||
self.tableView.tableFooterView = UIView()
|
||||
self.tableView.register(OpenSourceTableViewCell.self, forCellReuseIdentifier: self.reuseIdentifier)
|
||||
self.tableView.dataSource = self
|
||||
self.tableView.delegate = self
|
||||
self.tableView.separatorStyle = .singleLine
|
||||
self.tableView.backgroundColor = self.config.uiConfig.backgroundColor
|
||||
}
|
||||
}
|
||||
|
||||
extension LicenceListViewController {
|
||||
|
||||
// MARK: - Table View Data Source
|
||||
|
||||
override func numberOfSections(in tableView: UITableView) -> Int {
|
||||
return 1
|
||||
}
|
||||
|
||||
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||
return self.downloadedLicence.count
|
||||
}
|
||||
|
||||
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||||
var cell = tableView.dequeueReusableCell(withIdentifier: self.reuseIdentifier,
|
||||
for: indexPath) as? OpenSourceTableViewCell
|
||||
// Init cell
|
||||
if cell == nil {
|
||||
cell = OpenSourceTableViewCell(style: UITableViewCell.CellStyle.default, reuseIdentifier: self.reuseIdentifier)
|
||||
}
|
||||
|
||||
// Configure the cell with licence
|
||||
if let licence = self.downloadedLicence.get(at: indexPath.row) {
|
||||
cell?.configure(licence: licence, config: self.config)
|
||||
}
|
||||
|
||||
return cell!
|
||||
}
|
||||
|
||||
override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
|
||||
return UITableView.automaticDimension
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
//
|
||||
// LoadingViewController.swift
|
||||
// OpenSourceControllerDemo
|
||||
//
|
||||
// Created by Florian Gabach on 23/10/2018.
|
||||
// Copyright © 2018 OpenSourceController. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
final class LoadingViewController: UIViewController {
|
||||
|
||||
// MARK: - Var
|
||||
|
||||
fileprivate lazy var activityIndicator: UIActivityIndicatorView = {
|
||||
let activityIndicator = UIActivityIndicatorView(style: UIActivityIndicatorView.Style.gray)
|
||||
activityIndicator.startAnimating()
|
||||
return activityIndicator
|
||||
}()
|
||||
|
||||
fileprivate var config: OpenSourceControllerConfig
|
||||
|
||||
// MARK: - Lifecycle
|
||||
|
||||
init(configuration: OpenSourceControllerConfig) {
|
||||
self.config = configuration
|
||||
super.init(nibName: nil, bundle: nil)
|
||||
}
|
||||
|
||||
required init?(coder aDecoder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
self.view.backgroundColor = self.config.uiConfig.backgroundColor
|
||||
|
||||
self.view.addSubview(self.activityIndicator)
|
||||
self.activityIndicator.pinCenter(to: self.view)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
//
|
||||
// OpenSourceTableViewCell.swift
|
||||
// Pods
|
||||
//
|
||||
// Created by Florian Gabach on 05/02/2017.
|
||||
|
||||
import UIKit
|
||||
|
||||
final class OpenSourceTableViewCell: UITableViewCell {
|
||||
|
||||
// MARK: - Lifecycle
|
||||
|
||||
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
|
||||
super.init(style: .default, reuseIdentifier: reuseIdentifier)
|
||||
self.prepareCellComponent()
|
||||
}
|
||||
|
||||
required init?(coder aDecoder: NSCoder) {
|
||||
super.init(coder: aDecoder)
|
||||
}
|
||||
|
||||
// MARK: - Prepare
|
||||
|
||||
func prepareCellComponent() {
|
||||
self.textLabel?.numberOfLines = 0
|
||||
self.accessoryType = .none
|
||||
self.selectionStyle = .none
|
||||
}
|
||||
|
||||
// MARK: - Configure
|
||||
|
||||
/// Initialize the cell content with Licence model
|
||||
///
|
||||
/// - Parameter licence: the licence model
|
||||
func configure(licence: LicenceFile, config: OpenSourceControllerConfig) {
|
||||
// Set text
|
||||
self.textLabel?.attributedText = licence.attributedContent
|
||||
self.textLabel?.textColor = config.uiConfig.licenceTextColor
|
||||
|
||||
// Background
|
||||
if let backgroundColor = config.uiConfig.licenceBackgroundColor {
|
||||
self.backgroundColor = backgroundColor
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
//
|
||||
// OpenSourceViewController.swift
|
||||
// Pods
|
||||
//
|
||||
// Created by Florian Gabach on 05/02/2017.
|
||||
|
||||
import UIKit
|
||||
|
||||
final class OpenSourceViewController: UIViewController {
|
||||
|
||||
// MARK: - Var
|
||||
|
||||
fileprivate var showCloseButton: Bool
|
||||
|
||||
fileprivate var licences: [LicenceFile]
|
||||
|
||||
fileprivate var config: OpenSourceControllerConfig
|
||||
|
||||
fileprivate lazy var loadingController = {
|
||||
return LoadingViewController(configuration: config)
|
||||
}()
|
||||
|
||||
fileprivate lazy var closeButton: UIBarButtonItem = {
|
||||
let closeButton = UIBarButtonItem(barButtonSystemItem: .stop, target: self, action: #selector(self.closePicker))
|
||||
closeButton.tintColor = self.config.uiConfig.closeButtonColor ?? UIColor.black
|
||||
return closeButton
|
||||
}()
|
||||
|
||||
// MARK: - Lifecyle
|
||||
|
||||
init(licences: [LicenceFile], showCloseButton: Bool, configuration: OpenSourceControllerConfig) {
|
||||
self.licences = licences
|
||||
self.showCloseButton = showCloseButton
|
||||
self.config = configuration
|
||||
super.init(nibName: nil, bundle: nil)
|
||||
}
|
||||
|
||||
required init?(coder aDecoder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
self.title = self.config.title
|
||||
|
||||
self.prepareCloseButton()
|
||||
self.prepareStyle()
|
||||
|
||||
self.add(self.loadingController)
|
||||
self.prepareLicences()
|
||||
}
|
||||
|
||||
// MARK: - Prepare
|
||||
|
||||
fileprivate func prepareStyle() {
|
||||
// Apply navigation bar tint color if needed
|
||||
if let tintColor = self.config.uiConfig.barTintColor {
|
||||
self.navigationController?.navigationBar.barTintColor = tintColor
|
||||
}
|
||||
|
||||
// Apply navigation bar text color if needed
|
||||
if let textColor = self.config.uiConfig.titleColor {
|
||||
let attribut = [NSAttributedString.Key.foregroundColor: textColor]
|
||||
self.navigationController?.navigationBar.titleTextAttributes = attribut
|
||||
}
|
||||
}
|
||||
|
||||
fileprivate func prepareLicences() {
|
||||
LicenceLoader.downloadLicences(licences: licences, config: config) { [weak self] in
|
||||
guard let strongSelf = self else { return }
|
||||
let listController = LicenceListViewController(downloadedLicence: strongSelf.licences, config: strongSelf.config)
|
||||
strongSelf.loadingController.remove()
|
||||
strongSelf.add(listController)
|
||||
}
|
||||
}
|
||||
|
||||
fileprivate func prepareCloseButton() {
|
||||
if showCloseButton {
|
||||
self.navigationItem.rightBarButtonItem = closeButton
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Action
|
||||
|
||||
@objc fileprivate func closePicker() {
|
||||
self.dismiss(animated: true, completion: nil)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user