Merge branch 'development' into ZohaibKambrani

* development: (102 commits)
  prescription changes
  pescription changes
  fix imports
  project refactoring
  working on feature medical profile
  prescription changes
  hot fix
  hot fix
  hot fix
  refactoring
  hot fix
  hot fix
  add prescription form changes
  Add Medical Report Page
  hot fix
  hot fix
  add prescription changes
  fix in note and AddReplayOnReferralPatient
  Add Prescription changes
  prescription changes
  ...

# Conflicts:
#	lib/screens/patients/DischargedPatientPage.dart
#	lib/screens/patients/ReferralDischargedPatientDetails.dart
#	lib/screens/patients/insurance_approvals_details.dart
#	lib/screens/patients/patients_screen.dart
#	lib/screens/patients/profile/note/progress_note_screen.dart
#	lib/screens/patients/profile/referral/referral_patient_detail_in-paint.dart
#	lib/screens/prescription/update_prescription_form.dart
#	lib/screens/sick-leave/add-sickleave.dart
#	lib/widgets/patients/PatientCard.dart
#	pubspec.lock
videocall_popup
Zohaib Iqbal Kambrani 5 years ago
parent 64001e6b19
commit 693f57a13e

@ -1,327 +0,0 @@
PODS:
- Alamofire (5.4.3)
- barcode_scan_fix (0.0.1):
- Flutter
- MTBBarcodeScanner
- connectivity (0.0.1):
- Flutter
- Reachability
- connectivity_for_web (0.1.0):
- Flutter
- connectivity_macos (0.0.1):
- Flutter
- device_info (0.0.1):
- Flutter
- Firebase/CoreOnly (6.33.0):
- FirebaseCore (= 6.10.3)
- Firebase/Messaging (6.33.0):
- Firebase/CoreOnly
- FirebaseMessaging (~> 4.7.0)
- firebase_core (0.5.3):
- Firebase/CoreOnly (~> 6.33.0)
- Flutter
- firebase_core_web (0.1.0):
- Flutter
- firebase_messaging (7.0.3):
- Firebase/CoreOnly (~> 6.33.0)
- Firebase/Messaging (~> 6.33.0)
- firebase_core
- Flutter
- FirebaseCore (6.10.3):
- FirebaseCoreDiagnostics (~> 1.6)
- GoogleUtilities/Environment (~> 6.7)
- GoogleUtilities/Logger (~> 6.7)
- FirebaseCoreDiagnostics (1.7.0):
- GoogleDataTransport (~> 7.4)
- GoogleUtilities/Environment (~> 6.7)
- GoogleUtilities/Logger (~> 6.7)
- nanopb (~> 1.30906.0)
- FirebaseInstallations (1.7.0):
- FirebaseCore (~> 6.10)
- GoogleUtilities/Environment (~> 6.7)
- GoogleUtilities/UserDefaults (~> 6.7)
- PromisesObjC (~> 1.2)
- FirebaseInstanceID (4.8.0):
- FirebaseCore (~> 6.10)
- FirebaseInstallations (~> 1.6)
- GoogleUtilities/Environment (~> 6.7)
- GoogleUtilities/UserDefaults (~> 6.7)
- FirebaseMessaging (4.7.1):
- FirebaseCore (~> 6.10)
- FirebaseInstanceID (~> 4.7)
- GoogleUtilities/AppDelegateSwizzler (~> 6.7)
- GoogleUtilities/Environment (~> 6.7)
- GoogleUtilities/Reachability (~> 6.7)
- GoogleUtilities/UserDefaults (~> 6.7)
- Protobuf (>= 3.9.2, ~> 3.9)
- Flutter (1.0.0)
- flutter_flexible_toast (0.0.1):
- Flutter
- flutter_inappwebview (0.0.1):
- Flutter
- flutter_plugin_android_lifecycle (0.0.1):
- Flutter
- GoogleDataTransport (7.5.1):
- nanopb (~> 1.30906.0)
- GoogleUtilities/AppDelegateSwizzler (6.7.2):
- GoogleUtilities/Environment
- GoogleUtilities/Logger
- GoogleUtilities/Network
- GoogleUtilities/Environment (6.7.2):
- PromisesObjC (~> 1.2)
- GoogleUtilities/Logger (6.7.2):
- GoogleUtilities/Environment
- GoogleUtilities/Network (6.7.2):
- GoogleUtilities/Logger
- "GoogleUtilities/NSData+zlib"
- GoogleUtilities/Reachability
- "GoogleUtilities/NSData+zlib (6.7.2)"
- GoogleUtilities/Reachability (6.7.2):
- GoogleUtilities/Logger
- GoogleUtilities/UserDefaults (6.7.2):
- GoogleUtilities/Logger
- hexcolor (0.0.1):
- Flutter
- imei_plugin (0.0.1):
- Flutter
- local_auth (0.0.1):
- Flutter
- maps_launcher (0.0.1):
- Flutter
- MTBBarcodeScanner (5.0.11)
- nanopb (1.30906.0):
- nanopb/decode (= 1.30906.0)
- nanopb/encode (= 1.30906.0)
- nanopb/decode (1.30906.0)
- nanopb/encode (1.30906.0)
- OpenTok (2.15.3)
- path_provider_linux (0.0.1):
- Flutter
- path_provider_windows (0.0.1):
- Flutter
- "permission_handler (5.1.0+2)":
- Flutter
- PromisesObjC (1.2.12)
- Protobuf (3.17.0)
- Reachability (3.2)
- screen (0.0.1):
- Flutter
- shared_preferences (0.0.1):
- Flutter
- shared_preferences_linux (0.0.1):
- Flutter
- shared_preferences_macos (0.0.1):
- Flutter
- shared_preferences_web (0.0.1):
- Flutter
- shared_preferences_windows (0.0.1):
- Flutter
- speech_to_text (0.0.1):
- Flutter
- Try
- Try (2.1.1)
- url_launcher (0.0.1):
- Flutter
- url_launcher_linux (0.0.1):
- Flutter
- url_launcher_macos (0.0.1):
- Flutter
- url_launcher_web (0.0.1):
- Flutter
- url_launcher_windows (0.0.1):
- Flutter
- video_player (0.0.1):
- Flutter
- video_player_web (0.0.1):
- Flutter
- wakelock (0.0.1):
- Flutter
- webview_flutter (0.0.1):
- Flutter
DEPENDENCIES:
- Alamofire (~> 5.2)
- barcode_scan_fix (from `.symlinks/plugins/barcode_scan_fix/ios`)
- connectivity (from `.symlinks/plugins/connectivity/ios`)
- connectivity_for_web (from `.symlinks/plugins/connectivity_for_web/ios`)
- connectivity_macos (from `.symlinks/plugins/connectivity_macos/ios`)
- device_info (from `.symlinks/plugins/device_info/ios`)
- firebase_core (from `.symlinks/plugins/firebase_core/ios`)
- firebase_core_web (from `.symlinks/plugins/firebase_core_web/ios`)
- firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`)
- Flutter (from `Flutter`)
- flutter_flexible_toast (from `.symlinks/plugins/flutter_flexible_toast/ios`)
- flutter_inappwebview (from `.symlinks/plugins/flutter_inappwebview/ios`)
- flutter_plugin_android_lifecycle (from `.symlinks/plugins/flutter_plugin_android_lifecycle/ios`)
- hexcolor (from `.symlinks/plugins/hexcolor/ios`)
- imei_plugin (from `.symlinks/plugins/imei_plugin/ios`)
- local_auth (from `.symlinks/plugins/local_auth/ios`)
- maps_launcher (from `.symlinks/plugins/maps_launcher/ios`)
- OpenTok
- path_provider_linux (from `.symlinks/plugins/path_provider_linux/ios`)
- path_provider_windows (from `.symlinks/plugins/path_provider_windows/ios`)
- permission_handler (from `.symlinks/plugins/permission_handler/ios`)
- screen (from `.symlinks/plugins/screen/ios`)
- shared_preferences (from `.symlinks/plugins/shared_preferences/ios`)
- shared_preferences_linux (from `.symlinks/plugins/shared_preferences_linux/ios`)
- shared_preferences_macos (from `.symlinks/plugins/shared_preferences_macos/ios`)
- shared_preferences_web (from `.symlinks/plugins/shared_preferences_web/ios`)
- shared_preferences_windows (from `.symlinks/plugins/shared_preferences_windows/ios`)
- speech_to_text (from `.symlinks/plugins/speech_to_text/ios`)
- url_launcher (from `.symlinks/plugins/url_launcher/ios`)
- url_launcher_linux (from `.symlinks/plugins/url_launcher_linux/ios`)
- url_launcher_macos (from `.symlinks/plugins/url_launcher_macos/ios`)
- url_launcher_web (from `.symlinks/plugins/url_launcher_web/ios`)
- url_launcher_windows (from `.symlinks/plugins/url_launcher_windows/ios`)
- video_player (from `.symlinks/plugins/video_player/ios`)
- video_player_web (from `.symlinks/plugins/video_player_web/ios`)
- wakelock (from `.symlinks/plugins/wakelock/ios`)
- webview_flutter (from `.symlinks/plugins/webview_flutter/ios`)
SPEC REPOS:
trunk:
- Alamofire
- Firebase
- FirebaseCore
- FirebaseCoreDiagnostics
- FirebaseInstallations
- FirebaseInstanceID
- FirebaseMessaging
- GoogleDataTransport
- GoogleUtilities
- MTBBarcodeScanner
- nanopb
- OpenTok
- PromisesObjC
- Protobuf
- Reachability
- Try
EXTERNAL SOURCES:
barcode_scan_fix:
:path: ".symlinks/plugins/barcode_scan_fix/ios"
connectivity:
:path: ".symlinks/plugins/connectivity/ios"
connectivity_for_web:
:path: ".symlinks/plugins/connectivity_for_web/ios"
connectivity_macos:
:path: ".symlinks/plugins/connectivity_macos/ios"
device_info:
:path: ".symlinks/plugins/device_info/ios"
firebase_core:
:path: ".symlinks/plugins/firebase_core/ios"
firebase_core_web:
:path: ".symlinks/plugins/firebase_core_web/ios"
firebase_messaging:
:path: ".symlinks/plugins/firebase_messaging/ios"
Flutter:
:path: Flutter
flutter_flexible_toast:
:path: ".symlinks/plugins/flutter_flexible_toast/ios"
flutter_inappwebview:
:path: ".symlinks/plugins/flutter_inappwebview/ios"
flutter_plugin_android_lifecycle:
:path: ".symlinks/plugins/flutter_plugin_android_lifecycle/ios"
hexcolor:
:path: ".symlinks/plugins/hexcolor/ios"
imei_plugin:
:path: ".symlinks/plugins/imei_plugin/ios"
local_auth:
:path: ".symlinks/plugins/local_auth/ios"
maps_launcher:
:path: ".symlinks/plugins/maps_launcher/ios"
path_provider_linux:
:path: ".symlinks/plugins/path_provider_linux/ios"
path_provider_windows:
:path: ".symlinks/plugins/path_provider_windows/ios"
permission_handler:
:path: ".symlinks/plugins/permission_handler/ios"
screen:
:path: ".symlinks/plugins/screen/ios"
shared_preferences:
:path: ".symlinks/plugins/shared_preferences/ios"
shared_preferences_linux:
:path: ".symlinks/plugins/shared_preferences_linux/ios"
shared_preferences_macos:
:path: ".symlinks/plugins/shared_preferences_macos/ios"
shared_preferences_web:
:path: ".symlinks/plugins/shared_preferences_web/ios"
shared_preferences_windows:
:path: ".symlinks/plugins/shared_preferences_windows/ios"
speech_to_text:
:path: ".symlinks/plugins/speech_to_text/ios"
url_launcher:
:path: ".symlinks/plugins/url_launcher/ios"
url_launcher_linux:
:path: ".symlinks/plugins/url_launcher_linux/ios"
url_launcher_macos:
:path: ".symlinks/plugins/url_launcher_macos/ios"
url_launcher_web:
:path: ".symlinks/plugins/url_launcher_web/ios"
url_launcher_windows:
:path: ".symlinks/plugins/url_launcher_windows/ios"
video_player:
:path: ".symlinks/plugins/video_player/ios"
video_player_web:
:path: ".symlinks/plugins/video_player_web/ios"
wakelock:
:path: ".symlinks/plugins/wakelock/ios"
webview_flutter:
:path: ".symlinks/plugins/webview_flutter/ios"
SPEC CHECKSUMS:
Alamofire: e447a2774a40c996748296fa2c55112fdbbc42f9
barcode_scan_fix: 80dd65de55f27eec6591dd077c8b85f2b79e31f1
connectivity: c4130b2985d4ef6fd26f9702e886bd5260681467
connectivity_for_web: 2b8584556930d4bd490d82b836bcf45067ce345b
connectivity_macos: e2e9731b6b22dda39eb1b128f6969d574460e191
device_info: d7d233b645a32c40dfdc212de5cf646ca482f175
Firebase: 8db6f2d1b2c5e2984efba4949a145875a8f65fe5
firebase_core: 5d6a02f3d85acd5f8321c2d6d62877626a670659
firebase_core_web: d501d8b946b60c8af265428ce483b0fff5ad52d1
firebase_messaging: 0aea2cd5885b65e19ede58ee3507f485c992cc75
FirebaseCore: d889d9e12535b7f36ac8bfbf1713a0836a3012cd
FirebaseCoreDiagnostics: 770ac5958e1372ce67959ae4b4f31d8e127c3ac1
FirebaseInstallations: 466c7b4d1f58fe16707693091da253726a731ed2
FirebaseInstanceID: bd3ffc24367f901a43c063b36c640b345a4a5dd1
FirebaseMessaging: 5eca4ef173de76253352511aafef774caa1cba2a
Flutter: 0e3d915762c693b495b44d77113d4970485de6ec
flutter_flexible_toast: 0547e740cae0c33bb7c51bcd931233f4584e1143
flutter_inappwebview: 69dfbac46157b336ffbec19ca6dfd4638c7bf189
flutter_plugin_android_lifecycle: dc0b544e129eebb77a6bfb1239d4d1c673a60a35
GoogleDataTransport: f56af7caa4ed338dc8e138a5d7c5973e66440833
GoogleUtilities: 7f2f5a07f888cdb145101d6042bc4422f57e70b3
hexcolor: fdfb9c4258ad96e949c2dbcdf790a62194b8aa89
imei_plugin: cb1af7c223ac2d82dcd1457a7137d93d65d2a3cd
local_auth: 25938960984c3a7f6e3253e3f8d962fdd16852bd
maps_launcher: eae38ee13a9c3f210fa04e04bb4c073fa4c6ed92
MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb
nanopb: 59317e09cf1f1a0af72f12af412d54edf52603fc
OpenTok: fde03ecc5ea31fe0a453242847c4ee1f47e1d735
path_provider_linux: 4d630dc393e1f20364f3e3b4a2ff41d9674a84e4
path_provider_windows: a2b81600c677ac1959367280991971cb9a1edb3b
permission_handler: ccb20a9fad0ee9b1314a52b70b76b473c5f8dab0
PromisesObjC: 3113f7f76903778cf4a0586bd1ab89329a0b7b97
Protobuf: 7327d4444215b5f18e560a97f879ff5503c4581c
Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96
screen: abd91ca7bf3426e1cc3646d27e9b2358d6bf07b0
shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d
shared_preferences_linux: afefbfe8d921e207f01ede8b60373d9e3b566b78
shared_preferences_macos: f3f29b71ccbb56bf40c9dd6396c9acf15e214087
shared_preferences_web: 141cce0c3ed1a1c5bf2a0e44f52d31eeb66e5ea9
shared_preferences_windows: 36b76d6f54e76ead957e60b49e2f124b4cd3e6ae
speech_to_text: b43a7d99aef037bd758ed8e45d79bbac035d2dfe
Try: 5ef669ae832617b3cee58cb2c6f99fb767a4ff96
url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef
url_launcher_linux: ac237cb7a8058736e4aae38bdbcc748a4b394cc0
url_launcher_macos: fd7894421cd39320dce5f292fc99ea9270b2a313
url_launcher_web: e5527357f037c87560776e36436bf2b0288b965c
url_launcher_windows: 683d7c283894db8d1914d3ab2223b20cc1ad95d5
video_player: 9cc823b1d9da7e8427ee591e8438bfbcde500e6e
video_player_web: da8cadb8274ed4f8dbee8d7171b420dedd437ce7
wakelock: 0d4a70faf8950410735e3f61fb15d517c8a6efc4
webview_flutter: d2b4d6c66968ad042ad94cbb791f5b72b4678a96
PODFILE CHECKSUM: d0a3789a37635365b4345e456835ed9d30398217
COCOAPODS: 1.10.1

@ -9,12 +9,15 @@
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
29211E4225C172B700DD740D /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 29211E4125C172B700DD740D /* GoogleService-Info.plist */; }; 29211E4225C172B700DD740D /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 29211E4125C172B700DD740D /* GoogleService-Info.plist */; };
300790FA266FB14B0052174C /* VCEmbeder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 300790F9266FB14B0052174C /* VCEmbeder.swift */; };
30F70E6C266F56FD005D8F8E /* MainAppViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30F70E6B266F56FD005D8F8E /* MainAppViewController.swift */; };
30F70E6F266F6509005D8F8E /* VideoCallRequestParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30F70E6E266F6509005D8F8E /* VideoCallRequestParameters.swift */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
9CE61EBD24AB366E008D68DD /* VideoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CE61EBC24AB366E008D68DD /* VideoViewController.swift */; }; 9CE61EBD24AB366E008D68DD /* VideoCallViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CE61EBC24AB366E008D68DD /* VideoCallViewController.swift */; };
9CE61ECD24ADBB4C008D68DD /* ICallProtocoll.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CE61ECC24ADBB4C008D68DD /* ICallProtocoll.swift */; }; 9CE61ECD24ADBB4C008D68DD /* ICallProtocoll.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CE61ECC24ADBB4C008D68DD /* ICallProtocoll.swift */; };
B650DC3076E9D70CB188286A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93A5F83B23AB032D1E096663 /* Pods_Runner.framework */; }; B650DC3076E9D70CB188286A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93A5F83B23AB032D1E096663 /* Pods_Runner.framework */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
@ -37,6 +40,9 @@
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
29211CD725C165D600DD740D /* RunnerRelease.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = RunnerRelease.entitlements; sourceTree = "<group>"; }; 29211CD725C165D600DD740D /* RunnerRelease.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = RunnerRelease.entitlements; sourceTree = "<group>"; };
29211E4125C172B700DD740D /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; }; 29211E4125C172B700DD740D /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
300790F9266FB14B0052174C /* VCEmbeder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VCEmbeder.swift; sourceTree = "<group>"; };
30F70E6B266F56FD005D8F8E /* MainAppViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainAppViewController.swift; sourceTree = "<group>"; };
30F70E6E266F6509005D8F8E /* VideoCallRequestParameters.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoCallRequestParameters.swift; sourceTree = "<group>"; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
@ -50,7 +56,7 @@
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
9CE61EBC24AB366E008D68DD /* VideoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoViewController.swift; sourceTree = "<group>"; }; 9CE61EBC24AB366E008D68DD /* VideoCallViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoCallViewController.swift; sourceTree = "<group>"; };
9CE61ECC24ADBB4C008D68DD /* ICallProtocoll.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ICallProtocoll.swift; sourceTree = "<group>"; }; 9CE61ECC24ADBB4C008D68DD /* ICallProtocoll.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ICallProtocoll.swift; sourceTree = "<group>"; };
9D4B7DB43C6A6C849D2387CE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; }; 9D4B7DB43C6A6C849D2387CE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
E698D7B14B12DF768FE47A1A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; }; E698D7B14B12DF768FE47A1A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
@ -68,6 +74,30 @@
/* End PBXFrameworksBuildPhase section */ /* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */ /* Begin PBXGroup section */
300790F8266FB0F10052174C /* helpers */ = {
isa = PBXGroup;
children = (
300790F9266FB14B0052174C /* VCEmbeder.swift */,
);
name = helpers;
sourceTree = "<group>";
};
30F70E6A266F56C9005D8F8E /* controllers */ = {
isa = PBXGroup;
children = (
30F70E6B266F56FD005D8F8E /* MainAppViewController.swift */,
);
name = controllers;
sourceTree = "<group>";
};
30F70E6D266F64F8005D8F8E /* Models */ = {
isa = PBXGroup;
children = (
30F70E6E266F6509005D8F8E /* VideoCallRequestParameters.swift */,
);
name = Models;
sourceTree = "<group>";
};
7D66D387293CE5376A07EC5F /* Pods */ = { 7D66D387293CE5376A07EC5F /* Pods */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@ -111,6 +141,9 @@
97C146F01CF9000F007C117D /* Runner */ = { 97C146F01CF9000F007C117D /* Runner */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
300790F8266FB0F10052174C /* helpers */,
30F70E6D266F64F8005D8F8E /* Models */,
30F70E6A266F56C9005D8F8E /* controllers */,
29211E4125C172B700DD740D /* GoogleService-Info.plist */, 29211E4125C172B700DD740D /* GoogleService-Info.plist */,
29211CD725C165D600DD740D /* RunnerRelease.entitlements */, 29211CD725C165D600DD740D /* RunnerRelease.entitlements */,
97C146FA1CF9000F007C117D /* Main.storyboard */, 97C146FA1CF9000F007C117D /* Main.storyboard */,
@ -122,7 +155,7 @@
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
74858FAE1ED2DC5600515810 /* AppDelegate.swift */, 74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
9CE61EBC24AB366E008D68DD /* VideoViewController.swift */, 9CE61EBC24AB366E008D68DD /* VideoCallViewController.swift */,
9CE61ECC24ADBB4C008D68DD /* ICallProtocoll.swift */, 9CE61ECC24ADBB4C008D68DD /* ICallProtocoll.swift */,
); );
path = Runner; path = Runner;
@ -290,10 +323,13 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
300790FA266FB14B0052174C /* VCEmbeder.swift in Sources */,
30F70E6F266F6509005D8F8E /* VideoCallRequestParameters.swift in Sources */,
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
9CE61EBD24AB366E008D68DD /* VideoViewController.swift in Sources */, 9CE61EBD24AB366E008D68DD /* VideoCallViewController.swift in Sources */,
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
9CE61ECD24ADBB4C008D68DD /* ICallProtocoll.swift in Sources */, 9CE61ECD24ADBB4C008D68DD /* ICallProtocoll.swift in Sources */,
30F70E6C266F56FD005D8F8E /* MainAppViewController.swift in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };

@ -22,34 +22,8 @@ import OpenTok
_ application: UIApplication, _ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool { ) -> Bool {
let controller : FlutterViewController = window?.rootViewController as! FlutterViewController
let videoCallChannel = FlutterMethodChannel(name: "Dr.cloudSolution/videoCall",
binaryMessenger: controller.binaryMessenger)
videoCallChannel.setMethodCallHandler({
(call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
self.result = result
switch call.method {
case "openVideoCall":
do {
let arguments = call.arguments as? NSDictionary
let kApiKey = arguments!["kApiKey"] as? String
let kSessionId = arguments!["kSessionId"] as? String
let kToken = arguments!["kToken"] as? String
let appLang = arguments!["appLang"] as? String
let vC_ID = arguments!["VC_ID"] as? Int
let tokenID = arguments!["TokenID"] as? String
let generalId = arguments!["generalId"] as? String
let doctorId = arguments!["DoctorId"] as? Int
let baseUrl = arguments!["baseUrl"] as? String
self.openVideoChat(result: result,kApiKey: kApiKey!,kSessionId:kSessionId!,kToken: kToken!, appLang: appLang!, vC_ID: vC_ID!,tokenID: tokenID!,generalId: generalId!,doctorId: doctorId!, baseUrl: baseUrl!) GeneratedPluginRegistrant.register(with: self)
}
default:
result(FlutterMethodNotImplemented)
}
})
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions) return super.application(application, didFinishLaunchingWithOptions: launchOptions)
} }
@ -61,7 +35,7 @@ import OpenTok
let storyboard = UIStoryboard(name: "Main", bundle: nil) let storyboard = UIStoryboard(name: "Main", bundle: nil)
let identifier = "ViewControllerNav" let identifier = "ViewControllerNav"
let navVC = storyboard.instantiateViewController(withIdentifier: identifier) as! UINavigationController let navVC = storyboard.instantiateViewController(withIdentifier: identifier) as! UINavigationController
let videoVC = navVC.viewControllers.first as! ViewController let videoVC = navVC.viewControllers.first as! VideoCallViewController
videoVC.kApiKey=kApiKey videoVC.kApiKey=kApiKey
videoVC.kSessionId=kSessionId videoVC.kSessionId=kSessionId
videoVC.kToken=kToken videoVC.kToken=kToken
@ -78,3 +52,4 @@ import OpenTok
} }
} }

@ -1,6 +1,6 @@
{ {
"info" : { "info" : {
"version" : 1, "author" : "xcode",
"author" : "xcode" "version" : 1
} }
} }

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "end_call.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "expand.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "Group 8024.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "mic_mute.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "Group 8020.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "video_mute.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "Group 8022.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

@ -1,16 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="16097" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r"> <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="18122" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
<device id="retina6_1" orientation="portrait" appearance="light"/> <device id="retina6_1" orientation="portrait" appearance="light"/>
<dependencies> <dependencies>
<deployment identifier="iOS"/> <deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="18093"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies> </dependencies>
<scenes> <scenes>
<!--Flutter View Controller--> <!--Main App View Controller-->
<scene sceneID="tne-QT-ifu"> <scene sceneID="tne-QT-ifu">
<objects> <objects>
<viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController"> <viewController id="BYZ-38-t0r" customClass="MainAppViewController" customModule="Runner" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides> <layoutGuides>
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/> <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/> <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
@ -23,12 +23,12 @@
</viewController> </viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/> <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects> </objects>
<point key="canvasLocation" x="-45" y="1436"/> <point key="canvasLocation" x="-1535" y="2239"/>
</scene> </scene>
<!--View Controller--> <!--Video Call View Controller-->
<scene sceneID="L7v-n1-KvF"> <scene sceneID="L7v-n1-KvF">
<objects> <objects>
<viewController id="t2c-G5-7AE" customClass="ViewController" customModule="Runner" customModuleProvider="target" sceneMemberID="viewController"> <viewController storyboardIdentifier="videoCall" id="t2c-G5-7AE" customClass="VideoCallViewController" customModule="Runner" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides> <layoutGuides>
<viewControllerLayoutGuide type="top" id="BIa-yr-ZMY"/> <viewControllerLayoutGuide type="top" id="BIa-yr-ZMY"/>
<viewControllerLayoutGuide type="bottom" id="VIH-1T-Ife"/> <viewControllerLayoutGuide type="bottom" id="VIH-1T-Ife"/>
@ -37,252 +37,451 @@
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/> <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6C5-o5-R1n" userLabel="controlButtonSpacer"> <view contentMode="scaleToFill" restorationIdentifier="VideoCallNavigationViewController" translatesAutoresizingMaskIntoConstraints="NO" id="eOT-Jr-GUl" userLabel="remoteVideo">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
</view>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="videoMutedIndicator" translatesAutoresizingMaskIntoConstraints="NO" id="CL1-2v-m1L" userLabel="remoteVideoMutedIndicator">
<rect key="frame" x="147" y="398" width="120" height="100"/>
<constraints>
<constraint firstAttribute="width" constant="120" id="eon-3Z-74P"/>
<constraint firstAttribute="height" constant="100" id="iyK-hL-H3m"/>
</constraints>
</imageView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="XHG-Db-3Px">
<rect key="frame" x="270" y="40" width="124" height="174"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="0ZP-s2-kM5" userLabel="localVideo">
<rect key="frame" x="0.0" y="0.0" width="124" height="174"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="5"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="number" keyPath="layer.borderWidth">
<real key="value" value="0.5"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6y1-an-W7F">
<rect key="frame" x="0.0" y="0.0" width="124" height="174"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="videoMutedIndicator" translatesAutoresizingMaskIntoConstraints="NO" id="FEH-bC-Hnh" userLabel="localVideoMutedIndicator">
<rect key="frame" x="44" y="72" width="36" height="30"/>
<constraints>
<constraint firstAttribute="height" constant="30" id="1iv-w5-GDT"/>
<constraint firstAttribute="width" constant="36" id="AwX-vQ-Ynn"/>
</constraints>
</imageView>
</subviews>
<color key="backgroundColor" white="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="FEH-bC-Hnh" firstAttribute="centerX" secondItem="6y1-an-W7F" secondAttribute="centerX" id="dtO-VP-8qV"/>
<constraint firstItem="FEH-bC-Hnh" firstAttribute="centerY" secondItem="6y1-an-W7F" secondAttribute="centerY" id="lpW-Vr-bH2"/>
</constraints>
</view>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="0ZP-s2-kM5" firstAttribute="top" secondItem="XHG-Db-3Px" secondAttribute="top" id="E5A-Yq-Ods"/>
<constraint firstAttribute="trailing" secondItem="6y1-an-W7F" secondAttribute="trailing" id="I0l-x2-rGO"/>
<constraint firstAttribute="width" secondItem="XHG-Db-3Px" secondAttribute="height" multiplier="1:1.4" id="M3V-vM-m0V"/>
<constraint firstAttribute="bottom" secondItem="6y1-an-W7F" secondAttribute="bottom" id="T0D-IE-19P"/>
<constraint firstItem="6y1-an-W7F" firstAttribute="top" secondItem="XHG-Db-3Px" secondAttribute="top" id="T8b-Nd-jdR"/>
<constraint firstItem="6y1-an-W7F" firstAttribute="leading" secondItem="XHG-Db-3Px" secondAttribute="leading" id="brg-bp-MME"/>
<constraint firstAttribute="bottom" secondItem="0ZP-s2-kM5" secondAttribute="bottom" id="hso-Od-7QF"/>
<constraint firstItem="0ZP-s2-kM5" firstAttribute="leading" secondItem="XHG-Db-3Px" secondAttribute="leading" id="k5R-AM-3J6"/>
<constraint firstAttribute="trailing" secondItem="0ZP-s2-kM5" secondAttribute="trailing" id="z8V-qh-Rzq"/>
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="sK0-tB-H9u" userLabel="controlButtons">
<rect key="frame" x="0.0" y="791" width="414" height="105"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="r9w-8l-Zxj">
<rect key="frame" x="20" y="15" width="200" height="60"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="UZ6-EY-a59" userLabel="minMax">
<rect key="frame" x="0.0" y="0.0" width="60" height="60"/>
<constraints>
<constraint firstAttribute="width" secondItem="UZ6-EY-a59" secondAttribute="height" multiplier="1:1" id="Ula-Qc-wJE"/>
</constraints>
<state key="normal" title="Button" image="float_video"/>
<state key="selected" image="expand_video"/>
<connections>
<action selector="onMinimize:" destination="t2c-G5-7AE" eventType="touchUpInside" id="xul-cC-cbm"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleAspectFit" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="NUO-2p-pzL" userLabel="videoMuteButton">
<rect key="frame" x="70" y="0.0" width="60" height="60"/>
<constraints>
<constraint firstAttribute="width" secondItem="NUO-2p-pzL" secondAttribute="height" multiplier="1:1" id="KGm-Yp-MqK"/>
<constraint firstAttribute="height" constant="60" id="myf-me-Rk0"/>
</constraints>
<state key="normal" image="video_unmute"/>
<state key="selected" image="video_mute"/>
<connections>
<action selector="didClickVideoMuteButton:" destination="t2c-G5-7AE" eventType="touchUpInside" id="nk9-nS-UDE"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="N2h-FX-kF5" userLabel="muteButton">
<rect key="frame" x="140" y="0.0" width="60" height="60"/>
<constraints>
<constraint firstAttribute="width" secondItem="N2h-FX-kF5" secondAttribute="height" multiplier="1:1" id="hI1-G0-K3C"/>
</constraints>
<state key="normal" image="mic_unmute"/>
<state key="selected" image="mic_mute"/>
<connections>
<action selector="didClickMuteButton:" destination="t2c-G5-7AE" eventType="touchUpInside" id="7lr-uj-db1"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstItem="UZ6-EY-a59" firstAttribute="height" secondItem="NUO-2p-pzL" secondAttribute="height" id="kK6-uF-bf6"/>
<constraint firstItem="N2h-FX-kF5" firstAttribute="height" secondItem="NUO-2p-pzL" secondAttribute="height" id="o4R-49-iMe"/>
</constraints>
</stackView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="AoF-Up-Yu5" userLabel="hangUpButton">
<rect key="frame" x="334" y="15" width="60" height="60"/>
<constraints>
<constraint firstAttribute="width" secondItem="AoF-Up-Yu5" secondAttribute="height" multiplier="1:1" id="6LJ-QR-WEY"/>
</constraints>
<state key="normal" image="end_call"/>
<connections>
<action selector="hangUp:" destination="t2c-G5-7AE" eventType="touchUpInside" id="SUH-Gd-OXj"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstItem="r9w-8l-Zxj" firstAttribute="top" secondItem="sK0-tB-H9u" secondAttribute="top" constant="15" id="00C-1i-sGc"/>
<constraint firstItem="AoF-Up-Yu5" firstAttribute="bottom" secondItem="r9w-8l-Zxj" secondAttribute="bottom" id="1kB-OK-b0L"/>
<constraint firstAttribute="bottom" secondItem="r9w-8l-Zxj" secondAttribute="bottom" constant="30" id="G9u-kw-mVz"/>
<constraint firstItem="AoF-Up-Yu5" firstAttribute="top" secondItem="r9w-8l-Zxj" secondAttribute="top" id="H4s-Y8-HAI"/>
<constraint firstAttribute="trailing" secondItem="AoF-Up-Yu5" secondAttribute="trailing" constant="20" id="flB-AR-zo3"/>
<constraint firstItem="r9w-8l-Zxj" firstAttribute="leading" secondItem="sK0-tB-H9u" secondAttribute="leading" constant="20" id="x13-gZ-cYp"/>
</constraints>
</view>
</subviews>
<constraints>
<constraint firstItem="XHG-Db-3Px" firstAttribute="top" secondItem="PoR-7r-yNe" secondAttribute="top" constant="40" id="11Y-Ag-YNc"/>
<constraint firstItem="eOT-Jr-GUl" firstAttribute="top" secondItem="PoR-7r-yNe" secondAttribute="top" id="1GX-fj-ce8"/>
<constraint firstItem="eOT-Jr-GUl" firstAttribute="top" secondItem="PoR-7r-yNe" secondAttribute="top" id="8zP-pG-g2P"/>
<constraint firstItem="sK0-tB-H9u" firstAttribute="leading" secondItem="PoR-7r-yNe" secondAttribute="leading" id="Itp-Pe-kh9"/>
<constraint firstAttribute="bottom" secondItem="eOT-Jr-GUl" secondAttribute="bottom" id="KQg-N0-9AK"/>
<constraint firstItem="eOT-Jr-GUl" firstAttribute="leading" secondItem="PoR-7r-yNe" secondAttribute="leading" id="P4J-Tm-yNd"/>
<constraint firstAttribute="bottom" secondItem="sK0-tB-H9u" secondAttribute="bottom" id="Tu5-Op-mnF"/>
<constraint firstItem="CL1-2v-m1L" firstAttribute="centerY" secondItem="PoR-7r-yNe" secondAttribute="centerY" id="UGv-46-ri8"/>
<constraint firstItem="CL1-2v-m1L" firstAttribute="centerX" secondItem="PoR-7r-yNe" secondAttribute="centerX" id="Xt8-k3-fDj"/>
<constraint firstItem="XHG-Db-3Px" firstAttribute="width" secondItem="PoR-7r-yNe" secondAttribute="width" multiplier="0.3" id="dH2-dK-Fbg"/>
<constraint firstAttribute="trailing" secondItem="sK0-tB-H9u" secondAttribute="trailing" id="gSh-7K-3p5"/>
<constraint firstItem="eOT-Jr-GUl" firstAttribute="leading" secondItem="PoR-7r-yNe" secondAttribute="leading" id="rI9-oh-p8L"/>
<constraint firstAttribute="trailing" secondItem="eOT-Jr-GUl" secondAttribute="trailing" id="suy-vB-rXS"/>
<constraint firstAttribute="trailing" secondItem="XHG-Db-3Px" secondAttribute="trailing" constant="20" id="ubC-LX-bj4"/>
</constraints>
</view>
<navigationItem key="navigationItem" id="s5b-6P-Hwj"/>
<connections>
<outlet property="actionsHeightConstraint" destination="myf-me-Rk0" id="uAs-8t-OYW"/>
<outlet property="controlButtons" destination="sK0-tB-H9u" id="mDK-cq-oQz"/>
<outlet property="localVideo" destination="0ZP-s2-kM5" id="C68-k7-h5j"/>
<outlet property="localVideoMutedBg" destination="6y1-an-W7F" id="5FF-Ak-Vxb"/>
<outlet property="localvideoTopMargin" destination="11Y-Ag-YNc" id="5RK-4W-lxa"/>
<outlet property="micMuteBtn" destination="N2h-FX-kF5" id="AVo-sY-x2z"/>
<outlet property="remoteVideo" destination="eOT-Jr-GUl" id="VKE-el-YGR"/>
<outlet property="remoteVideoMutedIndicator" destination="CL1-2v-m1L" id="aJ0-QC-m9Y"/>
<outlet property="videoMuteBtn" destination="NUO-2p-pzL" id="XCc-nu-N8P"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="x33-EE-6Ak" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-797" y="2239"/>
</scene>
<!--View Controller-->
<scene sceneID="fcB-FR-PM2">
<objects>
<viewController id="b2p-gc-ilx" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Bl3-5B-Sac"/>
<viewControllerLayoutGuide type="bottom" id="aRc-fq-Dqx"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="luL-hd-4kD">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="WCW-Fr-JiI" userLabel="controlButtonSpacer">
<rect key="frame" x="14" y="844" width="139" height="30"/> <rect key="frame" x="14" y="844" width="139" height="30"/>
<constraints> <constraints>
<constraint firstAttribute="height" constant="30" id="0mU-Ko-Up3"/> <constraint firstAttribute="height" constant="30" id="VbR-6H-ydu"/>
<constraint firstAttribute="width" constant="139" id="DNz-Ig-XOS"/> <constraint firstAttribute="width" constant="139" id="aOy-qa-Ssi"/>
</constraints> </constraints>
</view> </view>
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="yS9-HT-vp8" userLabel="controlButtonSpacer"> <view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="UkE-3l-VTH" userLabel="controlButtonSpacer">
<rect key="frame" x="265" y="844" width="140" height="30"/> <rect key="frame" x="265" y="844" width="140" height="30"/>
<constraints> <constraints>
<constraint firstAttribute="width" constant="140" id="Alm-7E-yeU"/> <constraint firstAttribute="width" constant="140" id="7kZ-Fp-Pds"/>
<constraint firstAttribute="height" constant="30" id="amS-in-0UH"/> <constraint firstAttribute="height" constant="30" id="BC0-QQ-aX1"/>
</constraints> </constraints>
</view> </view>
<view contentMode="scaleToFill" restorationIdentifier="VideoCallNavigationViewController" translatesAutoresizingMaskIntoConstraints="NO" id="eOT-Jr-GUl" userLabel="remoteVideo"> <view contentMode="scaleToFill" restorationIdentifier="VideoCallNavigationViewController" translatesAutoresizingMaskIntoConstraints="NO" id="DUC-g9-g8v" userLabel="remoteVideo">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/> <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
</view> </view>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="videoMutedIndicator" translatesAutoresizingMaskIntoConstraints="NO" id="CL1-2v-m1L" userLabel="remoteVideoMutedIndicator"> <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="videoMutedIndicator" translatesAutoresizingMaskIntoConstraints="NO" id="cVD-h1-8a5" userLabel="remoteVideoMutedIndicator">
<rect key="frame" x="147" y="398" width="120" height="100"/> <rect key="frame" x="147" y="398" width="120" height="100"/>
<constraints> <constraints>
<constraint firstAttribute="width" constant="120" id="eon-3Z-74P"/> <constraint firstAttribute="width" constant="120" id="NhH-n2-2kE"/>
<constraint firstAttribute="height" constant="100" id="iyK-hL-H3m"/> <constraint firstAttribute="height" constant="100" id="nzD-kL-E5d"/>
</constraints> </constraints>
</imageView> </imageView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="0ZP-s2-kM5" userLabel="localVideo"> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="MaW-YR-Grr">
<rect key="frame" x="270.5" y="138" width="103.5" height="224"/> <rect key="frame" x="270" y="40" width="124" height="174"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jm7-6R-ha0" userLabel="localVideo">
<rect key="frame" x="0.0" y="0.0" width="124" height="174"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="5"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="number" keyPath="layer.borderWidth">
<real key="value" value="0.5"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="G9u-v2-vFg">
<rect key="frame" x="0.0" y="0.0" width="124" height="174"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="videoMutedIndicator" translatesAutoresizingMaskIntoConstraints="NO" id="RBK-Jn-LSH" userLabel="localVideoMutedIndicator">
<rect key="frame" x="44" y="72" width="36" height="30"/>
<constraints>
<constraint firstAttribute="height" constant="30" id="dMk-gQ-fHl"/>
<constraint firstAttribute="width" constant="36" id="lxL-W0-zfk"/>
</constraints>
</imageView>
</subviews>
<color key="backgroundColor" white="0.33333333329999998" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="RBK-Jn-LSH" firstAttribute="centerY" secondItem="G9u-v2-vFg" secondAttribute="centerY" id="1pj-sm-Y32"/>
<constraint firstItem="RBK-Jn-LSH" firstAttribute="centerX" secondItem="G9u-v2-vFg" secondAttribute="centerX" id="KKi-UZ-3AR"/>
</constraints>
</view>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="width" secondItem="MaW-YR-Grr" secondAttribute="height" multiplier="1:1.4" id="1Gu-MK-yhf"/>
<constraint firstItem="jm7-6R-ha0" firstAttribute="top" secondItem="MaW-YR-Grr" secondAttribute="top" id="1gf-2j-pPB"/>
<constraint firstItem="G9u-v2-vFg" firstAttribute="leading" secondItem="MaW-YR-Grr" secondAttribute="leading" id="D45-iv-3VG"/>
<constraint firstItem="jm7-6R-ha0" firstAttribute="leading" secondItem="MaW-YR-Grr" secondAttribute="leading" id="FE7-gZ-P2k"/>
<constraint firstAttribute="bottom" secondItem="jm7-6R-ha0" secondAttribute="bottom" id="KAG-6P-jtc"/>
<constraint firstAttribute="bottom" secondItem="G9u-v2-vFg" secondAttribute="bottom" id="bvk-jj-Pdl"/>
<constraint firstItem="G9u-v2-vFg" firstAttribute="top" secondItem="MaW-YR-Grr" secondAttribute="top" id="ebv-7y-cqK"/>
<constraint firstAttribute="trailing" secondItem="G9u-v2-vFg" secondAttribute="trailing" id="gn3-8B-SEu"/>
<constraint firstAttribute="trailing" secondItem="jm7-6R-ha0" secondAttribute="trailing" id="i3f-z5-CnF"/>
</constraints>
</view> </view>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="localVideoMutedBg" translatesAutoresizingMaskIntoConstraints="NO" id="A0G-cT-yji" userLabel="localVideoMutedBg"> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="SbF-is-irI" userLabel="videoMuteButton">
<rect key="frame" x="215" y="138" width="159" height="224"/> <rect key="frame" x="100" y="144" width="40" height="40"/>
</imageView> <constraints>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="sK0-tB-H9u" userLabel="controlButtons"> <constraint firstAttribute="height" constant="40" id="3Ce-Tz-gmS"/>
<constraint firstAttribute="width" constant="40" id="Md1-qV-m2B"/>
</constraints>
<state key="normal" title="Button" image="videoMuteButton"/>
<state key="selected" image="videoMuteButtonSelected"/>
<connections>
<action selector="onMinimize:" destination="b2p-gc-ilx" eventType="touchUpInside" id="O8X-2s-jcA"/>
</connections>
</button>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="KVg-mH-xm4" userLabel="controlButtons">
<rect key="frame" x="0.0" y="740" width="414" height="80"/> <rect key="frame" x="0.0" y="740" width="414" height="80"/>
<subviews> <subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="NUO-2p-pzL" userLabel="videoMuteButton"> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="IiK-H6-dWe" userLabel="videoMuteButton">
<rect key="frame" x="29" y="20.5" width="39" height="39"/> <rect key="frame" x="29" y="20.5" width="39" height="39"/>
<constraints> <constraints>
<constraint firstAttribute="width" constant="39" id="CWU-fT-9gx"/> <constraint firstAttribute="width" constant="39" id="epH-fv-DFg"/>
<constraint firstAttribute="height" constant="39" id="nsM-Xv-O2N"/> <constraint firstAttribute="height" constant="39" id="lw8-u6-AHv"/>
</constraints> </constraints>
<state key="normal" title="Button" image="speakerOff"/> <state key="normal" title="Button" image="speakerOff"/>
<state key="selected" image="speakerOffSelected"/> <state key="selected" image="speakerOffSelected"/>
<connections> <connections>
<action selector="didClickSpeakerButton:" destination="t2c-G5-7AE" eventType="touchUpInside" id="XHg-oo-TWD"/> <action selector="didClickSpeakerButton:" destination="b2p-gc-ilx" eventType="touchUpInside" id="VqG-6r-bor"/>
</connections> </connections>
</button> </button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="N2h-FX-kF5" userLabel="muteButton"> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="zBP-Dn-YDy" userLabel="muteButton">
<rect key="frame" x="98" y="20.5" width="39" height="39"/> <rect key="frame" x="98" y="20.5" width="39" height="39"/>
<constraints> <constraints>
<constraint firstAttribute="width" constant="39" id="Nv9-dR-SYL"/> <constraint firstAttribute="width" constant="39" id="34S-GR-Pvs"/>
<constraint firstAttribute="height" constant="39" id="lFc-rS-c6B"/> <constraint firstAttribute="height" constant="39" id="LPo-nT-kUW"/>
</constraints> </constraints>
<state key="normal" title="Button" image="muteButton"/> <state key="normal" title="Button" image="muteButton"/>
<state key="selected" image="muteButtonSelected"/> <state key="selected" image="muteButtonSelected"/>
<connections> <connections>
<action selector="didClickMuteButton:" destination="t2c-G5-7AE" eventType="touchUpInside" id="7lr-uj-db1"/> <action selector="didClickMuteButton:" destination="b2p-gc-ilx" eventType="touchUpInside" id="fds-Z7-UWJ"/>
</connections> </connections>
</button> </button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ygd-al-G4F" userLabel="switchCameraButton"> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="NmB-7i-Gz4" userLabel="switchCameraButton">
<rect key="frame" x="352" y="20.5" width="39" height="39"/> <rect key="frame" x="352" y="20.5" width="39" height="39"/>
<constraints> <constraints>
<constraint firstAttribute="width" constant="39" id="EHa-e5-BfD"/> <constraint firstAttribute="width" constant="39" id="QuY-RX-WNA"/>
<constraint firstAttribute="height" constant="39" id="KEK-0n-HJw"/> <constraint firstAttribute="height" constant="39" id="rSY-fC-sWw"/>
</constraints> </constraints>
<state key="normal" title="Button" image="switchCameraButton"/> <state key="normal" title="Button" image="switchCameraButton"/>
<state key="selected" image="switchCameraButtonSelected"/> <state key="selected" image="switchCameraButtonSelected"/>
<connections> <connections>
<action selector="didClickSwitchCameraButton:" destination="t2c-G5-7AE" eventType="touchUpInside" id="TBa-Av-IXy"/> <action selector="didClickSwitchCameraButton:" destination="b2p-gc-ilx" eventType="touchUpInside" id="O00-fI-O7V"/>
</connections> </connections>
</button> </button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="AoF-Up-Yu5" userLabel="hangUpButton"> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="IGy-pl-k7d" userLabel="hangUpButton">
<rect key="frame" x="174" y="4.5" width="71" height="71"/> <rect key="frame" x="174" y="4.5" width="71" height="71"/>
<constraints> <constraints>
<constraint firstAttribute="width" constant="71" id="ACP-i0-gK8"/> <constraint firstAttribute="width" constant="71" id="0p9-s0-QOx"/>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="71" id="DS1-a1-ep3"/> <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="71" id="Fit-03-kV6"/>
<constraint firstAttribute="height" constant="71" id="ltx-rR-am0"/> <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="71" id="Sti-eP-lRp"/>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="71" id="s7u-Zs-z2Q"/> <constraint firstAttribute="height" constant="71" id="Xzd-a8-XCo"/>
</constraints> </constraints>
<state key="normal" image="hangUpButton"/> <state key="normal" image="hangUpButton"/>
<connections> <connections>
<action selector="hangUp:" destination="t2c-G5-7AE" eventType="touchUpInside" id="SUH-Gd-OXj"/> <action selector="hangUp:" destination="b2p-gc-ilx" eventType="touchUpInside" id="INK-vW-2Yb"/>
</connections> </connections>
</button> </button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="7vf-kV-eQ5" userLabel="videoMuteButton"> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="8Wk-fu-9kr" userLabel="videoMuteButton">
<rect key="frame" x="283" y="20.5" width="39" height="39"/> <rect key="frame" x="283" y="20.5" width="39" height="39"/>
<constraints> <constraints>
<constraint firstAttribute="height" constant="39" id="7Rd-r8-zJP"/> <constraint firstAttribute="width" constant="39" id="Ti0-Dg-D3D"/>
<constraint firstAttribute="width" constant="39" id="mwK-hd-jIy"/> <constraint firstAttribute="height" constant="39" id="ns3-il-i3c"/>
</constraints> </constraints>
<state key="normal" title="Button" image="videoMuteButton"/> <state key="normal" title="Button" image="videoMuteButton"/>
<state key="selected" image="videoMuteButtonSelected"/> <state key="selected" image="videoMuteButtonSelected"/>
<connections> <connections>
<action selector="didClickVideoMuteButton:" destination="t2c-G5-7AE" eventType="touchUpInside" id="Hza-Ft-NNB"/> <action selector="didClickVideoMuteButton:" destination="b2p-gc-ilx" eventType="touchUpInside" id="PHA-7k-VGX"/>
</connections> </connections>
</button> </button>
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="9g2-IH-l8e" userLabel="controlButtonSpacer"> <view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ej0-Zf-R8D" userLabel="controlButtonSpacer">
<rect key="frame" x="396" y="0.0" width="18" height="80"/> <rect key="frame" x="396" y="0.0" width="18" height="80"/>
<constraints> <constraints>
<constraint firstAttribute="width" priority="750" constant="18" id="7f6-zT-RoW"/> <constraint firstAttribute="width" priority="750" constant="18" id="slg-UN-5bW"/>
<constraint firstAttribute="height" constant="80" id="cmy-aX-hM0"/> <constraint firstAttribute="height" constant="80" id="zPf-sp-AzZ"/>
</constraints> </constraints>
</view> </view>
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="a4N-1U-1Yt" userLabel="controlButtonSpacer"> <view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="AH8-Cw-2IL" userLabel="controlButtonSpacer">
<rect key="frame" x="328" y="0.0" width="18" height="80"/> <rect key="frame" x="328" y="0.0" width="18" height="80"/>
<constraints> <constraints>
<constraint firstAttribute="width" priority="750" constant="18" id="X8j-wu-KrQ"/> <constraint firstAttribute="height" constant="80" id="VNu-2M-hQ1"/>
<constraint firstAttribute="height" constant="80" id="vkd-63-bmN"/> <constraint firstAttribute="width" priority="750" constant="18" id="vmO-di-Uyv"/>
</constraints> </constraints>
</view> </view>
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="GbA-j6-191" userLabel="controlButtonSpacer"> <view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dDf-ge-cLW" userLabel="controlButtonSpacer">
<rect key="frame" x="259" y="0.0" width="18" height="80"/> <rect key="frame" x="259" y="0.0" width="18" height="80"/>
<constraints> <constraints>
<constraint firstAttribute="width" priority="750" constant="18" id="Bz0-tD-Q4d"/> <constraint firstAttribute="width" priority="750" constant="18" id="Vno-Lm-tZu"/>
<constraint firstAttribute="height" constant="80" id="Ovg-ap-S7E"/> <constraint firstAttribute="height" constant="80" id="hyd-oJ-rGA"/>
</constraints> </constraints>
</view> </view>
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="h0g-z5-Y95" userLabel="controlButtonSpacer"> <view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="FbA-Dk-ico" userLabel="controlButtonSpacer">
<rect key="frame" x="143" y="0.0" width="18" height="80"/> <rect key="frame" x="143" y="0.0" width="18" height="80"/>
<constraints> <constraints>
<constraint firstAttribute="height" constant="80" id="Vaj-Va-jZn"/> <constraint firstAttribute="width" priority="750" constant="18" id="71f-fb-y8A"/>
<constraint firstAttribute="width" priority="750" constant="18" id="Wv5-ys-Ho4"/> <constraint firstAttribute="height" constant="80" id="7Xq-7w-7mZ"/>
</constraints> </constraints>
</view> </view>
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="gop-Yl-2fm" userLabel="controlButtonSpacer"> <view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="byB-Nt-mx4" userLabel="controlButtonSpacer">
<rect key="frame" x="73" y="0.0" width="18" height="80"/> <rect key="frame" x="73" y="0.0" width="18" height="80"/>
<constraints> <constraints>
<constraint firstAttribute="width" priority="750" constant="18" id="iqX-Wz-fb1"/> <constraint firstAttribute="width" priority="750" constant="18" id="VXM-Nb-JGe"/>
<constraint firstAttribute="height" constant="80" id="j0P-xC-zSP"/> <constraint firstAttribute="height" constant="80" id="u1c-Hb-fNi"/>
</constraints> </constraints>
</view> </view>
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="JCG-W9-5ko" userLabel="controlButtonSpacer"> <view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="KBh-v6-ruQ" userLabel="controlButtonSpacer">
<rect key="frame" x="6" y="0.0" width="18" height="80"/> <rect key="frame" x="6" y="0.0" width="18" height="80"/>
<constraints> <constraints>
<constraint firstAttribute="width" priority="750" constant="18" id="La6-ZY-Qs8"/> <constraint firstAttribute="width" priority="750" constant="18" id="3mi-E9-Vcv"/>
<constraint firstAttribute="height" constant="80" id="mf9-Qg-gVZ"/> <constraint firstAttribute="height" constant="80" id="s4y-fE-XzV"/>
</constraints> </constraints>
</view> </view>
</subviews> </subviews>
<constraints> <constraints>
<constraint firstItem="9g2-IH-l8e" firstAttribute="leading" secondItem="ygd-al-G4F" secondAttribute="trailing" constant="5" id="0Bv-9b-HQh"/> <constraint firstItem="ej0-Zf-R8D" firstAttribute="centerY" secondItem="KVg-mH-xm4" secondAttribute="centerY" id="149-bk-Eag"/>
<constraint firstItem="a4N-1U-1Yt" firstAttribute="leading" secondItem="7vf-kV-eQ5" secondAttribute="trailing" constant="6" id="4vp-mw-gRE"/> <constraint firstItem="AH8-Cw-2IL" firstAttribute="centerY" secondItem="KVg-mH-xm4" secondAttribute="centerY" id="1L4-dR-Mnk"/>
<constraint firstAttribute="height" constant="80" id="5QG-54-ulG"/> <constraint firstItem="zBP-Dn-YDy" firstAttribute="leading" secondItem="byB-Nt-mx4" secondAttribute="trailing" constant="7" id="2A2-KE-7It"/>
<constraint firstItem="GbA-j6-191" firstAttribute="width" secondItem="h0g-z5-Y95" secondAttribute="width" id="5cw-b2-SPx"/> <constraint firstItem="IiK-H6-dWe" firstAttribute="leading" secondItem="KBh-v6-ruQ" secondAttribute="trailing" constant="5" id="2DZ-gc-1ug"/>
<constraint firstItem="h0g-z5-Y95" firstAttribute="width" secondItem="gop-Yl-2fm" secondAttribute="width" id="7oE-3V-2Gc"/> <constraint firstItem="IGy-pl-k7d" firstAttribute="leading" secondItem="FbA-Dk-ico" secondAttribute="trailing" constant="13" id="4Id-tF-pBW"/>
<constraint firstItem="7vf-kV-eQ5" firstAttribute="centerY" secondItem="sK0-tB-H9u" secondAttribute="centerY" id="8zH-6k-6Wz"/> <constraint firstItem="FbA-Dk-ico" firstAttribute="centerY" secondItem="KVg-mH-xm4" secondAttribute="centerY" id="4sL-7g-hu4"/>
<constraint firstItem="gop-Yl-2fm" firstAttribute="leading" secondItem="NUO-2p-pzL" secondAttribute="trailing" constant="5" id="Bbh-OY-I9f"/> <constraint firstItem="ej0-Zf-R8D" firstAttribute="width" secondItem="AH8-Cw-2IL" secondAttribute="width" id="4xd-Yr-5Bw"/>
<constraint firstItem="NUO-2p-pzL" firstAttribute="leading" secondItem="JCG-W9-5ko" secondAttribute="trailing" constant="5" id="Ccz-Qq-RXf"/> <constraint firstItem="zBP-Dn-YDy" firstAttribute="leading" secondItem="byB-Nt-mx4" secondAttribute="trailing" constant="7" id="6K9-gI-et0"/>
<constraint firstItem="gop-Yl-2fm" firstAttribute="centerY" secondItem="sK0-tB-H9u" secondAttribute="centerY" id="DE6-nZ-rEI"/> <constraint firstItem="KBh-v6-ruQ" firstAttribute="centerY" secondItem="KVg-mH-xm4" secondAttribute="centerY" id="7lN-QJ-8io"/>
<constraint firstItem="GbA-j6-191" firstAttribute="centerY" secondItem="sK0-tB-H9u" secondAttribute="centerY" id="EVH-xy-wpT"/> <constraint firstItem="AH8-Cw-2IL" firstAttribute="leading" secondItem="8Wk-fu-9kr" secondAttribute="trailing" constant="6" id="8sP-J8-7vu"/>
<constraint firstItem="ygd-al-G4F" firstAttribute="leading" secondItem="a4N-1U-1Yt" secondAttribute="trailing" constant="6" id="FNy-Br-FIj"/> <constraint firstItem="FbA-Dk-ico" firstAttribute="leading" secondItem="zBP-Dn-YDy" secondAttribute="trailing" constant="6" id="ABO-A6-z0K"/>
<constraint firstItem="NUO-2p-pzL" firstAttribute="centerY" secondItem="sK0-tB-H9u" secondAttribute="centerY" id="Fme-oB-F7i"/> <constraint firstItem="8Wk-fu-9kr" firstAttribute="centerY" secondItem="KVg-mH-xm4" secondAttribute="centerY" id="BBA-GJ-pgq"/>
<constraint firstItem="GbA-j6-191" firstAttribute="leading" secondItem="AoF-Up-Yu5" secondAttribute="trailing" constant="14" id="GxO-Fe-iqR"/> <constraint firstItem="dDf-ge-cLW" firstAttribute="leading" secondItem="IGy-pl-k7d" secondAttribute="trailing" constant="14" id="BrM-AV-cbW"/>
<constraint firstItem="JCG-W9-5ko" firstAttribute="centerY" secondItem="sK0-tB-H9u" secondAttribute="centerY" id="HPP-q4-IDT"/> <constraint firstAttribute="trailing" secondItem="ej0-Zf-R8D" secondAttribute="trailing" id="DvN-Yg-FbD"/>
<constraint firstItem="h0g-z5-Y95" firstAttribute="leading" secondItem="N2h-FX-kF5" secondAttribute="trailing" constant="6" id="I2J-pE-7yx"/> <constraint firstItem="8Wk-fu-9kr" firstAttribute="leading" secondItem="dDf-ge-cLW" secondAttribute="trailing" constant="6" id="Gi9-kx-whA"/>
<constraint firstItem="7vf-kV-eQ5" firstAttribute="leading" secondItem="GbA-j6-191" secondAttribute="trailing" constant="6" id="MVo-If-UVQ"/> <constraint firstItem="NmB-7i-Gz4" firstAttribute="centerY" secondItem="KVg-mH-xm4" secondAttribute="centerY" id="InB-Qg-shj"/>
<constraint firstItem="a4N-1U-1Yt" firstAttribute="width" secondItem="GbA-j6-191" secondAttribute="width" id="Me9-IC-YE2"/> <constraint firstItem="NmB-7i-Gz4" firstAttribute="leading" secondItem="AH8-Cw-2IL" secondAttribute="trailing" constant="6" id="JyJ-xD-Ho9"/>
<constraint firstItem="N2h-FX-kF5" firstAttribute="leading" secondItem="gop-Yl-2fm" secondAttribute="trailing" constant="7" id="RHr-s8-sAg"/> <constraint firstItem="byB-Nt-mx4" firstAttribute="width" secondItem="KBh-v6-ruQ" secondAttribute="width" id="PJi-K7-ZrI"/>
<constraint firstItem="h0g-z5-Y95" firstAttribute="centerY" secondItem="sK0-tB-H9u" secondAttribute="centerY" id="RJj-Uh-H2E"/> <constraint firstItem="IiK-H6-dWe" firstAttribute="centerY" secondItem="KVg-mH-xm4" secondAttribute="centerY" id="QAg-rL-ICa"/>
<constraint firstItem="a4N-1U-1Yt" firstAttribute="centerY" secondItem="sK0-tB-H9u" secondAttribute="centerY" id="Tb2-6o-Wqh"/> <constraint firstItem="8Wk-fu-9kr" firstAttribute="leading" secondItem="dDf-ge-cLW" secondAttribute="trailing" constant="6" id="Shg-tk-EV3"/>
<constraint firstItem="AoF-Up-Yu5" firstAttribute="leading" secondItem="h0g-z5-Y95" secondAttribute="trailing" constant="13" id="VZS-xZ-nbe"/> <constraint firstItem="KBh-v6-ruQ" firstAttribute="leading" secondItem="KVg-mH-xm4" secondAttribute="leading" constant="6" id="TjN-gL-9ya"/>
<constraint firstItem="NUO-2p-pzL" firstAttribute="leading" secondItem="JCG-W9-5ko" secondAttribute="trailing" constant="5" id="Z1j-5z-34E"/> <constraint firstItem="AH8-Cw-2IL" firstAttribute="width" secondItem="dDf-ge-cLW" secondAttribute="width" id="bVm-Xl-qXo"/>
<constraint firstItem="7vf-kV-eQ5" firstAttribute="leading" secondItem="GbA-j6-191" secondAttribute="trailing" constant="6" id="ZjD-GK-SkY"/> <constraint firstItem="dDf-ge-cLW" firstAttribute="centerY" secondItem="KVg-mH-xm4" secondAttribute="centerY" id="c6f-dZ-jaQ"/>
<constraint firstItem="ygd-al-G4F" firstAttribute="centerY" secondItem="sK0-tB-H9u" secondAttribute="centerY" id="bJA-GM-b2E"/> <constraint firstItem="IGy-pl-k7d" firstAttribute="centerY" secondItem="KVg-mH-xm4" secondAttribute="centerY" id="cth-NI-krB"/>
<constraint firstItem="ygd-al-G4F" firstAttribute="leading" secondItem="a4N-1U-1Yt" secondAttribute="trailing" constant="6" id="eFd-3F-A5f"/> <constraint firstItem="IiK-H6-dWe" firstAttribute="leading" secondItem="KBh-v6-ruQ" secondAttribute="trailing" constant="5" id="eSc-Nz-Afk"/>
<constraint firstItem="JCG-W9-5ko" firstAttribute="leading" secondItem="sK0-tB-H9u" secondAttribute="leading" constant="6" id="f0s-gb-347"/> <constraint firstItem="byB-Nt-mx4" firstAttribute="leading" secondItem="IiK-H6-dWe" secondAttribute="trailing" constant="5" id="esS-1V-cCt"/>
<constraint firstItem="gop-Yl-2fm" firstAttribute="leading" secondItem="NUO-2p-pzL" secondAttribute="trailing" constant="5" id="frf-I5-Rs9"/> <constraint firstItem="byB-Nt-mx4" firstAttribute="centerY" secondItem="KVg-mH-xm4" secondAttribute="centerY" id="f7g-XN-H0E"/>
<constraint firstItem="gop-Yl-2fm" firstAttribute="width" secondItem="JCG-W9-5ko" secondAttribute="width" id="i84-jd-Hwr"/> <constraint firstItem="AH8-Cw-2IL" firstAttribute="leading" secondItem="8Wk-fu-9kr" secondAttribute="trailing" constant="6" id="fa3-AR-Ry1"/>
<constraint firstItem="N2h-FX-kF5" firstAttribute="leading" secondItem="gop-Yl-2fm" secondAttribute="trailing" constant="7" id="jlv-lR-Nlf"/> <constraint firstItem="ej0-Zf-R8D" firstAttribute="leading" secondItem="NmB-7i-Gz4" secondAttribute="trailing" constant="5" id="hgr-2k-brQ"/>
<constraint firstItem="N2h-FX-kF5" firstAttribute="centerY" secondItem="sK0-tB-H9u" secondAttribute="centerY" id="nU8-Hw-s0U"/> <constraint firstItem="byB-Nt-mx4" firstAttribute="leading" secondItem="IiK-H6-dWe" secondAttribute="trailing" constant="5" id="jNK-jx-Kii"/>
<constraint firstItem="9g2-IH-l8e" firstAttribute="centerY" secondItem="sK0-tB-H9u" secondAttribute="centerY" id="pxq-U1-zP5"/> <constraint firstAttribute="height" constant="80" id="knU-Yv-yYC"/>
<constraint firstItem="AoF-Up-Yu5" firstAttribute="centerY" secondItem="sK0-tB-H9u" secondAttribute="centerY" id="ql2-fm-OeZ"/> <constraint firstItem="zBP-Dn-YDy" firstAttribute="centerY" secondItem="KVg-mH-xm4" secondAttribute="centerY" id="lSE-cx-45s"/>
<constraint firstItem="9g2-IH-l8e" firstAttribute="width" secondItem="a4N-1U-1Yt" secondAttribute="width" id="uXs-zM-gyf"/> <constraint firstItem="dDf-ge-cLW" firstAttribute="width" secondItem="FbA-Dk-ico" secondAttribute="width" id="m6u-Gu-Oeu"/>
<constraint firstItem="h0g-z5-Y95" firstAttribute="leading" secondItem="N2h-FX-kF5" secondAttribute="trailing" constant="6" id="uia-9X-UrW"/> <constraint firstItem="NmB-7i-Gz4" firstAttribute="leading" secondItem="AH8-Cw-2IL" secondAttribute="trailing" constant="6" id="pLg-3K-3Id"/>
<constraint firstItem="a4N-1U-1Yt" firstAttribute="leading" secondItem="7vf-kV-eQ5" secondAttribute="trailing" constant="6" id="vgH-Oj-HJc"/> <constraint firstItem="FbA-Dk-ico" firstAttribute="leading" secondItem="zBP-Dn-YDy" secondAttribute="trailing" constant="6" id="vNl-Q3-Wj4"/>
<constraint firstAttribute="trailing" secondItem="9g2-IH-l8e" secondAttribute="trailing" id="vng-6I-eYj"/> <constraint firstItem="FbA-Dk-ico" firstAttribute="width" secondItem="byB-Nt-mx4" secondAttribute="width" id="vVu-nZ-oxY"/>
</constraints> </constraints>
</view> </view>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="videoMutedIndicator" translatesAutoresizingMaskIntoConstraints="NO" id="FEH-bC-Hnh" userLabel="localVideoMutedIndicator">
<rect key="frame" x="276" y="235" width="36" height="30"/>
<constraints>
<constraint firstAttribute="height" constant="30" id="1iv-w5-GDT"/>
<constraint firstAttribute="width" constant="36" id="AwX-vQ-Ynn"/>
</constraints>
</imageView>
</subviews> </subviews>
<constraints> <constraints>
<constraint firstItem="VIH-1T-Ife" firstAttribute="top" secondItem="sK0-tB-H9u" secondAttribute="bottom" constant="42" id="1tT-KH-NEk"/> <constraint firstAttribute="trailing" secondItem="MaW-YR-Grr" secondAttribute="trailing" constant="20" id="3rk-D0-DBB"/>
<constraint firstAttribute="trailing" secondItem="sK0-tB-H9u" secondAttribute="trailing" id="6K9-n9-ceJ"/> <constraint firstItem="DUC-g9-g8v" firstAttribute="top" secondItem="luL-hd-4kD" secondAttribute="top" id="4Ky-2p-r9x"/>
<constraint firstAttribute="bottom" secondItem="6C5-o5-R1n" secondAttribute="bottom" constant="22" id="76x-6M-xOb"/> <constraint firstItem="MaW-YR-Grr" firstAttribute="top" secondItem="luL-hd-4kD" secondAttribute="top" constant="40" id="5SY-6e-Hig"/>
<constraint firstItem="yS9-HT-vp8" firstAttribute="top" secondItem="sK0-tB-H9u" secondAttribute="bottom" constant="24" id="9zS-Fw-oaT"/> <constraint firstAttribute="trailing" secondItem="KVg-mH-xm4" secondAttribute="trailing" id="Kuc-Ue-d79"/>
<constraint firstItem="eOT-Jr-GUl" firstAttribute="centerX" secondItem="PoR-7r-yNe" secondAttribute="centerX" id="HMH-Hc-ofZ"/> <constraint firstItem="DUC-g9-g8v" firstAttribute="top" secondItem="luL-hd-4kD" secondAttribute="top" id="Kue-OP-dRT"/>
<constraint firstItem="FEH-bC-Hnh" firstAttribute="centerY" secondItem="0ZP-s2-kM5" secondAttribute="centerY" id="K8x-bd-bS9"/> <constraint firstItem="MaW-YR-Grr" firstAttribute="width" secondItem="luL-hd-4kD" secondAttribute="width" multiplier="0.3" id="L7X-Ui-jf3"/>
<constraint firstItem="eOT-Jr-GUl" firstAttribute="width" secondItem="PoR-7r-yNe" secondAttribute="width" id="PH6-qw-V6p"/> <constraint firstItem="DUC-g9-g8v" firstAttribute="leading" secondItem="luL-hd-4kD" secondAttribute="leading" id="NPg-Pi-Aod"/>
<constraint firstItem="eOT-Jr-GUl" firstAttribute="centerY" secondItem="PoR-7r-yNe" secondAttribute="centerY" id="Prz-4m-LHB"/> <constraint firstItem="DUC-g9-g8v" firstAttribute="leading" secondItem="luL-hd-4kD" secondAttribute="leading" id="P5k-AY-wQy"/>
<constraint firstItem="0ZP-s2-kM5" firstAttribute="width" secondItem="PoR-7r-yNe" secondAttribute="width" multiplier="0.25" id="QCm-L0-oF7"/> <constraint firstAttribute="trailing" secondItem="UkE-3l-VTH" secondAttribute="trailing" constant="9" id="Qrw-9X-o5i"/>
<constraint firstItem="sK0-tB-H9u" firstAttribute="leading" secondItem="PoR-7r-yNe" secondAttribute="leading" id="TPj-1d-lx6"/> <constraint firstItem="cVD-h1-8a5" firstAttribute="centerX" secondItem="luL-hd-4kD" secondAttribute="centerX" id="Rhe-IZ-Hny"/>
<constraint firstItem="CL1-2v-m1L" firstAttribute="centerY" secondItem="PoR-7r-yNe" secondAttribute="centerY" id="UGv-46-ri8"/> <constraint firstItem="SbF-is-irI" firstAttribute="leading" secondItem="luL-hd-4kD" secondAttribute="leading" constant="100" id="g1O-2O-4e7"/>
<constraint firstAttribute="trailingMargin" secondItem="0ZP-s2-kM5" secondAttribute="trailing" constant="20" id="UZX-Yj-Efk"/> <constraint firstItem="UkE-3l-VTH" firstAttribute="top" secondItem="KVg-mH-xm4" secondAttribute="bottom" constant="24" id="gof-Z7-IST"/>
<constraint firstItem="A0G-cT-yji" firstAttribute="width" secondItem="0ZP-s2-kM5" secondAttribute="width" constant="55.5" id="WMH-vd-rQe"/> <constraint firstAttribute="bottom" secondItem="UkE-3l-VTH" secondAttribute="bottom" constant="22" id="iM4-FN-9ae"/>
<constraint firstItem="CL1-2v-m1L" firstAttribute="centerX" secondItem="PoR-7r-yNe" secondAttribute="centerX" id="Xt8-k3-fDj"/> <constraint firstAttribute="trailing" secondItem="DUC-g9-g8v" secondAttribute="trailing" id="jC9-hE-b72"/>
<constraint firstItem="FEH-bC-Hnh" firstAttribute="centerX" secondItem="0ZP-s2-kM5" secondAttribute="centerX" constant="-28.25" id="Yvq-7p-bjS"/> <constraint firstItem="WCW-Fr-JiI" firstAttribute="top" secondItem="KVg-mH-xm4" secondAttribute="bottom" constant="24" id="ngy-iA-BfO"/>
<constraint firstAttribute="bottom" secondItem="yS9-HT-vp8" secondAttribute="bottom" constant="22" id="bVF-wg-lH8"/> <constraint firstItem="SbF-is-irI" firstAttribute="top" secondItem="Bl3-5B-Sac" secondAttribute="bottom" constant="100" id="oG2-p5-nt5"/>
<constraint firstItem="6C5-o5-R1n" firstAttribute="leading" secondItem="PoR-7r-yNe" secondAttribute="leading" constant="14" id="der-54-SZ4"/> <constraint firstItem="cVD-h1-8a5" firstAttribute="centerY" secondItem="luL-hd-4kD" secondAttribute="centerY" id="uKa-wQ-e2k"/>
<constraint firstItem="A0G-cT-yji" firstAttribute="centerX" secondItem="0ZP-s2-kM5" secondAttribute="centerX" constant="-27.75" id="ga5-7D-8CU"/> <constraint firstAttribute="bottom" secondItem="DUC-g9-g8v" secondAttribute="bottom" id="ukh-Za-bgW"/>
<constraint firstItem="A0G-cT-yji" firstAttribute="height" secondItem="0ZP-s2-kM5" secondAttribute="height" id="hMV-RD-NwE"/> <constraint firstItem="KVg-mH-xm4" firstAttribute="leading" secondItem="luL-hd-4kD" secondAttribute="leading" id="xKr-RP-oem"/>
<constraint firstItem="A0G-cT-yji" firstAttribute="centerY" secondItem="0ZP-s2-kM5" secondAttribute="centerY" id="nBC-L0-5Pe"/> <constraint firstItem="aRc-fq-Dqx" firstAttribute="top" secondItem="KVg-mH-xm4" secondAttribute="bottom" constant="42" id="xvc-Vv-i6W"/>
<constraint firstItem="0ZP-s2-kM5" firstAttribute="height" secondItem="PoR-7r-yNe" secondAttribute="height" multiplier="0.25" id="pq3-Iv-N4l"/> <constraint firstAttribute="bottom" secondItem="WCW-Fr-JiI" secondAttribute="bottom" constant="22" id="y78-gt-CGK"/>
<constraint firstItem="0ZP-s2-kM5" firstAttribute="top" secondItem="BIa-yr-ZMY" secondAttribute="bottom" constant="50" id="qrs-H2-Rw4"/> <constraint firstItem="WCW-Fr-JiI" firstAttribute="leading" secondItem="luL-hd-4kD" secondAttribute="leading" constant="14" id="ziS-Wg-YuS"/>
<constraint firstItem="eOT-Jr-GUl" firstAttribute="height" secondItem="PoR-7r-yNe" secondAttribute="height" id="rbk-Lc-qip"/>
<constraint firstAttribute="trailing" secondItem="yS9-HT-vp8" secondAttribute="trailing" constant="9" id="vEv-GY-lDH"/>
<constraint firstItem="6C5-o5-R1n" firstAttribute="top" secondItem="sK0-tB-H9u" secondAttribute="bottom" constant="24" id="xhd-lu-lFH"/>
</constraints> </constraints>
</view> </view>
<navigationItem key="navigationItem" id="s5b-6P-Hwj"/> <navigationItem key="navigationItem" id="eD6-jh-hyz"/>
<connections> <connections>
<outlet property="controlButtons" destination="sK0-tB-H9u" id="mDK-cq-oQz"/> <outlet property="controlButtons" destination="KVg-mH-xm4" id="8HI-7t-dqa"/>
<outlet property="localVideo" destination="0ZP-s2-kM5" id="C68-k7-h5j"/> <outlet property="localVideo" destination="jm7-6R-ha0" id="Y8s-Sn-3MF"/>
<outlet property="localVideoMutedBg" destination="A0G-cT-yji" id="5Ia-9g-7CT"/> <outlet property="localVideoMutedBg" destination="G9u-v2-vFg" id="fYn-Pe-ARy"/>
<outlet property="localVideoMutedIndicator" destination="FEH-bC-Hnh" id="PKd-gQ-Jct"/> <outlet property="localvideoTopMargin" destination="5SY-6e-Hig" id="32I-Vr-q3V"/>
<outlet property="remoteVideo" destination="eOT-Jr-GUl" id="VKE-el-YGR"/> <outlet property="remoteVideo" destination="DUC-g9-g8v" id="NPJ-NA-uDF"/>
<outlet property="remoteVideoMutedIndicator" destination="CL1-2v-m1L" id="aJ0-QC-m9Y"/> <outlet property="remoteVideoMutedIndicator" destination="cVD-h1-8a5" id="5Fb-7b-V6L"/>
</connections> </connections>
</viewController> </viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="x33-EE-6Ak" sceneMemberID="firstResponder"/> <placeholder placeholderIdentifier="IBFirstResponder" id="gZD-5T-0MU" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1685.5072463768117" y="1435.7142857142856"/>
</scene>
<!--Navigation Controller-->
<scene sceneID="GvA-TT-FAo">
<objects>
<navigationController restorationIdentifier="ViewControllerNav" storyboardIdentifier="ViewControllerNav" id="0WJ-RG-MEh" sceneMemberID="viewController">
<navigationBar key="navigationBar" contentMode="scaleToFill" id="S7n-df-cyC">
<rect key="frame" x="0.0" y="44" width="414" height="44"/>
<autoresizingMask key="autoresizingMask"/>
</navigationBar>
<connections>
<segue destination="t2c-G5-7AE" kind="relationship" relationship="rootViewController" id="L74-If-nYJ"/>
</connections>
</navigationController>
<placeholder placeholderIdentifier="IBFirstResponder" id="vSx-dK-kQe" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects> </objects>
<point key="canvasLocation" x="880" y="1436"/> <point key="canvasLocation" x="26" y="2245"/>
</scene> </scene>
</scenes> </scenes>
<resources> <resources>
<image name="end_call" width="488" height="488"/>
<image name="expand_video" width="202" height="199"/>
<image name="float_video" width="202" height="202"/>
<image name="hangUpButton" width="71" height="71"/> <image name="hangUpButton" width="71" height="71"/>
<image name="localVideoMutedBg" width="90" height="120"/> <image name="mic_mute" width="198" height="199"/>
<image name="mic_unmute" width="198" height="202"/>
<image name="muteButton" width="39" height="39"/> <image name="muteButton" width="39" height="39"/>
<image name="muteButtonSelected" width="39" height="39"/> <image name="muteButtonSelected" width="39" height="39"/>
<image name="speakerOff" width="39" height="39"/> <image name="speakerOff" width="39" height="39"/>
@ -292,5 +491,7 @@
<image name="videoMuteButton" width="39" height="39"/> <image name="videoMuteButton" width="39" height="39"/>
<image name="videoMuteButtonSelected" width="39" height="39"/> <image name="videoMuteButtonSelected" width="39" height="39"/>
<image name="videoMutedIndicator" width="153.5" height="129"/> <image name="videoMutedIndicator" width="153.5" height="129"/>
<image name="video_mute" width="202" height="199"/>
<image name="video_unmute" width="202" height="202"/>
</resources> </resources>
</document> </document>

@ -0,0 +1,142 @@
//
// MainAppViewController.swift
// Runner
//
// Created by Zohaib Iqbal Kambrani on 08/06/2021.
// Copyright © 2021 The Chromium Authors. All rights reserved.
//
import Foundation
class MainAppViewController: FlutterViewController{
var videoCallContainer:UIView!
var videoCallViewController:VideoCallViewController!
var videoCallFlutterResult:FlutterResult?
var vdoCallViewMinConstraint:[NSLayoutConstraint]!
var vdoCallViewMaxConstraint:[NSLayoutConstraint]!
override func viewDidLoad() {
super.viewDidLoad()
initFlutterBridge()
prepareVideoCallView()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
}
private func initFlutterBridge(){
let videoCallChannel = FlutterMethodChannel(name: "Dr.cloudSolution/videoCall", binaryMessenger: binaryMessenger)
videoCallChannel.setMethodCallHandler({
(call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
switch call.method {
case "openVideoCall":
self.startVideoCall(result: result, call: call)
default:
result(FlutterMethodNotImplemented)
}
})
}
}
// Video Call Functions
extension MainAppViewController : ICallProtocol{
func prepareVideoCallView(){
videoCallContainer = UIView(frame: CGRect(x: 0, y: 0, width: view.bounds.width, height: view.bounds.height))
videoCallContainer.alpha = 0.0
videoCallContainer.backgroundColor = UIColor.black
view.addSubview(videoCallContainer)
setVideoViewConstrints()
NSLayoutConstraint.activate(vdoCallViewMaxConstraint)
NSLayoutConstraint.deactivate(vdoCallViewMinConstraint)
ViewEmbedder.embed(
withIdentifier: "videoCall", // Storyboard ID
parent: self,
container: self.videoCallContainer){ vc in
self.videoCallViewController = vc as? VideoCallViewController
}
}
private func startVideoCall(result: @escaping FlutterResult, call:FlutterMethodCall) {
videoCallFlutterResult = result
if let arguments = call.arguments as? NSDictionary{
showVideoCallView(true)
videoCallViewController.onMinimize = { min in
self.minimizeVideoCall(min)
}
videoCallViewController.onClose = videoCallClosed
videoCallViewController.callBack = self
videoCallViewController.start(params: VideoCallRequestParameters(dictionary: arguments))
}
}
private func minimizeVideoCall(_ value:Bool){
UIView.animate(withDuration: 0.5) {
if(value){
NSLayoutConstraint.deactivate(self.vdoCallViewMaxConstraint)
NSLayoutConstraint.activate(self.vdoCallViewMinConstraint)
}else{
NSLayoutConstraint.deactivate(self.vdoCallViewMinConstraint)
NSLayoutConstraint.activate(self.vdoCallViewMaxConstraint)
}
self.videoCallContainer.layer.cornerRadius = value ? 10 : 0
self.videoCallContainer.layer.borderColor = value ? UIColor.white.cgColor : nil
self.videoCallContainer.layer.borderWidth = value ? 2 : 0
self.view.layoutIfNeeded()
}
}
private func showVideoCallView(_ value:Bool){
UIView.animate(withDuration: 0.5) {
self.videoCallContainer.alpha = value ? 1.0 : 0.0
} completion: { complete in
if(value == false){
self.videoCallContainer.removeFromSuperview()
}
}
}
private func videoCallClosed(){
showVideoCallView(false)
}
func sessionDone(res: Any) {
videoCallFlutterResult?(res)
}
func sessionNotResponded(res: Any) {
videoCallFlutterResult?(res)
}
func setVideoViewConstrints(){
let screen = UIScreen.main.bounds
videoCallContainer.translatesAutoresizingMaskIntoConstraints = false
vdoCallViewMinConstraint = [
videoCallContainer.topAnchor.constraint(equalTo: view.topAnchor, constant: 20),
videoCallContainer.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20),
videoCallContainer.widthAnchor.constraint(equalToConstant: screen.width/3),
videoCallContainer.heightAnchor.constraint(equalToConstant: screen.height/3.5)
]
vdoCallViewMaxConstraint = [
videoCallContainer.topAnchor.constraint(equalTo: view.topAnchor),
videoCallContainer.leadingAnchor.constraint(equalTo: view.leadingAnchor),
videoCallContainer.widthAnchor.constraint(equalToConstant: screen.width),
videoCallContainer.heightAnchor.constraint(equalToConstant: screen.height)
]
}
}

@ -0,0 +1,71 @@
//
// VCEmbeder.swift
// Runner
//
// Created by Zohaib Iqbal Kambrani on 08/06/2021.
// Copyright © 2021 The Chromium Authors. All rights reserved.
//
import Foundation
extension UIView {
func fill(to parent: UIView) {
topAnchor.constraint(equalTo: parent.topAnchor).isActive = true
leadingAnchor.constraint(equalTo: parent.leadingAnchor).isActive = true
bottomAnchor.constraint(equalTo: parent.bottomAnchor).isActive = true
trailingAnchor.constraint(equalTo: parent.trailingAnchor).isActive = true
}
func fillToParent() {
if let parent = self.superview{
topAnchor.constraint(equalTo: parent.topAnchor).isActive = true
leadingAnchor.constraint(equalTo: parent.leadingAnchor).isActive = true
bottomAnchor.constraint(equalTo: parent.bottomAnchor).isActive = true
trailingAnchor.constraint(equalTo: parent.trailingAnchor).isActive = true
}
}
func fillTo(view:UIView) {
view.addSubview(self)
fill(to: view)
}
}
class ViewEmbedder {
class func embed(
parent:UIViewController,
container:UIView,
child:UIViewController,
previous:UIViewController?){
if let previous = previous {
removeFromParent(vc: previous)
}
child.willMove(toParent: parent)
parent.addChild(child)
container.addSubview(child.view)
child.didMove(toParent: parent)
let w = container.frame.size.width;
let h = container.frame.size.height;
child.view.frame = CGRect(x: 0, y: 0, width: w, height: h)
child.view.fill(to: container)
}
class func removeFromParent(vc:UIViewController){
vc.willMove(toParent: nil)
vc.view.removeFromSuperview()
vc.removeFromParent()
}
class func embed(withIdentifier id:String, parent:UIViewController, container:UIView, completion:((UIViewController)->Void)? = nil){
let vc = parent.storyboard!.instantiateViewController(withIdentifier: id)
embed(
parent: parent,
container: container,
child: vc,
previous: parent.children.first
)
completion?(vc)
}
}

@ -0,0 +1,27 @@
import Foundation
class VideoCallRequestParameters{
var apiKey:String?
var sessionId:String?
var token:String?
var lang:String?
var vcId:Int?
var tokenId:String?
var generalId:String?
var doctorId:Int?
var baseUrl:String?
init(dictionary:NSDictionary){
self.apiKey = dictionary["kApiKey"] as? String
self.sessionId = dictionary["kSessionId"] as? String
self.token = dictionary["kToken"] as? String
self.lang = dictionary["appLang"] as? String
self.vcId = dictionary["VC_ID"] as? Int
self.tokenId = dictionary["TokenID"] as? String
self.generalId = dictionary["generalId"] as? String
self.doctorId = dictionary["DoctorId"] as? Int
self.baseUrl = dictionary["baseUrl"] as? String
}
}

@ -11,7 +11,7 @@ import OpenTok
import Alamofire import Alamofire
class ViewController: UIViewController { class VideoCallViewController: UIViewController {
var session: OTSession? var session: OTSession?
var publisher: OTPublisher? var publisher: OTPublisher?
@ -34,18 +34,104 @@ class ViewController: UIViewController {
var seconds = 30 var seconds = 30
var isUserConnect : Bool = false var isUserConnect : Bool = false
var onMinimize:((Bool)->Void)? = nil
var onClose:(()->Void)? = nil
// Bottom Actions
@IBOutlet weak var actionsHeightConstraint: NSLayoutConstraint!
@IBOutlet weak var videoMuteBtn: UIButton!
@IBOutlet weak var micMuteBtn: UIButton!
@IBOutlet weak var localvideoTopMargin: NSLayoutConstraint!
@IBOutlet weak var localVideo: UIView!
@IBOutlet weak var remoteVideo: UIView!
@IBOutlet weak var controlButtons: UIView!
@IBOutlet weak var remoteVideoMutedIndicator: UIImageView!
@IBOutlet weak var localVideoMutedBg: UIView!
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
localVideo.layer.borderColor = UIColor.white.cgColor
}
@IBAction func didClickMuteButton(_ sender: UIButton) {
sender.isSelected = !sender.isSelected
publisher!.publishAudio = !sender.isSelected
}
@IBAction func didClickSpeakerButton(_ sender: UIButton) {
sender.isSelected = !sender.isSelected
subscriber?.subscribeToAudio = !sender.isSelected
// resetHideButtonsTimer()
}
@IBAction func didClickVideoMuteButton(_ sender: UIButton) {
sender.isSelected = !sender.isSelected
if publisher!.publishVideo {
publisher!.publishVideo = false
} else {
publisher!.publishVideo = true
}
localVideo.isHidden = sender.isSelected
localVideoMutedBg.isHidden = !sender.isSelected
// resetHideButtonsTimer()
setupButtons() }
askForMicrophonePermission()
requestCameraPermissionsIfNeeded()
hideVideoMuted()
setupSession()
}
@IBAction func didClickSwitchCameraButton(_ sender: UIButton) {
sender.isSelected = !sender.isSelected
if sender.isSelected {
publisher!.cameraPosition = AVCaptureDevice.Position.front
} else {
publisher!.cameraPosition = AVCaptureDevice.Position.back
}
/// resetHideButtonsTimer()
}
@IBAction func hangUp(_ sender: UIButton) {
callBack?.sessionDone(res:["callResponse":"CallEnd"])
sessionDisconnect()
}
var minimized = false
@IBAction func onMinimize(_ sender: UIButton) {
minimized = !minimized
sender.isSelected = minimized
onMinimize?(minimized)
self.videoMuteBtn.isHidden = minimized
self.micMuteBtn.isHidden = minimized
let min_ = minimized
UIView.animate(withDuration: 1) {
self.actionsHeightConstraint.constant = min_ ? 30 : 60
self.localvideoTopMargin.constant = min_ ? 20 : 40
let vdoBound = self.localVideo.bounds
self.publisher?.view?.frame = CGRect(x: 0, y: 0, width: vdoBound.size.width, height: vdoBound.size.height)
self.publisher?.view?.layoutIfNeeded()
}
}
func start(params:VideoCallRequestParameters){
self.kApiKey = params.apiKey ?? ""
self.kSessionId = params.sessionId ?? ""
self.kToken = params.token ?? ""
self.VC_ID = params.vcId ?? 0
self.generalid = params.generalId ?? ""
self.TokenID = params.tokenId ?? ""
self.DoctorId = params.doctorId ?? 0
self.baseUrl = params.baseUrl ?? ""
setupButtons()
askForMicrophonePermission()
requestCameraPermissionsIfNeeded()
hideVideoMuted()
setupSession()
}
private func changeCallStatus(callStatus:Int){ private func changeCallStatus(callStatus:Int){
let URL_USER_REGISTER = baseUrl+"LiveCareApi/DoctorApp/ChangeCallStatus" let URL_USER_REGISTER = baseUrl+"LiveCareApi/DoctorApp/ChangeCallStatus"
@ -137,59 +223,15 @@ class ViewController: UIViewController {
// display a useful message asking the user to grant permissions from within Settings > Privacy > Camera // display a useful message asking the user to grant permissions from within Settings > Privacy > Camera
} }
@IBAction func didClickMuteButton(_ sender: UIButton) {
sender.isSelected = !sender.isSelected
publisher!.publishAudio = !sender.isSelected
}
@IBAction func didClickSpeakerButton(_ sender: UIButton) {
sender.isSelected = !sender.isSelected
subscriber?.subscribeToAudio = !sender.isSelected
// resetHideButtonsTimer()
}
@IBAction func didClickVideoMuteButton(_ sender: UIButton) {
sender.isSelected = !sender.isSelected
if publisher!.publishVideo {
publisher!.publishVideo = false
} else {
publisher!.publishVideo = true
}
localVideo.isHidden = sender.isSelected
localVideoMutedBg.isHidden = !sender.isSelected
localVideoMutedIndicator.isHidden = !sender.isSelected
// resetHideButtonsTimer()
}
@IBAction func didClickSwitchCameraButton(_ sender: UIButton) {
sender.isSelected = !sender.isSelected
if sender.isSelected {
publisher!.cameraPosition = AVCaptureDevice.Position.front
} else {
publisher!.cameraPosition = AVCaptureDevice.Position.back
}
/// resetHideButtonsTimer()
}
@IBAction func hangUp(_ sender: UIButton) {
callBack?.sessionDone(res:["callResponse":"CallEnd"])
sessionDisconnect()
}
func sessionDisconnect() { func sessionDisconnect() {
changeCallStatus(callStatus: 16) changeCallStatus(callStatus: 16)
if (session != nil) { if (session != nil) {
print("disconnecting....") print("disconnecting....")
session!.disconnect(nil) session!.disconnect(nil)
dismiss(animated: true) dismiss(animated: true)
return
} }
dismiss(animated: true) dismiss(animated: true)
onClose?()
} }
func requestCameraPermissionsIfNeeded() { func requestCameraPermissionsIfNeeded() {
@ -226,7 +268,6 @@ class ViewController: UIViewController {
func hideVideoMuted() { func hideVideoMuted() {
remoteVideoMutedIndicator.isHidden = true remoteVideoMutedIndicator.isHidden = true
localVideoMutedBg.isHidden = true localVideoMutedBg.isHidden = true
localVideoMutedIndicator.isHidden = true
} }
func setupSession() { func setupSession() {
@ -267,19 +308,6 @@ class ViewController: UIViewController {
@IBOutlet weak var localVideo: UIView!
@IBOutlet weak var remoteVideo: UIView!
@IBOutlet weak var controlButtons: UIView!
@IBOutlet weak var remoteVideoMutedIndicator: UIImageView!
@IBOutlet weak var localVideoMutedBg: UIImageView!
@IBOutlet weak var localVideoMutedIndicator: UIImageView!
@objc func updateTimer(){ @objc func updateTimer(){
seconds -= 1 //This will decrement(count down)the seconds. seconds -= 1 //This will decrement(count down)the seconds.
print(seconds) print(seconds)
@ -293,7 +321,7 @@ class ViewController: UIViewController {
} }
extension ViewController: OTSessionDelegate { extension VideoCallViewController: OTSessionDelegate {
func sessionDidConnect(_ session: OTSession) { func sessionDidConnect(_ session: OTSession) {
print("The client connected to the OpenTok session.") print("The client connected to the OpenTok session.")
@ -301,7 +329,7 @@ extension ViewController: OTSessionDelegate {
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(ViewController.updateTimer)), userInfo: nil, repeats: true) timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(VideoCallViewController.updateTimer)), userInfo: nil, repeats: true)
setupPublisher() setupPublisher()
@ -319,8 +347,7 @@ extension ViewController: OTSessionDelegate {
showAlert(error?.localizedDescription) showAlert(error?.localizedDescription)
} }
publisher?.view!.frame = CGRect(x: localVideo.bounds.origin.x, y: localVideo.bounds.origin.y, width: localVideo.bounds.size.width, height: localVideo.bounds.size.height) publisher?.view!.frame = CGRect(x: 0, y: 0, width: localVideo.bounds.size.width, height: localVideo.bounds.size.height)
localVideo.addSubview((publisher?.view)!) localVideo.addSubview((publisher?.view)!)
} }
@ -408,7 +435,7 @@ extension ViewController: OTSessionDelegate {
} }
extension ViewController: OTPublisherDelegate { extension VideoCallViewController: OTPublisherDelegate {
func publisher(_ publisher: OTPublisherKit, didFailWithError error: OTError) { func publisher(_ publisher: OTPublisherKit, didFailWithError error: OTError) {
print("The publisher failed: \(error)") print("The publisher failed: \(error)")
} }
@ -420,7 +447,7 @@ extension ViewController: OTPublisherDelegate {
} }
} }
extension ViewController: OTSubscriberDelegate { extension VideoCallViewController: OTSubscriberDelegate {
public func subscriberDidConnect(toStream subscriber: OTSubscriberKit) { public func subscriberDidConnect(toStream subscriber: OTSubscriberKit) {
print("The subscriber did connect to the stream.") print("The subscriber did connect to the stream.")
} }

@ -109,7 +109,7 @@ class BaseAppClient {
parsed['AndroidLink'], parsed['IOSLink']); parsed['AndroidLink'], parsed['IOSLink']);
} }
if (!parsed['IsAuthenticated']) { if (parsed['IsAuthenticated'] != null && !parsed['IsAuthenticated']) {
if (body['OTP_SendType'] != null) { if (body['OTP_SendType'] != null) {
onFailure(getError(parsed), statusCode); onFailure(getError(parsed), statusCode);
} else if (!isAllowAny) { } else if (!isAllowAny) {

@ -289,60 +289,64 @@ class _PatientProfileScreenState extends State<PatientProfileScreen>
EndCallScreen(patient:patient))); EndCallScreen(patient:patient)));
} else { } else {
GifLoaderDialogUtils.showMyDialog(context); GifLoaderDialogUtils.showMyDialog(context);
await model.startCall( isReCall : false, vCID: patient.vcId); // await model.startCall( isReCall : false, vCID: patient.vcId);
if(model.state == ViewState.ErrorLocal) { if(model.state == ViewState.ErrorLocal) {
GifLoaderDialogUtils.hideDialog(context); GifLoaderDialogUtils.hideDialog(context);
Helpers.showErrorToast(model.error); Helpers.showErrorToast(model.error);
} else { } else {
await model.getDoctorProfile(); await model.getDoctorProfile();
patient.appointmentNo = model.startCallRes.appointmentNo; // patient.appointmentNo = model.startCallRes.appointmentNo;
patient.episodeNo = 0; patient.episodeNo = 0;
GifLoaderDialogUtils.hideDialog(context); GifLoaderDialogUtils.hideDialog(context);
await VideoChannel.openVideoCallScreen( await VideoChannel.openVideoCallScreen(
kToken: model.startCallRes.openTokenID, kToken: "T1==cGFydG5lcl9pZD00NzI0Nzk1NCZzaWc9NGIyZDljOTY3YjFiNWU1YzUzNzFmMjIyNjJmNmEzY2Y5NzZjOTdlYzpzZXNzaW9uX2lkPTFfTVg0ME56STBOemsxTkg1LU1UWXlNekEyTlRRMU9EVXhObjVrVFRoMFlVdFJXaXRYTWpadFZGZHFhSGxZVGpOdE1UVi1mZyZjcmVhdGVfdGltZT0xNjIzMDY1NDk1Jm5vbmNlPTAuMjM2Mjk0NTIwMTkyOTA4OTcmcm9sZT1wdWJsaXNoZXImZXhwaXJlX3RpbWU9MTYyNTY1NzQ5NCZpbml0aWFsX2xheW91dF9jbGFzc19saXN0PQ==",//model.startCallRes.openTokenID,
kSessionId: model.startCallRes.openSessionID, kSessionId:"1_MX40NzI0Nzk1NH5-MTYyMzA2NTQ1ODUxNn5kTTh0YUtRWitXMjZtVFdqaHlYTjNtMTV-fg",// model.startCallRes.openSessionID,
kApiKey: '46209962', kApiKey: '47247954',//46209962
vcId: patient.vcId, vcId: patient.vcId,
tokenID: await model.getToken(), tokenID: await model.getToken(),
generalId: GENERAL_ID, generalId: GENERAL_ID,
doctorId: model.doctorProfile.doctorID, doctorId: model.doctorProfile.doctorID,
onFailure: (String error) { onFailure: (String error) {
DrAppToastMsg.showErrorToast(error); DrAppToastMsg.showErrorToast(error);
}, },
onCallEnd: () { onCallEnd: () {
WidgetsBinding.instance.addPostFrameCallback((_) { var asd="";
GifLoaderDialogUtils.showMyDialog(context); // WidgetsBinding.instance.addPostFrameCallback((_) {
model.endCall(patient.vcId, false,).then((value) { // GifLoaderDialogUtils.showMyDialog(context);
GifLoaderDialogUtils.hideDialog(context); // model.endCall(patient.vcId, false,).then((value) {
if (model.state == ViewState.ErrorLocal) { // GifLoaderDialogUtils.hideDialog(context);
DrAppToastMsg.showErrorToast(model.error); // if (model.state == ViewState.ErrorLocal) {
} // DrAppToastMsg.showErrorToast(model.error);
setState(() { // }
isCallFinished = true; // setState(() {
}); // isCallFinished = true;
}); // });
}); // });
}, // });
onCallNotRespond: (SessionStatusModel sessionStatusModel) { },
WidgetsBinding.instance.addPostFrameCallback((_) { onCallNotRespond: (SessionStatusModel sessionStatusModel) {
GifLoaderDialogUtils.showMyDialog(context); var asd="";
model.endCall(patient.vcId, sessionStatusModel.sessionStatus == 3,).then((value) { // WidgetsBinding.instance.addPostFrameCallback((_) {
GifLoaderDialogUtils.hideDialog(context); // GifLoaderDialogUtils.showMyDialog(context);
if (model.state == ViewState.ErrorLocal) { // model.endCall(patient.vcId, sessionStatusModel.sessionStatus == 3,).then((value) {
DrAppToastMsg.showErrorToast(model.error); // GifLoaderDialogUtils.hideDialog(context);
} // if (model.state == ViewState.ErrorLocal) {
setState(() { // DrAppToastMsg.showErrorToast(model.error);
isCallFinished = true; // }
}); // setState(() {
}); // isCallFinished = true;
// });
// });
//
// });
});
}); }
});
}
} }
}, },
), ),
), ),

@ -629,7 +629,7 @@ packages:
name: meta name: meta
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.3.0-nullsafety.4" version: "1.3.0-nullsafety.3"
mime: mime:
dependency: transitive dependency: transitive
description: description:
@ -921,7 +921,7 @@ packages:
name: stack_trace name: stack_trace
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.10.0-nullsafety.2" version: "1.10.0-nullsafety.1"
sticky_headers: sticky_headers:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1119,5 +1119,5 @@ packages:
source: hosted source: hosted
version: "2.2.1" version: "2.2.1"
sdks: sdks:
dart: ">=2.10.0 <=2.11.0-213.1.beta" dart: ">=2.10.0 <2.11.0"
flutter: ">=1.22.0 <2.0.0" flutter: ">=1.22.0 <2.0.0"

Loading…
Cancel
Save