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 #ifndef OHOS_DIALLING_NUMBER_INFO_H
17 #define OHOS_DIALLING_NUMBER_INFO_H
18 
19 #include <memory>
20 #include <string>
21 #include <vector>
22 #include "parcel.h"
23 
24 namespace OHOS {
25 namespace Telephony {
26 class DiallingNumbersInfo : public Parcelable {
27 public:
28     enum : uint32_t {
29         /**
30          * Fixed dialing number
31          */
32         SIM_ADN = 1,
33         /**
34          *
35          * Abbreviated dialing numbers
36          */
37         SIM_FDN = 2,
38     };
39     static const int EMPTY_INDEX = 0;
40     int32_t elementaryFileId_ = 0;
41     int32_t index_ = EMPTY_INDEX;
42     std::u16string name_ = u"";
43     std::u16string number_ = u"";
44     std::vector<std::u16string> emails_;
45     std::u16string pin2_ = u"";
ReadFromParcel(Parcel & parcel)46     bool ReadFromParcel(Parcel &parcel)
47     {
48         if (!parcel.ReadInt32(elementaryFileId_)) {
49             return false;
50         }
51         if (!parcel.ReadInt32(index_)) {
52             return false;
53         }
54         if (!parcel.ReadString16(name_)) {
55             return false;
56         }
57         if (!parcel.ReadString16(number_)) {
58             return false;
59         }
60         if (!parcel.ReadString16(pin2_)) {
61             return false;
62         }
63         if (!parcel.ReadString16Vector(&emails_)) {
64             return false;
65         }
66         return true;
67     }
68 
Marshalling(Parcel & parcel)69     virtual bool Marshalling(Parcel &parcel) const
70     {
71         if (!parcel.WriteInt32(elementaryFileId_)) {
72             return false;
73         }
74         if (!parcel.WriteInt32(index_)) {
75             return false;
76         }
77         if (!parcel.WriteString16(name_)) {
78             return false;
79         }
80         if (!parcel.WriteString16(number_)) {
81             return false;
82         }
83         if (!parcel.WriteString16(pin2_)) {
84             return false;
85         }
86         if (!parcel.WriteString16Vector(emails_)) {
87             return false;
88         }
89         return true;
90     }
91 
UnMarshalling(Parcel & parcel)92     static std::shared_ptr<DiallingNumbersInfo> UnMarshalling(Parcel &parcel)
93     {
94         std::shared_ptr<DiallingNumbersInfo> param = std::make_shared<DiallingNumbersInfo>();
95         if (param == nullptr) {
96             return nullptr;
97         }
98         if (!param->ReadFromParcel(parcel)) {
99             return nullptr;
100         }
101         return param;
102     }
103 
DiallingNumbersInfo()104     DiallingNumbersInfo() {}
105 
DiallingNumbersInfo(int32_t efid,int32_t recordNumber)106     DiallingNumbersInfo(int32_t efid, int32_t recordNumber)
107     {
108         elementaryFileId_ = efid;
109         index_ = recordNumber;
110     }
111 
DiallingNumbersInfo(std::u16string & alphaTag,std::u16string & number)112     DiallingNumbersInfo(std::u16string &alphaTag, std::u16string &number)
113     {
114         DiallingNumbersInfo(0, 0, alphaTag, number);
115     }
116 
DiallingNumbersInfo(std::u16string alphaTag,std::u16string number,std::vector<std::u16string> & emails)117     DiallingNumbersInfo(std::u16string alphaTag, std::u16string number, std::vector<std::u16string> &emails)
118     {
119         DiallingNumbersInfo(0, 0, alphaTag, number, emails);
120     }
121 
DiallingNumbersInfo(int32_t efid,int32_t recordNumber,std::u16string alphaTag,std::u16string number,std::vector<std::u16string> & emails)122     DiallingNumbersInfo(int32_t efid, int32_t recordNumber, std::u16string alphaTag, std::u16string number,
123         std::vector<std::u16string> &emails)
124     {
125         elementaryFileId_ = efid;
126         index_ = recordNumber;
127         name_ = alphaTag;
128         number_ = number;
129         emails_.assign(emails.begin(), emails.end());
130     }
131 
DiallingNumbersInfo(int32_t efid,int32_t recordNumber,std::u16string & alphaTag,std::u16string & number)132     DiallingNumbersInfo(int32_t efid, int32_t recordNumber, std::u16string &alphaTag, std::u16string &number)
133     {
134         elementaryFileId_ = efid;
135         index_ = recordNumber;
136         name_ = alphaTag;
137         number_ = number;
138     }
139 
~DiallingNumbersInfo()140     virtual ~DiallingNumbersInfo() {}
141 
GetName()142     std::u16string GetName()
143     {
144         return name_;
145     }
146 
GetFileId()147     int32_t GetFileId()
148     {
149         return elementaryFileId_;
150     }
151 
GetIndex()152     int32_t GetIndex()
153     {
154         return index_;
155     }
156 
GetNumber()157     std::u16string GetNumber()
158     {
159         return number_;
160     }
161 
UpdateNumber(std::u16string number)162     void UpdateNumber(std::u16string number)
163     {
164         number_ = number;
165     }
166 
GetEmails()167     std::vector<std::u16string> GetEmails()
168     {
169         return emails_;
170     }
171 
UpdateEmails(std::vector<std::u16string> & emails)172     void UpdateEmails(std::vector<std::u16string> &emails)
173     {
174         emails_.assign(emails.begin(), emails.end());
175     }
176 
IsEmpty()177     bool IsEmpty()
178     {
179         return (name_.empty() && number_.empty() && emails_.empty());
180     }
181 };
182 } // namespace Telephony
183 } // namespace OHOS
184 #endif // OHOS_DIALLING_NUMBER_INFO_H