Browse Source

AppUpdate, MultiMediaManager - apply SwiftLint

pull/1/head
InKwon James Kim 5 years ago
parent
commit
7eb883ffc7
  1. 16
      GME Remit/Modules/AppUpdate/Application Logic/Interactor/AppUpdateInteractor.swift
  2. 6
      GME Remit/Modules/AppUpdate/Application Logic/Service/AppUpdateService.swift
  3. 12
      GME Remit/Modules/AppUpdate/User Interface/Presenter/AppUpdatePresenter.swift
  4. 108
      GME Remit/Modules/AppUpdate/User Interface/View/AppUpdateViewController.swift
  5. 30
      GME Remit/Modules/AppUpdate/User Interface/Wireframe/AppUpdateWireframe.swift
  6. 22
      GME Remit/Modules/GmeContacts/User Interface/View/GmeContactsViewController.swift
  7. 304
      GME Remit/Utilities/MultiMediaManager.swift

16
GME Remit/Modules/AppUpdate/Application Logic/Interactor/AppUpdateInteractor.swift

@ -10,18 +10,18 @@ import Foundation
class AppUpdateInteractor {
// MARK: Properties
// MARK: Properties
weak var output: AppUpdateInteractorOutput?
private let service: AppUpdateServiceType
weak var output: AppUpdateInteractorOutput?
private let service: AppUpdateServiceType
// MARK: Initialization
// MARK: Initialization
init(service: AppUpdateServiceType) {
self.service = service
}
init(service: AppUpdateServiceType) {
self.service = service
}
// MARK: Converting entities
// MARK: Converting entities
}
// MARK: AppUpdate interactor input interface

6
GME Remit/Modules/AppUpdate/Application Logic/Service/AppUpdateService.swift

@ -10,9 +10,9 @@ import Foundation
class AppUpdateService: AppUpdateServiceType {
// MARK: Properties
// MARK: Properties
// MARK: Initialization
// MARK: Initialization
// MARK: Data management
// MARK: Data management
}

12
GME Remit/Modules/AppUpdate/User Interface/Presenter/AppUpdatePresenter.swift

@ -10,16 +10,16 @@ import Foundation
class AppUpdatePresenter {
// MARK: Properties
// MARK: Properties
weak var view: AppUpdateViewInterface?
var interactor: AppUpdateInteractorInput?
var wireframe: AppUpdateWireframeInput?
weak var view: AppUpdateViewInterface?
var interactor: AppUpdateInteractorInput?
var wireframe: AppUpdateWireframeInput?
// MARK: Converting entities
// MARK: Converting entities
}
// MARK: AppUpdate module interface
// MARK: AppUpdate module interface
extension AppUpdatePresenter: AppUpdateModuleInterface {

108
GME Remit/Modules/AppUpdate/User Interface/View/AppUpdateViewController.swift

@ -10,82 +10,70 @@ import UIKit
class AppUpdateViewController: UIViewController {
struct StringConstants {
let updateMessageText = "new_update_is_available_text".localized()
let updateText = "update_text".localized()
let notNowText = "not_now_text".localized()
}
struct StringConstants {
let updateMessageText = "new_update_is_available_text".localized()
let updateText = "update_text".localized()
let notNowText = "not_now_text".localized()
}
// MARK: Properties
@IBOutlet weak var updateButton: UIButton!
// MARK: Properties
@IBOutlet weak var updateButton: UIButton!
@IBOutlet weak var updateMessageTextLabel: UILabel!
@IBOutlet weak var notNowButton: UIButton!
var presenter: AppUpdateModuleInterface?
@IBOutlet weak var updateMessageTextLabel: UILabel!
@IBOutlet weak var notNowButton: UIButton!
var presenter: AppUpdateModuleInterface?
// MARK: IBOutlets
// MARK: IBOutlets
// MARK: VC's Life cycle
// MARK: VC's Life cycle
override func viewDidLoad() {
super.viewDidLoad()
self.setup()
}
override func viewDidLoad() {
super.viewDidLoad()
self.setup()
}
// MARK: IBActions
// MARK: IBActions
@IBAction func dismiss(_ sender: Any) {
self.dismiss()
}
@IBAction func dismiss(_ sender: Any) {
self.dismiss()
}
@IBAction func update(_ sender: UIButton) {
self.update()
}
@IBAction func update(_ sender: UIButton) {
self.update()
}
// MARK: Other Functions
// MARK: Other Functions
private func setup() {
let shouldHideDismiss = Utility.isCriticalUpdate()
self.notNowButton.isHidden = shouldHideDismiss
configureUpdateButton()
configureText()
}
private func setup() {
let shouldHideDismiss = Utility.isCriticalUpdate()
self.notNowButton.isHidden = shouldHideDismiss
configureUpdateButton()
configureText()
}
private func configureText() {
self.updateMessageTextLabel.text = StringConstants().updateMessageText
self.updateButton.setTitle(StringConstants().updateText, for: UIControl.State.normal)
self.notNowButton.setTitle(StringConstants().notNowText, for: UIControl.State.normal)
}
private func configureText() {
self.updateMessageTextLabel.text = StringConstants().updateMessageText
self.updateButton.setTitle(StringConstants().updateText, for: UIControl.State.normal)
self.notNowButton.setTitle(StringConstants().notNowText, for: UIControl.State.normal)
}
func configureUpdateButton() {
self.updateButton.layer.borderColor = UIColor.white.cgColor
self.updateButton.layer.borderWidth = 1
func configureUpdateButton() {
self.updateButton.layer.borderColor = UIColor.white.cgColor
self.updateButton.layer.borderWidth = 1
self.updateButton.layer.addShadow(offset: CGSize.init(width: -1, height: 1))
self.updateButton.layer.addShadow(offset: CGSize.init(width: -1, height: 1))
}
}
func dismiss() {
self.dismiss(animated: true, completion: nil)
}
func dismiss() {
self.dismiss(animated: true, completion: nil)
}
func update() {
let urlStr = "itms-apps://itunes.apple.com/gh/app/gme-remit/id1439161261?mt=8"
if #available(iOS 10.0, *) {
UIApplication.shared.open(URL(string: urlStr)!, options: convertToUIApplicationOpenExternalURLOptionsKeyDictionary([:]), completionHandler: nil)
} else {
UIApplication.shared.openURL(URL(string: urlStr)!)
}
}
func update() {
let urlStr = "itms-apps://itunes.apple.com/gh/app/gme-remit/id1439161261?mt=8"
UIApplication.tryURL(url: urlStr)
}
}
// MARK: AppUpdateViewInterface
extension AppUpdateViewController: AppUpdateViewInterface {
}
// Helper function inserted by Swift 4.2 migrator.
fileprivate func convertToUIApplicationOpenExternalURLOptionsKeyDictionary(_ input: [String: Any]) -> [UIApplication.OpenExternalURLOptionsKey: Any] {
return Dictionary(uniqueKeysWithValues: input.map { key, value in (UIApplication.OpenExternalURLOptionsKey(rawValue: key), value)})
}
extension AppUpdateViewController: AppUpdateViewInterface {}

30
GME Remit/Modules/AppUpdate/User Interface/Wireframe/AppUpdateWireframe.swift

@ -9,23 +9,23 @@
import UIKit
class AppUpdateWireframe {
weak var view: UIViewController!
weak var view: UIViewController!
}
extension AppUpdateWireframe: AppUpdateWireframeInput {
var storyboardName: String {return "AppUpdate"}
func getMainView() -> UIViewController {
let service = AppUpdateService()
let interactor = AppUpdateInteractor(service: service)
let presenter = AppUpdatePresenter()
let viewController = viewControllerFromStoryboard(of: AppUpdateViewController.self)
viewController.presenter = presenter
interactor.output = presenter
presenter.interactor = interactor
presenter.wireframe = self
presenter.view = viewController
self.view = viewController
return viewController
}
var storyboardName: String {return "AppUpdate"}
func getMainView() -> UIViewController {
let service = AppUpdateService()
let interactor = AppUpdateInteractor(service: service)
let presenter = AppUpdatePresenter()
let viewController = viewControllerFromStoryboard(of: AppUpdateViewController.self)
viewController.presenter = presenter
interactor.output = presenter
presenter.interactor = interactor
presenter.wireframe = self
presenter.view = viewController
self.view = viewController
return viewController
}
}

22
GME Remit/Modules/GmeContacts/User Interface/View/GmeContactsViewController.swift

@ -77,15 +77,7 @@ class GmeContactsViewController: UIViewController {
private func call(number: String) {
let number = number.removeWhitespacesInBetween()
if let url = URL(string: "tel://\(number)") {
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(
url,
options: convertToUIApplicationOpenExternalURLOptionsKeyDictionary([:]),
completionHandler: nil
)
}
}
UIApplication.tryURL(url: "tel://\(number)")
}
override func setupTabItem() {
@ -133,18 +125,6 @@ extension GmeContactsViewController {
presenter.view = self
wireframe.view = self
}
// Helper function inserted by Swift 4.2 migrator.
private func convertToUIApplicationOpenExternalURLOptionsKeyDictionary(
_ input: [String: Any]
) -> [UIApplication.OpenExternalURLOptionsKey: Any] {
return Dictionary(
uniqueKeysWithValues: input.map { key, value in
(UIApplication.OpenExternalURLOptionsKey(rawValue: key), value)
}
)
}
}
extension GmeContactsViewController: UITableViewDelegate {

304
GME Remit/Utilities/MultiMediaManager.swift

@ -5,7 +5,6 @@
// Created by shishir sapkota
//
import UIKit
import Foundation
import AVFoundation
@ -13,153 +12,162 @@ import Photos
//import RSKImageCropper
@objc protocol MultiMediaManagerDelegate {
@objc optional func cropSize() -> CGSize
@objc optional func didFinishPickingWithImage(image: UIImage)
func didFinishPickingWithError(error: String)
@objc optional func didFinishPickingVideo(url: URL)
@objc optional func cropSize() -> CGSize
@objc optional func didFinishPickingWithImage(image: UIImage)
func didFinishPickingWithError(error: String)
@objc optional func didFinishPickingVideo(url: URL)
}
@objc protocol MultimediaPresenterProtocol {
func presenting() -> UIViewController
func presenting() -> UIViewController
}
class MultiMediaManager: NSObject {
private let imagePicker = UIImagePickerController()
private weak var presenter: MultimediaPresenterProtocol?
weak var delegate: MultiMediaManagerDelegate?
init(presenter: MultimediaPresenterProtocol) {
self.presenter = presenter
super.init()
imagePicker.delegate = self
imagePicker.allowsEditing = true
private let imagePicker = UIImagePickerController()
private weak var presenter: MultimediaPresenterProtocol?
weak var delegate: MultiMediaManagerDelegate?
init(presenter: MultimediaPresenterProtocol) {
self.presenter = presenter
super.init()
imagePicker.delegate = self
imagePicker.allowsEditing = true
}
func openPicker(mode: UIImagePickerController.CameraCaptureMode) {
var presentationStyle: UIAlertController.Style = .actionSheet
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.pad) {
presentationStyle = .alert
}
func openPicker(mode: UIImagePickerController.CameraCaptureMode) {
var presentationStyle: UIAlertController.Style = .actionSheet
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.pad) {
presentationStyle = .alert
}
//
let alertController = UIAlertController(title: nil, message: "Gme would like to access your camera", preferredStyle: presentationStyle)
let cameraAction = UIAlertAction(title: "camera_text".localized(), style: UIAlertAction.Style.default) { (action) in
self.openCamera(mode: .photo)
}
let galleryAction = UIAlertAction(title: "gallery_text".localized(), style: UIAlertAction.Style.default) { (action) in
self.showPhotoGallery(mode: mode)
}
let cancelAction = UIAlertAction(title: "cancel_text".localized(), style: .cancel, handler: nil)
alertController.addAction(cameraAction)
alertController.addAction(galleryAction)
alertController.addAction(cancelAction)
self.presentViewController(viewController: alertController, animated: true, completion: nil)
let alertController = UIAlertController(
title: nil,
message: "Gme would like to access your camera",
preferredStyle: presentationStyle
)
let cameraAction = UIAlertAction(
title: "camera_text".localized(),
style: UIAlertAction.Style.default
) { (_) in
self.openCamera(mode: .photo)
}
private func presentViewController(viewController: UIViewController, animated: Bool, completion: (() -> Void)?) {
OperationQueue.main.addOperation {
self.presenter?.presenting().present(viewController, animated: animated, completion: completion)
}
let galleryAction = UIAlertAction(
title: "gallery_text".localized(),
style: UIAlertAction.Style.default
) { (_) in
self.showPhotoGallery(mode: mode)
}
func openCamera(mode: UIImagePickerController.CameraCaptureMode) {
func openPicker() {
self.imagePicker.sourceType = UIImagePickerController.SourceType.camera
let mediaTypes = ["public.image"]
self.imagePicker.mediaTypes = mediaTypes
self.imagePicker.cameraCaptureMode = mode
self.imagePicker.allowsEditing = false
self.presentViewController(viewController: self.imagePicker, animated: true, completion: nil)
}
PermissionHelper.isAllowedToRecordVideo { (isAllowed) in
if isAllowed {
openPicker()
}else {
self.presenter?.presenting().alert(message: "camera_access_denied_text", okAction: {
let url = URL(string: UIApplication.openSettingsURLString)!
if #available(iOS 10.0, *) {
UIApplication.shared.open(url, options: convertToUIApplicationOpenExternalURLOptionsKeyDictionary([:]), completionHandler: nil)
} else {
// Fallback on earlier versions
}
})
}
}
let cancelAction = UIAlertAction(title: "cancel_text".localized(), style: .cancel, handler: nil)
alertController.addAction(cameraAction)
alertController.addAction(galleryAction)
alertController.addAction(cancelAction)
self.presentViewController(viewController: alertController, animated: true, completion: nil)
}
private func presentViewController(
viewController: UIViewController,
animated: Bool,
completion: (() -> Void)?
) {
OperationQueue.main.addOperation {
self.presenter?.presenting().present(viewController, animated: animated, completion: completion)
}
private func showPhotoGallery(mode: UIImagePickerController.CameraCaptureMode) {
PermissionHelper.isAllowedToShowGallary { (isAllowed) in
if isAllowed {
self.imagePicker.allowsEditing = false
self.imagePicker.sourceType = UIImagePickerController.SourceType.photoLibrary
let mediaTypes = mode == .video ? ["public.image", "public.movie"] : ["public.image"]
self.imagePicker.mediaTypes = mediaTypes
self.presentViewController(viewController: self.imagePicker, animated: true, completion: nil)
}else {
self.presenter?.presenting().alert(message: "galery_access_denied_text".localized(), okAction: {
let url = URL(string: UIApplication.openSettingsURLString)!
if #available(iOS 10.0, *) {
UIApplication.shared.open(url, options: convertToUIApplicationOpenExternalURLOptionsKeyDictionary([:]), completionHandler: nil)
} else {
// Fallback on earlier versions
}
})
}
}
}
func openCamera(mode: UIImagePickerController.CameraCaptureMode) {
func openPicker() {
self.imagePicker.sourceType = UIImagePickerController.SourceType.camera
let mediaTypes = ["public.image"]
self.imagePicker.mediaTypes = mediaTypes
self.imagePicker.cameraCaptureMode = mode
self.imagePicker.allowsEditing = false
self.presentViewController(viewController: self.imagePicker, animated: true, completion: nil)
}
func resizeImage(image: UIImage, to targetSize: CGSize) -> UIImage? {
// This is the rect that we've calculated out and this is what is actually used below
let rect = CGRect(origin: CGPoint.zero, size: targetSize)
// Actually do the resizing to the rect using the ImageContext stuff
UIGraphicsBeginImageContextWithOptions(targetSize, false, 1.0)
image.draw(in: rect)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
PermissionHelper.isAllowedToRecordVideo { (isAllowed) in
if isAllowed {
openPicker()
} else {
self.presenter?.presenting().alert(message: "camera_access_denied_text", okAction: {
UIApplication.tryURL(url: UIApplication.openSettingsURLString)
})
}
}
}
private func showPhotoGallery(mode: UIImagePickerController.CameraCaptureMode) {
PermissionHelper.isAllowedToShowGallary { (isAllowed) in
if isAllowed {
self.imagePicker.allowsEditing = false
self.imagePicker.sourceType = UIImagePickerController.SourceType.photoLibrary
let mediaTypes = mode == .video ? ["public.image", "public.movie"] : ["public.image"]
self.imagePicker.mediaTypes = mediaTypes
self.presentViewController(viewController: self.imagePicker, animated: true, completion: nil)
} else {
self.presenter?.presenting().alert(
message: "galery_access_denied_text".localized(),
okAction: {
UIApplication.tryURL(url: UIApplication.openSettingsURLString)
}
)
}
}
}
func resizeImage(image: UIImage, to targetSize: CGSize) -> UIImage? {
// This is the rect that we've calculated out and this is what is actually used below
let rect = CGRect(origin: CGPoint.zero, size: targetSize)
// Actually do the resizing to the rect using the ImageContext stuff
UIGraphicsBeginImageContextWithOptions(targetSize, false, 1.0)
image.draw(in: rect)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
}
}
extension MultiMediaManager: UIImagePickerControllerDelegate {
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
// Local variable inserted by Swift 4.2 migrator.
let info = convertFromUIImagePickerControllerInfoKeyDictionary(info)
var completion: (()->())?
if let mediaType = info["UIImagePickerControllerMediaType"] as? String {
if mediaType == "public.image" {
if let picture = info[convertFromUIImagePickerControllerInfoKey(UIImagePickerController.InfoKey.originalImage)] as? UIImage {
if let cropsize = self.delegate?.cropSize?() {
if picture.size.width < cropsize.width || picture.size.height < cropsize.height {
self.delegate?.didFinishPickingWithError(error: "Image size must be greater than \(cropsize.width) X \(cropsize.height)")
}else {
guard let resizedImage = self.resizeImage(image: picture, to: cropsize) else { return }
completion = {
self.delegate?.didFinishPickingWithImage?(image: resizedImage)
}
// self.cropImage(image: picture)
}
}else {
completion = {
self.delegate?.didFinishPickingWithImage?(image: picture)
}
}
}
}else if mediaType == "public.movie" {
_ = info["UIImagePickerControllerMediaURL"] as! URL
return
func imagePickerController(
_ picker: UIImagePickerController,
didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]
) {
let info = Dictionary(uniqueKeysWithValues: info.map {key, value in (key.rawValue, value)})
var completion: (() -> Void)?
if let mediaType = info["UIImagePickerControllerMediaType"] as? String {
if mediaType == "public.image" {
if let picture = info[
UIImagePickerController.InfoKey.originalImage.rawValue
] as? UIImage {
if let cropsize = self.delegate?.cropSize?() {
if picture.size.width < cropsize.width || picture.size.height < cropsize.height {
let message = "Image size must be greater than \(cropsize.width) X \(cropsize.height)"
self.delegate?.didFinishPickingWithError(error: message)
} else {
guard let resizedImage = self.resizeImage(image: picture, to: cropsize) else { return }
completion = {
self.delegate?.didFinishPickingWithImage?(image: resizedImage)
}
}
} else {
completion = {
self.delegate?.didFinishPickingWithImage?(image: picture)
}
}
}
picker.dismiss(animated: true) {
completion?()
}
} else if mediaType == "public.movie" {
// _ = info["UIImagePickerControllerMediaURL"] as! URL
return
}
}
picker.dismiss(animated: true) {
completion?()
}
}
}
extension MultiMediaManager: UINavigationControllerDelegate {
@ -167,35 +175,19 @@ extension MultiMediaManager: UINavigationControllerDelegate {
}
struct PermissionHelper {
static func isAllowedToRecordVideo(completion: @escaping (Bool) -> ()) {
let status = AVCaptureDevice.authorizationStatus(for: AVMediaType.video)
completion(status != .denied && status != .restricted)
static func isAllowedToRecordVideo(completion: @escaping (Bool) -> Void) {
let status = AVCaptureDevice.authorizationStatus(for: AVMediaType.video)
completion(status != .denied && status != .restricted)
}
static func isAllowedToRecordSound(completion: @escaping (Bool) -> Void) {
AVAudioSession.sharedInstance().requestRecordPermission(completion)
}
static func isAllowedToShowGallary(completion: @escaping (Bool) -> Void) {
PHPhotoLibrary.requestAuthorization { (status) in
completion(status == .authorized)
}
}
static func isAllowedToRecordSound(completion: @escaping (Bool) -> ()) {
AVAudioSession.sharedInstance().requestRecordPermission(completion)
}
static func isAllowedToShowGallary(completion: @escaping (Bool) -> ()) {
PHPhotoLibrary.requestAuthorization { (status) in
completion(status == .authorized)
}
}
}
// Helper function inserted by Swift 4.2 migrator.
fileprivate func convertFromUIImagePickerControllerInfoKeyDictionary(_ input: [UIImagePickerController.InfoKey: Any]) -> [String: Any] {
return Dictionary(uniqueKeysWithValues: input.map {key, value in (key.rawValue, value)})
}
// Helper function inserted by Swift 4.2 migrator.
fileprivate func convertToUIApplicationOpenExternalURLOptionsKeyDictionary(_ input: [String: Any]) -> [UIApplication.OpenExternalURLOptionsKey: Any] {
return Dictionary(uniqueKeysWithValues: input.map { key, value in (UIApplication.OpenExternalURLOptionsKey(rawValue: key), value)})
}
// Helper function inserted by Swift 4.2 migrator.
fileprivate func convertFromUIImagePickerControllerInfoKey(_ input: UIImagePickerController.InfoKey) -> String {
return input.rawValue
}
Loading…
Cancel
Save