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 #include "network_search_handler.h"
17
18 #include "core_service_errors.h"
19 #include "ims_core_service_client.h"
20 #include "network_search_manager.h"
21 #include "telephony_log_wrapper.h"
22
23 namespace OHOS {
24 namespace Telephony {
25 static const int32_t REQ_INTERVAL = 30;
26 const std::map<uint32_t, NetworkSearchHandler::NsHandlerFunc> NetworkSearchHandler::memberFuncMap_ = {
27 { RadioEvent::RADIO_SIM_STATE_CHANGE, &NetworkSearchHandler::SimStateChange },
28 { RadioEvent::RADIO_IMSI_LOADED_READY, &NetworkSearchHandler::ImsiLoadedReady },
29 { RadioEvent::RADIO_SIM_RECORDS_LOADED, &NetworkSearchHandler::SimRecordsLoaded },
30 { RadioEvent::RADIO_STATE_CHANGED, &NetworkSearchHandler::RadioStateChange },
31 { RadioEvent::RADIO_NETWORK_STATE, &NetworkSearchHandler::GetNetworkStateInfo },
32 { RadioEvent::RADIO_RESTRICTED_STATE, &NetworkSearchHandler::RadioRestrictedState },
33 { RadioEvent::RADIO_DATA_REG_STATE, &NetworkSearchHandler::RadioRilDataRegState },
34 { RadioEvent::RADIO_VOICE_REG_STATE, &NetworkSearchHandler::RadioRilVoiceRegState },
35 { RadioEvent::RADIO_GET_SIGNAL_STRENGTH, &NetworkSearchHandler::RadioSignalStrength },
36 { RadioEvent::RADIO_SIGNAL_STRENGTH_UPDATE, &NetworkSearchHandler::RadioSignalStrength },
37 { RadioEvent::RADIO_OPERATOR, &NetworkSearchHandler::RadioRilOperator },
38 { RadioEvent::RADIO_NETWORK_SEARCH_RESULT, &NetworkSearchHandler::NetworkSearchResult },
39 { RadioEvent::RADIO_GET_NETWORK_SELECTION_MODE, &NetworkSearchHandler::GetNetworkSelectionModeResponse },
40 { RadioEvent::RADIO_SET_NETWORK_SELECTION_MODE, &NetworkSearchHandler::SetNetworkSelectionModeResponse },
41 { RadioEvent::RADIO_GET_STATUS, &NetworkSearchHandler::GetRadioStateResponse },
42 { RadioEvent::RADIO_SET_STATUS, &NetworkSearchHandler::SetRadioStateResponse },
43 { RadioEvent::RADIO_SET_PREFERRED_NETWORK_MODE, &NetworkSearchHandler::SetPreferredNetworkResponse },
44 { RadioEvent::RADIO_GET_PREFERRED_NETWORK_MODE, &NetworkSearchHandler::GetPreferredNetworkResponse },
45 { RadioEvent::RADIO_NETWORK_TIME_UPDATE, &NetworkSearchHandler::RadioNitzUpdate },
46 { RadioEvent::RADIO_IMS_SERVICE_STATUS_UPDATE, &NetworkSearchHandler::UpdateImsServiceStatus },
47 { RadioEvent::RADIO_IMS_REGISTER_STATE_UPDATE, &NetworkSearchHandler::UpdateImsRegisterState },
48 { RadioEvent::RADIO_GET_IMEI, &NetworkSearchHandler::RadioGetImei },
49 { RadioEvent::RADIO_GET_MEID, &NetworkSearchHandler::RadioGetMeid },
50 { RadioEvent::RADIO_GET_NEIGHBORING_CELL_INFO, &NetworkSearchHandler::RadioGetNeighboringCellInfo },
51 { RadioEvent::RADIO_GET_CURRENT_CELL_INFO, &NetworkSearchHandler::RadioGetCurrentCellInfo },
52 { RadioEvent::RADIO_CURRENT_CELL_UPDATE, &NetworkSearchHandler::RadioCurrentCellInfoUpdate },
53 { RadioEvent::RADIO_CHANNEL_CONFIG_UPDATE, &NetworkSearchHandler::RadioChannelConfigInfo },
54 { RadioEvent::RADIO_VOICE_TECH_CHANGED, &NetworkSearchHandler::RadioVoiceTechChange },
55 { RadioEvent::RADIO_GET_VOICE_TECH, &NetworkSearchHandler::RadioVoiceTechChange },
56 { RadioEvent::RADIO_SET_DATA_CONNECT_ACTIVE, &NetworkSearchHandler::DcPhysicalLinkActiveUpdate },
57 { RadioEvent::RADIO_GET_BASEBAND_VERSION, &NetworkSearchHandler::RadioGetBasebandVersion },
58 { RadioEvent::RADIO_SET_NR_OPTION_MODE, &NetworkSearchHandler::SetNrOptionModeResponse },
59 { RadioEvent::RADIO_GET_NR_OPTION_MODE, &NetworkSearchHandler::GetNrOptionModeResponse },
60 { RadioEvent::RADIO_GET_RRC_CONNECTION_STATE, &NetworkSearchHandler::RadioGetRrcConnectionState },
61 { RadioEvent::RADIO_RRC_CONNECTION_STATE_UPDATE, &NetworkSearchHandler::RadioGetRrcConnectionState },
62 { RadioEvent::NOTIFY_STATE_CHANGE, &NetworkSearchHandler::NotifyStateChange },
63 { RadioEvent::DELAY_NOTIFY_STATE_CHANGE, &NetworkSearchHandler::HandleDelayNotifyEvent },
64 { SettingEventCode::MSG_AUTO_TIME, &NetworkSearchHandler::AutoTimeChange },
65 { SettingEventCode::MSG_AUTO_TIMEZONE, &NetworkSearchHandler::AutoTimeZoneChange },
66 { SettingEventCode::MSG_AUTO_AIRPLANE_MODE, &NetworkSearchHandler::AirplaneModeChange }
67 };
68
NetworkSearchHandler(const std::shared_ptr<AppExecFwk::EventRunner> & runner,const std::weak_ptr<NetworkSearchManager> & networkSearchManager,const std::weak_ptr<ITelRilManager> & telRilManager,const std::weak_ptr<ISimManager> & simManager,int32_t slotId)69 NetworkSearchHandler::NetworkSearchHandler(const std::shared_ptr<AppExecFwk::EventRunner> &runner,
70 const std::weak_ptr<NetworkSearchManager> &networkSearchManager, const std::weak_ptr<ITelRilManager> &telRilManager,
71 const std::weak_ptr<ISimManager> &simManager, int32_t slotId)
72 : AppExecFwk::EventHandler(runner), networkSearchManager_(networkSearchManager), telRilManager_(telRilManager),
73 simManager_(simManager), slotId_(slotId)
74 {}
75
~NetworkSearchHandler()76 NetworkSearchHandler::~NetworkSearchHandler()
77 {
78 if (statusChangeListener_ != nullptr) {
79 statusChangeListener_.clear();
80 statusChangeListener_ = nullptr;
81 }
82 }
83
Init()84 bool NetworkSearchHandler::Init()
85 {
86 std::shared_ptr<NetworkSearchManager> nsm = networkSearchManager_.lock();
87 if (nsm == nullptr) {
88 TELEPHONY_LOGE("failed to get NetworkSearchManager");
89 return false;
90 }
91 networkRegister_ = std::make_unique<NetworkRegister>(nsm->GetNetworkSearchState(slotId_), nsm, slotId_);
92 if (networkRegister_ == nullptr) {
93 TELEPHONY_LOGE("failed to create new networkRegister slotId:%{public}d", slotId_);
94 return false;
95 }
96 networkRegister_->InitNrConversionConfig();
97 if (!InitOperatorName()) {
98 return false;
99 }
100 radioInfo_ = std::make_unique<RadioInfo>(nsm, slotId_);
101 if (radioInfo_ == nullptr) {
102 TELEPHONY_LOGE("failed to create new radioInfo slotId:%{public}d", slotId_);
103 return false;
104 }
105 signalInfo_ = std::make_unique<SignalInfo>();
106 if (signalInfo_ == nullptr) {
107 TELEPHONY_LOGE("failed to create new signalInfo slotId:%{public}d", slotId_);
108 return false;
109 }
110 networkSelection_ = std::make_unique<NetworkSelection>(networkSearchManager_, slotId_);
111 if (networkSelection_ == nullptr) {
112 TELEPHONY_LOGE("failed to create new networkSelection slotId:%{public}d", slotId_);
113 return false;
114 }
115 networkType_ = std::make_unique<NetworkType>(nsm, slotId_);
116 if (networkType_ == nullptr) {
117 TELEPHONY_LOGE("failed to create new networkType slotId:%{public}d", slotId_);
118 return false;
119 }
120 nitzUpdate_ = std::make_unique<NitzUpdate>(networkSearchManager_, slotId_);
121 if (nitzUpdate_ == nullptr) {
122 TELEPHONY_LOGE("failed to create new nitzUpdate slotId:%{public}d", slotId_);
123 return false;
124 }
125 cellInfo_ = std::make_unique<CellInfo>(networkSearchManager_, slotId_);
126 if (cellInfo_ == nullptr) {
127 TELEPHONY_LOGE("failed to create new CellInfo slotId:%{public}d", slotId_);
128 return false;
129 }
130 signalInfo_->InitSignalBar();
131 RegisterEvents();
132 return true;
133 }
134
InitOperatorName()135 bool NetworkSearchHandler::InitOperatorName()
136 {
137 std::shared_ptr<NetworkSearchManager> nsm = networkSearchManager_.lock();
138 EventFwk::MatchingSkills matchingSkills;
139 matchingSkills.AddEvent(CommonEventSupport::COMMON_EVENT_OPERATOR_CONFIG_CHANGED);
140 EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills);
141 subscriberInfo.SetThreadMode(EventFwk::CommonEventSubscribeInfo::COMMON);
142 operatorName_ = std::make_shared<OperatorName>(
143 subscriberInfo, nsm->GetNetworkSearchState(slotId_), nsm->GetSimManager(), networkSearchManager_, slotId_);
144 if (operatorName_ == nullptr) {
145 TELEPHONY_LOGE("failed to create new operatorName slotId:%{public}d", slotId_);
146 return false;
147 }
148 auto samgrProxy = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
149 statusChangeListener_ = new (std::nothrow) SystemAbilityStatusChangeListener(operatorName_);
150 if (samgrProxy == nullptr || statusChangeListener_ == nullptr) {
151 TELEPHONY_LOGE("InitOperatorName samgrProxy or statusChangeListener_ is nullptr");
152 } else {
153 int32_t ret = samgrProxy->SubscribeSystemAbility(COMMON_EVENT_SERVICE_ID, statusChangeListener_);
154 TELEPHONY_LOGI("InitOperatorName SubscribeSystemAbility result:%{public}d", ret);
155 }
156 return true;
157 }
158
RegisterEvents()159 void NetworkSearchHandler::RegisterEvents()
160 {
161 TELEPHONY_LOGD("NetworkSearchHandler::RegisterEvents start slotId:%{public}d", slotId_);
162 // Register SIM
163 {
164 std::shared_ptr<ISimManager> simManager = simManager_.lock();
165 if (simManager != nullptr) {
166 simManager->RegisterCoreNotify(slotId_, shared_from_this(), RadioEvent::RADIO_SIM_STATE_CHANGE);
167 simManager->RegisterCoreNotify(slotId_, shared_from_this(), RadioEvent::RADIO_IMSI_LOADED_READY);
168 simManager->RegisterCoreNotify(slotId_, shared_from_this(), RadioEvent::RADIO_SIM_RECORDS_LOADED);
169 }
170 }
171 // unsol RIL
172 {
173 std::shared_ptr<ITelRilManager> telRilManager = telRilManager_.lock();
174 if (telRilManager != nullptr) {
175 telRilManager->RegisterCoreNotify(slotId_, shared_from_this(), RadioEvent::RADIO_STATE_CHANGED, nullptr);
176 telRilManager->RegisterCoreNotify(
177 slotId_, shared_from_this(), RadioEvent::RADIO_SIGNAL_STRENGTH_UPDATE, nullptr);
178 telRilManager->RegisterCoreNotify(slotId_, shared_from_this(), RadioEvent::RADIO_NETWORK_STATE, nullptr);
179 telRilManager->RegisterCoreNotify(
180 slotId_, shared_from_this(), RadioEvent::RADIO_NETWORK_TIME_UPDATE, nullptr);
181 telRilManager->RegisterCoreNotify(
182 slotId_, shared_from_this(), RadioEvent::RADIO_CHANNEL_CONFIG_UPDATE, nullptr);
183 telRilManager->RegisterCoreNotify(
184 slotId_, shared_from_this(), RadioEvent::RADIO_VOICE_TECH_CHANGED, nullptr);
185 telRilManager->RegisterCoreNotify(
186 slotId_, shared_from_this(), RadioEvent::RADIO_CURRENT_CELL_UPDATE, nullptr);
187 telRilManager->RegisterCoreNotify(
188 slotId_, shared_from_this(), RadioEvent::RADIO_RRC_CONNECTION_STATE_UPDATE, nullptr);
189 }
190 }
191 // Register IMS
192 {
193 std::shared_ptr<ImsCoreServiceClient> imsCoreServiceClient =
194 DelayedSingleton<ImsCoreServiceClient>::GetInstance();
195 if (imsCoreServiceClient != nullptr) {
196 imsCoreServiceClient->RegisterImsCoreServiceCallbackHandler(slotId_, shared_from_this());
197 }
198 }
199 }
200
UnregisterEvents()201 void NetworkSearchHandler::UnregisterEvents()
202 {
203 {
204 std::shared_ptr<ISimManager> simManager = simManager_.lock();
205 if (simManager != nullptr) {
206 simManager->UnRegisterCoreNotify(slotId_, shared_from_this(), RadioEvent::RADIO_SIM_STATE_CHANGE);
207 simManager->UnRegisterCoreNotify(slotId_, shared_from_this(), RadioEvent::RADIO_IMSI_LOADED_READY);
208 simManager->UnRegisterCoreNotify(slotId_, shared_from_this(), RadioEvent::RADIO_SIM_RECORDS_LOADED);
209 }
210 }
211 // unsol
212 {
213 std::shared_ptr<ITelRilManager> telRilManager = telRilManager_.lock();
214 if (telRilManager != nullptr) {
215 telRilManager->UnRegisterCoreNotify(slotId_, shared_from_this(), RadioEvent::RADIO_STATE_CHANGED);
216 telRilManager->UnRegisterCoreNotify(slotId_, shared_from_this(), RadioEvent::RADIO_SIGNAL_STRENGTH_UPDATE);
217 telRilManager->UnRegisterCoreNotify(slotId_, shared_from_this(), RadioEvent::RADIO_NETWORK_STATE);
218 telRilManager->UnRegisterCoreNotify(slotId_, shared_from_this(), RadioEvent::RADIO_NETWORK_TIME_UPDATE);
219 telRilManager->UnRegisterCoreNotify(slotId_, shared_from_this(), RadioEvent::RADIO_CHANNEL_CONFIG_UPDATE);
220 telRilManager->UnRegisterCoreNotify(slotId_, shared_from_this(), RadioEvent::RADIO_VOICE_TECH_CHANGED);
221 telRilManager->UnRegisterCoreNotify(slotId_, shared_from_this(), RadioEvent::RADIO_CURRENT_CELL_UPDATE);
222 telRilManager->UnRegisterCoreNotify(
223 slotId_, shared_from_this(), RadioEvent::RADIO_RRC_CONNECTION_STATE_UPDATE);
224 }
225 }
226 }
227
ProcessEvent(const AppExecFwk::InnerEvent::Pointer & event)228 void NetworkSearchHandler::ProcessEvent(const AppExecFwk::InnerEvent::Pointer &event)
229 {
230 if (event == nullptr) {
231 return;
232 }
233 auto msgType = event->GetInnerEventId();
234 TELEPHONY_LOGD(
235 "NetworkSearchHandler::ProcessEvent received event slotId:%{public}d msgType:%{public}d", slotId_, msgType);
236 auto itFunc = memberFuncMap_.find(static_cast<RadioEvent>(msgType));
237 if (itFunc != memberFuncMap_.end()) {
238 auto memberFunc = itFunc->second;
239 if (memberFunc != nullptr) {
240 (this->*memberFunc)(event);
241 }
242 }
243 }
244
SimStateChange(const AppExecFwk::InnerEvent::Pointer &)245 void NetworkSearchHandler::SimStateChange(const AppExecFwk::InnerEvent::Pointer &)
246 {
247 std::shared_ptr<ISimManager> simManager = simManager_.lock();
248 if (simManager != nullptr) {
249 simManager->RegisterCoreNotify(slotId_, shared_from_this(), RadioEvent::RADIO_IMSI_LOADED_READY);
250 simManager->RegisterCoreNotify(slotId_, shared_from_this(), RadioEvent::RADIO_SIM_RECORDS_LOADED);
251 }
252 }
253
ImsiLoadedReady(const AppExecFwk::InnerEvent::Pointer & event)254 void NetworkSearchHandler::ImsiLoadedReady(const AppExecFwk::InnerEvent::Pointer &event)
255 {
256 SendUpdateCellLocationRequest();
257 InitGetNetworkSelectionMode();
258 GetNetworkStateInfo(event);
259 }
260
SimRecordsLoaded(const AppExecFwk::InnerEvent::Pointer &)261 void NetworkSearchHandler::SimRecordsLoaded(const AppExecFwk::InnerEvent::Pointer &)
262 {
263 auto networkSearchManager = networkSearchManager_.lock();
264 if (networkSearchManager != nullptr) {
265 int32_t csRadioTech = 0;
266 int32_t psRadioTech = 0;
267 networkSearchManager->GetCsRadioTech(slotId_, csRadioTech);
268 networkSearchManager->GetPsRadioTech(slotId_, psRadioTech);
269 UpdatePhone(static_cast<RadioTech>(csRadioTech), static_cast<RadioTech>(psRadioTech));
270 }
271
272 if (operatorName_ != nullptr) {
273 operatorName_->NotifySpnChanged();
274 }
275 }
276
RadioStateChange(const AppExecFwk::InnerEvent::Pointer & event)277 void NetworkSearchHandler::RadioStateChange(const AppExecFwk::InnerEvent::Pointer &event)
278 {
279 if (event == nullptr) {
280 TELEPHONY_LOGE("NetworkSearchHandler::RadioStateChange event is nullptr!");
281 return;
282 }
283 std::shared_ptr<HRilInt32Parcel> object = event->GetSharedObject<HRilInt32Parcel>();
284 if (object == nullptr) {
285 TELEPHONY_LOGE("NetworkSearchHandler::RadioStateChange object is nullptr!");
286 return;
287 }
288 auto networkSearchManager = networkSearchManager_.lock();
289 if (networkSearchManager == nullptr) {
290 TELEPHONY_LOGE("NetworkSearchHandler::RadioStateChange failed to get NetworkSearchManager");
291 return;
292 }
293 int32_t radioState = object->data;
294 TELEPHONY_LOGI("NetworkSearchHandler::RadioState change: %{public}d", radioState);
295 switch (radioState) {
296 case CORE_SERVICE_POWER_NOT_AVAILABLE:
297 case CORE_SERVICE_POWER_OFF: {
298 RadioOffOrUnavailableState(radioState);
299 break;
300 }
301 case CORE_SERVICE_POWER_ON: {
302 SendUpdateCellLocationRequest();
303 InitGetNetworkSelectionMode();
304 RadioOnState();
305 break;
306 }
307 default:
308 TELEPHONY_LOGI("Unhandled message with number: %{public}d", radioState);
309 break;
310 }
311 if (radioState == CORE_SERVICE_POWER_ON || radioState == CORE_SERVICE_POWER_OFF) {
312 networkSearchManager->SetRadioStateValue(slotId_, (ModemPowerState)radioState);
313 auto inner = networkSearchManager->FindManagerInner(slotId_);
314 if (inner != nullptr && inner->deviceStateHandler_ != nullptr) {
315 inner->deviceStateHandler_->ProcessRadioState();
316 }
317 networkSearchManager->InitSimRadioProtocol(slotId_);
318 } else {
319 networkSearchManager->SetRadioStateValue(slotId_, CORE_SERVICE_POWER_NOT_AVAILABLE);
320 }
321 if (operatorName_ != nullptr) {
322 operatorName_->NotifySpnChanged();
323 }
324 }
325
RadioRestrictedState(const AppExecFwk::InnerEvent::Pointer & event)326 void NetworkSearchHandler::RadioRestrictedState(const AppExecFwk::InnerEvent::Pointer &event)
327 {
328 if (event == nullptr) {
329 TELEPHONY_LOGE("NetworkSearchHandler::RadioRestrictedState event is nullptr!");
330 return;
331 }
332 if (networkRegister_ != nullptr) {
333 networkRegister_->ProcessRestrictedState(event);
334 }
335 TELEPHONY_LOGD("NetworkSearchHandler::RadioRestrictedState slotId:%{public}d", slotId_);
336 }
337
RadioRilDataRegState(const AppExecFwk::InnerEvent::Pointer & event)338 void NetworkSearchHandler::RadioRilDataRegState(const AppExecFwk::InnerEvent::Pointer &event)
339 {
340 if (event == nullptr) {
341 TELEPHONY_LOGE("NetworkSearchHandler::RadioRilDataRegState event is nullptr!");
342 return;
343 }
344 auto networkSearchManager = networkSearchManager_.lock();
345 if (networkSearchManager == nullptr ||
346 networkSearchManager->GetRadioState(slotId_) == static_cast<int>(ModemPowerState::CORE_SERVICE_POWER_OFF)) {
347 TELEPHONY_LOGI("radio is power off, no need update data reg state");
348 return;
349 }
350 if (networkRegister_ != nullptr) {
351 networkRegister_->ProcessPsRegister(event);
352 }
353 sptr<NetworkSearchCallBackBase> cellularCall = networkSearchManager->GetCellularCallCallBack();
354 if (cellularCall) {
355 int32_t imsType = 1;
356 cellularCall->SetReadyToCall(slotId_, imsType, true);
357 }
358 TELEPHONY_LOGD("NetworkSearchHandler::RadioRilDataRegState slotId:%{public}d", slotId_);
359 }
360
RadioRilVoiceRegState(const AppExecFwk::InnerEvent::Pointer & event)361 void NetworkSearchHandler::RadioRilVoiceRegState(const AppExecFwk::InnerEvent::Pointer &event)
362 {
363 if (event == nullptr) {
364 TELEPHONY_LOGE("NetworkSearchHandler::RadioRilVoiceRegState event is nullptr!");
365 return;
366 }
367 auto networkSearchManager = networkSearchManager_.lock();
368 if (networkSearchManager == nullptr ||
369 networkSearchManager->GetRadioState(slotId_) == static_cast<int>(ModemPowerState::CORE_SERVICE_POWER_OFF)) {
370 TELEPHONY_LOGI("radio is power off, no need update voice reg state");
371 return;
372 }
373 if (networkRegister_ != nullptr) {
374 networkRegister_->ProcessCsRegister(event);
375 }
376
377 sptr<NetworkSearchCallBackBase> cellularCall = networkSearchManager->GetCellularCallCallBack();
378 if (cellularCall) {
379 int32_t csType = 0;
380 cellularCall->SetReadyToCall(slotId_, csType, true);
381 }
382 TELEPHONY_LOGD("NetworkSearchHandler::RadioRilVoiceRegState slotId:%{public}d", slotId_);
383 }
384
RadioSignalStrength(const AppExecFwk::InnerEvent::Pointer & event)385 void NetworkSearchHandler::RadioSignalStrength(const AppExecFwk::InnerEvent::Pointer &event)
386 {
387 if (event == nullptr) {
388 TELEPHONY_LOGE("NetworkSearchHandler::RadioSignalStrength event is nullptr!");
389 return;
390 }
391 if (signalInfo_ != nullptr) {
392 signalInfo_->ProcessSignalIntensity(slotId_, event);
393 }
394 TELEPHONY_LOGD("NetworkSearchHandler::RadioSignalStrength slotId:%{public}d", slotId_);
395 }
396
RadioRilOperator(const AppExecFwk::InnerEvent::Pointer & event)397 void NetworkSearchHandler::RadioRilOperator(const AppExecFwk::InnerEvent::Pointer &event)
398 {
399 if (event == nullptr) {
400 TELEPHONY_LOGE("NetworkSearchHandler::RadioRilOperator event is nullptr!");
401 return;
402 }
403 if (operatorName_ != nullptr) {
404 operatorName_->HandleOperatorInfo(event);
405 }
406 TELEPHONY_LOGD("NetworkSearchHandler::RadioRilOperator slotId:%{public}d", slotId_);
407 }
408
GetRilSignalIntensity(bool checkTime)409 void NetworkSearchHandler::GetRilSignalIntensity(bool checkTime)
410 {
411 TELEPHONY_LOGD("NetworkSearchHandler::GetRilSignalIntensity start...... slotId:%{public}d", slotId_);
412 if (!TimeOutCheck(lastTimeSignalReq_, checkTime)) {
413 return;
414 }
415
416 auto event = AppExecFwk::InnerEvent::Get(RadioEvent::RADIO_GET_SIGNAL_STRENGTH);
417 if (event != nullptr) {
418 event->SetOwner(shared_from_this());
419 std::shared_ptr<ITelRilManager> telRilManager = telRilManager_.lock();
420 if (telRilManager != nullptr) {
421 telRilManager->GetSignalStrength(slotId_, event);
422 }
423 }
424 }
425
GetNetworkStateInfo(const AppExecFwk::InnerEvent::Pointer &)426 void NetworkSearchHandler::GetNetworkStateInfo(const AppExecFwk::InnerEvent::Pointer &)
427 {
428 auto networkSearchManager = networkSearchManager_.lock();
429 if (networkSearchManager == nullptr) {
430 TELEPHONY_LOGE("failed to get NetworkSearchManager RadioState slotId:%{public}d", slotId_);
431 return;
432 }
433 std::shared_ptr<NetworkSearchState> networkSearchState = networkSearchManager->GetNetworkSearchState(slotId_);
434 if (networkSearchState == nullptr) {
435 TELEPHONY_LOGE("networkSearchState is null slotId:%{public}d", slotId_);
436 return;
437 }
438
439 ModemPowerState radioState = static_cast<ModemPowerState>(networkSearchManager->GetRadioState(slotId_));
440 TELEPHONY_LOGI("NetworkSearchHandler GetRadioState : %{public}d slotId:%{public}d", radioState, slotId_);
441 switch (radioState) {
442 case CORE_SERVICE_POWER_NOT_AVAILABLE:
443 case CORE_SERVICE_POWER_OFF:
444 RadioOffOrUnavailableState(radioState);
445 break;
446 case CORE_SERVICE_POWER_ON:
447 RadioOnState();
448 break;
449 default:
450 TELEPHONY_LOGI("Unhandled message with number: %{public}d slotId:%{public}d", radioState, slotId_);
451 break;
452 }
453 }
454
RadioOffOrUnavailableState(int32_t radioState) const455 void NetworkSearchHandler::RadioOffOrUnavailableState(int32_t radioState) const
456 {
457 TELEPHONY_LOGD("RadioOffOrUnavailableState enter... slotId:%{public}d", slotId_);
458
459 auto networkSearchManager = networkSearchManager_.lock();
460 if (networkSearchManager == nullptr) {
461 TELEPHONY_LOGE("RadioOffOrUnavailableState NetworkSearchHandler is null slotId:%{public}d", slotId_);
462 return;
463 }
464 std::shared_ptr<NetworkSearchState> networkSearchState = networkSearchManager->GetNetworkSearchState(slotId_);
465 if (networkSearchState == nullptr) {
466 TELEPHONY_LOGE("networkSearchState is null slotId:%{public}d", slotId_);
467 return;
468 }
469
470 networkSearchState->SetInitial();
471 RegServiceState regState = radioState == CORE_SERVICE_POWER_OFF ?
472 RegServiceState::REG_STATE_POWER_OFF : RegServiceState::REG_STATE_NO_SERVICE;
473 networkSearchState->SetNetworkState(regState, DomainType::DOMAIN_TYPE_CS);
474 networkSearchState->SetNetworkState(regState, DomainType::DOMAIN_TYPE_PS);
475 if (signalInfo_ != nullptr) {
476 signalInfo_->Reset();
477 }
478 if (cellInfo_ != nullptr) {
479 cellInfo_->ClearCellInfoList();
480 }
481 networkSearchState->NotifyStateChange();
482 networkSearchManager->UpdateNrOptionMode(slotId_, NrMode::NR_MODE_UNKNOWN);
483 bool isAirplaneModeOn = false;
484 if (networkSearchManager->GetAirplaneMode(isAirplaneModeOn) != TELEPHONY_SUCCESS) {
485 TELEPHONY_LOGE("RadioOffOrUnavailableState GetAirplaneMode fail slotId:%{public}d", slotId_);
486 }
487 if (!isAirplaneModeOn && radioState == CORE_SERVICE_POWER_OFF) {
488 networkSearchManager->SetRadioState(slotId_, static_cast<bool>(ModemPowerState::CORE_SERVICE_POWER_ON), 0);
489 }
490 sptr<NetworkSearchCallBackBase> cellularData = networkSearchManager->GetCellularDataCallBack();
491 if (cellularData) {
492 cellularData->ClearCellularDataConnections(slotId_);
493 TELEPHONY_LOGD("RadioOffOrUnavailableState ClearCellularDataConnections");
494 }
495 sptr<NetworkSearchCallBackBase> cellularCall = networkSearchManager->GetCellularCallCallBack();
496 if (cellularCall) {
497 cellularCall->ClearCellularCallList(slotId_);
498 TELEPHONY_LOGD("RadioOffOrUnavailableState ClearCellularCallList");
499 }
500 }
501
RadioOnState()502 void NetworkSearchHandler::RadioOnState()
503 {
504 GetRilOperatorInfo(false);
505 GetRilPsRegistration(false);
506 GetRilCsRegistration(false);
507 auto networkSearchManager = networkSearchManager_.lock();
508 if (networkSearchManager != nullptr) {
509 networkSearchManager->InitMsgNum(slotId_);
510 }
511 GetRilSignalIntensity(false);
512 }
513
GetRadioStateResponse(const AppExecFwk::InnerEvent::Pointer & event)514 void NetworkSearchHandler::GetRadioStateResponse(const AppExecFwk::InnerEvent::Pointer &event)
515 {
516 if (event == nullptr) {
517 TELEPHONY_LOGE("NetworkSearchHandler::GetRadioStateResponse event is nullptr!");
518 return;
519 }
520 if (radioInfo_ == nullptr) {
521 TELEPHONY_LOGE("RadioInfo is null slotId:%{public}d", slotId_);
522 return;
523 }
524 radioInfo_->ProcessGetRadioState(event);
525 }
526
SetRadioStateResponse(const AppExecFwk::InnerEvent::Pointer & event)527 void NetworkSearchHandler::SetRadioStateResponse(const AppExecFwk::InnerEvent::Pointer &event)
528 {
529 if (event == nullptr) {
530 TELEPHONY_LOGE("NetworkSearchHandler::SetRadioStateResponse event is nullptr!");
531 return;
532 }
533 if (radioInfo_ == nullptr) {
534 TELEPHONY_LOGE("RadioInfo is null slotId:%{public}d", slotId_);
535 return;
536 }
537 radioInfo_->ProcessSetRadioState(event);
538 }
539
GetRilOperatorInfo(bool checkTime)540 void NetworkSearchHandler::GetRilOperatorInfo(bool checkTime)
541 {
542 TELEPHONY_LOGD("NetworkSearchHandler::GetOperatorInfo start slotId:%{public}d", slotId_);
543 if (!TimeOutCheck(lastTimeOperatorReq_, checkTime)) {
544 return;
545 }
546
547 auto event = AppExecFwk::InnerEvent::Get(RadioEvent::RADIO_OPERATOR);
548 if (event != nullptr) {
549 event->SetOwner(shared_from_this());
550 std::shared_ptr<ITelRilManager> telRilManager = telRilManager_.lock();
551 if (telRilManager != nullptr) {
552 telRilManager->GetOperatorInfo(slotId_, event);
553 }
554 }
555 }
556
GetRilPsRegistration(bool checkTime)557 void NetworkSearchHandler::GetRilPsRegistration(bool checkTime)
558 {
559 TELEPHONY_LOGD("NetworkSearchHandler::GetPsRegStatus start slotId:%{public}d", slotId_);
560 if (!TimeOutCheck(lastTimePsRegistrationReq_, checkTime)) {
561 return;
562 }
563
564 auto event = AppExecFwk::InnerEvent::Get(RadioEvent::RADIO_DATA_REG_STATE);
565 if (event != nullptr) {
566 event->SetOwner(shared_from_this());
567 std::shared_ptr<ITelRilManager> telRilManager = telRilManager_.lock();
568 if (telRilManager != nullptr) {
569 telRilManager->GetPsRegStatus(slotId_, event);
570 }
571 }
572 }
573
InitGetNetworkSelectionMode()574 void NetworkSearchHandler::InitGetNetworkSelectionMode()
575 {
576 auto networkSearchManager = networkSearchManager_.lock();
577 if (networkSearchManager == nullptr) {
578 TELEPHONY_LOGE("InitGetNetworkSelectionMode networkSearchManager is null slotId:%{public}d", slotId_);
579 return;
580 }
581 networkSearchManager->GetNetworkSelectionMode(slotId_);
582 }
583
GetRilCsRegistration(bool checkTime)584 void NetworkSearchHandler::GetRilCsRegistration(bool checkTime)
585 {
586 TELEPHONY_LOGD("NetworkSearchHandler::GetCsRegStatus start slotId:%{public}d", slotId_);
587 if (!TimeOutCheck(lastTimeCsRegistrationReq_, checkTime)) {
588 return;
589 }
590
591 auto event = AppExecFwk::InnerEvent::Get(RadioEvent::RADIO_VOICE_REG_STATE);
592 if (event != nullptr) {
593 event->SetOwner(shared_from_this());
594 std::shared_ptr<ITelRilManager> telRilManager = telRilManager_.lock();
595 if (telRilManager != nullptr) {
596 telRilManager->GetCsRegStatus(slotId_, event);
597 }
598 }
599 }
600
NetworkSearchResult(const AppExecFwk::InnerEvent::Pointer & event)601 void NetworkSearchHandler::NetworkSearchResult(const AppExecFwk::InnerEvent::Pointer &event)
602 {
603 if (event == nullptr) {
604 TELEPHONY_LOGE("NetworkSearchHandler::NetworkSearchResult event is nullptr!");
605 return;
606 }
607 if (networkSelection_ == nullptr) {
608 TELEPHONY_LOGE("NetworkSearchResult NetworkSelection is null slotId:%{public}d", slotId_);
609 return;
610 }
611 networkSelection_->ProcessNetworkSearchResult(event);
612 }
613
SetNetworkSelectionModeResponse(const AppExecFwk::InnerEvent::Pointer & event)614 void NetworkSearchHandler::SetNetworkSelectionModeResponse(const AppExecFwk::InnerEvent::Pointer &event)
615 {
616 if (event == nullptr) {
617 TELEPHONY_LOGE("NetworkSearchHandler::SetNetworkSelectionModeResponse event is nullptr!");
618 return;
619 }
620 if (networkSelection_ == nullptr) {
621 TELEPHONY_LOGE("SetNetworkSelectionModeResponse NetworkSelection is null slotId:%{public}d", slotId_);
622 return;
623 }
624 networkSelection_->ProcessSetNetworkSelectionMode(event);
625 }
626
GetNetworkSelectionModeResponse(const AppExecFwk::InnerEvent::Pointer & event)627 void NetworkSearchHandler::GetNetworkSelectionModeResponse(const AppExecFwk::InnerEvent::Pointer &event)
628 {
629 if (event == nullptr) {
630 TELEPHONY_LOGE("NetworkSearchHandler::GetNetworkSelectionModeResponse event is nullptr!");
631 return;
632 }
633 if (networkSelection_ == nullptr) {
634 TELEPHONY_LOGE("GetNetworkSelectionModeResponse NetworkSelection is null slotId:%{public}d", slotId_);
635 return;
636 }
637 networkSelection_->ProcessGetNetworkSelectionMode(event);
638 }
639
GetSignalInfo(std::vector<sptr<SignalInformation>> & signals)640 void NetworkSearchHandler::GetSignalInfo(std::vector<sptr<SignalInformation>> &signals)
641 {
642 if (signalInfo_ != nullptr) {
643 signalInfo_->GetSignalInfoList(signals);
644 }
645 }
646
TimeOutCheck(int64_t & lastTime,bool checkTime)647 bool NetworkSearchHandler::TimeOutCheck(int64_t &lastTime, bool checkTime)
648 {
649 int64_t now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
650 if (!checkTime || (now - lastTime) > REQ_INTERVAL) {
651 lastTime = now;
652 return true;
653 }
654 return false;
655 }
656
GetPreferredNetworkResponse(const AppExecFwk::InnerEvent::Pointer & event)657 void NetworkSearchHandler::GetPreferredNetworkResponse(const AppExecFwk::InnerEvent::Pointer &event)
658 {
659 if (event == nullptr) {
660 TELEPHONY_LOGE("NetworkSearchHandler::GetPreferredNetworkResponse event is nullptr!");
661 return;
662 }
663 if (networkType_ != nullptr) {
664 networkType_->ProcessGetPreferredNetwork(event);
665 } else {
666 TELEPHONY_LOGE("GetPreferredNetworkResponse NetworkType is null slotId:%{public}d", slotId_);
667 }
668 }
669
SetPreferredNetworkResponse(const AppExecFwk::InnerEvent::Pointer & event)670 void NetworkSearchHandler::SetPreferredNetworkResponse(const AppExecFwk::InnerEvent::Pointer &event)
671 {
672 if (event == nullptr) {
673 TELEPHONY_LOGE("NetworkSearchHandler::SetPreferredNetworkResponse event is nullptr!");
674 return;
675 }
676 if (networkType_ != nullptr) {
677 networkType_->ProcessSetPreferredNetwork(event);
678 } else {
679 TELEPHONY_LOGE("SetPreferredNetworkResponse NetworkType is null slotId:%{public}d", slotId_);
680 }
681 }
682
RadioNitzUpdate(const AppExecFwk::InnerEvent::Pointer & event)683 void NetworkSearchHandler::RadioNitzUpdate(const AppExecFwk::InnerEvent::Pointer &event)
684 {
685 if (event == nullptr) {
686 TELEPHONY_LOGE("NetworkSearchHandler::RadioNitzUpdate event is nullptr!");
687 return;
688 }
689 if (nitzUpdate_ != nullptr) {
690 nitzUpdate_->ProcessNitzUpdate(event);
691 } else {
692 TELEPHONY_LOGE("RadioNitzUpdate nitzUpdate is null slotId:%{public}d", slotId_);
693 }
694 }
695
RadioGetImei(const AppExecFwk::InnerEvent::Pointer & event)696 void NetworkSearchHandler::RadioGetImei(const AppExecFwk::InnerEvent::Pointer &event)
697 {
698 if (event == nullptr) {
699 TELEPHONY_LOGE("NetworkSearchHandler::RadioGetImei event is nullptr!");
700 return;
701 }
702 TELEPHONY_LOGD("NetworkSearchHandler::RadioGetImei start slotId:%{public}d", slotId_);
703 if (radioInfo_ != nullptr) {
704 radioInfo_->ProcessGetImei(event);
705 } else {
706 TELEPHONY_LOGE("RadioGetImei radioInfo_ is null slotId:%{public}d", slotId_);
707 }
708 }
709
RadioGetMeid(const AppExecFwk::InnerEvent::Pointer & event)710 void NetworkSearchHandler::RadioGetMeid(const AppExecFwk::InnerEvent::Pointer &event)
711 {
712 TELEPHONY_LOGD("NetworkSearchHandler::RadioGetMeid start slotId:%{public}d", slotId_);
713 if (event == nullptr) {
714 TELEPHONY_LOGE("NetworkSearchHandler::RadioGetMeid event is nullptr!");
715 return;
716 }
717 if (radioInfo_ != nullptr) {
718 radioInfo_->ProcessGetMeid(event);
719 } else {
720 TELEPHONY_LOGE("RadioGetMeid radioInfo_ is null slotId:%{public}d", slotId_);
721 }
722 }
723
UpdatePhone(RadioTech csRadioTech,const RadioTech & psRadioTech) const724 void NetworkSearchHandler::UpdatePhone(RadioTech csRadioTech, const RadioTech &psRadioTech) const
725 {
726 if (radioInfo_ != nullptr) {
727 radioInfo_->UpdatePhone(csRadioTech, psRadioTech);
728 } else {
729 TELEPHONY_LOGE("UpdatePhone networkType is null slotId:%{public}d", slotId_);
730 }
731 }
732
RadioGetCurrentCellInfo(const AppExecFwk::InnerEvent::Pointer & event)733 void NetworkSearchHandler::RadioGetCurrentCellInfo(const AppExecFwk::InnerEvent::Pointer &event)
734 {
735 if (event == nullptr) {
736 TELEPHONY_LOGE("NetworkSearchHandler::RadioGetCurrentCellInfo event is nullptr!");
737 return;
738 }
739 if (cellInfo_ != nullptr) {
740 cellInfo_->ProcessCurrentCellInfo(event);
741 }
742 }
743
RadioCurrentCellInfoUpdate(const AppExecFwk::InnerEvent::Pointer & event)744 void NetworkSearchHandler::RadioCurrentCellInfoUpdate(const AppExecFwk::InnerEvent::Pointer &event)
745 {
746 if (event == nullptr) {
747 TELEPHONY_LOGE("NetworkSearchHandler::RadioCurrentCellInfoUpdate event is nullptr!");
748 return;
749 }
750 if (cellInfo_ != nullptr) {
751 cellInfo_->ProcessCurrentCellInfo(event);
752 }
753 }
754
RadioGetNeighboringCellInfo(const AppExecFwk::InnerEvent::Pointer & event)755 void NetworkSearchHandler::RadioGetNeighboringCellInfo(const AppExecFwk::InnerEvent::Pointer &event)
756 {
757 if (event == nullptr) {
758 TELEPHONY_LOGE("NetworkSearchHandler::RadioGetNeighboringCellInfo event is nullptr!");
759 return;
760 }
761 if (cellInfo_ != nullptr) {
762 cellInfo_->ProcessNeighboringCellInfo(event);
763 }
764 }
765
GetCellInfoList(std::vector<sptr<CellInformation>> & cells)766 int32_t NetworkSearchHandler::GetCellInfoList(std::vector<sptr<CellInformation>> &cells)
767 {
768 TELEPHONY_LOGD("NetworkSearchHandler::GetCellInfoList slotId:%{public}d", slotId_);
769 if (cellInfo_ != nullptr) {
770 cellInfo_->GetCellInfoList(cells);
771 return TELEPHONY_ERR_SUCCESS;
772 }
773 return TELEPHONY_ERR_LOCAL_PTR_NULL;
774 }
775
GetCellLocation()776 sptr<CellLocation> NetworkSearchHandler::GetCellLocation()
777 {
778 TELEPHONY_LOGD("NetworkSearchHandler::GetCellLocation slotId:%{public}d", slotId_);
779 if (cellInfo_ != nullptr) {
780 return cellInfo_->GetCellLocation();
781 }
782 return nullptr;
783 }
784
TimezoneRefresh()785 void NetworkSearchHandler::TimezoneRefresh()
786 {
787 TELEPHONY_LOGD("NetworkSearchHandler::TimezoneRefresh slotId:%{public}d", slotId_);
788 if (nitzUpdate_ != nullptr) {
789 nitzUpdate_->ProcessTimeZone();
790 }
791 }
792
SendUpdateCellLocationRequest()793 int32_t NetworkSearchHandler::SendUpdateCellLocationRequest()
794 {
795 std::vector<sptr<CellInformation>> cells;
796 if (cellInfo_ != nullptr) {
797 cellInfo_->GetCellInfoList(cells);
798 }
799 uint32_t curTime = static_cast<uint32_t>(time(0));
800 if ((curTime - lastCellRequestTime_) < cellRequestMinInterval_ && cells.size() != 0) {
801 TELEPHONY_LOGE("NetworkSearchHandler::SendUpdateCellLocationRequest interval is too short");
802 return TELEPHONY_ERR_SUCCESS;
803 }
804 TELEPHONY_LOGD("NetworkSearchHandler::SendUpdateCellLocationRequest slotId:%{public}d", slotId_);
805 std::shared_ptr<ITelRilManager> telRilManager = telRilManager_.lock();
806 auto event = AppExecFwk::InnerEvent::Get(RadioEvent::RADIO_GET_CURRENT_CELL_INFO);
807 if (event != nullptr && telRilManager != nullptr) {
808 lastCellRequestTime_ = curTime;
809 event->SetOwner(shared_from_this());
810 telRilManager->GetCurrentCellInfo(slotId_, event);
811 }
812 return TELEPHONY_ERR_SUCCESS;
813 }
814
UpdateCellLocation(int32_t techType,int32_t cellId,int32_t lac)815 void NetworkSearchHandler::UpdateCellLocation(int32_t techType, int32_t cellId, int32_t lac)
816 {
817 TELEPHONY_LOGD("NetworkSearchHandler::UpdateCellLocation slotId:%{public}d", slotId_);
818 if (cellInfo_ != nullptr) {
819 cellInfo_->UpdateCellLocation(techType, cellId, lac);
820 }
821 }
822
GetPhoneType()823 PhoneType NetworkSearchHandler::GetPhoneType()
824 {
825 TELEPHONY_LOGD("NetworkSearchHandler::GetPhoneType");
826 if (radioInfo_ != nullptr) {
827 return radioInfo_->GetPhoneType();
828 }
829 return PhoneType::PHONE_TYPE_IS_NONE;
830 }
831
RadioChannelConfigInfo(const AppExecFwk::InnerEvent::Pointer & event)832 void NetworkSearchHandler::RadioChannelConfigInfo(const AppExecFwk::InnerEvent::Pointer &event)
833 {
834 if (event == nullptr) {
835 TELEPHONY_LOGE("NetworkSearchHandler::RadioChannelConfigInfo event is nullptr!");
836 return;
837 }
838 if (networkRegister_ != nullptr) {
839 networkRegister_->ProcessChannelConfigInfo(event);
840 }
841 TELEPHONY_LOGD("NetworkSearchHandler::RadioChannelConfigInfo slotId:%{public}d", slotId_);
842 }
843
DcPhysicalLinkActiveUpdate(const AppExecFwk::InnerEvent::Pointer & event)844 void NetworkSearchHandler::DcPhysicalLinkActiveUpdate(const AppExecFwk::InnerEvent::Pointer &event)
845 {
846 if (event == nullptr) {
847 return;
848 }
849 bool isActive = (event->GetParam() == 1);
850 if (networkRegister_ != nullptr) {
851 networkRegister_->DcPhysicalLinkActiveUpdate(isActive);
852 }
853 TELEPHONY_LOGI("NetworkSearchHandler::DcPhysicalLinkActiveUpdate slotId:%{public}d active:%{public}s", slotId_,
854 isActive ? "true" : "false");
855 }
856
NotifyStateChange(const AppExecFwk::InnerEvent::Pointer & event)857 void NetworkSearchHandler::NotifyStateChange(const AppExecFwk::InnerEvent::Pointer &event)
858 {
859 TELEPHONY_LOGI("NetworkSearchHandler::NotifyStateChange slotId:%{public}d", slotId_);
860 if (event == nullptr) {
861 TELEPHONY_LOGE("NetworkSearchHandler::NotifyStateChange event is nullptr!");
862 return;
863 }
864 if (networkRegister_ == nullptr) {
865 TELEPHONY_LOGE("NetworkSearchHandler::NotifyStateChange networkRegister_ is nullptr!");
866 return;
867 }
868 networkRegister_->NotifyStateChange();
869 }
870
HandleDelayNotifyEvent(const AppExecFwk::InnerEvent::Pointer & event)871 void NetworkSearchHandler::HandleDelayNotifyEvent(const AppExecFwk::InnerEvent::Pointer &event)
872 {
873 TELEPHONY_LOGI("NetworkSearchHandler::HandleDelayNotifyEvent slotId:%{public}d", slotId_);
874 if (event == nullptr) {
875 TELEPHONY_LOGE("NetworkSearchHandler::NotifyStateChange event is nullptr!");
876 return;
877 }
878 if (networkRegister_ == nullptr) {
879 TELEPHONY_LOGE("NetworkSearchHandler::NotifyStateChange networkRegister_ is nullptr!");
880 return;
881 }
882 RadioOnState();
883 }
884
GetRegServiceState(RegServiceState & regState)885 int32_t NetworkSearchHandler::GetRegServiceState(RegServiceState ®State)
886 {
887 if (networkRegister_ == nullptr) {
888 TELEPHONY_LOGE("NetworkSearchHandler::GetRegServiceState networkRegister_ is nullptr!");
889 return TELEPHONY_ERR_LOCAL_PTR_NULL;
890 }
891 regState = networkRegister_->GetRegServiceState();
892 return TELEPHONY_ERR_SUCCESS;
893 }
894
HandleRrcStateChanged(int32_t status)895 int32_t NetworkSearchHandler::HandleRrcStateChanged(int32_t status)
896 {
897 TELEPHONY_LOGI("NetworkSearchHandler::HandleRrcStateChanged slotId:%{public}d", slotId_);
898 if (networkRegister_ == nullptr) {
899 TELEPHONY_LOGE("NetworkSearchHandler::HandleRrcStateChanged networkRegister_ is nullptr!");
900 return TELEPHONY_ERR_LOCAL_PTR_NULL;
901 }
902 networkRegister_->HandleRrcStateChanged(status);
903 return TELEPHONY_ERR_SUCCESS;
904 }
905
RevertLastTechnology()906 int32_t NetworkSearchHandler::RevertLastTechnology()
907 {
908 TELEPHONY_LOGI("NetworkSearchHandler::RevertLastTechnology slotId:%{public}d", slotId_);
909 if (networkRegister_ == nullptr) {
910 TELEPHONY_LOGE("NetworkSearchHandler::RevertLastTechnology networkRegister_ is nullptr!");
911 return TELEPHONY_ERR_LOCAL_PTR_NULL;
912 }
913 networkRegister_->RevertLastTechnology();
914 return TELEPHONY_ERR_SUCCESS;
915 }
916
UpdateImsServiceStatus(const AppExecFwk::InnerEvent::Pointer & event)917 void NetworkSearchHandler::UpdateImsServiceStatus(const AppExecFwk::InnerEvent::Pointer &event)
918 {
919 auto networkSearchManager = networkSearchManager_.lock();
920 if (event == nullptr) {
921 TELEPHONY_LOGE("UpdateImsServiceStatus event is null slotId:%{public}d", slotId_);
922 return;
923 }
924 std::shared_ptr<ImsServiceStatus> imsServiceStatus = event->GetSharedObject<ImsServiceStatus>();
925 std::shared_ptr<NetworkSearchState> networkSearchState = networkSearchManager->GetNetworkSearchState(slotId_);
926 if (networkSearchState != nullptr) {
927 networkSearchState->SetImsServiceStatus(*imsServiceStatus);
928 }
929 TELEPHONY_LOGD("NetworkSearchHandler::UpdateImsServiceStatus slotId:%{public}d", slotId_);
930 }
931
UpdateImsRegisterState(const AppExecFwk::InnerEvent::Pointer & event)932 void NetworkSearchHandler::UpdateImsRegisterState(const AppExecFwk::InnerEvent::Pointer &event)
933 {
934 auto networkSearchManager = networkSearchManager_.lock();
935 if (event == nullptr) {
936 TELEPHONY_LOGE("UpdateImsRegisterState event is null slotId:%{public}d", slotId_);
937 return;
938 }
939 auto registerInfo = event->GetSharedObject<int32_t>();
940 bool isRegister = (*registerInfo == 1);
941 std::shared_ptr<NetworkSearchState> networkSearchState = networkSearchManager->GetNetworkSearchState(slotId_);
942 if (networkSearchState != nullptr) {
943 networkSearchState->SetImsStatus(isRegister);
944 }
945 TELEPHONY_LOGI("NetworkSearchHandler::UpdateImsRegisterState slotId:%{public}d isRegister:%{public}s", slotId_,
946 isRegister ? "true" : "false");
947 }
948
RadioGetBasebandVersion(const AppExecFwk::InnerEvent::Pointer & event)949 void NetworkSearchHandler::RadioGetBasebandVersion(const AppExecFwk::InnerEvent::Pointer &event)
950 {
951 if (event == nullptr) {
952 TELEPHONY_LOGE("NetworkSearchHandler::RadioGetBasebandVersion event is nullptr!");
953 return;
954 }
955 TELEPHONY_LOGD("RadioGetBasebandVersion start slotId:%{public}d", slotId_);
956 if (radioInfo_ == nullptr) {
957 TELEPHONY_LOGE("RadioGetBasebandVersion RadioInfo is null slotId:%{public}d", slotId_);
958 return;
959 }
960 radioInfo_->ProcessGetBasebandVersion(event);
961 }
962
SetNrOptionModeResponse(const AppExecFwk::InnerEvent::Pointer & event)963 void NetworkSearchHandler::SetNrOptionModeResponse(const AppExecFwk::InnerEvent::Pointer &event)
964 {
965 if (event == nullptr) {
966 TELEPHONY_LOGE("NetworkSearchHandler::SetNrOptionModeResponse event is nullptr!");
967 return;
968 }
969 TELEPHONY_LOGD("SetNrOptionModeResponse start slotId:%{public}d", slotId_);
970 if (radioInfo_ == nullptr) {
971 TELEPHONY_LOGE("SetNrOptionModeResponse RadioInfo is null slotId:%{public}d", slotId_);
972 return;
973 }
974 radioInfo_->ProcessSetNrOptionMode(event);
975 }
976
GetNrOptionModeResponse(const AppExecFwk::InnerEvent::Pointer & event)977 void NetworkSearchHandler::GetNrOptionModeResponse(const AppExecFwk::InnerEvent::Pointer &event)
978 {
979 if (event == nullptr) {
980 TELEPHONY_LOGE("NetworkSearchHandler::GetNrOptionModeResponse event is nullptr!");
981 return;
982 }
983 TELEPHONY_LOGD("GetNrOptionModeResponse start slotId:%{public}d", slotId_);
984 if (radioInfo_ == nullptr) {
985 TELEPHONY_LOGE("GetNrOptionModeResponse RadioInfo is null slotId:%{public}d", slotId_);
986 return;
987 }
988 radioInfo_->ProcessGetNrOptionMode(event);
989 }
990
RadioGetRrcConnectionState(const AppExecFwk::InnerEvent::Pointer & event)991 void NetworkSearchHandler::RadioGetRrcConnectionState(const AppExecFwk::InnerEvent::Pointer &event)
992 {
993 if (event == nullptr) {
994 TELEPHONY_LOGE("NetworkSearchHandler::RadioGetRrcConnectionState event is nullptr!");
995 return;
996 }
997 TELEPHONY_LOGD("RadioGetRrcConnectionState start slotId:%{public}d", slotId_);
998 if (radioInfo_ == nullptr) {
999 TELEPHONY_LOGE("RadioGetRrcConnectionState RadioInfo is null slotId:%{public}d", slotId_);
1000 return;
1001 }
1002 radioInfo_->ProcessGetRrcConnectionState(event);
1003 }
1004
RadioVoiceTechChange(const AppExecFwk::InnerEvent::Pointer & event)1005 void NetworkSearchHandler::RadioVoiceTechChange(const AppExecFwk::InnerEvent::Pointer &event)
1006 {
1007 if (event == nullptr) {
1008 TELEPHONY_LOGE("NetworkSearchHandler::RadioVoiceTechChange event is nullptr!");
1009 return;
1010 }
1011 if (radioInfo_ != nullptr) {
1012 radioInfo_->ProcessVoiceTechChange(event);
1013 }
1014 TELEPHONY_LOGD("NetworkSearchHandler::RadioVoiceTechChange");
1015 }
1016
AutoTimeChange(const AppExecFwk::InnerEvent::Pointer &)1017 void NetworkSearchHandler::AutoTimeChange(const AppExecFwk::InnerEvent::Pointer &)
1018 {
1019 TELEPHONY_LOGD("NetworkSearchHandler::AutoTimeChange");
1020 if (nitzUpdate_ != nullptr) {
1021 nitzUpdate_->AutoTimeChange();
1022 }
1023 }
1024
AutoTimeZoneChange(const AppExecFwk::InnerEvent::Pointer &)1025 void NetworkSearchHandler::AutoTimeZoneChange(const AppExecFwk::InnerEvent::Pointer &)
1026 {
1027 TELEPHONY_LOGD("NetworkSearchHandler::AutoTimeZoneChange");
1028 if (nitzUpdate_ != nullptr) {
1029 nitzUpdate_->AutoTimeZoneChange();
1030 }
1031 }
1032
AirplaneModeChange(const AppExecFwk::InnerEvent::Pointer &)1033 void NetworkSearchHandler::AirplaneModeChange(const AppExecFwk::InnerEvent::Pointer &)
1034 {
1035 TELEPHONY_LOGD("NetworkSearchHandler::AirplaneModeChange");
1036 if (radioInfo_ != nullptr) {
1037 radioInfo_->AirplaneModeChange();
1038 }
1039 }
1040
SetCellRequestMinInterval(uint32_t minInterval)1041 void NetworkSearchHandler::SetCellRequestMinInterval(uint32_t minInterval)
1042 {
1043 cellRequestMinInterval_ = minInterval;
1044 }
1045
SystemAbilityStatusChangeListener(std::shared_ptr<OperatorName> & operatorName)1046 NetworkSearchHandler::SystemAbilityStatusChangeListener::SystemAbilityStatusChangeListener(
1047 std::shared_ptr<OperatorName> &operatorName) : opName_(operatorName)
1048 {}
1049
OnAddSystemAbility(int32_t systemAbilityId,const std::string & deviceId)1050 void NetworkSearchHandler::SystemAbilityStatusChangeListener::OnAddSystemAbility(
1051 int32_t systemAbilityId, const std::string& deviceId)
1052 {
1053 if (systemAbilityId != COMMON_EVENT_SERVICE_ID) {
1054 TELEPHONY_LOGE("systemAbilityId is not COMMON_EVENT_SERVICE_ID");
1055 return;
1056 }
1057 if (opName_ == nullptr) {
1058 TELEPHONY_LOGE("OnAddSystemAbility COMMON_EVENT_SERVICE_ID opName_ is nullptr");
1059 return;
1060 }
1061 bool subscribeResult = EventFwk::CommonEventManager::SubscribeCommonEvent(opName_);
1062 TELEPHONY_LOGI("NetworkSearchHandler::OnAddSystemAbility subscribeResult = %{public}d", subscribeResult);
1063 }
1064
OnRemoveSystemAbility(int32_t systemAbilityId,const std::string & deviceId)1065 void NetworkSearchHandler::SystemAbilityStatusChangeListener::OnRemoveSystemAbility(
1066 int32_t systemAbilityId, const std::string& deviceId)
1067 {
1068 if (systemAbilityId != COMMON_EVENT_SERVICE_ID) {
1069 TELEPHONY_LOGE("systemAbilityId is not COMMON_EVENT_SERVICE_ID");
1070 return;
1071 }
1072 if (opName_ == nullptr) {
1073 TELEPHONY_LOGE("OnRemoveSystemAbility COMMON_EVENT_SERVICE_ID opName_ is nullptr");
1074 return;
1075 }
1076 bool subscribeResult = CommonEventManager::UnSubscribeCommonEvent(opName_);
1077 TELEPHONY_LOGI("NetworkSearchHandler::OnRemoveSystemAbility subscribeResult = %{public}d", subscribeResult);
1078 }
1079 } // namespace Telephony
1080 } // namespace OHOS
1081