• 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 
StateBegin()175 void IdleState::StateBegin()
176 {
177     TELEPHONY_LOGI("Enter Idle State");
178     std::shared_ptr<IncallDataStateMachine> stateMachine = stateMachine_.lock();
179     if (stateMachine == nullptr) {
180         TELEPHONY_LOGE("stateMachine is null");
181         return;
182     }
183     isActive_ = true;
184     stateMachine->SetCurrentState(sptr<State>(this));
185     if (stateMachine->GetCallState() == static_cast<int32_t>(TelCallStatus::CALL_STATUS_IDLE) ||
186         stateMachine->GetCallState() == static_cast<int32_t>(TelCallStatus::CALL_STATUS_DISCONNECTED)) {
187         std::shared_ptr<TelEventHandler> eventHandler = stateMachine->cellularDataHandler_.lock();
188         if (eventHandler != nullptr) {
189             eventHandler->SendEvent(CellularDataEventCode::MSG_INCALL_DATA_COMPLETE);
190         }
191     }
192 }
193 
StateEnd()194 void IdleState::StateEnd()
195 {
196     TELEPHONY_LOGI("Exit Idle State");
197     isActive_ = false;
198 }
199 
StateProcess(const AppExecFwk::InnerEvent::Pointer & event)200 bool IdleState::StateProcess(const AppExecFwk::InnerEvent::Pointer &event)
201 {
202     if (event == nullptr) {
203         TELEPHONY_LOGE("event is null");
204         return NOT_PROCESSED;
205     }
206     std::shared_ptr<IncallDataStateMachine> stateMachine = stateMachine_.lock();
207     if (stateMachine == nullptr) {
208         TELEPHONY_LOGE("stateMachine is null");
209         return NOT_PROCESSED;
210     }
211     uint32_t eventCode = event->GetInnerEventId();
212     std::map<uint32_t, Fun>::iterator it = eventIdFunMap_.find(eventCode);
213     if (it != eventIdFunMap_.end()) {
214         return it->second(event);
215     }
216     return NOT_PROCESSED;
217 }
218 
ProcessCallStarted(const AppExecFwk::InnerEvent::Pointer & event)219 bool IdleState::ProcessCallStarted(const AppExecFwk::InnerEvent::Pointer &event)
220 {
221     TELEPHONY_LOGI("IdleState::MSG_SM_INCALL_DATA_CALL_STARTED");
222     std::shared_ptr<IncallDataStateMachine> stateMachine = stateMachine_.lock();
223     if (stateMachine == nullptr) {
224         TELEPHONY_LOGE("stateMachine is null");
225         return NOT_PROCESSED;
226     }
227     if (stateMachine->IsIncallDataSwitchOn() && stateMachine->IsSecondaryCanActiveData()) {
228         int32_t defaultSlotId = CoreManagerInner::GetInstance().GetDefaultCellularDataSlotId();
229         if (defaultSlotId != stateMachine->GetSlotId()) {
230             stateMachine->TransitionTo(stateMachine->activatingSecondaryState_);
231             CoreManagerInner::GetInstance().SetDefaultCellularDataSlotId(stateMachine->GetSlotId());
232         }
233     }
234     return PROCESSED;
235 }
236 
ProcessCallEnded(const AppExecFwk::InnerEvent::Pointer & event)237 bool IdleState::ProcessCallEnded(const AppExecFwk::InnerEvent::Pointer &event)
238 {
239     TELEPHONY_LOGI("IdleState::MSG_SM_INCALL_DATA_CALL_ENDED");
240     std::shared_ptr<IncallDataStateMachine> stateMachine = stateMachine_.lock();
241     if (stateMachine == nullptr) {
242         TELEPHONY_LOGE("stateMachine is null");
243         return NOT_PROCESSED;
244     }
245     if (stateMachine->stateMachineEventHandler_ == nullptr) {
246         TELEPHONY_LOGE("stateMachineEventHandler_ is null");
247         return NOT_PROCESSED;
248     }
249     if (stateMachine->stateMachineEventHandler_->HasInnerEvent(
250         CellularDataEventCode::MSG_SM_INCALL_DATA_DSDS_CHANGED)) {
251         stateMachine->stateMachineEventHandler_->RemoveEvent(CellularDataEventCode::MSG_SM_INCALL_DATA_DSDS_CHANGED);
252     }
253     std::shared_ptr<TelEventHandler> eventHandler = stateMachine->cellularDataHandler_.lock();
254     if (eventHandler != nullptr) {
255         eventHandler->SendEvent(CellularDataEventCode::MSG_INCALL_DATA_COMPLETE);
256     }
257     return PROCESSED;
258 }
259 
ProcessSettingsOn(const AppExecFwk::InnerEvent::Pointer & event)260 bool IdleState::ProcessSettingsOn(const AppExecFwk::InnerEvent::Pointer &event)
261 {
262     TELEPHONY_LOGI("IdleState::MSG_SM_INCALL_DATA_SETTINGS_ON");
263     std::shared_ptr<IncallDataStateMachine> stateMachine = stateMachine_.lock();
264     if (stateMachine == nullptr) {
265         TELEPHONY_LOGE("stateMachine is null");
266         return NOT_PROCESSED;
267     }
268     if (stateMachine->IsIncallDataSwitchOn() && stateMachine->IsSecondaryCanActiveData()) {
269         int32_t defaultSlotId = CoreManagerInner::GetInstance().GetDefaultCellularDataSlotId();
270         if (defaultSlotId != stateMachine->GetSlotId()) {
271             stateMachine->TransitionTo(stateMachine->activatingSecondaryState_);
272             CoreManagerInner::GetInstance().SetDefaultCellularDataSlotId(stateMachine->GetSlotId());
273         }
274     }
275     return PROCESSED;
276 }
277 
ProcessDsdsChanged(const AppExecFwk::InnerEvent::Pointer & event)278 bool IdleState::ProcessDsdsChanged(const AppExecFwk::InnerEvent::Pointer &event)
279 {
280     TELEPHONY_LOGI("IdleState::MSG_SM_INCALL_DATA_DSDS_CHANGED");
281     std::shared_ptr<IncallDataStateMachine> stateMachine = stateMachine_.lock();
282     if (stateMachine == nullptr) {
283         TELEPHONY_LOGE("stateMachine is null");
284         return NOT_PROCESSED;
285     }
286     if (stateMachine->IsIncallDataSwitchOn() && stateMachine->IsSecondaryCanActiveData()) {
287         int32_t defaultSlotId = CoreManagerInner::GetInstance().GetDefaultCellularDataSlotId();
288         if (defaultSlotId != stateMachine->GetSlotId()) {
289             stateMachine->TransitionTo(stateMachine->activatingSecondaryState_);
290             CoreManagerInner::GetInstance().SetDefaultCellularDataSlotId(stateMachine->GetSlotId());
291         }
292     }
293     return PROCESSED;
294 }
295 
StateBegin()296 void SecondaryActiveState::StateBegin()
297 {
298     TELEPHONY_LOGI("Enter SecondaryActive State");
299     isActive_ = true;
300 }
301 
StateEnd()302 void SecondaryActiveState::StateEnd()
303 {
304     TELEPHONY_LOGI("Exit SecondaryActive State");
305     isActive_ = false;
306 }
307 
StateProcess(const AppExecFwk::InnerEvent::Pointer & event)308 bool SecondaryActiveState::StateProcess(const AppExecFwk::InnerEvent::Pointer &event)
309 {
310     if (event == nullptr) {
311         TELEPHONY_LOGE("event is null");
312         return NOT_PROCESSED;
313     }
314     std::shared_ptr<IncallDataStateMachine> stateMachine = stateMachine_.lock();
315     if (stateMachine == nullptr) {
316         TELEPHONY_LOGE("stateMachine is null");
317         return NOT_PROCESSED;
318     }
319     uint32_t eventCode = event->GetInnerEventId();
320     std::map<uint32_t, Fun>::iterator it = eventIdFunMap_.find(eventCode);
321     if (it != eventIdFunMap_.end()) {
322         return it->second(event);
323     }
324     return NOT_PROCESSED;
325 }
326 
ProcessSettingsOn(const AppExecFwk::InnerEvent::Pointer & event)327 bool SecondaryActiveState::ProcessSettingsOn(const AppExecFwk::InnerEvent::Pointer &event)
328 {
329     TELEPHONY_LOGI("SecondaryActiveState::MSG_SM_INCALL_DATA_SETTINGS_ON");
330     return PROCESSED;
331 }
332 
ProcessCallEnded(const AppExecFwk::InnerEvent::Pointer & event)333 bool SecondaryActiveState::ProcessCallEnded(const AppExecFwk::InnerEvent::Pointer &event)
334 {
335     TELEPHONY_LOGI("SecondaryActiveState::MSG_SM_INCALL_DATA_CALL_ENDED");
336     std::shared_ptr<IncallDataStateMachine> stateMachine = stateMachine_.lock();
337     if (stateMachine == nullptr) {
338         TELEPHONY_LOGE("stateMachine is null");
339         return NOT_PROCESSED;
340     }
341     if (stateMachine->GetCallState() == static_cast<int32_t>(TelCallStatus::CALL_STATUS_IDLE) ||
342         stateMachine->GetCallState() == static_cast<int32_t>(TelCallStatus::CALL_STATUS_DISCONNECTED)) {
343         int32_t defaultSlotId = CoreManagerInner::GetInstance().GetDefaultCellularDataSlotId();
344         int32_t primarySlotId = INVALID_SLOT_ID;
345         CoreManagerInner::GetInstance().GetPrimarySlotId(primarySlotId);
346         if (defaultSlotId != primarySlotId) {
347             stateMachine->TransitionTo(stateMachine->deactivatingSecondaryState_);
348         } else {
349             stateMachine->TransitionTo(stateMachine->idleState_);
350         }
351     }
352     return PROCESSED;
353 }
354 
ProcessSettingsOff(const AppExecFwk::InnerEvent::Pointer & event)355 bool SecondaryActiveState::ProcessSettingsOff(const AppExecFwk::InnerEvent::Pointer &event)
356 {
357     TELEPHONY_LOGI("SecondaryActiveState::MSG_SM_INCALL_DATA_SETTINGS_OFF");
358     std::shared_ptr<IncallDataStateMachine> stateMachine = stateMachine_.lock();
359     if (stateMachine == nullptr) {
360         TELEPHONY_LOGE("stateMachine is null");
361         return NOT_PROCESSED;
362     }
363     if (!stateMachine->IsIncallDataSwitchOn()) {
364         int32_t defaultSlotId = CoreManagerInner::GetInstance().GetDefaultCellularDataSlotId();
365         int32_t primarySlotId = INVALID_SLOT_ID;
366         CoreManagerInner::GetInstance().GetPrimarySlotId(primarySlotId);
367         if (defaultSlotId != primarySlotId) {
368             stateMachine->TransitionTo(stateMachine->deactivatingSecondaryState_);
369         } else {
370             stateMachine->TransitionTo(stateMachine->idleState_);
371         }
372     }
373     return PROCESSED;
374 }
375 
ProcessDsdsChanged(const AppExecFwk::InnerEvent::Pointer & event)376 bool SecondaryActiveState::ProcessDsdsChanged(const AppExecFwk::InnerEvent::Pointer &event)
377 {
378     TELEPHONY_LOGI("SecondaryActiveState::MSG_SM_INCALL_DATA_DSDS_CHANGED");
379     return PROCESSED;
380 }
381 
StateBegin()382 void ActivatingSecondaryState::StateBegin()
383 {
384     TELEPHONY_LOGI("Enter ActivatingSecondary State");
385     std::shared_ptr<IncallDataStateMachine> stateMachine = stateMachine_.lock();
386     if (stateMachine == nullptr) {
387         TELEPHONY_LOGE("stateMachine is null");
388         return;
389     }
390     isActive_ = true;
391     stateMachine->SetCurrentState(sptr<State>(this));
392 }
393 
StateEnd()394 void ActivatingSecondaryState::StateEnd()
395 {
396     TELEPHONY_LOGI("Exit ActivatingSecondary State");
397     isActive_ = false;
398 }
399 
StateProcess(const AppExecFwk::InnerEvent::Pointer & event)400 bool ActivatingSecondaryState::StateProcess(const AppExecFwk::InnerEvent::Pointer &event)
401 {
402     if (event == nullptr) {
403         TELEPHONY_LOGE("event is null");
404         return NOT_PROCESSED;
405     }
406     uint32_t eventCode = event->GetInnerEventId();
407     if (eventCode == CellularDataEventCode::MSG_SM_INCALL_DATA_DATA_CONNECTED) {
408         std::shared_ptr<IncallDataStateMachine> stateMachine = stateMachine_.lock();
409         if (stateMachine == nullptr) {
410             TELEPHONY_LOGE("stateMachine is null");
411             return NOT_PROCESSED;
412         }
413         stateMachine->TransitionTo(stateMachine->activatedSecondaryState_);
414         return PROCESSED;
415     }
416     return NOT_PROCESSED;
417 }
418 
StateBegin()419 void ActivatedSecondaryState::StateBegin()
420 {
421     TELEPHONY_LOGI("Enter ActivatedSecondary State");
422     std::shared_ptr<IncallDataStateMachine> stateMachine = stateMachine_.lock();
423     if (stateMachine == nullptr) {
424         TELEPHONY_LOGE("stateMachine is null");
425         return;
426     }
427     isActive_ = true;
428     stateMachine->SetCurrentState(sptr<State>(this));
429 }
430 
StateEnd()431 void ActivatedSecondaryState::StateEnd()
432 {
433     TELEPHONY_LOGI("Exit ActivatedSecondary State");
434     isActive_ = false;
435 }
436 
StateProcess(const AppExecFwk::InnerEvent::Pointer & event)437 bool ActivatedSecondaryState::StateProcess(const AppExecFwk::InnerEvent::Pointer &event)
438 {
439     return NOT_PROCESSED;
440 }
441 
StateBegin()442 void DeactivatingSecondaryState::StateBegin()
443 {
444     TELEPHONY_LOGI("Enter DeactivatingSecondary State");
445     std::shared_ptr<IncallDataStateMachine> stateMachine = stateMachine_.lock();
446     if (stateMachine == nullptr) {
447         TELEPHONY_LOGE("stateMachine is null");
448         return;
449     }
450     isActive_ = true;
451     stateMachine->SetCurrentState(sptr<State>(this));
452     int32_t defaultSlotId = CoreManagerInner::GetInstance().GetDefaultCellularDataSlotId();
453     int32_t primarySlotId = INVALID_SLOT_ID;
454     CoreManagerInner::GetInstance().GetPrimarySlotId(primarySlotId);
455     if (defaultSlotId != primarySlotId) {
456         CoreManagerInner::GetInstance().SetDefaultCellularDataSlotId(primarySlotId);
457     } else {
458         stateMachine->TransitionTo(stateMachine->idleState_);
459     }
460     if (!stateMachine->HasAnyConnectedState()) {
461         stateMachine->TransitionTo(stateMachine->idleState_);
462     }
463 }
464 
StateEnd()465 void DeactivatingSecondaryState::StateEnd()
466 {
467     TELEPHONY_LOGI("Exit DeactivatingSecondary State");
468     isActive_ = false;
469 }
470 
StateProcess(const AppExecFwk::InnerEvent::Pointer & event)471 bool DeactivatingSecondaryState::StateProcess(const AppExecFwk::InnerEvent::Pointer &event)
472 {
473     if (event == nullptr) {
474         TELEPHONY_LOGE("event is null");
475         return NOT_PROCESSED;
476     }
477     uint32_t eventCode = event->GetInnerEventId();
478     if (eventCode == CellularDataEventCode::MSG_SM_INCALL_DATA_DATA_DISCONNECTED) {
479         std::shared_ptr<IncallDataStateMachine> stateMachine = stateMachine_.lock();
480         if (stateMachine == nullptr) {
481             TELEPHONY_LOGE("stateMachine is null");
482             return NOT_PROCESSED;
483         }
484         int32_t primarySlotId = INVALID_SLOT_ID;
485         CoreManagerInner::GetInstance().GetPrimarySlotId(primarySlotId);
486         if (stateMachine->GetSlotId() != primarySlotId) {
487             stateMachine->TransitionTo(stateMachine->idleState_);
488         }
489         return PROCESSED;
490     }
491     if (eventCode == CellularDataEventCode::MSG_SM_INCALL_DATA_SETTINGS_ON) {
492         return PROCESSED;
493     }
494     return NOT_PROCESSED;
495 }
496 } // namespace Telephony
497 } // namespace OHOS
498