Commit 3bff6dba by Anand.suthar

Implement audio in chat

parent 1a3bb3d0
......@@ -87,6 +87,7 @@
B098116C212C524900BD7407 /* DrawTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = B098116B212C524900BD7407 /* DrawTextField.swift */; };
B09A64BF20F7877E00222611 /* NavigationBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B09A64BE20F7877E00222611 /* NavigationBarView.swift */; };
B0A0827920EF924100F78AEC /* UserSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0A0827820EF924100F78AEC /* UserSettings.swift */; };
B0A1F215213AB9F600E17558 /* UploadAudio.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0A1F214213AB9F600E17558 /* UploadAudio.swift */; };
B0B57165212BFE3700593801 /* ScienceOfNamingContainerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0B57164212BFE3700593801 /* ScienceOfNamingContainerViewController.swift */; };
B0B5716F212BFE4E00593801 /* IndividualNamingServiceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0B5716E212BFE4D00593801 /* IndividualNamingServiceViewController.swift */; };
B0B57171212BFE6100593801 /* IndividualReNamingServiceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0B57170212BFE6100593801 /* IndividualReNamingServiceViewController.swift */; };
......@@ -619,6 +620,7 @@
B098116B212C524900BD7407 /* DrawTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DrawTextField.swift; sourceTree = "<group>"; };
B09A64BE20F7877E00222611 /* NavigationBarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationBarView.swift; sourceTree = "<group>"; };
B0A0827820EF924100F78AEC /* UserSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserSettings.swift; sourceTree = "<group>"; };
B0A1F214213AB9F600E17558 /* UploadAudio.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UploadAudio.swift; sourceTree = "<group>"; };
B0B57164212BFE3700593801 /* ScienceOfNamingContainerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScienceOfNamingContainerViewController.swift; sourceTree = "<group>"; };
B0B5716E212BFE4D00593801 /* IndividualNamingServiceViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IndividualNamingServiceViewController.swift; sourceTree = "<group>"; };
B0B57170212BFE6100593801 /* IndividualReNamingServiceViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IndividualReNamingServiceViewController.swift; sourceTree = "<group>"; };
......@@ -1005,14 +1007,15 @@
isa = PBXGroup;
children = (
B0BD88CC212EE7AC00188279 /* Notifications */,
B04824602128342100B088C0 /* UpdateOrder.swift */,
B091CD672119A43F00E270BF /* FireBaseChat */,
B038371420F37F2F00B68870 /* Appointment */,
B0F371E320EFB08D000F92D2 /* Home */,
B08BEE7920F0933600E972D3 /* Me */,
B04824602128342100B088C0 /* UpdateOrder.swift */,
B01B217B20EF87E9002AC8D5 /* User.swift */,
B01B217620EF878A002AC8D5 /* UserExt.swift */,
B0A0827820EF924100F78AEC /* UserSettings.swift */,
B0A1F214213AB9F600E17558 /* UploadAudio.swift */,
);
path = Model;
sourceTree = "<group>";
......@@ -2582,6 +2585,7 @@
EC04CFD32052CF2A00B425BB /* PasswordToggleVisibilityView.swift in Sources */,
EC04CE1A2052CDA300B425BB /* SellerDashBoardController.swift in Sources */,
B024388B20B53D5D007D12AE /* HomePageViewController.swift in Sources */,
B0A1F215213AB9F600E17558 /* UploadAudio.swift in Sources */,
EC04CEDF2052CE6700B425BB /* MyOrderTableViewCell.swift in Sources */,
EC04CFBA2052CF2A00B425BB /* CHILayer.swift in Sources */,
EC04CDAD2052CD3500B425BB /* SellerListViewCell.swift in Sources */,
......
......@@ -15,8 +15,8 @@ var DEFAULT_WEBSITE_ID = "1"
var BASE_DOMAIN = "http://18.136.9.203" // test
//var BASE_DOMAIN = "http://54.251.144.17" // dev
//var BASE_DOMAIN = "http://18.136.9.203" // test
var BASE_DOMAIN = "http://54.251.144.17" // dev
//var BASE_DOMAIN = "http://13.251.93.24"
var HOST_NAME = BASE_DOMAIN+"/index.php/"
......
......@@ -17,7 +17,7 @@
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>9</string>
<string>10</string>
<key>Fabric</key>
<dict>
<key>APIKey</key>
......
......@@ -18,6 +18,7 @@ class CompletedServicesViewController: BaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
service.isBooking = true
self.setupRefreshHeaderFooter()
}
......
......@@ -130,7 +130,7 @@ extension EditResultViewController: UITableViewDelegate, UITableViewDataSource {
case 3:
return 1
case 4:
return 0
return 1
case 5:
return audioRecordings.count
default:
......@@ -249,6 +249,9 @@ extension EditResultViewController: EditResultProductCellDelegate {
extension EditResultViewController: AudioRecordingCellDelegate {
func recordedAudio(filePath: String) {
print(filePath)
let audioRecording = AudioRecording(audioPath: filePath)
self.audioRecordings.append(audioRecording)
tblresult.reloadData()
......
......@@ -24,6 +24,7 @@ class OnGoingServicesViewController: BaseViewController {
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
service.isBooking = true
if service.services.count == 0 {
tblOnGoingNotices.mj_header.beginRefreshing()
}
......
......@@ -18,6 +18,7 @@ class ProcessingViewController: BaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
service.isBooking = true
self.setupRefreshHeaderFooter()
}
......
......@@ -152,10 +152,17 @@ extension HomePageViewController: UITableViewDelegate, UITableViewDataSource {
} else if order.products.first?.serviceType == .FORM{
if order.status == .COMPLETE {
let appointmentdetails = Utils.viewController(storyboardName: "Appointment", ofType: ServiceDetailViewController.self)
appointmentdetails.serviceStatus = .tbc
appointmentdetails.incrementId = order.incrementId
appointmentdetails.orderId = order.orderId
self.navigationController?.pushViewController(appointmentdetails, animated: true)
} else {
if let form = Form.VC(with: order.incrementId!, orderId: order.orderId!, categoryType: order.products.first!.categoryType){
self.navigationController?.pushViewController(form, animated: true)
}
}
} else {
self.view.showToast("Unknown service", position: .bottom, popTime: 2.0, dismissOnTap: false)
......
......@@ -99,6 +99,7 @@ extension OnlineEnquiryViewController {
ref.childByAutoId().setValue(["msg": txtComment.text,
"name": "Seller",
"status": "unread",
"chatType": "Text",
"timestamp": ServerValue.timestamp()
])
......@@ -132,6 +133,38 @@ extension OnlineEnquiryViewController {
@IBAction func back() {
self.navigationController?.popViewController(animated: true)
}
@IBAction func startRecordAudio() {
Audio.startRecording(success: {
print("recording started")
}) { (errorMessage) in
self.view.showToast(errorMessage, position: .bottom, popTime: 2.0, dismissOnTap: false)
}
}
@IBAction func endRecordAudio() {
Audio.stopRecording(success: { (filePath) in
UploadAudio.upload(file: filePath, success: { (webPath) in
self.ref.childByAutoId().setValue(["msg": webPath,
"name": "Seller",
"status": "unread",
"chatType": "Audio",
"timestamp": ServerValue.timestamp()
])
}, failur: { (errorMessage) in
self.view.showToast(errorMessage, position: .bottom, popTime: 2.0, dismissOnTap: false)
})
}) { (errorMessage) in
print(errorMessage)
}
}
}
......@@ -148,6 +181,7 @@ extension OnlineEnquiryViewController: UITableViewDelegate, UITableViewDataSourc
let chat = chats[indexPath.row]
if chat.chatType == .text {
if chat.name == "Seller" {
let masterCell = tableView.dequeueReusableCell(withIdentifier: "master") as! OnlineEnquiryMasterCell
masterCell.lblMessage.text = chat.msg
......@@ -158,8 +192,20 @@ extension OnlineEnquiryViewController: UITableViewDelegate, UITableViewDataSourc
customerCell.customerProfileImage = customerProfileImage
return customerCell
}
} else if chat.chatType == .audio {
if chat.name == "Seller" {
let masterAudioCell = tableView.dequeueReusableCell(withIdentifier: "masterAudio") as! OnlineEnquiryMasterAudioCell
masterAudioCell.audioPath = chat.msg
return masterAudioCell
} else {
let customerAudioCell = tableView.dequeueReusableCell(withIdentifier: "customerAudio") as! OnlineEnquiryCustomerAudioCell
customerAudioCell.audioPath = chat.msg
customerAudioCell.customerProfileImage = customerProfileImage
return customerAudioCell
}
}
return UITableViewCell()
}
}
......@@ -224,3 +270,73 @@ class OnlineEnquiryCustomerCell: UITableViewCell {
}
}
class OnlineEnquiryMasterAudioCell: UITableViewCell {
@IBOutlet var btnPlay: UIButton!
var audioPath: String?
@IBOutlet var imgMaster: UIImageView!
@IBAction func play() {
if let audioPath = audioPath {
Audio.playAudio(audioPath: audioPath, success: {
}) { (errorMesssage) in
self.viewController()?.view.showToast(errorMesssage, position: .bottom, popTime: 2.0, dismissOnTap: false)
}
} else {
self.viewController()?.view.showToast("Audio missing", position: .bottom, popTime: 2.0, dismissOnTap: false)
}
}
override func layoutIfNeeded() {
imgMaster.layer.cornerRadius = imgMaster.frame.size.width/2
if let profileImage = User.profileImage {
let url = URL(string: profileImage)
self.imgMaster.kf.setImage(with: url, placeholder: UIImage(named: "placeholder"), options: [.transition(ImageTransition.fade(1)), .scaleFactor(1.0)], progressBlock: nil, completionHandler: nil)
}
}
}
class OnlineEnquiryCustomerAudioCell: UITableViewCell {
@IBOutlet var btnPlay: UIButton!
var audioPath: String?
var customerProfileImage: String?
@IBOutlet var imgCostomer: UIImageView!
@IBAction func play() {
if let audioPath = audioPath {
Audio.playAudio(audioPath: audioPath, success: {
}) { (errorMesssage) in
self.viewController()?.view.showToast(errorMesssage, position: .bottom, popTime: 2.0, dismissOnTap: false)
}
} else {
self.viewController()?.view.showToast("Audio missing", position: .bottom, popTime: 2.0, dismissOnTap: false)
}
}
override func layoutIfNeeded() {
imgCostomer.layer.cornerRadius = imgCostomer.frame.size.width/2
if let customerProfileImage = customerProfileImage {
let url = URL(string: customerProfileImage)
self.imgCostomer.kf.setImage(with: url, placeholder: UIImage(named: "placeholder"), options: [.transition(ImageTransition.fade(1)), .scaleFactor(1.0)], progressBlock: nil, completionHandler: nil)
}
}
}
......@@ -55,7 +55,7 @@ class ChangePasswordViewController: UIViewController {
}
if txtCurrentPassword.text != txtConfirmPassword.text {
if txtNewPassword.text != txtConfirmPassword.text {
self.view.showToast("New password and current password should be same", position: .bottom, popTime: 2.0, dismissOnTap: false)
return false
}
......@@ -66,3 +66,28 @@ class ChangePasswordViewController: UIViewController {
}
extension ChangePasswordViewController: UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if textField == txtCurrentPassword {
txtNewPassword.becomeFirstResponder()
} else if textField == txtNewPassword {
txtConfirmPassword.becomeFirstResponder()
} else if textField == txtConfirmPassword {
self.confirm()
}
return true
}
}
......@@ -57,7 +57,6 @@ class IncomeHistoryViewController: BaseViewController {
self.tblIncome.reloadData()
self.tblIncome.mj_footer.endRefreshing()
}) { (errorMessage) in
self.tblIncome.reloadData()
self.tblIncome.mj_footer.endRefreshing()
self.view.showToast(errorMessage, position: .bottom, popTime: 2.0, dismissOnTap: false)
}
......
......@@ -127,7 +127,7 @@ extension SellerProfileViewController {
@IBAction func logout() {
// User.logout(success: {
User.isLoggedIn = false
User.clearData()
let loginVc = Utils.viewController(storyboardName: "Fengshui", ofType: LoginViewController.self)
self.present(loginVc, animated: true, completion: nil)
// }) { (errorMessage) in
......
......@@ -14,10 +14,11 @@ class LoginViewController: BaseViewController {
@IBOutlet var txtPassword: UITextField!
@IBOutlet var imgCheckUncheck: UIImageView!
var isRemember = false
// var isRemember = false
override func viewDidLoad() {
super.viewDidLoad()
UserSettings.rememberPassword = true
}
}
......@@ -27,17 +28,17 @@ class LoginViewController: BaseViewController {
extension LoginViewController {
@IBAction func rememberPassword() {
if isRemember == false {
isRemember = true
imgCheckUncheck.image = UIImage(named: "check")
UserSettings.rememberPassword = true
} else {
isRemember = false
imgCheckUncheck.image = UIImage(named: "uncheck")
UserSettings.rememberPassword = false
}
}
// @IBAction func rememberPassword() {
// if isRemember == false {
// isRemember = true
// imgCheckUncheck.image = UIImage(named: "check")
// UserSettings.rememberPassword = true
// } else {
// isRemember = false
// imgCheckUncheck.image = UIImage(named: "uncheck")
// UserSettings.rememberPassword = false
// }
// }
@IBAction func forgetPassword() {
......
......@@ -9,6 +9,11 @@
import Foundation
import FirebaseDatabase
enum ChatType: String {
case audio = "Audio"
case text = "Text"
}
class Chat {
let msg: String!
......@@ -16,6 +21,7 @@ class Chat {
let readStatus: String!
var timeStamp: TimeInterval = 0
let chatId: String!
var chatType = ChatType.text
init(json: [String: Any], chatId: String) {
......@@ -27,6 +33,9 @@ class Chat {
if let timeStamp = json["timestamp"] as? Int64 {
self.timeStamp = TimeInterval(exactly: timeStamp)!
}
if let fileType_ = json["chatType"] as? String {
self.chatType = ChatType(rawValue: fileType_)!
}
}
......
......@@ -40,6 +40,7 @@ class Service {
var currentPage = 1
var maxPageNo = 0
var isBooking = false
var services = [Service]()
......
......@@ -49,13 +49,13 @@ extension Service {
"storeId": UserDefaults.standard.value(forKey: "storeId") as! String,
"status": statusParameter,
"pageNumber": self.currentPage,
"type": "booking"
"type": isBooking == true ? "booking" : ""
]
} else {
parameters = ["customerId": User.customerId,
"storeId": UserDefaults.standard.value(forKey: "storeId") as! String,
"pageNumber": self.currentPage,
"type": "booking"
"type": isBooking == true ? "booking" : ""
]
}
......
//
// UploadAudio.swift
// Bhagyashree
//
// Created by SunarcMAC on 01/09/18.
// Copyright © 2018 Sunarc. All rights reserved.
//
import Foundation
import SVProgressHUD
class UploadAudio {
class func upload(file: String, success:@escaping (_ webPath: String) -> Void, failur:@escaping (_ errorMessage: String) -> Void) {
let url = URL(fileURLWithPath: file)
SVProgressHUD.show()
HTTP().uploadFileTmp(withThumbNail: nil, api: API.REPLY_AUDIO, filePath: url, type: "reply_audio") { (response, error) in
if error == nil {
if response!.count > 0 {
if let data = response![0]["data"] as? [[String: Any]] {
if data.count > 0 {
var webPath = ""
if let relativePath = data[0]["relative_path"] as? String {
webPath += relativePath
}
if let file = data[0]["file"] as? String {
webPath += file
}
SVProgressHUD.dismiss()
success(webPath)
} else {
SVProgressHUD.dismiss()
failur("Try again")
}
} else {
SVProgressHUD.dismiss()
failur("Try again")
}
} else {
SVProgressHUD.dismiss()
failur("Try again")
}
} else {
SVProgressHUD.dismiss()
failur(error!.localizedDescription)
}
}
}
}
......@@ -147,5 +147,24 @@ class User {
}
class func clearData() {
User.speciality = nil
User.bearerToken = nil
User.gender = nil
User.professionalLevel = nil
User.isOnline = false
User.isLoggedIn = false
User.title = nil
User.profileImage = nil
User.message = nil
User.isSeller = false
User.customerFullName = nil
User.customerId = 0
User.customerEmail = nil
User.cartCount = 0
User.bannerImage = nil
}
}
......@@ -4,7 +4,7 @@
//
// Created by SunarcMAC on 06/07/18.
// Copyright © 2018 Sunarc. All rights reserved.
//
// nervous
import Foundation
......@@ -55,6 +55,9 @@ extension User {
]
HTTP().connectionWithRequestObjectFormUrl(api: API.LOGIN, parameters: parameters, method: .post, indicator: true, success: { (response) in
print(response)
if let response = response as? [String: Any] {
User.message = response["message"] as? String
......@@ -107,6 +110,9 @@ extension User {
let paramenters = ["username": email, "password": password]
HTTP().connectionWithRequestObject(api: API.MAGENTO_TOKEN, parameters: paramenters, method: .post, indicator: true, success: { (successToken) in
print(successToken)
User.bearerToken = successToken as? String
success()
}, failure: { (errorMessage) in
......
......@@ -13,7 +13,7 @@ import AVFoundation
class Audio {
var audioRecorder:AVAudioRecorder!
var audioPlayer: AVAudioPlayer?
var audioPlayer: AVPlayer?
var currentRecordingPath: String?
static let shared = Audio()
......@@ -35,16 +35,13 @@ class Audio {
try audioSession.setCategory(AVAudioSessionCategoryRecord)
try audioSession.setActive(true)
Audio.shared.currentRecordingPath = NSTemporaryDirectory() + "\(Audio.shared.Timestamp).caf"
Audio.shared.currentRecordingPath = NSTemporaryDirectory() + "\(Audio.shared.Timestamp).m4a"
let url = URL(fileURLWithPath: Audio.shared.currentRecordingPath!)
let recordSettings: [String: Any] = [AVFormatIDKey: kAudioFormatAppleIMA4,
AVSampleRateKey: 44100.0,
AVNumberOfChannelsKey: 2,
AVEncoderBitRateKey: 12800,
AVLinearPCMBitDepthKey: 16,
AVEncoderAudioQualityKey: AVAudioQuality.max.rawValue
let recordSettings: [String: Any] = [AVFormatIDKey: kAudioFormatMPEG4AAC,
AVSampleRateKey: 12000.0,
AVNumberOfChannelsKey: 1,
AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue
]
Audio.shared.audioRecorder = try AVAudioRecorder(url: url, settings: recordSettings)
......@@ -67,14 +64,27 @@ class Audio {
class func playAudio(audioPath: String, success:() -> Void, failure: (_ message: String) -> Void) {
let audioURL = URL(fileURLWithPath: audioPath)
// let audioURL = URL(fileURLWithPath: audioPath)
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
try Audio.shared.audioPlayer = AVAudioPlayer(contentsOf: audioURL)
Audio.shared.audioPlayer!.prepareToPlay()
Audio.shared.audioPlayer!.play()
let url = URL(string: audioPath)
// let playerItem:AVPlayerItem = AVPlayerItem(url: url!)
// Audio.shared.audioPlayer = AVPlayer(playerItem: playerItem)
//
Audio.shared.audioPlayer = AVPlayer(url: url!)
Audio.shared.audioPlayer?.play()
// if Audio.shared.audioPlayer?.rate == 0 {
// Audio.shared.audioPlayer?.play()
// } else {
// Audio.shared.audioPlayer?.pause()
// }
// try Audio.shared.audioPlayer = AVAudioPlayer(contentsOf: audioURL)
// Audio.shared.audioPlayer!.prepareToPlay()
// Audio.shared.audioPlayer!.play()
success()
} catch {
failure(error.localizedDescription)
......
......@@ -44,6 +44,9 @@ class API {
// Notification
static let NOTIFICATION = "mobikulhttp/extra/notificationList"
// Other
static let AUDIO_UPLOAD = "/rest/V1/service/uploadAudio"
}
......
......@@ -103,12 +103,14 @@ class HTTP: NSObject {
} else {
User.regenerateToken { // generate magento token
if api == API.MAGENTO_TOKEN {
if contentType == "application/x-www-form-urlencoded" {
HTTP().connectionWithRequestObjectFormUrl(api: api, parameters: parameters, method: method, indicator: indicator, success: success, failure: failure)
} else {
HTTP().connectionWithRequestObject(api: api, parameters: parameters, method: method, indicator: indicator, success: success, failure: failure)
}
}
}
}
} else {
......@@ -255,6 +257,10 @@ extension HTTP {
if let token = User.bearerToken {
headers["Authorization"] = "Bearer \(token)"
}
if let authKey: String = UserDefaults.standard.value(forKey: "authKey") as? String {
headers["authKey"] = authKey
}
Alamofire.upload(multipartFormData: { (multipartFormData: MultipartFormData) in
......@@ -268,6 +274,16 @@ extension HTTP {
upload.responseJSON(completionHandler: { (dataResponse: DataResponse) in
do {
if let data = dataResponse.data {
let str = String(data: data, encoding: String.Encoding.utf8) as String!
print(str)
if let respo = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions()) as? String {
print(respo)
}
if let arrayResponse = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions()) as? [[String: Any]] {
if arrayResponse.count > 0 {
......@@ -298,6 +314,15 @@ extension HTTP {
if let token = User.bearerToken {
headers["Authorization"] = "Bearer \(token)"
}
if let authKey: String = UserDefaults.standard.value(forKey: "authKey") as? String {
headers["authKey"] = authKey
}
print(HOST_NAME + api)
print(headers)
print(type)
Alamofire.upload(multipartFormData: { (multipartFormData: MultipartFormData) in
......@@ -310,6 +335,7 @@ extension HTTP {
case .success(let upload, _, _):
upload.responseJSON(completionHandler: { (dataResponse: DataResponse) in
do {
if let data = dataResponse.data {
if let arrayResponse = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions()) as? [[String: Any]] {
result(arrayResponse, nil)
......
......@@ -616,14 +616,14 @@
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon" translatesAutoresizingMaskIntoConstraints="NO" id="ezQ-U5-oO1">
<imageView hidden="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon" translatesAutoresizingMaskIntoConstraints="NO" id="ezQ-U5-oO1">
<rect key="frame" x="53" y="193" width="15" height="15"/>
<constraints>
<constraint firstAttribute="width" constant="15" id="5gl-Ac-tD7"/>
<constraint firstAttribute="height" constant="15" id="xDC-bd-fQ4"/>
</constraints>
</imageView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="zCh-an-KAU">
<button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="zCh-an-KAU">
<rect key="frame" x="71" y="184" width="128" height="34"/>
<constraints>
<constraint firstAttribute="height" constant="34" id="1bF-Ga-12O"/>
......@@ -728,7 +728,7 @@
<constraint firstAttribute="bottom" secondItem="r0e-ef-PUj" secondAttribute="bottom" constant="-1" id="wXq-0W-2YS"/>
</constraints>
</scrollView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="u1o-98-HT4">
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="u1o-98-HT4">
<rect key="frame" x="8" y="436" width="359" height="211"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="wJF-Z0-5PM">
......
......@@ -350,28 +350,6 @@
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</textView>
<button opaque="NO" tag="2" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="aim-ke-KyC">
<rect key="frame" x="280" y="757" width="76" height="30"/>
<constraints>
<constraint firstAttribute="width" constant="76" id="kcR-5W-C0c"/>
<constraint firstAttribute="height" constant="30" id="lGv-vH-2Od"/>
</constraints>
<state key="normal" title="Take Piture"/>
<connections>
<action selector="takePhotoWithBtn:" destination="zhu-Ue-WYE" eventType="touchUpInside" id="0oj-Cu-aAM"/>
</connections>
</button>
<button opaque="NO" tag="1" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ig9-fx-7WX">
<rect key="frame" x="280" y="619" width="76" height="30"/>
<constraints>
<constraint firstAttribute="width" constant="76" id="hgA-CL-7kA"/>
<constraint firstAttribute="height" constant="30" id="xgB-GD-VW2"/>
</constraints>
<state key="normal" title="Take Piture"/>
<connections>
<action selector="takePhotoWithBtn:" destination="zhu-Ue-WYE" eventType="touchUpInside" id="4tE-1k-N6F"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="JU5-Fr-HgQ" customClass="DrawButton" customModule="Bhagyashree" customModuleProvider="target">
<rect key="frame" x="83" y="856" width="210" height="36"/>
<color key="backgroundColor" red="0.0" green="0.42745098040000001" blue="0.56078431370000004" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
......@@ -430,7 +408,6 @@
<constraint firstItem="CGG-SI-m0E" firstAttribute="top" secondItem="JU5-Fr-HgQ" secondAttribute="bottom" constant="14" id="IJs-xw-L2F"/>
<constraint firstItem="qUd-bh-MaQ" firstAttribute="top" secondItem="nCb-mZ-4Kn" secondAttribute="bottom" constant="21" id="IRt-G9-NTe"/>
<constraint firstItem="ccy-UX-cXf" firstAttribute="top" secondItem="YHC-d9-7fJ" secondAttribute="bottom" constant="31" id="Jb8-2C-Qwk"/>
<constraint firstAttribute="trailing" secondItem="ig9-fx-7WX" secondAttribute="trailing" constant="19" id="Jc2-Lm-sVt"/>
<constraint firstAttribute="trailing" secondItem="EuR-Ly-5IJ" secondAttribute="trailing" constant="8" id="LLH-HQ-ak5"/>
<constraint firstItem="T0e-su-JX9" firstAttribute="leading" secondItem="gSe-e2-Qxw" secondAttribute="trailing" constant="6" id="Lb3-XJ-9sZ"/>
<constraint firstItem="7we-kl-2AX" firstAttribute="centerY" secondItem="nCb-mZ-4Kn" secondAttribute="centerY" id="Mwc-KI-iC8"/>
......@@ -444,7 +421,6 @@
<constraint firstItem="gSe-e2-Qxw" firstAttribute="centerY" secondItem="H0L-nU-qbv" secondAttribute="centerY" id="XBe-tZ-8sJ"/>
<constraint firstAttribute="trailing" secondItem="QQT-o7-axf" secondAttribute="trailing" constant="7" id="Xvy-7S-tkn"/>
<constraint firstItem="t92-bJ-nme" firstAttribute="top" secondItem="qUd-bh-MaQ" secondAttribute="bottom" constant="35" id="YVp-XM-3xv"/>
<constraint firstItem="aim-ke-KyC" firstAttribute="top" secondItem="TXy-Qw-urq" secondAttribute="bottom" constant="54" id="acV-HA-OGm"/>
<constraint firstItem="RzE-WI-C5J" firstAttribute="leading" secondItem="7we-kl-2AX" secondAttribute="trailing" constant="5" id="bbe-fq-mBJ"/>
<constraint firstItem="020-VN-qc4" firstAttribute="leading" secondItem="vHx-fe-nbC" secondAttribute="leading" constant="8" id="bgd-D3-rcB"/>
<constraint firstItem="YHC-d9-7fJ" firstAttribute="top" secondItem="t92-bJ-nme" secondAttribute="bottom" constant="8" id="dr1-Um-5gz"/>
......@@ -457,11 +433,9 @@
<constraint firstItem="EuR-Ly-5IJ" firstAttribute="top" secondItem="TXy-Qw-urq" secondAttribute="bottom" constant="8" id="kQz-95-MCn"/>
<constraint firstItem="ccy-UX-cXf" firstAttribute="leading" secondItem="vHx-fe-nbC" secondAttribute="leading" constant="9" id="lnm-ma-NZ1"/>
<constraint firstAttribute="trailing" secondItem="ccy-UX-cXf" secondAttribute="trailing" constant="8" id="mOq-A4-Ks4"/>
<constraint firstItem="ig9-fx-7WX" firstAttribute="top" secondItem="Ywz-l1-Adc" secondAttribute="bottom" constant="3" id="mVY-MJ-XUS"/>
<constraint firstAttribute="trailing" secondItem="K1J-os-jv9" secondAttribute="trailing" constant="8" id="nV6-Da-sfD"/>
<constraint firstItem="H0L-nU-qbv" firstAttribute="leading" secondItem="qUd-bh-MaQ" secondAttribute="trailing" constant="23" id="peZ-8I-syB"/>
<constraint firstAttribute="height" constant="1000" id="rlm-VI-vg6"/>
<constraint firstAttribute="trailing" secondItem="aim-ke-KyC" secondAttribute="trailing" constant="19" id="rz7-Oz-FBa"/>
<constraint firstAttribute="trailing" secondItem="So9-hL-qh7" secondAttribute="trailing" constant="8" id="tF2-y5-JtX"/>
<constraint firstItem="YHC-d9-7fJ" firstAttribute="leading" secondItem="vHx-fe-nbC" secondAttribute="leading" constant="8" id="w12-my-FJm"/>
<constraint firstAttribute="trailing" secondItem="t92-bJ-nme" secondAttribute="trailing" constant="7" id="xaN-Zb-8yf"/>
......
......@@ -1764,7 +1764,10 @@
<rect key="frame" x="46" y="6" width="269" height="30"/>
<nil key="textColor"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits" returnKeyType="done" secureTextEntry="YES"/>
<textInputTraits key="textInputTraits" returnKeyType="next" secureTextEntry="YES"/>
<connections>
<outlet property="delegate" destination="17r-tI-H77" id="MzH-tj-cGF"/>
</connections>
</textField>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="security_icon" translatesAutoresizingMaskIntoConstraints="NO" id="4qQ-Ft-8gD">
<rect key="frame" x="13" y="10" width="20" height="20"/>
......@@ -1805,7 +1808,10 @@
<rect key="frame" x="46" y="6" width="269" height="30"/>
<nil key="textColor"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits" returnKeyType="done" secureTextEntry="YES"/>
<textInputTraits key="textInputTraits" returnKeyType="next" secureTextEntry="YES"/>
<connections>
<outlet property="delegate" destination="17r-tI-H77" id="fVk-S7-5zG"/>
</connections>
</textField>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="security_icon" translatesAutoresizingMaskIntoConstraints="NO" id="DGK-rD-8vn">
<rect key="frame" x="13" y="10" width="20" height="20"/>
......@@ -1847,6 +1853,9 @@
<nil key="textColor"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits" returnKeyType="done" secureTextEntry="YES"/>
<connections>
<outlet property="delegate" destination="17r-tI-H77" id="yMm-tK-8qQ"/>
</connections>
</textField>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="jJb-Hn-AJy">
<rect key="frame" x="0.0" y="43" width="318" height="0.5"/>
......@@ -1880,10 +1889,13 @@
<constraint firstItem="jJb-Hn-AJy" firstAttribute="top" secondItem="VFb-zZ-plw" secondAttribute="bottom" constant="8" id="qFU-ZW-PIJ"/>
</constraints>
</view>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="2RO-1S-qkH" customClass="DrawButton" customModule="Bhagyashree" customModuleProvider="target">
<rect key="frame" x="82" y="292" width="210" height="36"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="2RO-1S-qkH" customClass="DrawButton" customModule="Bhagyashree" customModuleProvider="target">
<rect key="frame" x="82" y="292" width="210" height="33"/>
<color key="backgroundColor" red="0.0" green="0.42745098040000001" blue="0.56078431370000004" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="33" id="hri-F0-Xao"/>
<constraint firstAttribute="width" constant="210" id="tJC-QT-U6Q"/>
</constraints>
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/>
<state key="normal" title="Confirm">
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
......@@ -1906,6 +1918,8 @@
<constraint firstItem="Alg-cj-2sN" firstAttribute="leading" secondItem="kfl-7B-O6b" secondAttribute="leading" id="J9S-Sm-Akz"/>
<constraint firstItem="Alg-cj-2sN" firstAttribute="top" secondItem="1dz-b6-rdD" secondAttribute="top" id="TPC-xE-8xn"/>
<constraint firstItem="jxe-cD-47o" firstAttribute="leading" secondItem="kfl-7B-O6b" secondAttribute="leading" constant="28" id="V7a-7G-J0M"/>
<constraint firstItem="2RO-1S-qkH" firstAttribute="top" secondItem="jxe-cD-47o" secondAttribute="bottom" constant="40" id="ZuD-ey-pqa"/>
<constraint firstItem="2RO-1S-qkH" firstAttribute="centerX" secondItem="kfl-7B-O6b" secondAttribute="centerX" id="dxc-Wx-Rfp"/>
<constraint firstItem="IR0-vK-Y6y" firstAttribute="top" secondItem="Alg-cj-2sN" secondAttribute="bottom" constant="45" id="eIg-qR-eWo"/>
<constraint firstItem="Alg-cj-2sN" firstAttribute="trailing" secondItem="kfl-7B-O6b" secondAttribute="trailing" id="igz-9j-Xhe"/>
<constraint firstItem="kfl-7B-O6b" firstAttribute="trailing" secondItem="IR0-vK-Y6y" secondAttribute="trailing" constant="29" id="mRd-ip-QEE"/>
......@@ -1923,7 +1937,7 @@
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="Bd5-Ua-F52" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="3481" y="-3018"/>
<point key="canvasLocation" x="3480.8000000000002" y="-3018.440779610195"/>
</scene>
<!--Me-->
<scene sceneID="ijl-tU-9Jj">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment