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 #ifndef OHOS_VCARD_CONSRACT_H 17 #define OHOS_VCARD_CONSRACT_H 18 #include <memory> 19 #include <mutex> 20 #include <type_traits> 21 #include <vector> 22 23 #include "vcard_anniversary_data.h" 24 #include "vcard_birthday_data.h" 25 #include "vcard_constant.h" 26 #include "vcard_contact_data.h" 27 #include "vcard_email_data.h" 28 #include "vcard_event_data.h" 29 #include "vcard_im_data.h" 30 #include "vcard_name_data.h" 31 #include "vcard_nickname_data.h" 32 #include "vcard_note_data.h" 33 #include "vcard_organization_data.h" 34 #include "vcard_phone_data.h" 35 #include "vcard_photo_data.h" 36 #include "vcard_postal_data.h" 37 #include "vcard_raw_data.h" 38 #include "vcard_rdb_helper.h" 39 #include "vcard_relation_data.h" 40 #include "vcard_sip_data.h" 41 #include "vcard_website_data.h" 42 #include "vcard_group_data.h" 43 #include "vcard_uid_data.h" 44 45 namespace OHOS { 46 namespace Telephony { 47 class VCardContact { 48 public: VCardContact()49 VCardContact() 50 { 51 vCardType_ = VERSION_21; 52 nameData_ = std::make_shared<VCardNameData>(); 53 birthday_ = std::make_shared<VCardBirthdayData>(); 54 anniversary_ = std::make_shared<VCardAnniversaryData>(); 55 }; ~VCardContact()56 ~VCardContact() {} 57 void AddRawData(std::shared_ptr<VCardRawData> rawData, int32_t &errorCode); 58 int32_t BuildContactData(int32_t rawId, std::vector<DataShare::DataShareValuesBucket> &contactDataValues); 59 int32_t BuildContact(std::shared_ptr<DataShare::DataShareResultSet> resultSet); 60 void Init(); 61 std::shared_ptr<VCardNameData> GetNameData(); 62 std::vector<std::shared_ptr<VCardNameData>> GetNames(); 63 std::vector<std::shared_ptr<VCardRelationData>> GetRelations(); 64 std::vector<std::shared_ptr<VCardImData>> GetIms(); 65 std::vector<std::shared_ptr<VCardSipData>> GetSips(); 66 std::vector<std::shared_ptr<VCardPhoneData>> GetPhones(); 67 std::vector<std::shared_ptr<VCardOrganizationData>> GetOrganizations(); 68 std::vector<std::shared_ptr<VCardWebsiteData>> GetWebsites(); 69 std::vector<std::shared_ptr<VCardPhotoData>> GetPhotos(); 70 std::vector<std::shared_ptr<VCardEmailData>> GetEmails(); 71 std::vector<std::shared_ptr<VCardNicknameData>> GetNicknames(); 72 std::vector<std::shared_ptr<VCardPostalData>> GetPostalDatas(); 73 std::vector<std::shared_ptr<VCardEventData>> GetEventDatas(); 74 std::vector<std::shared_ptr<VCardNoteData>> GetNotes(); 75 std::shared_ptr<VCardBirthdayData> GetBirthdays(); 76 std::vector<std::shared_ptr<VCardGroupData>> GetGroups(); 77 std::string GetUid(); 78 79 private: 80 void BuildValuesBucket(int32_t rawId, std::vector<DataShare::DataShareValuesBucket> &contactDataValues, 81 std::shared_ptr<VCardContactData> contactData); 82 template<typename T> 83 void BuildValuesBuckets(int32_t rawId, std::vector<DataShare::DataShareValuesBucket> &contactDataValues, 84 std::vector<std::shared_ptr<T>> &contactDatas); 85 template<typename T> 86 void BuildData( 87 std::shared_ptr<DataShare::DataShareResultSet> resultSet, std::vector<std::shared_ptr<T>> &contactDatas); 88 int32_t BuildOneData(std::shared_ptr<DataShare::DataShareResultSet> resultSet); 89 int32_t BuildOtherData(int32_t typeId, std::shared_ptr<DataShare::DataShareResultSet> resultSet); 90 void AddDatas(std::string name, std::string rawValue, std::string byte, std::vector<std::string> values, 91 std::string propValue, std::vector<std::string> groups, 92 std::map<std::string, std::vector<std::string>> parasMap); 93 void HandleName(std::vector<std::string> values, std::map<std::string, std::vector<std::string>> parasMap); 94 void HandleSortAsName(std::map<std::string, std::vector<std::string>> parasMap); 95 void HandleNickName(std::string nickName); 96 void HandlePhoneticNameFromSound(std::vector<std::string> elems); 97 void AddPostal(int32_t type, std::vector<std::string> propValueList, std::string label, bool isPrimary); 98 void AddEmail(int32_t type, std::string data, std::string label, std::string displayname, bool isPrimary); 99 void HandleOrgValue(int32_t type, std::vector<std::string> orgList, 100 std::map<std::string, std::vector<std::string>> paramMap, bool isPrimary); 101 std::string BuildSinglePhoneticNameFromSortAsParam(std::map<std::string, std::vector<std::string>> paramMap); 102 void AddNewOrganization(std::string organizationName, std::string departmentName, std::string company, 103 std::string titleName, std::string phoneticName, int32_t type, bool isPrimary); 104 void HandleTitleValue(std::string title); 105 void AddPhotoBytes(std::string formatName, std::string photoBytes, bool isPrimary); 106 void HandleSipCase(std::string propValue, std::vector<std::string> typeCollection); 107 void AddPhone(int32_t type, std::string data, std::string label, bool isPrimary); 108 void AddSip(std::string sipData, int32_t type, std::string label, bool isPrimary); 109 void AddNote(const std::string note); 110 void AddIms(std::string name, std::string rawValue, std::string propValue, std::vector<std::string> values, 111 std::map<std::string, std::vector<std::string>> parasMap); 112 void AddNameData(std::string name, std::string rawValue, std::vector<std::string> values, 113 std::map<std::string, std::vector<std::string>> parasMap, std::string propValue); 114 void AddCustom( 115 std::string rawValue, std::map<std::string, std::vector<std::string>> parasMap, std::string propValue); 116 void SetSip(std::string rawValue, std::map<std::string, std::vector<std::string>> parasMap, std::string propValue); 117 void AddSipData( 118 std::string rawValue, std::map<std::string, std::vector<std::string>> parasMap, std::string propValue); 119 void AddPhonesData(std::string rawValue, std::string propValue, std::vector<std::string> values, 120 std::map<std::string, std::vector<std::string>> parasMap); 121 void AddOrganizationsData(std::string rawValue, std::string propValue, std::vector<std::string> values, 122 std::map<std::string, std::vector<std::string>> parasMap); 123 void AddEmailsData(std::string rawValue, std::string propValue, std::vector<std::string> values, 124 std::map<std::string, std::vector<std::string>> parasMap); 125 void AddPostalDatas(std::string rawValue, std::string propValue, std::vector<std::string> values, 126 std::map<std::string, std::vector<std::string>> parasMap); 127 void AddSoundDatas(std::string rawValue, std::string propValue, std::vector<std::string> values, 128 std::map<std::string, std::vector<std::string>> parasMap); 129 void AddPhotoDatas(std::string byte, std::string rawValue, std::string propValue, std::vector<std::string> values, 130 std::map<std::string, std::vector<std::string>> parasMap); 131 void AddSkypePstnNumDatas(std::string propValue, std::map<std::string, std::vector<std::string>> parasMap); 132 void AddWebSiteDatas(std::string rawValue, std::string propValue, std::vector<std::string> values, 133 std::map<std::string, std::vector<std::string>> parasMap); 134 void AddBirthdayDatas(std::string rawValue); 135 void AddAnniversaryDatas(std::string propValue); 136 void AddImppDatas(std::string propValue, std::map<std::string, std::vector<std::string>> parasMap); 137 void HandlePhoneCase(std::string phoneNumber, std::string rawValue, std::string propValue, 138 std::vector<std::string> values, std::map<std::string, std::vector<std::string>> parasMap); 139 void AddOtherDatas(std::string name, std::string rawValue, std::string byte, std::vector<std::string> values, 140 std::string propValue, std::vector<std::string> groups, 141 std::map<std::string, std::vector<std::string>> parasMap); 142 std::vector<std::string> GetValueListFromParasMap( 143 std::string rawValue, std::string propValue, std::map<std::string, std::vector<std::string>> parasMap); 144 void CheckNameExist(); 145 std::string ConvertHarmonyEvents(std::string type, std::string value); 146 void AddGroups(std::string rawValue); 147 void AddRemainDatas(std::string name, std::string rawValue, std::vector<std::string> values, 148 std::string propValue, std::map<std::string, std::vector<std::string>> parasMap); 149 void AddUID(std::string rawValue); 150 bool HasValidNameData(); 151 void UpdateDisplayName(); 152 153 private: 154 const int32_t SORT_NAME_MAX_VALUE_SIZE = 3; 155 const int32_t N_MAX_VALUE_SIZE = 5; 156 const int32_t N_SUFFIX_VALUE_INDEX = 4; 157 const int32_t N_PREFIX_VALUE_INDEX = 3; 158 const int32_t N_MIDDLE_VALUE_INDEX = 2; 159 const int32_t N_GIVEN_VALUE_INDEX = 1; 160 const int32_t N_FAMILY_VALUE_INDEX = 0; 161 const int32_t PHONETIC_FAMILY_VALUE_INDEX = 0; 162 const int32_t PHONETIC_GIVEN_VALUE_INDEX = 1; 163 const int32_t PHONETIC_MIDDLE_VALUE_INDEX = 2; 164 const int32_t PHONE_NAME_SOUND_MAX_VALUE_SIZE = 3; 165 std::string vCardType_; 166 std::shared_ptr<VCardNameData> nameData_; 167 std::shared_ptr<VCardBirthdayData> birthday_; 168 std::shared_ptr<VCardAnniversaryData> anniversary_; 169 std::vector<std::shared_ptr<VCardNameData>> names_; 170 std::vector<std::shared_ptr<VCardPhoneData>> phones_; 171 std::vector<std::shared_ptr<VCardRelationData>> relations_; 172 std::vector<std::shared_ptr<VCardEmailData>> emails_; 173 std::vector<std::shared_ptr<VCardPostalData>> postals_; 174 std::vector<std::shared_ptr<VCardOrganizationData>> organizations_; 175 std::vector<std::shared_ptr<VCardImData>> ims_; 176 std::vector<std::shared_ptr<VCardPhotoData>> photos_; 177 std::vector<std::shared_ptr<VCardWebsiteData>> websites_; 178 std::vector<std::shared_ptr<VCardSipData>> sips_; 179 std::vector<std::shared_ptr<VCardNicknameData>> nicknames_; 180 std::vector<std::shared_ptr<VCardNoteData>> notes_; 181 std::vector<std::shared_ptr<VCardEventData>> events_; 182 std::vector<std::shared_ptr<VCardGroupData>> groups_; 183 std::shared_ptr<VCardUidData> uid_; 184 }; 185 } // namespace Telephony 186 } // namespace OHOS 187 #endif // OHOS_OHOS_VCARD_CONSRACT_H 188