no message

videocall_popup
Zohaib Iqbal Kambrani 5 years ago
parent 63526113f4
commit 1b4988e5f0

@ -27,6 +27,8 @@
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"> shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<MacroExpansion> <MacroExpansion>
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
@ -36,8 +38,8 @@
ReferencedContainer = "container:Runner.xcodeproj"> ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference> </BuildableReference>
</MacroExpansion> </MacroExpansion>
<Testables> <AdditionalOptions>
</Testables> </AdditionalOptions>
</TestAction> </TestAction>
<LaunchAction <LaunchAction
buildConfiguration = "Debug" buildConfiguration = "Debug"
@ -59,6 +61,8 @@
ReferencedContainer = "container:Runner.xcodeproj"> ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference> </BuildableReference>
</BuildableProductRunnable> </BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction> </LaunchAction>
<ProfileAction <ProfileAction
buildConfiguration = "Profile" buildConfiguration = "Profile"

@ -171,8 +171,13 @@
<constraint firstItem="lar-xK-rhR" firstAttribute="width" secondItem="lar-xK-rhR" secondAttribute="height" multiplier="1:1" id="R46-j0-zPf"/> <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="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 firstItem="N2h-FX-kF5" firstAttribute="height" secondItem="NUO-2p-pzL" secondAttribute="height" id="o4R-49-iMe"/>
<constraint firstAttribute="height" priority="900" constant="30" id="y90-hA-p5Z"/> <constraint firstAttribute="height" constant="30" id="y90-hA-p5Z"/>
</constraints> </constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="y90-hA-p5Z"/>
</mask>
</variation>
</stackView> </stackView>
<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="AoF-Up-Yu5" userLabel="hangUpButton">
<rect key="frame" x="363" y="15" width="50" height="50"/> <rect key="frame" x="363" y="15" width="50" height="50"/>
@ -185,10 +190,12 @@
</connections> </connections>
</button> </button>
</subviews> </subviews>
<color key="backgroundColor" red="0.18431372549019609" green="0.1764705882352941" blue="0.16470588235294117" alpha="0.69999999999999996" colorSpace="custom" customColorSpace="displayP3"/> <color key="backgroundColor" red="0.18431372549019609" green="0.1764705882352941" blue="0.16470588235294117" alpha="0.5" colorSpace="custom" customColorSpace="displayP3"/>
<constraints> <constraints>
<constraint firstItem="r9w-8l-Zxj" firstAttribute="top" secondItem="sK0-tB-H9u" secondAttribute="top" constant="15" id="00C-1i-sGc"/> <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="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 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 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 firstItem="AoF-Up-Yu5" firstAttribute="top" secondItem="r9w-8l-Zxj" secondAttribute="top" id="H4s-Y8-HAI"/>
@ -200,6 +207,21 @@
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="2nj-Va-L7c" userLabel="TopBar"> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="2nj-Va-L7c" userLabel="TopBar">
<rect key="frame" x="0.0" y="0.0" width="428" height="100"/> <rect key="frame" x="0.0" y="0.0" width="428" height="100"/>
<subviews> <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="25" id="dyc-7x-bTk"/>
<constraint firstAttribute="width" constant="25" id="tYx-Ul-0Pf"/>
</constraints>
<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="hideVideoBtnTapped:" destination="t2c-G5-7AE" eventType="touchUpInside" id="2mC-ry-Lis"/>
</connections>
</button>
<stackView opaque="NO" contentMode="scaleToFill" alignment="center" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="bvC-Fa-s3m"> <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"/> <rect key="frame" x="15" y="50" width="398" height="30"/>
<subviews> <subviews>
@ -209,22 +231,11 @@
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/> <nil key="highlightedColor"/>
</label> </label>
<button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="n8H-om-4LV">
<rect key="frame" x="333" y="-21" width="40" height="72"/>
<constraints>
<constraint firstAttribute="width" constant="40" id="tYx-Ul-0Pf"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="60"/>
<state key="normal" image="hide_video_icon"/>
<connections>
<action selector="hideVideoBtnTapped:" destination="t2c-G5-7AE" eventType="touchUpInside" id="2mC-ry-Lis"/>
</connections>
</button>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8Xn-w6-Mox"> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8Xn-w6-Mox">
<rect key="frame" x="338" y="3" width="60" height="24"/> <rect key="frame" x="338" y="3" width="60" height="24"/>
<subviews> <subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="10:30" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Btq-Ll-BPH"> <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="12.666666666666686" y="5.0000000000000009" width="34.666666666666664" height="14.333333333333336"/> <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"/> <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="12"/> <fontDescription key="fontDescription" type="boldSystem" pointSize="12"/>
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
@ -250,11 +261,13 @@
<color key="backgroundColor" red="0.18431372549019609" green="0.1764705882352941" blue="0.16470588235294117" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="displayP3"/> <color key="backgroundColor" red="0.18431372549019609" green="0.1764705882352941" blue="0.16470588235294117" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="displayP3"/>
<constraints> <constraints>
<constraint firstAttribute="height" constant="100" id="6eP-Zl-97q"/> <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="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 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 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="trailing" secondItem="bvC-Fa-s3m" secondAttribute="trailing" constant="15" id="oq6-Oi-i7g"/>
<constraint firstAttribute="height" priority="900" constant="20" id="s8H-wK-WPB"/> <constraint firstAttribute="height" priority="900" constant="25" id="s8H-wK-WPB"/>
</constraints> </constraints>
</view> </view>
</subviews> </subviews>
@ -281,6 +294,7 @@
</view> </view>
<navigationItem key="navigationItem" id="s5b-6P-Hwj"/> <navigationItem key="navigationItem" id="s5b-6P-Hwj"/>
<connections> <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="controlButtons" destination="sK0-tB-H9u" id="mDK-cq-oQz"/>
<outlet property="draggableBoundryDefiner" destination="O5s-CJ-RFv" id="npi-81-C23"/> <outlet property="draggableBoundryDefiner" destination="O5s-CJ-RFv" id="npi-81-C23"/>
<outlet property="hideVideoBtn" destination="n8H-om-4LV" id="tTp-Ep-XKS"/> <outlet property="hideVideoBtn" destination="n8H-om-4LV" id="tTp-Ep-XKS"/>
@ -288,18 +302,24 @@
<outlet property="lblRemoteUsername" destination="Zct-62-YE6" id="OQ0-mf-mvc"/> <outlet property="lblRemoteUsername" destination="Zct-62-YE6" id="OQ0-mf-mvc"/>
<outlet property="localVideo" destination="0ZP-s2-kM5" id="C68-k7-h5j"/> <outlet property="localVideo" destination="0ZP-s2-kM5" id="C68-k7-h5j"/>
<outlet property="localVideoMutedBg" destination="6y1-an-W7F" id="5FF-Ak-Vxb"/> <outlet property="localVideoMutedBg" destination="6y1-an-W7F" id="5FF-Ak-Vxb"/>
<outlet property="micMuteBtn" destination="N2h-FX-kF5" id="AVo-sY-x2z"/> <outlet property="micMuteBtn" destination="N2h-FX-kF5" id="zgK-g1-Ndr"/>
<outlet property="remoteVideo" destination="eOT-Jr-GUl" id="VKE-el-YGR"/> <outlet property="remoteVideo" destination="eOT-Jr-GUl" id="VKE-el-YGR"/>
<outlet property="remoteVideoMutedIndicator" destination="CL1-2v-m1L" id="aJ0-QC-m9Y"/> <outlet property="remoteVideoMutedIndicator" destination="CL1-2v-m1L" id="aJ0-QC-m9Y"/>
<outlet property="videoMuteBtn" destination="NUO-2p-pzL" id="XCc-nu-N8P"/> <outlet property="videoMuteBtn" destination="NUO-2p-pzL" id="XCc-nu-N8P"/>
<outletCollection property="maximisedConstraint" destination="00C-1i-sGc" collectionClass="NSMutableArray" id="22d-C9-unV"/> <outletCollection property="minimizeConstraint" destination="s8H-wK-WPB" collectionClass="NSMutableArray" id="XTM-jR-Cos"/>
<outletCollection property="maximisedConstraint" destination="sK0-tB-H9u" collectionClass="NSMutableArray" id="bbn-c9-Vz9"/> <outletCollection property="minimizeConstraint" destination="HgY-Dw-B9R" collectionClass="NSMutableArray" id="Fi8-YX-9iQ"/>
<outletCollection property="maximisedConstraint" destination="3L0-3h-Bxg" collectionClass="NSMutableArray" id="aSR-qc-kmn"/> <outletCollection property="minimizeConstraint" destination="Ft5-cy-2d0" collectionClass="NSMutableArray" id="Ze3-H8-gj4"/>
<outletCollection property="maximisedConstraint" destination="6eP-Zl-97q" collectionClass="NSMutableArray" id="5qG-eU-f1V"/> <outletCollection property="minimizeConstraint" destination="n0r-vM-wKh" collectionClass="NSMutableArray" id="IaQ-TS-ng8"/>
<outletCollection property="maximisedConstraint" destination="2nj-Va-L7c" collectionClass="NSMutableArray" id="sSt-7N-End"/> <outletCollection property="maximisedConstraint" destination="G9u-kw-mVz" collectionClass="NSMutableArray" id="TaK-5m-byK"/>
<outletCollection property="minimizeConstraint" destination="sK0-tB-H9u" collectionClass="NSMutableArray" id="fVM-C7-UAN"/> <outletCollection property="maximisedConstraint" destination="00C-1i-sGc" collectionClass="NSMutableArray" id="vmx-rp-JZI"/>
<outletCollection property="minimizeConstraint" destination="sK0-tB-H9u" collectionClass="NSMutableArray" id="p6x-N9-60o"/> <outletCollection property="maximisedConstraint" destination="PWn-Sb-O8B" collectionClass="NSMutableArray" id="pK4-yA-36p"/>
<outletCollection property="minimizeConstraint" destination="y90-hA-p5Z" collectionClass="NSMutableArray" id="97Z-hF-vZa"/> <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> </connections>
</viewController> </viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="x33-EE-6Ak" sceneMemberID="firstResponder"/> <placeholder placeholderIdentifier="IBFirstResponder" id="x33-EE-6Ak" sceneMemberID="firstResponder"/>

@ -27,9 +27,10 @@ class MainAppViewController: FlutterViewController{
super.viewDidAppear(animated) super.viewDidAppear(animated)
} }
var videoCallChannel:FlutterMethodChannel?
private func initFlutterBridge(){ private func initFlutterBridge(){
let videoCallChannel = FlutterMethodChannel(name: "Dr.cloudSolution/videoCall", binaryMessenger: binaryMessenger) videoCallChannel = FlutterMethodChannel(name: "Dr.cloudSolution/videoCall", binaryMessenger: binaryMessenger)
videoCallChannel.setMethodCallHandler({ videoCallChannel?.setMethodCallHandler({
(call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in (call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
switch call.method { switch call.method {
case "openVideoCall": case "openVideoCall":
@ -86,6 +87,10 @@ extension MainAppViewController : ICallProtocol{
} }
videoCallViewController.onHide = { videoCallViewController.onHide = {
self.videoCallContainer.isHidden = true self.videoCallContainer.isHidden = true
self.videoCallChannel?.invokeMethod("onHide", arguments: nil)
}
videoCallViewController.onVideoDuration = { duration in
self.videoCallChannel?.invokeMethod("onVideoDuration", arguments: duration)
} }
videoCallViewController.onClose = videoCallClosed videoCallViewController.onClose = videoCallClosed
videoCallViewController.callBack = self videoCallViewController.callBack = self

@ -36,6 +36,7 @@ class VideoCallViewController: UIViewController {
var onMinimize:((Bool)->Void)? = nil var onMinimize:((Bool)->Void)? = nil
var onHide:(()->Void)? = nil var onHide:(()->Void)? = nil
var onVideoDuration:((String)->Void)? = nil
var onClose:(()->Void)? = nil var onClose:(()->Void)? = nil
@ -44,6 +45,7 @@ class VideoCallViewController: UIViewController {
// Bottom Actions // Bottom Actions
@IBOutlet weak var videoMuteBtn: UIButton! @IBOutlet weak var videoMuteBtn: UIButton!
@IBOutlet weak var micMuteBtn: UIButton! @IBOutlet weak var micMuteBtn: UIButton!
@IBOutlet weak var camSwitchBtn: UIButton!
@IBOutlet var minimizeConstraint: [NSLayoutConstraint]! @IBOutlet var minimizeConstraint: [NSLayoutConstraint]!
@IBOutlet var maximisedConstraint: [NSLayoutConstraint]! @IBOutlet var maximisedConstraint: [NSLayoutConstraint]!
@ -109,6 +111,10 @@ class VideoCallViewController: UIViewController {
callBack?.sessionDone(res:["callResponse":"CallEnd"]) callBack?.sessionDone(res:["callResponse":"CallEnd"])
sessionDisconnect() sessionDisconnect()
} }
@IBAction func hideVideoBtnTapped(_ sender: Any) {
onHide?()
}
var minimized = false var minimized = false
@IBAction func onMinimize(_ sender: UIButton) { @IBAction func onMinimize(_ sender: UIButton) {
@ -122,11 +128,13 @@ class VideoCallViewController: UIViewController {
lblRemoteUsername.isHidden = minimized lblRemoteUsername.isHidden = minimized
hideVideoBtn.isHidden = !minimized hideVideoBtn.isHidden = !minimized
lblCallDuration.superview?.isHidden = !hideVideoBtn.isHidden
let min_ = minimized let min_ = minimized
UIView.animate(withDuration: 0.5) { UIView.animate(withDuration: 0.5) {
self.videoMuteBtn.isHidden = min_ self.videoMuteBtn.isHidden = min_
self.micMuteBtn.isHidden = min_ self.micMuteBtn.isHidden = min_
self.camSwitchBtn.isHidden = min_
let localVdoSize = self.localVideo.bounds.size let localVdoSize = self.localVideo.bounds.size
let remoteVdoSize = self.remoteVideo.bounds.size let remoteVdoSize = self.remoteVideo.bounds.size
@ -137,8 +145,20 @@ class VideoCallViewController: UIViewController {
} }
} }
@IBAction func hideVideoBtnTapped(_ sender: Any) { var durationTimer:Timer?;
onHide?() func startUpdateCallDuration(){
var seconds = 0
durationTimer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { timer in
seconds = seconds+1
let durationSegments = (seconds / 3600, (seconds % 3600) / 60, (seconds % 3600) % 60)
let hours = String(format: "%02d", durationSegments.0)
let mins = String(format: "%02d", durationSegments.1)
let secs = String(format: "%02d", durationSegments.2)
let durationString = "\(mins):\(secs)"
self.lblCallDuration.text = durationString
self.onVideoDuration?(durationString)
}
} }
func start(params:VideoCallRequestParameters){ func start(params:VideoCallRequestParameters){
@ -410,8 +430,11 @@ extension VideoCallViewController: OTSessionDelegate {
guard let subscriberView = subscriber.view else { guard let subscriberView = subscriber.view else {
return return
} }
subscriberView.frame = CGRect(x: 0, y: 0, width: remoteVideo.bounds.width, height: remoteVideo.bounds.height) subscriberView.frame = CGRect(x: 0, y: 0, width: remoteVideo.bounds.width, height: remoteVideo.bounds.height)
remoteVideo.addSubview(subscriberView) remoteVideo.addSubview(subscriberView)
startUpdateCallDuration()
} }
func setupSubscribe(_ stream: OTStream?) { func setupSubscribe(_ stream: OTStream?) {
@ -474,7 +497,7 @@ extension VideoCallViewController: OTSubscriberDelegate {
print("The subscriber failed to connect to the stream.") print("The subscriber failed to connect to the stream.")
} }
@objc func hideControlButtons() { @objc func hideControlButtons() {
controlButtons.isHidden = true // controlButtons.isHidden = true
} }
} }

@ -1,3 +1,5 @@
import 'dart:async';
import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/core/enum/viewstate.dart'; import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/viewModel/LiveCarePatientViewModel.dart'; import 'package:doctor_app_flutter/core/viewModel/LiveCarePatientViewModel.dart';
@ -46,10 +48,15 @@ class _PatientProfileScreenState extends State<PatientProfileScreen>
TabController _tabController; TabController _tabController;
int index = 0; int index = 0;
int _activeTab = 0; int _activeTab = 0;
StreamController<String> videoCallDurationStreamController;
Stream<String> videoCallDurationStream = (() async*{})();
@override @override
void initState() { void initState() {
_tabController = TabController(length: 2, vsync: this); _tabController = TabController(length: 2, vsync: this);
super.initState(); super.initState();
videoCallDurationStreamController = StreamController();
videoCallDurationStream = videoCallDurationStreamController.stream;
} }
@override @override
@ -103,16 +110,20 @@ class _PatientProfileScreenState extends State<PatientProfileScreen>
Column( Column(
children: [ children: [
PatientProfileHeaderNewDesignAppBar( PatientProfileHeaderNewDesignAppBar(
patient, arrivalType ?? '0', patientType, patient, arrivalType ?? '0', patientType,
isInpatient: isInpatient, videoCallDurationStream: videoCallDurationStream,
isFromLiveCare: isFromLiveCare, onVideoDurationTap: (){
height: (patient.patientStatusType != null && VideoChannel.show();
patient.patientStatusType == 43) },
? 210 isInpatient: isInpatient,
: isDischargedPatient isFromLiveCare: isFromLiveCare,
? 240 height: (patient.patientStatusType != null &&
: 0, patient.patientStatusType == 43)
isDischargedPatient: isDischargedPatient), ? 210
: isDischargedPatient
? 240
: 0,
isDischargedPatient: isDischargedPatient),
Container( Container(
height: !isSearchAndOut height: !isSearchAndOut
? isDischargedPatient ? isDischargedPatient
@ -311,6 +322,9 @@ class _PatientProfileScreenState extends State<PatientProfileScreen>
onFailure: (String error) { onFailure: (String error) {
DrAppToastMsg.showErrorToast(error); DrAppToastMsg.showErrorToast(error);
}, },
onVideoDuration: (duration){
videoCallDurationStreamController.sink.add(duration);
},
onCallEnd: () { onCallEnd: () {
var asd=""; var asd="";
// WidgetsBinding.instance.addPostFrameCallback((_) { // WidgetsBinding.instance.addPostFrameCallback((_) {

@ -4,15 +4,30 @@ import 'dart:io' show Platform;
import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/models/livecare/session_status_model.dart'; import 'package:doctor_app_flutter/models/livecare/session_status_model.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
class VideoChannel{ class VideoChannel{
/// channel name /// channel name
static const _channel = const MethodChannel("Dr.cloudSolution/videoCall"); static const _channel = const MethodChannel("Dr.cloudSolution/videoCall");
static openVideoCallScreen( static openVideoCallScreen({kApiKey, kSessionId, kToken, callDuration, warningDuration,int vcId,String tokenID,
{kApiKey, kSessionId, kToken, callDuration, warningDuration,int vcId,String tokenID,String generalId,int doctorId, Function() onCallEnd , Function(SessionStatusModel sessionStatusModel) onCallNotRespond ,Function(String error) onFailure}) async { String generalId,int doctorId, Function() onCallEnd ,
Function(SessionStatusModel sessionStatusModel) onCallNotRespond ,Function(String error) onFailure, VoidCallback onHide, Function(String) onVideoDuration}) async {
onHide = onHide ?? (){};
onVideoDuration = onVideoDuration ?? (v){};
var result; var result;
try { try {
_channel.setMethodCallHandler((call) {
if(call.method == 'onHide'){
onHide();
}else if(call.method == 'onVideoDuration'){
onVideoDuration(call.arguments);
}
return true as dynamic;
});
result = await _channel.invokeMethod( result = await _channel.invokeMethod(
'openVideoCall', 'openVideoCall',
{ {
@ -29,6 +44,7 @@ class VideoChannel{
); );
if(result['callResponse'] == 'CallEnd') { if(result['callResponse'] == 'CallEnd') {
onCallEnd(); onCallEnd();
onVideoDuration(null);
} }
else { else {
SessionStatusModel sessionStatusModel = SessionStatusModel.fromJson(Platform.isIOS ?result['sessionStatus'] :json.decode(result['sessionStatus'])); SessionStatusModel sessionStatusModel = SessionStatusModel.fromJson(Platform.isIOS ?result['sessionStatus'] :json.decode(result['sessionStatus']));
@ -40,6 +56,10 @@ class VideoChannel{
} }
} }
static show(){
_channel.invokeMethod("showVideo");
}
} }

@ -21,8 +21,11 @@ class PatientProfileHeaderNewDesignAppBar extends StatelessWidget
final bool isDischargedPatient; final bool isDischargedPatient;
final bool isFromLiveCare; final bool isFromLiveCare;
final Stream<String> videoCallDurationStream;
final VoidCallback onVideoDurationTap;
PatientProfileHeaderNewDesignAppBar( PatientProfileHeaderNewDesignAppBar(
this.patient, this.patientType, this.arrivalType, {this.height = 0.0, this.isInpatient=false, this.isDischargedPatient=false, this.isFromLiveCare = false}); this.patient, this.patientType, this.arrivalType, {this.height = 0.0, this.isInpatient=false, this.isDischargedPatient=false, this.isFromLiveCare = false, this.videoCallDurationStream, this.onVideoDurationTap});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -88,6 +91,25 @@ class PatientProfileHeaderNewDesignAppBar extends StatelessWidget
), ),
), ),
), ),
StreamBuilder(
stream: videoCallDurationStream,
builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
if(snapshot.hasData)
return InkWell(
onTap: (){
if(onVideoDurationTap != null)
onVideoDurationTap();
},
child: Container(
decoration: BoxDecoration(color: Colors.red, borderRadius: BorderRadius.circular(20)),
padding: EdgeInsets.symmetric(vertical: 2, horizontal: 10),
child: Text(snapshot.data, style: TextStyle(color: Colors.white),),
),
);
else
return Container();
},
),
]), ]),
), ),
Row(children: [ Row(children: [

Loading…
Cancel
Save