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