You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
488 lines
18 KiB
488 lines
18 KiB
//
|
|
// StatusUploadViewController.swift
|
|
// GMERemittance
|
|
//
|
|
// Created by Fm-user on 1/16/18.
|
|
// Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
import SDWebImage
|
|
|
|
|
|
class StatusUploadViewController: UIViewController {
|
|
|
|
@IBOutlet weak var labelUserNameInitial: UILabel!
|
|
@IBOutlet weak var labelUserName: UILabel!
|
|
@IBOutlet weak var dropDownView: UIPickerView!
|
|
@IBOutlet weak var dropDownButton: UIButton!
|
|
@IBOutlet weak var imageViewPost: FLAnimatedImageView!
|
|
@IBOutlet weak var textViewPost: UITextView!
|
|
@IBOutlet weak var textViewConstraint: NSLayoutConstraint!
|
|
|
|
@IBOutlet weak var imageViewUserImage: UIImageView!
|
|
|
|
|
|
@IBOutlet weak var postImageHeight: NSLayoutConstraint!
|
|
@IBOutlet weak var buttonAddPhoto: UIButton!
|
|
@IBOutlet weak var buttonSharePost: UIButton!
|
|
@IBOutlet weak var viewShare: UIView!
|
|
|
|
@IBOutlet weak var shareScrollView: UIScrollView!
|
|
|
|
|
|
let imagePicker = UIImagePickerController()
|
|
|
|
private let shareMode = ["Public ", "Private "]
|
|
private var shareModeIndex: Int = 0
|
|
|
|
private var movement: CGFloat = 0.0
|
|
|
|
private var feedInputText: String!
|
|
|
|
/*----statusUploadMode = 0 means user wants to upload text status, so image is optional
|
|
----statusUploadMode = 1 means user wants to upload image, so text is optional
|
|
----statusUploadMode = 2 means user wants to edit post, so either text or image is optional--*/
|
|
|
|
private var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
|
|
|
|
var statusUploadMode: Int?
|
|
var editablePostIndex: Int?
|
|
var socialfeedviewmodel: SocialFeedViewModel?
|
|
var showNotificationParameter: Bool?
|
|
|
|
|
|
@IBAction func sharePost(_ sender: Any) {
|
|
|
|
textViewPost.resignFirstResponder()
|
|
|
|
disableUserInteractions()
|
|
showActivityIndicator(activityIndicator: activityIndicator)
|
|
|
|
socialfeedviewmodel?.socialFeedConnectionTimeOut.value = nil
|
|
/**
|
|
connection timeout
|
|
*/
|
|
socialfeedviewmodel?.socialFeedConnectionTimeOut.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self.enableUserInteractions()
|
|
self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
|
|
self.popUpMessage(value: 20)
|
|
}
|
|
|
|
switch statusUploadMode {
|
|
|
|
case 0?, 1?:
|
|
switch shareModeIndex {
|
|
case 0:
|
|
socialfeedviewmodel?.setAccessType(accessType: "public")
|
|
case 1:
|
|
socialfeedviewmodel?.setAccessType(accessType: "private")
|
|
default:
|
|
return
|
|
}
|
|
socialfeedviewmodel!.createSocialFeed()
|
|
|
|
case 2?:
|
|
let feedToEdit = socialfeedviewmodel?.getSocialFeedAt(index: editablePostIndex!)
|
|
|
|
if feedToEdit?.accessType == "private" {
|
|
if shareModeIndex == 1 {
|
|
socialfeedviewmodel!.updateSocialFeed(feed: feedToEdit!, index: editablePostIndex!)
|
|
} else {
|
|
socialfeedviewmodel!.updateSocialFeed(feed: feedToEdit!, index: editablePostIndex!, toggle: true)
|
|
}
|
|
} else if feedToEdit?.accessType == "public" {
|
|
if shareModeIndex == 1 {
|
|
socialfeedviewmodel!.updateSocialFeed(feed: feedToEdit!, index: editablePostIndex!, toggle: true)
|
|
} else {
|
|
socialfeedviewmodel!.updateSocialFeed(feed: feedToEdit!, index: editablePostIndex!)
|
|
}
|
|
}
|
|
|
|
default:
|
|
enableUserInteractions()
|
|
dismissActivityIndicator(activityIndicator: activityIndicator)
|
|
return
|
|
}
|
|
}
|
|
|
|
|
|
func setUpNetworkListener() {
|
|
socialfeedviewmodel!.internetConnection.value = nil
|
|
|
|
socialfeedviewmodel!.internetConnection.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self.enableUserInteractions()
|
|
self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
|
|
self.popUpMessage(value: 15)
|
|
self.socialfeedviewmodel!.internetConnection.value = nil
|
|
}
|
|
}
|
|
|
|
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
|
|
if segue.identifier == "myStory" {
|
|
let privateStoryViewController = segue.destination as! MyStoryViewController
|
|
privateStoryViewController.socialfeedviewmodel = self.socialfeedviewmodel
|
|
privateStoryViewController.showNotificationParameter = self.showNotificationParameter
|
|
}
|
|
}
|
|
|
|
@objc func clearKeyboard() {
|
|
textViewPost.resignFirstResponder()
|
|
}
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
|
|
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(clearKeyboard))
|
|
|
|
view.addGestureRecognizer(tap)
|
|
|
|
if let userName = UserDefaults.standard.object(forKey: "com.gmeremit.fullName") as? String {
|
|
labelUserName.text = userName
|
|
}
|
|
|
|
|
|
labelUserNameInitial.isHidden = false
|
|
labelUserNameInitial.backgroundColor = UIColor(hex: 0x2e3192)
|
|
labelUserNameInitial.layer.cornerRadius = labelUserNameInitial.frame.height / 2
|
|
labelUserNameInitial.text = getFirstName().prefix(1).uppercased()
|
|
|
|
|
|
let userDpString = UserDefaults.standard.object(forKey: "com.gmeremit.dpUrl") as? String
|
|
if let userDpUrl = URL(string: userDpString!) {
|
|
|
|
imageViewUserImage.isHidden = false
|
|
|
|
imageViewUserImage.sd_setImage(with: userDpUrl, placeholderImage: nil, options: [.progressiveDownload,.scaleDownLargeImages], completed: nil)
|
|
|
|
imageViewUserImage.layer.cornerRadius = imageViewUserImage.frame.height/2
|
|
|
|
labelUserNameInitial.isHidden = true
|
|
}
|
|
|
|
guard socialfeedviewmodel != nil, statusUploadMode != nil else {
|
|
return
|
|
}
|
|
|
|
if statusUploadMode == 2 && editablePostIndex == nil {
|
|
return
|
|
}
|
|
|
|
setUpNetworkListener()
|
|
setUpNavBar(id: 5, title: "")
|
|
setUpAnotherLoginListener(genericviewmodel: socialfeedviewmodel!)
|
|
|
|
imagePicker.delegate = self
|
|
textViewPost.delegate = self
|
|
|
|
dropDownButton.layer.borderColor = UIColor(red:0.93, green:0.11, blue:0.14, alpha:1.0).cgColor
|
|
dropDownButton.layer.borderWidth = 1.0
|
|
dropDownButton.layer.cornerRadius = 8
|
|
|
|
textViewPost.text = "Share your story "
|
|
textViewPost.textColor = UIColor(red:0.78, green:0.78, blue:0.80, alpha:1.0)
|
|
|
|
imageViewUserImage.layer.cornerRadius = imageViewUserImage.frame.height / 2
|
|
|
|
var frame = self.textViewPost.frame
|
|
frame.size.height = self.textViewPost.contentSize.height
|
|
self.textViewPost.frame = frame
|
|
textViewPost.isScrollEnabled = true
|
|
textViewPost.sizeToFit()
|
|
|
|
|
|
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
|
|
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
|
|
|
|
buttonAddPhoto.setTitle(" Add Photo", for: UIControlState.normal)
|
|
|
|
if statusUploadMode == 1 {
|
|
selectImageToUpload()
|
|
} else if statusUploadMode == 2 {
|
|
|
|
if let postText = socialfeedviewmodel?.getSocialFeedAt(index: editablePostIndex!).feedText {
|
|
|
|
socialfeedviewmodel?.updateFeedText(text: postText)
|
|
textViewPost.text = postText
|
|
|
|
}
|
|
|
|
if let imageId = socialfeedviewmodel?.getSocialFeedAt(index: editablePostIndex!).feedImageId {
|
|
|
|
buttonAddPhoto.setTitle(" Change Photo", for: UIControlState.normal)
|
|
|
|
socialfeedviewmodel?.setFeedImageId(imageId: imageId)
|
|
|
|
if let imageURL = socialfeedviewmodel?.getSocialFeedAt(index: editablePostIndex!).feedImage {
|
|
|
|
imageViewPost.sd_setImage(with: URL(string: imageURL)!, placeholderImage: nil, options: [.progressiveDownload,.scaleDownLargeImages], completed: nil)
|
|
postImageHeight.constant = view.frame.width
|
|
}
|
|
}
|
|
}
|
|
|
|
socialfeedviewmodel?.socialFeedsRxValue.bind { [weak self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
|
|
self?.enableUserInteractions()
|
|
|
|
if self?.activityIndicator != nil {
|
|
self?.dismissActivityIndicator(activityIndicator: (self?.activityIndicator)!)
|
|
}
|
|
|
|
guard $0 != 0 else {
|
|
self?.textViewPost.resignFirstResponder()
|
|
self?.popUpMessageError(value: 10, message: (self?.socialfeedviewmodel!.getErrorMessage())!)
|
|
self?.socialfeedviewmodel!.socialFeedsRxValue.value = nil
|
|
return
|
|
}
|
|
|
|
if $0 == socialWallCode.createUpdatePost.rawValue {
|
|
if self?.shareModeIndex == 1 {
|
|
self?.performSegue(withIdentifier: "myStory", sender: nil)
|
|
} else {
|
|
self?.navigationController?.popViewController(animated: true)
|
|
}
|
|
}
|
|
self?.socialfeedviewmodel!.socialFeedsRxValue.value = nil
|
|
}
|
|
|
|
socialfeedviewmodel?.imageUploaded.bind { [weak self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
guard $0! else {
|
|
self?.popUpMessageError(value: 10, message: (self?.socialfeedviewmodel!.getErrorMessage())!)
|
|
return
|
|
}
|
|
self?.buttonSharePost.isEnabled = true
|
|
self?.socialfeedviewmodel?.imageUploaded.value = nil
|
|
}
|
|
|
|
}
|
|
|
|
|
|
@objc func keyboardWillShow(notification: NSNotification) {
|
|
let userInfo = notification.userInfo
|
|
var keyboardFrame:CGRect = (userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
|
|
keyboardFrame = self.view.convert(keyboardFrame, from: nil)
|
|
movement = (keyboardFrame.size.height)
|
|
|
|
UIView.animate(withDuration: 0.3, animations: {
|
|
self.viewShare.frame = self.viewShare.frame.offsetBy(dx: 0, dy: self.movement * -1.0) //dy is negative for upward movement
|
|
})
|
|
}
|
|
|
|
@objc func keyboardWillHide(notification: NSNotification){
|
|
UIView.animate(withDuration: 0.3, animations: {
|
|
self.viewShare.frame = self.viewShare.frame.offsetBy(dx: 0, dy: self.movement)
|
|
})
|
|
}
|
|
|
|
@IBAction func pickerButtonTap(_ sender: Any) {
|
|
|
|
if dropDownView.isHidden{
|
|
dropDownView.isHidden = false
|
|
}
|
|
textViewPost.resignFirstResponder()
|
|
}
|
|
|
|
|
|
override func viewDidAppear(_ animated: Bool) {
|
|
shareScrollView.frame.size.width = self.view.frame.width
|
|
}
|
|
|
|
@IBAction func addPhotoButtonTap(_ sender: Any) {
|
|
selectImageToUpload()
|
|
}
|
|
|
|
/**
|
|
Display image selection option dialog for camera or Gallary
|
|
*/
|
|
func selectImageToUpload() {
|
|
let alert = UIAlertController(title: "Choose Image", message: nil, preferredStyle: .actionSheet)
|
|
|
|
alert.addAction(UIAlertAction(title: "Camera", style: .default, handler: { _ in
|
|
self.openCamera()
|
|
}))
|
|
|
|
alert.addAction(UIAlertAction(title: "Gallery", style: .default, handler: { _ in
|
|
self.openGallery()
|
|
}))
|
|
|
|
alert.addAction(UIAlertAction.init(title: "Cancel", style: .destructive, handler: nil))
|
|
|
|
self.present(alert, animated: true, completion: nil)
|
|
}
|
|
|
|
/**
|
|
open camera
|
|
*/
|
|
func openCamera() {
|
|
if(UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera)) {
|
|
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 gallery for image selection
|
|
*/
|
|
func openGallery() {
|
|
imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary
|
|
imagePicker.allowsEditing = true
|
|
present(imagePicker, animated: true, completion: nil)
|
|
}
|
|
|
|
override func didReceiveMemoryWarning() {
|
|
super.didReceiveMemoryWarning()
|
|
}
|
|
}
|
|
|
|
|
|
extension StatusUploadViewController: UIPickerViewDelegate, UIPickerViewDataSource {
|
|
|
|
func numberOfComponents(in pickerView: UIPickerView) -> Int {
|
|
return 1
|
|
}
|
|
|
|
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
|
|
return shareMode.count
|
|
}
|
|
|
|
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
|
|
return shareMode[row]
|
|
}
|
|
|
|
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
|
|
|
|
let label = (view as? UILabel) ?? UILabel()
|
|
|
|
label.textColor = UIColor(red:0.29, green:0.29, blue:0.29, alpha:1.0)
|
|
label.textAlignment = .center
|
|
label.font = UIFont.systemFont(ofSize: 14)
|
|
|
|
/// where data is an Array of String
|
|
label.text = shareMode[row]
|
|
|
|
return label
|
|
}
|
|
|
|
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
|
|
dropDownButton.setTitle(shareMode[row], for: UIControlState.normal)
|
|
|
|
self.dropDownView.isHidden = true
|
|
|
|
shareModeIndex = row
|
|
|
|
textViewPost.resignFirstResponder()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
extension StatusUploadViewController: UITextViewDelegate {
|
|
|
|
func textViewDidBeginEditing(_ textFieldPost: UITextView) {
|
|
if textFieldPost.text.removeSpacesTrailingPreceding() == "Share your story" {
|
|
textFieldPost.text = ""
|
|
}
|
|
if statusUploadMode == 2 {
|
|
textFieldPost.textColor = UIColor(red:0.29, green:0.29, blue:0.29, alpha:1.0)
|
|
}
|
|
if textFieldPost.textColor == UIColor(red:0.78, green:0.78, blue:0.80, alpha:1.0) {
|
|
textFieldPost.text = nil
|
|
textFieldPost.textColor = UIColor(red:0.29, green:0.29, blue:0.29, alpha:1.0)
|
|
}
|
|
}
|
|
|
|
func textViewDidEndEditing(_ textFieldPost: UITextView) {
|
|
if textFieldPost.text.isEmpty {
|
|
textFieldPost.text = "Share your story"
|
|
textFieldPost.textColor = UIColor(red:0.78, green:0.78, blue:0.80, alpha:1.0)
|
|
}
|
|
}
|
|
|
|
func textViewDidChange(_ textView: UITextView) {
|
|
|
|
let size = textView.sizeThatFits(CGSize(width: textView.frame.size.width, height: CGFloat.greatestFiniteMagnitude))
|
|
if size.height != textViewConstraint.constant && size.height > textView.frame.size.height || size.height < textView.frame.size.height{
|
|
textViewConstraint.constant = size.height + 8
|
|
textView.setContentOffset(CGPoint.zero, animated: false)
|
|
}
|
|
}
|
|
|
|
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
|
|
feedInputText = (textView.text! as NSString).replacingCharacters(in: range, with: text)
|
|
socialfeedviewmodel?.updateFeedText(text: feedInputText)
|
|
return true
|
|
}
|
|
|
|
}
|
|
|
|
|
|
extension StatusUploadViewController: UINavigationControllerDelegate, UIImagePickerControllerDelegate {
|
|
|
|
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
|
|
|
|
if let image = info[UIImagePickerControllerEditedImage] as? UIImage {
|
|
|
|
self.buttonSharePost.isEnabled = false
|
|
|
|
imageViewPost.image = image
|
|
|
|
buttonAddPhoto.setTitle(" Change Photo", for: UIControlState.normal)
|
|
|
|
|
|
if let imageURL = info["UIImagePickerControllerImageURL"] as? NSURL {
|
|
//GALLERY SELECTION
|
|
let imageExtension = imageURL.lastPathComponent?.suffix(3)// (imageURL as! String).suffix(3)
|
|
|
|
if imageExtension!.lowercased() == "gif" {
|
|
do {
|
|
let gifData = try Data(contentsOf: imageURL as URL)
|
|
|
|
socialfeedviewmodel?.uploadImage(image: gifData, isGif: true)
|
|
} catch let e {
|
|
print(e.localizedDescription)
|
|
}
|
|
|
|
} else {
|
|
|
|
socialfeedviewmodel?.uploadImage(image: image, isGif: false)
|
|
}
|
|
} else {
|
|
|
|
//CAMERA SELECTION
|
|
socialfeedviewmodel?.uploadImage(image: image, isGif: false)
|
|
}
|
|
|
|
dismiss(animated: true, completion: nil)
|
|
} else {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
|
|
dismiss(animated: true, completion: nil)
|
|
}
|
|
|
|
func didCropImage(_ croppedImage: UIImage, usingCropRect cropRect: CGRect){
|
|
|
|
}}
|
|
|