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 27 /** 28 * Singleton 29 * @ClassName:CallStatusManager 30 * @Description:CallStatusManager is designed for watching call state changes, 31 * when call state changes, cellularcall will notify callstatusmanager to handle it. 32 * call state: idle,disconnected, disconnecting,dialing,alerting,active,holding,waiting 33 * incoming 34 */ 35 namespace OHOS { 36 namespace Telephony { 37 const int32_t SLOT_NUM = 2; 38 39 class CallStatusManager : public CallStatusPolicy { 40 public: 41 CallStatusManager(); 42 ~CallStatusManager(); 43 int32_t Init(); 44 int32_t UnInit(); 45 int32_t HandleCallReportInfo(const CallDetailInfo &info); 46 void HandleDsdaInfo(int32_t slotId); 47 int32_t HandleCallsReportInfo(const CallDetailsInfo &info); 48 int32_t HandleDisconnectedCause(const DisconnectedDetails &details); 49 int32_t HandleEventResultReportInfo(const CellularCallEventInfo &info); 50 int32_t HandleOttEventReportInfo(const OttCallEventInfo &info); 51 int32_t HandleVoipCallReportInfo(const CallDetailInfo &info); 52 void CallFilterCompleteResult(const CallDetailInfo &info); 53 54 private: 55 void InitCallBaseEvent(); 56 int32_t IncomingHandle(const CallDetailInfo &info); 57 int32_t IncomingVoipCallHandle(const CallDetailInfo &info); 58 int32_t DialingHandle(const CallDetailInfo &info); 59 int32_t ActiveHandle(const CallDetailInfo &info); 60 int32_t ActiveVoipCallHandle(const CallDetailInfo &info); 61 int32_t HoldingHandle(const CallDetailInfo &info); 62 int32_t WaitingHandle(const CallDetailInfo &info); 63 int32_t AlertHandle(const CallDetailInfo &info); 64 int32_t DisconnectingHandle(const CallDetailInfo &info); 65 int32_t DisconnectedVoipCallHandle(const CallDetailInfo &info); 66 int32_t DisconnectedHandle(const CallDetailInfo &info); 67 void HandleHoldCallOrAutoAnswerCall(const sptr<CallBase> call, 68 std::vector<std::u16string> callIdList, CallRunningState previousState, TelCallState priorState); 69 void IsCanUnHold(int32_t activeCallNum, int32_t waitingCallNum, int32_t size, bool &canUnHold); 70 void AutoAnswer(int32_t activeCallNum, int32_t waitingCallNum); 71 void AutoHandleForDsda( 72 bool canSwitchCallState, TelCallState priorState, int32_t activeCallNum, int32_t slotId, bool continueAnswer); 73 void AutoAnswerForVoiceCall(sptr<CallBase> ringCall, int32_t slotId, bool continueAnswer); 74 void AutoAnswerForVideoCall(int32_t activeCallNum); 75 void AutoUnHoldForDsda(bool canSwitchCallState, TelCallState priorState, int32_t activeCallNum, int32_t slotId); 76 sptr<CallBase> CreateNewCall(const CallDetailInfo &info, CallDirection dir); 77 sptr<CallBase> CreateNewCallByCallType( 78 DialParaInfo ¶Info, const CallDetailInfo &info, CallDirection dir, AppExecFwk::PacMap &extras); 79 sptr<CallBase> RefreshCallIfNecessary(const sptr<CallBase> &call, const CallDetailInfo &info); 80 void SetOriginalCallTypeForActiveState(sptr<CallBase> &call); 81 void SetOriginalCallTypeForDisconnectState(sptr<CallBase> &call); 82 void PackParaInfo( 83 DialParaInfo ¶Info, const CallDetailInfo &info, CallDirection dir, AppExecFwk::PacMap &extras); 84 int32_t UpdateCallState(sptr<CallBase> &call, TelCallState nextState); 85 int32_t ToSpeakerPhone(sptr<CallBase> &call); 86 int32_t TurnOffMute(sptr<CallBase> &call); 87 int32_t IncomingFilterPolicy(const CallDetailInfo &info); 88 void QueryCallerInfo(ContactInfo &contactInfo, std::string phoneNum); 89 int32_t UpdateDialingCallInfo(const CallDetailInfo &info); 90 void BuildAndQueryCallerInfo(sptr<CallBase> &call, const CallDetailInfo &info); 91 92 private: 93 CallDetailInfo callReportInfo_; 94 CallDetailsInfo callDetailsInfo_[SLOT_NUM]; 95 sptr<CallIncomingFilterManager> CallIncomingFilterManagerPtr_; 96 std::map<RequestResultEventId, CallAbilityEventId> mEventIdTransferMap_; 97 std::map<OttCallEventId, CallAbilityEventId> mOttEventIdTransferMap_; 98 VideoStateType priorVideoState_[SLOT_NUM]; 99 const std::string DETAIL_INFO = "detail_info"; 100 const std::string CONTENT_TYPE = "content_type"; 101 const std::string PHONE = "phone"; 102 const int32_t CALL_NUMBER = 2; 103 }; 104 } // namespace Telephony 105 } // namespace OHOS 106 107 #endif // CALL_STATUS_MANAGER_H 108