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 RegisterMeeTimeStateCallback(EventCallback stateCallback); 38 void UnRegisterMeeTimeStateCallback(); 39 void RegisterCallEventCallback(EventCallback eventCallback); 40 void UnRegisterCallEventCallback(); 41 void RegisterDisconnectedCauseCallback(EventCallback eventCallback); 42 void UnRegisterDisconnectedCauseCallback(); 43 void RegisterCallOttRequestCallback(EventCallback ottRequestCallback); 44 void UnRegisterCallOttRequestCallback(); 45 int32_t RegisterGetWaitingCallback(EventCallback callback); 46 void UnRegisterGetWaitingCallback(); 47 int32_t RegisterSetWaitingCallback(EventCallback callback); 48 void UnRegisterSetWaitingCallback(); 49 int32_t RegisterGetRestrictionCallback(EventCallback callback); 50 void UnRegisterGetRestrictionCallback(); 51 int32_t RegisterSetRestrictionCallback(EventCallback callback); 52 void UnRegisterSetRestrictionCallback(); 53 int32_t RegisterSetRestrictionPasswordCallback(EventCallback callback); 54 void UnRegisterSetRestrictionPasswordCallback(); 55 int32_t RegisterGetTransferCallback(EventCallback callback, int32_t type); 56 void UnRegisterGetTransferCallback(); 57 int32_t RegisterSetTransferCallback(EventCallback callback); 58 void UnRegisterSetTransferCallback(); 59 int32_t RegisterStartRttCallback(EventCallback callback); 60 void UnRegisterStartRttCallback(); 61 int32_t RegisterStopRttCallback(EventCallback callback); 62 void UnRegisterStopRttCallback(); 63 void RegisterMmiCodeCallback(EventCallback eventCallback); 64 void UnRegisterMmiCodeCallback(); 65 int32_t RegisterCloseUnFinishedUssdCallback(EventCallback callback); 66 void UnRegisterCloseUnFinishedUssdCallback(); 67 void RegisterAudioDeviceCallback(EventCallback eventCallback); 68 void UnRegisterAudioDeviceCallback(); 69 void RegisterPostDialDelay(EventCallback eventCallback); 70 void UnRegisterPostDialDelayCallback(); 71 void RegisterImsCallModeChangeCallback(EventCallback eventCallback); 72 void UnRegisterImsCallModeChangeCallback(); 73 void RegisterCallSessionEventChangeCallback(EventCallback eventCallback); 74 void UnRegisterCallSessionEventChangeCallback(); 75 void RegisterPeerDimensionsChangeCallback(EventCallback eventCallback); 76 void UnRegisterPeerDimensionsChangeCallback(); 77 void RegisterCallDataUsageChangeCallback(EventCallback eventCallback); 78 void UnRegisterCallDataUsageChangeCallback(); 79 void RegisterCameraCapabilitiesChangeCallback(EventCallback eventCallback); 80 void UnRegisterCameraCapabilitiesChangeCallback(); 81 int32_t UpdateCallStateInfo(const CallAttributeInfo &info); 82 int32_t UpdateMeeTimeStateInfo(const CallAttributeInfo &info); 83 int32_t UpdateCallEvent(const CallEventInfo &info); 84 int32_t UpdateCallDisconnectedCause(const DisconnectedDetails &details); 85 int32_t UpdateAsyncResultsInfo(const CallResultReportId reportId, AppExecFwk::PacMap &resultInfo); 86 int32_t OttCallRequest(OttCallRequestId requestId, AppExecFwk::PacMap &info); 87 void UnRegisterUpdateCallMediaModeCallback(); 88 int32_t UpdateMmiCodeResultsInfo(const MmiCodeInfo &info); 89 int32_t UpdateAudioDeviceInfo(const AudioDeviceInfo &info); 90 int32_t UpdatePostDialDelay(const std::string str); 91 int32_t UpdateImsCallModeChange(const CallMediaModeInfo &imsCallModeInfo); 92 int32_t CallSessionEventChange(const CallSessionEvent &callSessionEvent); 93 int32_t PeerDimensionsChange(const PeerDimensionsDetail &peerDimensionsDetail); 94 int32_t CallDataUsageChange(const int64_t dataUsage); 95 int32_t UpdateCameraCapabilities(const CameraCapabilities &cameraCapabilities); 96 97 private: 98 static void ReportCallStateWork(uv_work_t *work, int32_t status); 99 static void ReportMeeTimeStateWork(uv_work_t *work, int32_t status); 100 static int32_t ReportCallState(CallAttributeInfo &info, EventCallback stateCallback); 101 static void ReportCallAttribute(napi_env &env, napi_value callbackValues[], 102 const size_t callbackValuesCount, CallAttributeInfo &info); 103 static void CreateVoipNapiValue(napi_env &env, napi_value &voipObject, CallAttributeInfo &info); 104 static void CreateMarkInfoNapiValue(napi_env &env, napi_value &markInfoObject, CallAttributeInfo &info); 105 static void ReportCallEventWork(uv_work_t *work, int32_t status); 106 static int32_t ReportCallEvent(CallEventInfo &info, EventCallback stateCallback); 107 static void ReportCallDisconnectedCauseWork(uv_work_t *work, int32_t status); 108 static int32_t ReportDisconnectedCause(const DisconnectedDetails &details, EventCallback eventCallback); 109 int32_t ReportGetWaitingInfo(AppExecFwk::PacMap &resultInfo); 110 int32_t ReportSetWaitingInfo(AppExecFwk::PacMap &resultInfo); 111 int32_t ReportGetRestrictionInfo(AppExecFwk::PacMap &resultInfo); 112 int32_t ReportSetRestrictionInfo(AppExecFwk::PacMap &resultInfo); 113 int32_t ReportSetRestrictionPassword(AppExecFwk::PacMap &resultInfo); 114 int32_t ReportGetTransferInfo(AppExecFwk::PacMap &resultInfo); 115 int32_t ReportSetTransferInfo(AppExecFwk::PacMap &resultInfo); 116 static void ReportWaitAndLimitInfoWork(uv_work_t *work, int32_t status); 117 static void ReportWaitAndLimitInfo(AppExecFwk::PacMap &resultInfo, EventCallback supplementInfo); 118 static void ReportSupplementInfoWork(uv_work_t *work, int32_t status); 119 static void ReportSupplementInfo(AppExecFwk::PacMap &resultInfo, EventCallback supplementInfo); 120 static void ReportExecutionResultWork(uv_work_t *work, int32_t status); 121 static void ReportExecutionResult(EventCallback &settingInfo, AppExecFwk::PacMap &resultInfo); 122 static void ReportStartRttInfoWork(uv_work_t *work, int32_t status); 123 static void ReportStartRttInfo(AppExecFwk::PacMap &resultInfo, EventCallback supplementInfo); 124 static void ReportStopRttInfoWork(uv_work_t *work, int32_t status); 125 static void ReportStopRttInfo(AppExecFwk::PacMap &resultInfo, EventCallback supplementInfo); 126 int32_t ReportStartRttInfo(AppExecFwk::PacMap &resultInfo); 127 int32_t ReportStopRttInfo(AppExecFwk::PacMap &resultInfo); 128 static void ReportCallOttWork(uv_work_t *work, int32_t status); 129 static int32_t ReportCallOtt( 130 EventCallback &settingInfo, AppExecFwk::PacMap &resultInfo, OttCallRequestId requestId); 131 static void ReportMmiCodeWork(uv_work_t *work, int32_t status); 132 static int32_t ReportMmiCode(MmiCodeInfo &info, EventCallback eventCallback); 133 int32_t ReportCloseUnFinishedUssdInfo(AppExecFwk::PacMap &resultInfo); 134 static void ReportAudioDeviceInfoWork(uv_work_t *work, int32_t status); 135 static int32_t ReportAudioDeviceInfo(AudioDeviceInfo &info, EventCallback eventCallback); 136 static void ReportPostDialDelayWork(uv_work_t *work, int32_t status); 137 static int32_t ReportPostDialDelay(std::string postDialStr, EventCallback eventCallback); 138 139 static void ReportCallMediaModeInfoWork(uv_work_t *work, int32_t status); 140 static int32_t ReportCallMediaModeInfo(CallMediaModeInfo &imsCallModeInfo, EventCallback eventCallback); 141 static void ReportCallSessionEventWork(uv_work_t *work, int32_t status); 142 static int32_t ReportCallSessionEvent(CallSessionEvent &sessionEventOptions, EventCallback eventCallback); 143 static void ReportPeerDimensionsWork(uv_work_t *work, int32_t status); 144 static int32_t ReportPeerDimensions(PeerDimensionsDetail &peerDimensionsDetail, EventCallback eventCallback); 145 static void ReportCallDataUsageWork(uv_work_t *work, int32_t status); 146 static int32_t ReportCallDataUsage(int64_t dataUsage, EventCallback eventCallback); 147 static void ReportCameraCapabilitiesInfoWork(uv_work_t *work, int32_t status); 148 static int32_t ReportCameraCapabilitiesInfo(CameraCapabilities &cameraCapabilities, EventCallback eventCallback); 149 150 private: 151 EventCallback stateCallback_; 152 EventCallback meeTimeStateCallback_; 153 EventCallback eventCallback_; 154 EventCallback callDisconnectCauseCallback_; 155 EventCallback ottRequestCallback_; 156 EventCallback getWaitingCallback_; 157 EventCallback setWaitingCallback_; 158 EventCallback getRestrictionCallback_; 159 EventCallback setRestrictionCallback_; 160 EventCallback setRestrictionPasswordCallback_; 161 EventCallback getTransferCallback_; 162 EventCallback setTransferCallback_; 163 EventCallback startRttCallback_; 164 EventCallback stopRttCallback_; 165 EventCallback mmiCodeCallback_; 166 EventCallback closeUnfinishedUssdCallback_; 167 static EventCallback audioDeviceCallback_; 168 EventCallback postDialDelayCallback_; 169 EventCallback imsCallModeCallback_; 170 EventCallback peerDimensionsCallback_; 171 EventCallback callDataUsageCallback_; 172 EventCallback cameraCapabilitiesCallback_; 173 EventCallback callSessionEventCallback_; 174 using CallResultReportIdProcessorFunc = std::function<int32_t(AppExecFwk::PacMap &resultInfo)>; 175 std::map<CallResultReportId, CallResultReportIdProcessorFunc> memberFuncMap_; 176 int32_t getCallTransferReason_ = -1; 177 std::mutex getTransferCallbackMutex_; 178 std::mutex setTransferCallbackMutex_; 179 std::mutex getRestrictionCallbackMutex_; 180 std::mutex setRestrictionPasswordCallbackMutex_; 181 std::mutex closeUnfinishedUssdCallbackMutex_; 182 std::mutex setWaitingCallbackMutex_; 183 std::mutex getWaitingCallbackMutex_; 184 static std::mutex audioDeviceCallbackMutex_; 185 }; 186 } // namespace Telephony 187 } // namespace OHOS 188 189 #endif // NAPI_CALL_ABILITY_CALLBACK_H 190