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