diff --git a/dialer/android/app/src/main/kotlin/com/icing/dialer/activities/MainActivity.kt b/dialer/android/app/src/main/kotlin/com/icing/dialer/activities/MainActivity.kt index 5f5b29a..eb362de 100644 --- a/dialer/android/app/src/main/kotlin/com/icing/dialer/activities/MainActivity.kt +++ b/dialer/android/app/src/main/kotlin/com/icing/dialer/activities/MainActivity.kt @@ -153,6 +153,18 @@ class MainActivity : FlutterActivity() { } result.success(true) } + "getCallState" -> { + val stateStr = when (MyInCallService.currentCall?.state) { + android.telecom.Call.STATE_ACTIVE -> "active" + android.telecom.Call.STATE_RINGING -> "ringing" + android.telecom.Call.STATE_DIALING -> "dialing" + android.telecom.Call.STATE_DISCONNECTED -> "disconnected" + android.telecom.Call.STATE_DISCONNECTING -> "disconnecting" + else -> "unknown" + } + Log.d(TAG, "getCallState called, returning: $stateStr") + result.success(stateStr) + } else -> result.notImplemented() } } diff --git a/dialer/lib/features/call/call_page.dart b/dialer/lib/features/call/call_page.dart index b6dbce5..dbbea12 100644 --- a/dialer/lib/features/call/call_page.dart +++ b/dialer/lib/features/call/call_page.dart @@ -37,6 +37,7 @@ class _CallPageState extends State { @override void initState() { super.initState(); + _checkInitialCallState(); _listenToCallState(); } @@ -47,10 +48,24 @@ class _CallPageState extends State { super.dispose(); } + void _checkInitialCallState() async { + try { + final state = await _callService.getCallState(); + print('CallPage: Initial call state: $state'); + if (mounted && state == "active") { + setState(() { + _callStatus = "00:00"; + _startCallTimer(); + }); + } + } catch (e) { + print('CallPage: Error checking initial state: $e'); + } + } + void _listenToCallState() { _callStateSubscription = _callService.callStateStream.listen((state) { - final eventTime = DateTime.now().millisecondsSinceEpoch; - print('CallPage: [${eventTime}ms] Call state changed to $state'); + print('CallPage: Call state changed to $state'); if (mounted) { setState(() { if (state == "active") { @@ -76,7 +91,6 @@ class _CallPageState extends State { final minutes = (_callSeconds ~/ 60).toString().padLeft(2, '0'); final seconds = (_callSeconds % 60).toString().padLeft(2, '0'); _callStatus = '$minutes:$seconds'; - print('CallPage: [${DateTime.now().millisecondsSinceEpoch}ms] Timer updated, duration: $_callStatus'); }); } }); @@ -114,12 +128,11 @@ class _CallPageState extends State { void _hangUp() async { try { - final hangUpStart = DateTime.now().millisecondsSinceEpoch; - print('CallPage: [${hangUpStart}ms] Initiating hangUp'); + print('CallPage: Initiating hangUp'); final result = await _callService.hangUpCall(context); - print('CallPage: [${DateTime.now().millisecondsSinceEpoch}ms] Hang up result: $result'); + print('CallPage: Hang up result: $result'); } catch (e) { - print('CallPage: [${DateTime.now().millisecondsSinceEpoch}ms] Error hanging up: $e'); + print('CallPage: Error hanging up: $e'); if (mounted) { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text("Error hanging up: $e")), diff --git a/dialer/lib/services/call_service.dart b/dialer/lib/services/call_service.dart index 234d850..821608f 100644 --- a/dialer/lib/services/call_service.dart +++ b/dialer/lib/services/call_service.dart @@ -8,7 +8,7 @@ import '../services/contact_service.dart'; class CallService { static const MethodChannel _channel = MethodChannel('call_service'); static String? currentPhoneNumber; - static String? currentDisplayName; + static String? currentDisplayName; static Uint8List? currentThumbnail; static bool _isCallPageVisible = false; static Map? _pendingCall; @@ -133,6 +133,17 @@ class CallService { }); } + Future getCallState() async { + try { + final state = await _channel.invokeMethod('getCallState'); + print('CallService: getCallState returned: $state'); + return state as String?; + } catch (e) { + print('CallService: Error getting call state: $e'); + return null; + } + } + void dispose() { _callStateController.close(); } @@ -322,7 +333,6 @@ class CallService { _activeCallNumber = null; } - Future> makeGsmCall( BuildContext context, { required String phoneNumber, @@ -359,7 +369,7 @@ class CallService { } } - Future> hangUpCall(BuildContext context) async { + Future> hangUpCall(BuildContext context) async { try { print('CallService: Hanging up call'); final result = await _channel.invokeMethod('hangUpCall');