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 CALL_STATUS_MANAGER_H 17 #define CALL_STATUS_MANAGER_H 18 19 #include <map> 20 21 #include "refbase.h" 22 23 #include "common_type.h" 24 #include "call_status_policy.h" 25 #include "call_incoming_filter_manager.h" 26 #include "time_wait_helper.h" 27 #include "voip_call_manager_info.h" 28 29 /** 30 * Singleton 31 * @ClassName:CallStatusManager 32 * @Description:CallStatusManager is designed for watching call state changes, 33 * when call state changes, cellularcall will notify callstatusmanager to handle it. 34 * call state: idle,disconnected, disconnecting,dialing,alerting,active,holding,waiting 35 * incoming 36 */ 37 namespace OHOS { 38 namespace Telephony { 39 const int32_t SLOT_NUM = 2; 40 const std::string ANTIFRAUD_FEATURE = "const.telephony.antifraud.supported"; 41 42 class CallStatusManager : public CallStatusPolicy { 43 public: 44 CallStatusManager(); 45 ~CallStatusManager(); 46 int32_t Init(); 47 int32_t UnInit(); 48 int32_t HandleCallReportInfo(const CallDetailInfo &info); 49 void HandleDsdaInfo(int32_t slotId); 50 int32_t HandleCallsReportInfo(const CallDetailsInfo &info); 51 int32_t HandleDisconnectedCause(const DisconnectedDetails &details); 52 int32_t HandleEventResultReportInfo(const CellularCallEventInfo &info); 53 int32_t HandleOttEventReportInfo(const OttCallEventInfo &info); 54 int32_t HandleVoipCallReportInfo(const CallDetailInfo &info); 55 void CallFilterCompleteResult(const CallDetailInfo &info); 56 int32_t HandleVoipEventReportInfo(const VoipCallEventInfo &info); 57 void HandleCeliaCall(sptr<CallBase> &call); 58 void TriggerAntiFraud(int32_t antiFraudState); 59 int32_t GetAntiFraudSlotId(); 60 int32_t GetAntiFraudIndex(); 61 62 private: 63 void InitCallBaseEvent(); 64 int32_t IncomingHandle(const CallDetailInfo &info); 65 int32_t IncomingVoipCallHandle(const CallDetailInfo &info); 66 int32_t OutgoingVoipCallHandle(const CallDetailInfo &info); 67 int32_t AnsweredVoipCallHandle(const CallDetailInfo &info); 68 int32_t DisconnectingVoipCallHandle(const CallDetailInfo &info); 69 int32_t DialingHandle(const CallDetailInfo &info); 70 int32_t ActiveHandle(const CallDetailInfo &info); 71 int32_t ActiveVoipCallHandle(const CallDetailInfo &info); 72 int32_t HoldingHandle(const CallDetailInfo &info); 73 int32_t WaitingHandle(const CallDetailInfo &info); 74 int32_t AlertHandle(const CallDetailInfo &info); 75 int32_t DisconnectingHandle(const CallDetailInfo &info); 76 int32_t DisconnectedVoipCallHandle(const CallDetailInfo &info); 77 int32_t DisconnectedHandle(const CallDetailInfo &info); 78 void HandleHoldCallOrAutoAnswerCall(const sptr<CallBase> call, 79 std::vector<std::u16string> callIdList, CallRunningState previousState, TelCallState priorState); 80 void IsCanUnHold(int32_t activeCallNum, int32_t waitingCallNum, int32_t size, bool &canUnHold); 81 void AutoAnswer(int32_t activeCallNum, int32_t waitingCallNum); 82 void AutoHandleForDsda( 83 bool canSwitchCallState, TelCallState priorState, int32_t activeCallNum, int32_t slotId, bool continueAnswer); 84 void AutoAnswerForVoiceCall(sptr<CallBase> ringCall, int32_t slotId, bool continueAnswer); 85 void AutoAnswerForVideoCall(int32_t activeCallNum); 86 void AutoUnHoldForDsda(bool canSwitchCallState, TelCallState priorState, int32_t activeCallNum, int32_t slotId); 87 sptr<CallBase> CreateNewCall(const CallDetailInfo &info, CallDirection dir); 88 sptr<CallBase> CreateNewCallByCallType( 89 DialParaInfo ¶Info, const CallDetailInfo &info, CallDirection dir, AppExecFwk::PacMap &extras); 90 sptr<CallBase> CreateNewCallByCallTypeEx( 91 DialParaInfo ¶Info, const CallDetailInfo &info, CallDirection dir, AppExecFwk::PacMap &extras); 92 sptr<CallBase> RefreshCallIfNecessary(const sptr<CallBase> &call, const CallDetailInfo &info); 93 void SetOriginalCallTypeForActiveState(sptr<CallBase> &call); 94 void SetOriginalCallTypeForDisconnectState(sptr<CallBase> &call); 95 void PackParaInfo( 96 DialParaInfo ¶Info, const CallDetailInfo &info, CallDirection dir, AppExecFwk::PacMap &extras); 97 int32_t UpdateCallState(sptr<CallBase> &call, TelCallState nextState); 98 int32_t ToSpeakerPhone(sptr<CallBase> &call); 99 int32_t TurnOffMute(sptr<CallBase> &call); 100 int32_t IncomingFilterPolicy(const CallDetailInfo &info); 101 void QueryCallerInfo(ContactInfo &contactInfo, std::string phoneNum); 102 void SetAntiFraudSlotId(int32_t slotId); 103 void SetAntiFraudIndex(int32_t index); 104 void SetupAntiFraudService(const sptr<CallBase> &call, const CallDetailInfo &info); 105 void StopAntiFraudDetect(sptr<CallBase> &call, const CallDetailInfo &info); 106 void UpdateAntiFraudState(sptr<CallBase> &call, int32_t antiFraudState); 107 bool IsContactPhoneNum(const std::string &phoneNum); 108 int32_t UpdateDialingCallInfo(const CallDetailInfo &info); 109 void SetContactInfo(sptr<CallBase> &call, std::string phoneNum); 110 int32_t HandleRejectCall(sptr<CallBase> &call, bool isBlock); 111 bool ShouldRejectIncomingCall(); 112 bool ShouldBlockIncomingCall(const sptr<CallBase> &call, const CallDetailInfo &info); 113 bool IsRingOnceCall(const sptr<CallBase> &call, const CallDetailInfo &info); 114 int32_t HandleRingOnceCall(sptr<CallBase> &call); 115 void CarrierAndVoipConflictProcess(int32_t callId); 116 void SetVideoCallState(sptr<CallBase> &call, TelCallState nextState); 117 bool IsFocusModeOpen(); 118 bool IsRejectCall(sptr<CallBase> &call, const CallDetailInfo &info, bool &block); 119 void CreateAndSaveNewCall(const CallDetailInfo &info, CallDirection direction); 120 int32_t UpdateCallStateAndHandleDsdsMode(const CallDetailInfo &info, sptr<CallBase> &call); 121 bool IsDcCallConneceted(); 122 void HandleDialWhenHolding(int32_t callId, sptr<CallBase> &call); 123 void SetConferenceCall(std::vector<sptr<CallBase>>); 124 std::vector<sptr<CallBase>> GetConferenceCallList(int32_t slotId); 125 void UpdateCallDetailsInfo(const CallDetailsInfo &info); 126 bool IsDistributeCallSourceStatus(); 127 void HandleBluetoothCallReportInfo(const CallDetailInfo &info); 128 void SetBtCallDialByPhone(const sptr<CallBase> &call, bool isBtCallDialByPhone); 129 void BtCallDialingHandle(sptr<CallBase> &call, const CallDetailInfo &info); 130 void SetDistributedDeviceDialing(sptr<CallBase> call, bool isDistributedDeviceDialing); 131 void BtCallDialingHandleFirst(sptr<CallBase> call, const CallDetailInfo &infol); 132 int32_t HandleCallReportInfoEx(const CallDetailInfo &info); 133 void ClearPendingState(sptr<CallBase> &call); 134 void RefreshCallDisconnectReason(const sptr<CallBase> &call, int32_t reason); 135 #ifdef NOT_SUPPORT_MULTICALL 136 void AutoAnswerSecondCall(); 137 void OneCallAnswerAtPhone(int32_t callId); 138 #endif 139 bool IsFromTheSameNumberAtTheSameTime(const sptr<CallBase> &newCall); 140 void ModifyEsimType(); 141 int32_t RefreshOldCall(const CallDetailInfo &info, bool &isExistedOldCall); 142 bool IsCallMotionRecognitionEnable(const std::string &key); 143 void StartInComingCallMotionRecognition(); 144 void StartOutGoingCallMotionRecognition(); 145 void StopCallMotionRecognition(TelCallState nextState); 146 bool UpdateDialingHandle(const CallDetailInfo &info, bool &isDistributedDeviceDialing); 147 148 private: 149 CallDetailInfo callReportInfo_; 150 CallDetailsInfo callDetailsInfo_[SLOT_NUM]; 151 CallDetailsInfo tmpCallDetailsInfo_[SLOT_NUM]; 152 void HandleConnectingCallReportInfo(const CallDetailInfo &info); 153 sptr<CallIncomingFilterManager> CallIncomingFilterManagerPtr_; 154 std::map<RequestResultEventId, CallAbilityEventId> mEventIdTransferMap_; 155 std::map<OttCallEventId, CallAbilityEventId> mOttEventIdTransferMap_; 156 VideoStateType priorVideoState_[SLOT_NUM] = {VideoStateType::TYPE_VOICE}; 157 const std::string DETAIL_INFO = "detail_info"; 158 const std::string FORMAT_PHONE_NUMBER = "format_phone_number"; 159 const std::string CONTENT_TYPE = "content_type"; 160 const std::string PHONE = "phone"; 161 const std::string TYPE_ID = "type_id"; 162 const std::string IS_DELETED = "is_deleted"; 163 const int32_t CALL_NUMBER = 2; 164 std::unique_ptr<TimeWaitHelper> timeWaitHelper_ {nullptr}; 165 std::chrono::system_clock::time_point detectStartTime = std::chrono::system_clock::from_time_t(0); 166 int32_t antiFraudSlotId_ = -1; 167 int32_t antiFraudIndex_ = -1; 168 ffrt::mutex mutex_; 169 }; 170 } // namespace Telephony 171 } // namespace OHOS 172 173 #endif // CALL_STATUS_MANAGER_H 174