1/* 2 * Copyright (C) 2021 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#include "bluetooth_call_policy.h" 17 18#include "call_manager_errors.h" 19#include "telephony_log_wrapper.h" 20 21namespace OHOS { 22namespace Telephony { 23BluetoothCallPolicy::BluetoothCallPolicy() {} 24 25BluetoothCallPolicy::~BluetoothCallPolicy() {} 26 27int32_t BluetoothCallPolicy::AnswerCallPolicy(int32_t &callId) 28{ 29 if (IsCallExist(TelCallState::CALL_STATUS_INCOMING, callId)) { 30 TELEPHONY_LOGI("incoming call is exist, callId:%{public}d", callId); 31 return TELEPHONY_SUCCESS; 32 } 33 if (IsCallExist(TelCallState::CALL_STATUS_WAITING, callId)) { 34 TELEPHONY_LOGI("waiting call is exist, callId:%{public}d", callId); 35 return TELEPHONY_SUCCESS; 36 } 37 TELEPHONY_LOGW("AnswerCallPolicy failed"); 38 return CALL_ERR_ILLEGAL_CALL_OPERATION; 39} 40 41int32_t BluetoothCallPolicy::RejectCallPolicy(int32_t &callId) 42{ 43 if (IsCallExist(TelCallState::CALL_STATUS_INCOMING, callId)) { 44 TELEPHONY_LOGI("incoming call is exist, callId:%{public}d", callId); 45 return TELEPHONY_SUCCESS; 46 } 47 if (IsCallExist(TelCallState::CALL_STATUS_WAITING, callId)) { 48 TELEPHONY_LOGI("waiting call is exist, callId:%{public}d", callId); 49 return TELEPHONY_SUCCESS; 50 } 51 TELEPHONY_LOGW("RejectCallPolicy failed"); 52 return CALL_ERR_ILLEGAL_CALL_OPERATION; 53} 54 55int32_t BluetoothCallPolicy::HoldCallPolicy(int32_t &callId) 56{ 57 if (IsCallExist(TelCallState::CALL_STATUS_ACTIVE, callId)) { 58 TELEPHONY_LOGI("active call is exist, callId:%{public}d", callId); 59 return TELEPHONY_SUCCESS; 60 } 61 TELEPHONY_LOGW("HoldCallPolicy failed"); 62 return CALL_ERR_ILLEGAL_CALL_OPERATION; 63} 64 65int32_t BluetoothCallPolicy::UnHoldCallPolicy(int32_t &callId) 66{ 67 if (IsCallExist(TelCallState::CALL_STATUS_ACTIVE, callId)) { 68 TELEPHONY_LOGI("active call is exist, callId:%{public}d", callId); 69 return CALL_ERR_ILLEGAL_CALL_OPERATION; 70 } 71 if (IsCallExist(TelCallState::CALL_STATUS_HOLDING, callId)) { 72 TELEPHONY_LOGI("holding call is exist, callId:%{public}d", callId); 73 return TELEPHONY_SUCCESS; 74 } 75 TELEPHONY_LOGW("HoldCallPolicy failed"); 76 return CALL_ERR_ILLEGAL_CALL_OPERATION; 77} 78 79int32_t BluetoothCallPolicy::HangUpPolicy(int32_t &callId) 80{ 81 if (IsCallExist(TelCallState::CALL_STATUS_ACTIVE, callId)) { 82 TELEPHONY_LOGI("active call is exist, callId:%{public}d", callId); 83 return TELEPHONY_SUCCESS; 84 } 85 if (IsCallExist(TelCallState::CALL_STATUS_DIALING, callId)) { 86 TELEPHONY_LOGI("dialing call is exist, callId:%{public}d", callId); 87 return TELEPHONY_SUCCESS; 88 } 89 if (IsCallExist(TelCallState::CALL_STATUS_ALERTING, callId)) { 90 TELEPHONY_LOGI("alerting call is exist, callId:%{public}d", callId); 91 return TELEPHONY_SUCCESS; 92 } 93 if (IsCallExist(TelCallState::CALL_STATUS_INCOMING, callId)) { 94 TELEPHONY_LOGI("incoming call is exist, callId:%{public}d", callId); 95 return TELEPHONY_SUCCESS; 96 } 97 if (IsCallExist(TelCallState::CALL_STATUS_WAITING, callId)) { 98 TELEPHONY_LOGI("waiting call is exist, callId:%{public}d", callId); 99 return TELEPHONY_SUCCESS; 100 } 101 if (IsCallExist(TelCallState::CALL_STATUS_HOLDING, callId)) { 102 TELEPHONY_LOGI("holding call is exist, callId:%{public}d", callId); 103 return TELEPHONY_SUCCESS; 104 } 105 TELEPHONY_LOGW("HangUpPolicy failed"); 106 return CALL_ERR_ILLEGAL_CALL_OPERATION; 107} 108 109int32_t BluetoothCallPolicy::SwitchCallPolicy(int32_t &callId) 110{ 111 if (IsCallExist(TelCallState::CALL_STATUS_ACTIVE) && 112 IsCallExist(TelCallState::CALL_STATUS_HOLDING, callId)) { 113 TELEPHONY_LOGI("active call and holding call are exist, callId:%{public}d", callId); 114 return TELEPHONY_SUCCESS; 115 } 116 TELEPHONY_LOGW("SwitchCallPolicy failed"); 117 return CALL_ERR_ILLEGAL_CALL_OPERATION; 118} 119 120int32_t BluetoothCallPolicy::StartDtmfPolicy(int32_t &callId) 121{ 122 if (IsCallExist(TelCallState::CALL_STATUS_ACTIVE, callId)) { 123 TELEPHONY_LOGI("active call is exist, callId:%{public}d", callId); 124 return TELEPHONY_SUCCESS; 125 } 126 if (IsCallExist(TelCallState::CALL_STATUS_ALERTING, callId)) { 127 TELEPHONY_LOGI("alerting call is exist, callId:%{public}d", callId); 128 return TELEPHONY_SUCCESS; 129 } 130 if (IsCallExist(TelCallState::CALL_STATUS_DIALING, callId)) { 131 TELEPHONY_LOGI("dialing call is exist, callId:%{public}d", callId); 132 return TELEPHONY_SUCCESS; 133 } 134 if (IsCallExist(TelCallState::CALL_STATUS_HOLDING, callId)) { 135 TELEPHONY_LOGI("holding call is exist, callId:%{public}d", callId); 136 return TELEPHONY_SUCCESS; 137 } 138 TELEPHONY_LOGW("StartDtmfPolicy failed"); 139 return CALL_ERR_ILLEGAL_CALL_OPERATION; 140} 141 142int32_t BluetoothCallPolicy::CombineConferencePolicy(int32_t &callId) 143{ 144 if (IsCallExist(TelCallState::CALL_STATUS_ACTIVE, callId) && 145 IsCallExist(TelCallState::CALL_STATUS_HOLDING)) { 146 TELEPHONY_LOGI("active call and holding call are exist, callId:%{public}d", callId); 147 return TELEPHONY_SUCCESS; 148 } 149 TELEPHONY_LOGW("CombineConferencePolicy failed"); 150 return CALL_ERR_ILLEGAL_CALL_OPERATION; 151} 152 153int32_t BluetoothCallPolicy::SeparateConferencePolicy(int32_t &callId) 154{ 155 if (IsConferenceCallExist(TelConferenceState::TEL_CONFERENCE_ACTIVE, callId) || 156 IsConferenceCallExist(TelConferenceState::TEL_CONFERENCE_HOLDING, callId)) { 157 TELEPHONY_LOGI("conference call is exist, callId:%{public}d", callId); 158 return TELEPHONY_SUCCESS; 159 } 160 TELEPHONY_LOGW("SeparateConferencePolicy failed"); 161 return CALL_ERR_ILLEGAL_CALL_OPERATION; 162} 163 164int32_t BluetoothCallPolicy::KickOutFromConferencePolicy(int32_t &callId) 165{ 166 if (IsConferenceCallExist(TelConferenceState::TEL_CONFERENCE_ACTIVE, callId) || 167 IsConferenceCallExist(TelConferenceState::TEL_CONFERENCE_HOLDING, callId)) { 168 TELEPHONY_LOGI("conference call is exist, callId:%{public}d", callId); 169 return TELEPHONY_SUCCESS; 170 } 171 TELEPHONY_LOGW("KickOutFromConferencePolicy failed"); 172 return CALL_ERR_ILLEGAL_CALL_OPERATION; 173} 174} // namespace Telephony 175} // namespace OHOS 176