Browse Source

profile revamped

pull/1/head
ccr 6 years ago
parent
commit
f88d2b82ff
  1. 304
      GMERemittance/Profile/ProfileViewController.swift

304
GMERemittance/Profile/ProfileViewController.swift

@ -1,13 +1,4 @@
//
// ProfileViewController.swift
// GMERemittance
//
// Created by Fm-user on 1/9/18.
// Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
//
import UIKit
import SDWebImage
class ProfileViewController: UIViewController {
@ -19,291 +10,50 @@ class ProfileViewController: UIViewController {
@IBOutlet weak var labelEmail: UILabel!
@IBOutlet weak var labelMobileNumber: UILabel!
@IBOutlet weak var labelBalance: UILabel!
let imagePicker = UIImagePickerController()
var profileviewmodel = ProfileViewModel()
var profileImage: UIImage!
public static var profileConnectionTimeOutCheck = 0
private var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
/**
Display image selection option from camera and gallery.
*/
@objc func selectProfileImage(tapGestureRecognizer: UITapGestureRecognizer) {
profileviewmodel.userDataAvailable.value = nil
let alert = UIAlertController(title: "Choose Image", message: nil, preferredStyle: .actionSheet)
let cameraAction = UIAlertAction(title: "Camera", style: .default,handler: {
(action : UIAlertAction!) -> Void in
self.openCamera()
})
let galleryAction = UIAlertAction(title: "Gallery", style: .default,handler: {
(action : UIAlertAction!) -> Void in
self.openGallery()
})
let cancelAction = UIAlertAction.init(title: "Cancel", style: .destructive, handler: nil)
cancelAction.setValue(UIColor.black, forKey: "titleTextColor")
cameraAction.setValue(UIColor(hex:0xEC1C24), forKey: "titleTextColor")
galleryAction.setValue(UIColor(hex:0xEC1C24), forKey: "titleTextColor")
alert.addAction(cameraAction)
alert.addAction(galleryAction)
alert.addAction(cancelAction)
self.present(alert, animated: true, completion: nil)
}
/**
Open camera to take picture
*/
func openCamera() {
if(UIImagePickerController .isSourceTypeAvailable(UIImagePickerControllerSourceType.camera)) {
imagePicker.delegate = self
imagePicker.sourceType = UIImagePickerControllerSourceType.camera
imagePicker.allowsEditing = true
present(imagePicker, animated: true, completion: nil)
}
else {
let alert = UIAlertController(title: "Warning", message: "You don't have camera", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
}
/**
Open camera to take picture
*/
func openGallery() {
imagePicker.delegate = self
imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary
imagePicker.allowsEditing = true
present(imagePicker, animated: true, completion: nil)
}
override func viewWillAppear(_ animated: Bool) {
self.tabBarController?.navigationController?.navigationBar.barTintColor = UIColor(hex:0xEC1C24)
setUpAnotherLoginListener(genericviewmodel: profileviewmodel)
}
override func viewDidLoad() {
super.viewDidLoad()
setUpNavBar(id: 202,title: "")
listenNetwork()
if isVerified() {
buttonEdit.isHidden = true
} else {
buttonEdit.isHidden = true
}
imageViewUserProfile.isUserInteractionEnabled = true
labelUserProfileName.isUserInteractionEnabled = true
imageViewUserProfile.isHidden = true
labelUserProfileName.isHidden = false
public static var profileConnectionTimeOutCheck = 0
labelUserProfileName.layer.backgroundColor = UIColor(hex: 0x2e3192).cgColor
labelUserProfileName.layer.cornerRadius = labelUserProfileName.frame.height / 2
imageViewUserProfile.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(selectProfileImage(tapGestureRecognizer:))))
labelUserProfileName.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(selectProfileImage(tapGestureRecognizer:))))
startLoading()
profileviewmodel.profileConnectionTimeOut.value = nil
/**
connection timeout
*/
profileviewmodel.profileConnectionTimeOut.bind { [unowned self] in
guard $0 != nil else {
return
}
self.stopLoading()
if ProfileViewController.profileConnectionTimeOutCheck == 0{
ProfileViewController.profileConnectionTimeOutCheck = ProfileViewController.profileConnectionTimeOutCheck+1
self.popUpMessage(value: 41)
}
}
bindUserImageToUI()
bindUserDetailsToUI()
profileviewmodel.fetchUserInfo(userId: nil)
}
func startLoading(){
disableUserInteractions()
showActivityIndicator(activityIndicator: activityIndicator)
}
func stopLoading(){
enableUserInteractions()
dismissActivityIndicator(activityIndicator: self.activityIndicator)
override func viewWillAppear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.setupPicturedNavBar()
}
/**
Check internet connection
*/
func listenNetwork() {
profileviewmodel.internetConnection.value = nil
profileviewmodel.internetConnection.bind { [unowned self] in
guard $0 != nil else {
return
}
self.stopLoading()
self.popUpMessage(value: 15)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.navigationItem.title = ""
}
/**
Bind call for user deatails
*/
func bindUserDetailsToUI() {
profileviewmodel.userDataAvailable.bind { [unowned self] in
guard $0 != nil else {
return
}
self.stopLoading()
guard $0! else {
if ProfileViewController.profileConnectionTimeOutCheck == 0{
ProfileViewController.profileConnectionTimeOutCheck = ProfileViewController.profileConnectionTimeOutCheck+1
self.popUpMessageError(value: 10, message: self.profileviewmodel.getErrorMessage())
}
return
}
if let userDpString = self.profileviewmodel.getProfileModel().dpUrl {
if let userDpUrl = URL(string: userDpString) {
SDImageCache.shared().clearMemory()
SDImageCache.shared().clearDisk()
self.imageViewUserProfile.sd_setImage(with: userDpUrl, completed: nil)
self.setUpImage()
}
} else {
if let firstName = self.profileviewmodel.getProfileModel().firstName{
self.labelUserProfileName.text = String(firstName.prefix(1).uppercased())
}
}
self.labelUserName.text = self.profileviewmodel.getFullName()
self.labelMobileNumber.text = self.profileviewmodel.getProfileModel().mobileNumber
self.labelEmail.text = self.profileviewmodel.getProfileModel().email
if let availableBalance = self.profileviewmodel.getProfileModel().availableBalance {
self.labelBalance.text = self.getCommaAddedAmountString(amountString: availableBalance)
}
let walletNum = self.profileviewmodel.getProfileModel().walletNumber ?? "null"
let bankName = self.profileviewmodel.getProfileModel().primaryBankName ?? ""
self.setWalletNumber(walletNumber: walletNum, bankName: "(" + bankName + ")")
}
}
/**
Display Wallet number and bank name
*/
func setWalletNumber(walletNumber:String, bankName:String){
let recipientColor = UIColor(red: 236/255, green: 28/255.0, blue: 36/255, alpha: 1.0)
let title: String = String("GME Wallet No. ")
let wNumber: String = walletNumber + " "
let bName: String = bankName
let mutableQuestion1 = NSMutableAttributedString(string: title)
let mutableQuestion2 = NSMutableAttributedString(string: wNumber)
let mutableQuestion3 = NSMutableAttributedString(string: bName)
mutableQuestion2.addAttribute(NSAttributedStringKey.foregroundColor, value: recipientColor, range: NSRange(location:0, length: mutableQuestion2.length))
let mutableQuestion = NSMutableAttributedString()
mutableQuestion.append(mutableQuestion1)
mutableQuestion.append(mutableQuestion2)
mutableQuestion.append(mutableQuestion3)
self.gmeWalletNumber.attributedText = mutableQuestion
override func viewDidLoad() {
super.viewDidLoad()
}
/**
Bind call to display Profile image
*/
func bindUserImageToUI() {
profileviewmodel.imageSubmitted.bind{ [unowned self] in
guard $0 != nil else {
return
}
self.stopLoading()
guard $0! else {
if ProfileViewController.profileConnectionTimeOutCheck == 0{
ProfileViewController.profileConnectionTimeOutCheck = ProfileViewController.profileConnectionTimeOutCheck+1
self.popUpMessageError(value: 10, message: self.profileviewmodel.getErrorMessage())
}
return
}
self.imageViewUserProfile.image = self.profileImage
// ccr
let store = UserDefaults.standard
let name = store.string(forKey: UserKeys.firstName)
self.labelUserName.text = name
self.labelMobileNumber.text = store.string(forKey: UserKeys.mobileNumber)
self.labelEmail.text = store.string(forKey: UserKeys.email)
self.labelBalance.text = store.string(forKey: UserKeys.availableBalance)
let walletNum = store.string(forKey: UserKeys.walletNumber)
let bankName = store.string(forKey: UserKeys.primaryBankName)
if let image = store.string(forKey: UserKeys.dpUrl) {
setUpImage()
SDImageCache.shared().clearMemory()
SDImageCache.shared().clearDisk()
// self.imageViewUserProfile.sd_setImage(with: image, completed: nil)
self.setUpImage()
}
// ccR
}
/**
Profile image view Attributes
*/
func setUpImage() {
self.labelUserProfileName.isHidden = true
self.imageViewUserProfile.isHidden = false
imageViewUserProfile.backgroundColor = AppConstants.themeBlueColor
self.imageViewUserProfile.layer.cornerRadius = self.imageViewUserProfile.frame.height / 2
self.imageViewUserProfile.contentMode = .scaleAspectFill
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@IBAction func editProfileTap(_ sender: Any) {
self.performSegue(withIdentifier: "editProfile", sender: nil)
}
}
extension ProfileViewController: UINavigationControllerDelegate, UIImagePickerControllerDelegate {
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
profileImage = image
let imageData: NSData = UIImageJPEGRepresentation(image, 0.25)! as NSData
let imageDataBase64: String = imageData.base64EncodedString(options: .lineLength64Characters)
startLoading()
profileviewmodel.provideImageForSubmission(docType: kycCode.UserImage.rawValue, imageBase64: imageDataBase64)
dismiss(animated: true, completion: nil)
} else {
}
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
dismiss(animated: true, completion: nil)
}
}
Loading…
Cancel
Save