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