Merge branch 'videocall_popup' of https://gitlab.com/Cloud_Solution/doctor_app_flutter into video-streaming-android
Conflicts: lib/screens/patients/profile/profile_screen/patient_profile_screen.dart lib/util/VideoChannel.dart lib/widgets/patients/profile/patient-profile-header-new-design-app-bar.dartmerge-requests/745/head
@ -1,6 +1,6 @@
|
||||
{
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "camera_back.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 6.3 KiB |
@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "camera_front.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 6.9 KiB |
@ -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
|
||||
}
|
||||
}
|
||||
|
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
|
||||
}
|
||||
}
|
||||
|
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
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 4.8 KiB |
@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "hide_video_icon.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 906 B |
@ -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
|
||||
}
|
||||
}
|
||||
|
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
|
||||
}
|
||||
}
|
||||
|
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
|
||||
}
|
||||
}
|
||||
|
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
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 5.6 KiB |
@ -1,296 +1,343 @@
|
||||
<?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">
|
||||
<device id="retina6_1" orientation="portrait" appearance="light"/>
|
||||
<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_7" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<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"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--Flutter View Controller-->
|
||||
<!--Main App View Controller-->
|
||||
<scene sceneID="tne-QT-ifu">
|
||||
<objects>
|
||||
<viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">
|
||||
<viewController id="BYZ-38-t0r" customClass="MainAppViewController" customModule="Runner" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<layoutGuides>
|
||||
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
|
||||
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="428" height="926"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</view>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="-45" y="1436"/>
|
||||
<point key="canvasLocation" x="-1535" y="2239"/>
|
||||
</scene>
|
||||
<!--View Controller-->
|
||||
<!--Video Call View Controller-->
|
||||
<scene sceneID="L7v-n1-KvF">
|
||||
<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>
|
||||
<viewControllerLayoutGuide type="top" id="BIa-yr-ZMY"/>
|
||||
<viewControllerLayoutGuide type="bottom" id="VIH-1T-Ife"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="PoR-7r-yNe">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="428" height="926"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6C5-o5-R1n" userLabel="controlButtonSpacer">
|
||||
<rect key="frame" x="14" y="844" width="139" height="30"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="30" id="0mU-Ko-Up3"/>
|
||||
<constraint firstAttribute="width" constant="139" id="DNz-Ig-XOS"/>
|
||||
</constraints>
|
||||
<view contentMode="scaleToFill" restorationIdentifier="VideoCallNavigationViewController" translatesAutoresizingMaskIntoConstraints="NO" id="eOT-Jr-GUl" userLabel="remoteVideo">
|
||||
<rect key="frame" x="0.0" y="0.0" width="428" height="926"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</view>
|
||||
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="yS9-HT-vp8" userLabel="controlButtonSpacer">
|
||||
<rect key="frame" x="265" y="844" width="140" height="30"/>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="O5s-CJ-RFv" userLabel="DragableBoundryDefiner">
|
||||
<rect key="frame" x="0.0" y="100" width="428" height="731"/>
|
||||
<subviews>
|
||||
<view clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="XHG-Db-3Px" customClass="AADraggableView" customModule="AADraggableView">
|
||||
<rect key="frame" x="288" y="10" width="130" height="182"/>
|
||||
<subviews>
|
||||
<view clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="0ZP-s2-kM5" userLabel="localVideo">
|
||||
<rect key="frame" x="0.0" y="0.0" width="130" height="182"/>
|
||||
<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 clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6y1-an-W7F">
|
||||
<rect key="frame" x="0.0" y="0.0" width="130" height="182"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="videoMutedIndicator" translatesAutoresizingMaskIntoConstraints="NO" id="FEH-bC-Hnh" userLabel="localVideoMutedIndicator">
|
||||
<rect key="frame" x="47" y="76" 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>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
|
||||
<integer key="value" value="5"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</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>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="padding">
|
||||
<integer key="value" value="20"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="140" id="Alm-7E-yeU"/>
|
||||
<constraint firstAttribute="height" constant="30" id="amS-in-0UH"/>
|
||||
<constraint firstAttribute="trailing" secondItem="XHG-Db-3Px" secondAttribute="trailing" constant="10" id="Ncy-sD-qeL"/>
|
||||
<constraint firstItem="XHG-Db-3Px" firstAttribute="top" secondItem="O5s-CJ-RFv" secondAttribute="top" constant="10" id="nM8-B7-soj"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<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"/>
|
||||
<rect key="frame" x="154" y="413" 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="0ZP-s2-kM5" userLabel="localVideo">
|
||||
<rect key="frame" x="270.5" y="138" width="103.5" height="224"/>
|
||||
</view>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="localVideoMutedBg" translatesAutoresizingMaskIntoConstraints="NO" id="A0G-cT-yji" userLabel="localVideoMutedBg">
|
||||
<rect key="frame" x="215" y="138" width="159" height="224"/>
|
||||
</imageView>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="sK0-tB-H9u" userLabel="controlButtons">
|
||||
<rect key="frame" x="0.0" y="740" width="414" height="80"/>
|
||||
<rect key="frame" x="0.0" y="831" width="428" height="95"/>
|
||||
<subviews>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="NUO-2p-pzL" userLabel="videoMuteButton">
|
||||
<rect key="frame" x="29" y="20.5" width="39" height="39"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="39" id="CWU-fT-9gx"/>
|
||||
<constraint firstAttribute="height" constant="39" id="nsM-Xv-O2N"/>
|
||||
</constraints>
|
||||
<state key="normal" title="Button" image="speakerOff"/>
|
||||
<state key="selected" image="speakerOffSelected"/>
|
||||
<connections>
|
||||
<action selector="didClickSpeakerButton:" destination="t2c-G5-7AE" eventType="touchUpInside" id="XHg-oo-TWD"/>
|
||||
</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="98" y="20.5" width="39" height="39"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="39" id="Nv9-dR-SYL"/>
|
||||
<constraint firstAttribute="height" constant="39" id="lFc-rS-c6B"/>
|
||||
</constraints>
|
||||
<state key="normal" title="Button" image="muteButton"/>
|
||||
<state key="selected" image="muteButtonSelected"/>
|
||||
<connections>
|
||||
<action selector="didClickMuteButton:" destination="t2c-G5-7AE" eventType="touchUpInside" id="7lr-uj-db1"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ygd-al-G4F" userLabel="switchCameraButton">
|
||||
<rect key="frame" x="352" y="20.5" width="39" height="39"/>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="r9w-8l-Zxj">
|
||||
<rect key="frame" x="15" y="15" width="230" height="50"/>
|
||||
<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="50" height="50"/>
|
||||
<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="60" y="0.0" width="50" height="50"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" secondItem="NUO-2p-pzL" secondAttribute="height" multiplier="1:1" id="KGm-Yp-MqK"/>
|
||||
</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="120" y="0.0" width="50" height="50"/>
|
||||
<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>
|
||||
<button opaque="NO" contentMode="scaleToFill" selected="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="lar-xK-rhR" userLabel="switchCamera">
|
||||
<rect key="frame" x="180" y="0.0" width="50" height="50"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" secondItem="lar-xK-rhR" secondAttribute="height" multiplier="1:1" id="Wpc-dx-kpF"/>
|
||||
</constraints>
|
||||
<state key="normal" image="camera_back"/>
|
||||
<state key="selected" image="camera_front"/>
|
||||
<connections>
|
||||
<action selector="didClickSwitchCameraButton:" destination="t2c-G5-7AE" eventType="touchUpInside" id="S3g-7j-Ca0"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="39" id="EHa-e5-BfD"/>
|
||||
<constraint firstAttribute="height" constant="39" id="KEK-0n-HJw"/>
|
||||
<constraint firstAttribute="height" constant="50" id="3L0-3h-Bxg"/>
|
||||
<constraint firstItem="lar-xK-rhR" firstAttribute="width" secondItem="lar-xK-rhR" secondAttribute="height" multiplier="1:1" id="R46-j0-zPf"/>
|
||||
<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"/>
|
||||
<constraint firstAttribute="height" constant="30" id="y90-hA-p5Z"/>
|
||||
</constraints>
|
||||
<state key="normal" title="Button" image="switchCameraButton"/>
|
||||
<state key="selected" image="switchCameraButtonSelected"/>
|
||||
<connections>
|
||||
<action selector="didClickSwitchCameraButton:" destination="t2c-G5-7AE" eventType="touchUpInside" id="TBa-Av-IXy"/>
|
||||
</connections>
|
||||
</button>
|
||||
<variation key="default">
|
||||
<mask key="constraints">
|
||||
<exclude reference="y90-hA-p5Z"/>
|
||||
</mask>
|
||||
</variation>
|
||||
</stackView>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="AoF-Up-Yu5" userLabel="hangUpButton">
|
||||
<rect key="frame" x="174" y="4.5" width="71" height="71"/>
|
||||
<rect key="frame" x="363" y="15" width="50" height="50"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="71" id="ACP-i0-gK8"/>
|
||||
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="71" id="DS1-a1-ep3"/>
|
||||
<constraint firstAttribute="height" constant="71" id="ltx-rR-am0"/>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="71" id="s7u-Zs-z2Q"/>
|
||||
<constraint firstAttribute="width" secondItem="AoF-Up-Yu5" secondAttribute="height" multiplier="1:1" id="6LJ-QR-WEY"/>
|
||||
</constraints>
|
||||
<state key="normal" image="hangUpButton"/>
|
||||
<state key="normal" image="end_call"/>
|
||||
<connections>
|
||||
<action selector="hangUp:" destination="t2c-G5-7AE" eventType="touchUpInside" id="SUH-Gd-OXj"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="7vf-kV-eQ5" userLabel="videoMuteButton">
|
||||
<rect key="frame" x="283" y="20.5" width="39" height="39"/>
|
||||
</subviews>
|
||||
<color key="backgroundColor" red="0.18431372549019609" green="0.1764705882352941" blue="0.16470588235294117" alpha="0.5" colorSpace="custom" customColorSpace="displayP3"/>
|
||||
<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 firstItem="r9w-8l-Zxj" firstAttribute="leading" secondItem="sK0-tB-H9u" secondAttribute="leading" priority="900" constant="5" id="6B7-94-Myo"/>
|
||||
<constraint firstAttribute="trailing" secondItem="AoF-Up-Yu5" secondAttribute="trailing" priority="900" constant="5" id="DgE-WQ-KQm"/>
|
||||
<constraint firstItem="r9w-8l-Zxj" firstAttribute="top" secondItem="sK0-tB-H9u" secondAttribute="top" priority="900" constant="5" id="Ft5-cy-2d0"/>
|
||||
<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="15" id="flB-AR-zo3"/>
|
||||
<constraint firstAttribute="bottom" secondItem="r9w-8l-Zxj" secondAttribute="bottom" priority="900" constant="5" id="n0r-vM-wKh"/>
|
||||
<constraint firstItem="r9w-8l-Zxj" firstAttribute="leading" secondItem="sK0-tB-H9u" secondAttribute="leading" constant="15" id="x13-gZ-cYp"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="2nj-Va-L7c" userLabel="TopBar">
|
||||
<rect key="frame" x="0.0" y="0.0" width="428" height="100"/>
|
||||
<subviews>
|
||||
<button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="n8H-om-4LV">
|
||||
<rect key="frame" x="393" y="75" width="25" height="25"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="39" id="7Rd-r8-zJP"/>
|
||||
<constraint firstAttribute="width" constant="39" id="mwK-hd-jIy"/>
|
||||
<constraint firstAttribute="height" constant="25" id="dyc-7x-bTk"/>
|
||||
<constraint firstAttribute="width" constant="25" id="tYx-Ul-0Pf"/>
|
||||
</constraints>
|
||||
<state key="normal" title="Button" image="videoMuteButton"/>
|
||||
<state key="selected" image="videoMuteButtonSelected"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="60"/>
|
||||
<state key="normal" image="hide_video_icon">
|
||||
<color key="titleColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</state>
|
||||
<connections>
|
||||
<action selector="didClickVideoMuteButton:" destination="t2c-G5-7AE" eventType="touchUpInside" id="Hza-Ft-NNB"/>
|
||||
<action selector="hideVideoBtnTapped:" destination="t2c-G5-7AE" eventType="touchUpInside" id="2mC-ry-Lis"/>
|
||||
</connections>
|
||||
</button>
|
||||
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="9g2-IH-l8e" userLabel="controlButtonSpacer">
|
||||
<rect key="frame" x="396" y="0.0" width="18" height="80"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" priority="750" constant="18" id="7f6-zT-RoW"/>
|
||||
<constraint firstAttribute="height" constant="80" id="cmy-aX-hM0"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="a4N-1U-1Yt" userLabel="controlButtonSpacer">
|
||||
<rect key="frame" x="328" y="0.0" width="18" height="80"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" priority="750" constant="18" id="X8j-wu-KrQ"/>
|
||||
<constraint firstAttribute="height" constant="80" id="vkd-63-bmN"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="GbA-j6-191" userLabel="controlButtonSpacer">
|
||||
<rect key="frame" x="259" y="0.0" width="18" height="80"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" priority="750" constant="18" id="Bz0-tD-Q4d"/>
|
||||
<constraint firstAttribute="height" constant="80" id="Ovg-ap-S7E"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="h0g-z5-Y95" userLabel="controlButtonSpacer">
|
||||
<rect key="frame" x="143" y="0.0" width="18" height="80"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="80" id="Vaj-Va-jZn"/>
|
||||
<constraint firstAttribute="width" priority="750" constant="18" id="Wv5-ys-Ho4"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="gop-Yl-2fm" userLabel="controlButtonSpacer">
|
||||
<rect key="frame" x="73" y="0.0" width="18" height="80"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" priority="750" constant="18" id="iqX-Wz-fb1"/>
|
||||
<constraint firstAttribute="height" constant="80" id="j0P-xC-zSP"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="JCG-W9-5ko" userLabel="controlButtonSpacer">
|
||||
<rect key="frame" x="6" y="0.0" width="18" height="80"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" priority="750" constant="18" id="La6-ZY-Qs8"/>
|
||||
<constraint firstAttribute="height" constant="80" id="mf9-Qg-gVZ"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" alignment="center" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="bvC-Fa-s3m">
|
||||
<rect key="frame" x="15" y="50" width="398" height="30"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Al-Anoud Al-Anoud" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Zct-62-YE6">
|
||||
<rect key="frame" x="0.0" y="0.0" width="328" height="30"/>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="25"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8Xn-w6-Mox">
|
||||
<rect key="frame" x="338" y="3" width="60" height="24"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="-- : --" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Btq-Ll-BPH">
|
||||
<rect key="frame" x="13.333333333333314" y="5.0000000000000009" width="33.666666666666664" height="14.333333333333336"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="12"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" red="0.0018553551427920477" green="0.59902576721627221" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="60" id="InL-xK-60G"/>
|
||||
<constraint firstItem="Btq-Ll-BPH" firstAttribute="centerY" secondItem="8Xn-w6-Mox" secondAttribute="centerY" id="Vbi-zv-vUQ"/>
|
||||
<constraint firstItem="Btq-Ll-BPH" firstAttribute="centerX" secondItem="8Xn-w6-Mox" secondAttribute="centerX" id="WNT-XA-AW6"/>
|
||||
<constraint firstAttribute="height" constant="24" id="Zck-PD-EN0"/>
|
||||
</constraints>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
|
||||
<integer key="value" value="12"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</view>
|
||||
</subviews>
|
||||
</stackView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" red="0.18431372549019609" green="0.1764705882352941" blue="0.16470588235294117" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="displayP3"/>
|
||||
<constraints>
|
||||
<constraint firstItem="9g2-IH-l8e" firstAttribute="leading" secondItem="ygd-al-G4F" secondAttribute="trailing" constant="5" id="0Bv-9b-HQh"/>
|
||||
<constraint firstItem="a4N-1U-1Yt" firstAttribute="leading" secondItem="7vf-kV-eQ5" secondAttribute="trailing" constant="6" id="4vp-mw-gRE"/>
|
||||
<constraint firstAttribute="height" constant="80" id="5QG-54-ulG"/>
|
||||
<constraint firstItem="GbA-j6-191" firstAttribute="width" secondItem="h0g-z5-Y95" secondAttribute="width" id="5cw-b2-SPx"/>
|
||||
<constraint firstItem="h0g-z5-Y95" firstAttribute="width" secondItem="gop-Yl-2fm" secondAttribute="width" id="7oE-3V-2Gc"/>
|
||||
<constraint firstItem="7vf-kV-eQ5" firstAttribute="centerY" secondItem="sK0-tB-H9u" secondAttribute="centerY" id="8zH-6k-6Wz"/>
|
||||
<constraint firstItem="gop-Yl-2fm" firstAttribute="leading" secondItem="NUO-2p-pzL" secondAttribute="trailing" constant="5" id="Bbh-OY-I9f"/>
|
||||
<constraint firstItem="NUO-2p-pzL" firstAttribute="leading" secondItem="JCG-W9-5ko" secondAttribute="trailing" constant="5" id="Ccz-Qq-RXf"/>
|
||||
<constraint firstItem="gop-Yl-2fm" firstAttribute="centerY" secondItem="sK0-tB-H9u" secondAttribute="centerY" id="DE6-nZ-rEI"/>
|
||||
<constraint firstItem="GbA-j6-191" firstAttribute="centerY" secondItem="sK0-tB-H9u" secondAttribute="centerY" id="EVH-xy-wpT"/>
|
||||
<constraint firstItem="ygd-al-G4F" firstAttribute="leading" secondItem="a4N-1U-1Yt" secondAttribute="trailing" constant="6" id="FNy-Br-FIj"/>
|
||||
<constraint firstItem="NUO-2p-pzL" firstAttribute="centerY" secondItem="sK0-tB-H9u" secondAttribute="centerY" id="Fme-oB-F7i"/>
|
||||
<constraint firstItem="GbA-j6-191" firstAttribute="leading" secondItem="AoF-Up-Yu5" secondAttribute="trailing" constant="14" id="GxO-Fe-iqR"/>
|
||||
<constraint firstItem="JCG-W9-5ko" firstAttribute="centerY" secondItem="sK0-tB-H9u" secondAttribute="centerY" id="HPP-q4-IDT"/>
|
||||
<constraint firstItem="h0g-z5-Y95" firstAttribute="leading" secondItem="N2h-FX-kF5" secondAttribute="trailing" constant="6" id="I2J-pE-7yx"/>
|
||||
<constraint firstItem="7vf-kV-eQ5" firstAttribute="leading" secondItem="GbA-j6-191" secondAttribute="trailing" constant="6" id="MVo-If-UVQ"/>
|
||||
<constraint firstItem="a4N-1U-1Yt" firstAttribute="width" secondItem="GbA-j6-191" secondAttribute="width" id="Me9-IC-YE2"/>
|
||||
<constraint firstItem="N2h-FX-kF5" firstAttribute="leading" secondItem="gop-Yl-2fm" secondAttribute="trailing" constant="7" id="RHr-s8-sAg"/>
|
||||
<constraint firstItem="h0g-z5-Y95" firstAttribute="centerY" secondItem="sK0-tB-H9u" secondAttribute="centerY" id="RJj-Uh-H2E"/>
|
||||
<constraint firstItem="a4N-1U-1Yt" firstAttribute="centerY" secondItem="sK0-tB-H9u" secondAttribute="centerY" id="Tb2-6o-Wqh"/>
|
||||
<constraint firstItem="AoF-Up-Yu5" firstAttribute="leading" secondItem="h0g-z5-Y95" secondAttribute="trailing" constant="13" id="VZS-xZ-nbe"/>
|
||||
<constraint firstItem="NUO-2p-pzL" firstAttribute="leading" secondItem="JCG-W9-5ko" secondAttribute="trailing" constant="5" id="Z1j-5z-34E"/>
|
||||
<constraint firstItem="7vf-kV-eQ5" firstAttribute="leading" secondItem="GbA-j6-191" secondAttribute="trailing" constant="6" id="ZjD-GK-SkY"/>
|
||||
<constraint firstItem="ygd-al-G4F" firstAttribute="centerY" secondItem="sK0-tB-H9u" secondAttribute="centerY" id="bJA-GM-b2E"/>
|
||||
<constraint firstItem="ygd-al-G4F" firstAttribute="leading" secondItem="a4N-1U-1Yt" secondAttribute="trailing" constant="6" id="eFd-3F-A5f"/>
|
||||
<constraint firstItem="JCG-W9-5ko" firstAttribute="leading" secondItem="sK0-tB-H9u" secondAttribute="leading" constant="6" id="f0s-gb-347"/>
|
||||
<constraint firstItem="gop-Yl-2fm" firstAttribute="leading" secondItem="NUO-2p-pzL" secondAttribute="trailing" constant="5" id="frf-I5-Rs9"/>
|
||||
<constraint firstItem="gop-Yl-2fm" firstAttribute="width" secondItem="JCG-W9-5ko" secondAttribute="width" id="i84-jd-Hwr"/>
|
||||
<constraint firstItem="N2h-FX-kF5" firstAttribute="leading" secondItem="gop-Yl-2fm" secondAttribute="trailing" constant="7" id="jlv-lR-Nlf"/>
|
||||
<constraint firstItem="N2h-FX-kF5" firstAttribute="centerY" secondItem="sK0-tB-H9u" secondAttribute="centerY" id="nU8-Hw-s0U"/>
|
||||
<constraint firstItem="9g2-IH-l8e" firstAttribute="centerY" secondItem="sK0-tB-H9u" secondAttribute="centerY" id="pxq-U1-zP5"/>
|
||||
<constraint firstItem="AoF-Up-Yu5" firstAttribute="centerY" secondItem="sK0-tB-H9u" secondAttribute="centerY" id="ql2-fm-OeZ"/>
|
||||
<constraint firstItem="9g2-IH-l8e" firstAttribute="width" secondItem="a4N-1U-1Yt" secondAttribute="width" id="uXs-zM-gyf"/>
|
||||
<constraint firstItem="h0g-z5-Y95" firstAttribute="leading" secondItem="N2h-FX-kF5" secondAttribute="trailing" constant="6" id="uia-9X-UrW"/>
|
||||
<constraint firstItem="a4N-1U-1Yt" firstAttribute="leading" secondItem="7vf-kV-eQ5" secondAttribute="trailing" constant="6" id="vgH-Oj-HJc"/>
|
||||
<constraint firstAttribute="trailing" secondItem="9g2-IH-l8e" secondAttribute="trailing" id="vng-6I-eYj"/>
|
||||
<constraint firstAttribute="height" constant="100" id="6eP-Zl-97q"/>
|
||||
<constraint firstAttribute="trailing" secondItem="n8H-om-4LV" secondAttribute="trailing" constant="10" id="7Uq-4Q-ywD"/>
|
||||
<constraint firstAttribute="bottom" secondItem="bvC-Fa-s3m" secondAttribute="bottom" priority="900" constant="5" id="HgY-Dw-B9R"/>
|
||||
<constraint firstAttribute="bottom" secondItem="n8H-om-4LV" secondAttribute="bottom" id="Nr2-zL-avJ"/>
|
||||
<constraint firstAttribute="bottom" secondItem="bvC-Fa-s3m" secondAttribute="bottom" constant="20" id="PWn-Sb-O8B"/>
|
||||
<constraint firstItem="bvC-Fa-s3m" firstAttribute="leading" secondItem="2nj-Va-L7c" secondAttribute="leading" constant="15" id="YH4-fV-fkQ"/>
|
||||
<constraint firstAttribute="trailing" secondItem="bvC-Fa-s3m" secondAttribute="trailing" constant="15" id="oq6-Oi-i7g"/>
|
||||
<constraint firstAttribute="height" priority="900" constant="25" id="s8H-wK-WPB"/>
|
||||
</constraints>
|
||||
</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>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstItem="VIH-1T-Ife" firstAttribute="top" secondItem="sK0-tB-H9u" secondAttribute="bottom" constant="42" id="1tT-KH-NEk"/>
|
||||
<constraint firstAttribute="trailing" secondItem="sK0-tB-H9u" secondAttribute="trailing" id="6K9-n9-ceJ"/>
|
||||
<constraint firstAttribute="bottom" secondItem="6C5-o5-R1n" secondAttribute="bottom" constant="22" id="76x-6M-xOb"/>
|
||||
<constraint firstItem="yS9-HT-vp8" firstAttribute="top" secondItem="sK0-tB-H9u" secondAttribute="bottom" constant="24" id="9zS-Fw-oaT"/>
|
||||
<constraint firstItem="eOT-Jr-GUl" firstAttribute="centerX" secondItem="PoR-7r-yNe" secondAttribute="centerX" id="HMH-Hc-ofZ"/>
|
||||
<constraint firstItem="FEH-bC-Hnh" firstAttribute="centerY" secondItem="0ZP-s2-kM5" secondAttribute="centerY" id="K8x-bd-bS9"/>
|
||||
<constraint firstItem="eOT-Jr-GUl" firstAttribute="width" secondItem="PoR-7r-yNe" secondAttribute="width" id="PH6-qw-V6p"/>
|
||||
<constraint firstItem="eOT-Jr-GUl" firstAttribute="centerY" secondItem="PoR-7r-yNe" secondAttribute="centerY" id="Prz-4m-LHB"/>
|
||||
<constraint firstItem="0ZP-s2-kM5" firstAttribute="width" secondItem="PoR-7r-yNe" secondAttribute="width" multiplier="0.25" id="QCm-L0-oF7"/>
|
||||
<constraint firstItem="sK0-tB-H9u" firstAttribute="leading" secondItem="PoR-7r-yNe" secondAttribute="leading" id="TPj-1d-lx6"/>
|
||||
<constraint firstItem="eOT-Jr-GUl" firstAttribute="leading" secondItem="PoR-7r-yNe" secondAttribute="leading" id="4xz-lj-CXd"/>
|
||||
<constraint firstAttribute="bottom" secondItem="eOT-Jr-GUl" secondAttribute="bottom" id="5Ae-F1-hSz"/>
|
||||
<constraint firstItem="2nj-Va-L7c" firstAttribute="leading" secondItem="PoR-7r-yNe" secondAttribute="leading" id="8Gx-Tb-bpo"/>
|
||||
<constraint firstItem="O5s-CJ-RFv" firstAttribute="leading" secondItem="PoR-7r-yNe" secondAttribute="leading" id="Hyn-9r-k8s"/>
|
||||
<constraint firstItem="sK0-tB-H9u" firstAttribute="leading" secondItem="PoR-7r-yNe" secondAttribute="leading" id="Itp-Pe-kh9"/>
|
||||
<constraint firstItem="2nj-Va-L7c" firstAttribute="top" secondItem="PoR-7r-yNe" secondAttribute="top" id="LDC-Rq-79f"/>
|
||||
<constraint firstItem="XHG-Db-3Px" firstAttribute="height" secondItem="eOT-Jr-GUl" secondAttribute="height" multiplier="0.196544" id="LwG-7m-Ihd"/>
|
||||
<constraint firstAttribute="trailing" secondItem="eOT-Jr-GUl" secondAttribute="trailing" id="Pcn-K9-H92"/>
|
||||
<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 firstAttribute="trailingMargin" secondItem="0ZP-s2-kM5" secondAttribute="trailing" constant="20" id="UZX-Yj-Efk"/>
|
||||
<constraint firstItem="A0G-cT-yji" firstAttribute="width" secondItem="0ZP-s2-kM5" secondAttribute="width" constant="55.5" id="WMH-vd-rQe"/>
|
||||
<constraint firstAttribute="trailing" secondItem="O5s-CJ-RFv" secondAttribute="trailing" id="VcP-8e-3Un"/>
|
||||
<constraint firstItem="CL1-2v-m1L" firstAttribute="centerX" secondItem="PoR-7r-yNe" secondAttribute="centerX" id="Xt8-k3-fDj"/>
|
||||
<constraint firstItem="FEH-bC-Hnh" firstAttribute="centerX" secondItem="0ZP-s2-kM5" secondAttribute="centerX" constant="-28.25" id="Yvq-7p-bjS"/>
|
||||
<constraint firstAttribute="bottom" secondItem="yS9-HT-vp8" secondAttribute="bottom" constant="22" id="bVF-wg-lH8"/>
|
||||
<constraint firstItem="6C5-o5-R1n" firstAttribute="leading" secondItem="PoR-7r-yNe" secondAttribute="leading" constant="14" id="der-54-SZ4"/>
|
||||
<constraint firstItem="A0G-cT-yji" firstAttribute="centerX" secondItem="0ZP-s2-kM5" secondAttribute="centerX" constant="-27.75" id="ga5-7D-8CU"/>
|
||||
<constraint firstItem="A0G-cT-yji" firstAttribute="height" secondItem="0ZP-s2-kM5" secondAttribute="height" id="hMV-RD-NwE"/>
|
||||
<constraint firstItem="A0G-cT-yji" firstAttribute="centerY" secondItem="0ZP-s2-kM5" secondAttribute="centerY" id="nBC-L0-5Pe"/>
|
||||
<constraint firstItem="0ZP-s2-kM5" firstAttribute="height" secondItem="PoR-7r-yNe" secondAttribute="height" multiplier="0.25" id="pq3-Iv-N4l"/>
|
||||
<constraint firstItem="0ZP-s2-kM5" firstAttribute="top" secondItem="BIa-yr-ZMY" secondAttribute="bottom" constant="50" id="qrs-H2-Rw4"/>
|
||||
<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"/>
|
||||
<constraint firstItem="sK0-tB-H9u" firstAttribute="top" secondItem="O5s-CJ-RFv" secondAttribute="bottom" id="eOi-4p-iMm"/>
|
||||
<constraint firstItem="O5s-CJ-RFv" firstAttribute="top" secondItem="2nj-Va-L7c" secondAttribute="bottom" id="fLH-dK-xpa"/>
|
||||
<constraint firstItem="eOT-Jr-GUl" firstAttribute="top" secondItem="PoR-7r-yNe" secondAttribute="top" id="gFm-X8-RIU"/>
|
||||
<constraint firstAttribute="trailing" secondItem="sK0-tB-H9u" secondAttribute="trailing" id="gSh-7K-3p5"/>
|
||||
<constraint firstAttribute="trailing" secondItem="2nj-Va-L7c" secondAttribute="trailing" id="vQp-Bv-IVU"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" id="s5b-6P-Hwj"/>
|
||||
<connections>
|
||||
<outlet property="camSwitchBtn" destination="lar-xK-rhR" id="tde-s5-Mji"/>
|
||||
<outlet property="controlButtons" destination="sK0-tB-H9u" id="mDK-cq-oQz"/>
|
||||
<outlet property="draggableBoundryDefiner" destination="O5s-CJ-RFv" id="npi-81-C23"/>
|
||||
<outlet property="hideVideoBtn" destination="n8H-om-4LV" id="tTp-Ep-XKS"/>
|
||||
<outlet property="lblCallDuration" destination="Btq-Ll-BPH" id="Jdh-yK-PEx"/>
|
||||
<outlet property="lblRemoteUsername" destination="Zct-62-YE6" id="OQ0-mf-mvc"/>
|
||||
<outlet property="localVideo" destination="0ZP-s2-kM5" id="C68-k7-h5j"/>
|
||||
<outlet property="localVideoMutedBg" destination="A0G-cT-yji" id="5Ia-9g-7CT"/>
|
||||
<outlet property="localVideoMutedIndicator" destination="FEH-bC-Hnh" id="PKd-gQ-Jct"/>
|
||||
<outlet property="localVideoMutedBg" destination="6y1-an-W7F" id="5FF-Ak-Vxb"/>
|
||||
<outlet property="micMuteBtn" destination="N2h-FX-kF5" id="zgK-g1-Ndr"/>
|
||||
<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"/>
|
||||
<outletCollection property="minimizeConstraint" destination="s8H-wK-WPB" collectionClass="NSMutableArray" id="XTM-jR-Cos"/>
|
||||
<outletCollection property="minimizeConstraint" destination="HgY-Dw-B9R" collectionClass="NSMutableArray" id="Fi8-YX-9iQ"/>
|
||||
<outletCollection property="minimizeConstraint" destination="Ft5-cy-2d0" collectionClass="NSMutableArray" id="Ze3-H8-gj4"/>
|
||||
<outletCollection property="minimizeConstraint" destination="n0r-vM-wKh" collectionClass="NSMutableArray" id="IaQ-TS-ng8"/>
|
||||
<outletCollection property="maximisedConstraint" destination="G9u-kw-mVz" collectionClass="NSMutableArray" id="TaK-5m-byK"/>
|
||||
<outletCollection property="maximisedConstraint" destination="00C-1i-sGc" collectionClass="NSMutableArray" id="vmx-rp-JZI"/>
|
||||
<outletCollection property="maximisedConstraint" destination="PWn-Sb-O8B" collectionClass="NSMutableArray" id="pK4-yA-36p"/>
|
||||
<outletCollection property="maximisedConstraint" destination="6eP-Zl-97q" collectionClass="NSMutableArray" id="dxk-ol-uAW"/>
|
||||
<outletCollection property="maximisedConstraint" destination="3L0-3h-Bxg" collectionClass="NSMutableArray" id="w3Q-AR-TQY"/>
|
||||
<outletCollection property="minimizeConstraint" destination="y90-hA-p5Z" collectionClass="NSMutableArray" id="INL-Bc-eTM"/>
|
||||
<outletCollection property="minimizeConstraint" destination="DgE-WQ-KQm" collectionClass="NSMutableArray" id="zy0-aI-bnY"/>
|
||||
<outletCollection property="maximisedConstraint" destination="flB-AR-zo3" collectionClass="NSMutableArray" id="hwu-U4-5s5"/>
|
||||
<outletCollection property="minimizeConstraint" destination="6B7-94-Myo" collectionClass="NSMutableArray" id="epM-Kg-2yi"/>
|
||||
<outletCollection property="maximisedConstraint" destination="x13-gZ-cYp" collectionClass="NSMutableArray" id="uLI-UQ-yIo"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="x33-EE-6Ak" 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>
|
||||
<point key="canvasLocation" x="880" y="1436"/>
|
||||
<point key="canvasLocation" x="-797.66355140186909" y="2238.6609071274302"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
<resources>
|
||||
<image name="hangUpButton" width="71" height="71"/>
|
||||
<image name="localVideoMutedBg" width="90" height="120"/>
|
||||
<image name="muteButton" width="39" height="39"/>
|
||||
<image name="muteButtonSelected" width="39" height="39"/>
|
||||
<image name="speakerOff" width="39" height="39"/>
|
||||
<image name="speakerOffSelected" width="39" height="39"/>
|
||||
<image name="switchCameraButton" width="39" height="39"/>
|
||||
<image name="switchCameraButtonSelected" width="39" height="39"/>
|
||||
<image name="videoMuteButton" width="39" height="39"/>
|
||||
<image name="videoMuteButtonSelected" width="39" height="39"/>
|
||||
<image name="camera_back" width="198" height="202"/>
|
||||
<image name="camera_front" width="198" height="202"/>
|
||||
<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="hide_video_icon" width="50" height="50"/>
|
||||
<image name="mic_mute" width="198" height="199"/>
|
||||
<image name="mic_unmute" width="198" height="202"/>
|
||||
<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>
|
||||
</document>
|
||||
|
||||
@ -0,0 +1,20 @@
|
||||
//
|
||||
// Extensions.swift
|
||||
// Runner
|
||||
//
|
||||
// Created by Zohaib Iqbal Kambrani on 09/06/2021.
|
||||
// Copyright © 2021 The Chromium Authors. All rights reserved.
|
||||
//
|
||||
import AADraggableView
|
||||
|
||||
extension AADraggableView{
|
||||
func enable(_ enable:Bool){
|
||||
if enable == false{
|
||||
gestureRecognizers?.forEach({ gest in
|
||||
removeGestureRecognizer(gest)
|
||||
})
|
||||
}else{
|
||||
isEnabled = true
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,154 @@
|
||||
//
|
||||
// MainAppViewController.swift
|
||||
// Runner
|
||||
//
|
||||
// Created by Zohaib Iqbal Kambrani on 08/06/2021.
|
||||
// Copyright © 2021 The Chromium Authors. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import AADraggableView
|
||||
|
||||
class MainAppViewController: FlutterViewController{
|
||||
var videoCallContainer:AADraggableView!
|
||||
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)
|
||||
}
|
||||
|
||||
var videoCallChannel:FlutterMethodChannel?
|
||||
private func initFlutterBridge(){
|
||||
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 = AADraggableView(frame: CGRect(x: 0, y: 0, width: view.bounds.width, height: view.bounds.height))
|
||||
videoCallContainer.backgroundColor = UIColor.black
|
||||
videoCallContainer.isHidden = true
|
||||
videoCallContainer.clipsToBounds = true
|
||||
videoCallContainer.padding = 20
|
||||
videoCallContainer.reposition = .edgesOnly
|
||||
videoCallContainer.isEnabled = false
|
||||
|
||||
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 showVideo(show:Bool){
|
||||
UIView.transition(with: view, duration: 0.5, options: .transitionCrossDissolve, animations: {
|
||||
self.videoCallContainer.isHidden = !show
|
||||
})
|
||||
}
|
||||
|
||||
private func startVideoCall(result: @escaping FlutterResult, call:FlutterMethodCall) {
|
||||
videoCallFlutterResult = result
|
||||
|
||||
if let arguments = call.arguments as? NSDictionary{
|
||||
showVideoCallView(true)
|
||||
|
||||
videoCallViewController.onFloat = { min in
|
||||
self.floatVideoCallView(min)
|
||||
}
|
||||
videoCallViewController.onCallConnect = {
|
||||
self.videoCallChannel?.invokeMethod("onCallConnected",arguments: nil)
|
||||
}
|
||||
videoCallViewController.onCallDisconnect = {
|
||||
self.showVideoCallView(false)
|
||||
self.videoCallChannel?.invokeMethod("onCallDisconnected",arguments: nil)
|
||||
}
|
||||
videoCallViewController.callBack = self
|
||||
videoCallViewController.start(params: VideoCallRequestParameters(dictionary: arguments))
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private func floatVideoCallView(_ value:Bool){
|
||||
videoCallContainer.enable(value)
|
||||
|
||||
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.isHidden = !value
|
||||
}
|
||||
}
|
||||
|
||||
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,78 @@
|
||||
//
|
||||
// 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, animateDuration:Double = 0.5) {
|
||||
self.topAnchor.constraint(equalTo: parent.topAnchor).isActive = true
|
||||
self.leadingAnchor.constraint(equalTo: parent.leadingAnchor).isActive = true
|
||||
self.bottomAnchor.constraint(equalTo: parent.bottomAnchor).isActive = true
|
||||
self.trailingAnchor.constraint(equalTo: parent.trailingAnchor).isActive = true
|
||||
UIView.animate(withDuration: animateDuration) {
|
||||
parent.layoutIfNeeded()
|
||||
}
|
||||
}
|
||||
|
||||
func fillToParent(animateDuration:Double = 0.5) {
|
||||
if let parent = self.superview{
|
||||
self.topAnchor.constraint(equalTo: parent.topAnchor).isActive = true
|
||||
self.leadingAnchor.constraint(equalTo: parent.leadingAnchor).isActive = true
|
||||
self.bottomAnchor.constraint(equalTo: parent.bottomAnchor).isActive = true
|
||||
self.trailingAnchor.constraint(equalTo: parent.trailingAnchor).isActive = true
|
||||
UIView.animate(withDuration: animateDuration) {
|
||||
parent.layoutIfNeeded()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func fillInTo(view:UIView) {
|
||||
view.addSubview(self)
|
||||
fillToParent()
|
||||
}
|
||||
}
|
||||
|
||||
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.backgroundColor = UIColor.black
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,371 @@
|
||||
import 'package:doctor_app_flutter/config/config.dart';
|
||||
import 'package:doctor_app_flutter/config/size_config.dart';
|
||||
import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
|
||||
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
|
||||
import 'package:doctor_app_flutter/util/date-utils.dart';
|
||||
import 'package:doctor_app_flutter/util/helpers.dart';
|
||||
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
|
||||
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hexcolor/hexcolor.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
|
||||
class PatientProfileHeaderNewDesignAppBar extends StatelessWidget
|
||||
with PreferredSizeWidget {
|
||||
final PatiantInformtion patient;
|
||||
final String patientType;
|
||||
final String arrivalType;
|
||||
final double height;
|
||||
final bool isInpatient;
|
||||
final bool isDischargedPatient;
|
||||
final bool isFromLiveCare;
|
||||
|
||||
PatientProfileHeaderNewDesignAppBar(
|
||||
this.patient, this.patientType, this.arrivalType, {this.height = 0.0, this.isInpatient=false, this.isDischargedPatient=false, this.isFromLiveCare = false});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
int gender = 1;
|
||||
if (patient.patientDetails != null) {
|
||||
gender = patient.patientDetails.gender;
|
||||
} else {
|
||||
gender = patient.gender;
|
||||
}
|
||||
return Container(
|
||||
padding: EdgeInsets.only(
|
||||
left: 0,
|
||||
right: 5,
|
||||
bottom: 5,
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
),
|
||||
height: height == 0 ? isInpatient? 215:200 : height,
|
||||
child: Container(
|
||||
padding: EdgeInsets.only(left: 10, right: 10, bottom: 10),
|
||||
margin: EdgeInsets.only(top: 50),
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
padding: EdgeInsets.only(left: 12.0),
|
||||
child: Row(children: [
|
||||
IconButton(
|
||||
icon: Icon(Icons.arrow_back_ios),
|
||||
color: Colors.black, //Colors.black,
|
||||
onPressed: () => Navigator.pop(context),
|
||||
),
|
||||
Expanded(
|
||||
child: AppText(
|
||||
patient.firstName != null
|
||||
? (Helpers.capitalize(patient.firstName) +
|
||||
" " +
|
||||
Helpers.capitalize(patient.lastName))
|
||||
: Helpers.capitalize(patient.fullName??patient.patientDetails.fullName),
|
||||
fontSize: SizeConfig.textMultiplier * 1.8,
|
||||
fontWeight: FontWeight.bold,
|
||||
fontFamily: 'Poppins',
|
||||
),
|
||||
),
|
||||
gender == 1
|
||||
? Icon(
|
||||
DoctorApp.male_2,
|
||||
color: Colors.blue,
|
||||
)
|
||||
: Icon(
|
||||
DoctorApp.female_1,
|
||||
color: Colors.pink,
|
||||
),
|
||||
Container(
|
||||
margin: EdgeInsets.symmetric(horizontal: 4),
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
launch("tel://" + patient.mobileNumber);
|
||||
},
|
||||
child: Icon(
|
||||
Icons.phone,
|
||||
color: Colors.black87,
|
||||
),
|
||||
),
|
||||
),
|
||||
]),
|
||||
),
|
||||
Row(children: [
|
||||
Padding(
|
||||
padding: EdgeInsets.only(left: 12.0),
|
||||
child: Container(
|
||||
width: 60,
|
||||
height: 60,
|
||||
child: Image.asset(
|
||||
gender == 1
|
||||
? 'assets/images/male_avatar.png'
|
||||
: 'assets/images/female_avatar.png',
|
||||
fit: BoxFit.cover,
|
||||
),
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: 10,
|
||||
),
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
SERVICES_PATIANT2[int.parse(patientType)] ==
|
||||
"patientArrivalList"
|
||||
? Container(
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
patient.patientStatusType == 43
|
||||
? AppText(
|
||||
TranslationBase.of(context).arrivedP,
|
||||
color: Colors.green,
|
||||
fontWeight: FontWeight.bold,
|
||||
fontFamily: 'Poppins',
|
||||
fontSize: 12,
|
||||
)
|
||||
: AppText(
|
||||
TranslationBase.of(context).notArrived,
|
||||
color: Colors.red[800],
|
||||
fontWeight: FontWeight.bold,
|
||||
fontFamily: 'Poppins',
|
||||
fontSize: 12,
|
||||
),
|
||||
arrivalType == '1'|| patient.arrivedOn == null
|
||||
? AppText(
|
||||
patient.startTime != null
|
||||
? patient.startTime
|
||||
: '',
|
||||
fontFamily: 'Poppins',
|
||||
fontWeight: FontWeight.w600,
|
||||
)
|
||||
: AppText(
|
||||
patient.arrivedOn != null
|
||||
? AppDateUtils.convertStringToDateFormat(
|
||||
patient.arrivedOn,
|
||||
'MM-dd-yyyy HH:mm')
|
||||
: '',
|
||||
fontFamily: 'Poppins',
|
||||
fontWeight: FontWeight.w600,
|
||||
)
|
||||
],
|
||||
))
|
||||
: SizedBox(),
|
||||
if (SERVICES_PATIANT2[int.parse(patientType)] ==
|
||||
"List_MyOutPatient" && !isFromLiveCare)
|
||||
Container(
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
AppText(
|
||||
TranslationBase.of(context).appointmentDate +
|
||||
" : ",
|
||||
fontSize: 14,
|
||||
),
|
||||
patient.startTime != null
|
||||
? Container(
|
||||
height: 15,
|
||||
width: 60,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(25),
|
||||
color: HexColor("#20A169"),
|
||||
),
|
||||
child: AppText(
|
||||
patient.startTime??"",
|
||||
color: Colors.white,
|
||||
fontSize: 1.5 * SizeConfig.textMultiplier,
|
||||
textAlign: TextAlign.center,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
)
|
||||
: SizedBox(),
|
||||
SizedBox(
|
||||
width: 3.5,
|
||||
),
|
||||
Container(
|
||||
child: AppText(
|
||||
convertDateFormat2(
|
||||
patient.appointmentDate ?? ''),
|
||||
fontSize: 1.5 * SizeConfig.textMultiplier,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
height: 0.5,
|
||||
)
|
||||
],
|
||||
),
|
||||
margin: EdgeInsets.only(
|
||||
top: 8,
|
||||
),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
RichText(
|
||||
text: TextSpan(
|
||||
style: TextStyle(
|
||||
fontSize: 1.6 * SizeConfig.textMultiplier,
|
||||
color: Colors.black),
|
||||
children: <TextSpan>[
|
||||
new TextSpan(
|
||||
text: TranslationBase.of(context).fileNumber,
|
||||
style: TextStyle(
|
||||
fontSize: 12, fontFamily: 'Poppins')),
|
||||
new TextSpan(
|
||||
text: patient.patientId.toString(),
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w700,
|
||||
fontFamily: 'Poppins',
|
||||
fontSize: 14)),
|
||||
],
|
||||
),
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
AppText(
|
||||
patient.nationalityName ?? patient.nationality?? patient.nationalityId ?? '',
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 12,
|
||||
),
|
||||
patient.nationalityFlagURL != null
|
||||
? ClipRRect(
|
||||
borderRadius: BorderRadius.circular(20.0),
|
||||
child: Image.network(
|
||||
patient.nationalityFlagURL,
|
||||
height: 25,
|
||||
width: 30,
|
||||
errorBuilder: (BuildContext context,
|
||||
Object exception,
|
||||
StackTrace stackTrace) {
|
||||
return Text('No Image');
|
||||
},
|
||||
))
|
||||
: SizedBox()
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
Container(
|
||||
child: RichText(
|
||||
text: new TextSpan(
|
||||
style: new TextStyle(
|
||||
fontSize: 1.6 * SizeConfig.textMultiplier,
|
||||
color: Colors.black,
|
||||
fontFamily: 'Poppins',
|
||||
),
|
||||
children: <TextSpan>[
|
||||
new TextSpan(
|
||||
text: TranslationBase.of(context).age+ " : ",
|
||||
style: TextStyle(fontSize: 14)),
|
||||
new TextSpan(
|
||||
text:
|
||||
"${AppDateUtils.getAgeByBirthday(patient.patientDetails != null ? patient.patientDetails.dateofBirth??"" : patient.dateofBirth??"", context,isServerFormat: !isFromLiveCare)}",
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w700, fontSize: 14)),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
if(isInpatient)
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
child: RichText(
|
||||
text: new TextSpan(
|
||||
style: new TextStyle(
|
||||
fontSize:
|
||||
2.0 * SizeConfig.textMultiplier,
|
||||
color: Colors.black,
|
||||
fontFamily: 'Poppins',
|
||||
),
|
||||
children: <TextSpan>[
|
||||
new TextSpan(
|
||||
text: patient.admissionDate == null
|
||||
? ""
|
||||
: TranslationBase.of(context)
|
||||
.admissionDate +
|
||||
" : ",
|
||||
style: TextStyle(fontSize: 14)),
|
||||
new TextSpan(
|
||||
text: patient.admissionDate == null
|
||||
? ""
|
||||
: "${AppDateUtils.convertDateFromServerFormat(patient.admissionDate.toString(), 'yyyy-MM-dd')}",
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w700,
|
||||
fontSize: 15)),
|
||||
]))),
|
||||
if (patient.admissionDate != null)
|
||||
Row(
|
||||
children: [
|
||||
AppText(
|
||||
"${TranslationBase.of(context).numOfDays}: ",
|
||||
fontSize: 15,
|
||||
),
|
||||
if(isDischargedPatient && patient.dischargeDate!=null)
|
||||
AppText(
|
||||
"${AppDateUtils.getDateTimeFromServerFormat(patient.dischargeDate).difference(AppDateUtils.getDateTimeFromServerFormat(patient.admissionDate)).inDays + 1}",
|
||||
fontSize: 15,
|
||||
fontWeight: FontWeight.w700)
|
||||
else
|
||||
AppText(
|
||||
"${DateTime.now().difference(AppDateUtils.getDateTimeFromServerFormat(patient.admissionDate)).inDays + 1}",
|
||||
fontSize: 15,
|
||||
fontWeight: FontWeight.w700),
|
||||
],
|
||||
),
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
]),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
convertDateFormat2(String str) {
|
||||
String newDate;
|
||||
const start = "/Date(";
|
||||
if (str.isNotEmpty) {
|
||||
const end = "+0300)";
|
||||
|
||||
final startIndex = str.indexOf(start);
|
||||
final endIndex = str.indexOf(end, startIndex + start.length);
|
||||
|
||||
var date = new DateTime.fromMillisecondsSinceEpoch(
|
||||
int.parse(str.substring(startIndex + start.length, endIndex)));
|
||||
newDate = date.year.toString() +
|
||||
"/" +
|
||||
date.month.toString().padLeft(2, '0') +
|
||||
"/" +
|
||||
date.day.toString().padLeft(2, '0');
|
||||
}
|
||||
|
||||
return newDate??'';
|
||||
}
|
||||
|
||||
isToday(date) {
|
||||
DateTime tempDate = new DateFormat("yyyy-MM-dd").parse(date);
|
||||
return DateFormat("yyyy-MM-dd").format(tempDate) ==
|
||||
DateFormat("yyyy-MM-dd").format(DateTime.now());
|
||||
}
|
||||
|
||||
myBoxDecoration() {
|
||||
return BoxDecoration(
|
||||
border: Border(
|
||||
top: BorderSide(
|
||||
color: Colors.green,
|
||||
width: 5,
|
||||
),
|
||||
),
|
||||
borderRadius: BorderRadius.circular(10));
|
||||
}
|
||||
|
||||
@override
|
||||
Size get preferredSize => Size(double.maxFinite, 200);
|
||||
}
|
||||