• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023 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 "incall_data_state_machine.h"
17 
18 #include "cellular_data_settings_rdb_helper.h"
19 #include "core_manager_inner.h"
20 #include "telephony_log_wrapper.h"
21 #include "telephony_types.h"
22 
23 namespace OHOS {
24 namespace Telephony {
UpdateCallState(int32_t state)25 void IncallDataStateMachine::UpdateCallState(int32_t state)
26 {
27     callState_ = state;
28 }
29 
GetCallState() const30 int32_t IncallDataStateMachine::GetCallState() const
31 {
32     return callState_;
33 }
34 
HasAnyConnectedState() const35 bool IncallDataStateMachine::HasAnyConnectedState() const
36 {
37     if (apnManager_ != nullptr) {
38         return apnManager_->HasAnyConnectedState();
39     }
40     return false;
41 }
42 
GetSlotId() const43 int32_t IncallDataStateMachine::GetSlotId() const
44 {
45     return slotId_;
46 }
47 
IsIncallDataSwitchOn()48 bool IncallDataStateMachine::IsIncallDataSwitchOn()
49 {
50     std::shared_ptr<CellularDataSettingsRdbHelper> settingHelper = CellularDataSettingsRdbHelper::GetInstance();
51     if (settingHelper == nullptr) {
52         TELEPHONY_LOGE("settingHelper null!");
53         return false;
54     }
55     int32_t value = static_cast<int32_t>(DataSwitchCode::CELLULAR_DATA_DISABLED);
56     int32_t intelligenceNetworkValue = static_cast<int32_t>(DataSwitchCode::CELLULAR_DATA_DISABLED);
57     Uri intelligenceNetworkUri(CELLULAR_DATA_SETTING_INTELLIGENCE_NETWORK_URI);
58     if (settingHelper->GetValue(
59         intelligenceNetworkUri, INTELLIGENCE_NETWORK_COLUMN_ENABLE,
60         intelligenceNetworkValue) != TELEPHONY_SUCCESS) {
61         TELEPHONY_LOGE("GetValue failed!");
62         return false;
63     }
64     int32_t smartDualCardValue = static_cast<int32_t>(DataSwitchCode::CELLULAR_DATA_DISABLED);
65     Uri smartDualCardUri(CELLULAR_DATA_SETTING_INTELLIGENCE_SWITCH_URI);
66     if (settingHelper->GetValue(
67         smartDualCardUri, INTELLIGENCE_SWITCH_COLUMN_ENABLE, smartDualCardValue) != TELEPHONY_SUCCESS) {
68         TELEPHONY_LOGE("GetValue failed!");
69         return false;
70     }
71     value = (intelligenceNetworkValue == static_cast<int32_t>(DataSwitchCode::CELLULAR_DATA_ENABLED) &&
72         smartDualCardValue == static_cast<int32_t>(DataSwitchCode::CELLULAR_DATA_ENABLED)) ?
73         static_cast<int32_t>(DataSwitchCode::CELLULAR_DATA_ENABLED) :
74         static_cast<int32_t>(DataSwitchCode::CELLULAR_DATA_DISABLED);
75     TELEPHONY_LOGI("Slot%{public}d: value=%{public}d", slotId_, value);
76     return value == static_cast<int32_t>(DataSwitchCode::CELLULAR_DATA_ENABLED);
77 }
78 
IsSecondaryCanActiveData()79 bool IncallDataStateMachine::IsSecondaryCanActiveData()
80 {
81     int32_t dsdsMode = DSDS_MODE_V2;
82     CoreManagerInner::GetInstance().GetDsdsMode(dsdsMode);
83     if (dsdsMode >= DSDS_MODE_V3) {
84         TELEPHONY_LOGI("Slot%{public}d: not dsds 2.0", slotId_);
85         return false;
86     }
87     int32_t primarySlotId = INVALID_SLOT_ID;
88     CoreManagerInner::GetInstance().GetPrimarySlotId(primarySlotId);
89     if (primarySlotId == INVALID_SLOT_ID || primarySlotId == slotId_) {
90         TELEPHONY_LOGI("Slot%{public}d: not secondary sim card", slotId_);
91         return false;
92     }
93     bool hasPrimarySimCard = false;
94     CoreManagerInner::GetInstance().HasSimCard(primarySlotId, hasPrimarySimCard);
95     if (!hasPrimarySimCard) {
96         TELEPHONY_LOGI("Slot%{public}d: no primary sim card", slotId_);
97         return false;
98     }
99     ImsRegInfo voiceInfo;
100     CoreManagerInner::GetInstance().GetImsRegStatus(slotId_, ImsServiceType::TYPE_VOICE, voiceInfo);
101     ImsRegInfo videoInfo;
102     CoreManagerInner::GetInstance().GetImsRegStatus(slotId_, ImsServiceType::TYPE_VIDEO, videoInfo);
103     if (voiceInfo.imsRegState != ImsRegState::IMS_REGISTERED && videoInfo.imsRegState != ImsRegState::IMS_REGISTERED) {
104         TELEPHONY_LOGI("Slot%{public}d: not ims call", slotId_);
105         return false;
106     }
107     if (callState_ == static_cast<int32_t>(TelCallStatus::CALL_STATUS_IDLE) ||
108         callState_ == static_cast<int32_t>(TelCallStatus::CALL_STATUS_DISCONNECTED)) {
109         TELEPHONY_LOGI("Slot%{public}d: not in call", slotId_);
110         return false;
111     }
112     return CanActiveDataByRadioTech();
113 }
114 
CanActiveDataByRadioTech()115 bool IncallDataStateMachine::CanActiveDataByRadioTech()
116 {
117     int32_t radioTech = static_cast<int32_t>(RadioTech::RADIO_TECHNOLOGY_INVALID);
118     CoreManagerInner::GetInstance().GetPsRadioTech(slotId_, radioTech);
119     switch (static_cast<RadioTech>(radioTech)) {
120         case RadioTech::RADIO_TECHNOLOGY_WCDMA:
121             // fall_through
122         case RadioTech::RADIO_TECHNOLOGY_HSPA:
123             // fall_through
124         case RadioTech::RADIO_TECHNOLOGY_HSPAP:
125             // fall_through
126         case RadioTech::RADIO_TECHNOLOGY_LTE:
127             // fall_through
128         case RadioTech::RADIO_TECHNOLOGY_LTE_CA:
129             // fall_through
130         case RadioTech::RADIO_TECHNOLOGY_NR:
131             return true;
132         default:
133             return false;
134     }
135 }
136 
Init(int32_t callState)137 void IncallDataStateMachine::Init(int32_t callState)
138 {
139     idleState_ = new (std::nothrow) IdleState(std::weak_ptr<IncallDataStateMachine>(shared_from_this()), "IdleState");
140     secondaryActiveState_ = new (std::nothrow)
141         SecondaryActiveState(std::weak_ptr<IncallDataStateMachine>(shared_from_this()), "SecondaryActiveState");
142     activatingSecondaryState_ = new (std::nothrow)
143         ActivatingSecondaryState(std::weak_ptr<IncallDataStateMachine>(shared_from_this()), "ActivatingSecondaryState");
144     activatedSecondaryState_ = new (std::nothrow)
145         ActivatedSecondaryState(std::weak_ptr<IncallDataStateMachine>(shared_from_this()), "ActivatedSecondaryState");
146     deactivatingSecondaryState_ = new (std::nothrow) DeactivatingSecondaryState(
147         std::weak_ptr<IncallDataStateMachine>(shared_from_this()), "DeactivatingSecondaryState");
148     if (idleState_ == nullptr || secondaryActiveState_ == nullptr || activatingSecondaryState_ == nullptr ||
149         activatedSecondaryState_ == nullptr || deactivatingSecondaryState_ == nullptr) {
150         TELEPHONY_LOGE("memory allocation failed");
151         return;
152     }
153     activatingSecondaryState_->SetParentState(secondaryActiveState_);
154     activatedSecondaryState_->SetParentState(secondaryActiveState_);
155     callState_ = callState;
156     StateMachine::SetOriginalState(idleState_);
157     StateMachine::Start();
158 }
159 
SetCurrentState(const sptr<State> && state)160 void IncallDataStateMachine::SetCurrentState(const sptr<State> &&state)
161 {
162     currentState_ = std::move(state);
163 }
164 
GetCurrentState() const165 sptr<State> IncallDataStateMachine::GetCurrentState() const
166 {
167     return currentState_;
168 }
169 
IsSecondaryActiveState() const170 bool IncallDataStateMachine::IsSecondaryActiveState() const
171 {
172     return currentState_ == activatingSecondaryState_ || currentState_ == activatedSecondaryState_;
173 }
174 
DeInit()175 void IncallDataStateMachine::DeInit()
176 {
177     idleState_ = nullptr;
178     secondaryActiveState_ = nullptr;
179     activatingSecondaryState_ = nullptr;
180     activatedSecondaryState_ = nullptr;
181     deactivatingSecondaryState_ = nullptr;
182     currentState_ = nullptr;
183     cellularDataHandler_.reset();
184     apnManager_ = nullptr;
185 
186     slotId_ = INVALID_SLOT_ID;
187     callState_ = static_cast<int32_t>(TelCallStatus::CALL_STATUS_IDLE);
188 }
189 
StateBegin()190 void IdleState::StateBegin()
191 {
192     TELEPHONY_LOGI("Enter Idle State");
193     std::shared_ptr<IncallDataStateMachine> stateMachine = stateMachine_.lock();
194     if (stateMachine == nullptr) {
195         TELEPHONY_LOGE("stateMachine is null");
196         return;
197     }
198     isActive_ = true;
199     stateMachine->SetCurrentState(sptr<State>(this));
200     if (stateMachine->GetCallState() == static_cast<int32_t>(TelCallStatus::CALL_STATUS_IDLE) ||
201         stateMachine->GetCallState() == static_cast<int32_t>(TelCallStatus::CALL_STATUS_DISCONNECTED)) {
202         std::shared_ptr<TelEventHandler> eventHandler = stateMachine->cellularDataHandler_.lock();
203         if (eventHandler != nullptr) {
204             eventHandler->SendEvent(CellularDataEventCode::MSG_INCALL_DATA_COMPLETE);
205         }
206     }
207 }
208 
StateEnd()209 void IdleState::StateEnd()
210 {
211     TELEPHONY_LOGI("Exit Idle State");
212     isActive_ = false;
213 }
214 
StateProcess(const AppExecFwk::InnerEvent::Pointer & event)215 bool IdleState::StateProcess(const AppExecFwk::InnerEvent::Pointer &event)
216 {
217     if (event == nullptr) {
218         TELEPHONY_LOGE("event is null");
219         return NOT_PROCESSED;
220     }
221     std::shared_ptr<IncallDataStateMachine> stateMachine = stateMachine_.lock();
222     if (stateMachine == nullptr) {
223         TELEPHONY_LOGE("stateMachine is null");
224         return NOT_PROCESSED;
225     }
226     uint32_t eventCode = event->GetInnerEventId();
227     std::map<uint32_t, Fun>::iterator it = eventIdFunMap_.find(eventCode);
228     if (it != eventIdFunMap_.end()) {
229         return it->second(event);
230     }
231     return NOT_PROCESSED;
232 }
233 
ProcessCallStarted(const AppExecFwk::InnerEvent::Pointer & event)234 bool IdleState::ProcessCallStarted(const AppExecFwk::InnerEvent::Pointer &event)
235 {
236     TELEPHONY_LOGI("IdleState::MSG_SM_INCALL_DATA_CALL_STARTED");
237     std::shared_ptr<IncallDataStateMachine> stateMachine = stateMachine_.lock();
238     if (stateMachine == nullptr) {
239         TELEPHONY_LOGE("stateMachine is null");
240         return NOT_PROCESSED;
241     }
242     if (stateMachine->IsIncallDataSwitchOn() && stateMachine->IsSecondaryCanActiveData()) {
243         int32_t defaultSlotId = CoreManagerInner::GetInstance().GetDefaultCellularDataSlotId();
244         if (defaultSlotId != stateMachine->GetSlotId()) {
245             stateMachine->TransitionTo(stateMachine->activatingSecondaryState_);
246             CoreManagerInner::GetInstance().SetDefaultCellularDataSlotId(stateMachine->GetSlotId());
247         }
248     }
249     return PROCESSED;
250 }
251 
ProcessCallEnded(const AppExecFwk::InnerEvent::Pointer & event)252 bool IdleState::ProcessCallEnded(const AppExecFwk::InnerEvent::Pointer &event)
253 {
254     TELEPHONY_LOGI("IdleState::MSG_SM_INCALL_DATA_CALL_ENDED");
255     std::shared_ptr<IncallDataStateMachine> stateMachine = stateMachine_.lock();
256     if (stateMachine == nullptr) {
257         TELEPHONY_LOGE("stateMachine is null");
258         return NOT_PROCESSED;
259     }
260     if (stateMachine->stateMachineEventHandler_ == nullptr) {
261         TELEPHONY_LOGE("stateMachineEventHandler_ is null");
262         return NOT_PROCESSED;
263     }
264     if (stateMachine->stateMachineEventHandler_->HasInnerEvent(
265         CellularDataEventCode::MSG_SM_INCALL_DATA_DSDS_CHANGED)) {
266         stateMachine->stateMachineEventHandler_->RemoveEvent(CellularDataEventCode::MSG_SM_INCALL_DATA_DSDS_CHANGED);
267     }
268     std::shared_ptr<TelEventHandler> eventHandler = stateMachine->cellularDataHandler_.lock();
269     if (eventHandler != nullptr) {
270         eventHandler->SendEvent(CellularDataEventCode::MSG_INCALL_DATA_COMPLETE);
271     }
272     return PROCESSED;
273 }
274 
ProcessSettingsOn(const AppExecFwk::InnerEvent::Pointer & event)275 bool IdleState::ProcessSettingsOn(const AppExecFwk::InnerEvent::Pointer &event)
276 {
277     TELEPHONY_LOGI("IdleState::MSG_SM_INCALL_DATA_SETTINGS_ON");
278     std::shared_ptr<IncallDataStateMachine> stateMachine = stateMachine_.lock();
279     if (stateMachine == nullptr) {
280         TELEPHONY_LOGE("stateMachine is null");
281         return NOT_PROCESSED;
282     }
283     if (stateMachine->IsIncallDataSwitchOn() && stateMachine->IsSecondaryCanActiveData()) {
284         int32_t defaultSlotId = CoreManagerInner::GetInstance().GetDefaultCellularDataSlotId();
285         if (defaultSlotId != stateMachine->GetSlotId()) {
286             stateMachine->TransitionTo(stateMachine->activatingSecondaryState_);
287             CoreManagerInner::GetInstance().SetDefaultCellularDataSlotId(stateMachine->GetSlotId());
288         }
289     }
290     return PROCESSED;
291 }
292 
ProcessDsdsChanged(const AppExecFwk::InnerEvent::Pointer & event)293 bool IdleState::ProcessDsdsChanged(const AppExecFwk::InnerEvent::Pointer &event)
294 {
295     TELEPHONY_LOGI("IdleState::MSG_SM_INCALL_DATA_DSDS_CHANGED");
296     std::shared_ptr<IncallDataStateMachine> stateMachine = stateMachine_.lock();
297     if (stateMachine == nullptr) {
298         TELEPHONY_LOGE("stateMachine is null");
299         return NOT_PROCESSED;
300     }
301     if (stateMachine->IsIncallDataSwitchOn() && stateMachine->IsSecondaryCanActiveData()) {
302         int32_t defaultSlotId = CoreManagerInner::GetInstance().GetDefaultCellularDataSlotId();
303         if (defaultSlotId != stateMachine->GetSlotId()) {
304             stateMachine->TransitionTo(stateMachine->activatingSecondaryState_);
305             CoreManagerInner::GetInstance().SetDefaultCellularDataSlotId(stateMachine->GetSlotId());
306         }
307     }
308     return PROCESSED;
309 }
310 
StateBegin()311 void SecondaryActiveState::StateBegin()
312 {
313     TELEPHONY_LOGI("Enter SecondaryActive State");
314     isActive_ = true;
315 }
316 
StateEnd()317 void SecondaryActiveState::StateEnd()
318 {
319     TELEPHONY_LOGI("Exit SecondaryActive State");
320     isActive_ = false;
321 }
322 
StateProcess(const AppExecFwk::InnerEvent::Pointer & event)323 bool SecondaryActiveState::StateProcess(const AppExecFwk::InnerEvent::Pointer &event)
324 {
325     if (event == nullptr) {
326         TELEPHONY_LOGE("event is null");
327         return NOT_PROCESSED;
328     }
329     std::shared_ptr<IncallDataStateMachine> stateMachine = stateMachine_.lock();
330     if (stateMachine == nullptr) {
331         TELEPHONY_LOGE("stateMachine is null");
332         return NOT_PROCESSED;
333     }
334     uint32_t eventCode = event->GetInnerEventId();
335     std::map<uint32_t, Fun>::iterator it = eventIdFunMap_.find(eventCode);
336     if (it != eventIdFunMap_.end()) {
337         return it->second(event);
338     }
339     return NOT_PROCESSED;
340 }
341 
ProcessSettingsOn(const AppExecFwk::InnerEvent::Pointer & event)342 bool SecondaryActiveState::ProcessSettingsOn(const AppExecFwk::InnerEvent::Pointer &event)
343 {
344     TELEPHONY_LOGI("SecondaryActiveState::MSG_SM_INCALL_DATA_SETTINGS_ON");
345     return PROCESSED;
346 }
347 
ProcessCallEnded(const AppExecFwk::InnerEvent::Pointer & event)348 bool SecondaryActiveState::ProcessCallEnded(const AppExecFwk::InnerEvent::Pointer &event)
349 {
350     TELEPHONY_LOGI("SecondaryActiveState::MSG_SM_INCALL_DATA_CALL_ENDED");
351     std::shared_ptr<IncallDataStateMachine> stateMachine = stateMachine_.lock();
352     if (stateMachine == nullptr) {
353         TELEPHONY_LOGE("stateMachine is null");
354         return NOT_PROCESSED;
355     }
356     if (stateMachine->GetCallState() == static_cast<int32_t>(TelCallStatus::CALL_STATUS_IDLE) ||
357         stateMachine->GetCallState() == static_cast<int32_t>(TelCallStatus::CALL_STATUS_DISCONNECTED)) {
358         int32_t defaultSlotId = CoreManagerInner::GetInstance().GetDefaultCellularDataSlotId();
359         int32_t primarySlotId = INVALID_SLOT_ID;
360         CoreManagerInner::GetInstance().GetPrimarySlotId(primarySlotId);
361         if (defaultSlotId != primarySlotId) {
362             stateMachine->TransitionTo(stateMachine->deactivatingSecondaryState_);
363         } else {
364             stateMachine->TransitionTo(stateMachine->idleState_);
365         }
366     }
367     return PROCESSED;
368 }
369 
ProcessSettingsOff(const AppExecFwk::InnerEvent::Pointer & event)370 bool SecondaryActiveState::ProcessSettingsOff(const AppExecFwk::InnerEvent::Pointer &event)
371 {
372     TELEPHONY_LOGI("SecondaryActiveState::MSG_SM_INCALL_DATA_SETTINGS_OFF");
373     std::shared_ptr<IncallDataStateMachine> stateMachine = stateMachine_.lock();
374     if (stateMachine == nullptr) {
375         TELEPHONY_LOGE("stateMachine is null");
376         return NOT_PROCESSED;
377     }
378     if (!stateMachine->IsIncallDataSwitchOn()) {
379         int32_t defaultSlotId = CoreManagerInner::GetInstance().GetDefaultCellularDataSlotId();
380         int32_t primarySlotId = INVALID_SLOT_ID;
381         CoreManagerInner::GetInstance().GetPrimarySlotId(primarySlotId);
382         if (defaultSlotId != primarySlotId) {
383             stateMachine->TransitionTo(stateMachine->deactivatingSecondaryState_);
384         } else {
385             stateMachine->TransitionTo(stateMachine->idleState_);
386         }
387     }
388     return PROCESSED;
389 }
390 
ProcessDsdsChanged(const AppExecFwk::InnerEvent::Pointer & event)391 bool SecondaryActiveState::ProcessDsdsChanged(const AppExecFwk::InnerEvent::Pointer &event)
392 {
393     TELEPHONY_LOGI("SecondaryActiveState::MSG_SM_INCALL_DATA_DSDS_CHANGED");
394     return PROCESSED;
395 }
396 
StateBegin()397 void ActivatingSecondaryState::StateBegin()
398 {
399     TELEPHONY_LOGI("Enter ActivatingSecondary State");
400     std::shared_ptr<IncallDataStateMachine> stateMachine = stateMachine_.lock();
401     if (stateMachine == nullptr) {
402         TELEPHONY_LOGE("stateMachine is null");
403         return;
404     }
405     isActive_ = true;
406     stateMachine->SetCurrentState(sptr<State>(this));
407 }
408 
StateEnd()409 void ActivatingSecondaryState::StateEnd()
410 {
411     TELEPHONY_LOGI("Exit ActivatingSecondary State");
412     isActive_ = false;
413 }
414 
StateProcess(const AppExecFwk::InnerEvent::Pointer & event)415 bool ActivatingSecondaryState::StateProcess(const AppExecFwk::InnerEvent::Pointer &event)
416 {
417     if (event == nullptr) {
418         TELEPHONY_LOGE("event is null");
419         return NOT_PROCESSED;
420     }
421     uint32_t eventCode = event->GetInnerEventId();
422     if (eventCode == CellularDataEventCode::MSG_SM_INCALL_DATA_DATA_CONNECTED) {
423         std::shared_ptr<IncallDataStateMachine> stateMachine = stateMachine_.lock();
424         if (stateMachine == nullptr) {
425             TELEPHONY_LOGE("stateMachine is null");
426             return NOT_PROCESSED;
427         }
428         stateMachine->TransitionTo(stateMachine->activatedSecondaryState_);
429         return PROCESSED;
430     }
431     return NOT_PROCESSED;
432 }
433 
StateBegin()434 void ActivatedSecondaryState::StateBegin()
435 {
436     TELEPHONY_LOGI("Enter ActivatedSecondary State");
437     std::shared_ptr<IncallDataStateMachine> stateMachine = stateMachine_.lock();
438     if (stateMachine == nullptr) {
439         TELEPHONY_LOGE("stateMachine is null");
440         return;
441     }
442     isActive_ = true;
443     stateMachine->SetCurrentState(sptr<State>(this));
444 }
445 
StateEnd()446 void ActivatedSecondaryState::StateEnd()
447 {
448     TELEPHONY_LOGI("Exit ActivatedSecondary State");
449     isActive_ = false;
450 }
451 
StateProcess(const AppExecFwk::InnerEvent::Pointer & event)452 bool ActivatedSecondaryState::StateProcess(const AppExecFwk::InnerEvent::Pointer &event)
453 {
454     return NOT_PROCESSED;
455 }
456 
StateBegin()457 void DeactivatingSecondaryState::StateBegin()
458 {
459     TELEPHONY_LOGI("Enter DeactivatingSecondary State");
460     std::shared_ptr<IncallDataStateMachine> stateMachine = stateMachine_.lock();
461     if (stateMachine == nullptr) {
462         TELEPHONY_LOGE("stateMachine is null");
463         return;
464     }
465     isActive_ = true;
466     stateMachine->SetCurrentState(sptr<State>(this));
467     int32_t defaultSlotId = CoreManagerInner::GetInstance().GetDefaultCellularDataSlotId();
468     int32_t primarySlotId = INVALID_SLOT_ID;
469     CoreManagerInner::GetInstance().GetPrimarySlotId(primarySlotId);
470     if (defaultSlotId != primarySlotId) {
471         CoreManagerInner::GetInstance().SetDefaultCellularDataSlotId(primarySlotId);
472     } else {
473         stateMachine->TransitionTo(stateMachine->idleState_);
474     }
475     if (!stateMachine->HasAnyConnectedState()) {
476         stateMachine->TransitionTo(stateMachine->idleState_);
477     }
478 }
479 
StateEnd()480 void DeactivatingSecondaryState::StateEnd()
481 {
482     TELEPHONY_LOGI("Exit DeactivatingSecondary State");
483     isActive_ = false;
484 }
485 
StateProcess(const AppExecFwk::InnerEvent::Pointer & event)486 bool DeactivatingSecondaryState::StateProcess(const AppExecFwk::InnerEvent::Pointer &event)
487 {
488     if (event == nullptr) {
489         TELEPHONY_LOGE("event is null");
490         return NOT_PROCESSED;
491     }
492     uint32_t eventCode = event->GetInnerEventId();
493     if (eventCode == CellularDataEventCode::MSG_SM_INCALL_DATA_DATA_DISCONNECTED) {
494         std::shared_ptr<IncallDataStateMachine> stateMachine = stateMachine_.lock();
495         if (stateMachine == nullptr) {
496             TELEPHONY_LOGE("stateMachine is null");
497             return NOT_PROCESSED;
498         }
499         int32_t primarySlotId = INVALID_SLOT_ID;
500         CoreManagerInner::GetInstance().GetPrimarySlotId(primarySlotId);
501         if (stateMachine->GetSlotId() != primarySlotId) {
502             stateMachine->TransitionTo(stateMachine->idleState_);
503         }
504         return PROCESSED;
505     }
506     if (eventCode == CellularDataEventCode::MSG_SM_INCALL_DATA_SETTINGS_ON) {
507         return PROCESSED;
508     }
509     return NOT_PROCESSED;
510 }
511 } // namespace Telephony
512 } // namespace OHOS
513