WebRtc Event Changes

development_amir
Aamir Muhammad 3 years ago
parent 691ee4ccbf
commit 65c380997e

@ -34,7 +34,7 @@ configurations.all {
} }
android { android {
compileSdkVersion 31 compileSdkVersion 33
sourceSets { sourceSets {
main.java.srcDirs += 'src/main/kotlin' main.java.srcDirs += 'src/main/kotlin'

@ -90,7 +90,7 @@
</intent-filter> </intent-filter>
</activity> </activity>
<receiver android:exported="true" android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver"> <receiver android:exported="true" tools:replace="android:exported" android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/> <action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED"/> <action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>

@ -11,7 +11,7 @@ class ToDoCountProviderModel with ChangeNotifier {
bool get isShowBadge => _isShowBadge; bool get isShowBadge => _isShowBadge;
void setState(int count, bool isShowBadge, String notifCount) { void setState(int count, bool isShowBadge, String notifCount) {
_count = count; _count = count;
_isShowBadge = isShowBadge; _isShowBadge = isShowBadge;
_notificationsCount = notifCount; _notificationsCount = notifCount;

@ -73,7 +73,6 @@ class LandingPage extends StatefulWidget {
class _LandingPageState extends State<LandingPage> with WidgetsBindingObserver { class _LandingPageState extends State<LandingPage> with WidgetsBindingObserver {
var authProvider = new AuthProvider(); var authProvider = new AuthProvider();
int currentTab = 0; int currentTab = 0;
PageController pageController; PageController pageController;
ProjectViewModel projectViewModel; ProjectViewModel projectViewModel;
@ -451,7 +450,6 @@ class _LandingPageState extends State<LandingPage> with WidgetsBindingObserver {
} }
dummyCall() async { dummyCall() async {
// final server = await SelectionDialog( // final server = await SelectionDialog(
// context, // context,
// title: "Select Server", // title: "Select Server",
@ -485,6 +483,7 @@ class _LandingPageState extends State<LandingPage> with WidgetsBindingObserver {
"picture": "video", "picture": "video",
"is_call": "true", "is_call": "true",
"is_webrtc": "true", "is_webrtc": "true",
// "server": "https://192.168.8.163:8086",
"server": "https://livecareturn.hmg.com:8086", "server": "https://livecareturn.hmg.com:8086",
}; };

@ -18,7 +18,6 @@ import 'package:just_audio/just_audio.dart';
import '../../config/config.dart'; import '../../config/config.dart';
import '../videocall-webrtc-rnd/utils/device_info.dart'; import '../videocall-webrtc-rnd/utils/device_info.dart';
class IncomingCall extends StatefulWidget { class IncomingCall extends StatefulWidget {
IncomingCallData incomingCallData; IncomingCallData incomingCallData;
@ -29,7 +28,6 @@ class IncomingCall extends StatefulWidget {
} }
class _IncomingCallState extends State<IncomingCall> with SingleTickerProviderStateMixin { class _IncomingCallState extends State<IncomingCall> with SingleTickerProviderStateMixin {
AnimationController _animationController; AnimationController _animationController;
bool openCallInWeb = true; bool openCallInWeb = true;
@ -44,9 +42,10 @@ class _IncomingCallState extends State<IncomingCall> with SingleTickerProviderSt
@override @override
void initState() { void initState() {
_animationController = AnimationController(vsync: this, duration: Duration(milliseconds: 500)); _animationController = AnimationController(vsync: this, duration: Duration(milliseconds: 500));
isCameraReady = false; //_runAnimation();
connectSignaling();
WidgetsBinding.instance.addPostFrameCallback((_) =>_runAnimation());
WidgetsBinding.instance.addPostFrameCallback((_) => _runAnimation());
super.initState(); super.initState();
} }
@ -62,19 +61,13 @@ class _IncomingCallState extends State<IncomingCall> with SingleTickerProviderSt
super.dispose(); super.dispose();
} }
Future<void> future() async {
await connectSignaling();
// await _initializeControllerFuture();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return AppScaffold( return AppScaffold(
isShowAppBar: false, isShowAppBar: false,
isShowDecPage: false, isShowDecPage: false,
body: FutureBuilder<void>( body: FutureBuilder<void>(
future: future(), future: _initializeControllerFuture,
builder: (context, snapshot) { builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) { if (snapshot.connectionState == ConnectionState.done) {
return Stack( return Stack(
@ -217,21 +210,15 @@ class _IncomingCallState extends State<IncomingCall> with SingleTickerProviderSt
} }
void _runAnimation() async { void _runAnimation() async {
final cameras = await availableCameras(); final cameras = await availableCameras();
final firstCamera = cameras[1]; final firstCamera = cameras[1];
_controller = CameraController( _controller = CameraController(
// Get a specific camera from the list of available cameras.
firstCamera, firstCamera,
// Define the resolution to use.
ResolutionPreset.medium, ResolutionPreset.medium,
); );
_initializeControllerFuture = _controller.initialize(); _initializeControllerFuture = _controller.initialize();
setState(() {});
// setState(() {
// isCameraReady = true;
// });
setAudioFile(); setAudioFile();
for (int i = 0; i < 100; i++) { for (int i = 0; i < 100; i++) {
await _animationController.forward(); await _animationController.forward();
@ -246,34 +233,27 @@ class _IncomingCallState extends State<IncomingCall> with SingleTickerProviderSt
await _controller.dispose(); await _controller.dispose();
changeCallStatusAPI(4); changeCallStatusAPI(4);
if (_session != null && _signaling != null) {
if(_session != null && _signaling != null){
await Navigator.of(context).pushReplacement( await Navigator.of(context).pushReplacement(
MaterialPageRoute( MaterialPageRoute(
// fullscreenDialog: true, // fullscreenDialog: true,
builder: (BuildContext context) { builder: (BuildContext context) {
if(widget.incomingCallData.isWebRTC == "true"){ if (widget.incomingCallData.isWebRTC == "true") {
return StartVideoCall(signaling: _signaling, session: _session); return StartVideoCall(signaling: _signaling, session: _session);
}else{ } else {
return OpenTokConnectCallPage( return OpenTokConnectCallPage(apiKey: OPENTOK_API_KEY, sessionId: widget.incomingCallData.sessionId, token: widget.incomingCallData.token);
apiKey: OPENTOK_API_KEY,
sessionId: widget.incomingCallData.sessionId,
token: widget.incomingCallData.token
);
} }
// return VideoCallWebPage(receiverId: widget.incomingCallData.receiverID, callerId: widget.incomingCallData.callerID); // Web WebRTC VideoCall // return VideoCallWebPage(receiverId: widget.incomingCallData.receiverID, callerId: widget.incomingCallData.callerID); // Web WebRTC VideoCall
// return CallHomePage(receiverId: widget.incomingCallData.receiverID, callerId: widget.incomingCallData.callerID); // App WebRTC VideoCall // return CallHomePage(receiverId: widget.incomingCallData.receiverID, callerId: widget.incomingCallData.callerID); // App WebRTC VideoCall
}, },
), ),
); );
}else{ } else {
// Invalid Params/Data // Invalid Params/Data
AppToast.showErrorToast(message: "Failed to establish connection with server"); AppToast.showErrorToast(message: "Failed to establish connection with server");
} }
} catch (err) { } catch (err) {
print(err); print(err);
await PlatformExceptionAlertDialog( await PlatformExceptionAlertDialog(
@ -284,8 +264,7 @@ class _IncomingCallState extends State<IncomingCall> with SingleTickerProviderSt
void changeCallStatusAPI(int sessionStatus) { void changeCallStatusAPI(int sessionStatus) {
LiveCareService service = new LiveCareService(); LiveCareService service = new LiveCareService();
service.endCallAPI(widget.incomingCallData.sessionId, sessionStatus, context).then((res) { service.endCallAPI(widget.incomingCallData.sessionId, sessionStatus, context).then((res) {}).catchError((err) {
}).catchError((err) {
print(err); print(err);
}); });
} }
@ -293,9 +272,11 @@ class _IncomingCallState extends State<IncomingCall> with SingleTickerProviderSt
void backToHome() async { void backToHome() async {
// final connected = await signaling.declineCall(widget.incomingCallData.callerID, widget.incomingCallData.receiverID); // final connected = await signaling.declineCall(widget.incomingCallData.callerID, widget.incomingCallData.receiverID);
LandingPage.isOpenCallPage = false; LandingPage.isOpenCallPage = false;
// _signaling
player.stop(); player.stop();
changeCallStatusAPI(3); changeCallStatusAPI(3);
_signaling.bye(_session, callRejected: true); _signaling.bye(_session, callRejected: true);
_signaling.callDisconnected(_session, callRejected: true);
Navigator.of(context).pop(); Navigator.of(context).pop();
} }
@ -318,30 +299,28 @@ class _IncomingCallState extends State<IncomingCall> with SingleTickerProviderSt
} }
} }
connectSignaling({@required bool iAmCaller = false}) async{ connectSignaling({@required bool iAmCaller = false}) async {
print("----------------- + Signaling Connection Started ---------------------------");
final caller = widget.incomingCallData.callerID; final caller = widget.incomingCallData.callerID;
final receiver = widget.incomingCallData.receiverID; final receiver = widget.incomingCallData.receiverID;
final host = widget.incomingCallData.server; final host = widget.incomingCallData.server;
final self_role = iAmCaller ? "Caller" : "Receiver"; final selfRole = iAmCaller ? "Caller" : "Receiver";
final self_id = iAmCaller ? caller : receiver; final selfId = iAmCaller ? caller : receiver;
final self_user = SocketUser(id: self_id, name: "$self_role-$self_id", userAgent: DeviceInfo.userAgent, moreInfo: {}); final selfUser = SocketUser(id: selfId, name: "$selfRole-$selfId", userAgent: DeviceInfo.userAgent, moreInfo: {});
final remote_role = !iAmCaller ? "Caller" : "Receiver"; final remoteRole = !iAmCaller ? "Caller" : "Receiver";
final remote_id = !iAmCaller ? caller : receiver; final remoteId = !iAmCaller ? caller : receiver;
final remote_user = SocketUser(id: remote_id, name: "$remote_role-$remote_id", userAgent: DeviceInfo.userAgent, moreInfo: {}); final remoteUser = SocketUser(id: remoteId, name: "$remoteRole-$remoteId", userAgent: DeviceInfo.userAgent, moreInfo: {});
final session_id = "$caller-$receiver"; final sessionId = "$caller-$receiver";
_session = SessionOneToOne(id: session_id, local_user: self_user, remote_user: remote_user); _session = SessionOneToOne(id: sessionId, local_user: selfUser, remote_user: remoteUser);
_signaling = Signaling(host, session: _session); _signaling = Signaling(host, session: _session);
await _signaling.connect(); await _signaling.connect();
if(_signaling.state == SignalingState.Open){ if (_signaling.state == SignalingState.Open) {
return; return;
} }
} }
} }

@ -147,7 +147,17 @@ class Signaling {
_send('bye', { _send('bye', {
'session_id': session.id, 'session_id': session.id,
'from': session.local_user.id, 'from': session.local_user.id,
'call_rejected' : callRejected // 'call_rejected' : callRejected
});
_closeSession(session);
}
void callDisconnected(SessionOneToOne session, {bool callRejected = false}) {
_send('patient_call_rejected', {
'session_id': session.id,
'to': session.remote_user.id,
'from': session.local_user.id,
// 'call_rejected' : callRejected
}); });
_closeSession(session); _closeSession(session);
} }
@ -256,7 +266,9 @@ class Signaling {
}, },
] ]
}; };
} catch (e) {} } catch (e) {
print("jsjhs" + e.toString());
}
} }
_socket?.onOpen = () { _socket?.onOpen = () {
@ -487,7 +499,6 @@ class Signaling {
}); });
await localStream?.dispose(); await localStream?.dispose();
localStream = null; localStream = null;
await session.pc?.close(); await session.pc?.close();
await session.dc?.close(); await session.dc?.close();
} }

@ -151,15 +151,16 @@ class StartVideoCallState extends State<StartVideoCall> {
}); });
} }
_switchCamera() { // _switchCamera() {
_signaling?.switchCamera(); // _signaling?.switchCamera();
} // }
//
_muteMic() { // _muteMic() {
_signaling?.muteMic(); // _signaling?.muteMic();
} // }
Function _onAudioEnable(){ Function _onAudioEnable(){
print("================= Audio Event Triggered ===================");
final audioTrack = localMediaStream.getAudioTracks()[0]; final audioTrack = localMediaStream.getAudioTracks()[0];
final micEnabled = audioTrack.enabled; final micEnabled = audioTrack.enabled;
localMediaStream.getAudioTracks()[0].enabled = !micEnabled; localMediaStream.getAudioTracks()[0].enabled = !micEnabled;
@ -169,6 +170,7 @@ class StartVideoCallState extends State<StartVideoCall> {
} }
Function _onVideoEnabled() { Function _onVideoEnabled() {
print("================= Video Event Triggered ===================");
final videoTrack = localMediaStream.getVideoTracks()[0]; final videoTrack = localMediaStream.getVideoTracks()[0];
bool videoEnabled = videoTrack.enabled; bool videoEnabled = videoTrack.enabled;
localMediaStream.getVideoTracks()[0].enabled = !videoEnabled; localMediaStream.getVideoTracks()[0].enabled = !videoEnabled;
@ -176,6 +178,7 @@ class StartVideoCallState extends State<StartVideoCall> {
} }
Function _onSwitchCamera() { Function _onSwitchCamera() {
print("================= Camera Switch Event Triggered ===================");
Helper.switchCamera(localMediaStream.getVideoTracks()[0]); Helper.switchCamera(localMediaStream.getVideoTracks()[0]);
} }
@ -197,6 +200,8 @@ class StartVideoCallState extends State<StartVideoCall> {
} }
Future<void> _onHangup({bool byRemote = false}) async { Future<void> _onHangup({bool byRemote = false}) async {
print("================= HangUp Event Triggered ===================");
print("================= $byRemote ===================");
if(byRemote){ if(byRemote){
Navigator.of(context).pop(); Navigator.of(context).pop();
}else{ }else{

@ -9,12 +9,8 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter_hms_gms_availability/flutter_hms_gms_availability.dart'; import 'package:flutter_hms_gms_availability/flutter_hms_gms_availability.dart';
import 'package:geolocator/geolocator.dart'; import 'package:geolocator/geolocator.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:huawei_location/location/fused_location_provider_client.dart'; import 'package:huawei_location/huawei_location.dart';
import 'package:huawei_location/location/location.dart';
import 'package:huawei_location/location/location_callback.dart';
import 'package:huawei_location/location/location_request.dart';
import 'package:huawei_location/location/location_settings_request.dart';
import 'package:huawei_location/permission/permission_handler.dart';
import 'package:permission_handler/permission_handler.dart'; import 'package:permission_handler/permission_handler.dart';
class LocationUtils { class LocationUtils {
@ -77,7 +73,8 @@ class LocationUtils {
LocationCallback _locationCallback; LocationCallback _locationCallback;
_getHMSCurrentLocation(Function(LatLng) callBack) async { _getHMSCurrentLocation(Function(LatLng) callBack) async {
PermissionHandler permissionHandler = PermissionHandler(); // PermissionHandler permissionHandler = PermissionHandler();
Permission permissionHandler;
int _locationUpdateCbId = 0; int _locationUpdateCbId = 0;
doIt() { doIt() {
@ -106,7 +103,8 @@ class LocationUtils {
}); });
} }
if (await permissionHandler.hasLocationPermission()) { // if (await permissionHandler.hasLocationPermission()) {
if (await permissionHandler.status.isGranted) {
doIt(); doIt();
} else { } else {
bool has = await requestPermissions(); bool has = await requestPermissions();

Loading…
Cancel
Save