• 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_observer.h"
17 
18 #include "telephony_errors.h"
19 #include "telephony_log_wrapper.h"
20 
21 namespace OHOS {
22 namespace Telephony {
OnCallStateUpdated(int32_t slotId,int32_t callState,const std::u16string & phoneNumber)23 void TelephonyObserver::OnCallStateUpdated(
24     int32_t slotId, int32_t callState, const std::u16string &phoneNumber) {}
25 
OnSignalInfoUpdated(int32_t slotId,const std::vector<sptr<SignalInformation>> & vec)26 void TelephonyObserver::OnSignalInfoUpdated(
27     int32_t slotId, const std::vector<sptr<SignalInformation>> &vec) {}
28 
OnNetworkStateUpdated(int32_t slotId,const sptr<NetworkState> & networkState)29 void TelephonyObserver::OnNetworkStateUpdated(
30     int32_t slotId, const sptr<NetworkState> &networkState) {}
31 
OnCellInfoUpdated(int32_t slotId,const std::vector<sptr<CellInformation>> & vec)32 void TelephonyObserver::OnCellInfoUpdated(
33     int32_t slotId, const std::vector<sptr<CellInformation>> &vec) {}
34 
OnSimStateUpdated(int32_t slotId,CardType type,SimState state,LockReason reason)35 void TelephonyObserver::OnSimStateUpdated(
36     int32_t slotId, CardType type, SimState state, LockReason reason) {}
37 
OnCellularDataConnectStateUpdated(int32_t slotId,int32_t dataState,int32_t networkType)38 void TelephonyObserver::OnCellularDataConnectStateUpdated(
39     int32_t slotId, int32_t dataState, int32_t networkType) {}
40 
OnCellularDataFlowUpdated(int32_t slotId,int32_t dataFlowType)41 void TelephonyObserver::OnCellularDataFlowUpdated(
42     int32_t slotId, int32_t dataFlowType) {}
43 
OnCfuIndicatorUpdated(int32_t slotId,bool cfuResult)44 void TelephonyObserver::OnCfuIndicatorUpdated(int32_t slotId, bool cfuResult) {}
45 
OnVoiceMailMsgIndicatorUpdated(int32_t slotId,bool voiceMailMsgResult)46 void TelephonyObserver::OnVoiceMailMsgIndicatorUpdated(int32_t slotId, bool voiceMailMsgResult) {}
47 
OnIccAccountUpdated()48 void TelephonyObserver::OnIccAccountUpdated() {}
49 
TelephonyObserver()50 TelephonyObserver::TelephonyObserver()
51 {
52     memberFuncMap_[static_cast<uint32_t>(ObserverBrokerCode::ON_CALL_STATE_UPDATED)] =
53         &TelephonyObserver::OnCallStateUpdatedInner;
54     memberFuncMap_[static_cast<uint32_t>(ObserverBrokerCode::ON_SIGNAL_INFO_UPDATED)] =
55         &TelephonyObserver::OnSignalInfoUpdatedInner;
56     memberFuncMap_[static_cast<uint32_t>(ObserverBrokerCode::ON_CELL_INFO_UPDATED)] =
57         &TelephonyObserver::OnCellInfoUpdatedInner;
58     memberFuncMap_[static_cast<uint32_t>(ObserverBrokerCode::ON_NETWORK_STATE_UPDATED)] =
59         &TelephonyObserver::OnNetworkStateUpdatedInner;
60     memberFuncMap_[static_cast<uint32_t>(ObserverBrokerCode::ON_SIM_STATE_UPDATED)] =
61         &TelephonyObserver::OnSimStateUpdatedInner;
62     memberFuncMap_[static_cast<uint32_t>(ObserverBrokerCode::ON_CELLULAR_DATA_CONNECT_STATE_UPDATED)] =
63         &TelephonyObserver::OnCellularDataConnectStateUpdatedInner;
64     memberFuncMap_[static_cast<uint32_t>(ObserverBrokerCode::ON_CELLULAR_DATA_FLOW_UPDATED)] =
65         &TelephonyObserver::OnCellularDataFlowUpdatedInner;
66     memberFuncMap_[static_cast<uint32_t>(ObserverBrokerCode::ON_CFU_INDICATOR_UPDATED)] =
67         &TelephonyObserver::OnCfuIndicatorUpdatedInner;
68     memberFuncMap_[static_cast<uint32_t>(ObserverBrokerCode::ON_VOICE_MAIL_MSG_INDICATOR_UPDATED)] =
69         &TelephonyObserver::OnVoiceMailMsgIndicatorUpdatedInner;
70     memberFuncMap_[static_cast<uint32_t>(ObserverBrokerCode::ON_ICC_ACCOUNT_UPDATED)] =
71         &TelephonyObserver::OnIccAccountUpdatedInner;
72 }
73 
~TelephonyObserver()74 TelephonyObserver::~TelephonyObserver()
75 {
76     memberFuncMap_.clear();
77 }
78 
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)79 int32_t TelephonyObserver::OnRemoteRequest(
80     uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option)
81 {
82     TELEPHONY_LOGI(" code = %{public}u......", code);
83     if (data.ReadInterfaceToken() != GetDescriptor()) {
84         TELEPHONY_LOGE("verify token failed!");
85         return TELEPHONY_ERR_DESCRIPTOR_MISMATCH;
86     }
87     auto itFunc = memberFuncMap_.find(code);
88     if (itFunc != memberFuncMap_.end()) {
89         auto memberFunc = itFunc->second;
90         if (memberFunc != nullptr) {
91             (this->*memberFunc)(data, reply);
92             return OHOS::NO_ERROR;
93         }
94     }
95     return IPCObjectStub::OnRemoteRequest(code, data, reply, option);
96 }
97 
OnCallStateUpdatedInner(MessageParcel & data,MessageParcel & reply)98 void TelephonyObserver::OnCallStateUpdatedInner(
99     MessageParcel &data, MessageParcel &reply)
100 {
101     int32_t slotId = data.ReadInt32();
102     int32_t callState = data.ReadInt32();
103     std::u16string phoneNumber = data.ReadString16();
104     OnCallStateUpdated(slotId, callState, phoneNumber);
105 }
106 
OnSignalInfoUpdatedInner(MessageParcel & data,MessageParcel & reply)107 void TelephonyObserver::OnSignalInfoUpdatedInner(
108     MessageParcel &data, MessageParcel &reply)
109 {
110     int32_t slotId = data.ReadInt32();
111     std::vector<sptr<SignalInformation>> signalInfos;
112     ConvertSignalInfoList(data, signalInfos);
113     OnSignalInfoUpdated(slotId, signalInfos);
114 }
115 
OnNetworkStateUpdatedInner(MessageParcel & data,MessageParcel & reply)116 void TelephonyObserver::OnNetworkStateUpdatedInner(
117     MessageParcel &data, MessageParcel &reply)
118 {
119     int32_t slotId = data.ReadInt32();
120     sptr<NetworkState> networkState = NetworkState::Unmarshalling(data);
121     OnNetworkStateUpdated(slotId, networkState);
122 }
123 
OnCellInfoUpdatedInner(MessageParcel & data,MessageParcel & reply)124 void TelephonyObserver::OnCellInfoUpdatedInner(
125     MessageParcel &data, MessageParcel &reply)
126 {
127     int32_t slotId = data.ReadInt32();
128     std::vector<sptr<CellInformation>> cells;
129     ConvertCellInfoList(data, cells);
130     OnCellInfoUpdated(slotId, cells);
131 }
132 
OnSimStateUpdatedInner(MessageParcel & data,MessageParcel & reply)133 void TelephonyObserver::OnSimStateUpdatedInner(
134     MessageParcel &data, MessageParcel &reply)
135 {
136     int32_t slotId = data.ReadInt32();
137     CardType type = static_cast<CardType>(data.ReadInt32());
138     SimState simState = static_cast<SimState>(data.ReadInt32());
139     LockReason reson = static_cast<LockReason>(data.ReadInt32());
140     OnSimStateUpdated(slotId, type, simState, reson);
141 }
142 
OnCellularDataConnectStateUpdatedInner(MessageParcel & data,MessageParcel & reply)143 void TelephonyObserver::OnCellularDataConnectStateUpdatedInner(
144     MessageParcel &data, MessageParcel &reply)
145 {
146     int32_t slotId = data.ReadInt32();
147     int32_t dataState = data.ReadInt32();
148     int32_t networkType = data.ReadInt32();
149     OnCellularDataConnectStateUpdated(slotId, dataState, networkType);
150 }
151 
OnCellularDataFlowUpdatedInner(MessageParcel & data,MessageParcel & reply)152 void TelephonyObserver::OnCellularDataFlowUpdatedInner(
153     MessageParcel &data, MessageParcel &reply)
154 {
155     int32_t slotId = data.ReadInt32();
156     int32_t flowType = data.ReadInt32();
157     OnCellularDataFlowUpdated(slotId, flowType);
158 }
159 
OnCfuIndicatorUpdatedInner(MessageParcel & data,MessageParcel & reply)160 void TelephonyObserver::OnCfuIndicatorUpdatedInner(
161     MessageParcel &data, MessageParcel &reply)
162 {
163     int32_t slotId = data.ReadInt32();
164     bool cfuResult = data.ReadBool();
165     OnCfuIndicatorUpdated(slotId, cfuResult);
166 }
167 
OnVoiceMailMsgIndicatorUpdatedInner(MessageParcel & data,MessageParcel & reply)168 void TelephonyObserver::OnVoiceMailMsgIndicatorUpdatedInner(
169     MessageParcel &data, MessageParcel &reply)
170 {
171     int32_t slotId = data.ReadInt32();
172     bool voiceMailMsgResult = data.ReadBool();
173     OnVoiceMailMsgIndicatorUpdated(slotId, voiceMailMsgResult);
174 }
175 
OnIccAccountUpdatedInner(MessageParcel & data,MessageParcel & reply)176 void TelephonyObserver::OnIccAccountUpdatedInner(MessageParcel &data, MessageParcel &reply)
177 {
178     OnIccAccountUpdated();
179 }
180 
ConvertSignalInfoList(MessageParcel & data,std::vector<sptr<SignalInformation>> & result)181 void TelephonyObserver::ConvertSignalInfoList(
182     MessageParcel &data, std::vector<sptr<SignalInformation>> &result)
183 {
184     int32_t size = data.ReadInt32();
185     size = (size > SIGNAL_NUM_MAX) ? SIGNAL_NUM_MAX : size;
186     SignalInformation::NetworkType type;
187     for (int i = 0; i < size; ++i) {
188         type = static_cast<SignalInformation::NetworkType>(data.ReadInt32());
189         switch (type) {
190             case SignalInformation::NetworkType::GSM: {
191                 std::unique_ptr<GsmSignalInformation> signal = std::make_unique<GsmSignalInformation>();
192                 if (signal != nullptr) {
193                     signal->ReadFromParcel(data);
194                     result.emplace_back(signal.release());
195                 }
196                 break;
197             }
198             case SignalInformation::NetworkType::CDMA: {
199                 std::unique_ptr<CdmaSignalInformation> signal = std::make_unique<CdmaSignalInformation>();
200                 if (signal != nullptr) {
201                     signal->ReadFromParcel(data);
202                     result.emplace_back(signal.release());
203                 }
204                 break;
205             }
206             case SignalInformation::NetworkType::LTE: {
207                 std::unique_ptr<LteSignalInformation> signal = std::make_unique<LteSignalInformation>();
208                 if (signal != nullptr) {
209                     signal->ReadFromParcel(data);
210                     result.emplace_back(signal.release());
211                 }
212                 break;
213             }
214             case SignalInformation::NetworkType::WCDMA: {
215                 std::unique_ptr<WcdmaSignalInformation> signal = std::make_unique<WcdmaSignalInformation>();
216                 if (signal != nullptr) {
217                     signal->ReadFromParcel(data);
218                     result.emplace_back(signal.release());
219                 }
220                 break;
221             }
222             default:
223                 break;
224         }
225     }
226 }
227 
ConvertCellInfoList(MessageParcel & data,std::vector<sptr<CellInformation>> & cells)228 void TelephonyObserver::ConvertCellInfoList(
229     MessageParcel &data, std::vector<sptr<CellInformation>> &cells)
230 {
231     int32_t size = data.ReadInt32();
232     size = (size > CELL_NUM_MAX) ? CELL_NUM_MAX : size;
233     CellInformation::CellType type;
234     for (int i = 0; i < size; ++i) {
235         type = static_cast<CellInformation::CellType>(data.ReadInt32());
236         switch (type) {
237             case CellInformation::CellType::CELL_TYPE_GSM: {
238                 std::unique_ptr<GsmCellInformation> cell = std::make_unique<GsmCellInformation>();
239                 if (cell != nullptr) {
240                     cell->ReadFromParcel(data);
241                     cells.emplace_back(cell.release());
242                 }
243                 break;
244             }
245             case CellInformation::CellType::CELL_TYPE_LTE: {
246                 std::unique_ptr<LteCellInformation> cell = std::make_unique<LteCellInformation>();
247                 if (cell != nullptr) {
248                     cell->ReadFromParcel(data);
249                     cells.emplace_back(cell.release());
250                 }
251                 break;
252             }
253             default:
254                 break;
255         }
256     }
257 }
258 } // namespace Telephony
259 } // namespace OHOS
260