diff --git a/android/app/build.gradle b/android/app/build.gradle index e5f46421..365e91ad 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -34,7 +34,7 @@ configurations.all { } android { - compileSdkVersion 31 + compileSdkVersion 33 sourceSets { main.java.srcDirs += 'src/main/kotlin' diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index ee04df20..73374285 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -90,7 +90,7 @@ - + diff --git a/lib/models/Appointments/toDoCountProviderModel.dart b/lib/models/Appointments/toDoCountProviderModel.dart index 3363471f..ef4e069c 100644 --- a/lib/models/Appointments/toDoCountProviderModel.dart +++ b/lib/models/Appointments/toDoCountProviderModel.dart @@ -11,7 +11,7 @@ class ToDoCountProviderModel with ChangeNotifier { bool get isShowBadge => _isShowBadge; - void setState(int count, bool isShowBadge, String notifCount) { + void setState(int count, bool isShowBadge, String notifCount) { _count = count; _isShowBadge = isShowBadge; _notificationsCount = notifCount; diff --git a/lib/pages/landing/landing_page.dart b/lib/pages/landing/landing_page.dart index f4da8487..e53c9201 100644 --- a/lib/pages/landing/landing_page.dart +++ b/lib/pages/landing/landing_page.dart @@ -73,7 +73,6 @@ class LandingPage extends StatefulWidget { class _LandingPageState extends State with WidgetsBindingObserver { var authProvider = new AuthProvider(); - int currentTab = 0; PageController pageController; ProjectViewModel projectViewModel; @@ -451,7 +450,6 @@ class _LandingPageState extends State with WidgetsBindingObserver { } dummyCall() async { - // final server = await SelectionDialog( // context, // title: "Select Server", @@ -485,6 +483,7 @@ class _LandingPageState extends State with WidgetsBindingObserver { "picture": "video", "is_call": "true", "is_webrtc": "true", + // "server": "https://192.168.8.163:8086", "server": "https://livecareturn.hmg.com:8086", }; diff --git a/lib/pages/livecare/incoming_call.dart b/lib/pages/livecare/incoming_call.dart index 923e32b0..ceffe061 100644 --- a/lib/pages/livecare/incoming_call.dart +++ b/lib/pages/livecare/incoming_call.dart @@ -18,7 +18,6 @@ import 'package:just_audio/just_audio.dart'; import '../../config/config.dart'; import '../videocall-webrtc-rnd/utils/device_info.dart'; - class IncomingCall extends StatefulWidget { IncomingCallData incomingCallData; @@ -29,7 +28,6 @@ class IncomingCall extends StatefulWidget { } class _IncomingCallState extends State with SingleTickerProviderStateMixin { - AnimationController _animationController; bool openCallInWeb = true; @@ -44,9 +42,10 @@ class _IncomingCallState extends State with SingleTickerProviderSt @override void initState() { _animationController = AnimationController(vsync: this, duration: Duration(milliseconds: 500)); - isCameraReady = false; + //_runAnimation(); + connectSignaling(); + WidgetsBinding.instance.addPostFrameCallback((_) =>_runAnimation()); - WidgetsBinding.instance.addPostFrameCallback((_) => _runAnimation()); super.initState(); } @@ -62,19 +61,13 @@ class _IncomingCallState extends State with SingleTickerProviderSt super.dispose(); } - - Future future() async { - await connectSignaling(); - // await _initializeControllerFuture(); - } - @override Widget build(BuildContext context) { return AppScaffold( isShowAppBar: false, isShowDecPage: false, body: FutureBuilder( - future: future(), + future: _initializeControllerFuture, builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.done) { return Stack( @@ -217,21 +210,15 @@ class _IncomingCallState extends State with SingleTickerProviderSt } void _runAnimation() async { + final cameras = await availableCameras(); final firstCamera = cameras[1]; - _controller = CameraController( - // Get a specific camera from the list of available cameras. firstCamera, - // Define the resolution to use. ResolutionPreset.medium, ); _initializeControllerFuture = _controller.initialize(); - - // setState(() { - // isCameraReady = true; - // }); - + setState(() {}); setAudioFile(); for (int i = 0; i < 100; i++) { await _animationController.forward(); @@ -246,34 +233,27 @@ class _IncomingCallState extends State with SingleTickerProviderSt await _controller.dispose(); changeCallStatusAPI(4); - - if(_session != null && _signaling != null){ + if (_session != null && _signaling != null) { await Navigator.of(context).pushReplacement( MaterialPageRoute( // fullscreenDialog: true, builder: (BuildContext context) { - if(widget.incomingCallData.isWebRTC == "true"){ + if (widget.incomingCallData.isWebRTC == "true") { return StartVideoCall(signaling: _signaling, session: _session); - }else{ - return OpenTokConnectCallPage( - apiKey: OPENTOK_API_KEY, - sessionId: widget.incomingCallData.sessionId, - token: widget.incomingCallData.token - ); + } else { + return OpenTokConnectCallPage(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 CallHomePage(receiverId: widget.incomingCallData.receiverID, callerId: widget.incomingCallData.callerID); // App WebRTC VideoCall - }, ), ); - }else{ + } else { // Invalid Params/Data AppToast.showErrorToast(message: "Failed to establish connection with server"); } - } catch (err) { print(err); await PlatformExceptionAlertDialog( @@ -284,8 +264,7 @@ class _IncomingCallState extends State with SingleTickerProviderSt void changeCallStatusAPI(int sessionStatus) { LiveCareService service = new LiveCareService(); - service.endCallAPI(widget.incomingCallData.sessionId, sessionStatus, context).then((res) { - }).catchError((err) { + service.endCallAPI(widget.incomingCallData.sessionId, sessionStatus, context).then((res) {}).catchError((err) { print(err); }); } @@ -293,9 +272,11 @@ class _IncomingCallState extends State with SingleTickerProviderSt void backToHome() async { // final connected = await signaling.declineCall(widget.incomingCallData.callerID, widget.incomingCallData.receiverID); LandingPage.isOpenCallPage = false; + // _signaling player.stop(); changeCallStatusAPI(3); _signaling.bye(_session, callRejected: true); + _signaling.callDisconnected(_session, callRejected: true); Navigator.of(context).pop(); } @@ -318,30 +299,28 @@ class _IncomingCallState extends State with SingleTickerProviderSt } } - connectSignaling({@required bool iAmCaller = false}) async{ - + connectSignaling({@required bool iAmCaller = false}) async { + print("----------------- + Signaling Connection Started ---------------------------"); final caller = widget.incomingCallData.callerID; final receiver = widget.incomingCallData.receiverID; final host = widget.incomingCallData.server; - final self_role = iAmCaller ? "Caller" : "Receiver"; - final self_id = iAmCaller ? caller : receiver; - final self_user = SocketUser(id: self_id, name: "$self_role-$self_id", userAgent: DeviceInfo.userAgent, moreInfo: {}); + final selfRole = iAmCaller ? "Caller" : "Receiver"; + final selfId = iAmCaller ? caller : receiver; + final selfUser = SocketUser(id: selfId, name: "$selfRole-$selfId", userAgent: DeviceInfo.userAgent, moreInfo: {}); - final remote_role = !iAmCaller ? "Caller" : "Receiver"; - final remote_id = !iAmCaller ? caller : receiver; - final remote_user = SocketUser(id: remote_id, name: "$remote_role-$remote_id", userAgent: DeviceInfo.userAgent, moreInfo: {}); + final remoteRole = !iAmCaller ? "Caller" : "Receiver"; + final remoteId = !iAmCaller ? caller : receiver; + final remoteUser = SocketUser(id: remoteId, name: "$remoteRole-$remoteId", userAgent: DeviceInfo.userAgent, moreInfo: {}); - final session_id = "$caller-$receiver"; - _session = SessionOneToOne(id: session_id, local_user: self_user, remote_user: remote_user); + final sessionId = "$caller-$receiver"; + _session = SessionOneToOne(id: sessionId, local_user: selfUser, remote_user: remoteUser); - _signaling = Signaling(host, session: _session); + _signaling = Signaling(host, session: _session); await _signaling.connect(); - if(_signaling.state == SignalingState.Open){ + if (_signaling.state == SignalingState.Open) { return; } - } - } diff --git a/lib/pages/videocall-webrtc-rnd/webrtc/signaling.dart b/lib/pages/videocall-webrtc-rnd/webrtc/signaling.dart index e60857ec..fbafc8ba 100644 --- a/lib/pages/videocall-webrtc-rnd/webrtc/signaling.dart +++ b/lib/pages/videocall-webrtc-rnd/webrtc/signaling.dart @@ -147,7 +147,17 @@ class Signaling { _send('bye', { 'session_id': session.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); } @@ -256,7 +266,9 @@ class Signaling { }, ] }; - } catch (e) {} + } catch (e) { + print("jsjhs" + e.toString()); + } } _socket?.onOpen = () { @@ -487,7 +499,6 @@ class Signaling { }); await localStream?.dispose(); localStream = null; - await session.pc?.close(); await session.dc?.close(); } diff --git a/lib/pages/videocall-webrtc-rnd/webrtc/start_video_call.dart b/lib/pages/videocall-webrtc-rnd/webrtc/start_video_call.dart index d9bb7e88..1acee68c 100644 --- a/lib/pages/videocall-webrtc-rnd/webrtc/start_video_call.dart +++ b/lib/pages/videocall-webrtc-rnd/webrtc/start_video_call.dart @@ -151,15 +151,16 @@ class StartVideoCallState extends State { }); } - _switchCamera() { - _signaling?.switchCamera(); - } - - _muteMic() { - _signaling?.muteMic(); - } + // _switchCamera() { + // _signaling?.switchCamera(); + // } + // + // _muteMic() { + // _signaling?.muteMic(); + // } Function _onAudioEnable(){ + print("================= Audio Event Triggered ==================="); final audioTrack = localMediaStream.getAudioTracks()[0]; final micEnabled = audioTrack.enabled; localMediaStream.getAudioTracks()[0].enabled = !micEnabled; @@ -169,6 +170,7 @@ class StartVideoCallState extends State { } Function _onVideoEnabled() { + print("================= Video Event Triggered ==================="); final videoTrack = localMediaStream.getVideoTracks()[0]; bool videoEnabled = videoTrack.enabled; localMediaStream.getVideoTracks()[0].enabled = !videoEnabled; @@ -176,6 +178,7 @@ class StartVideoCallState extends State { } Function _onSwitchCamera() { + print("================= Camera Switch Event Triggered ==================="); Helper.switchCamera(localMediaStream.getVideoTracks()[0]); } @@ -197,6 +200,8 @@ class StartVideoCallState extends State { } Future _onHangup({bool byRemote = false}) async { + print("================= HangUp Event Triggered ==================="); + print("================= $byRemote ==================="); if(byRemote){ Navigator.of(context).pop(); }else{ diff --git a/lib/uitl/location_util.dart b/lib/uitl/location_util.dart index 4c744f52..b6ab6631 100644 --- a/lib/uitl/location_util.dart +++ b/lib/uitl/location_util.dart @@ -9,12 +9,8 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter_hms_gms_availability/flutter_hms_gms_availability.dart'; import 'package:geolocator/geolocator.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; -import 'package:huawei_location/location/fused_location_provider_client.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:huawei_location/huawei_location.dart'; + import 'package:permission_handler/permission_handler.dart'; class LocationUtils { @@ -77,7 +73,8 @@ class LocationUtils { LocationCallback _locationCallback; _getHMSCurrentLocation(Function(LatLng) callBack) async { - PermissionHandler permissionHandler = PermissionHandler(); + // PermissionHandler permissionHandler = PermissionHandler(); + Permission permissionHandler; int _locationUpdateCbId = 0; doIt() { @@ -106,7 +103,8 @@ class LocationUtils { }); } - if (await permissionHandler.hasLocationPermission()) { + // if (await permissionHandler.hasLocationPermission()) { + if (await permissionHandler.status.isGranted) { doIt(); } else { bool has = await requestPermissions();