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 CELLULAR_CALL_HANDLER_H 17 #define CELLULAR_CALL_HANDLER_H 18 19 #include <memory> 20 21 #include "cellular_call_config.h" 22 #include "cellular_call_data_struct.h" 23 #include "cellular_call_register.h" 24 #include "common_event.h" 25 #include "common_event_manager.h" 26 #include "common_event_support.h" 27 #include "cs_control.h" 28 #include "ims_control.h" 29 #include "telephony_log_wrapper.h" 30 31 namespace OHOS { 32 namespace Telephony { 33 class CellularCallHandler : public AppExecFwk::EventHandler, public EventFwk::CommonEventSubscriber { 34 public: 35 /** 36 * CellularCallHandler constructor 37 * 38 * @param runner 39 * @param subscriberInfo 40 */ 41 explicit CellularCallHandler(const std::shared_ptr<AppExecFwk::EventRunner> &runner, 42 const EventFwk::CommonEventSubscribeInfo &subscriberInfo); 43 44 /** 45 * ~CellularCallHandler destructor 46 */ 47 ~CellularCallHandler() = default; 48 49 /** 50 * ProcessEvent. 51 * 52 * @param CellularCallRadioResponseEvent, Process Radio Response Event . 53 */ 54 void ProcessEvent(const AppExecFwk::InnerEvent::Pointer &event) override; 55 56 /** 57 * Receive Operator Config Change event and process. 58 * 59 * @param CommonEventData, Process Operator Config Change . 60 */ 61 void OnReceiveEvent(const EventFwk::CommonEventData &data) override; 62 63 /** 64 * Set Slot Id 65 * 66 * @param id 67 */ 68 void SetSlotId(int32_t id); 69 70 /** 71 * Get Slot Id 72 * @return id 73 */ 74 int32_t GetSlotId(); 75 76 void RegisterImsCallCallbackHandler(); 77 78 void SimStateChangeReport(const AppExecFwk::InnerEvent::Pointer &event); 79 80 void SimRecordsLoadedReport(const AppExecFwk::InnerEvent::Pointer &event); 81 82 void DialResponse(const AppExecFwk::InnerEvent::Pointer &event); 83 84 void CommonResultEventHandling(const AppExecFwk::InnerEvent::Pointer &event, CellularCallEventInfo &eventInfo); 85 86 void CommonResultResponse(const AppExecFwk::InnerEvent::Pointer &event); 87 88 void SendDtmfResponse(const AppExecFwk::InnerEvent::Pointer &event); 89 90 void StartDtmfResponse(const AppExecFwk::InnerEvent::Pointer &event); 91 92 void StopDtmfResponse(const AppExecFwk::InnerEvent::Pointer &event); 93 94 void GetCsCallsDataResponse(const AppExecFwk::InnerEvent::Pointer &event); 95 96 void GetImsCallsDataResponse(const AppExecFwk::InnerEvent::Pointer &event); 97 98 void CsCallStatusInfoReport(const AppExecFwk::InnerEvent::Pointer &event); 99 100 void ImsCallStatusInfoReport(const AppExecFwk::InnerEvent::Pointer &event); 101 102 void ReportEccChanged(const AppExecFwk::InnerEvent::Pointer &event); 103 104 void SetDomainPreferenceModeResponse(const AppExecFwk::InnerEvent::Pointer &event); 105 106 void GetDomainPreferenceModeResponse(const AppExecFwk::InnerEvent::Pointer &event); 107 108 void SetImsSwitchStatusResponse(const AppExecFwk::InnerEvent::Pointer &event); 109 110 void GetImsSwitchStatusResponse(const AppExecFwk::InnerEvent::Pointer &event); 111 112 void UssdNotifyResponse(const AppExecFwk::InnerEvent::Pointer &event); 113 114 void SsNotifyResponse(const AppExecFwk::InnerEvent::Pointer &event); 115 116 void CallRingBackVoiceResponse(const AppExecFwk::InnerEvent::Pointer &event); 117 118 void SetMuteResponse(const AppExecFwk::InnerEvent::Pointer &event); 119 120 void GetMuteResponse(const AppExecFwk::InnerEvent::Pointer &event); 121 122 void GetEmergencyCallListResponse(const AppExecFwk::InnerEvent::Pointer &event); 123 124 void SetEmergencyCallListResponse(const AppExecFwk::InnerEvent::Pointer &event); 125 126 void GetCallFailReasonResponse(const AppExecFwk::InnerEvent::Pointer &event); 127 128 void UpdateSrvccStateReport(const AppExecFwk::InnerEvent::Pointer &event); 129 130 void SrvccStateCompleted(); 131 132 public: 133 const uint32_t REGISTER_HANDLER_ID = 10003; 134 int32_t srvccState_ = SrvccState::SRVCC_NONE; 135 136 private: 137 bool IsCanRequestCallsData(); 138 139 int64_t CurrentTimeMillis(); 140 141 void GetCsCallData(const AppExecFwk::InnerEvent::Pointer &event); 142 143 void GetImsCallData(const AppExecFwk::InnerEvent::Pointer &event); 144 145 void GetCsCallsDataRequest(const AppExecFwk::InnerEvent::Pointer &event); 146 147 void GetImsCallsDataRequest(const AppExecFwk::InnerEvent::Pointer &event); 148 149 void RegisterHandler(const AppExecFwk::InnerEvent::Pointer &event); 150 151 void GetMMIResponse(const AppExecFwk::InnerEvent::Pointer &event); 152 153 void GetCallWaitingResponse(const AppExecFwk::InnerEvent::Pointer &event); 154 155 void SetCallWaitingResponse(const AppExecFwk::InnerEvent::Pointer &event); 156 157 void GetClirResponse(const AppExecFwk::InnerEvent::Pointer &event); 158 159 void SetClirResponse(const AppExecFwk::InnerEvent::Pointer &event); 160 161 void GetClipResponse(const AppExecFwk::InnerEvent::Pointer &event); 162 163 void GetCallTransferResponse(const AppExecFwk::InnerEvent::Pointer &event); 164 165 void SetCallTransferInfoResponse(const AppExecFwk::InnerEvent::Pointer &event); 166 167 void GetCallRestrictionResponse(const AppExecFwk::InnerEvent::Pointer &event); 168 169 void SetCallRestrictionResponse(const AppExecFwk::InnerEvent::Pointer &event); 170 171 void SendUssdResponse(const AppExecFwk::InnerEvent::Pointer &event); 172 173 void SendUnlockPinPukResponse(const AppExecFwk::InnerEvent::Pointer &event); 174 175 void InitBasicFuncMap(); 176 177 void InitConfigFuncMap(); 178 179 void InitSupplementFuncMap(); 180 181 void InitActiveReportFuncMap(); 182 183 void ReportCsCallsData(const CallInfoList &callInfoList); 184 185 void ReportImsCallsData(const ImsCurrentCallList &imsCallInfoList); 186 187 void HandleOperatorConfigChanged(const AppExecFwk::InnerEvent::Pointer &event); 188 189 void UpdateRsrvccStateReport(const AppExecFwk::InnerEvent::Pointer &event); 190 191 #ifdef CALL_MANAGER_AUTO_START_OPTIMIZE 192 /** 193 * If radio state change get call manager service 194 * 195 * @param AppExecFwk::InnerEvent::Pointer 196 */ 197 void RadioStateChangeProcess(const AppExecFwk::InnerEvent::Pointer &event); 198 #endif 199 200 private: 201 void CellularCallIncomingStartTrace(const int32_t state); 202 void CellularCallIncomingFinishTrace(const int32_t state); 203 204 private: 205 int32_t slotId_ = DEFAULT_SIM_SLOT_ID; 206 int64_t lastTime_ = 0L; 207 int64_t lastCallsDataFlag_ = 0L; 208 using RequestFuncType = void (CellularCallHandler::*)(const AppExecFwk::InnerEvent::Pointer &event); 209 std::map<uint32_t, RequestFuncType> requestFuncMap_; 210 std::shared_ptr<CellularCallRegister> registerInstance_ = DelayedSingleton<CellularCallRegister>::GetInstance(); 211 bool isInCsRedial_ = false; 212 }; 213 } // namespace Telephony 214 } // namespace OHOS 215 216 #endif 217