1 /* 2 * Copyright (C) 2021-2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef NAPI_CALL_ABILITY_CALLBACK_H 17 #define NAPI_CALL_ABILITY_CALLBACK_H 18 19 #include <uv.h> 20 21 #include "pac_map.h" 22 #include "singleton.h" 23 24 #include "napi_call_manager_types.h" 25 26 namespace OHOS { 27 namespace Telephony { 28 /** 29 * Data sent asynchronously from the CallManager will be notified to JavaScript via NapiCallAbilityCallback. 30 */ 31 class NapiCallAbilityCallback { 32 DECLARE_DELAYED_SINGLETON(NapiCallAbilityCallback) 33 34 public: 35 void RegisterCallStateCallback(EventCallback stateCallback); 36 void UnRegisterCallStateCallback(); 37 void RegisterCallEventCallback(EventCallback eventCallback); 38 void UnRegisterCallEventCallback(); 39 void RegisterDisconnectedCauseCallback(EventCallback eventCallback); 40 void UnRegisterDisconnectedCauseCallback(); 41 void RegisterCallOttRequestCallback(EventCallback ottRequestCallback); 42 void UnRegisterCallOttRequestCallback(); 43 int32_t RegisterGetWaitingCallback(EventCallback callback); 44 void UnRegisterGetWaitingCallback(); 45 int32_t RegisterSetWaitingCallback(EventCallback callback); 46 void UnRegisterSetWaitingCallback(); 47 int32_t RegisterGetRestrictionCallback(EventCallback callback); 48 void UnRegisterGetRestrictionCallback(); 49 int32_t RegisterSetRestrictionCallback(EventCallback callback); 50 void UnRegisterSetRestrictionCallback(); 51 int32_t RegisterSetRestrictionPasswordCallback(EventCallback callback); 52 void UnRegisterSetRestrictionPasswordCallback(); 53 int32_t RegisterGetTransferCallback(EventCallback callback, int32_t type); 54 void UnRegisterGetTransferCallback(); 55 int32_t RegisterSetTransferCallback(EventCallback callback); 56 void UnRegisterSetTransferCallback(); 57 int32_t RegisterStartRttCallback(EventCallback callback); 58 void UnRegisterStartRttCallback(); 59 int32_t RegisterStopRttCallback(EventCallback callback); 60 void UnRegisterStopRttCallback(); 61 void RegisterMmiCodeCallback(EventCallback eventCallback); 62 void UnRegisterMmiCodeCallback(); 63 int32_t RegisterCloseUnFinishedUssdCallback(EventCallback callback); 64 void UnRegisterCloseUnFinishedUssdCallback(); 65 void RegisterAudioDeviceCallback(EventCallback eventCallback); 66 void UnRegisterAudioDeviceCallback(); 67 void RegisterPostDialDelay(EventCallback eventCallback); 68 void UnRegisterPostDialDelayCallback(); 69 void RegisterImsCallModeChangeCallback(EventCallback eventCallback); 70 void UnRegisterImsCallModeChangeCallback(); 71 void RegisterCallSessionEventChangeCallback(EventCallback eventCallback); 72 void UnRegisterCallSessionEventChangeCallback(); 73 void RegisterPeerDimensionsChangeCallback(EventCallback eventCallback); 74 void UnRegisterPeerDimensionsChangeCallback(); 75 void RegisterCallDataUsageChangeCallback(EventCallback eventCallback); 76 void UnRegisterCallDataUsageChangeCallback(); 77 void RegisterCameraCapabilitiesChangeCallback(EventCallback eventCallback); 78 void UnRegisterCameraCapabilitiesChangeCallback(); 79 int32_t UpdateCallStateInfo(const CallAttributeInfo &info); 80 int32_t UpdateCallEvent(const CallEventInfo &info); 81 int32_t UpdateCallDisconnectedCause(const DisconnectedDetails &details); 82 int32_t UpdateAsyncResultsInfo(const CallResultReportId reportId, AppExecFwk::PacMap &resultInfo); 83 int32_t OttCallRequest(OttCallRequestId requestId, AppExecFwk::PacMap &info); 84 void UnRegisterUpdateCallMediaModeCallback(); 85 int32_t UpdateMmiCodeResultsInfo(const MmiCodeInfo &info); 86 int32_t UpdateAudioDeviceInfo(const AudioDeviceInfo &info); 87 int32_t UpdatePostDialDelay(const std::string str); 88 int32_t UpdateImsCallModeChange(const CallMediaModeInfo &imsCallModeInfo); 89 int32_t CallSessionEventChange(const CallSessionEvent &callSessionEvent); 90 int32_t PeerDimensionsChange(const PeerDimensionsDetail &peerDimensionsDetail); 91 int32_t CallDataUsageChange(const int64_t dataUsage); 92 int32_t UpdateCameraCapabilities(const CameraCapabilities &cameraCapabilities); 93 94 private: 95 static void ReportCallStateWork(uv_work_t *work, int32_t status); 96 static int32_t ReportCallState(CallAttributeInfo &info, EventCallback stateCallback); 97 static void CreateVoipNapiValue(napi_env &env, napi_value &voipObject, CallAttributeInfo &info); 98 static void ReportCallEventWork(uv_work_t *work, int32_t status); 99 static int32_t ReportCallEvent(CallEventInfo &info, EventCallback stateCallback); 100 static void ReportCallDisconnectedCauseWork(uv_work_t *work, int32_t status); 101 static int32_t ReportDisconnectedCause(const DisconnectedDetails &details, EventCallback eventCallback); 102 int32_t ReportGetWaitingInfo(AppExecFwk::PacMap &resultInfo); 103 int32_t ReportSetWaitingInfo(AppExecFwk::PacMap &resultInfo); 104 int32_t ReportGetRestrictionInfo(AppExecFwk::PacMap &resultInfo); 105 int32_t ReportSetRestrictionInfo(AppExecFwk::PacMap &resultInfo); 106 int32_t ReportSetRestrictionPassword(AppExecFwk::PacMap &resultInfo); 107 int32_t ReportGetTransferInfo(AppExecFwk::PacMap &resultInfo); 108 int32_t ReportSetTransferInfo(AppExecFwk::PacMap &resultInfo); 109 static void ReportWaitAndLimitInfoWork(uv_work_t *work, int32_t status); 110 static void ReportWaitAndLimitInfo(AppExecFwk::PacMap &resultInfo, EventCallback supplementInfo); 111 static void ReportSupplementInfoWork(uv_work_t *work, int32_t status); 112 static void ReportSupplementInfo(AppExecFwk::PacMap &resultInfo, EventCallback supplementInfo); 113 static void ReportExecutionResultWork(uv_work_t *work, int32_t status); 114 static void ReportExecutionResult(EventCallback &settingInfo, AppExecFwk::PacMap &resultInfo); 115 static void ReportStartRttInfoWork(uv_work_t *work, int32_t status); 116 static void ReportStartRttInfo(AppExecFwk::PacMap &resultInfo, EventCallback supplementInfo); 117 static void ReportStopRttInfoWork(uv_work_t *work, int32_t status); 118 static void ReportStopRttInfo(AppExecFwk::PacMap &resultInfo, EventCallback supplementInfo); 119 int32_t ReportStartRttInfo(AppExecFwk::PacMap &resultInfo); 120 int32_t ReportStopRttInfo(AppExecFwk::PacMap &resultInfo); 121 static void ReportCallOttWork(uv_work_t *work, int32_t status); 122 static int32_t ReportCallOtt( 123 EventCallback &settingInfo, AppExecFwk::PacMap &resultInfo, OttCallRequestId requestId); 124 static void ReportMmiCodeWork(uv_work_t *work, int32_t status); 125 static int32_t ReportMmiCode(MmiCodeInfo &info, EventCallback eventCallback); 126 int32_t ReportCloseUnFinishedUssdInfo(AppExecFwk::PacMap &resultInfo); 127 static void ReportAudioDeviceInfoWork(uv_work_t *work, int32_t status); 128 static int32_t ReportAudioDeviceInfo(AudioDeviceInfo &info, EventCallback eventCallback); 129 static void ReportPostDialDelayWork(uv_work_t *work, int32_t status); 130 static int32_t ReportPostDialDelay(std::string postDialStr, EventCallback eventCallback); 131 132 static void ReportCallMediaModeInfoWork(uv_work_t *work, int32_t status); 133 static int32_t ReportCallMediaModeInfo(CallMediaModeInfo &imsCallModeInfo, EventCallback eventCallback); 134 static void ReportCallSessionEventWork(uv_work_t *work, int32_t status); 135 static int32_t ReportCallSessionEvent(CallSessionEvent &sessionEventOptions, EventCallback eventCallback); 136 static void ReportPeerDimensionsWork(uv_work_t *work, int32_t status); 137 static int32_t ReportPeerDimensions(PeerDimensionsDetail &peerDimensionsDetail, EventCallback eventCallback); 138 static void ReportCallDataUsageWork(uv_work_t *work, int32_t status); 139 static int32_t ReportCallDataUsage(int64_t dataUsage, EventCallback eventCallback); 140 static void ReportCameraCapabilitiesInfoWork(uv_work_t *work, int32_t status); 141 static int32_t ReportCameraCapabilitiesInfo(CameraCapabilities &cameraCapabilities, EventCallback eventCallback); 142 143 private: 144 EventCallback stateCallback_; 145 EventCallback eventCallback_; 146 EventCallback callDisconnectCauseCallback_; 147 EventCallback ottRequestCallback_; 148 EventCallback getWaitingCallback_; 149 EventCallback setWaitingCallback_; 150 EventCallback getRestrictionCallback_; 151 EventCallback setRestrictionCallback_; 152 EventCallback setRestrictionPasswordCallback_; 153 EventCallback getTransferCallback_; 154 EventCallback setTransferCallback_; 155 EventCallback startRttCallback_; 156 EventCallback stopRttCallback_; 157 EventCallback mmiCodeCallback_; 158 EventCallback closeUnfinishedUssdCallback_; 159 EventCallback audioDeviceCallback_; 160 EventCallback postDialDelayCallback_; 161 EventCallback imsCallModeCallback_; 162 EventCallback peerDimensionsCallback_; 163 EventCallback callDataUsageCallback_; 164 EventCallback cameraCapabilitiesCallback_; 165 EventCallback callSessionEventCallback_; 166 using CallResultReportIdProcessorFunc = int32_t (NapiCallAbilityCallback::*)(AppExecFwk::PacMap &resultInfo); 167 std::map<CallResultReportId, CallResultReportIdProcessorFunc> memberFuncMap_; 168 std::mutex mutex_; 169 int32_t getCallTransferReason_ = -1; 170 }; 171 } // namespace Telephony 172 } // namespace OHOS 173 174 #endif // NAPI_CALL_ABILITY_CALLBACK_H 175