CallManager constructor

CallManager()

Implementation

CallManager() {
  NEEventNotify().register(setStateEventOnCallReceived, (arg) async {
    if ((Platform.isAndroid &&
            await NECallKitPlatform.instance.isAppInForeground()) ||
        Platform.isIOS) {
      if (_enableIncomingBanner &&
          CallState.instance.selfUser.callRole == NECallRole.called) {
        // 并发来电检查:若横幅已显示,说明已有一路来电,新来电回复忙线并丢弃
        if (_bannerIsActive) {
          CallKitUILog.i(_tag, 'secondCallIgnored replyBusy');
          await NECallEngine.instance.hangup();
          return;
        }
        CallKitUILog.i(_tag, 'showIncomingBanner enableIncomingBanner=true');
        _bannerIsActive = true;
        // 先同步来电方信息到 native,确保 iOS NECallState 有最新数据再展示横幅
        await NECallKitPlatform.instance.updateCallStateToNative();
        await NECallKitPlatform.instance.setIncomingBannerEnabled(true);
        // Android: 直接调用 showIncomingBanner() 触发 WindowManager 展示横幅;
        // iOS 层由 NEFlutterIncomingBannerHandler 响应并展示 NEIncomingCallBannerWindow。
        if (Platform.isAndroid) {
          await NECallKitPlatform.instance.showIncomingBanner();
        }

        // 注册 onCallEnd 监听:通话结束时自动取消横幅并重置活跃状态
        void onCallEndHandler(dynamic arg) {
          CallKitUILog.i(_tag, 'dismissIncomingBanner reason=callEnded');
          NECallKitPlatform.instance.cancelIncomingBanner();
          _bannerIsActive = false;
          NEEventNotify().unregister(setStateEventOnCallEnd, onCallEndHandler);
        }
        NEEventNotify().register(setStateEventOnCallEnd, onCallEndHandler);

        return;
      }
      NECallKitNavigatorObserver.getInstance().enterCallingPage();
      var permissionResult =
          await Permission.request(CallState.instance.callType);
      if (PermissionResult.granted == permissionResult) {
      } else {
        CallManager.instance.reject();
        CallingBellFeature.stopRing();
      }
    } else {
      NECallKitNavigatorObserver.getInstance().enterCallingPage();
    }
  });
}