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 ReportCallAttribute(napi_env &env, napi_value callbackValues[], 98 const size_t callbackValuesCount, CallAttributeInfo &info); 99 static void CreateVoipNapiValue(napi_env &env, napi_value &voipObject, CallAttributeInfo &info); 100 static void CreateMarkInfoNapiValue(napi_env &env, napi_value &markInfoObject, CallAttributeInfo &info); 101 static void ReportCallEventWork(uv_work_t *work, int32_t status); 102 static int32_t ReportCallEvent(CallEventInfo &info, EventCallback stateCallback); 103 static void ReportCallDisconnectedCauseWork(uv_work_t *work, int32_t status); 104 static int32_t ReportDisconnectedCause(const DisconnectedDetails &details, EventCallback eventCallback); 105 int32_t ReportGetWaitingInfo(AppExecFwk::PacMap &resultInfo); 106 int32_t ReportSetWaitingInfo(AppExecFwk::PacMap &resultInfo); 107 int32_t ReportGetRestrictionInfo(AppExecFwk::PacMap &resultInfo); 108 int32_t ReportSetRestrictionInfo(AppExecFwk::PacMap &resultInfo); 109 int32_t ReportSetRestrictionPassword(AppExecFwk::PacMap &resultInfo); 110 int32_t ReportGetTransferInfo(AppExecFwk::PacMap &resultInfo); 111 int32_t ReportSetTransferInfo(AppExecFwk::PacMap &resultInfo); 112 static void ReportWaitAndLimitInfoWork(uv_work_t *work, int32_t status); 113 static void ReportWaitAndLimitInfo(AppExecFwk::PacMap &resultInfo, EventCallback supplementInfo); 114 static void ReportSupplementInfoWork(uv_work_t *work, int32_t status); 115 static void ReportSupplementInfo(AppExecFwk::PacMap &resultInfo, EventCallback supplementInfo); 116 static void ReportExecutionResultWork(uv_work_t *work, int32_t status); 117 static void ReportExecutionResult(EventCallback &settingInfo, AppExecFwk::PacMap &resultInfo); 118 static void ReportStartRttInfoWork(uv_work_t *work, int32_t status); 119 static void ReportStartRttInfo(AppExecFwk::PacMap &resultInfo, EventCallback supplementInfo); 120 static void ReportStopRttInfoWork(uv_work_t *work, int32_t status); 121 static void ReportStopRttInfo(AppExecFwk::PacMap &resultInfo, EventCallback supplementInfo); 122 int32_t ReportStartRttInfo(AppExecFwk::PacMap &resultInfo); 123 int32_t ReportStopRttInfo(AppExecFwk::PacMap &resultInfo); 124 static void ReportCallOttWork(uv_work_t *work, int32_t status); 125 static int32_t ReportCallOtt( 126 EventCallback &settingInfo, AppExecFwk::PacMap &resultInfo, OttCallRequestId requestId); 127 static void ReportMmiCodeWork(uv_work_t *work, int32_t status); 128 static int32_t ReportMmiCode(MmiCodeInfo &info, EventCallback eventCallback); 129 int32_t ReportCloseUnFinishedUssdInfo(AppExecFwk::PacMap &resultInfo); 130 static void ReportAudioDeviceInfoWork(uv_work_t *work, int32_t status); 131 static int32_t ReportAudioDeviceInfo(AudioDeviceInfo &info, EventCallback eventCallback); 132 static void ReportPostDialDelayWork(uv_work_t *work, int32_t status); 133 static int32_t ReportPostDialDelay(std::string postDialStr, EventCallback eventCallback); 134 135 static void ReportCallMediaModeInfoWork(uv_work_t *work, int32_t status); 136 static int32_t ReportCallMediaModeInfo(CallMediaModeInfo &imsCallModeInfo, EventCallback eventCallback); 137 static void ReportCallSessionEventWork(uv_work_t *work, int32_t status); 138 static int32_t ReportCallSessionEvent(CallSessionEvent &sessionEventOptions, EventCallback eventCallback); 139 static void ReportPeerDimensionsWork(uv_work_t *work, int32_t status); 140 static int32_t ReportPeerDimensions(PeerDimensionsDetail &peerDimensionsDetail, EventCallback eventCallback); 141 static void ReportCallDataUsageWork(uv_work_t *work, int32_t status); 142 static int32_t ReportCallDataUsage(int64_t dataUsage, EventCallback eventCallback); 143 static void ReportCameraCapabilitiesInfoWork(uv_work_t *work, int32_t status); 144 static int32_t ReportCameraCapabilitiesInfo(CameraCapabilities &cameraCapabilities, EventCallback eventCallback); 145 146 private: 147 EventCallback stateCallback_; 148 EventCallback eventCallback_; 149 EventCallback callDisconnectCauseCallback_; 150 EventCallback ottRequestCallback_; 151 EventCallback getWaitingCallback_; 152 EventCallback setWaitingCallback_; 153 EventCallback getRestrictionCallback_; 154 EventCallback setRestrictionCallback_; 155 EventCallback setRestrictionPasswordCallback_; 156 EventCallback getTransferCallback_; 157 EventCallback setTransferCallback_; 158 EventCallback startRttCallback_; 159 EventCallback stopRttCallback_; 160 EventCallback mmiCodeCallback_; 161 EventCallback closeUnfinishedUssdCallback_; 162 EventCallback audioDeviceCallback_; 163 EventCallback postDialDelayCallback_; 164 EventCallback imsCallModeCallback_; 165 EventCallback peerDimensionsCallback_; 166 EventCallback callDataUsageCallback_; 167 EventCallback cameraCapabilitiesCallback_; 168 EventCallback callSessionEventCallback_; 169 using CallResultReportIdProcessorFunc = std::function<int32_t(AppExecFwk::PacMap &resultInfo)>; 170 std::map<CallResultReportId, CallResultReportIdProcessorFunc> memberFuncMap_; 171 std::mutex mutex_; 172 int32_t getCallTransferReason_ = -1; 173 }; 174 } // namespace Telephony 175 } // namespace OHOS 176 177 #endif // NAPI_CALL_ABILITY_CALLBACK_H 178