dev_v3.13.6_voipcall
Aamir Muhammad 2 years ago
parent 1e2609dc44
commit 761a6daf52

@ -38,8 +38,19 @@ configurations.all {
resolutionStrategy {
force 'androidx.core:core-ktx:1.6.0'
}
}
//configurations.all {
// c -> c.resolutionStrategy.dependencySubstitution {
// all { DependencySubstitution dependency ->
// if (dependency.requested.group == 'org.bouncycastle') {
// dependency.useTarget 'org.bouncycastle:bcprov-jdk15to18:1.68'
// }
// }
// }
//}
android {
compileSdkVersion 34
@ -102,6 +113,21 @@ android {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
configurations.all {
c -> c.resolutionStrategy.eachDependency {
DependencyResolveDetails dependency ->
println dependency.requested.group
if (dependency.requested.group == 'org.bouncycastle') {
dependency.useTarget 'org.bouncycastle:bcprov-jdk15to18:1.68'
}
}
}
}
flutter {

@ -29,7 +29,8 @@ class _OutGoingCallState extends State<OutGoingCall> {
}
Future<void> init() async {
widget.isVideoCall ? callProvider!.isVideoCall = true : callProvider!.isVideoCall = false;
// widget.isVideoCall ? callProvider!.isVideoCall = true : callProvider!.isVideoCall = false;
widget.isVideoCall = true;
callProvider!.isOutGoingCall = true;
// IosCallPayload payload = IosCallPayload(
// incomingCallerId: widget.outGoingCallData.callerId.toString(),
@ -39,7 +40,7 @@ class _OutGoingCallState extends State<OutGoingCall> {
// uuid: "",
// callData: widget.outGoingCallData.toRawJson());
// await Utils.saveStringFromPrefs("iosCallPayload", jsonEncode(payload));
await callProvider!.initLocalCamera(callData: widget.outGoingCallData, context: context);
await callProvider!.initLocalCamera(callData: widget.outGoingCallData);
loader = false;
}

@ -39,7 +39,8 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin {
bool isLoudSpeaker = false;
bool isCamOff = false;
bool isCallEnded = false;
bool isVideoCall = false;
// This need to Be Changed to dynamic
bool isVideoCall = true;
bool isAudioCall = false;
bool isCallStarted = false;
bool isFrontCamera = true;
@ -51,17 +52,17 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin {
bool isOutGoingCall = false;
bool isUserOnline = false;
BuildContext? providerContext;
List<MediaDeviceInfo> devices = [];
Future<void> buildHubConnection() async {
try {
chatHubConnection = await getHubConnection();
await chatHubConnection!.start();
} catch (e) {
print(e.toString());
Utils.showErrorToast(e.toString());
}
await chatHubConnection!.start();
if (kDebugMode) {
print("Hub Conn: Startedddddddd");
}
@ -73,7 +74,8 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin {
//{"id":341682,"userName":"Aamir.Muhammad","email":"Aamir.Muhammad@cloudsolutions.com.sa","phone":null,"title":"Aamir Saleem Ahmad Dost Muhammad","token":"eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJuYW1laWQiOiIzNDE2ODIiLCJlbWFpbCI6IkFhbWlyLk11aGFtbWFkQGNsb3Vkc29sdXRpb25zLmNvbS5zYSIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd3MvMjAwOC8wNi9pZGVudGl0eS9jbGFpbXMvdXNlcmRhdGEiOiJBYW1pci5NdWhhbW1hZCIsIm5iZiI6MTcwNzIwNTAyMywiZXhwIjoxNzA3MjkxNDIzLCJpYXQiOjE3MDcyMDUwMjN9.Zz2bcsMwiLAAWGZh2E_p5Qs6ItMt0JHhDFI_0DLdggCQtt6HHcT4n8nvqMZx-uYr3jLwqhA_IAjTuaCeSE15sw","isDomainUser":true,"isActiveCode":false,"encryptedUserId":"nn7RkYzbnQc=","encryptedUserName":"/QruOyp4QMcmNXKZlljUgg=="}
Future<HubConnection> getHubConnection() async {
AppState().chatDetails!.response = Response.fromJson(
AppState().chatDetails = UserAutoLoginModel(
response: Response.fromJson(
{
"id": 341682,
"userName": "Aamir.Muhammad",
@ -81,13 +83,13 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin {
"phone": null,
"title": "Aamir Saleem Ahmad Dost Muhammad",
"token":
"eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJuYW1laWQiOiIzNDE2ODIiLCJlbWFpbCI6IkFhbWlyLk11aGFtbWFkQGNsb3Vkc29sdXRpb25zLmNvbS5zYSIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd3MvMjAwOC8wNi9pZGVudGl0eS9jbGFpbXMvdXNlcmRhdGEiOiJBYW1pci5NdWhhbW1hZCIsIm5iZiI6MTcwNzIwNTAyMywiZXhwIjoxNzA3MjkxNDIzLCJpYXQiOjE3MDcyMDUwMjN9.Zz2bcsMwiLAAWGZh2E_p5Qs6ItMt0JHhDFI_0DLdggCQtt6HHcT4n8nvqMZx-uYr3jLwqhA_IAjTuaCeSE15sw",
"eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJuYW1laWQiOiIzNDE2ODIiLCJlbWFpbCI6IkFhbWlyLk11aGFtbWFkQGNsb3Vkc29sdXRpb25zLmNvbS5zYSIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd3MvMjAwOC8wNi9pZGVudGl0eS9jbGFpbXMvdXNlcmRhdGEiOiJBYW1pci5NdWhhbW1hZCIsIm5iZiI6MTcwNzM3NzMyMiwiZXhwIjoxNzA3NDYzNzIyLCJpYXQiOjE3MDczNzczMjJ9.qYzwICr5URSIE0kQ0PQypKZCpqTAx0EYBNlhHl8Bq0InpmL4zhvHHDfC6YPNL1DTQpfp6kk5G7VZTr6nCAmuyg",
"isDomainUser": true,
"isActiveCode": false,
"encryptedUserId": "nn7RkYzbnQc=",
"encryptedUserName": "/QruOyp4QMcmNXKZlljUgg=="
},
);
));
HubConnection hub;
HttpConnectionOptions httpOp = HttpConnectionOptions(skipNegotiation: false, logMessageContent: true);
@ -97,6 +99,25 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin {
return hub;
}
Future<CallDataModel> makeCall({required String callType}) async {
Map<String, dynamic> json = {
"callerID": AppState().chatDetails!.response!.id,
"callerName": AppState().chatDetails!.response!.userName,
"callerEmail": AppState().chatDetails!.response!.email,
"callerTitle": AppState().chatDetails!.response!.title,
"callerPhone": AppState().chatDetails!.response!.phone,
"receiverID": 266642,
"receiverName": "Muhammad Alam",
"receiverEmail": "Muhamad.Alam@cloudsolutions.com.sa",
"receiverTitle": "Muhammad Alam",
"receiverPhone": "123456789",
"title": "Muhammad Alam",
"callType": callType == "VIDEO" ? "Video" : "Audio",
};
CallDataModel res = CallDataModel.fromJson(json);
return res;
}
void registerCallListners() {
if (kDebugMode) {
print("=================== Call Listeners Registered =======================");
@ -128,11 +149,11 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin {
///////////////////////////////////////////////OutGoing Call////////////////////////////////////////////////////
Future<void> initLocalCamera({callData, BuildContext? context, bool isIncomingCall = false}) async {
Future<void> initLocalCamera({callData, bool isIncomingCall = false}) async {
isCallEnded = false;
outGoingCallData = callData;
await initStreams();
await startCall(callType: isVideoCall ? "Video" : "Audio");
await startCall();
_pc = await creatOfferWithCon();
connectOutgoing();
notifyListeners();
@ -143,7 +164,7 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin {
// notifyListeners();
}
Future<void> startCall({String? callType}) async {
Future<void> startCall() async {
// chatProvModel.isTextMsg = true;
// chatProvModel.isAttachmentMsg = false;
// chatProvModel.isVoiceMsg = false;
@ -197,14 +218,14 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin {
if (Platform.isIOS) {
Future.delayed(Duration(seconds: 2), () {
Navigator.pushReplacement(
providerContext!,
locator<NavigationService>().navigatorKey.currentContext!,
MaterialPageRoute(
builder: (BuildContext context) => StartCallPage(),
));
});
} else {
Navigator.pushReplacement(
providerContext!,
locator<NavigationService>().navigatorKey.currentContext!,
MaterialPageRoute(
builder: (BuildContext context) => StartCallPage(),
));
@ -700,86 +721,30 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin {
try {
_localStream = await navigator.mediaDevices.getUserMedia({
'audio': true,
'video': isVideoCall
? {
'mandatory': {
'minWidth': '640', // Provide your own width, height and frame rate here
'minHeight': '480',
'minFrameRate': '30',
},
'facingMode': 'user',
'optional': [],
}
: false
'video':
//isVideoCall?
{
'mandatory': {
'minWidth': '640', // Provide your own width, height and frame rate here
'minHeight': '480',
'minFrameRate': '30',
},
'facingMode': 'user',
'optional': [],
"audio": true,
}
// : false
});
if (kDebugMode) {
print(_localStream..toString());
}
localVideoRenderer!.srcObject = _localStream;
localVideoRenderer!.value = (const RTCVideoValue(width: 200, height: 200, renderVideo: true));
localVideoRenderer!.value = (const RTCVideoValue(
width: 200,
height: 200,
renderVideo: true,
));
print("Working localStream");
} catch (e) {
print("Failed to get user media: $e");
}
// _localStream = await navigator.mediaDevices.getUserMedia(isVideoCall
// ? Platform.isIOS
// ? {
// 'audio': true,
// 'video': {
// 'facingMode': 'user', // Use 'user' for front camera, 'environment' for back camera
// 'width': {
// 'ideal': 1080, // Set the ideal width (maximum quality)
// },
// 'height': {
// 'ideal': 1920, // Set the ideal height (maximum quality)
// },
// 'frameRate': {
// 'ideal': 30, // Set the ideal frame rate (adjust as needed)
// },
// },
// }
// : {
// 'audio': true,
// 'video': {
// 'facingMode': 'user', // Use 'user' for front camera, 'environment' for back camera
// 'width': {
// 'ideal': 1920, // Set the ideal width (maximum quality)
// },
// 'height': {
// 'ideal': 1080, // Set the ideal height (maximum quality)
// },
// 'frameRate': {
// 'ideal': 30, // Set the ideal frame rate (adjust as needed)
// },
// },
// }
//
// // ? {
// // "video": {
// // "mandatory": {
// // "width": {"min": 1080},
// // "height": {"min": 1920}
// // },
// // "optional": Platform.isAndroid
// // ? [
// // {'sourceId': devices[1].deviceId},
// // {
// // "width": {"max": 1080}
// // },
// // {"frameRate": 30},
// // {"facingMode": "user"}
// // ]
// // : [
// // {"frameRate": 30},
// // {"facingMode": "user"}
// // ]
// // },
// // "frameRate": 30,
// // "width": 1080, //420,//640,//1280,
// // "height": 1920, //240//480//720
// // "audio": true,
// // }
// : audioConstraints);
// localVideoRenderer.srcObject = _localStream;
await remoteRenderer!.initialize();

@ -46,6 +46,7 @@ import 'package:flutter/material.dart';
// import 'package:flutter_amazonpaymentservices/flutter_amazonpaymentservices.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:in_app_review/in_app_review.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart';
@ -463,20 +464,28 @@ class _AppDrawerState extends State<AppDrawer> {
GestureDetector(
onTap: () async {
//Aamir Call
callProv!.buildHubConnection();
await callProv.makeCall(callType: "VIDEO").then((value) {
Future.delayed(Duration(seconds: 3), () {
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => OutGoingCall(
isVideoCall: value.callType == "VIDEO" ? true : false,
outGoingCallData: value,
Future<PermissionStatus> micPer = Permission.microphone.request();
Future<PermissionStatus> camPer = Permission.camera.request();
if (await micPer.isGranted && await camPer.isGranted) {
callProv!.buildHubConnection();
await callProv!.makeCall(callType: "VIDEO").then((value) {
Future.delayed(Duration(seconds: 3), () {
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => OutGoingCall(
isVideoCall: value.callType == "VIDEO" ? true : false,
outGoingCallData: value,
),
),
),
);
);
});
});
});
} else if (await micPer.isDenied) {
micPer = Permission.microphone.request();
} else if (await camPer.isDenied) {
camPer = Permission.camera.request();
}
},
child: Card(
child: Container(

@ -109,7 +109,7 @@ dependencies:
circular_countdown_timer: ^0.2.0
#Just Audio to play ringing for incoming video call
just_audio: ^0.9.30
just_audio: ^0.9.36
#hijri
hijri: ^3.0.0
@ -174,7 +174,7 @@ dependencies:
signalr_netcore: ^1.3.6
logging: ^1.0.1
swipe_to: ^1.0.5
flutter_webrtc: ^0.9.47
flutter_webrtc: ^0.9.48+hotfix.1
draggable_widget: ^2.0.0
flutter_callkit_incoming: ^2.0.0+1
camera: ^0.10.5+9

Loading…
Cancel
Save