1 /*
2 * Copyright (C) 2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "telephony_state_registry_service.h"
17
18 #include <sstream>
19
20 #include "call_manager_inner_type.h"
21 #include "common_event_manager.h"
22 #include "common_event_support.h"
23 #include "iservice_registry.h"
24 #include "state_registry_errors.h"
25 #include "string_ex.h"
26 #include "system_ability.h"
27 #include "system_ability_definition.h"
28 #include "telephony_permission.h"
29 #include "telephony_state_registry_dump_helper.h"
30 #include "telephony_types.h"
31
32 namespace OHOS {
33 namespace Telephony {
34 using namespace OHOS::EventFwk;
35 bool g_registerResult =
36 SystemAbility::MakeAndRegisterAbility(DelayedSingleton<TelephonyStateRegistryService>::GetInstance().get());
37
TelephonyStateRegistryService()38 TelephonyStateRegistryService::TelephonyStateRegistryService()
39 : SystemAbility(TELEPHONY_STATE_REGISTRY_SYS_ABILITY_ID, true)
40 {
41 TELEPHONY_LOGI("TelephonyStateRegistryService SystemAbility create");
42 slotSize_ = SIM_SLOT_COUNT;
43 }
44
~TelephonyStateRegistryService()45 TelephonyStateRegistryService::~TelephonyStateRegistryService()
46 {
47 stateRecords_.clear();
48 callState_.clear();
49 callIncomingNumber_.clear();
50 signalInfos_.clear();
51 searchNetworkState_.clear();
52 }
53
OnStart()54 void TelephonyStateRegistryService::OnStart()
55 {
56 bindStartTime_ = std::chrono::duration_cast<std::chrono::milliseconds>(
57 std::chrono::system_clock::now().time_since_epoch()).count();
58 std::lock_guard<std::mutex> guard(lock_);
59 if (state_ == ServiceRunningState::STATE_RUNNING) {
60 TELEPHONY_LOGE("Leave, FAILED, already running");
61 return;
62 }
63 state_ = ServiceRunningState::STATE_RUNNING;
64 bool ret = SystemAbility::Publish(DelayedSingleton<TelephonyStateRegistryService>::GetInstance().get());
65 if (!ret) {
66 TELEPHONY_LOGE("Leave, Failed to publish TelephonyStateRegistryService");
67 }
68 TELEPHONY_LOGI("TelephonyStateRegistryService start success.");
69 bindEndTime_ = std::chrono::duration_cast<std::chrono::milliseconds>(
70 std::chrono::system_clock::now().time_since_epoch()).count();
71 if (IsCommonEventServiceAbilityExist()) {
72 for (int32_t i = 0; i < slotSize_; i++) {
73 TELEPHONY_LOGI("TelephonyStateRegistryService send disconnected call state.");
74 SendCallStateChanged(i, static_cast<int32_t>(TelCallState::CALL_STATUS_DISCONNECTED), u"");
75 }
76 }
77 }
78
OnStop()79 void TelephonyStateRegistryService::OnStop()
80 {
81 TELEPHONY_LOGI("TelephonyStateRegistryService OnStop ");
82 std::lock_guard<std::mutex> guard(lock_);
83 state_ = ServiceRunningState::STATE_STOPPED;
84 }
85
Finalize()86 void TelephonyStateRegistryService::Finalize()
87 {
88 TELEPHONY_LOGI("TelephonyStateRegistryService Finalize");
89 }
90
OnDump()91 void TelephonyStateRegistryService::OnDump() {}
92
UpdateCellularDataConnectState(int32_t slotId,int32_t dataState,int32_t networkType)93 int32_t TelephonyStateRegistryService::UpdateCellularDataConnectState(
94 int32_t slotId, int32_t dataState, int32_t networkType)
95 {
96 if (!VerifySlotId(slotId)) {
97 TELEPHONY_LOGE(
98 "UpdateCellularDataConnectState##VerifySlotId failed ##slotId = %{public}d", slotId);
99 return TELEPHONY_STATE_REGISTRY_SLODID_ERROR;
100 }
101 cellularDataConnectionState_[slotId] = dataState;
102 cellularDataConnectionNetworkType_[slotId] = networkType;
103 std::lock_guard<std::mutex> guard(lock_);
104 int32_t result = TELEPHONY_STATE_REGISTRY_DATA_NOT_EXIST;
105 for (size_t i = 0; i < stateRecords_.size(); i++) {
106 TelephonyStateRegistryRecord record = stateRecords_[i];
107 if (record.IsExistStateListener(TelephonyObserverBroker::OBSERVER_MASK_DATA_CONNECTION_STATE) &&
108 (record.slotId_ == slotId) && record.telephonyObserver_ != nullptr) {
109 record.telephonyObserver_->OnCellularDataConnectStateUpdated(slotId, dataState, networkType);
110 result = TELEPHONY_SUCCESS;
111 }
112 }
113 SendCellularDataConnectStateChanged(slotId, dataState, networkType);
114 return result;
115 }
116
UpdateCellularDataFlow(int32_t slotId,int32_t flowData)117 int32_t TelephonyStateRegistryService::UpdateCellularDataFlow(
118 int32_t slotId, int32_t flowData)
119 {
120 if (!VerifySlotId(slotId)) {
121 TELEPHONY_LOGE(
122 "UpdateCellularDataFlow##VerifySlotId failed ##slotId = %{public}d", slotId);
123 return TELEPHONY_STATE_REGISTRY_SLODID_ERROR;
124 }
125 cellularDataFlow_[slotId] = flowData;
126 std::lock_guard<std::mutex> guard(lock_);
127 int32_t result = TELEPHONY_STATE_REGISTRY_DATA_NOT_EXIST;
128 for (size_t i = 0; i < stateRecords_.size(); i++) {
129 TelephonyStateRegistryRecord record = stateRecords_[i];
130 if (record.IsExistStateListener(TelephonyObserverBroker::OBSERVER_MASK_DATA_FLOW) &&
131 (record.slotId_ == slotId) && record.telephonyObserver_ != nullptr) {
132 record.telephonyObserver_->OnCellularDataFlowUpdated(slotId, flowData);
133 result = TELEPHONY_SUCCESS;
134 }
135 }
136 return result;
137 }
138
UpdateCallState(int32_t slotId,int32_t callState,const std::u16string & number)139 int32_t TelephonyStateRegistryService::UpdateCallState(
140 int32_t slotId, int32_t callState, const std::u16string &number)
141 {
142 if (!VerifySlotId(slotId)) {
143 TELEPHONY_LOGE(
144 "UpdateCallState##VerifySlotId failed ##slotId = %{public}d", slotId);
145 return TELEPHONY_STATE_REGISTRY_SLODID_ERROR;
146 }
147 if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE)) {
148 TELEPHONY_LOGE("Check permission failed.");
149 return TELEPHONY_STATE_REGISTRY_PERMISSION_DENIED;
150 }
151 std::lock_guard<std::mutex> guard(lock_);
152 int32_t result = TELEPHONY_STATE_REGISTRY_DATA_NOT_EXIST;
153 for (size_t i = 0; i < stateRecords_.size(); i++) {
154 TelephonyStateRegistryRecord record = stateRecords_[i];
155 if (record.IsExistStateListener(TelephonyObserverBroker::OBSERVER_MASK_CALL_STATE) &&
156 (record.slotId_ == slotId) && record.telephonyObserver_ != nullptr) {
157 std::u16string phoneNumberStr;
158 if (record.IsCanReadCallHistory()) {
159 phoneNumberStr = number;
160 } else {
161 phoneNumberStr = Str8ToStr16("");
162 }
163 record.telephonyObserver_->OnCallStateUpdated(slotId, callState, phoneNumberStr);
164 result = TELEPHONY_SUCCESS;
165 }
166 }
167 SendCallStateChanged(slotId, callState, number);
168 return result;
169 }
170
UpdateCallStateForSlotId(int32_t slotId,int32_t callId,int32_t callState,const std::u16string & incomingNumber)171 int32_t TelephonyStateRegistryService::UpdateCallStateForSlotId(
172 int32_t slotId, int32_t callId, int32_t callState, const std::u16string &incomingNumber)
173 {
174 std::u16string incomingNumberStr = incomingNumber;
175 if (!VerifySlotId(slotId)) {
176 TELEPHONY_LOGE(
177 "UpdateCallStateForSlotId##VerifySlotId failed ##slotId = %{public}d", slotId);
178 return TELEPHONY_STATE_REGISTRY_SLODID_ERROR;
179 }
180 if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE)) {
181 TELEPHONY_LOGE("Check permission failed.");
182 return TELEPHONY_STATE_REGISTRY_PERMISSION_DENIED;
183 }
184 callState_[slotId] = callState;
185 callIncomingNumber_[slotId] = incomingNumber;
186 std::lock_guard<std::mutex> guard(lock_);
187 int32_t result = TELEPHONY_STATE_REGISTRY_DATA_NOT_EXIST;
188 for (size_t i = 0; i < stateRecords_.size(); i++) {
189 TelephonyStateRegistryRecord record = stateRecords_[i];
190 if (record.IsExistStateListener(TelephonyObserverBroker::OBSERVER_MASK_CALL_STATE) &&
191 (record.slotId_ == slotId) && record.telephonyObserver_ != nullptr) {
192 incomingNumberStr = GetCallIncomingNumberForSlotId(record, slotId);
193 record.telephonyObserver_->OnCallStateUpdated(slotId, callState, incomingNumberStr);
194 result = TELEPHONY_SUCCESS;
195 }
196 }
197 SendCallStateChanged(slotId, callState, incomingNumberStr);
198 return result;
199 }
200
UpdateSimState(int32_t slotId,CardType type,SimState state,LockReason reason)201 int32_t TelephonyStateRegistryService::UpdateSimState(
202 int32_t slotId, CardType type, SimState state, LockReason reason)
203 {
204 if (!VerifySlotId(slotId)) {
205 TELEPHONY_LOGE(
206 "UpdateSimState##VerifySlotId failed ##slotId = %{public}d", slotId);
207 return TELEPHONY_STATE_REGISTRY_SLODID_ERROR;
208 }
209 simState_[slotId] = state;
210 simReason_[slotId] = reason;
211 cardType_[slotId] = type;
212 std::lock_guard<std::mutex> guard(lock_);
213 int32_t result = TELEPHONY_STATE_REGISTRY_DATA_NOT_EXIST;
214 for (size_t i = 0; i < stateRecords_.size(); i++) {
215 TelephonyStateRegistryRecord record = stateRecords_[i];
216 if (record.IsExistStateListener(TelephonyObserverBroker::OBSERVER_MASK_SIM_STATE) &&
217 (record.slotId_ == slotId) && record.telephonyObserver_ != nullptr) {
218 record.telephonyObserver_->OnSimStateUpdated(slotId, type, state, reason);
219 result = TELEPHONY_SUCCESS;
220 }
221 }
222 SendSimStateChanged(slotId, type, state, reason);
223 return result;
224 }
225
UpdateSignalInfo(int32_t slotId,const std::vector<sptr<SignalInformation>> & vec)226 int32_t TelephonyStateRegistryService::UpdateSignalInfo(
227 int32_t slotId, const std::vector<sptr<SignalInformation>> &vec)
228 {
229 if (!VerifySlotId(slotId)) {
230 TELEPHONY_LOGE(
231 "UpdateSignalInfo##VerifySlotId failed ##slotId = %{public}d", slotId);
232 return TELEPHONY_STATE_REGISTRY_SLODID_ERROR;
233 }
234 signalInfos_[slotId] = vec;
235 std::lock_guard<std::mutex> guard(lock_);
236 int32_t result = TELEPHONY_STATE_REGISTRY_DATA_NOT_EXIST;
237 for (size_t i = 0; i < stateRecords_.size(); i++) {
238 TelephonyStateRegistryRecord record = stateRecords_[i];
239 if (record.IsExistStateListener(TelephonyObserverBroker::OBSERVER_MASK_SIGNAL_STRENGTHS) &&
240 (record.slotId_ == slotId) && record.telephonyObserver_ != nullptr) {
241 record.telephonyObserver_->OnSignalInfoUpdated(slotId, vec);
242 result = TELEPHONY_SUCCESS;
243 }
244 }
245 SendSignalInfoChanged(slotId, vec);
246 return result;
247 }
248
UpdateCellInfo(int32_t slotId,const std::vector<sptr<CellInformation>> & vec)249 int32_t TelephonyStateRegistryService::UpdateCellInfo(
250 int32_t slotId, const std::vector<sptr<CellInformation>> &vec)
251 {
252 if (!VerifySlotId(slotId)) {
253 TELEPHONY_LOGE(
254 "UpdateCellInfo##VerifySlotId failed ##slotId = %{public}d", slotId);
255 return TELEPHONY_STATE_REGISTRY_SLODID_ERROR;
256 }
257 if (!TelephonyPermission::CheckPermission(Permission::SET_TELEPHONY_STATE) ||
258 !TelephonyPermission::CheckPermission(Permission::CELL_LOCATION)) {
259 TELEPHONY_LOGE("Check permission failed.");
260 return TELEPHONY_STATE_REGISTRY_PERMISSION_DENIED;
261 }
262 cellInfos_[slotId] = vec;
263 std::lock_guard<std::mutex> guard(lock_);
264 int32_t result = TELEPHONY_STATE_REGISTRY_DATA_NOT_EXIST;
265 for (size_t i = 0; i < stateRecords_.size(); i++) {
266 TelephonyStateRegistryRecord record = stateRecords_[i];
267 if (record.IsExistStateListener(TelephonyObserverBroker::OBSERVER_MASK_CELL_INFO) &&
268 record.slotId_ == slotId) {
269 if (record.telephonyObserver_ == nullptr) {
270 TELEPHONY_LOGE("record.telephonyObserver_ is nullptr");
271 return TELEPHONY_ERR_LOCAL_PTR_NULL;
272 }
273 record.telephonyObserver_->OnCellInfoUpdated(slotId, vec);
274 result = TELEPHONY_SUCCESS;
275 }
276 }
277 return result;
278 }
279
UpdateNetworkState(int32_t slotId,const sptr<NetworkState> & networkState)280 int32_t TelephonyStateRegistryService::UpdateNetworkState(
281 int32_t slotId, const sptr<NetworkState> &networkState)
282 {
283 if (!VerifySlotId(slotId)) {
284 TELEPHONY_LOGE(
285 "UpdateNetworkState##VerifySlotId failed ##slotId = %{public}d", slotId);
286 return TELEPHONY_STATE_REGISTRY_SLODID_ERROR;
287 }
288 searchNetworkState_[slotId] = networkState;
289 std::lock_guard<std::mutex> guard(lock_);
290 int32_t result = TELEPHONY_STATE_REGISTRY_DATA_NOT_EXIST;
291 for (size_t i = 0; i < stateRecords_.size(); i++) {
292 TelephonyStateRegistryRecord r = stateRecords_[i];
293 if (r.IsExistStateListener(TelephonyObserverBroker::OBSERVER_MASK_NETWORK_STATE) &&
294 (r.slotId_ == slotId) && r.telephonyObserver_ != nullptr) {
295 r.telephonyObserver_->OnNetworkStateUpdated(slotId, networkState);
296 result = TELEPHONY_SUCCESS;
297 }
298 }
299 SendNetworkStateChanged(slotId, networkState);
300 TELEPHONY_LOGI("TelephonyStateRegistryService::NotifyNetworkStateUpdated end");
301 return result;
302 }
303
RegisterStateChange(const sptr<TelephonyObserverBroker> & telephonyObserver,int32_t slotId,uint32_t mask,const std::string & bundleName,bool isUpdate,pid_t pid)304 int32_t TelephonyStateRegistryService::RegisterStateChange(
305 const sptr<TelephonyObserverBroker> &telephonyObserver,
306 int32_t slotId, uint32_t mask, const std::string &bundleName, bool isUpdate, pid_t pid)
307 {
308 if (!CheckPermission(mask)) {
309 return TELEPHONY_STATE_REGISTRY_PERMISSION_DENIED;
310 }
311 std::lock_guard<std::mutex> guard(lock_);
312 bool isExist = false;
313 TelephonyStateRegistryRecord record;
314 for (size_t i = 0; i < stateRecords_.size(); i++) {
315 record = stateRecords_[i];
316 if (record.slotId_ == slotId && record.mask_ == mask && record.pid_ == pid) {
317 isExist = true;
318 break;
319 }
320 }
321
322 if (!isExist) {
323 record.pid_ = pid;
324 record.slotId_ = slotId;
325 record.mask_ = mask;
326 record.bundleName_ = bundleName;
327 record.telephonyObserver_ = telephonyObserver;
328 stateRecords_.push_back(record);
329 }
330
331 if (isUpdate && VerifySlotId(slotId)) {
332 UpdateData(record);
333 }
334 return TELEPHONY_SUCCESS;
335 }
336
UnregisterStateChange(int32_t slotId,uint32_t mask,pid_t pid)337 int32_t TelephonyStateRegistryService::UnregisterStateChange(
338 int32_t slotId, uint32_t mask, pid_t pid)
339 {
340 std::lock_guard<std::mutex> guard(lock_);
341 int32_t result = TELEPHONY_STATE_UNREGISTRY_DATA_NOT_EXIST;
342 std::vector<TelephonyStateRegistryRecord>::iterator it;
343 for (it = stateRecords_.begin(); it != stateRecords_.end(); ++it) {
344 if (it->slotId_ == slotId && it->mask_ == mask && it->pid_ == pid) {
345 stateRecords_.erase(it);
346 result = TELEPHONY_SUCCESS;
347 break;
348 }
349 }
350 return result;
351 }
352
CheckPermission(uint32_t mask)353 bool TelephonyStateRegistryService::CheckPermission(uint32_t mask)
354 {
355 if ((mask & TelephonyObserverBroker::OBSERVER_MASK_NETWORK_STATE) != 0) {
356 if (!TelephonyPermission::CheckPermission(Permission::GET_NETWORK_INFO)) {
357 TELEPHONY_LOGE("Check permission failed,"
358 " you must declare ohos.permission.GET_NETWORK_INFO permission for network state");
359 return false;
360 }
361 }
362 if ((mask & TelephonyObserverBroker::OBSERVER_MASK_CELL_INFO) != 0) {
363 if (!TelephonyPermission::CheckPermission(Permission::CELL_LOCATION)) {
364 TELEPHONY_LOGE("Check permission failed,"
365 " you must declare ohos.permission.LOCATION permission for cell info");
366 return false;
367 }
368 }
369 return true;
370 }
371
VerifySlotId(int slotId)372 bool TelephonyStateRegistryService::VerifySlotId(int slotId)
373 {
374 return slotId >= 0 && slotId < slotSize_;
375 }
376
GetCallIncomingNumberForSlotId(TelephonyStateRegistryRecord record,int32_t slotId)377 std::u16string TelephonyStateRegistryService::GetCallIncomingNumberForSlotId(
378 TelephonyStateRegistryRecord record, int32_t slotId)
379 {
380 if (record.IsCanReadCallHistory()) {
381 return callIncomingNumber_[slotId];
382 } else {
383 return Str8ToStr16("");
384 }
385 }
386
UpdateData(const TelephonyStateRegistryRecord & record)387 void TelephonyStateRegistryService::UpdateData(const TelephonyStateRegistryRecord &record)
388 {
389 if (record.telephonyObserver_ == nullptr) {
390 TELEPHONY_LOGE("record.telephonyObserver_ is nullptr");
391 return;
392 }
393 if ((record.mask_ & TelephonyObserverBroker::OBSERVER_MASK_CALL_STATE) != 0) {
394 std::u16string phoneNumber = GetCallIncomingNumberForSlotId(record, record.slotId_);
395 TELEPHONY_LOGI("RegisterStateChange##Notify-OBSERVER_MASK_CALL_STATE");
396 record.telephonyObserver_->OnCallStateUpdated(
397 record.slotId_, callState_[record.slotId_], phoneNumber);
398 }
399 if ((record.mask_ & TelephonyObserverBroker::OBSERVER_MASK_SIGNAL_STRENGTHS) != 0) {
400 TELEPHONY_LOGI("RegisterStateChange##Notify-OBSERVER_MASK_SIGNAL_STRENGTHS");
401 record.telephonyObserver_->OnSignalInfoUpdated(
402 record.slotId_, signalInfos_[record.slotId_]);
403 }
404 if ((record.mask_ & TelephonyObserverBroker::OBSERVER_MASK_NETWORK_STATE) != 0) {
405 TELEPHONY_LOGI("RegisterStateChange##Notify-OBSERVER_MASK_NETWORK_STATE");
406 record.telephonyObserver_->OnNetworkStateUpdated(
407 record.slotId_, searchNetworkState_[record.slotId_]);
408 }
409 if ((record.mask_ & TelephonyObserverBroker::OBSERVER_MASK_CELL_INFO) != 0) {
410 TELEPHONY_LOGI("RegisterStateChange##Notify-OBSERVER_MASK_CELL_INFO");
411 record.telephonyObserver_->OnCellInfoUpdated(
412 record.slotId_, cellInfos_[record.slotId_]);
413 }
414 if ((record.mask_ & TelephonyObserverBroker::OBSERVER_MASK_SIM_STATE) != 0) {
415 TELEPHONY_LOGI("RegisterStateChange##Notify-OBSERVER_MASK_SIM_STATE");
416 record.telephonyObserver_->OnSimStateUpdated(
417 record.slotId_, cardType_[record.slotId_], simState_[record.slotId_], simReason_[record.slotId_]);
418 }
419 if ((record.mask_ & TelephonyObserverBroker::OBSERVER_MASK_DATA_CONNECTION_STATE) != 0) {
420 TELEPHONY_LOGI("RegisterStateChange##Notify-OBSERVER_MASK_DATA_CONNECTION_STATE");
421 record.telephonyObserver_->OnCellularDataConnectStateUpdated(
422 record.slotId_, cellularDataConnectionState_[record.slotId_],
423 cellularDataConnectionNetworkType_[record.slotId_]);
424 }
425 if ((record.mask_ & TelephonyObserverBroker::OBSERVER_MASK_DATA_FLOW) != 0) {
426 TELEPHONY_LOGI("RegisterStateChange##Notify-OBSERVER_MASK_DATA_FLOW");
427 record.telephonyObserver_->OnCellularDataFlowUpdated(
428 record.slotId_, cellularDataFlow_[record.slotId_]);
429 }
430 }
431
PublishCommonEvent(const AAFwk::Want & want,int eventCode,const std::string & eventData)432 bool TelephonyStateRegistryService::PublishCommonEvent(
433 const AAFwk::Want &want, int eventCode, const std::string &eventData)
434 {
435 EventFwk::CommonEventData data;
436 data.SetWant(want);
437 data.SetCode(eventCode);
438 data.SetData(eventData);
439 EventFwk::CommonEventPublishInfo publishInfo;
440 publishInfo.SetOrdered(true);
441 bool publishResult = EventFwk::CommonEventManager::PublishCommonEvent(data, publishInfo, nullptr);
442 TELEPHONY_LOGI("PublishCommonEvent end###publishResult = %{public}d\n", publishResult);
443 return publishResult;
444 }
445
SendCallStateChanged(int32_t slotId,int32_t state,const std::u16string & number)446 void TelephonyStateRegistryService::SendCallStateChanged(
447 int32_t slotId, int32_t state, const std::u16string &number)
448 {
449 AAFwk::Want want;
450 want.SetParam("slotId", slotId);
451 want.SetParam("state", state);
452 want.SetParam("number", Str16ToStr8(number));
453 want.SetAction(EventFwk::CommonEventSupport::COMMON_EVENT_CALL_STATE_CHANGED);
454
455 EventFwk::CommonEventData data;
456 data.SetWant(want);
457 EventFwk::CommonEventPublishInfo publishInfo;
458 publishInfo.SetOrdered(true);
459 std::vector<std::string> callPermissions;
460 callPermissions.emplace_back(Permission::GET_TELEPHONY_STATE);
461 publishInfo.SetSubscriberPermissions(callPermissions);
462 bool publishResult = EventFwk::CommonEventManager::PublishCommonEvent(data, publishInfo, nullptr);
463 if (!publishResult) {
464 TELEPHONY_LOGE("SendCallStateChanged PublishBroadcastEvent result fail");
465 }
466 }
467
SendCellularDataConnectStateChanged(int32_t slotId,int32_t dataState,int32_t networkType)468 void TelephonyStateRegistryService::SendCellularDataConnectStateChanged(
469 int32_t slotId, int32_t dataState, int32_t networkType)
470 {
471 AAFwk::Want want;
472 want.SetParam("slotId", slotId);
473 want.SetParam("dataState", dataState);
474 want.SetParam("networkType", networkType);
475 want.SetAction(EventFwk::CommonEventSupport::COMMON_EVENT_CELLULAR_DATA_STATE_CHANGED);
476 int32_t eventCode = 1;
477 std::string eventData("connectStateChanged");
478 PublishCommonEvent(want, eventCode, eventData);
479 }
480
SendSimStateChanged(int32_t slotId,CardType type,SimState state,LockReason reason)481 void TelephonyStateRegistryService::SendSimStateChanged(
482 int32_t slotId, CardType type, SimState state, LockReason reason)
483 {
484 AAFwk::Want want;
485 want.SetParam("slotId", slotId);
486 want.SetParam("cardType", static_cast<int32_t>(type));
487 want.SetParam("reason", static_cast<int32_t>(reason));
488 want.SetParam("state", static_cast<int32_t>(state));
489 want.SetAction(EventFwk::CommonEventSupport::COMMON_EVENT_SIM_STATE_CHANGED);
490 int32_t eventCode = 1;
491 std::string eventData("simStateChanged");
492 PublishCommonEvent(want, eventCode, eventData);
493 }
494
SendSignalInfoChanged(int32_t slotId,const std::vector<sptr<SignalInformation>> & vec)495 void TelephonyStateRegistryService::SendSignalInfoChanged(
496 int32_t slotId, const std::vector<sptr<SignalInformation>> &vec)
497 {
498 AAFwk::Want want;
499 want.SetParam("slotId", slotId);
500 want.SetAction(EventFwk::CommonEventSupport::COMMON_EVENT_SIGNAL_INFO_CHANGED);
501 std::vector<std::string> contentStr;
502 for (size_t i = 0; i < vec.size(); i++) {
503 sptr<SignalInformation> signal = vec[i];
504 if (signal != nullptr) {
505 contentStr.push_back(signal->ToString());
506 }
507 }
508 want.SetParam("signalInfos", contentStr);
509 int32_t eventCode = 1;
510 std::string eventData("signalInfoChanged");
511 PublishCommonEvent(want, eventCode, eventData);
512 }
513
SendNetworkStateChanged(int32_t slotId,const sptr<NetworkState> & networkState)514 void TelephonyStateRegistryService::SendNetworkStateChanged(int32_t slotId, const sptr<NetworkState> &networkState)
515 {
516 AAFwk::Want want;
517 want.SetParam("slotId", slotId);
518 want.SetAction(
519 EventFwk::CommonEventSupport::COMMON_EVENT_NETWORK_STATE_CHANGED);
520 int32_t eventCode = 1;
521 if (networkState != nullptr) {
522 want.SetParam("networkState", networkState->ToString());
523 }
524 std::string eventData("networkStateChanged");
525 PublishCommonEvent(want, eventCode, eventData);
526 }
527
Dump(std::int32_t fd,const std::vector<std::u16string> & args)528 int TelephonyStateRegistryService::Dump(std::int32_t fd, const std::vector<std::u16string> &args)
529 {
530 if (fd < 0) {
531 TELEPHONY_LOGE("dump fd invalid");
532 return TELEPHONY_ERR_FAIL;
533 }
534 std::vector<std::string> argsInStr;
535 for (const auto &arg : args) {
536 TELEPHONY_LOGI("Dump args: %{public}s", Str16ToStr8(arg).c_str());
537 argsInStr.emplace_back(Str16ToStr8(arg));
538 }
539 std::string result;
540 TelephonyStateRegistryDumpHelper dumpHelper;
541 if (dumpHelper.Dump(argsInStr, stateRecords_, result)) {
542 std::int32_t ret = dprintf(fd, "%s", result.c_str());
543 if (ret < 0) {
544 TELEPHONY_LOGE("dprintf to dump fd failed");
545 return TELEPHONY_ERR_FAIL;
546 }
547 return TELEPHONY_SUCCESS;
548 }
549 TELEPHONY_LOGW("dumpHelper failed");
550 return TELEPHONY_ERR_FAIL;
551 }
552
GetBindStartTime()553 std::string TelephonyStateRegistryService::GetBindStartTime()
554 {
555 std::ostringstream oss;
556 oss << bindStartTime_;
557 return oss.str();
558 }
559
GetBindEndTime()560 std::string TelephonyStateRegistryService::GetBindEndTime()
561 {
562 std::ostringstream oss;
563 oss << bindEndTime_;
564 return oss.str();
565 }
566
GetBindSpendTime()567 std::string TelephonyStateRegistryService::GetBindSpendTime()
568 {
569 std::ostringstream oss;
570 oss << (bindEndTime_ - bindStartTime_);
571 return oss.str();
572 }
573
GetServiceRunningState()574 int32_t TelephonyStateRegistryService::GetServiceRunningState()
575 {
576 return static_cast<int32_t>(state_);
577 }
578
GetSimState(int32_t slotId)579 int32_t TelephonyStateRegistryService::GetSimState(int32_t slotId)
580 {
581 std::map<int32_t, SimState>::iterator it;
582 int32_t result = TELEPHONY_ERROR;
583 for (it = simState_.begin(); it != simState_.end(); ++it) {
584 if (it->first == slotId) {
585 result = static_cast<int32_t>(it->second);
586 TELEPHONY_LOGI("CallState = %{public}d", result);
587 break;
588 }
589 }
590 return result;
591 }
592
GetCallState(int32_t slotId)593 int32_t TelephonyStateRegistryService::GetCallState(int32_t slotId)
594 {
595 std::map<int32_t, int32_t>::iterator it;
596 int32_t result = TELEPHONY_ERROR;
597 for (it = callState_.begin(); it != callState_.end(); ++it) {
598 if (it->first == slotId) {
599 result = it->second;
600 break;
601 }
602 }
603 return result;
604 }
605
GetCardType(int32_t slotId)606 int32_t TelephonyStateRegistryService::GetCardType(int32_t slotId)
607 {
608 std::map<int32_t, CardType>::iterator it;
609 int32_t result = TELEPHONY_ERROR;
610 for (it = cardType_.begin(); it != cardType_.end(); ++it) {
611 if (it->first == slotId) {
612 result = static_cast<int32_t>(it->second);
613 break;
614 }
615 }
616 return result;
617 }
618
GetCellularDataConnectionState(int32_t slotId)619 int32_t TelephonyStateRegistryService::GetCellularDataConnectionState(int32_t slotId)
620 {
621 std::map<int32_t, int32_t>::iterator it;
622 int32_t result = TELEPHONY_ERROR;
623 for (it = cellularDataConnectionState_.begin(); it != cellularDataConnectionState_.end(); ++it) {
624 if (it->first == slotId) {
625 result = it->second;
626 break;
627 }
628 }
629 return result;
630 }
631
GetCellularDataFlow(int32_t slotId)632 int32_t TelephonyStateRegistryService::GetCellularDataFlow(int32_t slotId)
633 {
634 std::map<int32_t, int32_t>::iterator it;
635 int32_t result = TELEPHONY_ERROR;
636 for (it = cellularDataFlow_.begin(); it != cellularDataFlow_.end(); ++it) {
637 if (it->first == slotId) {
638 result = it->second;
639 break;
640 }
641 }
642 return result;
643 }
644
GetCellularDataConnectionNetworkType(int32_t slotId)645 int32_t TelephonyStateRegistryService::GetCellularDataConnectionNetworkType(int32_t slotId)
646 {
647 std::map<int32_t, int32_t>::iterator it;
648 int32_t result = TELEPHONY_ERROR;
649 for (it = cellularDataConnectionNetworkType_.begin(); it != cellularDataConnectionNetworkType_.end(); ++it) {
650 if (it->first == slotId) {
651 result = it->second;
652 break;
653 }
654 }
655 return result;
656 }
657
GetLockReason(int32_t slotId)658 int32_t TelephonyStateRegistryService::GetLockReason(int32_t slotId)
659 {
660 std::map<int32_t, LockReason>::iterator it;
661 int32_t result = TELEPHONY_ERROR;
662 for (it = simReason_.begin(); it != simReason_.end(); ++it) {
663 if (it->first == slotId) {
664 result = static_cast<int32_t>(it->second);
665 break;
666 }
667 }
668 return result;
669 }
670
IsCommonEventServiceAbilityExist()671 bool TelephonyStateRegistryService::IsCommonEventServiceAbilityExist()
672 {
673 sptr<ISystemAbilityManager> sm = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
674 if (sm == nullptr) {
675 TELEPHONY_LOGE("IsCommonEventServiceAbilityExist Get ISystemAbilityManager failed, no SystemAbilityManager");
676 return false;
677 }
678 sptr<IRemoteObject> remote = sm->CheckSystemAbility(COMMON_EVENT_SERVICE_ID);
679 if (remote == nullptr) {
680 TELEPHONY_LOGE("No CesServiceAbility");
681 return false;
682 }
683 return true;
684 }
685 } // namespace Telephony
686 } // namespace OHOS
687