|
|
|
|
@ -32,7 +32,6 @@ import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
|
|
|
|
|
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
|
|
|
|
|
import 'package:mohem_flutter_app/main.dart';
|
|
|
|
|
import 'package:mohem_flutter_app/models/chat/call.dart';
|
|
|
|
|
import 'package:mohem_flutter_app/models/chat/get_user_login_token_model.dart';
|
|
|
|
|
import 'package:mohem_flutter_app/models/check_mobile_app_version_model.dart';
|
|
|
|
|
import 'package:mohem_flutter_app/models/get_mobile_login_info_list_model.dart';
|
|
|
|
|
import 'package:mohem_flutter_app/models/member_information_list_model.dart';
|
|
|
|
|
@ -40,10 +39,7 @@ import 'package:mohem_flutter_app/models/member_login_list_model.dart';
|
|
|
|
|
import 'package:mohem_flutter_app/models/privilege_list_model.dart';
|
|
|
|
|
import 'package:mohem_flutter_app/ui/chat/call/chat_incoming_call_screen.dart';
|
|
|
|
|
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
|
|
|
|
|
import 'package:mohem_flutter_app/widgets/button/hmg_connectivity_button.dart';
|
|
|
|
|
import 'package:mohem_flutter_app/widgets/input_widget.dart';
|
|
|
|
|
|
|
|
|
|
// import 'package:safe_device/safe_device.dart';
|
|
|
|
|
import 'package:wifi_iot/wifi_iot.dart';
|
|
|
|
|
|
|
|
|
|
class LoginScreen extends StatefulWidget {
|
|
|
|
|
@ -77,7 +73,7 @@ class _LoginScreenState extends State<LoginScreen> with WidgetsBindingObserver {
|
|
|
|
|
|
|
|
|
|
// late HmsApiAvailability hmsApiAvailability;
|
|
|
|
|
|
|
|
|
|
final voIPKit = FlutterIOSVoIPKit.instance;
|
|
|
|
|
final FlutterIOSVoIPKit voIPKit = FlutterIOSVoIPKit.instance;
|
|
|
|
|
late Timer timeOutTimer;
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
@ -93,13 +89,15 @@ class _LoginScreenState extends State<LoginScreen> with WidgetsBindingObserver {
|
|
|
|
|
callListeners();
|
|
|
|
|
checkAndNavigationCallingPage();
|
|
|
|
|
}
|
|
|
|
|
setupVoIPCallBacks();
|
|
|
|
|
if (Platform.isIOS) {
|
|
|
|
|
setupVoIPCallBacks();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// IOS Voip Call
|
|
|
|
|
void setupVoIPCallBacks() {
|
|
|
|
|
if (Platform.isIOS) {
|
|
|
|
|
voIPKit.getVoIPToken().then((value) async {
|
|
|
|
|
voIPKit.getVoIPToken().then((String? value) async {
|
|
|
|
|
if (value != null) {
|
|
|
|
|
AppState().setiosVoipPlayerID = await ChatApiClient().oneSignalVoip(value!);
|
|
|
|
|
}
|
|
|
|
|
@ -114,8 +112,7 @@ class _LoginScreenState extends State<LoginScreen> with WidgetsBindingObserver {
|
|
|
|
|
Map<String, dynamic> payload,
|
|
|
|
|
) async {
|
|
|
|
|
_iosCallPayload = IosCallPayload.fromJson(payload);
|
|
|
|
|
isIncomingCall = true;
|
|
|
|
|
_timeOut();
|
|
|
|
|
// _timeOut();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
voIPKit.onDidRejectIncomingCall = (
|
|
|
|
|
@ -130,17 +127,15 @@ class _LoginScreenState extends State<LoginScreen> with WidgetsBindingObserver {
|
|
|
|
|
String uuid,
|
|
|
|
|
String callerId,
|
|
|
|
|
) async {
|
|
|
|
|
var callerID = "did accept call $callerId";
|
|
|
|
|
timeOutTimer.cancel();
|
|
|
|
|
await connectCall();
|
|
|
|
|
await voIPKit.acceptIncomingCall(callerState: CallStateType.calling);
|
|
|
|
|
await voIPKit.callConnected();
|
|
|
|
|
await connectCall(uuid: uuid, callDetails: callerId);
|
|
|
|
|
voIPKit.acceptIncomingCall(callerState: CallStateType.calling);
|
|
|
|
|
voIPKit.callConnected();
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void _timeOut() async {
|
|
|
|
|
timeOutTimer = Timer(const Duration(seconds: 25), () async {
|
|
|
|
|
var incomingCallerName = await voIPKit.getIncomingCallerName();
|
|
|
|
|
String? incomingCallerName = await voIPKit.getIncomingCallerName();
|
|
|
|
|
voIPKit.unansweredIncomingCall(
|
|
|
|
|
skipLocalNotification: false,
|
|
|
|
|
missedCallTitle: '📞 Missed call',
|
|
|
|
|
@ -151,17 +146,31 @@ class _LoginScreenState extends State<LoginScreen> with WidgetsBindingObserver {
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> connectCall() async {
|
|
|
|
|
try {
|
|
|
|
|
Future<void> connectCall({required String uuid, required String callDetails}) async {
|
|
|
|
|
isIncomingCall = true;
|
|
|
|
|
if (AppState().getisUserOnline) {
|
|
|
|
|
_iosCallPayload = IosCallPayload(
|
|
|
|
|
uuid: uuid, incomingCallerId: callDetails.split("-")[0], incomingCallReciverId: callDetails.split("-")[1], incomingCallerName: _iosCallPayload!.incomingCallerName, incomingCallType: callDetails.split("-").last);
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
_iosCallPayload = IosCallPayload(
|
|
|
|
|
uuid: uuid, incomingCallerId: callDetails.split("-")[0], incomingCallReciverId: callDetails.split("-")[1], incomingCallerName: null, incomingCallType: callDetails.split("-").last);
|
|
|
|
|
}
|
|
|
|
|
if (_iosCallPayload!.incomingCallerName == null) {
|
|
|
|
|
if (Platform.isIOS) {
|
|
|
|
|
Utils.hideLoading(context);
|
|
|
|
|
}
|
|
|
|
|
await Utils.saveStringFromPrefs("iosCallPayload", jsonEncode(_iosCallPayload));
|
|
|
|
|
MaterialPageRoute pageRoute = await MaterialPageRoute(builder: (BuildContext context) => StartCallPage());
|
|
|
|
|
Navigator.push(context, pageRoute);
|
|
|
|
|
} else if (AppState().getisUserOnline) {
|
|
|
|
|
await Utils.saveStringFromPrefs("iosCallPayload", jsonEncode(_iosCallPayload));
|
|
|
|
|
BuildContext context = AppRoutes.navigatorKey.currentContext!;
|
|
|
|
|
Utils.hideLoading(context);
|
|
|
|
|
Utils.saveStringFromPrefs("iosCallPayload", jsonEncode(_iosCallPayload));
|
|
|
|
|
var pageRoute = MaterialPageRoute(builder: (context) => StartCallPage());
|
|
|
|
|
Navigator.push(context, pageRoute).whenComplete(() {
|
|
|
|
|
checkFirebaseToken();
|
|
|
|
|
});
|
|
|
|
|
} catch (e) {
|
|
|
|
|
logger.d(e);
|
|
|
|
|
MaterialPageRoute pageRoute = await MaterialPageRoute(builder: (BuildContext context) => StartCallPage());
|
|
|
|
|
Navigator.push(context, pageRoute);
|
|
|
|
|
} else {
|
|
|
|
|
FlutterCallkitIncoming.endAllCalls();
|
|
|
|
|
Utils.showToast("Something wen't wrong");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -180,21 +189,9 @@ class _LoginScreenState extends State<LoginScreen> with WidgetsBindingObserver {
|
|
|
|
|
// print(error);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// Future<void> connectCall() async {
|
|
|
|
|
// try {
|
|
|
|
|
// UserAutoLoginModel userLoginResponse = await ChatApiClient().getUserCallToken(userid: _iosCallPayload!.incomingCallerId!.split("-").last);
|
|
|
|
|
// if (userLoginResponse.response != null) {
|
|
|
|
|
// AppState().setchatUserDetails = userLoginResponse;
|
|
|
|
|
// Utils.saveStringFromPrefs("userLoginChatDetails", jsonEncode(userLoginResponse.response));
|
|
|
|
|
// }
|
|
|
|
|
// } catch (e) {
|
|
|
|
|
// logger.d(e);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
Future<void> callListeners() async {
|
|
|
|
|
try {
|
|
|
|
|
print("Call Listeners Init");
|
|
|
|
|
FlutterCallkitIncoming.onEvent.listen((CallEvent? event) async {
|
|
|
|
|
switch (event!.event) {
|
|
|
|
|
case Event.actionCallIncoming:
|
|
|
|
|
@ -238,7 +235,7 @@ class _LoginScreenState extends State<LoginScreen> with WidgetsBindingObserver {
|
|
|
|
|
if (Platform.isAndroid) {
|
|
|
|
|
Utils.hideLoading(context);
|
|
|
|
|
}
|
|
|
|
|
var pageRoute = MaterialPageRoute(builder: (context) => StartCallPage());
|
|
|
|
|
MaterialPageRoute pageRoute = MaterialPageRoute(builder: (BuildContext context) => StartCallPage());
|
|
|
|
|
Navigator.push(context, pageRoute).whenComplete(() {
|
|
|
|
|
checkFirebaseToken();
|
|
|
|
|
});
|
|
|
|
|
@ -254,7 +251,6 @@ class _LoginScreenState extends State<LoginScreen> with WidgetsBindingObserver {
|
|
|
|
|
var calls = await FlutterCallkitIncoming.activeCalls();
|
|
|
|
|
if (calls is List) {
|
|
|
|
|
if (calls.isNotEmpty) {
|
|
|
|
|
print('DATA: $calls');
|
|
|
|
|
return calls[0];
|
|
|
|
|
} else {
|
|
|
|
|
return null;
|
|
|
|
|
@ -267,7 +263,7 @@ class _LoginScreenState extends State<LoginScreen> with WidgetsBindingObserver {
|
|
|
|
|
if (currentCall != null && Platform.isAndroid) {
|
|
|
|
|
isIncomingCall = true;
|
|
|
|
|
Utils.hideLoading(context);
|
|
|
|
|
Navigator.push(context, MaterialPageRoute(builder: (context) => StartCallPage()));
|
|
|
|
|
Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) => StartCallPage()));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -390,7 +386,7 @@ class _LoginScreenState extends State<LoginScreen> with WidgetsBindingObserver {
|
|
|
|
|
// if (isAppOpenBySystem!) checkFirebaseToken();
|
|
|
|
|
|
|
|
|
|
Utils.showLoading(context);
|
|
|
|
|
Future.delayed(const Duration(seconds: 2)).whenComplete(() {
|
|
|
|
|
Future.delayed(Duration(seconds: Platform.isIOS ? 3 : 2)).whenComplete(() {
|
|
|
|
|
if (!isIncomingCall) {
|
|
|
|
|
if (isAppOpenBySystem!) checkFirebaseToken();
|
|
|
|
|
}
|
|
|
|
|
|