• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 &regState)
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