From 992112ad94d5cdb18d631cca4eab84bd7e3a6d2d Mon Sep 17 00:00:00 2001 From: zhuchao Date: Thu, 17 Mar 2022 12:45:03 +0800 Subject: [PATCH] Update Contacts code Signed-off-by: zhuchao --- LICENSE | 27 +- OAT.xml | 134 +- README.md | 63 +- README_zh.md | 49 - build.gradle | 35 +- doc/Instructions.md | 232 --- doc/image/3-1.png | Bin 21041 -> 0 bytes doc/image/3-2.png | Bin 75450 -> 0 bytes doc/image/cmd1.png | Bin 71867 -> 0 bytes doc/image/cmd2.png | Bin 110399 -> 0 bytes doc/image/cmd3.png | Bin 24588 -> 0 bytes doc/image/commit_source_clone_page.png | Bin 99056 -> 0 bytes doc/image/commit_source_fork_button.png | Bin 56140 -> 0 bytes doc/image/commit_source_fork_confirm.png | Bin 24250 -> 0 bytes doc/image/commit_source_forked_repo1.png | Bin 48947 -> 0 bytes doc/image/commit_source_new_pr_done.png | Bin 29494 -> 0 bytes doc/image/commit_source_new_pull_request.png | Bin 36404 -> 0 bytes ...commit_source_new_pull_request_confirm.png | Bin 43340 -> 0 bytes doc/image/ds_build_haps.png | Bin 13633 -> 0 bytes doc/image/ds_download.png | Bin 118418 -> 0 bytes doc/image/ds_exe.png | Bin 33993 -> 0 bytes doc/image/ds_hilog_window.png | Bin 74859 -> 0 bytes doc/image/ds_i18n_files.png | Bin 6246 -> 0 bytes doc/image/ds_install_1.png | Bin 165386 -> 0 bytes doc/image/ds_install_2.png | Bin 238501 -> 0 bytes doc/image/ds_ohosbuild_output_dir.png | Bin 6000 -> 0 bytes doc/image/ds_ohosbuild_output_dir_release.png | Bin 8623 -> 0 bytes doc/image/ds_ohosbuild_variants.png | Bin 28168 -> 0 bytes doc/image/ds_ohosbuild_variants_debug.png | Bin 27456 -> 0 bytes doc/image/ds_ohosbuild_variants_release.png | Bin 36964 -> 0 bytes doc/image/git_ssh_pub_key.png | Bin 8249 -> 0 bytes doc/image/hw_register.png | Bin 47334 -> 0 bytes doc/image/image-20220222110725915.png | Bin 0 -> 50484 bytes doc/image/read.png | Bin 27177 -> 0 bytes doc/image/sdk_catalogue.png | Bin 60040 -> 0 bytes doc/image/sdk_downloading.png | Bin 81988 -> 0 bytes doc/image/sdk_environment_variable.png | Bin 25883 -> 0 bytes doc/image/signature_1.png | Bin 20463 -> 0 bytes doc/image/signature_2.png | Bin 23849 -> 0 bytes doc/image/signature_3.png | Bin 46849 -> 0 bytes doc/image/source_download_1.png | Bin 17731 -> 0 bytes entry/.gitignore | 1 + entry/build.gradle | 32 +- entry/src/main/config.json | 99 +- .../account/AccountTypeService.ets | 31 + .../account/IAccountTypeService.ets | 23 + .../MainAbility/account/type/AccountType.ets | 25 + .../MainAbility/account/type/DataKind.ets} | 25 +- .../ets/MainAbility/account/type/EditType.ets | 27 + .../account/type/PhoneAccountType.ets | 206 ++ entry/src/main/ets/MainAbility/app.ets | 33 + .../ets/MainAbility/call/CallLogService.ets | 199 ++ .../ets/MainAbility/call/ICallLogService.ets | 26 + .../ets/MainAbility/call/contract/Calls.ets | 90 + .../MainAbility/call/contract/VoiceMails.ets | 43 + .../ets/MainAbility/call/entity/CallLog.ets | 101 + .../call/entity/CallLogBuilder.ets | 173 ++ .../MainAbility/call/entity/MergedCallLog.ets | 42 + .../MainAbility/call/repo/CallLogDelta.ets | 53 + .../call/repo/CallLogRepository.ets | 191 ++ .../call/repo/ICallLogRepository.ets | 35 + .../component/contact/ContactEmptyPage.ets | 109 + .../component/contact/ContactListItemView.ets | 165 ++ .../component/contact/ContactSearchPage.ets | 164 ++ .../BatchSelectContactItemView.ets | 128 ++ .../BatchSelectRecentItemView.ets | 111 + .../batchselectcontacts/BatchTabGuide.ets | 64 + .../component/contactdetail/DetailCalllog.ets | 163 ++ .../contactdetail/DetailInfoListItemView.ets | 45 + .../contactdetail/DetailInfoListView.ets | 779 +++++++ .../component/dialer/CallLogTabs.ets | 74 + .../ets/MainAbility/contact/contract/Aim.ets | 58 + .../contact/contract/BaseColumns.ets} | 16 +- .../MainAbility/contact/contract/Birthday.ets | 44 + .../MainAbility/contact/contract/Contacts.ets | 28 + .../contact/contract/ContactsColumns.ets | 49 + .../ets/MainAbility/contact/contract/Data.ets | 27 + .../contact/contract/DataColumns.ets | 58 + .../MainAbility/contact/contract/DataType.ets | 49 + .../MainAbility/contact/contract/Email.ets | 44 + .../MainAbility/contact/contract/Event.ets | 44 + .../MainAbility/contact/contract/House.ets | 43 + .../ets/MainAbility/contact/contract/Im.ets | 51 + .../MainAbility/contact/contract/Nickname.ets | 31 + .../ets/MainAbility/contact/contract/Note.ets | 31 + .../contact/contract/Organization.ets | 32 + .../MainAbility/contact/contract/Phone.ets | 53 + .../contact/contract/RawContacts.ets | 28 + .../contact/contract/RawContactsColumns.ets | 83 + .../contact/contract/RawContactsEntity.ets | 27 + .../MainAbility/contact/contract/Relation.ets | 81 + .../contact/contract/StructuredPostal.ets | 50 + .../MainAbility/contact/contract/Website.ets | 30 + .../MainAbility/contact/entity/Contact.ets | 117 ++ .../contact/entity/ContactBuilder.ets | 153 ++ .../MainAbility/contact/entity/DataItem.ets | 89 + .../contact/entity/EmailDataItem.ets | 33 + .../contact/entity/EventDataItem.ets | 29 + .../MainAbility/contact/entity/ImDataItem.ets | 29 + .../contact/entity/NicknameDataItem.ets | 29 + .../contact/entity/NoteDataItem.ets | 29 + .../contact/entity/OrganizationDataItem.ets | 32 + .../contact/entity/PhoneDataItem.ets | 29 + .../MainAbility/contact/entity/RawContact.ets | 55 + .../contact/entity/RelationDataItem.ets | 29 + .../entity/StructuredPostalDataItem.ets | 45 + .../contact/entity/WebsiteDataItem.ets | 29 + .../contact/repo/AddressBookIndex.ets | 22 + .../MainAbility/contact/repo/ContactDelta.ets | 56 + .../MainAbility/contact/repo/ContactList.ets | 26 + .../contact/repo/ContactListItem.ets | 45 + .../contact/repo/ContactRepository.ets | 218 ++ .../MainAbility/contact/repo/DAOperation.ets | 69 + .../contact/repo/IContactRepository.ets | 36 + .../contact/repo/RawContactDelta.ets | 103 + .../MainAbility/contact/repo/ValuesDelta.ets | 119 ++ .../main/ets/MainAbility/dialpad/Dialpad.ets | 53 + .../MainAbility/dialpad/SmartSearchList.ets | 26 + .../ets/MainAbility/feature/PhoneNumber.ets | 60 + .../MainAbility/model/ContactAbilityModel.ets | 795 +++++++ .../ets/MainAbility/model/bean/AIMBean.ets | 29 + .../model/bean/AssociatedPersonBean.ets | 27 + .../ets/MainAbility/model/bean/CallBean.ets | 103 + .../MainAbility/model/bean/CallLogBean.ets | 34 + .../MainAbility/model/bean/ContactBean.ets | 137 ++ .../MainAbility/model/bean/ContactInfo.ets | 131 ++ .../ets/MainAbility/model/bean/ContactVo.ets | 87 + .../ets/MainAbility/model/bean/EmailBean.ets | 28 + .../MainAbility/model/bean/EventBean.ets} | 33 +- .../ets/MainAbility/model/bean/GroupBean.ets | 28 + .../ets/MainAbility/model/bean/HouseBean.ets | 29 + .../MainAbility/model/bean/LooseObject.ets} | 26 +- .../MainAbility/model/bean/PhoneNumBean.ets | 32 + .../MainAbility/model/bean/RelationBean.ets | 32 + .../ets/MainAbility/model/bean/RemDayBean.ets | 30 + .../model/calllog/CalllogModel.ets | 138 ++ .../src/main/ets/MainAbility/model/common.ets | 36 + .../MainAbility/model/common/Constants.ets | 80 + .../model/common/DbChangeHelper.ets | 78 + .../MainAbility/model/contactDetailModel.ets | 1074 ++++++++++ .../src/main/ets/MainAbility/pages/Index.ets | 131 ++ .../pages/contacts/ContactList.ets | 253 +++ .../contacts/accountants/Accountants.ets | 923 +++++++++ .../BatchSelectContactsPage.ets | 368 ++++ .../pages/contacts/details/ContactDetail.ets | 419 ++++ .../MainAbility/pages/dialer/DialerTablet.ets | 448 ++++ .../pages/dialer/callRecord/AllRecord.ets | 424 ++++ .../pages/dialer/callRecord/CallRecord.ets | 61 + .../pages/dialer/callRecord/MissedRecord.ets | 392 ++++ .../pages/dialog/DeleteDialogEx.ets | 82 + .../pages/dialog/ShareDialogEx.ets | 72 + .../pages/navigation/Navigation.ets | 102 + .../MainAbility/pages/phone/dialer/Dialer.ets | 579 ++++++ .../phone/dialer/callRecord/AllRecord.ets | 400 ++++ .../phone/dialer/callRecord/CallRecord.ets | 61 + .../phone/dialer/callRecord/MissedRecord.ets | 395 ++++ .../MainAbility/presenter/IndexPresenter.ets | 278 +++ .../contact/ContactListPresenter.ets | 224 ++ .../accountants/AccountantsPresenter.ets | 467 +++++ .../BatchSelectContactsPresenter.ets | 881 ++++++++ .../presenter/dialer/DialerPresenter.ets | 346 ++++ .../navigation/NavigationPresenter.ets | 61 + .../ets/MainAbility/util/AppStorageUtil.ets | 149 ++ .../MainAbility/util/ArrayUtil.ets} | 12 +- .../MainAbility/util/ContactsLog.ets} | 12 +- .../main/ets/MainAbility/util/DialUtil.ets | 73 + entry/src/main/ets/MainAbility/util/HiLog.ets | 59 + .../main/ets/MainAbility/util/Pasteboard.ets | 39 + .../ets/MainAbility/util/PreferencesUtil.ets | 102 + .../main/ets/MainAbility/util/StringUtil.ets | 25 + .../MainAbility/util/Utils.ets} | 49 +- .../js/ServiceAbility/missedCallsService.js | 77 - entry/src/main/js/ServiceAbility/service.js | 37 - entry/src/main/js/default/app.js | 181 -- .../src/main/js/default/base/base_color.scss | 22 - entry/src/main/js/default/base/base_style.css | 19 - .../component/contactlist/contactList.css | 415 ---- .../component/contactlist/contactList.hml | 170 -- .../component/contactlist/contactList.js | 77 - .../common/component/dialog/dialog.css | 61 - .../common/component/dialog/dialog.hml | 26 - .../default/common/component/dialog/dialog.js | 34 - .../default/common/component/title/title.css | 61 - .../default/common/component/title/title.hml | 21 - .../default/common/component/title/title.js | 26 - .../js/default/common/constants/Constants.js | 38 - .../main/js/default/common/constants/color.js | 19 - entry/src/main/js/default/i18n/en-US.json | 584 ------ entry/src/main/js/default/i18n/zh-CN.json | 554 ----- .../main/js/default/model/AccountantsModel.js | 785 ------- .../src/main/js/default/model/CalllogModel.js | 634 ------ .../js/default/model/ContactDetailModel.js | 338 --- .../src/main/js/default/model/ContactModel.js | 236 --- .../main/js/default/model/CustomizeModel.js | 58 - .../main/js/default/model/FavoritesModel.js | 388 ---- .../main/js/default/model/GreetingModel.js | 118 -- .../src/main/js/default/model/GroupsModel.js | 1061 ---------- .../default/model/SelectContactsListModel.js | 121 -- .../js/default/model/SelectcontactsModel.js | 105 - entry/src/main/js/default/model/mergeModel.js | 106 - .../main/js/default/model/recentlydelModel.js | 82 - .../src/main/js/default/model/recoverModel.js | 54 - .../main/js/default/pages/calllog/calllog.hml | 403 ---- .../main/js/default/pages/calllog/calllog.js | 539 ----- .../js/default/pages/calllog/calllog.scss | 344 ---- .../contacts/accountants/accountants.css | 473 ----- .../contacts/accountants/accountants.hml | 472 ----- .../pages/contacts/accountants/accountants.js | 1832 ----------------- .../accountants/takephone/takephone.css | 77 - .../accountants/takephone/takephone.hml | 27 - .../accountants/takephone/takephone.js | 49 - .../batchselectcontacts.css | 551 ----- .../batchselectcontacts.hml | 155 -- .../batchselectcontacts.js | 957 --------- .../js/default/pages/contacts/card/card.css | 372 ---- .../js/default/pages/contacts/card/card.hml | 270 --- .../js/default/pages/contacts/card/card.js | 382 ---- .../contacts/contactDetail/contactDetail.hml | 563 ----- .../contacts/contactDetail/contactDetail.js | 1724 ---------------- .../contacts/contactDetail/contactDetail.scss | 735 ------- .../js/default/pages/contacts/contacts.css | 849 -------- .../js/default/pages/contacts/contacts.hml | 401 ---- .../js/default/pages/contacts/contacts.js | 1045 ---------- .../groups/deleteGroup/deleteGroup.css | 450 ---- .../groups/deleteGroup/deleteGroup.hml | 114 - .../groups/deleteGroup/deleteGroup.js | 297 --- .../groupListWithContacts.css | 367 ---- .../groupListWithContacts.hml | 237 --- .../groupListWithContacts.js | 284 --- .../groupMembersList/groupMembersList.css | 379 ---- .../groupMembersList/groupMembersList.hml | 179 -- .../groupMembersList/groupMembersList.js | 280 --- .../default/pages/contacts/groups/groups.css | 320 --- .../default/pages/contacts/groups/groups.hml | 161 -- .../default/pages/contacts/groups/groups.js | 261 --- .../groups/recentContacts/recentContacts.css | 120 -- .../groups/recentContacts/recentContacts.hml | 40 - .../groups/recentContacts/recentContacts.js | 101 - .../recentContactsList/recentContactsList.css | 380 ---- .../recentContactsList/recentContactsList.hml | 78 - .../recentContactsList/recentContactsList.js | 144 -- .../selectGroupMembers/selectGroupMembers.css | 356 ---- .../selectGroupMembers/selectGroupMembers.hml | 356 ---- .../selectGroupMembers/selectGroupMembers.js | 742 ------- .../selectContactsList/selectContactsList.css | 589 ------ .../selectContactsList/selectContactsList.hml | 400 ---- .../selectContactsList/selectContactsList.js | 1261 ------------ .../pages/contacts/settings/about/about.css | 115 -- .../pages/contacts/settings/about/about.hml | 41 - .../pages/contacts/settings/about/about.js | 40 - .../settings/about/license/license.css | 121 -- .../settings/about/license/license.hml | 517 ----- .../settings/display/customize/customize.css | 220 -- .../settings/display/customize/customize.hml | 90 - .../settings/display/customize/customize.js | 162 -- .../contacts/settings/display/display.css | 188 -- .../contacts/settings/display/display.hml | 84 - .../contacts/settings/display/display.js | 203 -- .../settings/imorexport/imorexport.css | 436 ---- .../settings/imorexport/imorexport.hml | 203 -- .../settings/imorexport/imorexport.js | 263 --- .../pages/contacts/settings/manage/manage.css | 185 -- .../pages/contacts/settings/manage/manage.hml | 60 - .../pages/contacts/settings/manage/manage.js | 62 - .../contacts/settings/manage/merge/merge.css | 281 --- .../contacts/settings/manage/merge/merge.hml | 96 - .../contacts/settings/manage/merge/merge.js | 235 --- .../manage/recentlydel/recentlydel.css | 266 --- .../manage/recentlydel/recentlydel.hml | 93 - .../manage/recentlydel/recentlydel.js | 170 -- .../manage/recentlydel/recover/recover.css | 280 --- .../manage/recentlydel/recover/recover.hml | 99 - .../manage/recentlydel/recover/recover.js | 251 --- .../pages/contacts/settings/settings.css | 163 -- .../pages/contacts/settings/settings.hml | 71 - .../pages/contacts/settings/settings.js | 59 - .../shareContactsList/shareContactsList.css | 358 ---- .../shareContactsList/shareContactsList.hml | 158 -- .../shareContactsList/shareContactsList.js | 191 -- .../dialer/calllogdelete/calllogdelete.css | 141 -- .../dialer/calllogdelete/calllogdelete.hml | 51 - .../dialer/calllogdelete/calllogdelete.js | 286 --- .../main/js/default/pages/dialer/dialer.hml | 474 ----- .../main/js/default/pages/dialer/dialer.js | 1564 -------------- .../main/js/default/pages/dialer/dialer.scss | 858 -------- .../pages/dialer/greeting/delete/delete.css | 208 -- .../pages/dialer/greeting/delete/delete.hml | 60 - .../pages/dialer/greeting/delete/delete.js | 140 -- .../pages/dialer/greeting/greeting.css | 263 --- .../pages/dialer/greeting/greeting.hml | 107 - .../default/pages/dialer/greeting/greeting.js | 239 --- .../speeddial/selectContact/selectcontact.css | 103 - .../speeddial/selectContact/selectcontact.hml | 58 - .../speeddial/selectContact/selectcontact.js | 422 ---- .../pages/dialer/speeddial/speeddial.css | 227 -- .../pages/dialer/speeddial/speeddial.hml | 74 - .../pages/dialer/speeddial/speeddial.js | 123 -- .../voicemailsettings/voicemailsettings.css | 200 -- .../voicemailsettings/voicemailsettings.hml | 89 - .../voicemailsettings/voicemailsettings.js | 95 - .../default/pages/favorites/delete/delete.css | 203 -- .../default/pages/favorites/delete/delete.hml | 109 - .../default/pages/favorites/delete/delete.js | 236 --- .../js/default/pages/favorites/favorites.css | 696 ------- .../js/default/pages/favorites/favorites.hml | 143 -- .../js/default/pages/favorites/favorites.js | 338 --- .../src/main/js/default/pages/index/index.hml | 16 - .../src/main/js/default/pages/index/index.js | 205 -- .../js/default/pages/index_demo/index.hml | 43 - .../main/js/default/pages/index_demo/index.js | 277 --- .../default/pages/navigation/navigation.css | 124 -- .../default/pages/navigation/navigation.hml | 58 - .../js/default/pages/navigation/navigation.js | 286 --- .../main/js/default/res/image/assistant.svg | 15 - entry/src/main/js/default/res/image/birth.svg | 15 - .../main/js/default/res/image/boardmin.jpg | Bin 16638 -> 0 bytes .../src/main/js/default/res/image/collect.png | Bin 4020 -> 0 bytes .../src/main/js/default/res/image/contact.png | Bin 3109 -> 0 bytes .../main/js/default/res/image/contacts.png | Bin 20091 -> 0 bytes entry/src/main/js/default/res/image/email.png | Bin 1352 -> 0 bytes entry/src/main/js/default/res/image/house.svg | 15 - .../default/res/image/ic_avatar_default.svg | 68 - .../src/main/js/default/res/image/ic_back.svg | 7 - .../js/default/res/image/ic_camera_back.svg | 46 - .../js/default/res/image/ic_camera_filled.svg | 12 - .../main/js/default/res/image/ic_cancel_m.svg | 76 - .../main/js/default/res/image/ic_close_m.svg | 9 - .../res/image/ic_contacts_Earpiece_m.svg | 17 - .../default/res/image/ic_contacts_HD_mini.svg | 13 - .../res/image/ic_contacts_account_40.svg | 59 - .../res/image/ic_contacts_add_favourites.svg | 13 - .../default/res/image/ic_contacts_add_m_1.svg | 7 - .../res/image/ic_contacts_allergies_m.svg | 15 - .../res/image/ic_contacts_arrow_down.svg | 60 - .../res/image/ic_contacts_arrow_unfold.svg | 71 - .../res/image/ic_contacts_arrow_up_s.svg | 23 - .../res/image/ic_contacts_call 1 dial_m.svg | 15 - .../res/image/ic_contacts_call 2 dial_m.svg | 19 - .../res/image/ic_contacts_call HD dial_56.svg | 25 - .../image/ic_contacts_call HD dial_56.svg.svg | 11 - ...c_contacts_call HD dial_56_clicked.svg.svg | 11 - .../js/default/res/image/ic_contacts_call.png | Bin 21968 -> 0 bytes .../res/image/ic_contacts_call_dial_56.svg | 30 - .../res/image/ic_contacts_company_m.svg | 25 - .../res/image/ic_contacts_detail_qrcode.svg | 23 - .../image/ic_contacts_dial call HD_1_m.svg | 34 - .../res/image/ic_contacts_dial call_1_m.svg | 10 - .../res/image/ic_contacts_dial call_2_m.svg | 10 - .../image/ic_contacts_dial call_HD_2_m.svg | 22 - .../res/image/ic_contacts_edit address_m.svg | 24 - .../ic_contacts_edit assistant_m.svg.svg | 16 - .../res/image/ic_contacts_edit nickname_m.svg | 30 - .../image/ic_contacts_edit remark_m.svg.svg | 9 - .../js/default/res/image/ic_contacts_edit.svg | 15 - .../image/ic_contacts_edit_group_m.svg.svg | 12 - .../default/res/image/ic_contacts_email_m.svg | 9 - .../image/ic_contacts_empty_calllog_72.svg | 22 - .../image/ic_contacts_empty_contact_72.svg | 17 - .../image/ic_contacts_empty_voicemaile_72.svg | 12 - .../res/image/ic_contacts_favorite_add.svg | 88 - .../res/image/ic_contacts_filled_m.svg | 82 - .../default/res/image/ic_contacts_group.svg | 65 - .../res/image/ic_contacts_groups_add.svg | 7 - .../res/image/ic_contacts_groups_disabled.svg | 46 - .../js/default/res/image/ic_contacts_m.svg | 82 - .../image/ic_contacts_pause voicemail_m.svg | 11 - .../image/ic_contacts_play voicemail_m.svg | 14 - .../res/image/ic_contacts_shortcut_me_36.svg | 27 - .../res/image/ic_contacts_shortcut_new_36.svg | 24 - .../res/image/ic_contacts_sim_1_mini.svg | 12 - .../res/image/ic_contacts_sim_2_mini.svg | 13 - .../image/ic_contacts_speeddial_voice_40.svg | 23 - .../image/ic_contacts_speeddial_voice_72.svg | 12 - .../res/image/ic_contacts_voicemail_s.svg | 11 - .../js/default/res/image/ic_delete_white.svg | 26 - .../js/default/res/image/ic_massage_m.svg | 12 - .../res/image/ic_meetime_24x24_message.svg | 11 - .../res/image/ic_meetime_24x24_video_s.svg | 13 - .../js/default/res/image/ic_more_24x12.svg | 15 - .../js/default/res/image/ic_more_24x24.svg | 64 - .../res/image/ic_more_24x24_favorite.svg | 64 - .../res/image/ic_phonecall_filled_m.svg | 72 - .../js/default/res/image/ic_phonecall_m.svg | 82 - .../res/image/ic_select all_filled_m.svg | 9 - .../js/default/res/image/ic_select all_m.svg | 9 - .../res/image/ic_select_contacts_empty_36.svg | 26 - .../main/js/default/res/image/ic_share_m.svg | 10 - .../default/res/image/ic_speed_dial_add.svg | 10 - .../image/ic_speed_select_contact_empty.svg | 26 - .../main/js/default/res/image/ic_video_m.svg | 8 - .../main/js/default/res/image/ic_volume_m.svg | 12 - .../src/main/js/default/res/image/massage.svg | 15 - entry/src/main/js/default/res/image/nick.svg | 15 - .../main/js/default/res/image/phonnume.png | Bin 1912 -> 0 bytes .../main/js/default/res/image/renameGroup.png | Bin 2703 -> 0 bytes .../main/js/default/res/image/star_moves.png | Bin 1174 -> 0 bytes .../src/main/js/default/res/image/website.svg | 15 - entry/src/main/js/default/utils/Pasteboard.js | 35 - .../main/resources/base/element/color.json | 104 + .../main/resources/base/element/float.json | 280 +++ .../main/resources/base/element/string.json | 866 +++++++- .../main/resources/base/media/Recording.png | Bin 0 -> 386 bytes entry/src/main/resources/base/media/add.png | Bin 0 -> 269 bytes .../main/resources/base/media/add_black.png | Bin 0 -> 359 bytes .../base/media}/addmore.svg | 0 .../main/resources/base/media/app_icon.png | Bin 25079 -> 0 bytes .../base/media}/avatar_filled_honor.svg | 0 .../main/resources/base/media/call_out.png | Bin 0 -> 6739 bytes .../main/resources/base/media/call_reject.png | Bin 0 -> 8075 bytes .../image => resources/base/media}/camera.png | Bin .../base/media}/cleantext.svg | 0 .../base/media}/company.svg | 0 .../resources/base/media/contactPerson.png | Bin 0 -> 750 bytes .../base/media/defalut_user_light.svg | 11 + .../src/main/resources/base/media/delete.png | Bin 0 -> 496 bytes .../resources/base/media/delete_black.png | Bin 0 -> 772 bytes .../main/resources/base/media/dial_icon.png | Bin 19353 -> 0 bytes .../image => resources/base/media}/email.svg | 0 .../main/resources/base/media/exclamation.png | Bin 0 -> 6964 bytes .../image => resources/base/media}/group.svg | 0 .../base/media}/ic_avatar_normal_light.svg | 0 .../resources/base/media/ic_contact_icon.png | Bin 0 -> 31907 bytes .../base/media}/ic_contacts_Delete_m.svg | 0 .../base/media/ic_contacts_Dialled.svg | 14 + .../base/media/ic_contacts_Reject.svg | 14 + .../base/media}/ic_contacts_add_m.svg | 0 .../base/media}/ic_contacts_add_m2.svg | 0 .../media}/ic_contacts_arrow_unfold_s.svg | 0 .../base/media}/ic_contacts_arrow_up.svg | 0 .../base/media/ic_contacts_assistant.svg | 31 + .../base/media/ic_contacts_birthday.svg | 31 + .../base/media/ic_contacts_call_dial_56.svg} | 0 .../ic_contacts_call_dial_56_clicked.svg} | 0 .../base/media}/ic_contacts_call_in_mini.svg | 2 +- .../media}/ic_contacts_call_missed_mini.svg | 2 +- .../media}/ic_contacts_call_rejected_mini.svg | 2 +- .../base/media}/ic_contacts_callout_mini.svg | 2 +- .../base/media/ic_contacts_company.svg | 31 + .../media}/ic_contacts_details_arrow_down.svg | 0 .../base/media}/ic_contacts_dialer.svg | 0 .../base/media}/ic_contacts_empty_group.svg | 0 .../media}/ic_contacts_favorite_filled_m.svg | 0 .../ic_contacts_favorite_filled_m_black.svg | 0 .../base/media}/ic_contacts_favorite_m.svg | 0 .../media}/ic_contacts_favorite_me_36.svg | 0 .../resources/base/media/ic_contacts_join.svg | 31 + .../resources/base/media/ic_contacts_m.svg | 13 + .../base/media}/ic_contacts_name_m.svg | 0 .../base/media/ic_contacts_nickname.svg | 31 + .../media}/ic_contacts_voicemail_mini.svg | 0 .../base/media}/ic_delete_m.svg | 0 .../resources/base/media/ic_dial_icon.png | Bin 0 -> 34967 bytes .../resources/base/media/ic_phonecall_m.svg | 13 + .../base/media}/ic_phonecall_m_block.svg | 0 .../base/media}/ic_play_filled_m.svg | 0 .../base/media}/ic_public_about_m.svg | 0 .../resources/base/media/ic_public_add.svg | 13 + .../base/media/ic_public_add_norm.svg | 31 + .../base/media/ic_public_add_norm_filled.svg | 30 + .../resources/base/media/ic_public_back.svg | 13 + .../resources/base/media/ic_public_cancel.svg | 30 + .../base/media/ic_public_close_filled.svg | 31 + .../resources/base/media/ic_public_code.svg | 13 + .../base/media/ic_public_contacts.svg | 31 + .../media/ic_public_contacts_group_filled.png | Bin 0 -> 1056 bytes .../resources/base/media/ic_public_detail.svg | 14 + .../base/media/ic_public_dial_delete.svg | 14 + .../resources/base/media/ic_public_drawer.svg | 31 + .../resources/base/media/ic_public_edit.svg | 13 + .../resources/base/media/ic_public_email.svg | 31 + .../resources/base/media/ic_public_home.svg | 31 + .../base/media/ic_public_message.svg | 31 + .../base/media/ic_public_message_filled.svg | 20 + .../resources/base/media/ic_public_more.svg | 13 + .../base/media/ic_public_ok.svg} | 0 .../resources/base/media/ic_public_phone.svg | 31 + .../base/media/ic_public_phone_filled.svg | 20 + .../media/ic_public_phone_filled_white.svg | 14 + .../resources/base/media/ic_public_ring.svg | 13 + .../base/media/ic_public_select_all.svg | 14 + .../base/media/ic_public_spinner.svg | 30 + .../base/media/ic_public_worldclock.svg | 30 + .../main/resources/base/media/ic_rename.svg | 13 + .../resources/base/media/ic_user_portrait.svg | 28 + .../src/main/resources/base/media/keypad.png | Bin 0 -> 361 bytes .../resources/base/media/keypad_white.png | Bin 0 -> 312 bytes .../main/resources/base/media/memorandum.png | Bin 0 -> 385 bytes entry/src/main/resources/base/media/menu.png | Bin 0 -> 3894 bytes .../main/resources/base/media/missed_call.png | Bin 0 -> 6544 bytes .../main/resources/base/media/msg_black.png | Bin 0 -> 1050 bytes entry/src/main/resources/base/media/mute.png | Bin 0 -> 681 bytes .../image => resources/base/media}/name.svg | 0 .../resources/base/media/no_call_records.svg | 30 + .../base/media/no_contacts_illustration.svg | 29 + .../image => resources/base/media}/note.svg | 0 .../resources/base/media/people_black.png | Bin 0 -> 1689 bytes .../image => resources/base/media}/phone.png | Bin .../main/resources/base/media/phone_small.png | Bin 0 -> 499 bytes .../main/resources/base/media/phone_white.png | Bin 0 -> 447 bytes .../base/media/phone_white_transversal.png | Bin 0 -> 409 bytes .../main/resources/base/media/phonebook.png | Bin 0 -> 1014 bytes .../src/main/resources/base/media/symbol.svg | 8 + .../src/main/resources/base/media/symbols.svg | 8 + .../base/media}/uncomfirm.png | Bin entry/src/main/resources/base/media/voice.png | Bin 0 -> 726 bytes entry/src/main/resources/base/media/wait.png | Bin 0 -> 213 bytes .../src/main/resources/base/media/waiting.png | Bin 0 -> 3914 bytes .../main/resources/dark/element/color.json | 20 + .../main/resources/en_US/element/string.json | 876 ++++++++ .../main/resources/light/element/color.json | 28 + entry/src/main/resources/rawfile/0.ogg | Bin 0 -> 5980 bytes entry/src/main/resources/rawfile/1.ogg | Bin 0 -> 6073 bytes entry/src/main/resources/rawfile/10.ogg | Bin 0 -> 5974 bytes entry/src/main/resources/rawfile/11.ogg | Bin 0 -> 6159 bytes entry/src/main/resources/rawfile/2.ogg | Bin 0 -> 5726 bytes entry/src/main/resources/rawfile/3.ogg | Bin 0 -> 6114 bytes entry/src/main/resources/rawfile/4.ogg | Bin 0 -> 5982 bytes entry/src/main/resources/rawfile/5.ogg | Bin 0 -> 6029 bytes entry/src/main/resources/rawfile/6.ogg | Bin 0 -> 6007 bytes entry/src/main/resources/rawfile/7.ogg | Bin 0 -> 5971 bytes entry/src/main/resources/rawfile/8.ogg | Bin 0 -> 6018 bytes entry/src/main/resources/rawfile/9.ogg | Bin 0 -> 6002 bytes .../main/resources/tablet/element/float.json | 128 ++ .../main/resources/zh_CN/element/string.json | 876 ++++++++ entry/src/ohosTest/config.json | 53 - entry/src/ohosTest/js/default/app.js | 22 - entry/src/ohosTest/js/default/i18n/en-US.json | 8 - entry/src/ohosTest/js/default/i18n/zh-CN.json | 8 - .../ohosTest/js/default/pages/index/index.hml | 19 - .../ohosTest/js/default/pages/index/index.js | 53 - .../ohosTest/js/test/AccountantsModel.test.js | 65 - .../src/ohosTest/js/test/CalllogModel.test.js | 62 - .../js/test/ContactDetailModel.test.js | 38 - .../src/ohosTest/js/test/ContactModel.test.js | 62 - .../ohosTest/js/test/CustomizeModel.test.js | 28 - .../ohosTest/js/test/FavoritesModel.test.js | 57 - .../ohosTest/js/test/GreetingModel.test.js | 60 - .../src/ohosTest/js/test/GroupsModel.test.js | 176 -- entry/src/ohosTest/js/test/List.test.js | 30 - .../js/test/SelectContactsListModel.test.js | 42 - .../js/test/SelectcontactsModel.test.js | 32 - entry/src/ohosTest/js/test/mergeModel.test.js | 37 - .../ohosTest/js/test/recentlydelModel.test.js | 43 - .../src/ohosTest/js/test/recoverModel.test.js | 30 - .../resources/base/element/string.json | 12 - .../ohosTest/resources/base/media/icon.png | Bin 6790 -> 0 bytes global.gradle | 21 - gradle.properties | 5 +- gradle/wrapper/gradle-wrapper.jar | Bin 58694 -> 0 bytes gradle/wrapper/gradle-wrapper.properties | 5 - gradlew | 5 +- gradlew.bat | 5 +- entry/package.json => package.json | 0 sign/IDE.cer | 29 + sign/OpenHarmony.p12 | Bin 0 -> 8252 bytes sign/com.ohos.contacts.p7b | Bin 0 -> 3681 bytes .../ac/f9c76069fe3c470d9e2a9170caa8363e | 1 + .../ce/2dac8ad1a181442da8e938071b28530a | Bin 0 -> 48 bytes .../fd/0/9d6b543ba2624abf89877179453f62ae | 2 + .../fd/1/c0a0efae61d44233b1709e444c2e9748 | 1 + .../fd/2/02846094e97640a9b76a316e6e439640 | 1 + signature/contacts.p7b | Bin 3421 -> 0 bytes 562 files changed, 20733 insertions(+), 44440 deletions(-) delete mode 100644 README_zh.md delete mode 100644 doc/Instructions.md delete mode 100644 doc/image/3-1.png delete mode 100644 doc/image/3-2.png delete mode 100644 doc/image/cmd1.png delete mode 100644 doc/image/cmd2.png delete mode 100644 doc/image/cmd3.png delete mode 100644 doc/image/commit_source_clone_page.png delete mode 100644 doc/image/commit_source_fork_button.png delete mode 100644 doc/image/commit_source_fork_confirm.png delete mode 100644 doc/image/commit_source_forked_repo1.png delete mode 100644 doc/image/commit_source_new_pr_done.png delete mode 100644 doc/image/commit_source_new_pull_request.png delete mode 100644 doc/image/commit_source_new_pull_request_confirm.png delete mode 100644 doc/image/ds_build_haps.png delete mode 100644 doc/image/ds_download.png delete mode 100644 doc/image/ds_exe.png delete mode 100644 doc/image/ds_hilog_window.png delete mode 100644 doc/image/ds_i18n_files.png delete mode 100644 doc/image/ds_install_1.png delete mode 100644 doc/image/ds_install_2.png delete mode 100644 doc/image/ds_ohosbuild_output_dir.png delete mode 100644 doc/image/ds_ohosbuild_output_dir_release.png delete mode 100644 doc/image/ds_ohosbuild_variants.png delete mode 100644 doc/image/ds_ohosbuild_variants_debug.png delete mode 100644 doc/image/ds_ohosbuild_variants_release.png delete mode 100644 doc/image/git_ssh_pub_key.png delete mode 100644 doc/image/hw_register.png create mode 100644 doc/image/image-20220222110725915.png delete mode 100644 doc/image/read.png delete mode 100644 doc/image/sdk_catalogue.png delete mode 100644 doc/image/sdk_downloading.png delete mode 100644 doc/image/sdk_environment_variable.png delete mode 100644 doc/image/signature_1.png delete mode 100644 doc/image/signature_2.png delete mode 100644 doc/image/signature_3.png delete mode 100644 doc/image/source_download_1.png create mode 100644 entry/src/main/ets/MainAbility/account/AccountTypeService.ets create mode 100644 entry/src/main/ets/MainAbility/account/IAccountTypeService.ets create mode 100644 entry/src/main/ets/MainAbility/account/type/AccountType.ets rename entry/src/{ohosTest/js/test/ExampleJsunit.test.js => main/ets/MainAbility/account/type/DataKind.ets} (58%) create mode 100644 entry/src/main/ets/MainAbility/account/type/EditType.ets create mode 100644 entry/src/main/ets/MainAbility/account/type/PhoneAccountType.ets create mode 100644 entry/src/main/ets/MainAbility/app.ets create mode 100644 entry/src/main/ets/MainAbility/call/CallLogService.ets create mode 100644 entry/src/main/ets/MainAbility/call/ICallLogService.ets create mode 100644 entry/src/main/ets/MainAbility/call/contract/Calls.ets create mode 100644 entry/src/main/ets/MainAbility/call/contract/VoiceMails.ets create mode 100644 entry/src/main/ets/MainAbility/call/entity/CallLog.ets create mode 100644 entry/src/main/ets/MainAbility/call/entity/CallLogBuilder.ets create mode 100644 entry/src/main/ets/MainAbility/call/entity/MergedCallLog.ets create mode 100644 entry/src/main/ets/MainAbility/call/repo/CallLogDelta.ets create mode 100644 entry/src/main/ets/MainAbility/call/repo/CallLogRepository.ets create mode 100644 entry/src/main/ets/MainAbility/call/repo/ICallLogRepository.ets create mode 100644 entry/src/main/ets/MainAbility/component/contact/ContactEmptyPage.ets create mode 100644 entry/src/main/ets/MainAbility/component/contact/ContactListItemView.ets create mode 100644 entry/src/main/ets/MainAbility/component/contact/ContactSearchPage.ets create mode 100644 entry/src/main/ets/MainAbility/component/contact/batchselectcontacts/BatchSelectContactItemView.ets create mode 100644 entry/src/main/ets/MainAbility/component/contact/batchselectcontacts/BatchSelectRecentItemView.ets create mode 100644 entry/src/main/ets/MainAbility/component/contact/batchselectcontacts/BatchTabGuide.ets create mode 100644 entry/src/main/ets/MainAbility/component/contactdetail/DetailCalllog.ets create mode 100644 entry/src/main/ets/MainAbility/component/contactdetail/DetailInfoListItemView.ets create mode 100644 entry/src/main/ets/MainAbility/component/contactdetail/DetailInfoListView.ets create mode 100644 entry/src/main/ets/MainAbility/component/dialer/CallLogTabs.ets create mode 100644 entry/src/main/ets/MainAbility/contact/contract/Aim.ets rename entry/src/{ohosTest/js/default/pages/index/index.css => main/ets/MainAbility/contact/contract/BaseColumns.ets} (76%) create mode 100644 entry/src/main/ets/MainAbility/contact/contract/Birthday.ets create mode 100644 entry/src/main/ets/MainAbility/contact/contract/Contacts.ets create mode 100644 entry/src/main/ets/MainAbility/contact/contract/ContactsColumns.ets create mode 100644 entry/src/main/ets/MainAbility/contact/contract/Data.ets create mode 100644 entry/src/main/ets/MainAbility/contact/contract/DataColumns.ets create mode 100644 entry/src/main/ets/MainAbility/contact/contract/DataType.ets create mode 100644 entry/src/main/ets/MainAbility/contact/contract/Email.ets create mode 100644 entry/src/main/ets/MainAbility/contact/contract/Event.ets create mode 100644 entry/src/main/ets/MainAbility/contact/contract/House.ets create mode 100644 entry/src/main/ets/MainAbility/contact/contract/Im.ets create mode 100644 entry/src/main/ets/MainAbility/contact/contract/Nickname.ets create mode 100644 entry/src/main/ets/MainAbility/contact/contract/Note.ets create mode 100644 entry/src/main/ets/MainAbility/contact/contract/Organization.ets create mode 100644 entry/src/main/ets/MainAbility/contact/contract/Phone.ets create mode 100644 entry/src/main/ets/MainAbility/contact/contract/RawContacts.ets create mode 100644 entry/src/main/ets/MainAbility/contact/contract/RawContactsColumns.ets create mode 100644 entry/src/main/ets/MainAbility/contact/contract/RawContactsEntity.ets create mode 100644 entry/src/main/ets/MainAbility/contact/contract/Relation.ets create mode 100644 entry/src/main/ets/MainAbility/contact/contract/StructuredPostal.ets create mode 100644 entry/src/main/ets/MainAbility/contact/contract/Website.ets create mode 100644 entry/src/main/ets/MainAbility/contact/entity/Contact.ets create mode 100644 entry/src/main/ets/MainAbility/contact/entity/ContactBuilder.ets create mode 100644 entry/src/main/ets/MainAbility/contact/entity/DataItem.ets create mode 100644 entry/src/main/ets/MainAbility/contact/entity/EmailDataItem.ets create mode 100644 entry/src/main/ets/MainAbility/contact/entity/EventDataItem.ets create mode 100644 entry/src/main/ets/MainAbility/contact/entity/ImDataItem.ets create mode 100644 entry/src/main/ets/MainAbility/contact/entity/NicknameDataItem.ets create mode 100644 entry/src/main/ets/MainAbility/contact/entity/NoteDataItem.ets create mode 100644 entry/src/main/ets/MainAbility/contact/entity/OrganizationDataItem.ets create mode 100644 entry/src/main/ets/MainAbility/contact/entity/PhoneDataItem.ets create mode 100644 entry/src/main/ets/MainAbility/contact/entity/RawContact.ets create mode 100644 entry/src/main/ets/MainAbility/contact/entity/RelationDataItem.ets create mode 100644 entry/src/main/ets/MainAbility/contact/entity/StructuredPostalDataItem.ets create mode 100644 entry/src/main/ets/MainAbility/contact/entity/WebsiteDataItem.ets create mode 100644 entry/src/main/ets/MainAbility/contact/repo/AddressBookIndex.ets create mode 100644 entry/src/main/ets/MainAbility/contact/repo/ContactDelta.ets create mode 100644 entry/src/main/ets/MainAbility/contact/repo/ContactList.ets create mode 100644 entry/src/main/ets/MainAbility/contact/repo/ContactListItem.ets create mode 100644 entry/src/main/ets/MainAbility/contact/repo/ContactRepository.ets create mode 100644 entry/src/main/ets/MainAbility/contact/repo/DAOperation.ets create mode 100644 entry/src/main/ets/MainAbility/contact/repo/IContactRepository.ets create mode 100644 entry/src/main/ets/MainAbility/contact/repo/RawContactDelta.ets create mode 100644 entry/src/main/ets/MainAbility/contact/repo/ValuesDelta.ets create mode 100644 entry/src/main/ets/MainAbility/dialpad/Dialpad.ets create mode 100644 entry/src/main/ets/MainAbility/dialpad/SmartSearchList.ets create mode 100644 entry/src/main/ets/MainAbility/feature/PhoneNumber.ets create mode 100644 entry/src/main/ets/MainAbility/model/ContactAbilityModel.ets create mode 100644 entry/src/main/ets/MainAbility/model/bean/AIMBean.ets create mode 100644 entry/src/main/ets/MainAbility/model/bean/AssociatedPersonBean.ets create mode 100644 entry/src/main/ets/MainAbility/model/bean/CallBean.ets create mode 100644 entry/src/main/ets/MainAbility/model/bean/CallLogBean.ets create mode 100644 entry/src/main/ets/MainAbility/model/bean/ContactBean.ets create mode 100644 entry/src/main/ets/MainAbility/model/bean/ContactInfo.ets create mode 100644 entry/src/main/ets/MainAbility/model/bean/ContactVo.ets create mode 100644 entry/src/main/ets/MainAbility/model/bean/EmailBean.ets rename entry/src/main/{js/default/pages/index_demo/index.css => ets/MainAbility/model/bean/EventBean.ets} (61%) create mode 100644 entry/src/main/ets/MainAbility/model/bean/GroupBean.ets create mode 100644 entry/src/main/ets/MainAbility/model/bean/HouseBean.ets rename entry/src/main/{js/default/pages/contacts/settings/about/license/license.js => ets/MainAbility/model/bean/LooseObject.ets} (65%) create mode 100644 entry/src/main/ets/MainAbility/model/bean/PhoneNumBean.ets create mode 100644 entry/src/main/ets/MainAbility/model/bean/RelationBean.ets create mode 100644 entry/src/main/ets/MainAbility/model/bean/RemDayBean.ets create mode 100644 entry/src/main/ets/MainAbility/model/calllog/CalllogModel.ets create mode 100644 entry/src/main/ets/MainAbility/model/common.ets create mode 100644 entry/src/main/ets/MainAbility/model/common/Constants.ets create mode 100644 entry/src/main/ets/MainAbility/model/common/DbChangeHelper.ets create mode 100644 entry/src/main/ets/MainAbility/model/contactDetailModel.ets create mode 100644 entry/src/main/ets/MainAbility/pages/Index.ets create mode 100644 entry/src/main/ets/MainAbility/pages/contacts/ContactList.ets create mode 100644 entry/src/main/ets/MainAbility/pages/contacts/accountants/Accountants.ets create mode 100644 entry/src/main/ets/MainAbility/pages/contacts/batchselectcontacts/BatchSelectContactsPage.ets create mode 100644 entry/src/main/ets/MainAbility/pages/contacts/details/ContactDetail.ets create mode 100644 entry/src/main/ets/MainAbility/pages/dialer/DialerTablet.ets create mode 100644 entry/src/main/ets/MainAbility/pages/dialer/callRecord/AllRecord.ets create mode 100644 entry/src/main/ets/MainAbility/pages/dialer/callRecord/CallRecord.ets create mode 100644 entry/src/main/ets/MainAbility/pages/dialer/callRecord/MissedRecord.ets create mode 100644 entry/src/main/ets/MainAbility/pages/dialog/DeleteDialogEx.ets create mode 100644 entry/src/main/ets/MainAbility/pages/dialog/ShareDialogEx.ets create mode 100644 entry/src/main/ets/MainAbility/pages/navigation/Navigation.ets create mode 100644 entry/src/main/ets/MainAbility/pages/phone/dialer/Dialer.ets create mode 100644 entry/src/main/ets/MainAbility/pages/phone/dialer/callRecord/AllRecord.ets create mode 100644 entry/src/main/ets/MainAbility/pages/phone/dialer/callRecord/CallRecord.ets create mode 100644 entry/src/main/ets/MainAbility/pages/phone/dialer/callRecord/MissedRecord.ets create mode 100644 entry/src/main/ets/MainAbility/presenter/IndexPresenter.ets create mode 100644 entry/src/main/ets/MainAbility/presenter/contact/ContactListPresenter.ets create mode 100644 entry/src/main/ets/MainAbility/presenter/contact/accountants/AccountantsPresenter.ets create mode 100644 entry/src/main/ets/MainAbility/presenter/contact/batchselectcontacts/BatchSelectContactsPresenter.ets create mode 100644 entry/src/main/ets/MainAbility/presenter/dialer/DialerPresenter.ets create mode 100644 entry/src/main/ets/MainAbility/presenter/navigation/NavigationPresenter.ets create mode 100644 entry/src/main/ets/MainAbility/util/AppStorageUtil.ets rename entry/src/main/{js/default/pages/index/index.css => ets/MainAbility/util/ArrayUtil.ets} (76%) rename entry/src/main/{js/default/utils/ContactsLog.js => ets/MainAbility/util/ContactsLog.ets} (79%) create mode 100644 entry/src/main/ets/MainAbility/util/DialUtil.ets create mode 100644 entry/src/main/ets/MainAbility/util/HiLog.ets create mode 100644 entry/src/main/ets/MainAbility/util/Pasteboard.ets create mode 100644 entry/src/main/ets/MainAbility/util/PreferencesUtil.ets create mode 100644 entry/src/main/ets/MainAbility/util/StringUtil.ets rename entry/src/main/{js/default/utils/Utils.js => ets/MainAbility/util/Utils.ets} (51%) delete mode 100644 entry/src/main/js/ServiceAbility/missedCallsService.js delete mode 100644 entry/src/main/js/ServiceAbility/service.js delete mode 100644 entry/src/main/js/default/app.js delete mode 100644 entry/src/main/js/default/base/base_color.scss delete mode 100644 entry/src/main/js/default/base/base_style.css delete mode 100644 entry/src/main/js/default/common/component/contactlist/contactList.css delete mode 100644 entry/src/main/js/default/common/component/contactlist/contactList.hml delete mode 100644 entry/src/main/js/default/common/component/contactlist/contactList.js delete mode 100644 entry/src/main/js/default/common/component/dialog/dialog.css delete mode 100644 entry/src/main/js/default/common/component/dialog/dialog.hml delete mode 100644 entry/src/main/js/default/common/component/dialog/dialog.js delete mode 100644 entry/src/main/js/default/common/component/title/title.css delete mode 100644 entry/src/main/js/default/common/component/title/title.hml delete mode 100644 entry/src/main/js/default/common/component/title/title.js delete mode 100644 entry/src/main/js/default/common/constants/Constants.js delete mode 100644 entry/src/main/js/default/common/constants/color.js delete mode 100644 entry/src/main/js/default/i18n/en-US.json delete mode 100644 entry/src/main/js/default/i18n/zh-CN.json delete mode 100644 entry/src/main/js/default/model/AccountantsModel.js delete mode 100644 entry/src/main/js/default/model/CalllogModel.js delete mode 100644 entry/src/main/js/default/model/ContactDetailModel.js delete mode 100644 entry/src/main/js/default/model/ContactModel.js delete mode 100644 entry/src/main/js/default/model/CustomizeModel.js delete mode 100644 entry/src/main/js/default/model/FavoritesModel.js delete mode 100644 entry/src/main/js/default/model/GreetingModel.js delete mode 100644 entry/src/main/js/default/model/GroupsModel.js delete mode 100644 entry/src/main/js/default/model/SelectContactsListModel.js delete mode 100644 entry/src/main/js/default/model/SelectcontactsModel.js delete mode 100644 entry/src/main/js/default/model/mergeModel.js delete mode 100644 entry/src/main/js/default/model/recentlydelModel.js delete mode 100644 entry/src/main/js/default/model/recoverModel.js delete mode 100644 entry/src/main/js/default/pages/calllog/calllog.hml delete mode 100644 entry/src/main/js/default/pages/calllog/calllog.js delete mode 100644 entry/src/main/js/default/pages/calllog/calllog.scss delete mode 100644 entry/src/main/js/default/pages/contacts/accountants/accountants.css delete mode 100644 entry/src/main/js/default/pages/contacts/accountants/accountants.hml delete mode 100644 entry/src/main/js/default/pages/contacts/accountants/accountants.js delete mode 100644 entry/src/main/js/default/pages/contacts/accountants/takephone/takephone.css delete mode 100644 entry/src/main/js/default/pages/contacts/accountants/takephone/takephone.hml delete mode 100644 entry/src/main/js/default/pages/contacts/accountants/takephone/takephone.js delete mode 100644 entry/src/main/js/default/pages/contacts/batchselectcontacts/batchselectcontacts.css delete mode 100644 entry/src/main/js/default/pages/contacts/batchselectcontacts/batchselectcontacts.hml delete mode 100644 entry/src/main/js/default/pages/contacts/batchselectcontacts/batchselectcontacts.js delete mode 100644 entry/src/main/js/default/pages/contacts/card/card.css delete mode 100644 entry/src/main/js/default/pages/contacts/card/card.hml delete mode 100644 entry/src/main/js/default/pages/contacts/card/card.js delete mode 100644 entry/src/main/js/default/pages/contacts/contactDetail/contactDetail.hml delete mode 100644 entry/src/main/js/default/pages/contacts/contactDetail/contactDetail.js delete mode 100644 entry/src/main/js/default/pages/contacts/contactDetail/contactDetail.scss delete mode 100644 entry/src/main/js/default/pages/contacts/contacts.css delete mode 100644 entry/src/main/js/default/pages/contacts/contacts.hml delete mode 100644 entry/src/main/js/default/pages/contacts/contacts.js delete mode 100644 entry/src/main/js/default/pages/contacts/groups/deleteGroup/deleteGroup.css delete mode 100644 entry/src/main/js/default/pages/contacts/groups/deleteGroup/deleteGroup.hml delete mode 100644 entry/src/main/js/default/pages/contacts/groups/deleteGroup/deleteGroup.js delete mode 100644 entry/src/main/js/default/pages/contacts/groups/groupListWithContacts/groupListWithContacts.css delete mode 100644 entry/src/main/js/default/pages/contacts/groups/groupListWithContacts/groupListWithContacts.hml delete mode 100644 entry/src/main/js/default/pages/contacts/groups/groupListWithContacts/groupListWithContacts.js delete mode 100644 entry/src/main/js/default/pages/contacts/groups/groupMembersList/groupMembersList.css delete mode 100644 entry/src/main/js/default/pages/contacts/groups/groupMembersList/groupMembersList.hml delete mode 100644 entry/src/main/js/default/pages/contacts/groups/groupMembersList/groupMembersList.js delete mode 100644 entry/src/main/js/default/pages/contacts/groups/groups.css delete mode 100644 entry/src/main/js/default/pages/contacts/groups/groups.hml delete mode 100644 entry/src/main/js/default/pages/contacts/groups/groups.js delete mode 100644 entry/src/main/js/default/pages/contacts/groups/recentContacts/recentContacts.css delete mode 100644 entry/src/main/js/default/pages/contacts/groups/recentContacts/recentContacts.hml delete mode 100644 entry/src/main/js/default/pages/contacts/groups/recentContacts/recentContacts.js delete mode 100644 entry/src/main/js/default/pages/contacts/groups/recentContacts/recentContactsList/recentContactsList.css delete mode 100644 entry/src/main/js/default/pages/contacts/groups/recentContacts/recentContactsList/recentContactsList.hml delete mode 100644 entry/src/main/js/default/pages/contacts/groups/recentContacts/recentContactsList/recentContactsList.js delete mode 100644 entry/src/main/js/default/pages/contacts/groups/selectGroupMembers/selectGroupMembers.css delete mode 100644 entry/src/main/js/default/pages/contacts/groups/selectGroupMembers/selectGroupMembers.hml delete mode 100644 entry/src/main/js/default/pages/contacts/groups/selectGroupMembers/selectGroupMembers.js delete mode 100644 entry/src/main/js/default/pages/contacts/selectContactsList/selectContactsList.css delete mode 100644 entry/src/main/js/default/pages/contacts/selectContactsList/selectContactsList.hml delete mode 100644 entry/src/main/js/default/pages/contacts/selectContactsList/selectContactsList.js delete mode 100644 entry/src/main/js/default/pages/contacts/settings/about/about.css delete mode 100644 entry/src/main/js/default/pages/contacts/settings/about/about.hml delete mode 100644 entry/src/main/js/default/pages/contacts/settings/about/about.js delete mode 100644 entry/src/main/js/default/pages/contacts/settings/about/license/license.css delete mode 100644 entry/src/main/js/default/pages/contacts/settings/about/license/license.hml delete mode 100644 entry/src/main/js/default/pages/contacts/settings/display/customize/customize.css delete mode 100644 entry/src/main/js/default/pages/contacts/settings/display/customize/customize.hml delete mode 100644 entry/src/main/js/default/pages/contacts/settings/display/customize/customize.js delete mode 100644 entry/src/main/js/default/pages/contacts/settings/display/display.css delete mode 100644 entry/src/main/js/default/pages/contacts/settings/display/display.hml delete mode 100644 entry/src/main/js/default/pages/contacts/settings/display/display.js delete mode 100644 entry/src/main/js/default/pages/contacts/settings/imorexport/imorexport.css delete mode 100644 entry/src/main/js/default/pages/contacts/settings/imorexport/imorexport.hml delete mode 100644 entry/src/main/js/default/pages/contacts/settings/imorexport/imorexport.js delete mode 100644 entry/src/main/js/default/pages/contacts/settings/manage/manage.css delete mode 100644 entry/src/main/js/default/pages/contacts/settings/manage/manage.hml delete mode 100644 entry/src/main/js/default/pages/contacts/settings/manage/manage.js delete mode 100644 entry/src/main/js/default/pages/contacts/settings/manage/merge/merge.css delete mode 100644 entry/src/main/js/default/pages/contacts/settings/manage/merge/merge.hml delete mode 100644 entry/src/main/js/default/pages/contacts/settings/manage/merge/merge.js delete mode 100644 entry/src/main/js/default/pages/contacts/settings/manage/recentlydel/recentlydel.css delete mode 100644 entry/src/main/js/default/pages/contacts/settings/manage/recentlydel/recentlydel.hml delete mode 100644 entry/src/main/js/default/pages/contacts/settings/manage/recentlydel/recentlydel.js delete mode 100644 entry/src/main/js/default/pages/contacts/settings/manage/recentlydel/recover/recover.css delete mode 100644 entry/src/main/js/default/pages/contacts/settings/manage/recentlydel/recover/recover.hml delete mode 100644 entry/src/main/js/default/pages/contacts/settings/manage/recentlydel/recover/recover.js delete mode 100644 entry/src/main/js/default/pages/contacts/settings/settings.css delete mode 100644 entry/src/main/js/default/pages/contacts/settings/settings.hml delete mode 100644 entry/src/main/js/default/pages/contacts/settings/settings.js delete mode 100644 entry/src/main/js/default/pages/contacts/settings/shareContactsList/shareContactsList.css delete mode 100644 entry/src/main/js/default/pages/contacts/settings/shareContactsList/shareContactsList.hml delete mode 100644 entry/src/main/js/default/pages/contacts/settings/shareContactsList/shareContactsList.js delete mode 100644 entry/src/main/js/default/pages/dialer/calllogdelete/calllogdelete.css delete mode 100644 entry/src/main/js/default/pages/dialer/calllogdelete/calllogdelete.hml delete mode 100644 entry/src/main/js/default/pages/dialer/calllogdelete/calllogdelete.js delete mode 100644 entry/src/main/js/default/pages/dialer/dialer.hml delete mode 100644 entry/src/main/js/default/pages/dialer/dialer.js delete mode 100644 entry/src/main/js/default/pages/dialer/dialer.scss delete mode 100644 entry/src/main/js/default/pages/dialer/greeting/delete/delete.css delete mode 100644 entry/src/main/js/default/pages/dialer/greeting/delete/delete.hml delete mode 100644 entry/src/main/js/default/pages/dialer/greeting/delete/delete.js delete mode 100644 entry/src/main/js/default/pages/dialer/greeting/greeting.css delete mode 100644 entry/src/main/js/default/pages/dialer/greeting/greeting.hml delete mode 100644 entry/src/main/js/default/pages/dialer/greeting/greeting.js delete mode 100644 entry/src/main/js/default/pages/dialer/speeddial/selectContact/selectcontact.css delete mode 100644 entry/src/main/js/default/pages/dialer/speeddial/selectContact/selectcontact.hml delete mode 100644 entry/src/main/js/default/pages/dialer/speeddial/selectContact/selectcontact.js delete mode 100644 entry/src/main/js/default/pages/dialer/speeddial/speeddial.css delete mode 100644 entry/src/main/js/default/pages/dialer/speeddial/speeddial.hml delete mode 100644 entry/src/main/js/default/pages/dialer/speeddial/speeddial.js delete mode 100644 entry/src/main/js/default/pages/dialer/voicemailsettings/voicemailsettings.css delete mode 100644 entry/src/main/js/default/pages/dialer/voicemailsettings/voicemailsettings.hml delete mode 100644 entry/src/main/js/default/pages/dialer/voicemailsettings/voicemailsettings.js delete mode 100644 entry/src/main/js/default/pages/favorites/delete/delete.css delete mode 100644 entry/src/main/js/default/pages/favorites/delete/delete.hml delete mode 100644 entry/src/main/js/default/pages/favorites/delete/delete.js delete mode 100644 entry/src/main/js/default/pages/favorites/favorites.css delete mode 100644 entry/src/main/js/default/pages/favorites/favorites.hml delete mode 100644 entry/src/main/js/default/pages/favorites/favorites.js delete mode 100644 entry/src/main/js/default/pages/index/index.hml delete mode 100644 entry/src/main/js/default/pages/index/index.js delete mode 100644 entry/src/main/js/default/pages/index_demo/index.hml delete mode 100644 entry/src/main/js/default/pages/index_demo/index.js delete mode 100644 entry/src/main/js/default/pages/navigation/navigation.css delete mode 100644 entry/src/main/js/default/pages/navigation/navigation.hml delete mode 100644 entry/src/main/js/default/pages/navigation/navigation.js delete mode 100644 entry/src/main/js/default/res/image/assistant.svg delete mode 100644 entry/src/main/js/default/res/image/birth.svg delete mode 100644 entry/src/main/js/default/res/image/boardmin.jpg delete mode 100644 entry/src/main/js/default/res/image/collect.png delete mode 100644 entry/src/main/js/default/res/image/contact.png delete mode 100644 entry/src/main/js/default/res/image/contacts.png delete mode 100644 entry/src/main/js/default/res/image/email.png delete mode 100644 entry/src/main/js/default/res/image/house.svg delete mode 100644 entry/src/main/js/default/res/image/ic_avatar_default.svg delete mode 100644 entry/src/main/js/default/res/image/ic_back.svg delete mode 100644 entry/src/main/js/default/res/image/ic_camera_back.svg delete mode 100644 entry/src/main/js/default/res/image/ic_camera_filled.svg delete mode 100644 entry/src/main/js/default/res/image/ic_cancel_m.svg delete mode 100644 entry/src/main/js/default/res/image/ic_close_m.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_Earpiece_m.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_HD_mini.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_account_40.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_add_favourites.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_add_m_1.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_allergies_m.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_arrow_down.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_arrow_unfold.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_arrow_up_s.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_call 1 dial_m.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_call 2 dial_m.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_call HD dial_56.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_call HD dial_56.svg.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_call HD dial_56_clicked.svg.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_call.png delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_call_dial_56.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_company_m.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_detail_qrcode.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_dial call HD_1_m.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_dial call_1_m.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_dial call_2_m.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_dial call_HD_2_m.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_edit address_m.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_edit assistant_m.svg.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_edit nickname_m.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_edit remark_m.svg.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_edit.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_edit_group_m.svg.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_email_m.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_empty_calllog_72.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_empty_contact_72.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_empty_voicemaile_72.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_favorite_add.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_filled_m.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_group.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_groups_add.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_groups_disabled.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_m.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_pause voicemail_m.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_play voicemail_m.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_shortcut_me_36.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_shortcut_new_36.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_sim_1_mini.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_sim_2_mini.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_speeddial_voice_40.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_speeddial_voice_72.svg delete mode 100644 entry/src/main/js/default/res/image/ic_contacts_voicemail_s.svg delete mode 100644 entry/src/main/js/default/res/image/ic_delete_white.svg delete mode 100644 entry/src/main/js/default/res/image/ic_massage_m.svg delete mode 100644 entry/src/main/js/default/res/image/ic_meetime_24x24_message.svg delete mode 100644 entry/src/main/js/default/res/image/ic_meetime_24x24_video_s.svg delete mode 100644 entry/src/main/js/default/res/image/ic_more_24x12.svg delete mode 100644 entry/src/main/js/default/res/image/ic_more_24x24.svg delete mode 100644 entry/src/main/js/default/res/image/ic_more_24x24_favorite.svg delete mode 100644 entry/src/main/js/default/res/image/ic_phonecall_filled_m.svg delete mode 100644 entry/src/main/js/default/res/image/ic_phonecall_m.svg delete mode 100644 entry/src/main/js/default/res/image/ic_select all_filled_m.svg delete mode 100644 entry/src/main/js/default/res/image/ic_select all_m.svg delete mode 100644 entry/src/main/js/default/res/image/ic_select_contacts_empty_36.svg delete mode 100644 entry/src/main/js/default/res/image/ic_share_m.svg delete mode 100644 entry/src/main/js/default/res/image/ic_speed_dial_add.svg delete mode 100644 entry/src/main/js/default/res/image/ic_speed_select_contact_empty.svg delete mode 100644 entry/src/main/js/default/res/image/ic_video_m.svg delete mode 100644 entry/src/main/js/default/res/image/ic_volume_m.svg delete mode 100644 entry/src/main/js/default/res/image/massage.svg delete mode 100644 entry/src/main/js/default/res/image/nick.svg delete mode 100644 entry/src/main/js/default/res/image/phonnume.png delete mode 100644 entry/src/main/js/default/res/image/renameGroup.png delete mode 100644 entry/src/main/js/default/res/image/star_moves.png delete mode 100644 entry/src/main/js/default/res/image/website.svg delete mode 100644 entry/src/main/js/default/utils/Pasteboard.js create mode 100644 entry/src/main/resources/base/element/color.json create mode 100644 entry/src/main/resources/base/element/float.json create mode 100644 entry/src/main/resources/base/media/Recording.png create mode 100644 entry/src/main/resources/base/media/add.png create mode 100644 entry/src/main/resources/base/media/add_black.png rename entry/src/main/{js/default/res/image => resources/base/media}/addmore.svg (100%) delete mode 100644 entry/src/main/resources/base/media/app_icon.png rename entry/src/main/{js/default/res/image => resources/base/media}/avatar_filled_honor.svg (100%) create mode 100644 entry/src/main/resources/base/media/call_out.png create mode 100644 entry/src/main/resources/base/media/call_reject.png rename entry/src/main/{js/default/res/image => resources/base/media}/camera.png (100%) rename entry/src/main/{js/default/res/image => resources/base/media}/cleantext.svg (100%) rename entry/src/main/{js/default/res/image => resources/base/media}/company.svg (100%) create mode 100644 entry/src/main/resources/base/media/contactPerson.png create mode 100644 entry/src/main/resources/base/media/defalut_user_light.svg create mode 100644 entry/src/main/resources/base/media/delete.png create mode 100644 entry/src/main/resources/base/media/delete_black.png delete mode 100644 entry/src/main/resources/base/media/dial_icon.png rename entry/src/main/{js/default/res/image => resources/base/media}/email.svg (100%) create mode 100644 entry/src/main/resources/base/media/exclamation.png rename entry/src/main/{js/default/res/image => resources/base/media}/group.svg (100%) rename entry/src/main/{js/default/res/image => resources/base/media}/ic_avatar_normal_light.svg (100%) create mode 100644 entry/src/main/resources/base/media/ic_contact_icon.png rename entry/src/main/{js/default/res/image => resources/base/media}/ic_contacts_Delete_m.svg (100%) create mode 100644 entry/src/main/resources/base/media/ic_contacts_Dialled.svg create mode 100644 entry/src/main/resources/base/media/ic_contacts_Reject.svg rename entry/src/main/{js/default/res/image => resources/base/media}/ic_contacts_add_m.svg (100%) rename entry/src/main/{js/default/res/image => resources/base/media}/ic_contacts_add_m2.svg (100%) rename entry/src/main/{js/default/res/image => resources/base/media}/ic_contacts_arrow_unfold_s.svg (100%) rename entry/src/main/{js/default/res/image => resources/base/media}/ic_contacts_arrow_up.svg (100%) create mode 100644 entry/src/main/resources/base/media/ic_contacts_assistant.svg create mode 100644 entry/src/main/resources/base/media/ic_contacts_birthday.svg rename entry/src/main/{js/default/res/image/ic_contacts_call_dial_56.svg.svg => resources/base/media/ic_contacts_call_dial_56.svg} (100%) rename entry/src/main/{js/default/res/image/ic_contacts_call_dial_56_clicked.svg.svg => resources/base/media/ic_contacts_call_dial_56_clicked.svg} (100%) rename entry/src/main/{js/default/res/image => resources/base/media}/ic_contacts_call_in_mini.svg (93%) rename entry/src/main/{js/default/res/image => resources/base/media}/ic_contacts_call_missed_mini.svg (93%) rename entry/src/main/{js/default/res/image => resources/base/media}/ic_contacts_call_rejected_mini.svg (93%) rename entry/src/main/{js/default/res/image => resources/base/media}/ic_contacts_callout_mini.svg (93%) create mode 100644 entry/src/main/resources/base/media/ic_contacts_company.svg rename entry/src/main/{js/default/res/image => resources/base/media}/ic_contacts_details_arrow_down.svg (100%) rename entry/src/main/{js/default/res/image => resources/base/media}/ic_contacts_dialer.svg (100%) rename entry/src/main/{js/default/res/image => resources/base/media}/ic_contacts_empty_group.svg (100%) rename entry/src/main/{js/default/res/image => resources/base/media}/ic_contacts_favorite_filled_m.svg (100%) rename entry/src/main/{js/default/res/image => resources/base/media}/ic_contacts_favorite_filled_m_black.svg (100%) rename entry/src/main/{js/default/res/image => resources/base/media}/ic_contacts_favorite_m.svg (100%) rename entry/src/main/{js/default/res/image => resources/base/media}/ic_contacts_favorite_me_36.svg (100%) create mode 100644 entry/src/main/resources/base/media/ic_contacts_join.svg create mode 100644 entry/src/main/resources/base/media/ic_contacts_m.svg rename entry/src/main/{js/default/res/image => resources/base/media}/ic_contacts_name_m.svg (100%) create mode 100644 entry/src/main/resources/base/media/ic_contacts_nickname.svg rename entry/src/main/{js/default/res/image => resources/base/media}/ic_contacts_voicemail_mini.svg (100%) rename entry/src/main/{js/default/res/image => resources/base/media}/ic_delete_m.svg (100%) create mode 100644 entry/src/main/resources/base/media/ic_dial_icon.png create mode 100644 entry/src/main/resources/base/media/ic_phonecall_m.svg rename entry/src/main/{js/default/res/image => resources/base/media}/ic_phonecall_m_block.svg (100%) rename entry/src/main/{js/default/res/image => resources/base/media}/ic_play_filled_m.svg (100%) rename entry/src/main/{js/default/res/image => resources/base/media}/ic_public_about_m.svg (100%) create mode 100644 entry/src/main/resources/base/media/ic_public_add.svg create mode 100644 entry/src/main/resources/base/media/ic_public_add_norm.svg create mode 100644 entry/src/main/resources/base/media/ic_public_add_norm_filled.svg create mode 100644 entry/src/main/resources/base/media/ic_public_back.svg create mode 100644 entry/src/main/resources/base/media/ic_public_cancel.svg create mode 100644 entry/src/main/resources/base/media/ic_public_close_filled.svg create mode 100644 entry/src/main/resources/base/media/ic_public_code.svg create mode 100644 entry/src/main/resources/base/media/ic_public_contacts.svg create mode 100644 entry/src/main/resources/base/media/ic_public_contacts_group_filled.png create mode 100644 entry/src/main/resources/base/media/ic_public_detail.svg create mode 100644 entry/src/main/resources/base/media/ic_public_dial_delete.svg create mode 100644 entry/src/main/resources/base/media/ic_public_drawer.svg create mode 100644 entry/src/main/resources/base/media/ic_public_edit.svg create mode 100644 entry/src/main/resources/base/media/ic_public_email.svg create mode 100644 entry/src/main/resources/base/media/ic_public_home.svg create mode 100644 entry/src/main/resources/base/media/ic_public_message.svg create mode 100644 entry/src/main/resources/base/media/ic_public_message_filled.svg create mode 100644 entry/src/main/resources/base/media/ic_public_more.svg rename entry/src/main/{js/default/res/image/ic_comfirm.svg => resources/base/media/ic_public_ok.svg} (100%) create mode 100644 entry/src/main/resources/base/media/ic_public_phone.svg create mode 100644 entry/src/main/resources/base/media/ic_public_phone_filled.svg create mode 100644 entry/src/main/resources/base/media/ic_public_phone_filled_white.svg create mode 100644 entry/src/main/resources/base/media/ic_public_ring.svg create mode 100644 entry/src/main/resources/base/media/ic_public_select_all.svg create mode 100644 entry/src/main/resources/base/media/ic_public_spinner.svg create mode 100644 entry/src/main/resources/base/media/ic_public_worldclock.svg create mode 100644 entry/src/main/resources/base/media/ic_rename.svg create mode 100644 entry/src/main/resources/base/media/ic_user_portrait.svg create mode 100644 entry/src/main/resources/base/media/keypad.png create mode 100644 entry/src/main/resources/base/media/keypad_white.png create mode 100644 entry/src/main/resources/base/media/memorandum.png create mode 100644 entry/src/main/resources/base/media/menu.png create mode 100644 entry/src/main/resources/base/media/missed_call.png create mode 100644 entry/src/main/resources/base/media/msg_black.png create mode 100644 entry/src/main/resources/base/media/mute.png rename entry/src/main/{js/default/res/image => resources/base/media}/name.svg (100%) create mode 100644 entry/src/main/resources/base/media/no_call_records.svg create mode 100644 entry/src/main/resources/base/media/no_contacts_illustration.svg rename entry/src/main/{js/default/res/image => resources/base/media}/note.svg (100%) create mode 100644 entry/src/main/resources/base/media/people_black.png rename entry/src/main/{js/default/res/image => resources/base/media}/phone.png (100%) create mode 100644 entry/src/main/resources/base/media/phone_small.png create mode 100644 entry/src/main/resources/base/media/phone_white.png create mode 100644 entry/src/main/resources/base/media/phone_white_transversal.png create mode 100644 entry/src/main/resources/base/media/phonebook.png create mode 100644 entry/src/main/resources/base/media/symbol.svg create mode 100644 entry/src/main/resources/base/media/symbols.svg rename entry/src/main/{js/default/res/image => resources/base/media}/uncomfirm.png (100%) create mode 100644 entry/src/main/resources/base/media/voice.png create mode 100644 entry/src/main/resources/base/media/wait.png create mode 100644 entry/src/main/resources/base/media/waiting.png create mode 100644 entry/src/main/resources/dark/element/color.json create mode 100644 entry/src/main/resources/en_US/element/string.json create mode 100644 entry/src/main/resources/light/element/color.json create mode 100644 entry/src/main/resources/rawfile/0.ogg create mode 100644 entry/src/main/resources/rawfile/1.ogg create mode 100644 entry/src/main/resources/rawfile/10.ogg create mode 100644 entry/src/main/resources/rawfile/11.ogg create mode 100644 entry/src/main/resources/rawfile/2.ogg create mode 100644 entry/src/main/resources/rawfile/3.ogg create mode 100644 entry/src/main/resources/rawfile/4.ogg create mode 100644 entry/src/main/resources/rawfile/5.ogg create mode 100644 entry/src/main/resources/rawfile/6.ogg create mode 100644 entry/src/main/resources/rawfile/7.ogg create mode 100644 entry/src/main/resources/rawfile/8.ogg create mode 100644 entry/src/main/resources/rawfile/9.ogg create mode 100644 entry/src/main/resources/tablet/element/float.json create mode 100644 entry/src/main/resources/zh_CN/element/string.json delete mode 100644 entry/src/ohosTest/config.json delete mode 100644 entry/src/ohosTest/js/default/app.js delete mode 100644 entry/src/ohosTest/js/default/i18n/en-US.json delete mode 100644 entry/src/ohosTest/js/default/i18n/zh-CN.json delete mode 100644 entry/src/ohosTest/js/default/pages/index/index.hml delete mode 100644 entry/src/ohosTest/js/default/pages/index/index.js delete mode 100644 entry/src/ohosTest/js/test/AccountantsModel.test.js delete mode 100644 entry/src/ohosTest/js/test/CalllogModel.test.js delete mode 100644 entry/src/ohosTest/js/test/ContactDetailModel.test.js delete mode 100644 entry/src/ohosTest/js/test/ContactModel.test.js delete mode 100644 entry/src/ohosTest/js/test/CustomizeModel.test.js delete mode 100644 entry/src/ohosTest/js/test/FavoritesModel.test.js delete mode 100644 entry/src/ohosTest/js/test/GreetingModel.test.js delete mode 100644 entry/src/ohosTest/js/test/GroupsModel.test.js delete mode 100644 entry/src/ohosTest/js/test/List.test.js delete mode 100644 entry/src/ohosTest/js/test/SelectContactsListModel.test.js delete mode 100644 entry/src/ohosTest/js/test/SelectcontactsModel.test.js delete mode 100644 entry/src/ohosTest/js/test/mergeModel.test.js delete mode 100644 entry/src/ohosTest/js/test/recentlydelModel.test.js delete mode 100644 entry/src/ohosTest/js/test/recoverModel.test.js delete mode 100644 entry/src/ohosTest/resources/base/element/string.json delete mode 100644 entry/src/ohosTest/resources/base/media/icon.png delete mode 100644 global.gradle delete mode 100644 gradle/wrapper/gradle-wrapper.jar delete mode 100644 gradle/wrapper/gradle-wrapper.properties rename entry/package.json => package.json (100%) create mode 100644 sign/IDE.cer create mode 100644 sign/OpenHarmony.p12 create mode 100644 sign/com.ohos.contacts.p7b create mode 100644 sign/material/ac/f9c76069fe3c470d9e2a9170caa8363e create mode 100644 sign/material/ce/2dac8ad1a181442da8e938071b28530a create mode 100644 sign/material/fd/0/9d6b543ba2624abf89877179453f62ae create mode 100644 sign/material/fd/1/c0a0efae61d44233b1709e444c2e9748 create mode 100644 sign/material/fd/2/02846094e97640a9b76a316e6e439640 delete mode 100644 signature/contacts.p7b diff --git a/LICENSE b/LICENSE index 29f81d8..84f5f8e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ - Apache License +Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -174,28 +174,3 @@ of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/OAT.xml b/OAT.xml index 84bd509..fd2b183 100644 --- a/OAT.xml +++ b/OAT.xml @@ -1,5 +1,5 @@ - + - - - + + + + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - \ No newline at end of file + diff --git a/README.md b/README.md index 2dd6384..94046d6 100644 --- a/README.md +++ b/README.md @@ -1,36 +1,45 @@ -# applications_contacts +# 联系人 -#### Description -{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**} +### 简介 -#### Software Architecture -Software architecture description +Contacts应用是OpenHarmony中预置的系统应用,主要的功能包含拨号盘、通话记录查看、通话记录批量删除、联系人列表、详情查看、联系人的新建等功能; -#### Installation +### 架构图 -1. xxxx -2. xxxx -3. xxxx +![image-20220222110725915](./doc/image/image-20220222110725915.png) + +### 目录 + +~~~ +/Contacts/ +├── doc # 资料 +├── entry +│ └── src +│ └── main +│ └── ets # js代码目录 +│ └── MainAbility # 公共页面样式 +│ ├── account # 联系人账号 +│ ├── call # 通话记录 +│ ├── component # 组件封装 +│ ├── contact # 联系人 +│ ├── contact # 存储契约 +│ ├── entity # 实体 +│ └── repo # 仓库 +│ ├── dialpad # 拨号盘 +│ ├── feature # 特性集合 +│ |── model # 模型 +│ |── pages # TS声明式页面/组件 +│ |── presenter # 页面展示逻辑 +│ |── util # 工具类 +│ └── workers # JS多线程服务 +│ └── app.ets # 应用生命周期/公共方法存放 +│ ├── resources # 资源配置文件存放目录 +│ └── config.json # 全局配置文件 +├── signs # 签名 +├── LICENSE +~~~ -#### Instructions -1. xxxx -2. xxxx -3. xxxx - -#### Contribution - -1. Fork the repository -2. Create Feat_xxx branch -3. Commit your code -4. Create Pull Request -#### Gitee Feature -1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md -2. Gitee blog [blog.gitee.com](https://blog.gitee.com) -3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore) -4. The most valuable open source project [GVP](https://gitee.com/gvp) -5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help) -6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) diff --git a/README_zh.md b/README_zh.md deleted file mode 100644 index 4c8f172..0000000 --- a/README_zh.md +++ /dev/null @@ -1,49 +0,0 @@ -# Contacts - -- [简介](#section11660541593) - - [架构图](#section48896451454) - -- [目录](#section161941989596) -- [使用说明](#section123459000) -- [相关仓](#section1371113476307) - -## 简介 - -Contacts应用是OpenHarmony中预置的系统运用,主要的功能包含拨号盘、通话记录查看、通话记录批量删除、联系人列表、详情查看、联系人的新建等功能 - -### 架构图 - -![](./doc/image/read.png) - -## 目录 - -``` -/applications/standard/contacts -├── doc # 架构图目录 -├── entry -│ └── src -│ └── main -│ ├── config.json # 全局配置文件 -│ ├── resources # 资源配置文件存放目录 -│ └── js # js代码目录 -│ └── base # 公共css样式 -│ └── common # 公共页面样式 -│ └── i18n # 国际化 -│ └── model # 页面数据Model -│ └── pages # 页面/js逻辑样式 -│ └── res # 资源文件 -│ └── utils # 工具类 -│ └── ServiceAbility # 服务ability -│ └── app.js # 应用生命周期/公共方法存放 -├── LICENSE -``` -## 使用说明 - - 参见使用说明([使用说明](./doc/Instructions.md)) - -## 相关仓 - -系统应用 - -**applications\_standard\_contacts** - diff --git a/build.gradle b/build.gradle index e4741d5..3220a8d 100644 --- a/build.gradle +++ b/build.gradle @@ -1,35 +1,52 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. apply plugin: 'com.huawei.ohos.app' -apply from: this.file('global.gradle') + +//For instructions on signature configuration, see https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ide_debug_device-0000001053822404#section1112183053510 ohos { - compileSdkVersion 7 + compileSdkVersion 8 supportSystem "standard" - defaultConfig { - compatibleSdkVersion 7 + signingConfigs { + debug { + storeFile file('sign\\OpenHarmony.p12') + storePassword '00000016415DCB8BDB5D691A90749335FF8E25F1806A4C11AF9FB4BE8C598A979D787FF01BDB' + keyAlias = 'OpenHarmony Application CA' + keyPassword '00000016929E7CB9E098D907A36A4346625D55CC1DC412040BDB794E0CEAF760FDB68B0E8966' + signAlg = 'SHA256withECDSA' + profile file('sign\\com.ohos.contacts.p7b') + certpath file('sign\\IDE.cer') + } + release { + initWith(signingConfigs.debug) + } } } buildscript { repositories { maven { - url 'https://repo.huaweicloud.com/repository/maven/' + url 'http://repo.ark.tools.huawei.com/artifactory/maven-public/' + allowInsecureProtocol = true } maven { - url 'https://developer.huawei.com/repo/' + url 'http://mirrors.tools.huawei.com/maven/' + allowInsecureProtocol = true } } dependencies { - classpath 'com.huawei.ohos:hap:3.0.3.4' + classpath 'com.huawei.ohos:hap:3.0.6.4' + classpath 'com.huawei.ohos:decctest:3.0.4.3' } } allprojects { repositories { maven { - url 'https://repo.huaweicloud.com/repository/maven/' + url 'http://repo.ark.tools.huawei.com/artifactory/maven-public/' + allowInsecureProtocol = true } maven { - url 'https://developer.huawei.com/repo/' + url 'http://mirrors.tools.huawei.com/maven/' + allowInsecureProtocol = true } } } diff --git a/doc/Instructions.md b/doc/Instructions.md deleted file mode 100644 index aedd9b9..0000000 --- a/doc/Instructions.md +++ /dev/null @@ -1,232 +0,0 @@ -# Contacts 使用说明 -## 代码使用 -### 代码下载 -#### 配置码云ssh -1. 打开本地git bash窗口 -2. 进入到.ssh 目录:cd ~/.ssh -3. 找到id_rsa.pub文件:ls -4. 查看公钥:cat id_rsa.pub -5. 在码云个人设置-安全设置-ssh公钥中配置公钥 - -#### 下载代码 - 1. 打开码云MMS地址([下载地址](https://gitee.com/openharmony/applications_contacts))。 - 2. 选择克隆/下载 - ssh方式 -复制下载地址 - 3. 本机git bash 中执行: - ``` - git clone '复制的下载地址' - ``` - -### 环境搭建 -打开DevEco Studio链接下载安装,安装步骤及安装说明详见下载见官网 - -## 基础开发说明 -### 系统接口调用 -### 异步回调的使用 -- 在需要回调操作的js文件中创建回调函数 -```JavaScript -subscribeCallback(err, data){ - // do something -}, -``` -- 调用应用内部封装的接口,并传入回调函数 -```JavaScript -Notification.subscribe(mSubscriber, this.subscribeCallback.bind(this)); -``` -- 在AsyncCallback返回数据时可以获取到错误信息或目标数据 -```JavaScript -subscribeCallback(err, data) { - Log.showInfo(TAG, 'subscribeCallback finished ====================' + JSON.stringify(data)); -} -``` -### 如何引用资源文件 -- 在i18n/zh-CN.json文件中,可直接通过$t()引用资源 -```` JavaScript -this.title = this.$t('app.string.hello_world'); -```` - -## 典型接口的使用 -``` -import dataStorage from '@ohos.data.storage'; - onCreate() { - LOG.info(TAG + 'AceApplication onCreate'); - this.initDataStorage(); - }, - async initDataStorage() { - let context = featureAbility.getContext(); - let path = await context.getFilesDir(); - this.globalData.storage = dataStorage.getStorageSync(path + this.globalData.path); - }, -``` -## 签名打包 -### 签名 -#### 签名文件的获取 -1. 拷贝OpenHarmony标准版工程的 prebuilts\signcenter 目录到操作目录 -2. 拷贝applications_contacts工程的 signature\contacts.p7b 到该目录下 -#### 签名文件的配置 -打开项目工程,选择 File → Project Structure - -![](../doc/image/signature_1.png) - -选择 Modules → Signing Configs,将对应的签名文件配置如下,完成后点击Apply,再点击OK。 - -![](../doc/image/signature_2.png) - -配置完成后,对应的build.gradle文件中会出现如下内容 - -![](../doc/image/signature_3.png) -### 打包 -DevEco Studio 支持 debug 与 release 两种打包类型。可以在 OhosBuild Variants 窗口中进行切换。 - - ![](../doc/image/ds_ohosbuild_variants.png) - -#### debug打包 -1. 代码准备完成后,在 OhosBuild Variants 窗口的 Selected Variant 中选择 debug。 - - ![](../doc/image/ds_ohosbuild_variants_debug.png) - -2. 选择Build → Build Haps(s)/APP(s) → Build Hap(s) - - ![](../doc/image/ds_build_haps.png) - -3. 编译完成后,hap包会生成在工程目录下的 `\build\outputs\hap\debug\phone\`路径下(如果没有配置签名,则只会生成未签名的hap包) - - ![](../doc/image/ds_ohosbuild_variants_release.png) -#### release打包 -1. 代码准备完成后,在 OhosBuild Variants 窗口的 Selected Variant 中选择 release - - ![](../doc/image/ds_ohosbuild_variants_release.png) - -2. 选择Build → Build Haps(s)/APP(s) → Build Hap(s) - - ![](../doc/image/ds_build_haps.png) - -3. 编译完成后,hap包会生成在工程目录下的 `\build\outputs\hap\release\phone\`路径下(配置好签名后,生成的hap包会显示signed) - - ![](../doc/image/ds_ohosbuild_output_dir_release.png) -## 安装、运行、调试 -## 应用安装 -配置 hdc: -进入SDK目录中的toolchains文件夹下,获取文件路径: - -![](../doc/image/sdk_catalogue.png) - -> 注意,此处的hdc.exe如果版本较老,可能不能正常使用,需要获取新的hdc.exe文件 -> hdc命令介绍与下载详见:[hdc仓库地址](https://gitee.com/openharmony/developtools_hdc_standard) - - -并将此路径配置到环境变量中: - -![](../doc/image/sdk_environment_variable.png) - -重启电脑使环境变量生效 - -连接开发板,打开cmd命令窗口,执行hdc list targets,弹出窗口如下: - -![](../doc/image/cmd1.png) - -等待一段时间后,窗口出现如下打印,可回到输入 hdc list targets 的命令窗口继续操作: - -![](../doc/image/cmd2.png) - -再次输入hdc list targets,出现如下结果,说明hdc连接成功 - -![](../doc/image/cmd3.png) - -获取读写权限: - -``` -hdc target mount -``` -将签名好的 hap 包放入设备的 `/system/app` 目录下,并修改hap包的权限 - -``` -hdc file send 本地路径 /system/app/hap包名称 -例如:hdc file send Contacts.hap /system/app/Contacts.hap -``` -> 注意,如果设备不存在 `/system/app` 目录,则需要手动创建该目录并修改权限。 -> ``` -> hdc shell -> cd system -> mkdir app -> chmod 777 app -> ``` -> `/system/app` 目录放置系统应用,例如:Contacts 等。 -> -> 但hap包需要在该目录下手动设置权限 -> ``` -> chmod 666 hap包名 -> ``` -> 此目录应用不用手动安装,系统自动拉起。 -## 应用运行 -MMS属于系统应用,在将签名的 hap 包放入 `/system/app` 目录后,重启系统,应用会自动拉起。 -``` -hdc shell -reboot -(不可以直接执行hdc reboot,命令是无效的) -``` -> 注意,如果设备之前安装过系统应用,则需要执行如下两条命令清除设备中存储的应用信息才能够在设备重启的时候将我们装入设备的新 hap 包正常拉起。 -> ``` -> hdc shell rm -rf /data/misc_de/0/mdds/0/default/bundle_manager_service -> hdc shell rm -rf /data/accounts -> ``` -## 应用调试 -### log打印 -- 在程序中添加 log -```JS -console.info("contacts log info"); -``` -### log获取及过滤 -- log获取 - -将log输出至文件 -``` -hdc shell hilog > 输出文件名称 -``` - -例: -在真实环境查看log,将全log输出到当前目录的hilog.log文件中 -``` -hdc shell hilog > hilog.log -``` - -- log过滤 - -在命令行窗口中过滤log -``` -hilog │ grep 过滤信息 -``` - -例:过滤包含信息 Label 的 hilog -``` -hilog │ grep Label -``` -## 贡献代码 -### Fork 代码仓库 -1. 在码云上打开 MMS 代码仓库([仓库地址](https://gitee.com/openharmony/applications_contacts))。 - -2. 点击仓库右上角的 Forked 按钮,在弹出的画面中,选择将仓库 fork 到哪里,点击确认。 - -3. Fork 成功之后,会在自己的账号下看见 fork 的代码仓库。 - -### 提交代码 -1. 访问我们自己在码云账号上 fork 的代码仓库,点击“克隆/下载”按钮,选择 SSH,点击“复制”按钮。 - -2. 在本地新建 Contacts 目录,在 Contacts 目录中执行如下命令 - ``` - git clone 步骤1中复制的地址 - ``` - -3. 修改代码。 - > 将代码引入工程,以及编译工程等相关内容请参见 **3. 代码使用** 部分的相关内容。 -4. 提交代码到 fork 仓库。 - > 修改后的代码,首先执行 `git add` 命令,然后执行 `git commit` 命令与 `git push` 命令,将代码 push 到我们自己的 fork 仓中。 - > 关于代码提交的这部分内容涉及 git 的使用,可以参照 [git官网](https://git-scm.com/) 的内容,在此不再赘述。 - -### 发起 Pull Request (PR) -在将代码提交到 fork 仓之后,我们可以通过发起 Pull Request(PR)的方式来为 OpenHarmony 的相关项目贡献代码。 - -1. 打开 fork 仓库。选择 `Pull Requests` → `新建 Pull Request` - -2. 在 `新建 Pull Request` 画面填入标题与说明,点击 `创建` 按钮。 - -3. 创建 Pull Request 完成。 PR 创建完成后,会有专门的代码审查人员对代码进行评审,评审通过之后会合入相应的代码库。 \ No newline at end of file diff --git a/doc/image/3-1.png b/doc/image/3-1.png deleted file mode 100644 index 43727b43d2e39f8e717a7624874640c8d7f8f4e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21041 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 L-Rs5ItV90~5*?CT diff --git a/doc/image/cmd1.png b/doc/image/cmd1.png deleted file mode 100644 index 43cec749ca6ddb34d551df7f07e6f62ef1eb5688..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71867 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 Si=i^t#o)Zjx#Hg(qy7WV5E6R; diff --git a/doc/image/cmd2.png b/doc/image/cmd2.png deleted file mode 100644 index b771fda0faed1df341bb1e7c7247223bec53986e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110399 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 diff --git a/doc/image/cmd3.png b/doc/image/cmd3.png deleted file mode 100644 index 75cc11c96e8842d0b72329f0bc000dad824eeb5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24588 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 (qCM1v6xZEuRriI#dXUWA7?uZwqb zbw!r0uA?T(Y^P*DD0=kENy4Bk0E^prmuqLxT?+PzZ_AAl9fUW`Eq8N#QDF6htdCVi z1j59`#FKu^Yzy*7&X<(w)mF6R8br&rxc}V1EFYAfxe}F9HH06eP>*1v!_pwVqgBB# z$i0#TFqImgzfUkL#Vg8`ZY{XnU`CGZtgSQP8dI#b4itf8{Ly)E- zLP=x%Dt{lmq-C#_l@gW!JX9-Sg2Rfrjk063p*1BeBG$TLj=yGUmaL?E@#3+4`}Tz* zV08h<#wN)<3_Q$GNp&eWI$ljp+0svx_PNwZWG0bm-tyx5+T)*_a}0k`YndYN@0xtp z+{LTY{rPWvFChqRy)Zp_IU=ophlas6Hy=9Xa;tLte6e=Lz6zPS_C$(;a%xNO*XhX^ ze!O{af*Bg>1?!o=SxNFwm66A^u4p6u{=Jh|)VqA)!27=h?soCM_}F~thcu&&|Bl^N zq)wTOh@k~iua$%E*1T;!8r&fNTbK5!$l=(PthJX@Q?AJiQw^)x9^uf#;9dbpXbu|L z$W9iEx?U;tRE@7W(0o@0PeXn(v>v|;^)qTF-CKRbYENV+Jn4Fchnw13?~)r?d|=Sx z{ifq(K zGPQ8-faN%UA^X}wZPEw<61mdU?6kb-#IYL2(p}x^_C7{4&cL0Vp`ut{!-6JK5&3D-TOAxA$3uRapB&{5JoQ09i*)3u zhft?7J0Z8=ZD-KCN4El8Iuqb)<9wYRm#tljN)`oY{Y*s9z8UbU@?v7DC)x&QmHiIF z<-tMoq0>F->l8Lf=xMtye@$ZlLRwrx z*lT*?*V(zo=^yST=Krd}&292n>g^LLzo!yjJ6zav&DB^*7tXxhnE9|`wn$!W@OO#b zy&s`uQzg*n0o+4Z;fh}>nHIP>G$9WsS)FoEwUG#LrMRYAL|UkO>R%b|X$R;k>DWPW zjh);4_X{w1#C?eX;7h+mo;z^uhl;p`?S11y*0`d(s`-7}7fXh6j0E{qO|w*D3?r>; zY6o6Lg|{@{3D~+Zoj`i{e)Z_JZqi)0%8#b04>{MD<0XF~)p#XP8mw|^-}3jF4n5Gm zQ|hOvJD>cJQ^mfs6U0c#DN30SF@==V^7WX-%EnhGxlW+j-U8f zvKyqnbhU)I^hoL;6S=RS@Hp)X(F+fpf+HeP!9Q@`ZqFNO*rP~lj>l6HBf<(q&umz{ ziRs!2+kaoUu``haq3c1Km8F~D3JNoxvNc+$ zN`VZ@*60ZFNl8hrwqB=%mOZ{H40+4V9-RD2q=hRI{W3Z72XlOYb#v%Rc7-pY)+a}0 zaPT=s5S4H0zcXBJ)XbfL#<%=rpz|MJo!c{*BM6d~XSx~m2!FoIhgb9YIx~tlGP<-01pQa@u%e>4v z-p=Y@T2XGF=zjMSclaFW(@cA4U`@7_2OxBUB1>Sbl>`Klg0{OaNf`x2c9F-5wth6+ zjkMfy>504A!_Es^?0?p5AH?NbLG-gAscACG|9bv_;P-Sq!IC|2j(dhOX!QFj7pLjg z1`Xc(xS*UVe6&lSQb*!pfQP!5>5hfptbJ^E?f<@hXH8%5G|tW_ruh`C0X+Bck_PTq zrTdEQ7g5cQJN$qvT-jgyhpv6!j=dw+x;}k{*hB*TP+jB)ukzF^wCm_bHHUhO4zo0J zHX;&9(%0BnrLM1O_;aZM!r(~WMcMD%R2Aykok9K4>^qggVFs!;JU_0YRY~0UJ0_); zfK&W}uU>MGnPoMnO~Db-7M7c5z=rW-Kv@aUPAeF-%r%>S+LW2E&<3gukJj{wpCzOJ z(#((qSl1~w63wVvf~1me_A*{r+4I3JMmHq`Ns&MAIJ>#8?}~yia&*!S#{`pJsX4<+ zjLy+T1-B>CU}@b@CM{FiH9lkCU~F)yFTC%0(&OiTaipQ^IT+MV59t@)|C&k!?`%=Ezt<3^>8UXY=&#n4JMzOm#FA@HMkSROGZlZMc4x+H`t%tHh72SaR>A zBDG10!bGh3aG|AyVv~}3=?zW!(IVOS3Gkm3Maoz%pw+|O1q2pC5 znOq(A4!UlgvmIN_3r2BwCQ7sTUp=P#e;Pb(|91_ZuDjQ4wL3pvw=x-Zx1wK9mH3B` zAMdV3=C%dYB9X02!B#$De;b_9nINZJpIYdx&*19?LL+OcwdT6vq$lT1rA3^A z%<4F#Qd_h0X#_S{r$Da3W1x_ zG1}CJPmBhLYivojMo24p(p>)QO=WbU*?WS&y8u<(lP9Ud5XA2|9<77pHyV6ChLsTS zPPThV97!2+AT7-D+-Q+|)cX6}*+2(eh$fXDAFq>8dEdNa)o~DH*Y@uJp3{vin*+a( zr%N_JQ9OIgCb({#s<|7y+UuyxPugzD?Z~P8kwWDu{6A8t&dxkcqX95ye1D2@DwWsd zh^ZPf4}rJ5({R?Tm6P7(IEWjIQj=}(4zL-8JXHCCAv80!juf~+7{*HBq4;ai_jUbv z0Sa7K-_3iP)q8q_U_~r9xzkE`V}4#mEEe7!l#Ox&fnc^0 zE~ThG_Wrh9?WzluB5`8JR_DA9Q>la0CN-!8cSM7Y0j21rS3@glEKOv?mS%V(UKODG z3`C+f)Bl-g!Cqnf0<{6^k>hL$Z%O_U@@vf`t=0J!@$PnBX{_;TQtaTAY+k5>bb4=7 z;B|wN(qNiqS(H*9HLP++%{7oUv2mc^wnxhhxoGkVAP)oqA3Z!^CVBbF(j zXM+xJz9faM@`pO|CEs-b{a8bngnYsoSTh*H5Argv#!S#?NOqoRDK>XMX)DS; zzz>m8-L_h+5fR#QKj}yp|M3~0vRM5+Lp(Rn)Xe^7Mh(l**_&RsH0|zUW8l>QOE04S z0Ib#S9q(Q~8_HzA&XBvYEMYIRYf6;hq{8hG^Lb9-{7=`t(>b(-S)mb!O!TiLb=qJ( zSH3M@R<;x<{r+Ul(q*Z0Y`!SWbo7rL@|;rXoq|c$611&$x0Q9?9qXfWfB> z8*3%|F<~aoh7;yNkEyiE%}X8hvL2m0rZYS|6G(CA140#FI!vCT%uj_ zA4#rKuZ(Kv;^LK5&&ybG#k1y0?MjQ(|5=yG2#2yL0-mODxwtBlaxO;$t6HRM;aRuY zgE!7U{4i4D^*bKRD0%mys{`QnUPfd-p_?i3|Nkt;=%|`^tCkI~2C=jqR8D0a;FUz- z3D?iUj-hjC84bl{(>u*B^wzxb>1>Y_1&`M4N$y4=dHnVoSBKbn3q~kKt!QVYYyY+H zy<77c4*-79+%QMlOGZ_bbV-vqO&GrKuK50qvrOd-FE?`Zh0*el^evFfpyoQHaUOV- zxj#Irb@OCB8JhIbWA6MF>`Bl2qa{^F&Dopl3@@%b&E=G?iKLB;U~#{=bJN*+VZwo3 z(ZqZ5z(am~=q5?`;*g6Sq45!q+9(8a%ttJk}D-4<&$0$T zF2aw#%822xGhF zzdSla3`pgp`V$Vq!SO+*zM)HNw*YNsvS85qK(9$lw|I8KzH>d}b@-oHOID%=o+mW2Qf%61=bPxtT#7~8VPvbe1#S?*$|P&jCDpf433Y>4^AmH z>?!lnmz$ekv$Oy<^>Hst8k{^iJNxGnLDIF@CHc1xz37Ti(IzkB&Qi45PPPbd>5ge# zWv{3>IsKbddpI0!m*jD-@w`RM@?ou=Me~hvYj>q({vOpJn|LCE_-%<=s+|@e3Xjt- z?E3UlvMs(>4f|C7T&HmA28Q^EizH3>Biza~!=n`NfM)%jdfmO)Q+Nl-FH#?RCHa)( zD&=|Nzi=sHI`d*RP#>t|D7wab+d=Jml|wPBJr0+kkG^y(8~fmw;fjoc9TLyat^Zqy z(HQfdJMxJU5Rk3qVgst9eyu#rPu}R&jq$v+(8<|}l=@Y*!FMkbNsuWENdP3eTkoV> zcgovxAz_krk1Sd@P_r_n{f~CeGpeaA?c?el7mNjDR6@@k8z6+@6$n+Y3aBVW5F#jW z0hJzlC$WNpB+?>MRf-}82q6TiDkcGeV7!!20z!lUp-2gVK*F3OzO&xBYrSh`KHhiv z{p_8cz4kumd4A9T`BSDM^h!TRfYHUvslpx^d9Xc`#U;SQHFcpZl`Ta=O7$g3%;?+S z0r7oExLI!av@Xgy^*+i8+7kFv4H+68yTN@ob@m1lLgoV=lo}=bLP2qw zQvaF!Y>i2^+^*`3Zc~T!U$p zyq0cRe^3-x#5V48O6Vs)mv?+(Jm`2osYnB(HzPrP`{A1Y#VK2>@b{urL8^nNk$F9% ztJnKAEm@iiRo_xc%)S$Mo5tZ$S-mnzyo?vzgvYnaDJ)S&X5*Sb!!JV1%@4L@DE4eZ zSKn4jrf6zmrdSKK&G>vVs!Vzcm^9A7f%a?n8@z>>3{V*+)Hbk~!txLV*Uoj_+|rS)x<{<0J332Zx~(KQa#;M0*EDHwkD@m%XGh@O&*7R0&I+tlNDBdhCM zjcK&3X{T@n-OAGz-e@Sy@k&lgd>o4r%>Dug_^72KZ7eM7rUOfmYyN>!rKjf}P5xza zp1%Fco|oViuiG};<#?n^%w8w*2BS9}7N}p$>stI|cG5NVMB!Ue6VuBR*Zrald1Q?C zK?8ICH><(BL9WW0cIae4p^S)K)>10!nLJ@jZcAmK=Uzs@9z|EnZQma|dIYG9Un9g` z2xvSsE77Yj*9y?sf&qI+euP6+BcEquTE3G22cGkuX2x;C{G^Si;4CW=dZT>QY?QldRzpS`c!Uncb@v zZgl$AVM!{EJv`}glKgIw@7_B^-qt1uGzv|V(%Djy3nNRBjCGMrZNJRv&@kxx4{a^u zNg!1f4EMtF;%M$ickcPP@6_3w9jvs9_MKO0g#$;I?HS~n3+c?I!9^YPT*H^(=$x=?J`pfootWl)d!mHtxQ5iU*r71UL2T*TycMH@r zFqe0FQuuCpH+NMV(24%VlnCVO z`K;3yS)+6LDRbtdwYKX!kt6H$6JUj#${5i$m;|PR!of(`i>BK+)5ZS4$JVb7kzO74 zrafw50s=z5l_ELh@U4vEaV(wfT4WOAeesRRG_fASV>tFK95(4sA{9Bh6>sf3l_>2A z1iF#jYNPBLW5p~iy>u?Dv<|}@O&D}ZU(0YOXn52CK*mhxA!hWQXFoNk^ERK0+Kb0ZxW_*8+^kb?Gd0xw zt_gt(sL4ereN{9x6mKJK+tMLpbHt&F?tKt>GmPPxI$F~qpZ27%Zq+R~yyb#3+LwIQ zxRR4z6N~BG((Id;Wkrp|PlFm_AJ3iQz*@c<00>pj0q7VH{#h>S-Dtj&iMea)nWs!) z@4fUQsROna`Ezso9v)8U<(mW9g2@$IpPbNMX*<%-Wv?@0{9syrFWZ55M6T=5jg#?j347Xp+uqBDJH4E+GE-B%ox zwjkYgtSQL}fa=aEaRN7;tbT$#2YV-SK+d`Z3Ldd2d)!`S7uoQOP3Pfusmq>b~#b>P!=^emexn}2X@bC2x2lq!Vp z9o(Y=-dc0ozeT}r1rH_?a++ruL0rOW7l-$ zw`5heu~v&eM(MK=hs#Y;$<}9Km17HXuJ~yU3B~Z(bMu?L4qx1%rZ7`_z28r9&nS$6 zGsixHW&0YQ+1#_t^h}FSE<^f_dMvhNt|2PeipH0;q&bd|I4ja8rE_4@UA}5=pZ_*~ zW_M2v#>tN;{?rmvz7nHj7|W8wl3BdHw21DDtqP?ykTZnF2<1DXC#g|uoZk9hDvc53 zhR$gcJbWkLx@uqnlK>)iI~wtN$H<1(pc*9#QVSEUH^v<*?$Jh z{-lHdhw#?jJNc_u)YJ(b7pA#K>RW&XQ8wciZDQ-anf z8%uDOhas11!=_)vO%yf_(H7Wr0DZZdAYDxgpH-+f_#l zI6Cc*zzvpw!7OdGAE-qw=+{l(aR(mTq&&z498rK`n^bK-A+VF#u5s6$-!1WsW2T?q z2_SPI|D-l`wFF5Zw-19dm*d0rK&wZ>WnW@;*Ej&yaUbkG>f|@(QkCHXkrDjCZQ5wI zt^&aS7u&M}7nUyQ$CHx+Kpg*~hCQ+h{;KuCTZDw~N(F7e=>se$Sf8Jzuy4a3(8rG~ zdR!H!fX`jfS{gqybsbrg6`!mAt+JA5U^lz%>Gzf7=O-}-lg1UQ_r@wFZAO@zy9_8k zU`E-|KjRPW0q;CKxksiSERN6_h+L?N1Pu_hjLZmuR;UI@w0Y96X9d2)fKsK};1YfK ze7KFu5*`^_f`UceFHZw!Af@5G1}4wi9Q; zJHE-`^mnVk`T&P-06*gK#uGQx{@@n)|N55xNnb8Mminvw^iKY9G5#zUqb}WK`Sb1hD?X4|jc*CoXMCvra;S|8PW)SZ98sbZ z?>c?Q?f!-$p8P2uib6CP{uVg877Fk0-0rfbi9U#06HJ7XiL7giih$j= zpW$oI^~}(a7z5Fy1L~;6;JVYCWCwG`qE@N5;#kyI)SAP3d0;JtP`EJ1om)ukMO|IZ zT^dHNc>)HwPL!2mSg;U+J|aqNT*w-Ak)DrTe%E*}Z+&k%^fTu3yhP1{l@;^n zSmTyiVh3(F&vC%TD+fJ{Ja@Gfq9(MjYSUB~vDOq0u8`JWYrbz>UV)l~<~Xh_0)Nqc z(%eKoPlc~NNsmLG_hP-T!%Q_@} zZs__@t6-L8%J)jiTQ3^Q?F%0hL*wTzJBL6!=?gsg14?68h>OrI%q6ErgGbB4t=xsL sy@g`wE}pT@nnq|p1)!)BkiJi}PFb=cpXuFq9z30AOf659o^ZYO4>-$SX#fBK diff --git a/doc/image/commit_source_clone_page.png b/doc/image/commit_source_clone_page.png deleted file mode 100644 index d64d35938f1d917c0529014240176eaf57ff3ae5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99056 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%0D#28 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

rY%$cdSaB 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

(+mWOMw@Y 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 diff --git a/doc/image/commit_source_forked_repo1.png b/doc/image/commit_source_forked_repo1.png deleted file mode 100644 index b06af2fa9456e32d98c71dd2f70d2ded7d066bd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48947 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 J#n0co|8Ltp-*5l` diff --git a/doc/image/commit_source_new_pr_done.png b/doc/image/commit_source_new_pr_done.png deleted file mode 100644 index 7f8cd5ad4915d31105609e7832908752b004fec2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29494 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≀m#RcS8c^$yrN_iyGDtv&Zk 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�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 Cr=V{D diff --git a/doc/image/ds_build_haps.png b/doc/image/ds_build_haps.png deleted file mode 100644 index eb6be46346ca966f99c8bdd7ceb6506f2743acce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13633 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 Be;)t< diff --git a/doc/image/ds_download.png b/doc/image/ds_download.png deleted file mode 100644 index c235fbe0e906526de60fae0df1fae49b737d2786..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 118418 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

H~zE3?Aq!LLthpCMP4am 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 diff --git a/doc/image/ds_exe.png b/doc/image/ds_exe.png deleted file mode 100644 index a75222d819e2193ded68806773ce46a42bf52897..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33993 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 diff --git a/doc/image/ds_hilog_window.png b/doc/image/ds_hilog_window.png deleted file mode 100644 index ac0f2dbcedb2817685ee819d0f8e50c4a74697ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74859 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

_O_~WR4oe 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%0D94k`z&DlHys0IFU^?B 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

?ScCsBGWhy8(;8`uvne}uIW-6;H>@|iYg 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

#*cP@KxASF#;alO}l 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 diff --git a/doc/image/ds_install_2.png b/doc/image/ds_install_2.png deleted file mode 100644 index 16f51ac2d531561ba681cffb4e844404829e918c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238501 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

R 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 diff --git a/doc/image/ds_ohosbuild_variants.png b/doc/image/ds_ohosbuild_variants.png deleted file mode 100644 index 9c326f41d20c21153404137e37fd330fdc09dabb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28168 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%0A>aRK@ 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 diff --git a/doc/image/ds_ohosbuild_variants_debug.png b/doc/image/ds_ohosbuild_variants_debug.png deleted file mode 100644 index 7698c0bcc8d5dead9d804899a5e01f60f1a565ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27456 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%0ANu{ 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 Qo3SutBo!nIUl@4*4;MW1)&Kwi diff --git a/doc/image/ds_ohosbuild_variants_release.png b/doc/image/ds_ohosbuild_variants_release.png deleted file mode 100644 index 423deb7bc86f22237404da41c9d2f8a70827c549..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36964 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 Xr(;9wkkQ#=01X7`>T{yjCG6TiRYoRe diff --git a/doc/image/git_ssh_pub_key.png b/doc/image/git_ssh_pub_key.png deleted file mode 100644 index 5ba51814aa479df6ef50aa468d23bc5f33e344a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8249 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

gEsmf=Zh`sAO1RvWV1en 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 diff --git a/doc/image/sdk_downloading.png b/doc/image/sdk_downloading.png deleted file mode 100644 index 986917562d39413e4e44a78c32d0b615b4eb2207..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81988 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

{7?5ME{XY=zKa5+HG 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 A)Bpeg diff --git a/doc/image/signature_1.png b/doc/image/signature_1.png deleted file mode 100644 index 42aeb4501069525d9d25636b70ce23389ce0d9ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20463 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 diff --git a/doc/image/signature_2.png b/doc/image/signature_2.png deleted file mode 100644 index cc28c02078306da6de9a979442bad43d318e4234..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23849 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 diff --git a/doc/image/signature_3.png b/doc/image/signature_3.png deleted file mode 100644 index 2b2e205015bbb649e75882bcc64caa196e4761ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46849 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%0AjhC>m9>rOu8>DO_Eka2 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 (+f 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 AccountType; +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/account/type/AccountType.ets b/entry/src/main/ets/MainAbility/account/type/AccountType.ets new file mode 100644 index 0000000..56688ec --- /dev/null +++ b/entry/src/main/ets/MainAbility/account/type/AccountType.ets @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * 基础账户类型 + */ +export default abstract class AccountType { + static readonly PHONE_ACCOUNT_TYPE: string = "com.android.huawei.phone"; + static readonly PAGE_SETTING_TYPE: string = "com.android.huawei.setting"; + + constructor() { + } +} \ No newline at end of file diff --git a/entry/src/ohosTest/js/test/ExampleJsunit.test.js b/entry/src/main/ets/MainAbility/account/type/DataKind.ets similarity index 58% rename from entry/src/ohosTest/js/test/ExampleJsunit.test.js rename to entry/src/main/ets/MainAbility/account/type/DataKind.ets index 0eccdbd..62b3660 100644 --- a/entry/src/ohosTest/js/test/ExampleJsunit.test.js +++ b/entry/src/main/ets/MainAbility/account/type/DataKind.ets @@ -1,5 +1,5 @@ /** - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -12,13 +12,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import app from '@system.app' -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index' -describe('appInfoTest', function () { - it('app_info_test_001', 0, function () { - var info = app.getInfo() - expect(info.versionName).assertEqual('1.0') - expect(info.versionCode).assertEqual('3') - }) -}) \ No newline at end of file +import EditType from './EditType'; + +/** + * 描述如何展示和编辑联系人单条Data数据 + */ +export default class DataKind { + readonly mimeType: string; + readonly typeList: EditType[] = []; + + constructor(mineType: string, typeList: EditType[]) { + this.mimeType = mineType; + this.typeList = typeList; + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/account/type/EditType.ets b/entry/src/main/ets/MainAbility/account/type/EditType.ets new file mode 100644 index 0000000..24a6a0d --- /dev/null +++ b/entry/src/main/ets/MainAbility/account/type/EditType.ets @@ -0,0 +1,27 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * 描述联系人数据类型中的一项,包括国际化资源,类型对应在数据库中的值 + */ +export default class EditType { + readonly rawValue: number; + readonly labelRes: Resource; + + constructor(rawValue: number, labelRes: Resource) { + this.rawValue = rawValue; + this.labelRes = labelRes; + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/account/type/PhoneAccountType.ets b/entry/src/main/ets/MainAbility/account/type/PhoneAccountType.ets new file mode 100644 index 0000000..e182fcb --- /dev/null +++ b/entry/src/main/ets/MainAbility/account/type/PhoneAccountType.ets @@ -0,0 +1,206 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import AccountType from './AccountType'; +import DataKind from './DataKind'; +import EditType from './EditType'; +import Phone from '../../contact/contract/Phone'; +import Email from '../../contact/contract/Email'; +import House from '../../contact/contract/House'; +import Birthday from '../../contact/contract/Birthday'; +import Aim from '../../contact/contract/Aim'; +import Im from '../../contact/contract/Im'; +import StructuredPostal from '../../contact/contract/StructuredPostal'; +import Event from '../../contact/contract/Event'; +import Relation from '../../contact/contract/Relation'; + +/** + * 电话账户类型 + */ +export default class PhoneAccountType extends AccountType { + static readonly TYPE_KEY: string = AccountType.PHONE_ACCOUNT_TYPE; + readonly mineKinds: Map = new Map(); + + constructor() { + super(); + this.init(); + } + + private init() { + this.addDataKindPhone(); + this.addDataKindEmail(); + this.addDataKindIm(); + this.addDataKindStructuredPostal(); + this.addDataKindEvent(); + this.addDataKindRelation(); + this.addDataKindAim(); + this.addDataKindBirthday(); + this.addDataKindHouse(); + } + + private addDataKindPhone() { + let typeList: EditType[] = []; + typeList.push(this.buildPhoneType(Phone.TYPE_MOBILE)); + typeList.push(this.buildPhoneType(Phone.TYPE_WORK)); + typeList.push(this.buildPhoneType(Phone.TYPE_HOME)); + typeList.push(this.buildPhoneType(Phone.TYPE_MAIN)); + typeList.push(this.buildPhoneType(Phone.TYPE_FAX_WORK)); + typeList.push(this.buildPhoneType(Phone.TYPE_FAX_HOME)); + typeList.push(this.buildPhoneType(Phone.TYPE_PAGER)); + typeList.push(this.buildPhoneType(Phone.TYPE_OTHER)); + typeList.push(this.buildPhoneType(Phone.TYPE_CUSTOM)); + let kind = new DataKind(Phone.CONTENT_ITEM_TYPE, typeList); + this.mineKinds.set(Phone.CONTENT_ITEM_TYPE, kind); + } + + private addDataKindEmail() { + let typeList: EditType[] = []; + typeList.push(this.buildEmailType(Email.TYPE_HOME)); + typeList.push(this.buildEmailType(Email.TYPE_WORK)); + typeList.push(this.buildEmailType(Email.TYPE_OTHER)); + typeList.push(this.buildEmailType(Email.TYPE_CUSTOM)); + let kind = new DataKind(Email.CONTENT_ITEM_TYPE, typeList); + this.mineKinds.set(Email.CONTENT_ITEM_TYPE, kind); + } + + private addDataKindIm() { + let typeList: EditType[] = []; + typeList.push(this.buildImType(Im.TYPE_AIM)); + typeList.push(this.buildImType(Im.TYPE_MSN)); + typeList.push(this.buildImType(Im.TYPE_YAHOO)); + typeList.push(this.buildImType(Im.TYPE_SKYPE)); + typeList.push(this.buildImType(Im.TYPE_QQ)); + typeList.push(this.buildImType(Im.TYPE_GOOGLE_TALK)); + typeList.push(this.buildImType(Im.TYPE_JABBER)); + typeList.push(this.buildImType(Im.TYPE_CUSTOM)); + let kind = new DataKind(Im.CONTENT_ITEM_TYPE, typeList); + this.mineKinds.set(Im.CONTENT_ITEM_TYPE, kind); + } + + private addDataKindStructuredPostal() { + let typeList: EditType[] = []; + typeList.push(this.buildEmailType(StructuredPostal.TYPE_HOME)); + typeList.push(this.buildEmailType(StructuredPostal.TYPE_WORK)); + typeList.push(this.buildEmailType(StructuredPostal.TYPE_OTHER)); + typeList.push(this.buildEmailType(StructuredPostal.TYPE_CUSTOM)); + let kind = new DataKind(StructuredPostal.CONTENT_ITEM_TYPE, typeList); + this.mineKinds.set(StructuredPostal.CONTENT_ITEM_TYPE, kind); + } + + private addDataKindEvent() { + let typeList: EditType[] = []; + typeList.push(this.buildEventType(Event.TYPE_BIRTHDAY)); + typeList.push(this.buildEventType(Event.TYPE_LUNARBIRTHDAY)); + typeList.push(this.buildEventType(Event.TYPE_ANNIVERSARY)); + typeList.push(this.buildEventType(Event.TYPE_OTHER)); + typeList.push(this.buildEventType(Event.TYPE_CUSTOM)); + let kind = new DataKind(Event.CONTENT_ITEM_TYPE, typeList); + this.mineKinds.set(Event.CONTENT_ITEM_TYPE, kind); + } + + private addDataKindAim() { + let typeList: EditType[] = []; + typeList.push(this.buildAimType(Aim.TYPE_AIM)); + typeList.push(this.buildAimType(Aim.TYPE_WINDOWSLIVE)); + typeList.push(this.buildAimType(Aim.TYPE_YAHOO)); + typeList.push(this.buildAimType(Aim.TYPE_SKYPE)); + typeList.push(this.buildAimType(Aim.TYPE_QQ)); + typeList.push(this.buildAimType(Aim.TYPE_HANGOUTS)); + typeList.push(this.buildAimType(Aim.TYPE_ICQ)); + typeList.push(this.buildAimType(Aim.TYPE_JABBER)); + typeList.push(this.buildAimType(Aim.TYPE_CUSTOM)); + + let kind = new DataKind(Aim.CONTENT_ITEM_TYPE, typeList); + this.mineKinds.set(Aim.CONTENT_ITEM_TYPE, kind); + } + + private addDataKindRelation() { + let typeList: EditType[] = []; + typeList.push(this.buildRelationType(Relation.TYPE_ASSISTANT)); + typeList.push(this.buildRelationType(Relation.TYPE_BROTHER)); + typeList.push(this.buildRelationType(Relation.TYPE_CHILD)); + typeList.push(this.buildRelationType(Relation.TYPE_DOMESTIC_PARTNER)); + typeList.push(this.buildRelationType(Relation.TYPE_FATHER)); + typeList.push(this.buildRelationType(Relation.TYPE_MANAGER)); + typeList.push(this.buildRelationType(Relation.TYPE_MOTHER)); + typeList.push(this.buildRelationType(Relation.TYPE_PARENTS)); + typeList.push(this.buildRelationType(Relation.TYPE_PARTNER)); + typeList.push(this.buildRelationType(Relation.TYPE_REFERRED_BY)); + typeList.push(this.buildRelationType(Relation.TYPE_RELATIVE)); + typeList.push(this.buildRelationType(Relation.TYPE_SISTERS)); + typeList.push(this.buildRelationType(Relation.TYPE_SPOUSES)); + typeList.push(this.buildRelationType(Relation.TYPE_CUSTOM)); + let kind = new DataKind(Relation.CONTENT_ITEM_TYPE, typeList); + this.mineKinds.set(Relation.CONTENT_ITEM_TYPE, kind); + } + + private addDataKindBirthday() { + let typeList: EditType[] = []; + typeList.push(this.buildBirthdayType(Birthday.TYPE_GREBIRTHDAY)); + typeList.push(this.buildBirthdayType(Birthday.TYPE_LUNARBIRTHDAY)); + typeList.push(this.buildBirthdayType(Birthday.TYPE_ANNIVERSARIES)); + typeList.push(this.buildBirthdayType(Birthday.TYPE_OTHER)); + + let kind = new DataKind(Birthday.CONTENT_ITEM_TYPE, typeList); + this.mineKinds.set(Birthday.CONTENT_ITEM_TYPE, kind); + } + + private addDataKindHouse() { + let typeList: EditType[] = []; + typeList.push(this.buildHouseType(House.TYPE_DWELLING)); + typeList.push(this.buildHouseType(House.TYPE_POSITION)); + typeList.push(this.buildHouseType(House.TYPE_OTHER)); + typeList.push(this.buildHouseType(House.TYPE_CUSTOM)); + + let kind = new DataKind(House.CONTENT_ITEM_TYPE, typeList); + this.mineKinds.set(House.CONTENT_ITEM_TYPE, kind); + } + + private buildHouseType(type: number) { + return new EditType(type, House.getTypeLabelResource(type)); + } + + private buildPhoneType(type: number) { + return new EditType(type, Phone.getTypeLabelResource(type)); + } + + private buildEmailType(type: number) { + return new EditType(type, Email.getTypeLabelResource(type)); + } + + private buildImType(type: number) { + return new EditType(type, Im.getTypeLabelResource(type)); + } + + private buildStructuredPostalType(type: number) { + return new EditType(type, StructuredPostal.getTypeLabelResource(type)); + } + + private buildEventType(type: number) { + return new EditType(type, Event.getTypeLabelResource(type)); + } + + private buildBirthdayType(type: number) { + return new EditType(type, Birthday.getTypeLabelResource(type)); + } + + private buildAimType(type: number) { + return new EditType(type, Aim.getTypeLabelResource(type)); + } + + private buildRelationType(type: number) { + return new EditType(type, Relation.getTypeLabelResource(type)); + } +} diff --git a/entry/src/main/ets/MainAbility/app.ets b/entry/src/main/ets/MainAbility/app.ets new file mode 100644 index 0000000..13335a5 --- /dev/null +++ b/entry/src/main/ets/MainAbility/app.ets @@ -0,0 +1,33 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import AppStorageUtil from './util/AppStorageUtil'; +import HiLog from './util/HiLog'; + +const TAG = "APP "; + +export default { + onCreate() { + HiLog.i(TAG, 'Application onCreate'); + AppStorageUtil.initData(); + }, + onDestroy() { + HiLog.i(TAG, 'Application onDestroy'); + }, +} + +export interface LooseObject { + [key: string]: any +} diff --git a/entry/src/main/ets/MainAbility/call/CallLogService.ets b/entry/src/main/ets/MainAbility/call/CallLogService.ets new file mode 100644 index 0000000..3cf20c4 --- /dev/null +++ b/entry/src/main/ets/MainAbility/call/CallLogService.ets @@ -0,0 +1,199 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import ICallLogService from './ICallLogService'; +import CallLog from './entity/CallLog'; +import {CallType} from './entity/CallLog'; +import ArrayUtil from '../util/ArrayUtil'; +import MergedCallLog from './entity/MergedCallLog'; +import StringUtil from '../util/StringUtil'; + + +/** + * 账户类型服务类,账户类型持有联系人详情如何展示等账号特征信息 + */ +export default class CallLogService implements ICallLogService { + private static instance: CallLogService; + + private constructor() { + } + + public static getInstance(): CallLogService { + if (!CallLogService.instance) { + CallLogService.instance = new CallLogService() + } + return CallLogService.instance + } + + /** + * 按时间合并情况下,在原通话记录数据基础上完善通话记录业务数据后处理 + * + * @param callLogList 通话记录 + * @return + */ + mergeByTime(callLogList: CallLog[]) { + var resultList = []; + if (ArrayUtil.isEmpty(callLogList)) { + return resultList; + } + let tempElement = new MergedCallLog(callLogList[0]); // 从第一条记录开始,缓存通话记录 + var tempCallTime = callLogList[0].createTime; // 保留最近一条记录的创建时间,在通话记录合并后,显示该时间。 + var tempCallType = callLogList[0].callType; // 保留最近一条记录的通话记录类型,在通话记录合并后,显示该类型。 + var num = 1; + var ids = []; + ids.push(callLogList[0].id); + for (var i = 1; i < callLogList.length; i++) { + var element = callLogList[i]; + if (this.callLogMergeCheck(tempElement, element)) { // 缓存字段与当前字段校验是否需要合并 + num++; + ids.push(element.id); // 将最新记录id放入合并数组 + } else { + /* 最新数据和缓存不一致,则替换缓存数据的num及ids数据,并将缓存的数据记录放入结果集*/ + tempElement.count = num; + tempElement.ids = ids; + tempElement.createTime = this.formatTime(tempCallTime); // 显示已保存的最近一条记录的创建时间 + tempElement.callType = tempCallType; + resultList.push(tempElement); + /* 重置num及ids为最新计数及记录 ,重置tempCallTime为下条记录的最新创建时间*/ + num = 1; + ids = []; + tempCallTime = element.createTime; + tempCallType = element.callType; + ids.push(element.id); + } + tempElement = new MergedCallLog(element); + } + /* 将最后一条缓存数据放入结果集*/ + if (tempElement != null) { + tempElement.count = num; + tempElement.ids = ids; + tempElement.createTime = this.formatTime(tempCallTime); + tempElement.callType = tempCallType; + resultList.push(tempElement); + } + return resultList; + } + + /** + * 按联系人合并的情况下,在原通话记录数据基础上完善通话记录业务数据后处理 + * + * @param {Array} callLogList 通话记录 + * @return {Array} 通话记录 + */ + mergeByContact(callLogs: CallLog[]) { + var resultList = []; + if (ArrayUtil.isEmpty(callLogs)) { + return resultList; + } + var contactTempMap = new Map(); + var phoneNumberMap = new Map(); + for (var i = 0; i < callLogs.length; i++) { + var element = new MergedCallLog(callLogs[i]); + element.createTime = this.formatTime(callLogs[i].createTime); + element.count = 1; // 按联系人合并的情况下,合并记录条目固定为1 + element.ids = [callLogs[i].id]; // 按联系人合并的情况下,合并记录ids固定为本身id + if (StringUtil.isEmpty(element.quickSearchKey)) { // 没有联系人的通话记录,按照电话号码合并 + if (!phoneNumberMap.has(element.phoneNumber)) { + resultList.push(element); + phoneNumberMap.set(element.phoneNumber, callLogs[i].phoneNumber); + } + } else { // 有联系人的通话记录,按照联系人合并 + let isContactKey = contactTempMap.has(element.quickSearchKey); + if (!isContactKey) { + resultList.push(element); + contactTempMap.set(element.quickSearchKey, callLogs[i].quickSearchKey); + } + } + } + return resultList; + } + + /** + * 获取通话时间 + * + * @param date 通话记录创建时间戳 + * @return {object} 通话时间 + */ + formatTime(date) { + let result = ""; + if (isNaN(date)) { // 非数字时,不进行解析 + return date; + } + var timestamp = parseInt(date) * 1000; + // 通话时间 + let callTime = new Date(timestamp); + // 当前时间 + let now = new Date(); + if (callTime.getTime() > now.getTime()) { + result = callTime.getFullYear() + '/' + (callTime.getMonth() + 1) + '/' + callTime.getDate(); + } else if (callTime.getFullYear() == now.getFullYear()) { + // 同年 + if (callTime.getMonth() == now.getMonth()) { + // 同年同月 + let timeDiff = parseInt(((now.getTime() - callTime.getTime()) / 60000).toString()); + let dayDiff = now.getDate() - callTime.getDate(); + if (dayDiff == 0) { + // 同天 + if (timeDiff == 0) { + result = '刚刚'; + } else if (timeDiff < 60) { + result = timeDiff + '分钟前'; + } else { + // 'hh:mm' + result = callTime.getHours() + + ':' + (callTime.getMinutes() < 10 ? '0' + callTime.getMinutes() : callTime.getMinutes()); + } + } else if (dayDiff == 1) { + // 昨天 + result = '昨天'; + } else { + result = (callTime.getMonth() + 1) + '/' + callTime.getDate(); // 'MM/dd' + } + } else { + result = (callTime.getMonth() + 1) + '/' + callTime.getDate(); + } + } else { + // 'yyyy/MM/dd' + result = callTime.getFullYear() + '/' + (callTime.getMonth() + 1) + '/' + callTime.getDate(); + } + return result; + } + + /** + * 按时间合并情况下,校验两条通话记录是否需要合并,需要合并返回true,否则返回false + * + * @param oldElement 合并前通话记录 + * @param newElement 合并后通话记录 + * @return + */ + private callLogMergeCheck(oldElement: MergedCallLog, newElement: CallLog) { + /* 合并规则: + 1.电话号码相同前提下才会合并。 + 2.号码相同的前提下,呼叫类型为1,2或3,5则合并。1,2和3,5类型不合并。 + */ + if (oldElement.phoneNumber.trim() == newElement.phoneNumber.trim()) { // 电话号码相同 + if (oldElement.callType == CallType.IN || oldElement.callType == CallType.OUT) { + if (newElement.callType == CallType.IN || newElement.callType == CallType.OUT) { + return true; + } + return false; + } + if (newElement.callType == CallType.MISSED || newElement.callType == CallType.REJECTED) { + return true; + } + } + return false; + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/call/ICallLogService.ets b/entry/src/main/ets/MainAbility/call/ICallLogService.ets new file mode 100644 index 0000000..29b2a98 --- /dev/null +++ b/entry/src/main/ets/MainAbility/call/ICallLogService.ets @@ -0,0 +1,26 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import CallLog from './entity/CallLog'; +import MergedCallLog from '../call/entity/MergedCallLog'; + +/** + * 通话记录服务类,仅包含通话记录相关,非拨号盘 + */ +export default interface ICallLogService { + mergeByTime: (callLogs: CallLog[]) => MergedCallLog[]; + mergeByContact: (callLogs: CallLog[]) => MergedCallLog[]; + formatTime: (date :number) => string; +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/call/contract/Calls.ets b/entry/src/main/ets/MainAbility/call/contract/Calls.ets new file mode 100644 index 0000000..51e5cc4 --- /dev/null +++ b/entry/src/main/ets/MainAbility/call/contract/Calls.ets @@ -0,0 +1,90 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export enum AnswerState { + MISSED = 0, + RECEIVED = 1, + REJECT = 2 +} + +export enum Direction { + IN = 0, + OUT = 1 +} + +export default class Calls { + static readonly CONTENT_URI: string = "dataability:///com.ohos.calllogability"; + + static readonly CALL_LOG_URI: string = Calls.CONTENT_URI + "/calls/calllog"; + + static readonly ID: string = "id"; + + static readonly PHONE_NUMBER: string = "phone_number"; + + static readonly DISPLAY_NAME: string = "display_name"; + + static readonly CALL_DIRECTION: string = "call_direction"; + + static readonly VOICEMAIL_URI: string = "voicemail_uri"; + + static readonly SIM_TYPE: string = "sim_type"; + + static readonly IS_HD: string = "is_hd"; + + static readonly IS_READ: string = "is_read"; + + static readonly RING_DURATION: string = "ring_duration"; + + static readonly TALK_DURATION: string = "talk_duration"; + + static readonly FORMAT_NUMBER: string = "format_number"; + + static readonly QUICK_SEARCH_KEY: string = "quicksearch_key"; + + static readonly NUMBER_TYPE: string = "number_type"; + + static readonly NUMBER_TYPE_NAME: string = "number_type_name"; + + static readonly BEGIN_TIME: string = "begin_time"; + + static readonly END_TIME: string = "end_time"; + + static readonly ANSWER_STATE: string = "answer_state"; + + static readonly CREATE_TIME: string = "create_time"; + + static readonly NUMBER_LOCATION: string = "number_location"; + + static readonly PHOTO_ID: string = "photo_id"; + + static readonly PHOTO_URI: string = "photo_uri"; + + static readonly COUNTRY_ISO_CODE: string = "country_iso_code"; + + static readonly EXTRA1: string = "extra1"; + + static readonly EXTRA2: string = "extra2"; + + static readonly EXTRA3: string = "extra3"; + + static readonly EXTRA4: string = "extra4"; + + static readonly EXTRA5: string = "extra5"; + + static readonly EXTRA6: string = "extra6"; + + constructor() { + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/call/contract/VoiceMails.ets b/entry/src/main/ets/MainAbility/call/contract/VoiceMails.ets new file mode 100644 index 0000000..0a86b76 --- /dev/null +++ b/entry/src/main/ets/MainAbility/call/contract/VoiceMails.ets @@ -0,0 +1,43 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export default class VoiceMail { + static readonly CONTACT_URI: string = "dataability:///com.ohos.voicemailability"; + + static readonly ID: string = "id"; + + static readonly PHONE_NUMBER: string = "phone_number"; + + static readonly QUICK_SEARCH_KEY: string = "quicksearch_key"; + + static readonly DISPLAY_NAME: string = "display_name"; + + static readonly VOICEMAIL_URI: string = "voicemail_uri"; + + static readonly VOICEMAIL_TYPE: string = "voicemail_type"; + + static readonly VOICE_FILE_SIZE: string = "voice_file_size"; + + static readonly VOICE_DURATION: string = "voice_duration"; + + static readonly VOICE_STATUS: string = "voice_status"; + + static readonly ORIGIN_TYPE: string = "origin_type"; + + static readonly CREATE_TIME: string = "create_time"; + + constructor() { + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/call/entity/CallLog.ets b/entry/src/main/ets/MainAbility/call/entity/CallLog.ets new file mode 100644 index 0000000..400d6c2 --- /dev/null +++ b/entry/src/main/ets/MainAbility/call/entity/CallLog.ets @@ -0,0 +1,101 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import CallLogBuilder from '../entity/CallLogBuilder'; +import {Direction, AnswerState} from '../contract/Calls'; + +export enum CallType { + IN = 1, + OUT = 2, + VOICEMAIL = 4, + MISSED = 3, + REJECTED = 5 +} + +export default class CallLog { + readonly id: number = -1; + readonly phoneNumber: string; + readonly displayName: string; + readonly callDirection: number; + readonly voicemailUri: string; + readonly simType: number; + readonly isHD: boolean; + readonly isRead: boolean; + readonly ringDuration: number; + readonly talkDuration: number; + readonly formattedNumber: string; + readonly quickSearchKey: string; + readonly numberType: number; + readonly numberTypeName: string; + readonly beginTime: number; + readonly endTime: number; + readonly answerState: number; + readonly createTime: number; + readonly numberLocation: string; + readonly photoId: number; + readonly photoUri: string; + readonly countryIsoCode: number; + readonly callType: number; + + constructor(builder: CallLogBuilder) { + this.id = builder.id; + this.phoneNumber = builder.phoneNumber; + this.displayName = builder.displayName; + this.callDirection = builder.callDirection; + this.simType = builder.simType; + this.isHD = builder.isHD; + this.isRead = builder.isRead; + this.ringDuration = builder.ringDuration; + this.talkDuration = builder.talkDuration; + this.formattedNumber = builder.formattedNumber; + this.quickSearchKey = builder.quickSearchKey; + this.numberType = builder.numberType; + this.numberTypeName = builder.numberTypeName; + this.beginTime = builder.beginTime; + this.endTime = builder.endTime; + this.answerState = builder.answerState; + this.createTime = builder.createTime; + this.numberLocation = builder.numberLocation; + this.photoId = builder.photoId; + this.photoUri = builder.photoUri; + this.countryIsoCode = builder.countryIsoCode; + this.callType = this.getCallLogType(); + } + + private getCallLogType() { + if (this.callDirection == Direction.IN) { + if (this.answerState == AnswerState.RECEIVED) { + return CallType.IN; + } + if (this.answerState == AnswerState.MISSED) { + return CallType.MISSED; + } + if (this.answerState == AnswerState.REJECT) { + return CallType.REJECTED; + } + } else { + return CallType.OUT; + } + } + + linkContact() { + } + + /** + * 将通话记录配置为已读 + */ + read() { + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/call/entity/CallLogBuilder.ets b/entry/src/main/ets/MainAbility/call/entity/CallLogBuilder.ets new file mode 100644 index 0000000..5a1aece --- /dev/null +++ b/entry/src/main/ets/MainAbility/call/entity/CallLogBuilder.ets @@ -0,0 +1,173 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import Calls from '../contract/Calls'; + +export default class CallLogBuilder { + readonly id: number = -1; + readonly phoneNumber: string; + displayName: string; + callDirection: number; + voicemailUri: string; + simType: number; + isHD: boolean; + isRead: boolean; + ringDuration: number; + talkDuration: number; + formattedNumber: string; + quickSearchKey: string; + numberType: number; + numberTypeName: string; + beginTime: number; + endTime: number; + answerState: number; + createTime: number; + numberLocation: string; + photoId: number; + photoUri: string; + countryIsoCode: number; + + constructor(id: number, phoneNumber: string) { + this.id = id; + this.phoneNumber = phoneNumber; + } + + static fromResultSet(resultSet: any): CallLogBuilder{ + let callLogBuilder = new CallLogBuilder(resultSet.getLong(resultSet.getColumnIndex(Calls.ID)), + resultSet.getString(resultSet.getColumnIndex(Calls.PHONE_NUMBER))); + callLogBuilder.setDisplayName(resultSet.getString(resultSet.getColumnIndex(Calls.DISPLAY_NAME))); + callLogBuilder.setCallDirection(resultSet.getLong(resultSet.getColumnIndex(Calls.CALL_DIRECTION))); + callLogBuilder.setDisplayName(resultSet.getString(resultSet.getColumnIndex(Calls.DISPLAY_NAME))); + callLogBuilder.setVoicemailUri(resultSet.getString(resultSet.getColumnIndex(Calls.VOICEMAIL_URI))); + callLogBuilder.setSimType(resultSet.getLong(resultSet.getColumnIndex(Calls.SIM_TYPE))); + callLogBuilder.setIsHD(resultSet.getLong(resultSet.getColumnIndex(Calls.IS_HD)) > 0 ? true : false); + callLogBuilder.setIsRead(resultSet.getLong(resultSet.getColumnIndex(Calls.IS_READ)) > 0 ? true : false); + callLogBuilder.setRingDuration(resultSet.getLong(resultSet.getColumnIndex(Calls.RING_DURATION))); + callLogBuilder.setTalkDuration(resultSet.getLong(resultSet.getColumnIndex(Calls.TALK_DURATION))); + callLogBuilder.setFormattedNumber(resultSet.getString(resultSet.getColumnIndex(Calls.FORMAT_NUMBER))); + callLogBuilder.setQuickSearchKey(resultSet.getString(resultSet.getColumnIndex(Calls.QUICK_SEARCH_KEY))); + callLogBuilder.setNumberType(resultSet.getLong(resultSet.getColumnIndex(Calls.NUMBER_TYPE))); + callLogBuilder.setNumberTypeName(resultSet.getString(resultSet.getColumnIndex(Calls.NUMBER_TYPE_NAME))); + callLogBuilder.setBeginTime(resultSet.getLong(resultSet.getColumnIndex(Calls.BEGIN_TIME))); + callLogBuilder.setEndTime(resultSet.getLong(resultSet.getColumnIndex(Calls.END_TIME))); + callLogBuilder.setAnswerState(resultSet.getLong(resultSet.getColumnIndex(Calls.ANSWER_STATE))); + callLogBuilder.setCreateTime(resultSet.getLong(resultSet.getColumnIndex(Calls.CREATE_TIME))); + callLogBuilder.setNumberLocation(resultSet.getString(resultSet.getColumnIndex(Calls.NUMBER_LOCATION))); + callLogBuilder.setPhotoUri(resultSet.getString(resultSet.getColumnIndex(Calls.PHOTO_URI))); + callLogBuilder.setPhotoId(resultSet.getLong(resultSet.getColumnIndex(Calls.PHOTO_ID))); + callLogBuilder.setCountryIsoCode(resultSet.getLong(resultSet.getColumnIndex(Calls.COUNTRY_ISO_CODE))); + return callLogBuilder; + } + + setDisplayName(displayName: string) { + this.displayName = displayName; + return this; + } + + setCallDirection(callDirection: number) { + this.callDirection = callDirection; + return this; + } + + setVoicemailUri(voicemailUri: string) { + this.voicemailUri = voicemailUri; + return this; + } + + setSimType(simType: number) { + this.simType = simType; + return this; + } + + setIsHD(isHD: boolean) { + this.isHD = isHD; + return this; + } + + setIsRead(isRead: boolean) { + this.isRead = isRead; + return this; + } + + setRingDuration(ringDuration: number) { + this.ringDuration = ringDuration; + return this; + } + + setTalkDuration(talkDuration: number) { + this.talkDuration = talkDuration; + return this; + } + + setFormattedNumber(formattedNumber: string) { + this.formattedNumber = formattedNumber; + return this; + } + + setQuickSearchKey(quickSearchKey: string) { + this.quickSearchKey = quickSearchKey; + return this; + } + + setNumberType(numberType: number) { + this.numberType = numberType; + return this; + } + + setNumberTypeName(numberTypeName: string) { + this.numberTypeName = numberTypeName; + return this; + } + + setBeginTime(beginTime: number) { + this.beginTime = beginTime; + return this; + } + + setEndTime(endTime: number) { + this.endTime = endTime; + return this; + } + + setAnswerState(answerState: number) { + this.answerState = answerState; + return this; + } + + setCreateTime(createTime: number) { + this.createTime = createTime; + return this; + } + + setNumberLocation(numberLocation: string) { + this.numberLocation = numberLocation; + return this; + } + + setPhotoId(photoId: number) { + this.photoId = photoId; + return this; + } + + setPhotoUri(photoUri: string) { + this.photoUri = photoUri; + return this; + } + + setCountryIsoCode(countryIsoCode: number) { + this.countryIsoCode = countryIsoCode; + return this; + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/call/entity/MergedCallLog.ets b/entry/src/main/ets/MainAbility/call/entity/MergedCallLog.ets new file mode 100644 index 0000000..897e591 --- /dev/null +++ b/entry/src/main/ets/MainAbility/call/entity/MergedCallLog.ets @@ -0,0 +1,42 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import CallLog from '../entity/CallLog'; + +export default class MergedCallLog { + id: number; + createTime: string; + count: number; + ids: number[]; + callType: number; + phoneNumber: string; + displayName: string; + quickSearchKey: string; + numberLocation: string; + formattedNumber: string; + simType: number; + + constructor(callLog: CallLog) { + this.id = callLog.id; + this.callType = callLog.callType; + this.phoneNumber = callLog.phoneNumber; + this.displayName = callLog.displayName; + this.quickSearchKey = callLog.quickSearchKey; + this.numberLocation = callLog.numberLocation; + this.formattedNumber = callLog.formattedNumber; + this.simType = callLog.simType; + this.ids = []; + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/call/repo/CallLogDelta.ets b/entry/src/main/ets/MainAbility/call/repo/CallLogDelta.ets new file mode 100644 index 0000000..31ec61f --- /dev/null +++ b/entry/src/main/ets/MainAbility/call/repo/CallLogDelta.ets @@ -0,0 +1,53 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import CallLog from '../entity/CallLog'; +import Calls from '../contract/Calls'; + +export default class CallLogDelta { + readonly callLog: CallLog; + constructor(callLog: CallLog) { + this.callLog = callLog; + } + + createValuesBucket(): {} { + if (!this.callLog) { + return []; + } + + return { + [Calls.PHONE_NUMBER]: this.callLog.phoneNumber, + [Calls.DISPLAY_NAME]: this.callLog.displayName, + [Calls.CALL_DIRECTION]: this.callLog.callDirection, + [Calls.VOICEMAIL_URI]: this.callLog.voicemailUri, + [Calls.SIM_TYPE]: this.callLog.simType, + [Calls.IS_HD]: this.callLog.isHD, + [Calls.IS_READ]: this.callLog.isRead, + [Calls.RING_DURATION]: this.callLog.ringDuration, + [Calls.TALK_DURATION]: this.callLog.talkDuration, + [Calls.FORMAT_NUMBER]: this.callLog.formattedNumber, + [Calls.QUICK_SEARCH_KEY]: this.callLog.quickSearchKey, + [Calls.NUMBER_TYPE]: this.callLog.numberType, + [Calls.BEGIN_TIME]: this.callLog.beginTime, + [Calls.END_TIME]: this.callLog.endTime, + [Calls.ANSWER_STATE]: this.callLog.answerState, + [Calls.CREATE_TIME]: this.callLog.createTime, + [Calls.NUMBER_LOCATION]: this.callLog.numberLocation, + [Calls.PHOTO_ID]: this.callLog.photoId, + [Calls.PHOTO_URI]: this.callLog.photoUri, + [Calls.COUNTRY_ISO_CODE]: this.callLog.countryIsoCode, + }; + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/call/repo/CallLogRepository.ets b/entry/src/main/ets/MainAbility/call/repo/CallLogRepository.ets new file mode 100644 index 0000000..886940e --- /dev/null +++ b/entry/src/main/ets/MainAbility/call/repo/CallLogRepository.ets @@ -0,0 +1,191 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import ICallLogRepository from './ICallLogRepository'; +import CallLog from '../entity/CallLog'; +import CallLogBuilder from '../entity/CallLogBuilder'; +import Calls from '../contract/Calls'; +import CallLogDelta from './CallLogDelta'; +import FeatureAbility from '@ohos.ability.featureAbility'; +import HiLog from '../../util/HiLog'; +import ArrayUtil from '../../util/ArrayUtil'; +import StringUtil from '../../util/StringUtil'; +import DataAbility from '@ohos.data.dataAbility'; + +const TAG = "CallLogRepository"; + +/** + * 账户类型服务类,账户类型持有联系人详情如何展示等账号特征信息 + */ +export default class CallLogRepository implements ICallLogRepository { + private static instance: CallLogRepository; + private _dataAbilityHelper = FeatureAbility.acquireDataAbilityHelper(Calls.CONTENT_URI); + + private constructor() { + } + + public static getInstance(): CallLogRepository { + if (!CallLogRepository.instance) { + CallLogRepository.instance = new CallLogRepository() + } + return CallLogRepository.instance + } + + private getDataAbilityHelper(){ + if (this._dataAbilityHelper == undefined || this._dataAbilityHelper == null || this._dataAbilityHelper.length == 0) { + this._dataAbilityHelper = FeatureAbility.acquireDataAbilityHelper(Calls.CONTENT_URI); + } + return this._dataAbilityHelper; + } + + // 保存单个通话记录,当前无此场景,仅用于测试 + saveOne(callLog: CallLog) { + let dataAbilityHelper = this.getDataAbilityHelper(); + return new Promise(function (resolve, reject) { + if (callLog.id <= 0) { + let callLogDelta = new CallLogDelta(callLog); + dataAbilityHelper.insert(Calls.CALL_LOG_URI, callLogDelta.createValuesBucket()).then(data => { + resolve(data); + }).catch(error => { + HiLog.w(TAG, 'saveOne error:' + error); + reject(); + }); + } + }); + } + + save(callLogs: CallLog[]) { + return false; + } + + clear() { + let dataAbilityHelper = this.getDataAbilityHelper(); + return new Promise(function (resolve, reject) { + let condition = new DataAbility.DataAbilityPredicates(); + dataAbilityHelper.delete(Calls.CALL_LOG_URI, condition).then(data => { + resolve(data); + }).catch(error => { + HiLog.w(TAG, 'clear error:' + error); + reject(); + }); + }); + } + + deleteById(id: number) { + return false; + } + + deleteByIdIn(ids: number[]) { + let dataAbilityHelper = this.getDataAbilityHelper(); + return new Promise(function (resolve, reject) { + if (ArrayUtil.isEmpty(ids)) { + reject(); + return; + } + let condition = new DataAbility.DataAbilityPredicates(); + condition.in(Calls.ID, ids); + dataAbilityHelper.delete(Calls.CALL_LOG_URI, condition).then(data => { + resolve(data); + }).catch(error => { + HiLog.w(TAG, 'deleteByIdIn error:' + error); + reject(); + }); + }); + } + + deleteByNumber(number: string) { + return false; + } + + deleteByLookupUri(number: string) { + return false; + } + + readByNumber(number: string) { + return false; + } + + readById(id: number) { + return false; + } + + findByCallDirectionIn(callTypes: number[]) { + return new Promise(function (resolve, reject) { + resolve([]); + }); + } + + findAll() { + let dataAbilityHelper = this.getDataAbilityHelper(); + return new Promise(function (resolve, reject) { + let condition = new DataAbility.DataAbilityPredicates(); + condition.limitAs(2000); + condition.orderByDesc(Calls.CREATE_TIME); + condition.offsetAs(0); + dataAbilityHelper.query(Calls.CALL_LOG_URI, null, condition).then(resultSet => { + let rst: CallLog[] = []; + resultSet.goToFirstRow(); + do { + let builder = CallLogBuilder.fromResultSet(resultSet); + if (builder.id > 0) { + rst.push(new CallLog(builder)); + } + } while (resultSet.goToNextRow()); + resultSet.close(); + resolve(rst); + }).catch(error => { + HiLog.w(TAG, +'findAll error:' + error); + reject(); + }); + }); + } + + findByFeature(feature: number) { + return []; + } + + findByNumberIn(numbers: number[]) { + let dataAbilityHelper = this.getDataAbilityHelper(); + return new Promise(function (resolve, reject) { + if (ArrayUtil.isEmpty(numbers)) { + reject(); + return; + } + let realPhoneNumbers = []; + for (let key in numbers) { + var phoneNumber = StringUtil.removeSpace(numbers[key].toString()); + realPhoneNumbers.push(phoneNumber); + } + let condition = new DataAbility.DataAbilityPredicates(); + condition.in(Calls.PHONE_NUMBER, realPhoneNumbers); + condition.orderByDesc(Calls.CREATE_TIME); + dataAbilityHelper.query(Calls.CALL_LOG_URI, null, condition).then(resultSet => { + let rst: CallLog[] = []; + resultSet.goToFirstRow(); + do { + let builder = CallLogBuilder.fromResultSet(resultSet); + if (builder.id > 0) { + rst.push(new CallLog(builder)); + } + } while (resultSet.goToNextRow()); + resultSet.close(); + resolve(rst); + }).catch(error => { + HiLog.w(TAG, +'findByNumberIn error:' + error); + reject(); + }); + }); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/call/repo/ICallLogRepository.ets b/entry/src/main/ets/MainAbility/call/repo/ICallLogRepository.ets new file mode 100644 index 0000000..23a0c79 --- /dev/null +++ b/entry/src/main/ets/MainAbility/call/repo/ICallLogRepository.ets @@ -0,0 +1,35 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import CallLog from '../entity/CallLog'; + +/** + * 通话记录仓库操作接口,提供数据库操作方法,屏蔽持久层逻辑 + */ +export default interface ICallLogRepository { + saveOne: (callLog: CallLog) => Promise; + save: (callLogs: CallLog[]) => boolean; + clear: () => Promise; + deleteById: (id: number) => boolean; + deleteByIdIn: (ids: number[]) => Promise; + deleteByNumber: (number: string) => boolean; + deleteByLookupUri: (lookupUri: string) => boolean; + readByNumber: (number: string) => boolean; + readById: (id: number) => boolean; + findAll: () => Promise; + findByCallDirectionIn: (callTypes: number[]) => Promise; + findByFeature: (feature: number) => CallLog[]; + findByNumberIn: (numbers: number[]) => Promise; +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/component/contact/ContactEmptyPage.ets b/entry/src/main/ets/MainAbility/component/contact/ContactEmptyPage.ets new file mode 100644 index 0000000..0feee4c --- /dev/null +++ b/entry/src/main/ets/MainAbility/component/contact/ContactEmptyPage.ets @@ -0,0 +1,109 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import ContactListPresenter from '../../presenter/contact/ContactListPresenter'; +import {ContactClickType} from '../../presenter/contact/ContactListPresenter'; + +const TAG = 'ContactEmptyPage '; + +/** + * 联系人没有查询到的空界面; + */ +@Entry +@Component +export default struct ContactEmptyPage { + presenter: ContactListPresenter; + /** + * 底部四个buttonitem控件抽取 + */ + @Builder BottonItem(title: Resource, type: ContactClickType) { + Button(title) + .width(192) + .height($r("app.float.contact_emptypage_button_item_height")) + .borderRadius($r("app.float.contact_emptypage_button_radius")) + // .backgroundColor($r("app.color.colorControlNormal")) + .backgroundColor("#19000000") + .margin({ bottom: $r("app.float.contact_emptypage_bottom") }) + // .fontColor($r("app.color.colorConnected")) + .fontColor('#00CB87') + .fontWeight(FontWeight.Medium) + // .fontSize($r("sys.float.id_text_size_body1")) + .fontSize($r("app.float.contact_text_size_body1")) + .onClick(() => { + switch (type) { + case ContactClickType.LOGIN_IN: + this.presenter.loginAccount(); + break; + case ContactClickType.IMPORT_CONTACT: + this.presenter.importContact(); + break; + case ContactClickType.CREATE_CONTACT: + this.presenter.createContact(); + break; + case ContactClickType.SCAN_CARD: + this.presenter.scanCard(); + break; + default: + break; + } + }) + } + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start, justifyContent: FlexAlign.Center }) { + Text($r("app.string.contact")) + .fontSize(30) + .fontWeight(FontWeight.Bold) + // .fontColor($r("app.color.textColorPrimary")) + .fontColor('#182431') + .margin({ left: $r("app.float.common_margin"), right: $r("app.float.common_margin") }) + } + .width('100%') + .height($r("app.float.contact_title_height")) + + Flex({ + direction: FlexDirection.Column, + alignItems: ItemAlign.Center, + justifyContent: FlexAlign.Center + }) { + Image($r('app.media.no_contacts_illustration')) + .objectFit(ImageFit.Contain) + .width($r("app.float.contact_emptyview_image_width_height")) + .height($r("app.float.contact_emptyview_image_width_height")) + .margin({ bottom: 8 }) + Text($r("app.string.no_contacts")) + .fontSize($r("app.float.contact_text_size_body2")) + .fontWeight(FontWeight.Regular) + // .fontColor($r("app.color.textColorTertiary")) + .fontColor('#66182431') + .height(19) + .textAlign(TextAlign.Center) + } + .width('100%') + .layoutWeight(1) + + Flex({ + direction: FlexDirection.Column, + justifyContent: FlexAlign.Start, + alignItems: ItemAlign.Center }) { + + this.BottonItem($r("app.string.create_contact"), ContactClickType.CREATE_CONTACT); + } + .width('100%') + .height($r("app.float.contact_empty_list_all_bottom_height")) + } + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/component/contact/ContactListItemView.ets b/entry/src/main/ets/MainAbility/component/contact/ContactListItemView.ets new file mode 100644 index 0000000..078a934 --- /dev/null +++ b/entry/src/main/ets/MainAbility/component/contact/ContactListItemView.ets @@ -0,0 +1,165 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import router from '@system.router'; +import DeleteDialogEx from '../../pages/dialog/DeleteDialogEx'; +import ShareDialogEx from '../../pages/dialog/ShareDialogEx'; +import {ContactVo} from '../../model/bean/ContactVo'; +import Utils from '../../util/Utils'; +import HiLog from '../../util/HiLog'; +import ContactListPresenter from '../../presenter/contact/ContactListPresenter'; +import ContactRepository from '../../contact/repo/ContactRepository'; +import ContactDelta from '../../contact/repo/ContactDelta'; + +const TAG = 'ContactListItemView '; + +/** + * 联系人item组件,主要负责单个联系人的显示; + */ +@Component +export default struct ContactListItemView { + private presenter: ContactListPresenter = ContactListPresenter.getInstance(); + @State item: any = {}; + private index: number; + shareDialogControler: CustomDialogController = new CustomDialogController({ + builder: ShareDialogEx({ + itemList: this.presenter.shareList, + cancel: () => { + this.presenter.onShareDialogCancel(); + }, + title: $r("app.string.dialog_share"), + cancelText: $r("app.string.dialog_cancel") + }), + autoCancel: true, + offset: { dx: 0, dy: -15 }, + alignment: DialogAlignment.Bottom + }); + deleteDialogControler: CustomDialogController= new CustomDialogController({ + builder: DeleteDialogEx({ + cancel: () => { + this.presenter.onDeleteDialogCancel(); + }, + confirm: () => { + this.presenter.onDeleteDialogConfirm(this.item); + }, + title: $r("app.string.delete_dialog_title"), + cancalText: $r("app.string.dialog_cancel"), + confrimText: $r("app.string.dialog_delete") + }), + autoCancel: true, + offset: { dx: 0, dy: -15 }, + alignment: DialogAlignment.Bottom + }); + + onDeleteClick() { + HiLog.i(TAG, 'onDeleteClick'); + this.deleteDialogControler.open(); + } + + onShareClick() { + HiLog.i(TAG, 'onShareClick'); + this.shareDialogControler.open(); + } + + @Builder MenuBuilder() { + Flex({ direction: FlexDirection.Column, + justifyContent: FlexAlign.Center, + alignItems: ItemAlign.Start }) { + + Text(Utils.isEmpty(this.item.showName) ? this.item.phoneNum : this.item.showName) + .textAlign(TextAlign.Start) + .fontSize($r("app.float.contact_text_size_headline8")) + .fontColor('#182431') + .fontWeight(FontWeight.Medium) + .margin({ top: 10, bottom: 10 }) + .width('100%') + .height($r("app.float.contact_listitem_height")) + .visibility(Utils.isEmpty(this.item.showName) ? Visibility.None : Visibility.Visible) + + Text($r("app.string.delete")) + .width('100%') + .height($r("app.float.contact_listitem_index_height")) + .textAlign(TextAlign.Start) + .fontSize($r("app.float.contact_text_size_body1")) + .fontColor('#182431') + .fontWeight(FontWeight.Regular) + .margin({ top: 5 }) + .onClick(() => { + this.presenter.setCurItem(this.item); + ContextMenu.close(); + this.deleteDialogControler.open(); + }) + } + .borderRadius($r("app.float.contact_emptypage_button_radius")) + .width($r("app.float.contact_longpress_dialog_width")) + .padding({ top: 4, bottom: 4 }) + } + + build() { + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { + Row() { + Text(this.item.emptyNameData.substr(this.item.emptyNameData.length - 1, 1)) + .fontSize(30) + .fontWeight(FontWeight.Bold) + .fontColor(Color.White) + .backgroundColor(this.item.portraitColor) + .height($r("app.float.contact_listpage_icon_width_height")) + .width($r("app.float.contact_listpage_icon_width_height")) + .textAlign(TextAlign.Center) + .border({ width: 0, color: Color.White, radius: 40 }) + .visibility((!Utils.isEmpty(this.item.portraitPath) || (Utils.isEmpty(this.item.portraitPath) && Utils.isEmpty(this.item.showName) && Utils.isEmpty(this.item.phoneNum))) ? Visibility.None : Visibility.Visible) + + Image(Utils.isEmpty(this.item.portraitPath) ? $r("app.media.avatar_filled_honor") : this.item.portraitPath) + .width(40) + .height(40) + .objectFit(ImageFit.Contain) + .visibility((!Utils.isEmpty(this.item.portraitPath) || (Utils.isEmpty(this.item.portraitPath) && Utils.isEmpty(this.item.showName) && Utils.isEmpty(this.item.phoneNum))) ? Visibility.Visible : Visibility.None) + } + .margin({ left: $r("app.float.common_margin") }) + + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start, justifyContent: FlexAlign.Center }) { + Text(Utils.isEmpty(this.item.showName) ? this.item.phoneNum : this.item.showName) + // .fontColor($r("app.color.textColorPrimary")) + .fontColor('#182431') + .fontSize($r("app.float.contact_text_size_body1")) + .fontWeight(FontWeight.Medium) + .margin({ left: 12, bottom: 2 }) + + Text((Utils.isEmpty(this.item.company) ? '' : this.item.company + ' ') + (Utils.isEmpty(this.item.position) ? '' : this.item.position)) + // .fontColor($r("app.color.textColorTertiary")) + .fontColor('#66182431') + .fontSize($r("app.float.contact_text_size_body1")) + .fontWeight(FontWeight.Regular) + .visibility((Utils.isEmpty(this.item.company) && Utils.isEmpty(this.item.position)) ? Visibility.None : Visibility.Visible) + .margin({ left: 12 }) + } + } + .height($r("app.float.contact_listitem_height")) + .width('100%') + .backgroundColor(Color.White) + .onClick(() => { + router.push( + { + uri: "pages/contacts/details/ContactDetail", + params: { + contactId: this.item.contactId, + isNewSource: true + } + } + ); + }) + .bindContextMenu(this.MenuBuilder, ResponseType.LongPress) + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/component/contact/ContactSearchPage.ets b/entry/src/main/ets/MainAbility/component/contact/ContactSearchPage.ets new file mode 100644 index 0000000..aef7769 --- /dev/null +++ b/entry/src/main/ets/MainAbility/component/contact/ContactSearchPage.ets @@ -0,0 +1,164 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import ContactListItemView from './ContactListItemView'; +import {ContactVo} from '../../model/bean/ContactVo'; +import HiLog from '../../util/HiLog'; + +/** + * 搜索联系人界面; + */ +@Component +export default struct ContactSearchPage { + @Link private showSearch: boolean; + @Link private isSearched: boolean; + @State private mSerchText: string = ""; + private mContactList: ContactVo[] = [new ContactVo("1", "5", "12345", "公司", "职位", "#FF53804D", false, "", ""), + new ContactVo("2", "5", "12345", "公司", "职位", "#FF53804D", false, "", ""), + new ContactVo("3", "5", "12345", "公司", "职位", "#FF53804D", false, "", ""), + new ContactVo("4", "5", "12345", "公司", "职位", "#FF53804D", false, "", ""), + new ContactVo("5", "5", "12345", "公司", "职位", "#FF53804D", false, "", "")]; + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start, justifyContent: FlexAlign.Start }) { + Guide({ searchText: $mSerchText, showSearch: $showSearch, isSearched: $isSearched }) + if (this.showSearch && this.mSerchText.length > 0) { + if (this.mSerchText.length > 0) { + SearchContactList({ list: this.mContactList }); + } else { + NoContact(); + } + } else { + TranslateBg(); + } + } + .width('100%') + .height('100%') + } +} + +@Component +struct Guide { + @Link private searchText: string; + @Link private showSearch: boolean; + @Link private isSearched: boolean; + + build() { + Flex({ direction: FlexDirection.Row, justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { + Image($r("app.media.ic_public_back")) + .width(24) + .height(24) + .objectFit(ImageFit.Fill) + .margin({ left: 25 }) + .onClick(() => { + this.showSearch = false; + this.isSearched = false; + }) + TextInput({ placeholder: $r("app.string.contact_list_search") }) + .height(40) + .width('75%') + .margin({ left: 20 }) + .type(InputType.Normal) + .placeholderColor(Color.Gray) + .placeholderFont({ size: 18, weight: 2 }) + .enterKeyType(EnterKeyType.Search) + .caretColor(Color.Green) + .borderRadius(20) + .onChange(value => { + this.searchText = value; + if (this.searchText.length > 0) { + this.isSearched = true; + } else { + this.isSearched = false; + } + }) + .onTouch(event => { + if (event.type == TouchType.Down) { + this.showSearch = true; + } + }) + } + .width('100%') + .height(50) + .backgroundColor(Color.White) + .opacity(1) + .margin({ bottom: 5 }) + } +} + +@Component +struct TranslateBg { + build() { + Flex() { + }.width('100%').flexGrow(1).opacity(0.2).backgroundColor(Color.Gray) + } +} + +@Component +struct NoContact { + build() { + Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) { + Image($r("app.media.no_contacts_illustration")) + .width(px2vp(210)) + .height(px2vp(210)) + .objectFit(ImageFit.Contain) + .margin(20) + Text($r("app.string.contact_list_search_empty")) + .fontSize(px2fp(28)) + .fontColor('#999') + .fontWeight(400) + }.width('100%').height('85%') + } +} + +@Component +struct SearchContactList { + private list: ContactVo[]; + + build() { + Flex({ + direction: FlexDirection.Column, + alignItems: ItemAlign.Start, + justifyContent: FlexAlign.Start + }) { + Text($r("app.string.contact_list_search")) + .width('100%') + .height(45) + .fontSize(px2fp(40)) + .fontWeight(500) + .fontColor('#747474') + .padding({ left: 25 }) + + List({ initialIndex: 0, space: 5 }) { + ForEach(this.list, (item, index) => { + ListItem() { + ContactListItemView({ item: item, index: index }) + }.enabled(true) + }, (item: ContactVo) => item.contactId.toString()) + } + .width("90%") + .listDirection(Axis.Vertical) + .edgeEffect(EdgeEffect.Spring) + .onScrollIndex((fristIndex: number, lastIndex: number) => { + }) + .editMode(true) + .onItemDelete((index: number) => { + return true; + }) + } + .width('100%') + .flexGrow(1) + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/component/contact/batchselectcontacts/BatchSelectContactItemView.ets b/entry/src/main/ets/MainAbility/component/contact/batchselectcontacts/BatchSelectContactItemView.ets new file mode 100644 index 0000000..5040bee --- /dev/null +++ b/entry/src/main/ets/MainAbility/component/contact/batchselectcontacts/BatchSelectContactItemView.ets @@ -0,0 +1,128 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import {ContactVo} from '../../../model/bean/ContactVo'; +import Utils from '../../../util/Utils'; + +const TAG = 'BatchSelectRecentItemView '; + +/** + * 选择联系人item组件,主要负责单个联系人的显示; + */ +@Component +export default struct BatchSelectRecentItemView { + @State private item: any = {}; + private onContactItemClicked: Function; + private index: number; + + build() { + Column() { + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { + Row() { + Text(this.item.name.nameSuffix) + .fontSize(30) + .fontWeight(FontWeight.Bold) + .fontColor(Color.White) + .backgroundColor(this.item.portraitColor) + .height($r("app.float.contact_listpage_icon_width_height")) + .width($r("app.float.contact_listpage_icon_width_height")) + .textAlign(TextAlign.Center) + .clip(new Circle({ width: 40, height: 40 })) + .border({ width: 0, color: Color.White, radius: 40 }) + .visibility((!Utils.isEmpty(this.item.portraitPath) || (Utils.isEmpty(this.item.portraitPath) && Utils.isEmpty(this.item.showName) && Utils.isEmpty(this.item.phoneNum))) ? Visibility.None : Visibility.Visible) + + Image(Utils.isEmpty(this.item.portraitPath) ? $r("app.media.avatar_filled_honor") : this.item.portraitPath) + .width($r("app.float.contact_listpage_icon_width_height")) + .height($r("app.float.contact_listpage_icon_width_height")) + .clip(new Circle({ width: 40, height: 40 })) + .objectFit(ImageFit.Contain) + .visibility((!Utils.isEmpty(this.item.portraitPath) || (Utils.isEmpty(this.item.portraitPath) && Utils.isEmpty(this.item.showName) && Utils.isEmpty(this.item.phoneNum))) ? Visibility.Visible : Visibility.None) + } + .width($r("app.float.contact_listpage_icon_width_height")) + .height($r("app.float.contact_listpage_icon_width_height")) + .margin({ left: $r("app.float.common_margin") }) + + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start, justifyContent: FlexAlign.Center }) { + Text(this.item.emptyNameData) + // .fontColor($r("app.color.textColorPrimary")) + .fontColor('#182431') + .fontSize($r("app.float.contact_text_size_body1")) + .fontWeight(FontWeight.Medium) + .margin({ left: 12, bottom: 2 }) + + Text(Utils.isEmpty(this.item.phoneNumbers[0].labelName) ? '' : this.item.phoneNumbers[0].labelName + ' ' + this.item.phoneNumbers[0].phoneNumber) + // .fontColor($r("app.color.textColorTertiary")) + .fontColor('#66182431') + .fontSize($r("app.float.contact_text_size_body1")) + .fontWeight(FontWeight.Regular) + // .visibility((Utils.isEmpty(this.item.company) && Utils.isEmpty(this.item.position)) ? Visibility.None : Visibility.Visible) + .margin({ left: 12 }) + } + .flexGrow(1) + .height($r("app.float.contact_listitem_height")) + + Toggle({ + type: ToggleType.Checkbox, + isOn: (this.item.phoneNumbers[0].checked == undefined) ? false : this.item.phoneNumbers[0].checked + }) + .width($r("app.float.contact_samll_image_width_height")) + .height($r("app.float.contact_samll_image_width_height")) + .enabled(false) + .margin({ left: $r("app.float.common_margin"), right: $r("app.float.common_margin") }) + } + .width('100%') + .height($r("app.float.contact_listitem_height")) + .onClick(() => { + this.onContactItemClicked(this.index, 0); + }) + + ForEach(this.item.phoneNumbers, (item, index) => { + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { + Row() { + } + .width($r("app.float.contact_listpage_icon_width_height")) + .height($r("app.float.contact_listpage_icon_width_height")) + .margin({ left: $r("app.float.common_margin") }) + .visibility(Visibility.Hidden) + + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start, justifyContent: FlexAlign.Center }) { + + Text(Utils.isEmpty(item.labelName) ? '' : item.labelName + ' ' + item.phoneNumber) + // .fontColor($r("app.color.textColorTertiary")) + .fontColor('#66182431') + .fontSize($r("app.float.contact_text_size_body1")) + .fontWeight(FontWeight.Regular) + .margin({ left: 12 }) + } + .flexGrow(1) + .height($r("app.float.contact_listitem_height")) + + Toggle({ type: ToggleType.Checkbox, isOn: (item.checked == undefined) ? false : item.checked }) + .width($r("app.float.contact_samll_image_width_height")) + .height($r("app.float.contact_samll_image_width_height")) + .enabled(false) + .margin({ left: $r("app.float.common_margin"), right: $r("app.float.common_margin") }) + } + .width('100%') + .height($r("app.float.contact_listitem_height")) + .visibility(index == 0 ? Visibility.None : Visibility.Visible) + .onClick(() => { + this.onContactItemClicked(this.index, index); + }) + }, (item, index) => item.toString()) + } + .backgroundColor(Color.White) + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/component/contact/batchselectcontacts/BatchSelectRecentItemView.ets b/entry/src/main/ets/MainAbility/component/contact/batchselectcontacts/BatchSelectRecentItemView.ets new file mode 100644 index 0000000..7501744 --- /dev/null +++ b/entry/src/main/ets/MainAbility/component/contact/batchselectcontacts/BatchSelectRecentItemView.ets @@ -0,0 +1,111 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import BatchSelectContactsPresenter from '../../../presenter/contact/batchselectcontacts/BatchSelectContactsPresenter'; +import {CallBean} from '../../../model/bean/CallBean'; +import Utils from '../../../util/Utils'; +import HiLog from '../../../util/HiLog'; + +const TAG = 'BatchSelectRecentItemView '; + +/** + * 选择联系人item组件,主要负责单个联系人的显示; + */ +@Component +export default struct BatchSelectRecentItemView { + private onRecentItemClicked: Function; + @State private item: any = {}; + private index: number; + + build() { + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { + Row() { + Text(this.item.suffix) + .fontSize(20) + .fontWeight(FontWeight.Bold) + .fontColor(Color.White) + .backgroundColor(this.item.portraitColor) + .height($r("app.float.contact_listpage_icon_width_height")) + .width($r("app.float.contact_listpage_icon_width_height")) + .textAlign(TextAlign.Center) + .clip(new Circle({ width: 40, height: 40 })) + .border({ width: 0, color: Color.White, radius: 40 }) + .visibility(Utils.isEmpty(this.item.suffix) ? Visibility.None : Visibility.Visible) + + Image($r("app.media.avatar_filled_honor")) + .width($r("app.float.contact_listpage_icon_width_height")) + .height($r("app.float.contact_listpage_icon_width_height")) + .backgroundColor(this.item.portraitColor) + .clip(new Circle({ width: 40, height: 40 })) + .border({ width: 0, color: Color.White, radius: 40 }) + .objectFit(ImageFit.Contain) + .visibility(Utils.isEmpty(this.item.suffix) ? Visibility.Visible : Visibility.None) + } + .width($r("app.float.contact_listpage_icon_width_height")) + .height($r("app.float.contact_listpage_icon_width_height")) + .margin({ left: $r("app.float.common_margin") }) + + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start, justifyContent: FlexAlign.Center }) { + Text(Utils.isEmpty(this.item.displayName) ? this.item.phoneNumber : this.item.displayName) + // .fontColor($r("app.color.textColorPrimary")) + .fontColor('#182431') + .fontSize($r("app.float.contact_text_size_body1")) + .fontWeight(FontWeight.Medium) + .margin({ left: 12, bottom: 2 }) + + Row() { + Text(this.item.formattedNumber) + // .fontColor($r("app.color.textColorTertiary")) + .fontColor('#66182431') + .fontSize($r("app.float.contact_text_size_body1")) + .fontWeight(FontWeight.Regular) + .visibility(Utils.isEmpty(this.item.formattedNumber) ? Visibility.None : Visibility.Visible) + .margin({ left: 12 }) + + Text(this.item.numberLocation) + // .fontColor($r("app.color.textColorTertiary")) + .fontColor('#66182431') + .fontSize($r("app.float.contact_text_size_body1")) + .fontWeight(FontWeight.Regular) + .visibility(Utils.isEmpty(this.item.numberLocation) ? Visibility.None : Visibility.Visible) + .margin({ left: 12 }) + + if (Utils.isEmpty(this.item.displayName) && Utils.isEmpty(this.item.numberLocation)) { + Text($r("app.string.unknow_location")) + // .fontColor($r("app.color.textColorTertiary")) + .fontColor('#66182431') + .fontSize($r("app.float.contact_text_size_body1")) + .fontWeight(FontWeight.Regular) + .margin({ left: 12 }) + } + } + } + .flexGrow(1) + .height($r("app.float.contact_listitem_height")) + + Toggle({ type: ToggleType.Checkbox, isOn: this.item.checked }) + .width($r("app.float.contact_samll_image_width_height")) + .height($r("app.float.contact_samll_image_width_height")) + .enabled(false) + .margin({ left: $r("app.float.common_margin"), right: $r("app.float.common_margin") }) + + } + .height($r("app.float.contact_listitem_height")) + .width('100%') + .onClick(() => { + this.onRecentItemClicked(this.index); + }) + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/component/contact/batchselectcontacts/BatchTabGuide.ets b/entry/src/main/ets/MainAbility/component/contact/batchselectcontacts/BatchTabGuide.ets new file mode 100644 index 0000000..92e73f9 --- /dev/null +++ b/entry/src/main/ets/MainAbility/component/contact/batchselectcontacts/BatchTabGuide.ets @@ -0,0 +1,64 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import BatchSelectContactsPresenter from '../../../presenter/contact/batchselectcontacts/BatchSelectContactsPresenter'; +import HiLog from '../../../util/HiLog'; + +const TAG = 'BatchTabGuide '; + +@Component +export default struct BatchTabGuide { + @State presenter: BatchSelectContactsPresenter = BatchSelectContactsPresenter.getInstance(); + @Link currentIndex: number; + private controller: TabsController; + + build() { + Flex({ direction: FlexDirection.Row, + justifyContent: FlexAlign.Center, + alignItems: ItemAlign.Center }) { + + ForEach(this.presenter.tabTextSrc, (item, index) => { + Flex({ direction: FlexDirection.Column, + justifyContent: FlexAlign.End, + alignItems: ItemAlign.Center }) { + Text(item) + .fontSize($r("app.float.contact_text_size_body1")) + .fontColor(this.currentIndex == index ? $r("app.color.colorConnected") : $r("app.color.textColorTertiary")) + .textAlign(TextAlign.Center) + .margin({ bottom: 5 }) + + Divider() + .vertical(false) + .strokeWidth('1vp') + .color($r("app.color.colorConnected")) + .visibility(this.currentIndex == index ? Visibility.Visible : Visibility.Hidden) + } + .width(60) + .height($r("app.float.contact_titleguide_height")) + .margin({ left: 5, right: 5 }) + .onClick(() => { + HiLog.i(TAG, "item clicked currentIndex is " + this.currentIndex + " index is %d", index); + if (this.currentIndex != index) { + this.controller.changeIndex(index); + } + }) + + }, (item, index) => item.toString()) + + } + .width('100%') + .height($r("app.float.contact_titleguide_height")) + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/component/contactdetail/DetailCalllog.ets b/entry/src/main/ets/MainAbility/component/contactdetail/DetailCalllog.ets new file mode 100644 index 0000000..d2cb5c9 --- /dev/null +++ b/entry/src/main/ets/MainAbility/component/contactdetail/DetailCalllog.ets @@ -0,0 +1,163 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import Utils from '../../util/Utils'; +import HiLog from '../../util/HiLog'; +import detailModel from '../../model/contactDetailModel'; +import DialUtil from '../../util/DialUtil'; + +const TAG = "ContactDetail-calllog" + +/** + * 通话记录 + */ +@Component +struct CallLogListItem { + private message: string; + private title: string; + private detailtime: string; + private phonenumber: string; + private talkTime: string; + private imgRes: Resource; + @Link private mDetailModel: any; + + aboutToAppear() { + this.title = JSON.parse(this.message).timeDetail; + this.phonenumber = JSON.parse(this.message).formatNumber; + this.talkTime = JSON.parse(this.message).talkTime; + switch (JSON.parse(this.message).callType) { + case 1: + this.imgRes = $r('app.media.ic_contacts_call_in_mini'); + break; + case 2: + this.imgRes = $r('app.media.ic_contacts_callout_mini'); + break; + case 3: + this.imgRes = $r('app.media.ic_contacts_call_missed_mini'); + break; + case 5: + this.imgRes = $r('app.media.ic_contacts_call_rejected_mini'); + break; + } + } + + build() { + Row() { + Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.Center, alignItems: ItemAlign.Start, }) { + Text(this.title) + .fontWeight(FontWeight.Medium) + .fontSize(16) + .fontColor(JSON.parse(this.message).callType == "3" || + JSON.parse(this.message).callType == "5" ? Color.Red : Color.Black) + .height("22vp") + + Row() { + Image(this.imgRes) + .objectFit(ImageFit.Fill) + .width("12vp") + .height("12vp") + Text(this.phonenumber) + .fontSize(14) + .fontWeight(FontWeight.Regular) + .fontColor('#182431') + .margin({ left: 1 }) + } + .height("19vp") + .opacity(0.4) + .margin({ top: 2 }) + } + + Blank(); + + Row() { + Text($r('app.string.noAnswer')) + .fontWeight(FontWeight.Regular) + .fontSize(14) + .opacity(0.4) + .visibility(JSON.parse(this.message).callType == "3" ? Visibility.Visible : Visibility.None) + + Text(this.talkTime) + .fontWeight(FontWeight.Regular) + .fontSize(14) + .opacity(0.4) + } + .height("19vp") + } + .width('100%') + .height("64vp") + .padding({ top: 5, bottom: 5 }) + .onClick(() => { + DialUtil.getInstance().dial(this.phonenumber, (data, err, value) => { + HiLog.i(TAG, 'dial isEmergencyPhoneNumber : ' + data + ' err : ' + err + ' value : ' + value); + }); + }) + .gesture(LongPressGesture({ fingers: 1, repeat: false, duration: 500 }) + .onAction((event: GestureEvent) => { + })) + } +} +/** + * 通话记录 + */ +@Component +export default struct DetailCalllog { + @Link private mDetailModel: any; + + build() { + Column() { + Column().width('100%').height('8vp').backgroundColor($r('app.color.gray_divider')) + + Row() { + Text($r('app.string.dialer_calllog')) + .fontSize(16) + .opacity(0.6) + .margin({ left: 24 }) + + Blank(); + + Text($r('app.string.clear')) + .fontSize(16) + .fontColor($r('app.color.colorConnected')) + .margin({ right: 24 }) + .onClick(() => { + this.mDetailModel.clearPhoneRecords() + }) + } + .width('100%') + .height('40vp') + + List() { + ForEach(this.mDetailModel.contactForm.numRecords, (item, index) => { + ListItem() { + CallLogListItem({ message: JSON.stringify(item), mDetailModel: $mDetailModel }); + } + + if (index < this.mDetailModel.contactForm.numRecords.length - 1) { + ListItem() { + Divider() + .vertical(false) + .strokeWidth('1vp') + .color(Color.Gray) + .opacity(0.6) + } + } + }, item => item.id.toString()) + }.margin({ left: 24, right: 24 }) + } + .width("100%") + .backgroundColor($r('app.color.white')) + .visibility(Utils.isEmptyList(this.mDetailModel.contactForm.numRecords) ? Visibility.None : Visibility.Visible) + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/component/contactdetail/DetailInfoListItemView.ets b/entry/src/main/ets/MainAbility/component/contactdetail/DetailInfoListItemView.ets new file mode 100644 index 0000000..b902e74 --- /dev/null +++ b/entry/src/main/ets/MainAbility/component/contactdetail/DetailInfoListItemView.ets @@ -0,0 +1,45 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Component +export default struct DetailInfoListItemView { + private title: string; + private content: string | Resource; + private hasRow: boolean; + + build() { + Row() { + Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.Center, alignItems: ItemAlign.Start }) { + Text(this.title) + .fontSize(16) + Text(this.content) + .fontSize(14) + .fontColor($r('app.color.gray')) + } + + Blank(); + + Image($r('app.media.ic_contacts_arrow_up')) + .align(Alignment.Center) + .width("20vp") + .height("20vp") + .visibility(this.hasRow ? Visibility.Visible : Visibility.None) + .opacity(0.2) + } + .width('100%') + .height("60vp") + .padding({ top: 5, bottom: 5 }) + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/component/contactdetail/DetailInfoListView.ets b/entry/src/main/ets/MainAbility/component/contactdetail/DetailInfoListView.ets new file mode 100644 index 0000000..a100981 --- /dev/null +++ b/entry/src/main/ets/MainAbility/component/contactdetail/DetailInfoListView.ets @@ -0,0 +1,779 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import contactDetailModel from '../../model/contactDetailModel'; +import HiLog from '../../util/HiLog'; +import Utils from '../../util/Utils'; +import DetailInfoListItemView from './DetailInfoListItemView'; +import DialUtil from '../../util/DialUtil'; + +const TAG = "ContactDetail-detailInfoList" + +@Component +export default struct DetailInfoListView { + @Link mDetailModel: any; + + build() { + Column() { + // 电话列表 + TelList({ mDetailModel: $mDetailModel }); + + if (!this.mDetailModel.contactForm.isNewNumber) { + // 邮箱列表 + EmailList({ mDetailModel: $mDetailModel }); + + // AIM列表 + AIMList({ mDetailModel: $mDetailModel }); + + // 昵称 + NickName({ mDetailModel: $mDetailModel }); + + // 网站列表 + WebSiteList({ mDetailModel: $mDetailModel }); + + // 住址列表 + HouseList({ mDetailModel: $mDetailModel }); + + // 生日和纪念日 + RemembranceDay({ mDetailModel: $mDetailModel }); + + // 群组 + Group({ mDetailModel: $mDetailModel }); + + // 姓名拼音 + PinyinName({ mDetailModel: $mDetailModel }); + + // 关联人 + Relationships({ mDetailModel: $mDetailModel }); + + // 备注 + Remarks({ mDetailModel: $mDetailModel }); + + // 更多选项 + MoreOptions({ mDetailModel: $mDetailModel }); + } + } + } +} + +/** + * 电话列表 + */ +@Component +struct TelList { + @Link private mDetailModel: any; + + build() { + List() { + ForEach(this.mDetailModel.contactForm.phones, (item) => { + ListItem() { + TelListItem({ message: JSON.stringify(item), mDetailModel: $mDetailModel }); + } + }, item => (item.id).toString()) + } + .visibility(Utils.isEmptyList(this.mDetailModel.contactForm.phones) ? Visibility.None : Visibility.Visible) + .backgroundColor($r('app.color.white')) + } +} + +/** + * 电话item + */ +@Component +struct TelListItem { + private message: string + private title: string + @Link private mDetailModel: any; + + aboutToAppear() { + this.title = this.mDetailModel.newNumberContactDetail.callTag; + } + + build() { + Row() { + Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.Center, alignItems: ItemAlign.Start }) { + Text(JSON.parse(this.message).num) + .fontSize('16fp') + Row() { + Text(JSON.parse(this.message) + .labelName) + .fontSize('14fp') + .fontColor($r('app.color.textColorPrimary')) + .visibility(Utils.isEmpty(JSON.parse(this.message) + .labelName) ? Visibility.None : Visibility.Visible) + Text(" - ") + .fontSize('14fp') + .fontColor($r('app.color.textColorPrimary')) + .visibility(Utils.isEmpty(JSON.parse(this.message) + .labelName) ? Visibility.None : Visibility.Visible) + Text(JSON.parse(this.message).phoneAddress) + .fontSize('14fp') + .fontColor($r('app.color.textColorPrimary')) + } + } + + Blank(); + + Image($r("app.media.ic_public_phone_filled")) + .objectFit(ImageFit.Contain) + .height("24vp") + .width("24vp") + .margin({ right: '24vp' }) + .onClick(() => { + DialUtil.getInstance().dial(Utils.removeSpace(JSON.parse(this.message).num), (data, err, value) => { + HiLog.i(TAG, 'dial isEmergencyPhoneNumber : ' + data + ' err : ' + err + ' value : ' + value); + }); + }) + + Image($r("app.media.ic_public_message_filled")) + .objectFit(ImageFit.Contain) + .height("24vp") + .width("24vp") + .onClick(() => { + this.mDetailModel.sendMessage(JSON.parse(this.message) + .num, this.mDetailModel.showNameLast); + }) + } + .width('100%') + .height("60vp") + .gesture(LongPressGesture({ fingers: 1, repeat: false, duration: 500 }) + .onAction((event: GestureEvent) => { + this.mDetailModel.listItemOnLongPressNumber(JSON.parse(this.message) + .id); + }) + .onActionEnd(() => { + + }) + ) + } +} + +/** + * 邮件列表 + */ +@Component +struct EmailList { + @Link private mDetailModel: any; + + build() { + Column() { + Divider() + .vertical(false) + .strokeWidth('1vp') + .color(Color.Gray) + .opacity(0.6) + List() { + ForEach(this.mDetailModel.contactForm.emails, item => { + ListItem() { + EmailListItem({ message: JSON.stringify(item), mDetailModel: $mDetailModel }); + } + }, item => item.id.toString()) + } + } + .width("100%") + .visibility(Utils.isEmptyList(this.mDetailModel.contactForm.emails) ? Visibility.None : Visibility.Visible) + } +} + +/** + * 邮件item + */ +@Component +struct EmailListItem { + private message: string; + private title: string; + private content: Resource; + @Link private mDetailModel: any; + + aboutToAppear() { + this.title = JSON.parse(this.message).address; + this.content = JSON.parse(this.message).labelName; + } + + build() { + Column() { + DetailInfoListItemView({ title: this.title, content: this.content, hasRow: true }) + } + .onClick(() => { + + }) + .gesture(LongPressGesture({ fingers: 1, repeat: false, duration: 500 }) + .onAction((event: GestureEvent) => { + + }) + .onActionEnd(() => { + + }) + ) + } +} + +/** + * AIM列表 + */ +@Component +struct AIMList { + @Link private mDetailModel: any; + + build() { + Column() { + List() { + ListItem() { + Divider() + .vertical(false) + .strokeWidth('1vp') + .color(Color.Gray) + .opacity(0.6) + } + + ForEach(this.mDetailModel.contactForm.aims, (item, index) => { + ListItem() { + AIMListItem({ message: JSON.stringify(item), mDetailModel: $mDetailModel }); + } + if (index < this.mDetailModel.contactForm.websites.length - 1) { + ListItem() { + Divider() + .vertical(false) + .strokeWidth('1vp') + .color(Color.Gray) + .opacity(0.6) + } + } + }) + } + } + .width("100%") + .visibility(Utils.isEmptyList(this.mDetailModel.contactForm.aims) ? Visibility.None : Visibility.Visible) + } +} + +/** + * AIMlListItem + */ +@Component +struct AIMListItem { + private message: string; + private title: string; + private content: Resource; + @Link private mDetailModel: any; + + aboutToAppear() { + this.title = JSON.parse(this.message).aimId; + this.content = JSON.parse(this.message).aimType; + } + + build() { + Column() { + DetailInfoListItemView({ title: this.title, content: this.content, hasRow: true }) + } + .onClick(() => { + + }) + .gesture(LongPressGesture({ fingers: 1, repeat: false, duration: 500 }) + .onAction((event: GestureEvent) => { + + }) + .onActionEnd(() => { + + }) + ) + } +} + +/** + * 昵称 + */ +@Component +struct NickName { + @Link private mDetailModel: any; + private hasRow:Boolean = false; + + build() { + Column() { + Divider() + .vertical(false) + .strokeWidth('1vp') + .color(Color.Gray) + .opacity(0.6) + Row() { + Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.Center, alignItems: ItemAlign.Start }) { + Text(this.mDetailModel.contactForm.nickname) + .fontSize(16) + Text($r('app.string.nickname')) + .fontSize(14) + .fontColor($r('app.color.gray')) + } + + Blank(); + + Image($r('app.media.ic_contacts_arrow_up')) + .align(Alignment.Center) + .width("20vp") + .height("20vp") + .visibility(this.hasRow ? Visibility.Visible : Visibility.None) + .opacity(0.2) + } + .width('100%') + .height("60vp") + .padding({ top: 5, bottom: 5 }) + } + .visibility(Utils.isEmpty(this.mDetailModel.contactForm.nickname) ? Visibility.None : Visibility.Visible) + .gesture(LongPressGesture({ fingers: 1, repeat: false, duration: 500 }) + .onAction((event: GestureEvent) => { + + }) + .onActionEnd(() => { + + }) + ) + } +} + +/** + * 网站列表 + */ +@Component +struct WebSiteList { + @Link private mDetailModel: any; + + build() { + Column() { + List() { + ListItem() { + Divider() + .vertical(false) + .strokeWidth('1vp') + .color(Color.Gray) + .opacity(0.6) + } + + ForEach(this.mDetailModel.contactForm.websites, (item, index) => { + ListItem() { + WebSiteListItem({ message: item, mDetailModel: $mDetailModel }); + } + + if (index < this.mDetailModel.contactForm.websites.length - 1) { + ListItem() { + Divider() + .vertical(false) + .strokeWidth('1vp') + .color(Color.Gray) + .opacity(0.6) + } + } + }) + } + } + .width("100%") + .visibility(Utils.isEmptyList(this.mDetailModel.contactForm.websites) ? Visibility.None : Visibility.Visible) + } +} + +/** + * 网站item + */ +@Component +struct WebSiteListItem { + private message: string; + private title: string; + @Link private mDetailModel: any; + + build() { + Column() { + DetailInfoListItemView({ title: this.message, content: $r('app.string.website'), hasRow: true }) + } + .onClick(() => { + }) + .gesture(LongPressGesture({ fingers: 1, repeat: false, duration: 500 }) + .onAction((event: GestureEvent) => { + + })) + } +} + +/** + * 地址列表 + */ +@Component +struct HouseList { + @Link private mDetailModel: any; + + build() { + Column() { + List() { + ListItem() { + Divider() + .vertical(false) + .strokeWidth('1vp') + .color(Color.Gray) + .opacity(0.6) + } + + ForEach(this.mDetailModel.contactForm.houses, (item, index) => { + ListItem() { + HouseListItem({ message: JSON.stringify(item), mDetailModel: $mDetailModel }); + } + + if (index < this.mDetailModel.contactForm.websites.length - 1) { + ListItem() { + Divider() + .vertical(false) + .strokeWidth('1vp') + .color(Color.Gray) + .opacity(0.6) + } + } + }) + } + } + .width("100%") + .visibility(Utils.isEmptyList(this.mDetailModel.contactForm.houses) ? Visibility.None : Visibility.Visible) + } +} + +/** + * 住址item + */ +@Component +struct HouseListItem { + private message: string; + private title: string; + private content: Resource; + @Link private mDetailModel: any; + + aboutToAppear() { + this.title = JSON.parse(this.message).houseId; + this.content = JSON.parse(this.message).houseType; + } + + build() { + Column() { + DetailInfoListItemView({ title: this.title, content: this.content, hasRow: true }) + } + .onClick(() => { + + }) + .gesture(LongPressGesture({ fingers: 1, repeat: false, duration: 500 }) + .onAction((event: GestureEvent) => { + + })) + } +} + +/** + * 纪念日 + */ +@Component +struct RemembranceDay { + @Link private mDetailModel: any; + + build() { + Column() { + List() { + ListItem() { + Divider() + .vertical(false) + .strokeWidth('1vp') + .color(Color.Gray) + .opacity(0.6) + } + + ForEach(this.mDetailModel.contactForm.events, (item, index) => { + ListItem() { + RemembranceDayItem({ message: JSON.stringify(item), mDetailModel: $mDetailModel }); + } + + if (index < this.mDetailModel.contactForm.websites.length - 1) { + ListItem() { + Divider() + .vertical(false) + .strokeWidth('1vp') + .color(Color.Gray) + .opacity(0.6) + } + } + }, item => item.id.toString()) + } + } + .width("100%") + .visibility(Utils.isEmptyList(this.mDetailModel.contactForm.events) ? Visibility.None : Visibility.Visible) + } +} + +/** + * 纪念日item + */ +@Component +struct RemembranceDayItem { + private message: string; + private title: string; + private content: Resource; + @Link private mDetailModel: any; + + aboutToAppear() { + this.title = JSON.parse(this.message).data; + this.content = JSON.parse(this.message).eventName; + } + + build() { + Column() { + DetailInfoListItemView({ title: this.title, content: this.content, hasRow: true }) + } + .onClick(() => { + this.mDetailModel.openCalenderApp(JSON.parse(this.message).id); + }) + .gesture(LongPressGesture({ fingers: 1, repeat: false, duration: 500 }) + .onAction((event: GestureEvent) => { + + }) + .onActionEnd(() => { + + }) + ) + } +} + +/** + * 群组 + */ +@Component +struct Group { + @Link private mDetailModel: any; + private hasRow:Boolean = false; + + build() { + Column() { + Divider() + .vertical(false) + .strokeWidth('1vp') + .color(Color.Gray) + .opacity(0.6) + Row() { + Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.Center, alignItems: ItemAlign.Start }) { + Text(this.mDetailModel.contactForm.showGroupsString) + .fontSize(16) + Text($r('app.string.group')) + .fontSize(14) + .fontColor($r('app.color.gray')) + } + + Blank(); + + Image($r('app.media.ic_contacts_arrow_up')) + .align(Alignment.Center) + .width("20vp") + .height("20vp") + .visibility(this.hasRow ? Visibility.Visible : Visibility.None) + .opacity(0.2) + } + .width('100%') + .height("60vp") + .padding({ top: 5, bottom: 5 }) + } + .visibility(Utils.isEmpty(this.mDetailModel.contactForm.showGroupsString) ? Visibility.None : Visibility.Visible) + .gesture(LongPressGesture({ fingers: 1, repeat: false, duration: 500 }) + .onAction((event: GestureEvent) => { + + })) + } +} + +/** + * 姓名拼音 + */ +@Component +struct PinyinName { + @Link private mDetailModel: any; + private hasRow:Boolean = false; + + build() { + Column() { + Divider() + .vertical(false) + .strokeWidth('1vp') + .color(Color.Gray) + .opacity(0.6) + Row() { + Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.Center, alignItems: ItemAlign.Start }) { + Text(this.mDetailModel.contactForm.pinYinName) + .fontSize(16) + Text($r('app.string.name_pinyin')) + .fontSize(14) + .fontColor($r('app.color.gray')) + } + + Blank(); + + Image($r('app.media.ic_contacts_arrow_up')) + .align(Alignment.Center) + .width("20vp") + .height("20vp") + .visibility(this.hasRow ? Visibility.Visible : Visibility.None) + .opacity(0.2) + } + .width('100%') + .height("60vp") + .padding({ top: 5, bottom: 5 }) + } + .visibility(Utils.isEmpty(this.mDetailModel.contactForm.pinYinName) ? Visibility.None : Visibility.Visible) + .gesture(LongPressGesture({ fingers: 1, repeat: false, duration: 500 }) + .onAction((event: GestureEvent) => { + + }) + .onActionEnd(() => { + + }) + ) + } +} + +/** + * 关联人 + */ +@Component +struct Relationships { + @Link private mDetailModel: any; + + build() { + Column() { + List() { + ListItem() { + Divider() + .vertical(false) + .strokeWidth('1vp') + .color(Color.Gray) + .opacity(0.6) + } + + ForEach(this.mDetailModel.contactForm.relationships, item => { + ListItem() { + RelationshipsItem({ message: JSON.stringify(item), mDetailModel: $mDetailModel }); + } + }, item => item.id.toString()) + } + } + .width("100%") + .visibility(Utils.isEmptyList(this.mDetailModel.contactForm.relationships) ? Visibility.None : Visibility.Visible) + } +} + +/** + * 关联人item + */ +@Component +struct RelationshipsItem { + private message: string; + private title: string; + private content: Resource; + @Link private mDetailModel: any; + + aboutToAppear() { + this.title = JSON.parse(this.message).associatedPersonId; + this.content = JSON.parse(this.message).associatedType; + } + + build() { + Column() { + DetailInfoListItemView({ title: this.title, content: this.content, hasRow: true }) + } + .onClick(() => { + + }) + .gesture(LongPressGesture({ fingers: 1, repeat: false, duration: 500 }) + .onAction((event: GestureEvent) => { + + }) + .onActionEnd(() => { + + }) + ) + } +} + +/** + * 备注 + */ +@Component +struct Remarks { + @Link private mDetailModel: any; + private hasRow:Boolean = false; + + build() { + Column() { + Divider() + .vertical(false) + .strokeWidth('1vp') + .color(Color.Gray) + .opacity(0.6) + Row() { + Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.Center, alignItems: ItemAlign.Start }) { + Text(this.mDetailModel.contactForm.remarks) + .fontSize(16) + Text($r('app.string.remarks')) + .fontSize(14) + .fontColor($r('app.color.gray')) + } + + Blank(); + + Image($r('app.media.ic_contacts_arrow_up')) + .align(Alignment.Center) + .width("20vp") + .height("20vp") + .visibility(this.hasRow ? Visibility.Visible : Visibility.None) + .opacity(0.2) + } + .width('100%') + .height("60vp") + .padding({ top: 5, bottom: 5 }) + } + .visibility(Utils.isEmpty(this.mDetailModel.contactForm.remarks) ? Visibility.None : Visibility.Visible) + .gesture(LongPressGesture({ fingers: 1, repeat: false, duration: 500 }) + .onAction((event: GestureEvent) => { + + }) + .onActionEnd(() => { + + }) + ) + } +} + +/** + * 更多选项 + */ +@Component +struct MoreOptions { + @Link private mDetailModel: any; + + build() { + Row() { + Text($r('app.string.more')) + .fontSize(15) + .margin({ right: 5 }) + .fontColor($r('app.color.font_color_more')) + + Image($r('app.media.ic_contacts_details_arrow_down')) + .objectFit(ImageFit.Contain) + .height(16) + .width(16) + } + .height('40vp') + .visibility(this.mDetailModel.contactForm.showMoreButton ? Visibility.Visible : Visibility.None) + .onClick(() => { + this.mDetailModel.getMore(); + }) + } +} diff --git a/entry/src/main/ets/MainAbility/component/dialer/CallLogTabs.ets b/entry/src/main/ets/MainAbility/component/dialer/CallLogTabs.ets new file mode 100644 index 0000000..34a75f6 --- /dev/null +++ b/entry/src/main/ets/MainAbility/component/dialer/CallLogTabs.ets @@ -0,0 +1,74 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Component +export struct CallLogTabs { + private controller: TabsController + @Link bottomTabIndex: number + + build() { + Flex({ + direction: FlexDirection.Row, + alignItems: ItemAlign.Center, + justifyContent: FlexAlign.Center + }) { + Column() { + Text($r("app.string.all_call_logs")) + .fontSize('16vp') + .lineHeight('22vp') + .fontColor(this.bottomTabIndex == 0 ? '#00CB87' : '#99182431') + .margin({ top: 17, bottom: 6 }) + + Row() + .width('64vp') + .height('2vp') + .backgroundColor('#00CB87') + .visibility(this.bottomTabIndex == 0 ? Visibility.Visible : Visibility.None) + } + .width('84vp') + .height('56vp') + .margin({ right: 50 }) + .onClick(() => { + if (this.bottomTabIndex != 0) { + this.controller.changeIndex(0) + } + }) + + Column() { + Text($r("app.string.missed_call")) + .fontSize('16vp') + .lineHeight('22vp') + .fontColor(this.bottomTabIndex == 1 ? '#00CB87' : '#99182431') + .margin({ top: 17, bottom: 6 }) + + Row() + .width('64vp') + .height('2vp') + .backgroundColor('#00CB87') + .visibility(this.bottomTabIndex == 1 ? Visibility.Visible : Visibility.None) + } + .width('84vp') + .height('56vp') + .onClick(() => { + if (this.bottomTabIndex != 1) { + this.controller.changeIndex(1) + } + }) + } + .width('100%') + .height('56vp') + .zIndex(3) + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/contract/Aim.ets b/entry/src/main/ets/MainAbility/contact/contract/Aim.ets new file mode 100644 index 0000000..e07b837 --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/contract/Aim.ets @@ -0,0 +1,58 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * 电话数据类型-即时消息 + */ +export default class Aim { + static readonly CONTENT_ITEM_TYPE: string = "vnd.android.cursor.item/aim_v2"; + static readonly TYPE_AIM: number = 1; + static readonly TYPE_WINDOWSLIVE: number = 2; + static readonly TYPE_YAHOO: number = 3; + static readonly TYPE_SKYPE: number = 4; + static readonly TYPE_QQ: number= 5; + static readonly TYPE_HANGOUTS: number = 6; + static readonly TYPE_ICQ: number = 7; + static readonly TYPE_JABBER: number = 8 + static readonly TYPE_CUSTOM: number = 0; + + static getTypeLabelResource(type: number) { + switch (type) { + case Aim.TYPE_AIM: + return $r("app.string.instant_type_aim"); + case Aim.TYPE_WINDOWSLIVE: + return $r("app.string.instant_type_windowslive"); + case Aim.TYPE_YAHOO: + return $r("app.string.instant_type_yahoo"); + case Aim.TYPE_SKYPE: + return $r("app.string.instant_type_skype"); + case Aim.TYPE_QQ: + return $r("app.string.instant_type_qq"); + case Aim.TYPE_HANGOUTS: + return $r("app.string.instant_type_hangouts"); + case Aim.TYPE_ICQ: + return $r("app.string.instant_type_icq"); + case Aim.TYPE_JABBER: + return $r("app.string.instant_type_jabber"); + case Aim.TYPE_CUSTOM: + return $r("app.string.instant_type_custom"); + default: + return $r("app.string.instant_type_custom"); + } + } + + constructor() { + } +} \ No newline at end of file diff --git a/entry/src/ohosTest/js/default/pages/index/index.css b/entry/src/main/ets/MainAbility/contact/contract/BaseColumns.ets similarity index 76% rename from entry/src/ohosTest/js/default/pages/index/index.css rename to entry/src/main/ets/MainAbility/contact/contract/BaseColumns.ets index 0c6714f..adbacf9 100644 --- a/entry/src/ohosTest/js/default/pages/index/index.css +++ b/entry/src/main/ets/MainAbility/contact/contract/BaseColumns.ets @@ -1,5 +1,5 @@ /** - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -12,12 +12,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -.container { - flex-direction: column; - justify-content: center; - align-items: center; -} -.title { - font-size: 100px; -} +/** + * 表基本字段常量 + */ +export default class BaseColumns { + static readonly ID: string = "id"; +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/contract/Birthday.ets b/entry/src/main/ets/MainAbility/contact/contract/Birthday.ets new file mode 100644 index 0000000..2154072 --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/contract/Birthday.ets @@ -0,0 +1,44 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * 电话数据类型-生日 + */ +export default class Birthday { + static readonly CONTENT_ITEM_TYPE: string = "vnd.android.cursor.item/birthday_v2"; + static readonly TYPE_GREBIRTHDAY: number = 1; + static readonly TYPE_LUNARBIRTHDAY: number = 2; + static readonly TYPE_ANNIVERSARIES: number = 3; + static readonly TYPE_OTHER: number = 0; + + + static getTypeLabelResource(type: number) { + switch (type) { + case Birthday.TYPE_GREBIRTHDAY: + return $r("app.string.birthday_type_grebirthday"); + case Birthday.TYPE_LUNARBIRTHDAY: + return $r("app.string.birthday_type_lunarbirthday"); + case Birthday.TYPE_ANNIVERSARIES: + return $r("app.string.birthday_type_anniversaries"); + case Birthday.TYPE_OTHER: + return $r("app.string.birthday_type_other"); + default: + return $r("app.string.birthday_type_other"); + } + } + + constructor() { + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/contract/Contacts.ets b/entry/src/main/ets/MainAbility/contact/contract/Contacts.ets new file mode 100644 index 0000000..cadeafb --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/contract/Contacts.ets @@ -0,0 +1,28 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import ContactsColumns from './ContactsColumns.ets'; + +/** + * rawContact数据类型 + */ +export default class Contacts extends ContactsColumns{ + static readonly CONTENT_URI: string = "dataability:///com.ohos.contactsdataability"; + static readonly CONTACT_URI: string = Contacts.CONTENT_URI + "/contacts/contact"; + + constructor() { + super(); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/contract/ContactsColumns.ets b/entry/src/main/ets/MainAbility/contact/contract/ContactsColumns.ets new file mode 100644 index 0000000..de1ff83 --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/contract/ContactsColumns.ets @@ -0,0 +1,49 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import BaseColumns from './BaseColumns.ets'; + +/** + * 联系人contact表字段常量 + */ +export default class ContactsColumns extends BaseColumns { + static readonly NAME_RAW_CONTACT_ID: string = "name_raw_contact_id"; + + static readonly PHOTO_ID: string = "photo_id"; + + static readonly PHOTO_FILE_ID: string = "photo_file_id"; + + static readonly PERSONAL_RINGTONE: string = "personal_ringtone"; + + static readonly IS_TRANSFER_VOICEMAIL: string = "is_transfer_voicemail"; + + static readonly COMPANY: string = "company"; + + static readonly POSITION: string = "position"; + + static readonly QUICK_SEARCH_KEY: string = "quick_search_key"; + + static readonly READ_ONLY: string = "read_only"; + + static readonly PERSONAL_NOTIFICATION_RINGTONE: string = "personal_notification_ringtone"; + + static readonly HAS_PHONE_NUMBER: string = "has_phone_number"; + + static readonly HAS_DISPLAY_NAME: string = "has_display_name"; + + static readonly HAS_EMAIL: string = "has_email"; + + static readonly HAS_GROUP: string = "has_group"; +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/contract/Data.ets b/entry/src/main/ets/MainAbility/contact/contract/Data.ets new file mode 100644 index 0000000..1fb5e50 --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/contract/Data.ets @@ -0,0 +1,27 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import DataColumns from './DataColumns'; +import Contacts from './Contacts'; + +/** + * rawContact数据类型 + */ +export default class Data extends DataColumns { + static readonly CONTENT_URI: string = Contacts.CONTENT_URI + "/contacts/contact_data"; + + constructor() { + super(); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/contract/DataColumns.ets b/entry/src/main/ets/MainAbility/contact/contract/DataColumns.ets new file mode 100644 index 0000000..c742cfd --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/contract/DataColumns.ets @@ -0,0 +1,58 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import BaseColumns from './BaseColumns.ets'; + +/** + * 联系人data表字段常量 + */ +export default class DataColumns extends BaseColumns { + static readonly TYPE_ID: string = "type_id"; + static readonly RAW_CONTACT_ID: string = "raw_contact_id"; + static readonly READ_ONLY: string = "read_only"; + static readonly VERSION: string = "version"; + static readonly IS_PREFERRED_NUMBER: string = "is_preferred_number"; + static readonly DETAIL_INFO: string = "detail_info"; + static readonly FAMILY_NAME: string = "family_name"; + static readonly MIDDLE_NAME_PHONETIC: string = "middle_name_phonetic"; + static readonly GIVEN_NAME: string = "given_name"; + static readonly GIVEN_NAME_PHONETIC: string = "given_name_phonetic"; + static readonly ALIAS_DETAIL_INTO: string = "alias_detail_info"; + static readonly PHONETIC_NAME: string = "phonetic_name"; + static readonly POSITION: string = "position"; + static readonly EXTEND1: string = "extend1"; + static readonly EXTEND2: string = "extend2"; + static readonly EXTEND3: string = "extend3"; + static readonly EXTEND4: string = "extend4"; + static readonly CITY: string = "city"; + static readonly COUNTRY: string = "country"; + static readonly NEIGHBORHOOD: string = "neighborhood"; + static readonly POBOX: string = "pobox"; + static readonly POSTCODE: string = "postcode"; + static readonly REGION: string = "region"; + static readonly STREET: string = "street"; + static readonly ALPHA_NAME: string = "alpha_name"; + static readonly OTHER_LAN_LAST_NAME: string = "other_lan_last_name"; + static readonly OTHER_LAN_FIRST_NAME: string = "other_lan_first_name"; + static readonly EXTEND5: string = "extend5"; + static readonly LAN_STYLE: string = "lan_style"; + static readonly CUSTOM_DATA: string = "custom_data"; + static readonly EXTEND6: string = "extend6"; + static readonly EXTEND7: string = "extend7"; + static readonly BLOB_DATA: string = "blob_data"; + static readonly SYN_1: string = "syn_1"; + static readonly SYN_2: string = "syn_2"; + static readonly SYN_3: string = "syn_3"; +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/contract/DataType.ets b/entry/src/main/ets/MainAbility/contact/contract/DataType.ets new file mode 100644 index 0000000..64b94ab --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/contract/DataType.ets @@ -0,0 +1,49 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import DataColumns from './DataColumns'; + +export enum DataItemType { + EMAIL = 1, + IM = 2, + NICKNAME = 3, + ORGANIZATION = 4, + PHONE = 5, + NAME = 6, + STRUCTURED_POSTAL = 7, + PHOTO = 8, + GROUP_MEMBERSHIP = 9, + NOTE = 10, + EVENT = 11, + WEBSITE = 12, + RELATION = 13, + CONTACT_MISC = 14, + HI_CALL_DEVICE = 15, + CAM_CARD = 16, + SIP_ADDRESS = 17 +} + +/** + * 基本数据类型 + */ +export default class DataType { + static readonly TYPE_CUSTOM: number = 0; + static readonly TYPE_INVALID: number = -1; + static readonly DATA: string = DataColumns.DETAIL_INFO; + static readonly LABEL_ID: string = DataColumns.EXTEND7; + static readonly LABEL_NAME: string = DataColumns.CUSTOM_DATA; + + static getCont +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/contract/Email.ets b/entry/src/main/ets/MainAbility/contact/contract/Email.ets new file mode 100644 index 0000000..11e0391 --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/contract/Email.ets @@ -0,0 +1,44 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import DataColumns from './DataColumns'; +import DataType from './DataType'; +import {DataItemType} from './DataType'; + +/** + * 邮箱数据类型 + */ +export default class Email extends DataType{ + static readonly CONTENT_ITEM_TYPE: string = "email"; + static readonly CONTENT_ITEM_TYPE_ID: number = DataItemType.EMAIL; + static readonly ADDRESS: string = DataType.DATA; + static readonly DISPLAY_NAME: string = DataColumns.ALIAS_DETAIL_INTO; + static readonly TYPE_HOME: number = 1; + static readonly TYPE_WORK: number = 2; + static readonly TYPE_OTHER: number = 3; + + static getTypeLabelResource(type: number) { + switch (type) { + case Email.TYPE_HOME: return $r("app.string.email_type_home"); + case Email.TYPE_WORK: return $r("app.string.email_type_work"); + case Email.TYPE_OTHER: return $r("app.string.email_type_other"); + default: return $r("app.string.email_type_custom"); + } + } + + constructor() { + super(); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/contract/Event.ets b/entry/src/main/ets/MainAbility/contact/contract/Event.ets new file mode 100644 index 0000000..543a524 --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/contract/Event.ets @@ -0,0 +1,44 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import DataColumns from './DataColumns'; +import DataType from './DataType'; +import {DataItemType} from './DataType'; + +/** + * 重要节日数据类型 + */ +export default class Event extends DataType { + static readonly CONTENT_ITEM_TYPE: string = "contact_event"; + static readonly CONTENT_ITEM_TYPE_ID: number = DataItemType.EVENT; + static readonly START_DATE: string = DataType.DATA; + static readonly TYPE_ANNIVERSARY: number = 1; + static readonly TYPE_OTHER: number = 2; + static readonly TYPE_BIRTHDAY: number = 3; + static readonly TYPE_LUNARBIRTHDAY: number = 4; + + static getTypeLabelResource(type: number) { + switch (type) { + case Event.TYPE_ANNIVERSARY: return $r("app.string.phone_type_home"); + case Event.TYPE_BIRTHDAY: return $r("app.string.phone_type_mobile"); + case Event.TYPE_OTHER: return $r("app.string.phone_type_work"); + default: return $r("app.string.phone_type_custom"); + } + } + + constructor() { + super(); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/contract/House.ets b/entry/src/main/ets/MainAbility/contact/contract/House.ets new file mode 100644 index 0000000..2fd9497 --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/contract/House.ets @@ -0,0 +1,43 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * 电话数据类型-地址 + */ +export default class House { + static readonly CONTENT_ITEM_TYPE: string = "vnd.android.cursor.item/house_v2"; + static readonly TYPE_DWELLING: number = 1; + static readonly TYPE_POSITION: number = 2; + static readonly TYPE_OTHER: number = 3; + static readonly TYPE_CUSTOM: number = 0; + + static getTypeLabelResource(type: number) { + switch (type) { + case House.TYPE_DWELLING: + return $r("app.string.house_type_dwelling"); + case House.TYPE_POSITION: + return $r("app.string.house_type_position"); + case House.TYPE_OTHER: + return $r("app.string.house_type_other"); + case House.TYPE_CUSTOM: + return $r("app.string.house_type_custom"); + default: + return $r("app.string.house_type_custom"); + } + } + + constructor() { + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/contract/Im.ets b/entry/src/main/ets/MainAbility/contact/contract/Im.ets new file mode 100644 index 0000000..ab48345 --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/contract/Im.ets @@ -0,0 +1,51 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import DataColumns from './DataColumns'; +import DataType from './DataType'; +import {DataItemType} from './DataType'; + +/** + * 即时通讯数据类型 + */ +export default class Im extends DataType{ + static readonly CONTENT_ITEM_TYPE: string = "im"; + static readonly CONTENT_ITEM_TYPE_ID: number = DataItemType.IM; + static readonly PROTOCOL: string = DataType.DATA; + + static readonly TYPE_CUSTOM: number = -1; + static readonly TYPE_AIM: number = 0; + static readonly TYPE_MSN: number = 1; + static readonly TYPE_YAHOO: number = 2; + static readonly TYPE_SKYPE: number = 3; + static readonly TYPE_QQ: number = 4; + static readonly TYPE_GOOGLE_TALK: number = 5; + static readonly TYPE_ICQ: number = 6; + static readonly TYPE_JABBER: number = 7; + static readonly TYPE_INVALID: number = -2; + + static getTypeLabelResource(type: number) { + switch (type) { + case Im.TYPE_CUSTOM: return $r("app.string.email_type_home"); + case Im.TYPE_AIM: return $r("app.string.email_type_work"); + case Im.TYPE_MSN: return $r("app.string.email_type_other"); + default: return $r("app.string.email_type_custom"); + } + } + + constructor() { + super(); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/contract/Nickname.ets b/entry/src/main/ets/MainAbility/contact/contract/Nickname.ets new file mode 100644 index 0000000..fabb6c1 --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/contract/Nickname.ets @@ -0,0 +1,31 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import DataColumns from './DataColumns'; +import DataType from './DataType'; +import {DataItemType} from './DataType'; + +/** + * 昵称数据类型 + */ +export default class Nickname extends DataType { + static readonly CONTENT_ITEM_TYPE: string = "nickname"; + static readonly CONTENT_ITEM_TYPE_ID: number = DataItemType.NICKNAME; + static readonly NAME: string = DataType.DATA; + + constructor() { + super(); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/contract/Note.ets b/entry/src/main/ets/MainAbility/contact/contract/Note.ets new file mode 100644 index 0000000..b4ffbef --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/contract/Note.ets @@ -0,0 +1,31 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import DataColumns from './DataColumns'; +import DataType from './DataType'; +import {DataItemType} from './DataType'; + +/** + * 备注数据类型 + */ +export default class Nickname extends DataType { + static readonly CONTENT_ITEM_TYPE: string = "note"; + static readonly CONTENT_ITEM_TYPE_ID: number = DataItemType.NOTE; + static readonly NOTE: string = DataType.DATA; + + constructor() { + super(); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/contract/Organization.ets b/entry/src/main/ets/MainAbility/contact/contract/Organization.ets new file mode 100644 index 0000000..845d54d --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/contract/Organization.ets @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import DataColumns from './DataColumns'; +import DataType from './DataType'; +import {DataItemType} from './DataType'; + +/** + * 组织数据类型 + */ +export default class Organization extends DataType{ + static readonly CONTENT_ITEM_TYPE: string = "organization"; + static readonly CONTENT_ITEM_TYPE_ID: number = DataItemType.ORGANIZATION; + static readonly COMPANY: string = DataType.DATA; + static readonly TITLE: string = DataColumns.POSITION; + + constructor() { + super(); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/contract/Phone.ets b/entry/src/main/ets/MainAbility/contact/contract/Phone.ets new file mode 100644 index 0000000..ff74449 --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/contract/Phone.ets @@ -0,0 +1,53 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import DataColumns from './DataColumns'; +import DataType from './DataType'; +import {DataItemType} from './DataType'; + +/** + * 电话数据类型 + */ +export default class Phone extends DataType { + static readonly CONTENT_ITEM_TYPE: string = "phone"; + static readonly CONTENT_ITEM_TYPE_ID: number = DataItemType.PHONE; + static readonly NUMBER: string = DataType.DATA; + static readonly TYPE_HOME: number = 1; + static readonly TYPE_MOBILE: number = 2; + static readonly TYPE_WORK: number = 3; + static readonly TYPE_FAX_WORK: number = 4; + static readonly TYPE_FAX_HOME: number = 5; + static readonly TYPE_PAGER: number = 6; + static readonly TYPE_OTHER: number = 7; + static readonly TYPE_MAIN: number = 12; + + static getTypeLabelResource(type: number) { + switch (type) { + case Phone.TYPE_HOME: return $r("app.string.phone_type_home"); + case Phone.TYPE_MOBILE: return $r("app.string.phone_type_mobile"); + case Phone.TYPE_WORK: return $r("app.string.phone_type_work"); + case Phone.TYPE_FAX_WORK: return $r("app.string.phone_type_fax_work"); + case Phone.TYPE_FAX_HOME: return $r("app.string.phone_type_fax_home"); + case Phone.TYPE_PAGER: return $r("app.string.phone_type_pager"); + case Phone.TYPE_OTHER: return $r("app.string.phone_type_other"); + case Phone.TYPE_MAIN: return $r("app.string.phone_type_main"); + default: return $r("app.string.phone_type_custom"); + } + } + + constructor() { + super(); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/contract/RawContacts.ets b/entry/src/main/ets/MainAbility/contact/contract/RawContacts.ets new file mode 100644 index 0000000..652e0fa --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/contract/RawContacts.ets @@ -0,0 +1,28 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import BaseColumns from './BaseColumns.ets'; +import RawContactsColumns from './RawContactsColumns.ets'; + +/** + * rawContact数据类型 + */ +export default class RawContacts extends RawContactsColumns{ + static readonly CONTENT_URI: string = "dataability:///com.ohos.contactsdataability/contacts/raw_contact"; + + constructor() { + super() + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/contract/RawContactsColumns.ets b/entry/src/main/ets/MainAbility/contact/contract/RawContactsColumns.ets new file mode 100644 index 0000000..1abef92 --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/contract/RawContactsColumns.ets @@ -0,0 +1,83 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import BaseColumns from './BaseColumns.ets'; + +/** + * 联系人rawcontact表字段常量 + */ +export default class RawContactsColumns extends BaseColumns { + static readonly CONTACT_ID: string = "contact_id"; + + static readonly PHOTO_ID: string = "photo_id"; + + static readonly PHOTO_FILE_ID: string = "photo_file_id"; + + static readonly IS_TRANSFER_VOICEMAIL: string = "is_transfer_voicemail"; + + static readonly PERSONAL_RINGTONE: string = "personal_ringtone"; + + static readonly IS_DELETED: string = "is_deleted"; + + static readonly PERSONAL_NOTIFICATION_RINGTONE: string = "personal_notification_ringtone"; + + static readonly PHOTO_FIRST_NAME: string = "photo_first_name"; + + static readonly ACCOUNT_ID: string = "account_id"; + + static readonly VERSION: string = "version"; + + static readonly DISPLAY_NAME: string = "display_name"; + + static readonly SORT: string = "sort"; + + static readonly CONTACTED_COUNT: string = "contacted_count"; + + static readonly LASTEST_CONTACTED_TIME: string = "lastest_contacted_time"; + + static readonly FAVORITE: string = "favorite"; + + static readonly FAVORITE_ORDER: string = "favorite_order"; + + static readonly PHONETIC_NAME: string = "phonetic_name"; + + static readonly PHONETIC_NAME_TYPE: string = "phonetic_name_type"; + + static readonly COMPANY: string = "company"; + + static readonly POSITION: string = "position"; + + static readonly READ_ONLY: string = "read_only"; + + static readonly SORT_FIRST_LETTER: string = "sort_first_letter"; + + static readonly MERGE_MODE: string = "merge_mode"; + + static readonly IS_NEED_MERGE: string = "is_need_merge"; + + static readonly MERGE_STATUS: string = "merge_status"; + + static readonly IS_MERGE_TARGET: string = "is_merge_target"; + + static readonly VIBRATION_SETTING: string = "vibration_setting"; + + static readonly SYNC_ID: string = "sync_id"; + + static readonly SYNC_1: string = "syn_1"; + + static readonly SYNC_2: string = "syn_2"; + + static readonly SYNC_3: string = "syn_3"; +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/contract/RawContactsEntity.ets b/entry/src/main/ets/MainAbility/contact/contract/RawContactsEntity.ets new file mode 100644 index 0000000..266a2fa --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/contract/RawContactsEntity.ets @@ -0,0 +1,27 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import BaseColumns from './BaseColumns.ets'; + +/** + * rawContact数据类型 + */ +export default class RawContactsEntity { + static readonly _ID: string = BaseColumns.ID; + static readonly CONTENT_URI: string = "dataability:///com.ohos.contactsdataability/raw_contact_entities"; + + constructor() { + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/contract/Relation.ets b/entry/src/main/ets/MainAbility/contact/contract/Relation.ets new file mode 100644 index 0000000..1d11ae6 --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/contract/Relation.ets @@ -0,0 +1,81 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import DataType from './DataType'; +import {DataItemType} from './DataType'; + +/** + * 电话数据类型-关系人 + */ +export default class Relation extends DataType{ + static readonly CONTENT_ITEM_TYPE: string = "relation"; + static readonly CONTENT_ITEM_TYPE_ID: number = DataItemType.RELATION; + static readonly NAME: string = DataType.DATA; + static readonly TYPE_ASSISTANT: number = 1; + static readonly TYPE_BROTHER: number = 2; + static readonly TYPE_CHILD: number = 3; + static readonly TYPE_PARTNER: number = 4; + static readonly TYPE_FATHER: number= 5; + static readonly TYPE_FRIEND: number = 6; + static readonly TYPE_MANAGER: number = 7; + static readonly TYPE_MOTHER: number = 8 + static readonly TYPE_PARENTS: number = 9; + static readonly TYPE_DOMESTIC_PARTNER: number = 10; + static readonly TYPE_REFERRED_BY: number = 11; + static readonly TYPE_RELATIVE: number = 12; + static readonly TYPE_SISTERS: number = 13; + static readonly TYPE_SPOUSES: number = 14; + + static getTypeLabelResource(type: number) { + switch (type) { + case Relation.TYPE_CHILD: + return $r("app.string.relationship_type_children"); + case Relation.TYPE_DOMESTIC_PARTNER: + return $r("app.string.relationship_type_partner"); + case Relation.TYPE_ASSISTANT: + return $r("app.string.relationship_type_assistant"); + case Relation.TYPE_BROTHER: + return $r("app.string.relationship_type_brother"); + case Relation.TYPE_PARTNER: + return $r("app.string.relationship_type_mates"); + case Relation.TYPE_FATHER: + return $r("app.string.relationship_type_father"); + case Relation.TYPE_FRIEND: + return $r("app.string.relationship_type_friend"); + case Relation.TYPE_MANAGER: + return $r("app.string.relationship_type_bosses"); + case Relation.TYPE_MOTHER: + return $r("app.string.relationship_type_mother"); + case Relation.TYPE_PARENTS: + return $r("app.string.relationship_type_parents"); + case Relation.TYPE_REFERRED_BY: + return $r("app.string.relationship_type_introducer"); + case Relation.TYPE_RELATIVE: + return $r("app.string.relationship_type_kinship"); + case Relation.TYPE_SISTERS: + return $r("app.string.relationship_type_sisters"); + case Relation.TYPE_SPOUSES: + return $r("app.string.relationship_type_spouses"); + case Relation.TYPE_CUSTOM: + return $r("app.string.relationship_type_custom"); + default: + return $r("app.string.relationship_type_custom"); + } + } + + constructor() { + super(); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/contract/StructuredPostal.ets b/entry/src/main/ets/MainAbility/contact/contract/StructuredPostal.ets new file mode 100644 index 0000000..0a4f84f --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/contract/StructuredPostal.ets @@ -0,0 +1,50 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import DataColumns from './DataColumns'; +import DataType from './DataType'; +import {DataItemType} from './DataType'; + +/** + * 地址数据类型 + */ +export default class StructuredPostal extends DataType{ + static readonly CONTENT_ITEM_TYPE: string = "postal_address"; + static readonly CONTENT_ITEM_TYPE_ID: number = DataItemType.STRUCTURED_POSTAL; + static readonly FORMATTED_ADDRESS: string = DataType.DATA; + static readonly STREET: string = DataColumns.STREET; + static readonly POBOX: string = DataColumns.POBOX; + static readonly NEIGHBORHOOD: string = DataColumns.NEIGHBORHOOD; + static readonly CITY: string = DataColumns.CITY; + static readonly REGION: string = DataColumns.REGION; + static readonly POSTCODE: string = DataColumns.POSTCODE; + static readonly COUNTRY: string = DataColumns.COUNTRY; + static readonly TYPE_HOME: number = 1; + static readonly TYPE_WORK: number = 2; + static readonly TYPE_OTHER: number = 3; + + static getTypeLabelResource(type: number) { + switch (type) { + case StructuredPostal.TYPE_HOME: return $r("app.string.email_type_home"); + case StructuredPostal.TYPE_WORK: return $r("app.string.email_type_work"); + case StructuredPostal.TYPE_OTHER: return $r("app.string.email_type_other"); + default: return $r("app.string.email_type_custom"); + } + } + + constructor() { + super(); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/contract/Website.ets b/entry/src/main/ets/MainAbility/contact/contract/Website.ets new file mode 100644 index 0000000..63c19e1 --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/contract/Website.ets @@ -0,0 +1,30 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import DataType from './DataType'; +import {DataItemType} from './DataType'; + +/** + * 网站数据类型 + */ +export default class Website extends DataType{ + static readonly CONTENT_ITEM_TYPE: string = "website"; + static readonly CONTENT_ITEM_TYPE_ID: number = DataItemType.WEBSITE; + static readonly URL: string = DataType.DATA; + + constructor() { + super(); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/entity/Contact.ets b/entry/src/main/ets/MainAbility/contact/entity/Contact.ets new file mode 100644 index 0000000..310bcb5 --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/entity/Contact.ets @@ -0,0 +1,117 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import AccountType from '../../account/type/AccountType'; +import RawContact from './RawContact'; +import ContactBuilder from './ContactBuilder'; +import ContactDelta from '../repo/ContactDelta'; + +export default class Contact { + readonly id: number; + readonly nameRawContactId: number; + readonly quickSearchKey: string; + readonly photoId: number; + readonly photoFileId: number; + readonly personalRingtone: string; + readonly personalNotificationRingtone: string; + readonly isTransferVoiceMail: boolean; + readonly company: string; + readonly position: string; + readonly hasDisplayName: boolean; + readonly hasPhoneNumber: boolean; + readonly readOnly: boolean; + readonly hasGroup: boolean; + readonly hasEmail: boolean; + readonly rowContacts: RawContact[]; + readonly accountTypes: AccountType[]; + + constructor(contactBuilder: ContactBuilder) { + this.id = contactBuilder.id; + this.nameRawContactId = contactBuilder.nameRawContactId; + this.quickSearchKey = contactBuilder.quickSearchKey; + this.photoId = contactBuilder.photoId; + this.photoFileId = contactBuilder.photoFileId; + this.personalRingtone = contactBuilder.personalRingtone; + this.personalNotificationRingtone = contactBuilder.personalNotificationRingtone; + this.isTransferVoiceMail = contactBuilder.isTransferVoiceMail; + this.company = contactBuilder.company; + this.position = contactBuilder.position; + this.hasDisplayName = contactBuilder.hasDisplayName; + this.hasPhoneNumber = contactBuilder.hasPhoneNumber; + this.readOnly = contactBuilder.readOnly; + this.hasGroup = contactBuilder.hasGroup; + this.hasEmail = contactBuilder.hasEmail; + this.rowContacts = contactBuilder.rowContacts; + this.accountTypes = contactBuilder.accountTypes; + } + + addToBlackList() { + return; + } + + removeFromBlackList() { + return; + } + + isInBlackList() { + return false; + } + + star() { + return false; + } + + unStar() { + return false; + } + + protected getSharedText() { + return "我是被分享的文本"; + } + + protected getSharedQRCode() { + return "我是被分享的二维码"; + } + + protected getSharedVcard() { + return "我是被分享的Vcard"; + } + /** + * type: + * 1: 二维码 + * 2:vCard + * 3:文本 + */ + shareContactByType(type: number) { + } + + // 照理这个联系人不应该关心,但是日历模块太小,先放这 + addBirthDayToCalendar() { + + } + + clearPhotos() { + return false; + } + + getPhoto() { + return {}; + } + + isReadOnly() { + return false; + } +} + diff --git a/entry/src/main/ets/MainAbility/contact/entity/ContactBuilder.ets b/entry/src/main/ets/MainAbility/contact/entity/ContactBuilder.ets new file mode 100644 index 0000000..2cf9f38 --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/entity/ContactBuilder.ets @@ -0,0 +1,153 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import AccountType from '../../account/type/AccountType'; +import RawContact from './RawContact'; +import Contact from './Contact'; +import Contacts from '../contract/Contacts'; +import Data from '../contract/Data'; +import RawContacts from '../contract/RawContacts'; + +/** + * 通话记录构造器 + */ +export default class ContactBuilder { + readonly id: number; + nameRawContactId: number; + quickSearchKey: string; + photoId: number; + photoFileId: number; + personalRingtone: string; + personalNotificationRingtone: string; + isTransferVoiceMail: boolean; + company: string; + position: string; + hasDisplayName: boolean; + hasPhoneNumber: boolean; + readOnly: boolean; + hasGroup: boolean; + hasEmail: boolean; + rowContacts: RawContact[]; + accountTypes: AccountType[]; + + constructor(id: number) { + this.id = id; + } + + static fromResultSet(resultSet: any): ContactBuilder{ + let contactBuilder = new ContactBuilder(resultSet.getLong(resultSet.getColumnIndex(RawContacts.CONTACT_ID))); + contactBuilder.setNameRawContactId(resultSet.getLong(resultSet.getColumnIndex(Data.RAW_CONTACT_ID))); + contactBuilder.setQuickSearchKey(resultSet.getString(resultSet.getColumnIndex(Contacts.QUICK_SEARCH_KEY))); + contactBuilder.setPhotoId(resultSet.getLong(resultSet.getColumnIndex(Contacts.PHOTO_ID))); + contactBuilder.setPhotoFileId(resultSet.getLong(resultSet.getColumnIndex(Contacts.PHOTO_FILE_ID))); + contactBuilder.setPersonalRingtone(resultSet.getString(resultSet.getColumnIndex(Contacts.PERSONAL_RINGTONE))); + contactBuilder.setPersonalNotificationRingtone(resultSet.getString(resultSet.getColumnIndex(Contacts.PERSONAL_NOTIFICATION_RINGTONE))); + contactBuilder.setIsTransferVoiceMail(resultSet.getLong(resultSet.getColumnIndex(Contacts.IS_TRANSFER_VOICEMAIL)) > 0 ? true : false); + contactBuilder.setCompany(resultSet.getString(resultSet.getColumnIndex(Contacts.COMPANY))); + contactBuilder.setPosition(resultSet.getString(resultSet.getColumnIndex(Contacts.POSITION))); + contactBuilder.setHasDisplayName(resultSet.getLong(resultSet.getColumnIndex(Contacts.HAS_DISPLAY_NAME)) > 0 ? true : false); + contactBuilder.setHasEmail(resultSet.getLong(resultSet.getColumnIndex(Contacts.IS_TRANSFER_VOICEMAIL)) > 0 ? true : false); + contactBuilder.setHasGroup(resultSet.getLong(resultSet.getColumnIndex(Contacts.HAS_GROUP)) > 0 ? true : false); + contactBuilder.setHasPhoneNumber(resultSet.getLong(resultSet.getColumnIndex(Contacts.HAS_PHONE_NUMBER)) > 0 ? true : false); + contactBuilder.setReadOnly(resultSet.getLong(resultSet.getColumnIndex(Contacts.READ_ONLY)) > 0 ? true : false); + contactBuilder.setRowContacts([]); + contactBuilder.setAccountTypes([]); + return contactBuilder; + } + + setNameRawContactId(nameRawContactId: number) { + this.nameRawContactId = nameRawContactId; + return this; + } + + setPhotoId(photoId: number) { + this.photoId = photoId; + return this; + } + + setPhotoFileId(photoFileId: number) { + this.photoFileId = photoFileId; + return this; + } + + setQuickSearchKey(quickSearchKey: string) { + this.quickSearchKey = quickSearchKey; + return this; + } + + setPersonalNotificationRingtone(personalNotificationRingtone: string) { + this.personalNotificationRingtone = personalNotificationRingtone; + return this; + } + + setPersonalRingtone(personalRingtone: string) { + this.personalRingtone = personalRingtone; + return this; + } + + setIsTransferVoiceMail(isTransferVoiceMail: boolean) { + this.isTransferVoiceMail = isTransferVoiceMail; + return this; + } + + setCompany(company: string) { + this.company = company; + return this; + } + + setPosition(position: string) { + this.position = position; + return this; + } + + setHasDisplayName(hasDisplayName: boolean) { + this.hasDisplayName = hasDisplayName; + return this; + } + + setReadOnly(readOnly: boolean) { + this.readOnly = readOnly; + return this; + } + + setHasPhoneNumber(hasPhoneNumber: boolean) { + this.hasPhoneNumber = hasPhoneNumber; + return this; + } + + setHasGroup(hasGroup: boolean) { + this.hasGroup = hasGroup; + return this; + } + + setHasEmail(hasEmail: boolean) { + this.hasEmail = hasEmail; + return this; + } + + setRowContacts(rowContacts: RawContact[]) { + this.rowContacts = rowContacts; + return this; + } + + setAccountTypes(accountTypes: AccountType[]) { + this.accountTypes = accountTypes; + return this; + } + + buildContact() { + return new Contact(this); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/entity/DataItem.ets b/entry/src/main/ets/MainAbility/contact/entity/DataItem.ets new file mode 100644 index 0000000..ffb6f7c --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/entity/DataItem.ets @@ -0,0 +1,89 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import DataColumns from '../contract/DataColumns'; +import Data from '../contract/Data'; +import DataType from '../contract/DataType'; + +/** + * 联系人data数据 + */ +export default class DataItem { + readonly values: Map; + constructor(values: Map) { + this.values = values; + } + + static fromResultSet(resultSet: any): DataItem{ + let contentValues: Map = new Map(); + contentValues.set(Data.ID, resultSet.getLong(resultSet.getColumnIndex(Data.ID))); + contentValues.set(Data.TYPE_ID, resultSet.getLong(resultSet.getColumnIndex(Data.TYPE_ID))); + contentValues.set(Data.RAW_CONTACT_ID, resultSet.getLong(resultSet.getColumnIndex(Data.RAW_CONTACT_ID))); + contentValues.set(Data.READ_ONLY, resultSet.getLong(resultSet.getColumnIndex(Data.READ_ONLY)) > 0 ? true : false); + contentValues.set(Data.DETAIL_INFO, resultSet.getString(resultSet.getColumnIndex(Data.DETAIL_INFO))); + contentValues.set(Data.FAMILY_NAME, resultSet.getString(resultSet.getColumnIndex(Data.FAMILY_NAME))); + contentValues.set(Data.MIDDLE_NAME_PHONETIC, resultSet.getString(resultSet.getColumnIndex(Data.MIDDLE_NAME_PHONETIC))); + contentValues.set(Data.IS_PREFERRED_NUMBER, resultSet.getLong(resultSet.getColumnIndex(Data.IS_PREFERRED_NUMBER))); + contentValues.set(Data.GIVEN_NAME, resultSet.getString(resultSet.getColumnIndex(Data.GIVEN_NAME))); + contentValues.set(Data.GIVEN_NAME_PHONETIC, resultSet.getString(resultSet.getColumnIndex(Data.GIVEN_NAME_PHONETIC))); + contentValues.set(Data.ALIAS_DETAIL_INTO, resultSet.getString(resultSet.getColumnIndex(Data.ALIAS_DETAIL_INTO))); + contentValues.set(Data.PHONETIC_NAME, resultSet.getString(resultSet.getColumnIndex(Data.PHONETIC_NAME))); + contentValues.set(Data.POSITION, resultSet.getString(resultSet.getColumnIndex(Data.POSITION))); + contentValues.set(Data.CITY, resultSet.getString(resultSet.getColumnIndex(Data.CITY))); + contentValues.set(Data.COUNTRY, resultSet.getString(resultSet.getColumnIndex(Data.COUNTRY))); + contentValues.set(Data.NEIGHBORHOOD, resultSet.getString(resultSet.getColumnIndex(Data.NEIGHBORHOOD))); + contentValues.set(Data.POBOX, resultSet.getString(resultSet.getColumnIndex(Data.POBOX))); + contentValues.set(Data.POSTCODE, resultSet.getString(resultSet.getColumnIndex(Data.POSTCODE))); + contentValues.set(Data.REGION, resultSet.getString(resultSet.getColumnIndex(Data.REGION))); + contentValues.set(Data.STREET, resultSet.getString(resultSet.getColumnIndex(Data.STREET))); + contentValues.set(Data.ALPHA_NAME, resultSet.getString(resultSet.getColumnIndex(Data.ALPHA_NAME))); + contentValues.set(Data.OTHER_LAN_LAST_NAME, resultSet.getString(resultSet.getColumnIndex(Data.OTHER_LAN_LAST_NAME))); + contentValues.set(Data.OTHER_LAN_FIRST_NAME, resultSet.getString(resultSet.getColumnIndex(Data.OTHER_LAN_FIRST_NAME))); + contentValues.set(Data.LAN_STYLE, resultSet.getString(resultSet.getColumnIndex(Data.LAN_STYLE))); + contentValues.set(Data.CUSTOM_DATA, resultSet.getString(resultSet.getColumnIndex(Data.CUSTOM_DATA))); + contentValues.set(Data.BLOB_DATA, resultSet.getString(resultSet.getColumnIndex(Data.BLOB_DATA))); + contentValues.set(Data.EXTEND1, resultSet.getString(resultSet.getColumnIndex(Data.EXTEND1))); + contentValues.set(Data.EXTEND2, resultSet.getString(resultSet.getColumnIndex(Data.EXTEND2))); + contentValues.set(Data.EXTEND3, resultSet.getString(resultSet.getColumnIndex(Data.EXTEND3))); + contentValues.set(Data.EXTEND4, resultSet.getString(resultSet.getColumnIndex(Data.EXTEND4))); + contentValues.set(Data.EXTEND5, resultSet.getString(resultSet.getColumnIndex(Data.EXTEND5))); + contentValues.set(Data.EXTEND6, resultSet.getString(resultSet.getColumnIndex(Data.EXTEND6))); + contentValues.set(Data.EXTEND7, resultSet.getString(resultSet.getColumnIndex(Data.EXTEND7))); + contentValues.set(Data.SYN_1, resultSet.getString(resultSet.getColumnIndex(Data.SYN_1))); + contentValues.set(Data.SYN_2, resultSet.getString(resultSet.getColumnIndex(Data.SYN_2))); + contentValues.set(Data.SYN_3, resultSet.getString(resultSet.getColumnIndex(Data.SYN_3))); + return new DataItem(contentValues); + } + + getId() { + return this.values.get(Data.ID); + } + + getContentTypeId() { + return this.values.get(Data.TYPE_ID); + } + + getData() { + return this.values.get(DataType.DATA); + } + + getLabelId() { + return this.values.get(DataType.LABEL_ID); + } + + getLabelName() { + return this.values.get(DataType.LABEL_NAME); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/entity/EmailDataItem.ets b/entry/src/main/ets/MainAbility/contact/entity/EmailDataItem.ets new file mode 100644 index 0000000..fa26bcd --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/entity/EmailDataItem.ets @@ -0,0 +1,33 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import DataItem from './DataItem'; +import Email from '../contract/Email'; + +export default class EmailDateItem extends DataItem { + readonly values: Map; + + constructor(values: Map) { + super(values); + } + + getAddress() { + return this.values.get(Email.ADDRESS); + } + + getDisplayName() { + return this.values.get(Email.DISPLAY_NAME); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/entity/EventDataItem.ets b/entry/src/main/ets/MainAbility/contact/entity/EventDataItem.ets new file mode 100644 index 0000000..f9543ee --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/entity/EventDataItem.ets @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import DataItem from './DataItem'; +import Event from '../contract/Event'; + +export default class EventDateItem extends DataItem { + readonly values: Map; + + constructor(values: Map) { + super(values); + } + + getStartDate() { + return this.values.get(Event.START_DATE); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/entity/ImDataItem.ets b/entry/src/main/ets/MainAbility/contact/entity/ImDataItem.ets new file mode 100644 index 0000000..92e7c89 --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/entity/ImDataItem.ets @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import DataItem from './DataItem'; +import Im from '../contract/Im'; + +export default class ImDateItem extends DataItem { + readonly values: Map; + + constructor(values: Map) { + super(values); + } + + getProtocol() { + return this.values.get(Im.PROTOCOL); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/entity/NicknameDataItem.ets b/entry/src/main/ets/MainAbility/contact/entity/NicknameDataItem.ets new file mode 100644 index 0000000..ce22759 --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/entity/NicknameDataItem.ets @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import DataItem from './DataItem'; +import Nickname from '../contract/Nickname'; + +export default class NicknameDateItem extends DataItem { + readonly values: Map; + + constructor(values: Map) { + super(values); + } + + getName() { + return this.values.get(Nickname.NAME); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/entity/NoteDataItem.ets b/entry/src/main/ets/MainAbility/contact/entity/NoteDataItem.ets new file mode 100644 index 0000000..cd19616 --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/entity/NoteDataItem.ets @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import DataItem from './DataItem'; +import Note from '../contract/Note'; + +export default class NoteDataItem extends DataItem { + readonly values: Map; + + constructor(values: Map) { + super(values); + } + + getNote() { + return this.values.get(Note.NOTE); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/entity/OrganizationDataItem.ets b/entry/src/main/ets/MainAbility/contact/entity/OrganizationDataItem.ets new file mode 100644 index 0000000..258dbc9 --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/entity/OrganizationDataItem.ets @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import DataItem from './DataItem'; +import Organization from '../contract/Organization'; + +export default class NoteDataItem extends DataItem { + readonly values: Map; + + constructor(values: Map) { + super(values); + } + + getCompany() { + return this.values.get(Organization.COMPANY); + } + + getTitle() { + return this.values.get(Organization.TITLE); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/entity/PhoneDataItem.ets b/entry/src/main/ets/MainAbility/contact/entity/PhoneDataItem.ets new file mode 100644 index 0000000..1c8b770 --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/entity/PhoneDataItem.ets @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import DataItem from './DataItem'; +import Phone from '../contract/Phone'; + +export default class PhoneDateItem extends DataItem { + readonly values: Map; + + constructor(values: Map) { + super(values); + } + + getNumber() { + return this.values.get(Phone.NUMBER); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/entity/RawContact.ets b/entry/src/main/ets/MainAbility/contact/entity/RawContact.ets new file mode 100644 index 0000000..0b037c6 --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/entity/RawContact.ets @@ -0,0 +1,55 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import AccountType from '../../account/type/AccountType'; +import RawContacts from '../contract/RawContacts'; +import Data from '../contract/Data'; +import DataItem from '../entity/DataItem'; + +export default class RawContact { + readonly id: number; + + readonly values: Map; + readonly dataItems: DataItem[]; + readonly accountTypes: AccountType[]; + constructor(id: number, values: Map) { + this.id = id; + this.values = values; + this.dataItems = []; + } + + static fromResultSet(resultSet: any): RawContact{ + let contentValues: Map = new Map(); + contentValues.set(RawContacts.CONTACT_ID, resultSet.getLong(resultSet.getColumnIndex(RawContacts.CONTACT_ID))); + contentValues.set(RawContacts.PHOTO_ID, resultSet.getLong(resultSet.getColumnIndex(RawContacts.PHOTO_ID))); + contentValues.set(RawContacts.PHOTO_FILE_ID, resultSet.getLong(resultSet.getColumnIndex(RawContacts.PHOTO_FILE_ID))); + contentValues.set(RawContacts.IS_TRANSFER_VOICEMAIL, resultSet.getLong(resultSet.getColumnIndex(RawContacts.IS_TRANSFER_VOICEMAIL))> 0 ? true : false); + contentValues.set(RawContacts.PERSONAL_RINGTONE, resultSet.getString(resultSet.getColumnIndex(RawContacts.PERSONAL_RINGTONE))); + contentValues.set(RawContacts.PERSONAL_NOTIFICATION_RINGTONE, resultSet.getString(resultSet.getColumnIndex(RawContacts.PERSONAL_NOTIFICATION_RINGTONE))); + contentValues.set(RawContacts.PHOTO_FIRST_NAME, resultSet.getString(resultSet.getColumnIndex(RawContacts.PHOTO_FIRST_NAME))); + contentValues.set(RawContacts.ACCOUNT_ID, resultSet.getLong(resultSet.getColumnIndex(RawContacts.ACCOUNT_ID))); + contentValues.set(RawContacts.DISPLAY_NAME, resultSet.getString(resultSet.getColumnIndex(RawContacts.DISPLAY_NAME))); + contentValues.set(RawContacts.SORT, resultSet.getLong(resultSet.getColumnIndex(RawContacts.SORT))); + contentValues.set(RawContacts.CONTACTED_COUNT, resultSet.getLong(resultSet.getColumnIndex(RawContacts.CONTACTED_COUNT))); + contentValues.set(RawContacts.LASTEST_CONTACTED_TIME, resultSet.getLong(resultSet.getColumnIndex(RawContacts.LASTEST_CONTACTED_TIME))); + contentValues.set(RawContacts.FAVORITE, resultSet.getString(resultSet.getColumnIndex(RawContacts.FAVORITE))); + contentValues.set(RawContacts.FAVORITE_ORDER, resultSet.getLong(resultSet.getColumnIndex(RawContacts.FAVORITE_ORDER))); + contentValues.set(RawContacts.PHONETIC_NAME, resultSet.getString(resultSet.getColumnIndex(RawContacts.PHONETIC_NAME))); + contentValues.set(RawContacts.COMPANY, resultSet.getString(resultSet.getColumnIndex(RawContacts.COMPANY))); + contentValues.set(RawContacts.POSITION, resultSet.getString(resultSet.getColumnIndex(RawContacts.POSITION))); + return new RawContact(resultSet.getLong(resultSet.getColumnIndex(Data.RAW_CONTACT_ID)), contentValues); + } +} + diff --git a/entry/src/main/ets/MainAbility/contact/entity/RelationDataItem.ets b/entry/src/main/ets/MainAbility/contact/entity/RelationDataItem.ets new file mode 100644 index 0000000..4d68034 --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/entity/RelationDataItem.ets @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import DataItem from './DataItem'; +import Relation from '../contract/Relation'; + +export default class RelationDataItem extends DataItem { + readonly values: Map; + + constructor(values: Map) { + super(values); + } + + getName() { + return this.values.get(Relation.NAME); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/entity/StructuredPostalDataItem.ets b/entry/src/main/ets/MainAbility/contact/entity/StructuredPostalDataItem.ets new file mode 100644 index 0000000..948c56a --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/entity/StructuredPostalDataItem.ets @@ -0,0 +1,45 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import DataItem from './DataItem'; +import StructuredPostal from '../contract/StructuredPostal'; + +export default class StructuredPostalDataItem extends DataItem { + readonly values: Map; + + constructor(values: Map) { + super(values); + } + + getFormattedAddress() { + return this.values.get(StructuredPostal.FORMATTED_ADDRESS); + } + + getStreet() { + return this.values.get(StructuredPostal.STREET); + } + + getCity() { + return this.values.get(StructuredPostal.CITY); + } + + getRegion() { + return this.values.get(StructuredPostal.REGION); + } + + getCountry() { + return this.values.get(StructuredPostal.COUNTRY); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/entity/WebsiteDataItem.ets b/entry/src/main/ets/MainAbility/contact/entity/WebsiteDataItem.ets new file mode 100644 index 0000000..db8115a --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/entity/WebsiteDataItem.ets @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import DataItem from './DataItem'; +import Website from '../contract/Website'; + +export default class WebsiteDataItem extends DataItem { + readonly values: Map; + + constructor(values: Map) { + super(values); + } + + getUrl() { + return this.values.get(Website.URL); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/repo/AddressBookIndex.ets b/entry/src/main/ets/MainAbility/contact/repo/AddressBookIndex.ets new file mode 100644 index 0000000..5bf6c4c --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/repo/AddressBookIndex.ets @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export default class AddressBookIndex { + readonly titles: string[]; + readonly counts: number[]; + + constructor(bundle: any) { + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/repo/ContactDelta.ets b/entry/src/main/ets/MainAbility/contact/repo/ContactDelta.ets new file mode 100644 index 0000000..8a3fbcd --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/repo/ContactDelta.ets @@ -0,0 +1,56 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import Contact from '../entity/Contact.ets'; +import RawContactDelta from './RawContactDelta.ets'; +import RawContacts from '../contract/RawContacts.ets'; +import DAOperation from './DAOperation.ets'; +import HiLog from '../../util/Hilog'; + +export default class ContactDelta { + readonly rawContactDeltas: RawContactDelta[]; + + constructor() { + this.rawContactDeltas = []; + } + + static fromContact(contact: Contact) { + let contactDelta = new ContactDelta(); + for (let rawContact of contact.rowContacts) { + let rawContactDelta = RawContactDelta.fromRawContact(rawContact); + contactDelta.rawContactDeltas.push(rawContactDelta); + } + return contactDelta; + } + + buildDiff() { + let diff = []; + for (var i = 0; i < this.rawContactDeltas.length; i++) { + let rawContactDelta = this.rawContactDeltas[i]; + rawContactDelta.buildDiff(diff); + } + return diff; + } + + private findRawContactId() { + for (var i = 0; i < this.rawContactDeltas.length; i++) { + let rawContactId = this.rawContactDeltas[i].values.getValue(RawContacts.ID); + if (rawContactId != undefined && rawContactId >= 0) { + return rawContactId; + } + } + return -1; + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/repo/ContactList.ets b/entry/src/main/ets/MainAbility/contact/repo/ContactList.ets new file mode 100644 index 0000000..52cc49b --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/repo/ContactList.ets @@ -0,0 +1,26 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import AddressBookIndex from './AddressBookIndex.ets'; +import ContactListItem from './ContactListItem.ets'; + +export default class ContactList { + static readonly CONTACT_PROJECTION_PRIMARY = []; + readonly bookIndex: AddressBookIndex; + readonly contacts: ContactListItem[]; + + constructor(resultSet: any) { + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/repo/ContactListItem.ets b/entry/src/main/ets/MainAbility/contact/repo/ContactListItem.ets new file mode 100644 index 0000000..0717adc --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/repo/ContactListItem.ets @@ -0,0 +1,45 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import Contact from '../entity/Contact.ets'; +import Contacts from '../contract/Contacts.ets'; +import RawContacts from '../contract/RawContacts.ets'; +import ContactBuilder from '../entity/ContactBuilder.ets'; + +export default class ContactListItem { + static readonly COLUMNS: string[] = [Contacts.ID, Contacts.QUICK_SEARCH_KEY, RawContacts.DISPLAY_NAME, + RawContacts.SORT_FIRST_LETTER, RawContacts.PHOTO_FIRST_NAME, Contacts.COMPANY, Contacts.POSITION]; + readonly id: number; + readonly displayName: string; + readonly sortFirstLetter: string; + readonly photoFirstName: string; + readonly quickSearchKey: string; + readonly company: string; + readonly position: string; + + constructor(resultSet: any) { + this.id = resultSet.getLong(resultSet.getColumnIndex(Contacts.ID)); + this.displayName = resultSet.getString(resultSet.getColumnIndex(RawContacts.DISPLAY_NAME)); + this.sortFirstLetter = resultSet.getString(resultSet.getColumnIndex(RawContacts.SORT_FIRST_LETTER)); + this.photoFirstName = resultSet.getString(resultSet.getColumnIndex(RawContacts.PHOTO_FIRST_NAME)); + this.quickSearchKey = resultSet.getString(resultSet.getColumnIndex(Contacts.QUICK_SEARCH_KEY)); + this.company = resultSet.getString(resultSet.getColumnIndex(Contacts.COMPANY)); + this.position = resultSet.getString(resultSet.getColumnIndex(Contacts.POSITION)); + } + + createContact() { + return new Contact(new ContactBuilder(this.id)); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/repo/ContactRepository.ets b/entry/src/main/ets/MainAbility/contact/repo/ContactRepository.ets new file mode 100644 index 0000000..2ca4f81 --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/repo/ContactRepository.ets @@ -0,0 +1,218 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import IContactRepository from './IContactRepository'; +import Contact from '../entity/Contact'; +import RawContact from '../entity/RawContact'; +import ContactBuilder from '../entity/ContactBuilder'; +import DataItem from '../entity/DataItem'; +import ContactList from './ContactList'; +import FeatureAbility from '@ohos.ability.featureAbility'; +import DAOperation from './DAOperation'; +import ContactDelta from './ContactDelta'; +import RawContacts from '../contract/RawContacts'; +import Contacts from '../contract/Contacts'; +import Data from '../contract/Data'; +import StringUtil from '../../util/StringUtil'; +import DataAbility from '@ohos.data.dataAbility'; +import HiLog from '../../util/HiLog'; +import ContactListItem from './ContactListItem'; + +const TAG = "ContactRepository"; + +/** + * 联系人存储管理,屏蔽对cp层的依赖 + * 仅限联系人 + */ +export default class ContactRepository implements IContactRepository { + static readonly RAW_CONTACT_URL: string = RawContacts.CONTENT_URI; + private _dataAbilityHelper = FeatureAbility.acquireDataAbilityHelper(Contacts.CONTENT_URI); + private static instance: ContactRepository + + private constructor() { + } + + public static getInstance(): ContactRepository { + if (!ContactRepository.instance) { + ContactRepository.instance = new ContactRepository() + } + return ContactRepository.instance + } + + saveTest() { + return false; + } + + private getDataAbilityHelper(){ + if (this._dataAbilityHelper == undefined || this._dataAbilityHelper == null || this._dataAbilityHelper.length == 0) { + this._dataAbilityHelper = FeatureAbility.acquireDataAbilityHelper(Contacts.CONTENT_URI); + } + return this._dataAbilityHelper; + } + + save(contact: ContactDelta) { + let dataAbilityHelper = this.getDataAbilityHelper(); + return new Promise>(function (resolve, reject) { + let opts = contact.buildDiff(); + return dataAbilityHelper.executeBatch(ContactRepository.RAW_CONTACT_URL, opts) + .then(resultSet => { + resolve(resultSet); + }) + .catch(error => { + HiLog.w(TAG, 'save error:' + error); + reject(error); + }); + }); + + } + + findById(id: number) { + let dataAbilityHelper = this.getDataAbilityHelper(); + return new Promise(function (resolve, reject) { + if (id < 0) { + HiLog.w(TAG, 'findById: id is invalid.'); + reject(); + return; + } + let conditionArgs = new DataAbility.DataAbilityPredicates(); + conditionArgs.equalTo(RawContacts.CONTACT_ID, id).orderByAsc(Data.RAW_CONTACT_ID); + dataAbilityHelper.query(Data.CONTENT_URI, null, conditionArgs).then(resultSet => { + if (resultSet == undefined || !resultSet.goToFirstRow()) { + HiLog.w(TAG, 'findById not found.'); + reject(); + } + let contactBuilder = ContactBuilder.fromResultSet(resultSet); + let currentRawContactId = -1; + let rawContact: RawContact = null; + do { + let rawContactId = resultSet.getLong(resultSet.getColumnIndex(Data.RAW_CONTACT_ID)); + if (rawContactId != currentRawContactId) { + currentRawContactId = rawContactId; + rawContact = RawContact.fromResultSet(resultSet); + contactBuilder.rowContacts.push(rawContact); + } + if (!resultSet.isColumnNull(resultSet.getColumnIndex(Data.ID)) && rawContact != undefined) { + rawContact.dataItems.push(DataItem.fromResultSet(resultSet)); + } + } while (resultSet.goToNextRow()); + resultSet.close(); + resolve(contactBuilder.buildContact()); + }).catch(error => { + HiLog.e(TAG, 'findById error:' + error); + reject(error); + }); + }); + } + + findAll() { + let dataAbilityHelper = this.getDataAbilityHelper(); + return new Promise(function (resolve, reject) { + let conditionArgs = new DataAbility.DataAbilityPredicates(); + conditionArgs.equalTo(RawContacts.IS_DELETED, '0').orderByAsc(RawContacts.SORT_FIRST_LETTER); + dataAbilityHelper.query(Contacts.CONTACT_URI, ContactListItem.COLUMNS, conditionArgs) + .then(resultSet => { + let rst: ContactListItem[] = []; + resultSet.goToFirstRow(); + do { + let id = resultSet.getLong(resultSet.getColumnIndex(Contacts.ID)); + if (id < 0) { + HiLog.w(TAG, 'findAll: contact id is invalid.'); + continue; + } + rst.push(new ContactListItem(resultSet)); + } while (resultSet.goToNextRow()); + resultSet.close(); + resolve(rst); + }) + .catch(error => { + HiLog.w(TAG, 'findAll error:' + error); + reject(error); + }); + }); + } + + findByQuickSearchKey(searchKey: string) { + let dataAbilityHelper = this.getDataAbilityHelper(); + return new Promise(function (resolve, reject) { + let conditionArgs = new DataAbility.DataAbilityPredicates(); + conditionArgs.equalTo(Contacts.QUICK_SEARCH_KEY, searchKey).orderByAsc(Data.RAW_CONTACT_ID); + dataAbilityHelper.query(Data.CONTENT_URI, null, conditionArgs).then(resultSet => { + if (resultSet == undefined || !resultSet.goToFirstRow()) { + HiLog.w(TAG, 'findByQuickSearchKey not found.'); + reject(); + } + let contactBuilder = ContactBuilder.fromResultSet(resultSet); + let currentRawContactId = -1; + let rawContact: RawContact = null; + do { + let rawContactId = resultSet.getLong(resultSet.getColumnIndex(Data.RAW_CONTACT_ID)); + if (rawContactId != currentRawContactId) { + currentRawContactId = rawContactId; + rawContact = RawContact.fromResultSet(resultSet); + contactBuilder.rowContacts.push(rawContact); + } + if (!resultSet.isColumnNull(resultSet.getColumnIndex(Data.ID)) && rawContact != undefined) { + rawContact.dataItems.push(DataItem.fromResultSet(resultSet)); + } + } while (resultSet.goToNextRow()); + resultSet.close(); + resolve(contactBuilder.buildContact()); + }).catch(error => { + HiLog.e(TAG, 'findByQuickSearchKey error:' + error); + reject(error); + }); + }); + } + + findAllWithBookIndex() { + return new ContactList({}); + } + + search(queryStr:string) { + return new ContactList({}); + } + + findByPhoneIsNotNull() { + return new Promise(function (resolve, reject) { + reject(); + }); + } + + findByMailIsNotNull() { + return new ContactList({}); + } + + deleteById(id: number) { + let dataAbilityHelper = this.getDataAbilityHelper(); + return new Promise(function (resolve, reject) { + if (id < 0) { + reject(); + return; + } + let condition = new DataAbility.DataAbilityPredicates(); + condition.equalTo(Contacts.ID, id); + dataAbilityHelper.delete(Contacts.CONTACT_URI, condition).then(data => { + resolve(data); + }).catch(error => { + HiLog.w(TAG, 'deleteById error:' + error); + reject(error); + }); + }); + } + + deleteByIdIn(ids: number[]) { + return false; + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/repo/DAOperation.ets b/entry/src/main/ets/MainAbility/contact/repo/DAOperation.ets new file mode 100644 index 0000000..e6b7f23 --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/repo/DAOperation.ets @@ -0,0 +1,69 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import FeatureAbility from '@ohos.ability.featureAbility'; +import HiLog from '../../util/HiLog'; + +export default class DAOperation { + readonly uri: string; + readonly type: number; + valuesBucket?: any; + valueBackReferences?: any; + predicates?: any; + predicatesBackReferences?: Map; + interrupted?: boolean; + expectedCount?: number; + + constructor(uri: string, type: number) { + this.uri = uri; + this.type = type; + } + + static newInsert(uri: string) { + return new DAOperation(uri, FeatureAbility.DataAbilityOperationType.TYPE_INSERT) + } + + static newDelete(uri: string) { + return new DAOperation(uri, FeatureAbility.DataAbilityOperationType.TYPE_DELETE) + } + + static newUpdate(uri: string) { + return new DAOperation(uri, FeatureAbility.DataAbilityOperationType.TYPE_UPDATE) + } + + withValueBackReferences(key: string, previousResult: number) { + if (this.type != FeatureAbility.DataAbilityOperationType.TYPE_INSERT + && this.type != FeatureAbility.DataAbilityOperationType.TYPE_UPDATE + && this.type != FeatureAbility.DataAbilityOperationType.TYPE_ASSERT) { + return; + } + if (this.valueBackReferences == undefined) { + this.valueBackReferences = {}; + } + this.valueBackReferences[key] = previousResult; + } + + withValue(key: string, obj: any) { + if (this.type != FeatureAbility.DataAbilityOperationType.TYPE_INSERT + && this.type != FeatureAbility.DataAbilityOperationType.TYPE_UPDATE + && this.type != FeatureAbility.DataAbilityOperationType.TYPE_ASSERT) { + return; + } + if (this.valuesBucket == undefined) { + this.valuesBucket = {}; + } + this.valuesBucket[key] = obj; + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/repo/IContactRepository.ets b/entry/src/main/ets/MainAbility/contact/repo/IContactRepository.ets new file mode 100644 index 0000000..966b787 --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/repo/IContactRepository.ets @@ -0,0 +1,36 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import Contact from '../entity/Contact'; +import ContactList from './ContactList'; +import ContactDelta from './ContactDelta'; +import ContactListItem from './ContactListItem'; + +/** + * 联系人存储管理,屏蔽对cp层的依赖 + * 仅限联系人 + */ +export default interface IContactRepository { + save: (contact: ContactDelta) => Promise>; + findById: (id: number) => Promise; + findByQuickSearchKey: (searchKey: string) => Promise; + findAll: () => Promise; + findAllWithBookIndex: () => ContactList; + search: (queryStr: string) => ContactList; + findByPhoneIsNotNull: () => Promise; + findByMailIsNotNull: () => ContactList; + deleteByIdIn: (ids: number[]) => boolean; + deleteById: (id: number) => Promise; +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/repo/RawContactDelta.ets b/entry/src/main/ets/MainAbility/contact/repo/RawContactDelta.ets new file mode 100644 index 0000000..9a54dab --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/repo/RawContactDelta.ets @@ -0,0 +1,103 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import ValuesDelta from './ValuesDelta.ets'; +import DAOperation from './DAOperation.ets'; +import RawContacts from '../contract/RawContacts.ets'; +import Data from '../contract/Data.ets'; +import RawContact from '../entity/RawContact.ets'; +import HiLog from '../../util/HiLog'; + +const TAG = "RawContactDelta"; + +/** + * 联系人详情编辑模型 + */ +export default class RawContactDelta { + // 用于存放rawContact表本身的字段 + values: ValuesDelta; + readonly dataValues: Map = new Map(); + constructor() { + this.values = new ValuesDelta(); + } + + static fromRawContact(rawContact: RawContact) { + if (rawContact == undefined) { + return; + } + let rawContactDelta = new RawContactDelta(); + rawContactDelta.values = ValuesDelta.fromValues(rawContact.values); + for (let dataItem of rawContact.dataItems) { + rawContactDelta.addDataValue(ValuesDelta.fromValues(dataItem.values)); + } + return rawContactDelta; + } + + addDataValue(dataValue: ValuesDelta) { + if (dataValue == undefined) { + return; + } + let mimeTypeId = dataValue.getValue(Data.TYPE_ID); + if (mimeTypeId == undefined ) { + return; + } + let valuesDeltas = this.getMimeEntries(mimeTypeId); + if (valuesDeltas == undefined) { + valuesDeltas = [dataValue]; + this.dataValues.set(mimeTypeId, valuesDeltas); + } else { + valuesDeltas.push(dataValue); + } + } + + private getMimeEntries(typeId: number) { + let mimeEntries = this.dataValues.get(typeId); + return mimeEntries; + } + + isContactInsert () { + return this.values.isInsert(); + } + + isContactDelete () { + return this.values.isDelete(); + } + + buildDiff(diff: DAOperation[]) { + let isContactInsert = this.isContactInsert(); + let isContactDelete = this.isContactDelete(); +// let isContactUpdate = !isContactInsert && !isContactDelete; + let beforeId = this.values.getValue(RawContacts.ID); + let firstIndex = diff.length; + let opt = this.values.buildDiff(RawContacts.CONTENT_URI); + diff.push(opt); + if (isContactDelete) { + return; + } + for (let mimeEntries of this.dataValues.values()) { + for (let data of mimeEntries) { + opt = data.buildDiff(Data.CONTENT_URI); + if (data.isInsert()) { + if (isContactInsert) { + opt.withValueBackReferences(Data.RAW_CONTACT_ID, firstIndex); + } else { + opt.withValue(Data.RAW_CONTACT_ID, beforeId); + } + } + diff.push(opt); + } + } + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/contact/repo/ValuesDelta.ets b/entry/src/main/ets/MainAbility/contact/repo/ValuesDelta.ets new file mode 100644 index 0000000..02943cc --- /dev/null +++ b/entry/src/main/ets/MainAbility/contact/repo/ValuesDelta.ets @@ -0,0 +1,119 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import BaseColumns from '../contract/BaseColumns.ets'; +import DataColumns from '../contract/DataColumns.ets'; +import DAOperation from './DAOperation.ets'; +import HiLog from '../../util/HiLog'; + +const TAG = "ValuesDelta"; + +/** + * 联系人详情编辑模型 + */ +export default class ValuesDelta { + private readonly _idColumn: string = BaseColumns.ID; + before: Map; + after: Map; + constructor() { + } + + static fromValues(values: Map) { + let valuesDelta = new ValuesDelta(); + valuesDelta.before = values; + valuesDelta.after = new Map(); + return valuesDelta; + } + + getValue(key: string) { + let result; + if (this.after != undefined && this.after.has(key)) { + result = this.after.get(key); + } else if (this.before != undefined && this.before.has(key)) { + result = this.before.get(key); + } + return result + } + + putValue(key: string, value: any) { + if (this.after == undefined) { + this.after = new Map(); + } + this.after.set(key, value); + } + + isInsert() { + return!this.beforeExists() && (this.after != undefined); + } + + isDelete() { + return this.beforeExists() && (this.after == undefined); + } + + isUpdate() { + if (!this.beforeExists() || this.after == undefined || this.after.size == 0) { + return false; + } + for (let key of this.after.keys()) { + let newValue = this.after.get(key); + let oldValue = this.before.get(key); + let mimetypeId = this.before.get(DataColumns.TYPE_ID); + if (this.isObjectsEqual(oldValue, newValue, mimetypeId, key)) { + return true; + } + } + return false; + } + + private isObjectsEqual(oldValue: any, newValue: any, mimetype: number, key: string) { + return oldValue == newValue; + } + + buildDiff(targetUri: string) { + if (targetUri == undefined) { + return undefined; + } + + let opt; + if (this.isInsert()) { + this.after.delete(this._idColumn); + opt = DAOperation.newInsert(targetUri); + opt.valuesBucket = this.mapToObj(this.after); + } else if (this.isDelete()) { + opt = DAOperation.newDelete(targetUri); + opt.predicates = this._idColumn + "=" + this.getValue(this._idColumn); + } else if (this.isUpdate) { + opt = DAOperation.newUpdate(targetUri); + opt.predicates = this._idColumn + "=" + this.getValue(this._idColumn); + opt.valuesBucket = this.mapToObj(this.after); + } else { + console.info('buildDiff do nothing.'); + } + return opt; + } + + private mapToObj(map: Map) { + let obj = {}; + for (let [key, value] of map) { + obj[key] = value; + } + return obj; + } + + + private beforeExists() { + return this.before != undefined && this.before.has(this._idColumn); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/dialpad/Dialpad.ets b/entry/src/main/ets/MainAbility/dialpad/Dialpad.ets new file mode 100644 index 0000000..b34dab1 --- /dev/null +++ b/entry/src/main/ets/MainAbility/dialpad/Dialpad.ets @@ -0,0 +1,53 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import PhoneNumber from "../feature/PhoneNumber"; +import SmartSearchList from "./SmartSearchList"; + +/** + * 拨号盘对象,提供拨号盘相关服务 + */ +export default class DialPad { + private input: string; + private dialKey: []; + + constructor() { + } + + inputKey(key: string) { + this.playTone(key); + this.input = this.input + key; + return this.input; + } + + private playTone(tone: string) { + } + + call() { + new PhoneNumber(this.input).callOut(); + this.clearInput(); + } + + clearInput() { + this.input=""; + } + + getDialKey() { + + } + + getSmartSearchResult() { + return new SmartSearchList(); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/dialpad/SmartSearchList.ets b/entry/src/main/ets/MainAbility/dialpad/SmartSearchList.ets new file mode 100644 index 0000000..0b69106 --- /dev/null +++ b/entry/src/main/ets/MainAbility/dialpad/SmartSearchList.ets @@ -0,0 +1,26 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * 拨号盘搜索模型 + */ +export default class SmartSearchList { + readonly yellowPageSmartSearchList: []; + readonly contactSmartSearchList: []; + readonly callLogSmartSearchList: []; + + constructor() { + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/feature/PhoneNumber.ets b/entry/src/main/ets/MainAbility/feature/PhoneNumber.ets new file mode 100644 index 0000000..040ecc6 --- /dev/null +++ b/entry/src/main/ets/MainAbility/feature/PhoneNumber.ets @@ -0,0 +1,60 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import HiLog from '../util/HiLog'; +import StringUtil from '../util/StringUtil'; +import Call from '@ohos.telephony.call'; + +const TAG = 'PhoneNumber'; + +/** + * 号码对象,提供号码相关服务 + */ +export default class PhoneNumber { + readonly number: string; + + constructor(number: string) { + this.number = number; + } + + static fromString(number: string): PhoneNumber { + return new PhoneNumber(StringUtil.removeSpace(number)); + } + + callOut(): Promise { + let number = this.number; + return new Promise(function (resolve, reject) { + if (StringUtil.isEmpty(number)) { + HiLog.w(TAG, "callOut: number is empty."); + reject("number is empty.") + return; + } + Call.isEmergencyPhoneNumber(number).then((isEmergency) => { + if (isEmergency) { + return Call.dial(number, { + dialScene: 2 + }); + } else { + return Call.dial(number); + } + }).catch(err => { + HiLog.e(TAG, "callOut: isEmergencyPhoneNumber err."); + reject(); + }); + }); + } + + sendMessage() { + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/model/ContactAbilityModel.ets b/entry/src/main/ets/MainAbility/model/ContactAbilityModel.ets new file mode 100644 index 0000000..2b0fe84 --- /dev/null +++ b/entry/src/main/ets/MainAbility/model/ContactAbilityModel.ets @@ -0,0 +1,795 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import Constants from './common/Constants'; +import featureAbility from '@ohos.ability.featureAbility' +import dataAbility from '@ohos.data.dataAbility'; +import {ContactVo} from '../model/bean/ContactVo'; +import {PhoneNumBean} from '../model/bean/PhoneNumBean'; +import {ContactInfo} from "../model/bean/ContactInfo"; +import dbChangeHelper from '../model/common/DbChangeHelper'; +import DataItem from '../contact/entity/DataItem'; +import {DataItemType} from '../contact/contract/DataType'; +import Data from '../contact/contract/Data'; +import HiLog from '../util/Hilog'; +import Utils from '../util/Utils'; +import ArrayUtil from '../util/ArrayUtil'; +import {LooseObject} from '../app'; +import ContactRepository from '../contact/repo/ContactRepository'; + +const TAG = "ContactAbility: "; + +export default { + /** + * 添加联系人 + * + * @param {string} DAHelper 数据库路径 + * @param {Object} addParams 联系人信息 + * @param {Object} callBack 回调 + */ + addContact: function (addParams: ContactInfo, DAHelper?, callBack?) { + if (addParams == undefined || addParams == null) { + HiLog.e(TAG, "The addParams of parameter is NULL"); + return ""; + } + if (DAHelper == undefined || DAHelper.length == 0) { + DAHelper = featureAbility.acquireDataAbilityHelper(Constants.uri.CONTACT_DB_URI); + } + let insertValues = { + 'display_name': this.getDisplayName(addParams), + }; + DAHelper.insert( + Constants.uri.ROW_CONTACTS_URI, + insertValues + ).then(data => { + HiLog.i(TAG, 'Data inserted successfully'); + addParams.id = data.toString(); + this.dealParam(DAHelper, addParams, false); + if (callBack != undefined) { + HiLog.d(TAG, 'Start the callback function.'); + callBack(addParams.id); + } + }).catch(error => { + HiLog.e(TAG, 'logMessage insert error: %s', error); + }); + }, + + /** + * 读取名字,需要优化 + * 编辑联系人 + * + * @param {Object} addParams 联系人信息 + * @return {string} 联系人姓名 + */ + getDisplayName: function (addParams: ContactInfo): String{ + let displayName = ''; + if (addParams.display_name != undefined && addParams.display_name.length > 0) { + displayName = addParams.display_name; + } else if (addParams.nickname != undefined && addParams.nickname.length > 0) { + displayName = addParams.nickname; + } else if (addParams.hasOwnProperty('company') && addParams.company.length > 0) { + displayName = addParams.company; + } else if (addParams.hasOwnProperty('position') && addParams.position.length > 0) { + displayName = addParams.position; + } else { + displayName = ''; + } + return displayName; + }, + + /** + * 将数据转换 存进数据库 + * + * @param {string} DAHelper 数据库路径 + * @param {Object} addParams 联系人信息 + * @param {boolean} isCard 是否为名片信息 + */ + dealParam: function (DAHelper, addParams: ContactInfo, isCard) { + let result = addParams.id; + let uri = isCard ? Constants.uri.PROFILE_CONTACT_DATA_URI : Constants.uri.CONTACT_DATA_URI; + + this.dataContact(addParams, DAHelper, result, uri); + this.organizationContact(addParams, DAHelper, result, uri); + this.noteContact(addParams, DAHelper, result, uri); + this.phoneContact(addParams, DAHelper, result, uri); + this.emailContact(addParams, DAHelper, result, uri); + this.postalContact(addParams, DAHelper, result, uri); + this.eventContact(addParams, DAHelper, result, uri); + this.imContact(addParams, DAHelper, result, uri); + this.groupsContact(addParams, DAHelper, result, uri); + this.websiteContact(addParams, DAHelper, result, uri); + this.nickContact(addParams, DAHelper, result, uri); + this.relationsContact(addParams, DAHelper, result, uri); + dbChangeHelper.getInstance().notifyChange(DAHelper, Constants.uri.CONTACT_DATA_URI) + }, + + /** + * 联系人姓名存入数据库 + * + * @param {Object} addParams 联系人信息 + * @param {string} DAHelper 数据库路径 + * @param {string} result 联系人ID + * @param {string} uri 数据库地址 + */ + dataContact: function (addParams, DAHelper, result, uri) { + let displayName = ''; + if (addParams.display_name != undefined && addParams.display_name.length > 0) { + displayName = addParams.display_name; + } + if (displayName.length > 0) { + let dataContact = { + 'raw_contact_id': result, + 'detail_info': displayName, + 'alpha_name': displayName, + 'phonetic_name': addParams.hasOwnProperty('phonetic_name') ? (addParams.phonetic_name) : "", + 'other_lan_last_name': addParams.hasOwnProperty('other_lan_last_name') ? (addParams.other_lan_last_name) : "", + 'other_lan_first_name': addParams.hasOwnProperty('other_lan_first_name') ? (addParams.other_lan_first_name) : "", + 'type_id': 6, + }; + DAHelper.insert(uri, dataContact, (err, data) => { + if (err) { + HiLog.e(TAG, 'name-Operation failed. Cause: %s', err); + return; + } + HiLog.d(TAG, 'name-insert data success! data = %s', data); + }) + } + }, + + /** + * 联系人昵称信息存入数据库 + * + * @param {Object} addParams 联系人信息 + * @param {string} DAHelper 数据库路径 + * @param {number} result 联系人ID + * @param {string} uri 数据库地址 + */ + nickContact: function (addParams, DAHelper, result, uri) { + if (addParams.nickname != undefined && addParams.nickname.length > 0) { + let nickContact = { + 'raw_contact_id': result, + 'detail_info': addParams.nickname, + 'type_id': 9, + }; + DAHelper.insert( + uri, + nickContact + ).catch(error => { + HiLog.e(TAG, 'nickContact:insert contact error'); + }); + } + }, + /** + * 联系人公司职位信息存入数据库 + * + * @param {Object} addParams 联系人信息 + * @param {string} DAHelper 数据库路径 + * @param {string} result 联系人ID + * @param {string} uri 数据库地址 + */ + organizationContact: function (addParams, DAHelper, result, uri) { + let company = ''; + let position = ''; + if (addParams.company != undefined && addParams.company.length > 0) { + company = addParams.company; + } + if (addParams.position != undefined && addParams.position.length > 0) { + position = addParams.position; + } + if (addParams.company.length > 0 || addParams.position.length > 0) { + let organizationContact = { + 'raw_contact_id': result, + 'detail_info': company, + 'position': position, + 'type_id': 4, + }; + DAHelper.insert( + uri, + organizationContact + ).then(data => { + HiLog.d(TAG, 'organizationContact-insert data success! data = %s', data); + }).catch(error => { + HiLog.e(TAG, 'organizationContact-insert contact error: %s', error); + }); + } + }, + + /** + * 联系人备注信息存入数据库 + * + * @param {Object} addParams 联系人信息 + * @param {string} DAHelper 数据库路径 + * @param {number} result 联系人ID + * @param {string} uri 数据库地址 + */ + noteContact: function (addParams, DAHelper, result, uri) { + if (addParams.remarks != undefined && addParams.remarks.length > 0) { + let noteContact = { + 'raw_contact_id': result, + 'detail_info': addParams.remarks, + 'type_id': 10, + }; + DAHelper.insert( + uri, + noteContact + ).then(data => { + HiLog.d(TAG, 'noteContact-logMessage insert data success! data = %s', data); + }).catch(error => { + HiLog.e(TAG, 'noteContact-insert contact error: %s', error); + }); + } + }, + + /** + * 联系人手机号信息存入数据库 + * + * @param {Object} addParams 联系人信息 + * @param {string} DAHelper 数据库路径 + * @param {number} result 联系人ID + * @param {string} uri 数据库地址 + */ + phoneContact: function (addParams, DAHelper, result, uri) { + if (addParams.phones != undefined && addParams.phones.length > 0) { + addParams.phones.forEach(element => { + if (Utils.isEmpty(element.num)) { + return; + } + let phoneContact = { + 'raw_contact_id': result, + 'detail_info': element.num, + 'extend7': element.id + '', + 'custom_data': element.numType, + 'type_id': 5, + }; + DAHelper.insert( + uri, + phoneContact + ).then(data => { + HiLog.d(TAG, 'phoneContact-logMessage insert data success! data = %s', data); + }).catch(error => { + HiLog.e(TAG, 'phoneContact-insert contact error: %s', error); + }); + }); + } + }, + + /** + * 联系人邮箱信息存入数据库 + * + * @param {Object} addParams 联系人信息 + * @param {string} DAHelper 数据库路径 + * @param {number} result 联系人ID + * @param {string} uri 数据库地址 + */ + emailContact: function (addParams, DAHelper, result, uri) { + if (addParams.emails != undefined && addParams.emails.length > 0) { + addParams.emails.forEach(element => { + let emailContact = { + 'raw_contact_id': result, + 'detail_info': element.address, + 'extend7': element.id + '', + 'custom_data': element.emailType, + 'type_id': 1, + }; + DAHelper.insert( + uri, + emailContact + ).then(data => { + HiLog.d(TAG, 'emailContact-logMessage insert data success! data = %s', data); + }).catch(error => { + HiLog.e(TAG, 'emailContact-insert contact error: %s', error); + }); + }); + } + }, + + /** + * 联系人地址信息存入数据库 + * + * @param {Object} addParams 联系人信息 + * @param {string} DAHelper 数据库路径 + * @param {number} result 联系人ID + * @param {string} uri 数据库地址 + */ + postalContact: function (addParams, DAHelper, result, uri) { + if (addParams.houses != undefined && addParams.houses.length > 0) { + addParams.houses.forEach(element => { + let postalContact = { + 'raw_contact_id': result, + 'detail_info': element.houseName, + 'extend7': element.houseId + '', + 'custom_data': element.houseType, + 'type_id': 7, + }; + DAHelper.insert( + uri, + postalContact + ).then(data => { + HiLog.d(TAG, 'postalContact-logMessage insert data success! data = %s', data); + }).catch(error => { + HiLog.e(TAG, 'postalContact-insert contact error: %s', error); + }); + }); + } + }, + + + /** + * 联系人特殊日期信息存入数据库 + * + * @param {Object} addParams 联系人信息 + * @param {string} DAHelper 数据库路径 + * @param {number} result 联系人ID + * @param {string} uri 数据库地址 + */ + eventContact: function (addParams, DAHelper, result, uri) { + if (addParams.events != undefined && addParams.events.length > 0) { + addParams.events.forEach(element => { + let eventContact = { + 'raw_contact_id': result, + 'detail_info': element.data, + 'extend7': element.eventType + '', + 'custom_data': element.eventName, + 'type_id': 11 + }; + DAHelper.insert( + uri, + eventContact + ).then(data => { + HiLog.d(TAG, 'eventContact-logMessage insert data success! data = %s', data); + }).catch(error => { + HiLog.e(TAG, 'eventContact-insert contact error: %s', error); + }); + }); + } + }, + + /** + * 联系人IMA信息存入数据库 + * + * @param {Object} addParams 联系人信息 + * @param {string} DAHelper 数据库路径 + * @param {number} result 联系人ID + * @param {string} uri 数据库地址 + */ + imContact: function (addParams, DAHelper, result, uri) { + if (addParams.aims != undefined && addParams.aims.length > 0) { + addParams.aims.forEach(element => { + let imContact = { + 'raw_contact_id': result, + 'detail_info': element.aimName, + 'extend7': element.aimId + '', + 'custom_data': element.aimType, + 'type_id': 2, + }; + DAHelper.insert( + uri, + imContact + ).then(data => { + HiLog.d(TAG, 'imContact-logMessage insert data success! data = %s', data); + }).catch(error => { + HiLog.e(TAG, 'imContact-insert contact error:%s', error); + }); + }); + } + }, + + /** + * 联系人群组信息存入数据库 + * + * @param {Object} addParams 联系人信息 + * @param {string} DAHelper 数据库路径 + * @param {number} result 联系人ID + * @param {string} uri 数据库地址 + */ + groupsContact: function (addParams, DAHelper, result, uri) { + if (addParams.groups != undefined && addParams.groups.length > 0) { + addParams.groups.forEach(element => { + let groupsContact = { + 'raw_contact_id': result, + 'detail_info': element.groupName, + 'extend7': element.groupId + '', + 'custom_data': element.groupType, + 'type_id': 9, + }; + DAHelper.insert( + uri, + groupsContact + ).then(data => { + HiLog.d(TAG, 'groupsContact-logMessage insert data success! data = %s', data); + }).catch(error => { + HiLog.e(TAG, 'groupsContact-insert contact error:%s', error); + }); + }); + } + }, + + /** + * 联系人website信息存入数据库 + * + * @param {Object} addParams 联系人信息 + * @param {string} DAHelper 数据库路径 + * @param {number} result 联系人ID + * @param {string} uri 数据库地址 + */ + websiteContact: function (addParams, DAHelper, result, uri) { + if (!Utils.isEmptyList(addParams.websites)) { + addParams.websites.forEach(element => { + if (Utils.isEmpty(element)) + return; + let websiteContact = { + 'raw_contact_id': result, + 'detail_info': element, + 'type_id': 12, + }; + DAHelper.insert( + uri, + websiteContact + ).then(data => { + HiLog.d(TAG, 'websiteContact-logMessage insert data success! data = %s', data); + }).catch(error => { + HiLog.e(TAG, 'websiteContact-insert contact error: %s', error); + }); + }); + } + }, + + /** + * 联系人relation信息存入数据库 + * + * @param {Object} addParams 联系人信息 + * @param {string} DAHelper 数据库路径 + * @param {number} result 联系人ID + * @param {string} uri 数据库地址 + */ + relationsContact: function (addParams, DAHelper, result, uri) { + if (!Utils.isEmptyList(addParams.relationships)) { + addParams.relationships.forEach(element => { + if (Utils.isEmpty(element.associatedPersonId)) + return; + let relationsContact = { + 'raw_contact_id': result, + 'detail_info': element.associatedPersonId, + 'extend7': element.associatedType, + 'custom_data': element.name, + 'type_id': 13, + }; + DAHelper.insert( + uri, + relationsContact + ).then(data => { + HiLog.d(TAG, 'relationsContact-logMessage insert data success! data = %s', data); + }).catch(error => { + HiLog.e(TAG, 'relationsContact-insert contact error: %s', error); + }); + }); + } + }, + + /** + * 查询所有联系人手机号 + * + * @param {string} DAHelper 数据库地址 + * @param {Object} callBack 回调 + */ + getAllContact: async function (DAHelper?, callBack?) { + if (DAHelper == undefined || DAHelper.length == 0) { + DAHelper = featureAbility.acquireDataAbilityHelper(Constants.uri.CONTACT_DB_URI); + } + let contactNumberMap = await this.getAllContactNumbers(DAHelper); // 获取所有联系人及其电话号码的Map映射关系 + + let contactList = await ContactRepository.getInstance().findAll(); + + if (Utils.isEmptyList(contactList)) { + HiLog.i(TAG, 'queryContacts-SelectcontactsModel queryContact resultSet is empty!'); + callBack(); + return; + } + let resultList = []; + for (let contactItem of contactList) { + let jsonObj: ContactVo = new ContactVo("", "", "", "", "", "", true, "", ""); + jsonObj.contactId = contactItem.id.toString(); + jsonObj.emptyNameData = contactItem.displayName; + jsonObj.namePrefix = contactItem.sortFirstLetter; + jsonObj.nameSuffix = contactItem.photoFirstName; + jsonObj.company = contactItem.company; + jsonObj.position = contactItem.position; + jsonObj.portraitColor = Constants.background.Color[Math.abs(parseInt(jsonObj.contactId)) % 6]; + jsonObj.show = false; + jsonObj.phoneNum = + contactNumberMap.has(jsonObj.contactId) ? + contactNumberMap.get(jsonObj.contactId)[0].phoneNumber + : ""; + jsonObj.phoneNumbers = contactNumberMap.has(jsonObj.contactId) ? contactNumberMap.get(jsonObj.contactId) : []; + jsonObj.setShowName(); + resultList.push(jsonObj); + }; + callBack(resultList); + }, + + /** + * 获取联系人详细数据 + * + * @param {string} DAHelper 数据库路径 + * @param {Object} contactId 联系人数据id + * @param {Object} callback 联系人详情 + */ + getContactById: async function (DAHelper?, contactId?, callback?) { + let res = { + 'data': {} + }; + let contact = await ContactRepository.getInstance().findById(contactId); + if (contact == undefined || ArrayUtil.isEmpty(contact.rowContacts)) { + callback(res); + return; + } + let contactDetailInfo: any = {}; + for (let dataItem of contact.rowContacts[0].dataItems) { + this.dealResult(dataItem, contactDetailInfo); + } + contactDetailInfo.id = contact.rowContacts[0].id; + res.data = contactDetailInfo; + callback(res); + }, + + /** + * 处理联系人详细数据 + * + * @param {Object} resultSet 结果集 + * @param {Object} contactDetailInfo 联系人详情数据 + * @param {Object} actionData 联系人数据 + */ + dealResult: function (dataItem: DataItem, contactDetailInfo) { + switch (dataItem.getContentTypeId()) { + case DataItemType.NAME: + contactDetailInfo.display_name = dataItem.getData(); + break; + case DataItemType.PHONE: + let phone_element = { + 'num': dataItem.getData(), + 'id': dataItem.getLabelId(), + 'numType': dataItem.getLabelName() + }; + if (contactDetailInfo.phones) { + contactDetailInfo.phones.push(phone_element); + } else { + contactDetailInfo.phones = [phone_element]; + } + break; + case DataItemType.EMAIL: + let email_element = { + 'address': dataItem.getData(), + 'id': dataItem.getLabelId(), + 'emailType': dataItem.getLabelName() + }; + if (contactDetailInfo.emails) { + contactDetailInfo.emails.push(email_element); + } else { + contactDetailInfo.emails = [email_element]; + } + break; + case DataItemType.NOTE: + contactDetailInfo.remarks = dataItem.getData(); + break; + case DataItemType.ORGANIZATION: + contactDetailInfo.position = dataItem.values.get(Data.POSITION); + contactDetailInfo.company = dataItem.getData(); + break; + case DataItemType.IM: + let aim_element = { + 'aimName': dataItem.getData(), + 'aimId': dataItem.getLabelId(), + 'aimType': dataItem.getLabelName() + }; + if (contactDetailInfo.aims) { + contactDetailInfo.aims.push(aim_element); + } else { + contactDetailInfo.aims = [aim_element]; + } + break; + case DataItemType.STRUCTURED_POSTAL: + let house_element = { + 'houseName': dataItem.getData(), + 'houseId': dataItem.getLabelId(), + 'houseType': dataItem.getLabelName() + }; + if (contactDetailInfo.houses) { + contactDetailInfo.houses.push(house_element); + } else { + contactDetailInfo.houses = [house_element]; + } + break; + case DataItemType.GROUP_MEMBERSHIP: + contactDetailInfo.nickname = dataItem.getData(); + break; + case DataItemType.EVENT: + let event_element = { + 'id': "", + 'data': dataItem.getData(), + 'eventType': dataItem.getLabelId(), + 'eventName': dataItem.getLabelName() + }; + if (contactDetailInfo.events) { + contactDetailInfo.events.push(event_element); + } else { + contactDetailInfo.events = [event_element]; + } + break; + case DataItemType.WEBSITE: + let website_element = dataItem.getData(); + if (contactDetailInfo.websites) { + contactDetailInfo.websites.push(website_element); + } else { + contactDetailInfo.websites = [website_element]; + } + break; + case DataItemType.RELATION: + let relation_element = { + 'id': '', + 'associatedPersonId': dataItem.getData(), + 'name': dataItem.getLabelName(), + 'associatedType': dataItem.getLabelId(), + }; + if (contactDetailInfo.relationships) { + contactDetailInfo.relationships.push(relation_element); + } else { + contactDetailInfo.relationships = [relation_element]; + } + break; + } + }, + + /** + * 查询所有联系人手机号 + * + * @param {string} DAHelper 数据库地址 + */ + getAllContactNumbers: async function (DAHelper) { + if (DAHelper == undefined || DAHelper.length == 0) { + DAHelper = featureAbility.acquireDataAbilityHelper(Constants.uri.CONTACT_DB_URI); + } + let resultColumns = ['raw_contact_id', 'detail_info', 'extend7']; // extend7代表labelId + let conditionArgs = new dataAbility.DataAbilityPredicates(); + conditionArgs.equalTo('type_id', '5').orderByAsc('raw_contact_id'); + let resultSet = await DAHelper.query(Constants.uri.CONTACT_DATA_URI, resultColumns, conditionArgs); + if (Utils.isEmpty(resultSet) || resultSet.rowCount == 0) { + HiLog.i(TAG, 'getAllContactNumbers-Selectcontacts Model getAllContactNumbers resultSet is empty!'); + return new Map(); + } + let contactNumberMap = new Map(); // 用于存储联系人及其电话号码的对应关系 + resultSet.goToFirstRow(); + let oldContact = resultSet.getString(0); + let numberList = []; + do { + let newContact = resultSet.getString(0); + if (oldContact == String(newContact)) { // 如果是同一联系人则把手机号放到同一个list中 + numberList.push({ + 'phoneNumber': resultSet.getString(1), + 'labelId': resultSet.getString(2) + }); + } else { + // 联系人变化时,存储联系人与手机号码列表的对应关系 + contactNumberMap.set(oldContact, numberList); + oldContact = newContact; + // 将最新的号码数据存储到新的numberList + numberList = [{ + 'phoneNumber': resultSet.getString(1), + 'labelId': resultSet.getString(2) + }]; + } + } while (resultSet.goToNextRow()); + contactNumberMap.set(oldContact, numberList); + return contactNumberMap; + }, + + /** + * 通过电话号码获取该号码的联系人id + * + * @param {string} DAHelper 数据库地址 + * @param {string} number 手机号号码 + * @param {Object} callBack 联系人Id + */ + getContactIdByNumber: async function (DAHelper, number, callBack) { + if (DAHelper == undefined || DAHelper.length == 0) { + DAHelper = featureAbility.acquireDataAbilityHelper(Constants.uri.CONTACT_DB_URI); + } + if (Utils.isEmpty(number)) { + return; + } + let resultColumns = [ + 'raw_contact_id', + ]; + let cleanNumber = Utils.removeSpace(number); + let condition = new dataAbility.DataAbilityPredicates(); + condition.equalTo('detail_info', cleanNumber); + condition.and(); + condition.equalTo('is_deleted', 0); + condition.and(); + condition.equalTo('type_id', '5'); + let resultSet = await DAHelper.query(Constants.uri.CONTACT_DATA_URI, resultColumns, condition); + if (Utils.isEmpty(resultSet) || resultSet.rowCount == 0) { + HiLog.i(TAG, 'getContactIdByNumber-contactId resultSet is empty!'); + callBack(); + return; + } + resultSet.goToFirstRow(); + let contactId = resultSet.getString(0); + resultSet.close(); + callBack(contactId); + }, + + /** + * 编辑联系人信息 + * + * @param {string} DAHelper 数据库路径 + * @param {Object} addParams 联系人信息 + * @param {Object} callBack 联系人ID + */ + updateContact: async function (DAHelper, addParams, callBack) { + if (DAHelper == undefined || DAHelper.length == 0 || DAHelper == null) { + DAHelper = featureAbility.acquireDataAbilityHelper(Constants.uri.CONTACT_DB_URI); + } + let condition = new dataAbility.DataAbilityPredicates(); + condition.equalTo('raw_contact_id', addParams.id); + DAHelper.delete( + Constants.uri.CONTACT_DATA_URI, + condition, + ).then(data => { + this.dealParam(DAHelper, addParams); + callBack(addParams.id); + }).catch(error => { + HiLog.e(TAG, 'updateContact-update contact error: %s', error); + callBack(addParams.id); + }); + }, + /** + * 根据电话号码查id + * + * @param {string} DAHelper 数据库路径 + * @param {string} addParams 电话号码 + * @param {Object} callBack 联系人ID数组 + */ + getIdByTelephone: async function (DAHelper, number, callBack) { + if (DAHelper == undefined || DAHelper.length == 0) { + DAHelper = featureAbility.acquireDataAbilityHelper(Constants.uri.CONTACT_DB_URI); + } + let condition = new dataAbility.DataAbilityPredicates(); + condition.equalTo('detail_info', number) + .and() + .equalTo('type_id', 5); + let columns = ["raw_contact_id"]; + let data_row = await DAHelper.query(Constants.uri.CONTACT_DATA_URI, columns, condition) + data_row.goToFirstRow(); + let resultList = []; + let maxRows = data_row.rowCount; + let tempIndex = data_row.rowCount; + if (data_row.rowCount <= 0) { + data_row.close(); + callBack(resultList); + } + let index = 0; + do { + resultList.push(data_row.getString(data_row.getColumnIndex("raw_contact_id"))); + if ((++index) >= maxRows) { + data_row.close(); + callBack(resultList); + } + if (!data_row.goToNextRow()) { + break; + } + } while ((--tempIndex) >= 0) + data_row.close(); + }, +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/model/bean/AIMBean.ets b/entry/src/main/ets/MainAbility/model/bean/AIMBean.ets new file mode 100644 index 0000000..12a6685 --- /dev/null +++ b/entry/src/main/ets/MainAbility/model/bean/AIMBean.ets @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export class AIMBean{ + id: string; // 联系人id主键 + aimId : string;//aimId + aimType : string ;//AIM类型(qq 微博,雅虎等 ) + aimName : string;//AIM内容 + + constructor(id: string,aimId:string,aimType: string, aimName: string) { + this.id = id; + this.aimId = aimId; + this.aimType = aimType; + this.aimName = aimName; + } + +} diff --git a/entry/src/main/ets/MainAbility/model/bean/AssociatedPersonBean.ets b/entry/src/main/ets/MainAbility/model/bean/AssociatedPersonBean.ets new file mode 100644 index 0000000..f750104 --- /dev/null +++ b/entry/src/main/ets/MainAbility/model/bean/AssociatedPersonBean.ets @@ -0,0 +1,27 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export class AssociatedPersonBean{ + id:string + associatedPersonId:string + name: string + associatedType: string + constructor(id:string, associatedPersonId:string, name: string, associatedType: string){ + this.id = id; + this.associatedPersonId = associatedPersonId; + this.name = name; + this.associatedType = associatedType; + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/model/bean/CallBean.ets b/entry/src/main/ets/MainAbility/model/bean/CallBean.ets new file mode 100644 index 0000000..6b74fa5 --- /dev/null +++ b/entry/src/main/ets/MainAbility/model/bean/CallBean.ets @@ -0,0 +1,103 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export class CallBean { + readonly id: string ; + phone: string ; + name: string ; + callTime: string ; + // 通话类型:1呼入,2呼出,3未接,5拒接 + callType: string ; + // 号码归属地 + callTag: string ; + // 通话SIM卡,0:卡1, 1:卡2 + simType: string ; + // 是否高清通话 true:高清通话,false:非高清通话 + isHd: string ; + // 格式化电话号码 + formatNumber: string ; + // 联系人id + contactKey: string ; + // 呼叫次数 + num: string; + // 是否被选中,默认 false + isChecked: boolean = false; + portraitColor: string; + suffix: string; + constructor(id: string, phone: string) { + this.id = id; + this.phone = phone; + } + + setName(name: string): CallBean { + this.name = name; + return this; + } + + setCallTime(callTime: string) { + this.callTime = callTime; + return this; + } + + setCallType(callType: string) { + this.callType = callType; + return this; + } + + setCallTag(callTag: string) { + this.callTag = callTag; + return this; + } + + setSimType(simType: string) { + this.simType = simType; + return this; + } + + setIsHd(isHd: string) { + this.isHd = isHd; + return this; + } + + setFormatNumber(formatNumber: string) { + this.formatNumber = formatNumber; + return this; + } + + setContactKey(contactKey: string) { + this.contactKey = contactKey; + return this; + } + + setNum(num: string) { + this.num = num; + return this; + } + + setIsChecked(isChecked: boolean) { + this.isChecked = isChecked; + return this; + } + + setPortraitColor(portraitColor: string) { + this.portraitColor = portraitColor; + return this; + } + + setSuffix(suffix: string) { + this.suffix = suffix; + return this; + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/model/bean/CallLogBean.ets b/entry/src/main/ets/MainAbility/model/bean/CallLogBean.ets new file mode 100644 index 0000000..3be2adc --- /dev/null +++ b/entry/src/main/ets/MainAbility/model/bean/CallLogBean.ets @@ -0,0 +1,34 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * 通话记录对象(详情页面) + */ +let NextId = 0; +export class CallLogBean{ + id: string ; + time: string ; + action: string ; + calledNumber: string ; + status: string ; + + constructor(time: string, action: string, calledNumber: string, status: string){ + this.id = `${NextId++}`; + this.time = time; + this.action = action; + this.calledNumber = calledNumber; + this.status = status; + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/model/bean/ContactBean.ets b/entry/src/main/ets/MainAbility/model/bean/ContactBean.ets new file mode 100644 index 0000000..f57c8ce --- /dev/null +++ b/entry/src/main/ets/MainAbility/model/bean/ContactBean.ets @@ -0,0 +1,137 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import {EmailBean} from './EmailBean'; +import {RemDayBean} from './RemDayBean'; +import {AssociatedPersonBean} from './AssociatedPersonBean'; +import {AIMBean} from './AIMBean'; +import {HouseBean} from './HouseBean'; +import {GroupBean} from './GroupBean'; +import {PhoneNumBean} from './PhoneNumBean'; + +export class ContactBean { + /** + * 联系人id主键 + */ + id: string; + + /** + * 联系人姓名 + */ + name: string; + + /** + * 公司 + */ + company: string; + + /** + * 职位 + */ + position: string; + + + // 电话列表// 邮箱列表// 昵称// 网站列表// 生日和纪念日// 铃声// 关联人// 备注// 通话记录 + + /** + * 手机号列表 + */ + phoneNumList: PhoneNumBean[]; + + /** + * 邮箱列表 + */ + emailBeanList: EmailBean[]; + + /** + * 昵称 + */ + nickName: string + + /** + * 网站列表 + */ + webSitList: string[] + + /** + * 纪念日列表 + */ + remembranceDayList: RemDayBean[] + + /** + * 铃声 + */ + ringtone: string + + /** + * 关联人列表 + */ + associatedPersonList: AssociatedPersonBean[] + + /** + * 备注 + */ + remarks: string + + /** + * AIM列表 + */ + aimList: AIMBean[] + + /** + * 住址列表 + */ + houseList: HouseBean[] + + /** + * 群组列表 + */ + groupList: GroupBean[] + + // 二维码 背景色 铃声id 拼音名 + + constructor( + id: string, + name: string, + company: string, + position: string, + phoneNumList: PhoneNumBean[], + emailBeanList: EmailBean[], + nickName: string, + webSitList: string[], + remembranceDayList: RemDayBean[], + ringtone: string, + associatedPersonList: AssociatedPersonBean[], + remarks: string, + aimList: AIMBean[], + houseList: HouseBean[], + groupList: GroupBean[]) { + this.id = id; + this.name = name; + this.company = company; + this.position = position; + this.phoneNumList = phoneNumList; + this.emailBeanList = emailBeanList; + this.nickName = nickName; + this.webSitList = webSitList; + this.remembranceDayList = remembranceDayList; + this.ringtone = ringtone; + this.associatedPersonList = associatedPersonList; + this.remarks = remarks; + this.aimList = aimList; + this.houseList = houseList; + this.groupList = groupList; + } +} diff --git a/entry/src/main/ets/MainAbility/model/bean/ContactInfo.ets b/entry/src/main/ets/MainAbility/model/bean/ContactInfo.ets new file mode 100644 index 0000000..ee8546b --- /dev/null +++ b/entry/src/main/ets/MainAbility/model/bean/ContactInfo.ets @@ -0,0 +1,131 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import {PhoneNumBean} from "../bean/PhoneNumBean" +import {EmailBean} from "../bean/EmailBean" +import {AIMBean} from "../bean/AIMBean" +import {HouseBean} from "../bean/HouseBean" +import {GroupBean} from "../bean/GroupBean" +import {EventBean} from "../bean/EventBean" +import {AssociatedPersonBean} from "../bean/AssociatedPersonBean" + +export class ContactInfo { + id: string; // 联系人id主键 + display_name: string; // 联系人姓名 + nickname: string; // 昵称 + // phonetic_name: string; // 拼音名字 + phones: PhoneNumBean[]; //手机号 类别等 + emails: EmailBean []; //邮箱类别等 + remarks: string; // 备注 + position: string; // 职位 + company: string; // 公司 + aims: AIMBean[]; //AIM类别等 + houses: HouseBean[]; //住宅类别等 + websites: string[]; // 网站博客等 + relationships: AssociatedPersonBean[]; //助理 依次增加 + events: EventBean[]; + groups: GroupBean[]; + + constructor(id: string, display_name: string, + nickname: string, phones: PhoneNumBean[], + emails: EmailBean[], position: string, company: string, remarks: string, + aims: AIMBean[], houses: HouseBean[], websites: string[], + relationships: AssociatedPersonBean[], events: EventBean[], groups: GroupBean[]) { + this.id = id; + this.display_name = display_name; + this.nickname = nickname; + this.phones = phones; + this.emails = emails; + this.position = position; + this.company = company; + this.remarks = remarks; + this.aims = aims; + this.houses = houses; + this.websites = websites; + this.relationships = relationships; + this.events = events; + this.groups = groups; + } + + setID(id: string) { + this.id = id; + return this; + } + + setDisplayName(display_name: string) { + this.display_name = display_name; + return this; + } + + setNickName(nickname: string) { + this.nickname = nickname; + return this; + } + + setPhones(phones: PhoneNumBean[]) { + this.phones = phones; + return this; + } + + setEmails(emails: EmailBean[]) { + this.emails = emails; + return this; + } + + setRemarks(remarks: string) { + this.remarks = remarks; + return this; + } + + setPosition(position: string) { + this.position = position; + return this; + } + + setCompany(company: string) { + this.company = company; + return this; + } + + setAims(aims: AIMBean[]) { + this.aims = aims; + return this; + } + + setHouses(houses: HouseBean[]) { + this.houses = houses; + return this; + } + + setWebsites(websites: string[]) { + this.websites = websites; + return this; + } + + setRelationships(relationships: AssociatedPersonBean[]) { + this.relationships = relationships; + return this; + } + + setEvents(events: EventBean[]) { + this.events = events; + return this; + } + + setGroups(groups: GroupBean[]) { + this.groups = groups; + return this; + } +} diff --git a/entry/src/main/ets/MainAbility/model/bean/ContactVo.ets b/entry/src/main/ets/MainAbility/model/bean/ContactVo.ets new file mode 100644 index 0000000..5e681f0 --- /dev/null +++ b/entry/src/main/ets/MainAbility/model/bean/ContactVo.ets @@ -0,0 +1,87 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import Utils from '../../util/Utils'; + +/** + * 联系人列表 数据结构实体 + */ +export class ContactVo { + contactId: any; + //名字前缀 + namePrefix: string; + //名字 + emptyNameData: string; + // 公司 + company: string; + // 地址 + position: string; + //图片颜色 + portraitColor: string; + show: boolean; + //图片地址 + portraitPath: string; + nameSuffix: string; + phoneNum: string; + showName: string; + phoneNumbers: any[]; + name: NameVo; + constructor(contactId: string, + namePrefix: string, + emptyNameData: string, + company: string, + position: string, + portraitColor: string, + show: boolean, + portraitPath: string, + phoneNum: string + ) { + this.contactId = contactId; + this.namePrefix = namePrefix; + this.emptyNameData = emptyNameData; + this.company = company; + this.position = position; + this.portraitColor = portraitColor; + this.show = show; + this.portraitPath = portraitPath; + this.phoneNum = phoneNum; + } + + public setShowName() { + this.showName = !Utils.isEmpty(this.emptyNameData) ? this.emptyNameData : (!Utils.isEmpty(this.company) ? this.company : (!Utils.isEmpty(this.position) ? this.position : "")) + } + + public setName(emptyNameData: string, namePrefix: string, nameSuffix: string) { + this.name = new NameVo(emptyNameData, namePrefix, nameSuffix); + } + + public setphoneNumbers(phoneNumbers: any[]) { + this.phoneNumbers = phoneNumbers; + } +} + +export class NameVo { + fullName: string; + namePrefix: string; + nameSuffix: string; + searchTextStart:string; + searchTextMiddle:string; + searchTextEnd:string; + constructor(emptyNameData: string, namePrefix: string, nameSuffix: string) { + this.fullName = emptyNameData; + this.namePrefix = namePrefix; + this.nameSuffix = nameSuffix; + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/model/bean/EmailBean.ets b/entry/src/main/ets/MainAbility/model/bean/EmailBean.ets new file mode 100644 index 0000000..bbd4ae0 --- /dev/null +++ b/entry/src/main/ets/MainAbility/model/bean/EmailBean.ets @@ -0,0 +1,28 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * 邮箱对象 + */ +export class EmailBean{ + id:string + address: string + emailType: string + constructor(id:string,address: string, emailType: string){ + this.id = id; + this.address = address; + this.emailType = emailType; + } +} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/index_demo/index.css b/entry/src/main/ets/MainAbility/model/bean/EventBean.ets similarity index 61% rename from entry/src/main/js/default/pages/index_demo/index.css rename to entry/src/main/ets/MainAbility/model/bean/EventBean.ets index 1c963c4..b944672 100644 --- a/entry/src/main/js/default/pages/index_demo/index.css +++ b/entry/src/main/ets/MainAbility/model/bean/EventBean.ets @@ -1,5 +1,5 @@ /** - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -12,23 +12,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -.container { - flex-direction: column; - width: 100%; - height: 100%; - justify-content: space-around; - align-items: center; -} -.test-button { - width: 400px; - height: 60px; - font-size: 30px; -} +export class EventBean{ + id: string; + data :string; + eventType:string; + eventName:string; -.dialog-class { - width: 80%; - height: 200px; - justify-content: center; - align-items: center; -} \ No newline at end of file + constructor(id: string, data: string, eventType: string, eventName: string) { + this.id = id; + this.data = data; + this.eventType = eventType; + this.eventName = eventName; + } + +} diff --git a/entry/src/main/ets/MainAbility/model/bean/GroupBean.ets b/entry/src/main/ets/MainAbility/model/bean/GroupBean.ets new file mode 100644 index 0000000..06b30c6 --- /dev/null +++ b/entry/src/main/ets/MainAbility/model/bean/GroupBean.ets @@ -0,0 +1,28 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export class GroupBean { + id: string; // 联系人id主键 + groupId: string; //群組Id + groupType: string ; //AIM类型(qq 微博,雅虎等 ) + groupName: string; //AIM内容 + + constructor(id: string, groupId: string, groupType: string, groupName: string) { + this.id = id; + this.groupId = groupId; + this.groupType = groupType; + this.groupName = groupName; + } +} diff --git a/entry/src/main/ets/MainAbility/model/bean/HouseBean.ets b/entry/src/main/ets/MainAbility/model/bean/HouseBean.ets new file mode 100644 index 0000000..893c8ea --- /dev/null +++ b/entry/src/main/ets/MainAbility/model/bean/HouseBean.ets @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export class HouseBean{ + id: string; // 联系人id主键 + houseId :string;//住宅Id + houseType:string;//住宅类别 + houseName:string;//住宅地址 + + constructor(id: string,houseId: string, houseType: string, houseName: string) { + this.id = id; + this.houseId = houseId; + this.houseType = houseType; + this.houseName = houseName; + } + +} diff --git a/entry/src/main/js/default/pages/contacts/settings/about/license/license.js b/entry/src/main/ets/MainAbility/model/bean/LooseObject.ets similarity index 65% rename from entry/src/main/js/default/pages/contacts/settings/about/license/license.js rename to entry/src/main/ets/MainAbility/model/bean/LooseObject.ets index 3322643..a34fe90 100644 --- a/entry/src/main/js/default/pages/contacts/settings/about/license/license.js +++ b/entry/src/main/ets/MainAbility/model/bean/LooseObject.ets @@ -1,14 +1,10 @@ /** - * @file License group - */ - -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http:// www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -16,16 +12,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import router from '@system.router'; -export default { - data: { - }, - - onInit() { - }, - - back: function () { - router.back(); - } -}; \ No newline at end of file +/** + * 通用数据接口,用于接收数据的载体,避免重复定义数据结构; + */ +export default interface LooseObject { + [key: string]: any +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/model/bean/PhoneNumBean.ets b/entry/src/main/ets/MainAbility/model/bean/PhoneNumBean.ets new file mode 100644 index 0000000..a143871 --- /dev/null +++ b/entry/src/main/ets/MainAbility/model/bean/PhoneNumBean.ets @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * 电话号码对象 + */ +export class PhoneNumBean{ + id:string + num: string + numType: string // 号码类型:手机,住宅 + homeArea: string // 归属地 + carriers: string // 运营商 + constructor(id:string, num: string, numType: string,homeArea: string, carriers: string){ + this.id = id; + this.num = num; + this.numType = numType; + this.homeArea = homeArea; + this.carriers = carriers; + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/model/bean/RelationBean.ets b/entry/src/main/ets/MainAbility/model/bean/RelationBean.ets new file mode 100644 index 0000000..99a1a27 --- /dev/null +++ b/entry/src/main/ets/MainAbility/model/bean/RelationBean.ets @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * 关系人对象 + */ +export class RelationBean{ + id: string; // 联系人id主键 + relationId :string;//关系人Id + relationType:string;//关系人类别 + relationName:string;//关系人地址 + + constructor(id: string,relationId: string, relationType: string, relationName: string) { + this.id = id; + this.relationId = relationId; + this.relationType = relationType; + this.relationName = relationName; + } + +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/model/bean/RemDayBean.ets b/entry/src/main/ets/MainAbility/model/bean/RemDayBean.ets new file mode 100644 index 0000000..f4cab3e --- /dev/null +++ b/entry/src/main/ets/MainAbility/model/bean/RemDayBean.ets @@ -0,0 +1,30 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * 纪念日对象 + */ +export class RemDayBean{ + id: string + remDayId: string + data: string + remDayType: string + constructor(id: string, remDayId: string, data: string, remDayType: string){ + this.id = id; + this.remDayId = remDayId; + this.data = data; + this.remDayType = remDayType; + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/model/calllog/CalllogModel.ets b/entry/src/main/ets/MainAbility/model/calllog/CalllogModel.ets new file mode 100644 index 0000000..7e5a701 --- /dev/null +++ b/entry/src/main/ets/MainAbility/model/calllog/CalllogModel.ets @@ -0,0 +1,138 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import featureAbility from '@ohos.ability.featureAbility'; +import ArrayUtil from '../../util/ArrayUtil'; +import HiLog from '../../util/HiLog'; +import CallLog from '../../call/entity/CallLog'; +import {CallType} from '../../call/entity/CallLog'; +import CallLogRepository from '../../call/repo/CallLogRepository'; +import CallLogService from '../../call/CallLogService'; +import CallLogBuilder from '../../call/entity/CallLogBuilder'; + +featureAbility:featureAbility; +const TAG = 'calllogModel'; + +export default { + // 插入一条测试通话记录 + testInsertCallLog: function () { + let phoneNumbers = ['18071712413', '18772362656', '13720249349', '18161845409']; + let formatPhoneNumbers = ['180 7171 2413', '187 7236 2656', '137 2024 9349', '181 6184 5409']; + let contactName = ['李四', 'Tom', '铃南', '']; + let contactId = ['1', '2', '3', '']; + let callTypes = [0, 1]; + let answerStatus = [0, 1, 2]; + let numIndex = Math.floor(Math.random() * 4); + let typeIndex = Math.floor(Math.random() * 2); + let answerindex = Math.floor(Math.random() * 3); + let now = new Date(); + let timestamp = now.getTime(); + + let callLogBuilder = new CallLogBuilder(0, phoneNumbers[numIndex]); + callLogBuilder.setDisplayName(contactName[numIndex]) + .setCallDirection(callTypes[typeIndex]) + .setRingDuration(123456) + .setTalkDuration(123456) + .setFormattedNumber(formatPhoneNumbers[numIndex]) + .setQuickSearchKey(contactId[numIndex]) + .setAnswerState(answerStatus[answerindex]) + .setCreateTime(1641779105) + .setNumberLocation("江苏无锡"); + let repo = CallLogRepository.getInstance(); + repo.saveOne(new CallLog(callLogBuilder)).then(data => { + console.info('testInsertCallLog logMessage Insert calllog result success! '); + }).catch(error => { + console.info('testInsertCallLog' + 'logMessage insert error:' + error); + }); + }, + + /** + * 获取全量(2000条)通话记录,并缓存 + * + * @param {string} DAHelper 数据库路径 + * @param {string} mergeRule 通话记录类型 + * @param {Object} callBack 通话记录数据 + */ + getAllCalls: async function (DAHelper, mergeRule, callBack) { + let resultData = { + callLogList: [], missedList: [], totalCount: 0, missedCount: 0 + }; + let callLogs = await CallLogRepository.getInstance().findAll(); + if (ArrayUtil.isEmpty(callLogs)) { + HiLog.i(TAG, 'getAllCalls logMessage callLog resultSet is empty!'); + resultData.callLogList = []; + resultData.missedList = []; + resultData.totalCount = 0; + resultData.missedCount = 0; + callBack(resultData); + return; + } + + let callLogList: CallLog[] = []; + let missedList: CallLog[] = []; + for (let callLog of callLogs) { + callLogList.push(callLog); + if (callLog.callType == CallType.MISSED || + callLog.callType == CallType.REJECTED) { + missedList.push(callLog); // 过滤未接来电数据 + let timeList = []; + if (mergeRule == 'from_contact') { // 过滤按联系人未接电话后又重拨出 + for (let k = 0; k < missedList.length; k++) { + let missedPhone = missedList[k].phoneNumber; + for (let i = 0; i < callLogList.length; i++) { + let allSpecialPhone = callLogList[i].phoneNumber; + if (missedPhone == allSpecialPhone) { + let timeNumber = callLogList[i].createTime; + let obj = { + 'id': i, + 'timeObj': timeNumber, + }; + timeList.push(obj); + let max = timeList[0].timeObj; + for (let j = 0; j < timeList.length; j++) { + if (timeList[j].timeObj > max) { + max = timeList[j].timeObj; + let n = timeList[j].id; + if (callLogList[n].callType == CallType.OUT) { + missedList.splice(k, 1); + } + } else { + let m = timeList[0].id; + if (callLogList[m].callType == CallType.OUT) { + missedList.splice(k, 1); + } + } + } + } + } + } + } + } + } + // 合并规则 + if (mergeRule == 'from_contact') { + resultData.callLogList = CallLogService.getInstance().mergeByContact(callLogList); + resultData.missedList = CallLogService.getInstance().mergeByContact(missedList); + resultData.totalCount = resultData.callLogList.length; + resultData.missedCount = resultData.missedList.length; + } else { + resultData.callLogList = CallLogService.getInstance().mergeByTime(callLogList); + resultData.missedList = CallLogService.getInstance().mergeByTime(missedList); + resultData.totalCount = callLogs.length; + resultData.missedCount = missedList.length; + } + callBack(resultData); + }, +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/model/common.ets b/entry/src/main/ets/MainAbility/model/common.ets new file mode 100644 index 0000000..5b4ae69 --- /dev/null +++ b/entry/src/main/ets/MainAbility/model/common.ets @@ -0,0 +1,36 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import featureAbility from '@ohos.ability.featureAbility'; +import file from '@system.file'; + +export default { + featureAbility: featureAbility, + getDAHelper: function (URL) { + let DAHelper = featureAbility.acquireDataAbilityHelper(URL); + return DAHelper; + }, + toStrings:function(calllogList){ + var liststring =''; + calllogList.forEach(element => { + liststring += '{ '; + for(var key in element){ + liststring += key + ':' + element[key] + ' '; + } + liststring += ' }'; + }); + return liststring; + }, +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/model/common/Constants.ets b/entry/src/main/ets/MainAbility/model/common/Constants.ets new file mode 100644 index 0000000..86232cb --- /dev/null +++ b/entry/src/main/ets/MainAbility/model/common/Constants.ets @@ -0,0 +1,80 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export enum DeviceType { + PHONE, + WGR +} + +export default { + uri: { + CALLLOG_DB_URI: 'dataability:///com.ohos.calllogability', // 通话记录数据库uri,用于获取通话记录数据库DAHelper + CALLS_URI_PREFIX: 'dataability:///com.ohos.calllogability/calls/', // 查询calls库各种表uri前缀 + CALL_LOG_URI: 'dataability:///com.ohos.calllogability/calls/calllog', // 通话记录表操作uri + + CONTACT_DB_URI: 'dataability:///com.ohos.contactsdataability', // 连接联系人数据库的uri,用于获取联系人数据库DAHelper + CONTACTS_URI_PREFIX: 'dataability:///com.ohos.contactsdataability/contacts/', // 查询contacts库各种表uri前缀 + CONTACT_URI: 'dataability:///com.ohos.contactsdataability/contacts/contact', + ROW_CONTACTS_URI: 'dataability:///com.ohos.contactsdataability/contacts/raw_contact', // 对raw_contacts表操作的uri + CONTACT_DATA_URI: 'dataability:///com.ohos.contactsdataability/contacts/contact_data', // 对contact_data表操作的uri + CONTACT_TYPE_URI: 'dataability:///com.ohos.contactsdataability/contacts/contact_type', + SEARCH_CONTACT_URI: 'dataability:///com.ohos.contactsdataability/contacts/search_contact', + GROUPS_URI: 'dataability:///com.ohos.contactsdataability/contacts/groups', + PROFILE_ROW_CONTACTS_URI: 'dataability:///com.ohos.contactsdataability/profile/raw_contact', // 我的名片raw_contact表操作uri + PROFILE_CONTACT_DATA_URI: 'dataability:///com.ohos.contactsdataability/profile/contact_data', // 我的名片contact_data表操作的uri + + VOICEMAIL_DB_URI: 'dataability:///com.ohos.voicemailability', // 连接语音信箱数据库的uri,用于获取语音信箱数据库DAHelper + VOICEMAIL_URI_PREFIX: 'dataability:///com.ohos.voicemailability/calls/', // 查询voicemail库各种表uri前缀 + VOICEMAIL_URI: 'dataability:///com.ohos.voicemailability/calls/voicemail' + }, + background: { + // 头像背景颜色 + Color: ['#98D4EF', '#9CC998', '#E8889C', '#C891F1', '#F9C273', '#92D6CC'], + // 详情页背景色 + detailColor: ['#DAEFF9', '#E9F3E8', '#FAD9E0', '#EEDAFD', '#FDECD2', '#DFF5F2'], + }, + int: { + // 查询数据库返回结构 + SUCCESS: 0, + FAILED: -1, + ZERO: 0 + }, + string: { + // 轻量级数据库文件名 + PATH_OF_PREFERENCES: 'PREFERENCES_FOR_CONTACTS', + // 是否是简洁布局 + CONCISE_LAYOUT_SWITCH: 'contacts_settings_concise_layout_switch', + // 查询联系人类型 + DISPLAY_ACCOUNT_RADIO: 'contacts_settings_display_account_radio', + // 自定义联系人视图 + CUSTOMIZE_VIEW_INPUT: 'contacts_settings_customize_view_input', + // 联系人数量 + CONTACTS_COUNT: 'contacts_count', + EMPTY_STR: '', + CALL_LOG_MERGE_RULE: 'call_log_merge_rule', + MMS_BUNDLE_NAME: "com.ohos.mms", + MMS_ABILITY_NAME: "com.ohos.mms.MainAbility", + MMS_ENTITIES: 'entity.system.home' + }, + bool: { + TRUE: true, + FALSE: false + }, + + deviceType: DeviceType.WGR +} + + + diff --git a/entry/src/main/ets/MainAbility/model/common/DbChangeHelper.ets b/entry/src/main/ets/MainAbility/model/common/DbChangeHelper.ets new file mode 100644 index 0000000..8d1e750 --- /dev/null +++ b/entry/src/main/ets/MainAbility/model/common/DbChangeHelper.ets @@ -0,0 +1,78 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import HiLog from '../../util/HiLog'; + +const TAG = 'DbChangeHelper ' + +/** + * 数据库改变监听辅助类 + */ +export default class DbChangeHelper { + private static sIinstance: DbChangeHelper; + + public static getInstance(): DbChangeHelper { + if (!DbChangeHelper.sIinstance) { + DbChangeHelper.sIinstance = new DbChangeHelper(); + } + return DbChangeHelper.sIinstance; + } + + /** + * notifychange 发出通知 + * + * @param dataAbilityHelper dataAbilityHelper + * @param uri 需要监听的表URI + */ + notifyChange(dataAbilityHelper, uri: string) { + dataAbilityHelper.notifyChange(uri, (err, data) => { + if (err) { + HiLog.e(TAG, "notifyChange failed because %s", JSON.stringify(err)); + return; + } + HiLog.i(TAG, "notifyChange success data : %s", JSON.stringify(data)) + }); + } + + /** + * registerDbChangeLister 注册数据库变化监听 + * + * @param dataAbilityHelper + * @param uri 监听的数据库URI + * @param callback 回调提供给调用者 + */ + registerDbChangeLister(dataAbilityHelper, uri: string, callback) { + HiLog.i(TAG, 'registerDbChangeLister uri : %s', uri); + dataAbilityHelper.on("dataChange", uri, (data) => { + HiLog.i(TAG, 'on success data : %s', JSON.stringify(data)) + callback(data) + }); + } + + /** + * unRegisterDbChangeLister 反注册数据库变化监听 + * + * @param dataAbilityHelper + * @param uri 监听的数据库URI + * @param callback 回调提供给调用者 + */ + unRegisterDbChangeLister(dataAbilityHelper, uri: string, callback) { + dataAbilityHelper.info(TAG + 'unRegisterDbChangeLister uri : ' + uri); + dataAbilityHelper.off("dataChange", uri, (data) => { + HiLog.i(TAG, 'on success data : %s', JSON.stringify(data)) + callback(data) + }); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/model/contactDetailModel.ets b/entry/src/main/ets/MainAbility/model/contactDetailModel.ets new file mode 100644 index 0000000..144107f --- /dev/null +++ b/entry/src/main/ets/MainAbility/model/contactDetailModel.ets @@ -0,0 +1,1074 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import Constants from './common/Constants'; +import Utils from '../util/Utils' +import callLogService from './calllog/CalllogModel'; +import common from './common'; +import HiLog from '../util/HiLog'; +import router from '@system.router'; +import ContactAbilityModel from './ContactAbilityModel' +import featureAbility from '@ohos.ability.featureAbility'; +import prompt from '@system.prompt'; +import LooseObject from '../model/bean/LooseObject' +import resourceManager from '@ohos.resourceManager'; +import Birthday from '../contact/contract/Birthday'; +import Relation from '../contact/contract/Relation'; +import House from '../contact/contract/House'; +import Aim from '../contact/contract/Aim'; +import Email from '../contact/contract/Email'; +import Phone from '../contact/contract/Phone'; +import CallLogRepository from '../call/repo/CallLogRepository'; +import ContactRepository from '../contact/repo/ContactRepository'; +import CallLog from '../call/entity/CallLog'; +import DbChangeHelper from '../model/common/DbChangeHelper'; + + +/** + * 联系人详情 逻辑 + */ + +var TAG = 'contactDetailModel'; + +const DELETE_CONTACT = 2003; // 删除联系人 +const GET_CONTACT_DETAIL = 2005; // 获取详情 + + +export default { + // 用作刷新的标签 + flash: 0, + // 更多选项menu + moreMenuOptions: [$r("app.string.delete_contact")], + // 短信跳转相关常量 + CONTRACTS: { + MMS_BUNDLE_NAME: "com.ohos.mms", + MMS_ABILITY_NAME: "com.ohos.mms.MainAbility", + MMS_ENTITIES: 'entity.system.home' + }, + // 信息的标签 + ITEMTAGS: { + TAG_TELLIST: 0, + TAG_EMAILLIST: 1, + TAG_AIMLIST: 2, + TAG_GIVENNAME: 3, + TAG_WEBSITELIST: 4, + TAG_HOUSELIST: 5, + TAG_REMEMBRANCEDAY: 6, + TAG_GROUP: 7, + TAG_PINYINNAME: 8, + TAG_ASSOCIATEDPERSON: 9, + TAG_REMARKS: 10, + }, + // 第一条信息的标签 + firstInfo: 0, + /** 展示头像 */ + showHeaderFlag: true, + /** Y坐标移动起始值 */ + pYStart: 0, + /** Y坐标移动值 */ + pYMove: 0, + /** 移动值计算 */ + directPoint: 0, + directPointTemp: 0, + /** 界面移动起始X坐标 */ + touchMoveStartX: 0, + /** 界面移动起始Y坐标 */ + touchMoveStartY: 0, + /** 收藏标记 */ + isFavorite: false, + /** 新号码传入的详情展示信息 */ + newNumberContactDetail: { + callTag: '' + }, + /** 展示MENU延时标记 */ + showMenuTimeOutId: '', + /** 长按电话号码对话框显示号码 */ + showPhoneNumber: '', + /** 联系人所有电话号码数 */ + phoneNumbersLength: 0, + /** 剪贴板内容 */ + copyToClipBoardContent: '', + /** 长按地址弹出dialog的title */ + postalAddressName: '', + /** 拨打电话的号码值 */ + sendNumber: '', + /** 删除通话记录索引值 */ + deleteIndex: '', + /** 长按电话号码的索引值 */ + numLongPressIndexIndex: 0, + /** 页面全局X坐标 */ + globalX: '', + /** 页面全局Y坐标 */ + globalY: '', + /** 用于按钮显示折叠后的showNameLast */ + showNameLastMenu: '', + /** 最终显示的头像未知的名称 */ + showNameLast: '', + /** 二维码string值 */ + qrcodeString: '', + + /** 根据联系人详情组装的展示用参数 */ + contactForm: { + phones: [], + emails: [], + aims: [], + nickname: '', + websites: [], + houses: [], + events: [], + remarks: '', + relationships: [], + pinYinName: '', + alphaName: '', + showGroupsString: '', + name: '', + display_name: '', + namePrefix: '', + lastName: '', + company: '', + position: '', + numRecords: [], + groups: [], + /** 底部显示新建联系人底部图标 */ + showNewContact: false, + isNewNumber: false, + }, + /** 联系人临时 */ + contacts: { + starred: 0, + contactId: 0, + organization: '', + id: '', + phones: [], + emails: [], + aims: [], + nickname: '', + websites: [], + houses: [], + events: [], + remarks: '', + relationships: [], + pinYinName: '', + alphaName: '', + showGroupsString: '', + name: { + fullName: '', + }, + display_name: '', + namePrefix: '', + lastName: '', + company: '', + position: '', + numRecords: [], + groups: [], + detailsBgColor: '', + portraitColor: '', + }, + emails: [ + { + 'id': 0, + 'address': '', + 'labelId': 1, + 'labelName': '', + 'showP': false + } + ], + events: [ + { + 'id': 0, + 'eventDate': '', + 'emailType': 3, + 'labelName': '', + 'showP': false, + 'showF': true, + 'showS': true + } + ], + aims: [ + { + 'aimId': 0, + 'aimName': '', + 'aimType': 1, + 'labelName': '', + 'showP': false + } + ], + phones: [ + { + 'id': 0, + 'numType': 2, + 'labelName': '', + 'num': '', + 'phoneAddress': '', + 'showP': false, + 'blueStyle': false, + 'isPrimary': 1 + } + ], + houses: [ + { + 'id': 0, + 'houseId': 1, + 'houseType': 1, + 'labelName': '', + 'houseName': '', + 'showP': false + } + ], + relationships: [ + { + 'id': 0, + 'associatedPersonId': 1, + 'name': '', + 'associatedType': '' + } + ], + websites: [ + { + 'id': 0, + 'website': '' + }, + ], + name: { + 'fullName': '', + 'givenName': '', + 'familyNamePhonetic': '', + 'alphaName': '' + }, + organization: { + 'name': '', + 'title': '' + }, + groups: [ + { + 'id': '', + 'title': '' + } + ], + numRecords: { + id: 2, + timeDetail: {}, + timeDetailDate: {}, + timeDetailAM: {}, + timeDetailTime: {}, + formatNumber: "", + talkTime: {}, + callType: 1 + }, + /** 是否是新的优化后的请求接口,新接口调用参照收藏页面跳转,增加该字段 */ + isNewSource: false, + /** 是否已经获取到contacts详情信息 */ + containContacts: false, + /** 电话号码显示默认 */ + showSetDefault: false, + /** 来自于通话记录跳转 */ + sourceFromCallRecord: false, + /** 新号码传入的电话号 */ + phoneNumberShow: '', + /** 联系人ID */ + contactId: '', + /** 是新号码 */ + isNewNumber: false, + + onShow(callback) { + // 优化后请求,新对接详情从该页面加载数据(群组,收藏,联系人列表从这里跳转) + if (this.isNewSource) { + HiLog.i(TAG, 'onShow:contact'); + let requestData = { + contactId: this.contactId + }; + this.getContactDetail(GET_CONTACT_DETAIL, requestData, () => { + callback(); + }); + } else if (this.containContacts) { + HiLog.i(TAG, 'onShow:add'); + // 新增编辑联系人后跳转至详情,contacts已经传入只加载通话记录 + this.dealRecordDetailsData(); + } else if (this.sourceFromCallRecord) { + HiLog.i(TAG, 'onShow:newNum'); + // 未添加联系人且来自于通话记录跳转 + // 1.根据电话号码查询联系人id + // 2.如果不存在联系人,则按照新号码处理,如果存在联系人,则根据第一个联系人id展示详情 + var DAHelper = common.getDAHelper(Constants.uri.CONTACT_DB_URI); + ContactAbilityModel.getIdByTelephone(DAHelper, this.phoneNumberShow, (contactId) => { + if (!Utils.isEmpty(contactId)) { + // 存在联系人时,将isNewNumber置为false + this.isNewNumber = false; + let requestData = { + contactId: contactId + }; + this.getContactDetail(GET_CONTACT_DETAIL, requestData); + } else { + // 不存在联系人id则按照新号码处理 + this.getDetailAsNewNumber(); + } + }); + } + HiLog.i(TAG, ' onShow detail'); + }, + + /* 没有联系人数据的情况下,显示电话号码的详情 */ + getDetailAsNewNumber() { + var numbers = [this.phoneNumberShow.replace(/\s+/g, '')]; + this.getNewNumRecords(numbers); + }, + + /** + * 清空通话记录弹窗 + */ + clearPhoneRecords() { + AlertDialog.show( + { + message: $r('app.string.clear_calllog_sure'), + alignment: DialogAlignment.Bottom, + autoCancel: false, + primaryButton: { + value: $r('app.string.cancel'), + action: () => { + } + }, + secondaryButton: { + value: $r('app.string.delete'), + fontColor: "#da1232", + action: () => { + this.clearRecordsMore(); + } + }, + cancel: () => { + HiLog.i(TAG, 'Closed callbacks') + }, + offset: { + dx: 0, dy: -15 + }, + } + ) + }, + + /** + * 删除联系人弹窗 + */ + deleteContact() { + AlertDialog.show( + { + message: $r('app.string.delete_contact_sure'), + alignment: DialogAlignment.Bottom, + autoCancel: false, + primaryButton: { + value: $r('app.string.cancel'), + action: () => { + } + }, + secondaryButton: { + value: $r('app.string.delete'), + fontColor: "#da1232", + action: () => { + HiLog.i(TAG, 'Callback when the second button is clicked') + this.doDeleteContact(); + } + }, + cancel: () => { + HiLog.i(TAG, 'Closed callbacks') + }, + offset: { + dx: 0, dy: -15 + }, + } + ) + }, + /** + * 删除联系人 + */ + doDeleteContact() { + ContactRepository.getInstance().deleteById(this.contactId).then((result) => { + if (result == 0) { + DbChangeHelper.getInstance().notifyChange(common.getDAHelper(Constants.uri.CONTACT_DB_URI), Constants.uri.CONTACT_URI); + router.back(); + } else { + prompt.showToast({ + message: 'contactDetail Failed to delete data.' + }); + } + }); + }, + /** + * 发送消息 + * + * @param {number} phoneNumber 手机号码 + * @param {string} name 姓名 + */ + sendMessage(phoneNumber, name) { + HiLog.i(TAG, 'sendMessage phoneNumber' + phoneNumber); + var params = []; + params.push({ + contactsName: name, + telephone: phoneNumber, + telephoneFormat: phoneNumber + }); + this.jumpToMms(params); + }, + + /** + * 跳转短信app + * + * @param {string} params 跳转参数 + */ + jumpToMms(params) { + let actionData: LooseObject = {}; + actionData.contactObjects = JSON.stringify(params); + actionData.pageFlag = 'conversation'; + let str = { + 'want': { + 'bundleName': this.CONTRACTS.MMS_BUNDLE_NAME, + 'abilityName': this.CONTRACTS.MMS_ABILITY_NAME, + 'parameters': actionData, + 'entities': [ + this.CONTRACTS.MMS_ENTITIES, + ] + }, + }; + HiLog.i(TAG, 'str' + JSON.stringify(str)); + featureAbility.startAbility(str).then((data) => { + HiLog.i(TAG, 'jumpToMms,str: ' + JSON.stringify(str)); + HiLog.i(TAG, 'jumpToMms,data: ' + data); + }).catch((error) => { + HiLog.e(TAG, 'jumpToMms,failed: ' + JSON.stringify(error)); + }) + }, + + /** 编辑联系人 */ + updateContact() { + if (Utils.isEmpty(this.contacts.emails)) { + this.contacts.emails = this.emails; + } + if (Utils.isEmpty(this.contacts.events)) { + this.contacts.events = this.events; + } + if (Utils.isEmpty(this.contacts.aims)) { + this.contacts.aims = this.aims; + } + if (Utils.isEmpty(this.contacts.phones)) { + this.contacts.phones = this.phones; + } + this.updateContacts(); + }, + + updateContacts() { + if (Utils.isEmpty(this.contacts.houses)) { + this.contacts.houses = this.houses; + } + if (Utils.isEmpty(this.contacts.relations)) { + this.contacts.relations = this.relations; + } + if (Utils.isEmpty(this.contacts.websites)) { + this.contacts.websites = this.websites; + } + if (Utils.isEmpty(this.contacts.groups)) { + this.contacts.groups = this.groups; + } + if (Utils.isEmpty(this.contacts.name)) { + this.contacts.name = this.name; + } + if (Utils.isEmpty(this.contacts.nickname)) { + this.contacts.nickname = this.nickname; + } + if (Utils.isEmpty(this.contacts.remarks)) { + this.contacts.remarks = this.remarks; + } + if (Utils.isEmpty(this.contacts.organization)) { + this.contacts.organization = this.organization; + } + let upDataShow = false; + if (!Utils.isEmpty(this.contactId)) { + upDataShow = true + } + router.replace({ + uri: 'pages/contacts/accountants/Accountants', + params: { + addShow: false, + updataShow: upDataShow, + showWork: true, + upHouseShow: true, + contactForm: this.contacts, + groups: this.contacts.groups, + upPinShow: true, + }, + }); + }, + + /**显示隐藏更多选项*/ + getMore() { + if (Boolean(this.contactForm.showMoreButton) == true) { + this.contactForm.showMoreButton = false; + } + this.dealRecordDetailsData(); + }, + + /** + * 将obj对象实现深拷贝 + * + * @param {Object} obj 联系人的contactForm + * @return {Object} 返回拷贝对象 + */ + copy(obj) { + return JSON.parse(JSON.stringify(obj)); + }, + + /** + * 获取联系人详细数据 + * + * @param {number} code 2005 FA与PA通行协议码 + * @param {number} data contactId 联系人ID + */ + getContactDetail(code, data, callback) { + HiLog.i(TAG, 'getContactDetail:' + data.contactId); + var DAHelper = common.getDAHelper(Constants.uri.CONTACT_DB_URI); + ContactAbilityModel.getContactById(DAHelper, data.contactId, result => { + if (Utils.isEmpty(result)) { + // 如果根据指定的id获取不到联系人,则按照新号码处理。 + this.getDetailAsNewNumber(); + return; + } + this.contacts = result.data; + this.contacts.portraitColor = Constants.background.Color[Math.abs(parseInt(result.data.id, 10)) % 6]; + this.contacts.detailsBgColor = Constants.background.detailColor[Math.abs(parseInt(result.data.id, 10)) % 6]; + this.dealRecordDetailsData(); + callback(); + }); + }, + + /** + * 请求后台:获取联系人详细数据,同时获取通话记录数据后对展示数据进行组装 + */ + dealRecordDetailsData() { + // 手机号码类型 + this.phoneNumberType(); + + // 电子邮箱类型 + this.emailType(); + + // 即时消息类型 + this.instantMessageType(); + + // 住宅类型 + this.residentialType(); + + // 生日类型 + this.eventsType(); + + // 关联人类型 + this.relationshipsType(); + var newContacts = this.copy(this.contacts); + + var showGroupsString = ''; + + this.contactForm.isNewNumber = false; + this.contactForm.showMoreButton = false; + this.contactForm.display_name = newContacts.display_name; + var display_name = this.contactForm.display_name; + var frist = display_name.substr(0, 1); + this.contactForm.namePrefix = frist.toUpperCase(); + this.setContactForm(showGroupsString, newContacts); + this.contactForm.company = newContacts.company + this.contactForm.position = newContacts.position + this.processingInitializationData(newContacts); + }, + + // 获取详细信息的类型 + // 电话号码类型 + phoneNumberType() { + HiLog.i(TAG, 'phoneNumberType'); + if (this.contacts.hasOwnProperty('phones') && this.contacts.phones.length > 0) { + this.contacts.phones.forEach((element) => { + element.labelName = Phone.getTypeLabelResource(parseInt(element.numType, 10)); + // 归属地 + element.phoneAddress = (element.phoneAddress == 'N' || Utils.isEmpty(element.phoneAddress)) ? "未知" : element.phoneAddress; + }); + } + }, + // 邮箱类型 + emailType() { + HiLog.i(TAG, 'emailType'); + if (this.contacts.hasOwnProperty('emails') && this.contacts.emails.length > 0) { + this.contacts.emails.forEach((element) => { + element.labelName = Email.getTypeLabelResource(parseInt(element.emailType, 10)); + }); + } + }, + // aim类型 + instantMessageType() { + HiLog.i(TAG, 'instantMessageType'); + if (this.contacts.hasOwnProperty('aims') && this.contacts.aims.length > 0) { + this.contacts.aims.forEach((element) => { + element.aimType = Aim.getTypeLabelResource(parseInt(element.aimType, 10)); + }); + } + }, + // 住宅类型 + residentialType() { + HiLog.i(TAG, 'residentialType'); + if (this.contacts.hasOwnProperty('houses') && this.contacts.houses.length > 0) { + this.contacts.houses.forEach((element) => { + element.houseType = House.getTypeLabelResource(parseInt(element.houseType, 10)); + }); + } + }, + // 纪念日类型 + eventsType() { + HiLog.i(TAG, 'eventsType'); + if (this.contacts.hasOwnProperty('events') && this.contacts.events.length > 0) { + this.contacts.events.forEach((element) => { + element.eventName = Birthday.getTypeLabelResource(parseInt(element.eventType, 10)); + }); + } + }, + // 关联人类型 + relationshipsType() { + HiLog.i(TAG, 'relationshipsType'); + if (this.contacts.hasOwnProperty('relationships') && this.contacts.relationships.length > 0) { + this.contacts.relationships.forEach((element) => { + element.associatedType = Relation.getTypeLabelResource(parseInt(element.associatedPersonId, 10)); + }); + } + }, + + isTotalCountNumber(totalCountNumber, newContacts) { + HiLog.i(TAG, 'isTotalCountNumber'); + totalCountNumber = (newContacts.phones && newContacts.phones.length > 0) + ? totalCountNumber + newContacts.phones.length : totalCountNumber; + + totalCountNumber = (newContacts.emails && newContacts.emails.length > 0) + ? totalCountNumber + newContacts.emails.length : totalCountNumber; + + totalCountNumber = (newContacts.aims && newContacts.aims.length > 0) + ? totalCountNumber + newContacts.aims.length : totalCountNumber; + + totalCountNumber = (newContacts.nickname && newContacts.nickname + && newContacts.nickname.length > 0) ? totalCountNumber + 1 : totalCountNumber; + + totalCountNumber = (newContacts.websites && newContacts.websites.length > 0) + ? totalCountNumber + newContacts.websites.length : totalCountNumber; + + totalCountNumber = (newContacts.houses && newContacts.houses.length > 0) + ? totalCountNumber + newContacts.houses.length : totalCountNumber; + + totalCountNumber = (newContacts.remarks && newContacts.remarks.noteContent + && newContacts.remarks.noteContent.length > 0) ? totalCountNumber + 1 : totalCountNumber; + + totalCountNumber = (newContacts.events && newContacts.events.length > 0) + ? totalCountNumber + newContacts.events.length : totalCountNumber; + + totalCountNumber = (newContacts.relations && newContacts.relations.length > 0) + ? totalCountNumber + newContacts.relations.length : totalCountNumber; + + totalCountNumber = (newContacts.name && newContacts.name.familyNamePhonetic + && newContacts.name.familyNamePhonetic.length > 0) ? totalCountNumber + 1 : totalCountNumber; + + totalCountNumber = (newContacts.groups && newContacts.groups.length > 0) + ? totalCountNumber + 1 : totalCountNumber; + + return totalCountNumber; + }, + + setContactForm(showGroupsString, newContacts) { + HiLog.i(TAG, 'setContactForm'); + this.contactForm.lastName = (newContacts.name && newContacts.name.nameSuffix + && newContacts.name.nameSuffix.length > 0) ? newContacts.name.nameSuffix : ''; + + this.contactForm.company = (newContacts.organization && newContacts.organization.name + && newContacts.organization.name.length > 0) ? newContacts.organization.name : ''; + + this.contactForm.position = (newContacts.organization && newContacts.organization.title + && newContacts.organization.title.length > 0) ? newContacts.organization.title : ''; + + this.contactForm.phones = (newContacts.phones && newContacts.phones.length > 0) + ? newContacts.phones : []; + + this.contactForm.emails = (newContacts.emails && newContacts.emails.length > 0) ? newContacts.emails : []; + + this.contactForm.aims = (newContacts.aims && newContacts.aims.length > 0) + ? newContacts.aims : []; + + this.contactForm.nickname = (newContacts.nickname && newContacts.nickname + && newContacts.nickname.length > 0) ? newContacts.nickname : ''; + + this.contactForm.websites = (newContacts.websites && newContacts.websites.length > 0) + ? newContacts.websites : []; + + this.contactForm.houses = (newContacts.houses && newContacts.houses.length > 0) + ? newContacts.houses : []; + + this.contactForm.events = (newContacts.events && newContacts.events.length > 0) ? newContacts.events : []; + + this.contactForm.remarks = (newContacts.remarks && newContacts.remarks.length > 0) + ? newContacts.remarks : ''; + + this.contactForm.relationships = (newContacts.relationships && newContacts.relationships.length > 0) + ? newContacts.relationships : []; + + this.contactForm.pinYinName = (newContacts.pinYinName && newContacts.pinYinName.length > 0) + ? newContacts.pinYinName : ''; + + this.contactForm.showGroupsString = (showGroupsString && showGroupsString.length > 0) ? showGroupsString : ''; + this.contactForm.groups = (newContacts.groups && newContacts.groups.length > 0) ? newContacts.groups : []; + }, + + processingInitializationData(newContacts) { + HiLog.i(TAG, 'processingInitializationData'); + if (!Utils.isEmptyList(this.contactForm.phones)) { + var numbers = []; + this.contactForm.phones.forEach(element => { + numbers.push(element.num); + }); + /* 获取到该联系人的所有电话号码的所有通话记录 */ + CallLogRepository.getInstance().findByNumberIn(numbers).then((resultList) => { + this.contactForm.numRecords = this.getDetailMessage(resultList); + }); + /* 根据获取到的通话记录原始数据封装详请页面需要的属性 */ + } + // 处理初始化数据 + if (this.sourceFromCallRecord && this.isNewNumber) { + this.showNameLast = (this.contactForm.phones && this.contactForm.phones[0]) + ? this.contactForm.phones[0].num : ''; + } else { + this.showNameLast = (this.contactForm.display_name && this.contactForm.display_name.length > 0) + ? this.contactForm.display_name : ''; + } + this.showNameLastMenu = (this.showNameLast && this.showNameLast.length > 6) + ? this.subStringWithEllipsis(this.showNameLast, 7) : this.showNameLast; + // 将默认电话号码移动至最上边位置 + if (!Utils.isEmptyList(this.contactForm.phones)) { + for (var i = 0; i < this.contactForm.phones.length; i++) { + if (this.contactForm.phones[i].isPrimary === 1) { + var tempPhoneNumber = newContacts.phones[i]; + this.contactForm.phones.splice(i, 1); + this.contactForm.phones.unshift(tempPhoneNumber); + } + } + } + }, + + sendNewContent() { + router.push({ + uri: 'pages/contacts/selectContactsList/selectContactsList', + params: { + type: 'saveContacts', + number: this.phoneNumberShow, + } + }); + }, + + /** + * 复制方法 + * + * @param {string} data 需要复制的信息 + */ + copyNumber(data) { + HiLog.i(TAG, 'copyNumber data' + data); + var actionData = { + pasteBoardContent: "", + }; + actionData.pasteBoardContent = data; + }, + + // 通话记录删除 + clearRecordsMore() { + var id = ''; + var ids = []; + for (let index = 0; index < this.contactForm.numRecords.length; index++) { + id = this.contactForm.numRecords[index].id; + ids.push(id); + } + this.removeCallLog(ids); + this.contactForm.numRecords = []; + this.contactForm.showMoreButton = false; + }, + + /** + * 删除通话记录 + * + * @param {Array} ids 删除的通话记录的id集 + */ + removeCallHilog(ids) { + CallLogRepository.getInstance().deleteByIdIn(ids); + }, + + + /* 新建联系人 */ + addContacts() { + let show = this.phoneNumberShow.length > 0 ? true : false; + router.push({ + uri: 'pages/contacts/accountants/Accountants', + params: { + addShow: true, + updataShow: false, + showWork: true, + upHouseShow: true, + phones: [ + { + 'id': '', + 'numType': 2, + 'labelName': '手机', + 'phoneNumber': this.phoneNumberShow, + 'phoneAddress': 'N', + 'blueStyle': false, + 'showP': show + }] + }, + }); + }, + + /** + * 截取字符串的前五个字符外加.. 例如:'哈哈哈哈哈哈哈哈' => '哈哈哈哈哈..' + * + * @param {string} str 对象字符串 + * @param {number} len 长度 + * @return {Object} newStr 截取后字符串 + */ + subStringWithEllipsis(str, len) { + let newLength = 0; + let newStr = ''; + let chineseRegex = /[^\x00-\xff]/g; + let singleChar = ''; + let strLength = str.replace(chineseRegex, '**').length; + for (var i = 0; i < strLength; i++) { + singleChar = str.charAt(i).toString(); + if (singleChar.match(chineseRegex) != null) { + newLength += 2; + } else { + newLength++; + } + if (newLength > len) { + break; + } + newStr += singleChar; + } + newStr += '..' + return newStr; + }, + + /** + * 非联系人时,获取通话记录,组装参数 + * + * @param {Array} numbers 手机号码 + */ + getNewNumRecords(numbers) { + var actionData = { + number: [], + language: "", + }; + actionData.number = numbers; + var newContacts: LooseObject = { + phones: [], + name: {}, + isNewNumber: false, + showMoreButton: false, + numRecords: [] + }; + this.contactForm.isNewNumber = true; + this.contactForm.showMoreButton = false; + this.contactForm.name = this.phoneNumberShow; + this.contactForm.showNewContact = true; + CallLogRepository.getInstance().findByNumberIn(numbers).then((resultList) => { + /* 根据获取到的通话记录原始数据封装详请页面需要的属性 */ + this.contactForm.numRecords = this.getDetailMessage(resultList); + /* 创建联系人电话列表对象 */ + var phoneNumbersTemp = { + id: 0, + phoneAddress: "", + num: "", + }; + if (this.contactForm.numRecords.length > 0) { + phoneNumbersTemp.phoneAddress = this.contactForm.numRecords[0].callTag; + } + phoneNumbersTemp.num = this.phoneNumberShow; + var phoneNumbersTempList = [phoneNumbersTemp]; + this.contactForm.phones = phoneNumbersTempList; + newContacts.phones = phoneNumbersTempList; + // 组装 contacts: originalContacts + newContacts.name = { + 'name': this.contactForm.name + }; + newContacts.isNewNumber = this.contactForm.isNewNumber; + newContacts.showMoreButton = this.contactForm.showMoreButton; + newContacts.numRecords = this.contactForm.numRecords; + /* 在新号码跳转详情界面中,使用通话记录第一条的id取模从头像背景色中获取获取 */ + newContacts.portraitColor = Constants.background.Color[Math.abs(parseInt(this.contactForm.numRecords[0].id, 10)) % 6]; + newContacts.detailsBgColor = Constants.background.detailColor[Math.abs(parseInt(this.contactForm.numRecords[0].id, 10)) % 6]; + this.contacts = newContacts; + // 处理初始化数据 + if (this.sourceFromCallRecord && this.isNewNumber) { + this.showNameLast = (this.contactForm.phones && this.contactForm.phones[0]) + ? this.contactForm.phones[0].num : ''; + } else { + this.showNameLast = (this.contactForm.display_name && this.contactForm.display_name.length > 0) + ? this.contactForm.display_name : ''; + } + this.showNameLastMenu = (this.showNameLast && this.showNameLast.length > 6) + ? this.subStringWithEllipsis(this.showNameLast, 7) : this.showNameLast; + }); + }, + + /** + * 根据原始callLogList内容转化为通话记录详情需要的数据 + * + * @param {Array} originList 原始通话列表 + * @return {Array} resultList 结果集 + */ + getDetailMessage(originList: CallLog[]) { + var resultList = []; + if (Utils.isEmptyList(originList)) { + return resultList; + } + originList.forEach(element => { + let contactDetailCallsItem = { + id: element.id.toString(), + phone: element.phoneNumber, + name: element.displayName, + callTime: element.createTime.toString(), + callType: element.callType, + callTag: element.numberLocation, + simType: element.simType.toString(), + isHd: element.isHD, + ringTime: element.ringDuration, + formatNumber: element.formattedNumber, + talkTime: this.getTalkTimeMessage(element), + timeDetail: this.getTimeDetailByCallTime(element) + }; + resultList.push(contactDetailCallsItem) + }); + return resultList; + }, + + /** + * 根据通话记录获取该通话记录的通话详情 + * + * @param {Object} callLogElement 通话记录 + * @return {string} resultMessage 状态信息 + */ + getTalkTimeMessage(callLogElement: CallLog) { + HiLog.i(TAG, 'getTalkTimeMessage callLogElement' + callLogElement); + var resultMessage: Resource = null; + if (callLogElement.callType == 1) { + // 呼入:直接显示通话时长 + resultMessage = this.getDescriptionByDuration(callLogElement.talkDuration); + } else if (callLogElement.callType == 2) { + // 呼出:通话时长为0时,为未接通,否则直接显示通话时长 + resultMessage = callLogElement.talkDuration == 0 ? $r('app.string.blockCall') + : this.getDescriptionByDuration(callLogElement.talkDuration); + } else if (callLogElement.callType == 3) { + // 未接:未接来电显示响铃时长 + resultMessage = this.getDescriptionByDuration(callLogElement.talkDuration); + } else if (callLogElement.callType == 5) { + // 拒接 + resultMessage = $r('app.string.reject'); + } + return resultMessage; + }, + + /** + * 根据指定的时间戳获取通话时长 timeDuration:单位s + * + * @param {number} timeDuration 时间周期 + * @return {Object} 返回时间单位 + */ + getDescriptionByDuration(timeDuration) { + HiLog.i(TAG, 'getDescriptionByDuration timeDuration' + timeDuration); + var seconds = parseInt(timeDuration); + if (seconds < 60) { + // 一分钟以内 + return $r('app.string.secondsFormat', seconds); + } else { + var minutes = Math.floor(seconds / 60); + if (minutes < 60) { + // 一小时以内 + return $r('app.string.minutesSecondsFormat', minutes, seconds % 60); + } else { + var hours = Math.floor(minutes / 60); + return $r('app.string.hourMinutesSecondsFormat', hours, minutes % 60, seconds % 3600 % 60); + } + } + }, + + /** + * 根据通话记录生成时间获取时间细节信息 + * + * @param {number} callTime 初始通话时间 + * @return {string} timeDetail 处理后的通话时间 + */ + getTimeDetailByCallTime(element: CallLog) { + var callTime = element.createTime.toString(); + HiLog.i(TAG, 'getTimeDetailByCallTime callTime' + callTime); + // 获取通话记录的时间 + var callLogTime = new Date(parseInt(callTime, 10) * 1000); + // 获取当前的系统时间 + var now = new Date(); + var yearDiff = now.getFullYear() - callLogTime.getFullYear(); + var monthDiff = now.getMonth() - callLogTime.getMonth(); + var dayDiff = now.getDate() - callLogTime.getDate(); + var hour = callLogTime.getHours(); + var timeDetail: string = ''; + var timeDetail = ''; + if (yearDiff == 0) { // 同一年份 + if (monthDiff == 0) { // 同一月份 + if (dayDiff == 0) { // 同一天 + /* 例:傍晚18:06 */ + timeDetail = this.getDayMessage(hour) + callLogTime.getHours() + ':' + + (callLogTime.getMinutes() < 10 ? '0' + callLogTime.getMinutes() : callLogTime.getMinutes()); + return timeDetail; + } + } + timeDetail = (callLogTime.getMonth() + 1) + '月' + callLogTime.getDate() + '日' + ' ' + + this.getDayMessage(hour) + callLogTime.getHours() + ':' + + (callLogTime.getMinutes() < 10 ? '0' + callLogTime.getMinutes() : callLogTime.getMinutes()); + } else { // 不同年份:显示年月日 + timeDetail = callLogTime.getFullYear() + '年' + (callLogTime.getMonth() + 1) + '月' + + callLogTime.getDate() + '日' + ' ' + this.getDayMessage(hour) + callLogTime.getHours() + ':' + + (callLogTime.getMinutes() < 10 ? '0' + callLogTime.getMinutes() : callLogTime.getMinutes()); + } + HiLog.i(TAG, ' timeDetail = ' + timeDetail); + return timeDetail; + }, + + /** + * 根据小时数获取该时间在一天范围内的描述 + * + * @param {number} hour 时间 + * @return {string} 时间节点 + */ + getDayMessage(hour) { + HiLog.i(TAG, ' getDayMessage' + hour); + if (hour >= 0 && hour < 5) { + return '凌晨'; + } + if (hour >= 5 && hour < 11) { + return '上午'; + } + if (hour >= 11 && hour < 13) { + return '中午'; + } + if (hour >= 13 && hour < 17) { + return '下午'; + } + if (hour >= 17 && hour < 19) { + return '傍晚'; + } + if (hour >= 19 && hour < 22) { + return '晚上'; + } + if (hour >= 22 && hour < 24) { + return '半夜'; + } + } +}; diff --git a/entry/src/main/ets/MainAbility/pages/Index.ets b/entry/src/main/ets/MainAbility/pages/Index.ets new file mode 100644 index 0000000..abd5073 --- /dev/null +++ b/entry/src/main/ets/MainAbility/pages/Index.ets @@ -0,0 +1,131 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import callTabletPage from './dialer/dialerTablet'; +import contactPage from './contacts/ContactList'; +import callPage from './phone/dialer/Dialer'; +import {HorizontalTabs} from './navigation/Navigation'; +import {VerticalTabs} from './navigation/Navigation'; +import {IndexPresenter, PermissionsManage} from '../presenter/IndexPresenter'; +import HiLog from '../util/HiLog'; +import Constants from '../model/common/Constants'; +import {DeviceType} from '../model/common/Constants'; + +const TAG = 'Index '; + +@Entry +@Component +struct Index { + private controller: TabsController = new TabsController(); + @State mPermissionsManage: PermissionsManage = PermissionsManage.getInstance(); + @State @Watch("onIndexChanged") mIndexPresenter: IndexPresenter = IndexPresenter.getInstance(); + @State bottomTabIndex: number = 0; + + onIndexChanged(): void { + HiLog.i(TAG, "uriTabIndex change:" + JSON.stringify(this.mIndexPresenter.tabsIndex)); + this.controller.changeIndex(this.mIndexPresenter.tabsIndex) + this.bottomTabIndex = this.mIndexPresenter.tabsIndex; + } + + onPageShow() { + this.mIndexPresenter.onPageShow(); + } + + aboutToAppear() { + this.mPermissionsManage.initPermissions(); + this.mIndexPresenter.aboutToAppear(); + } + + build() { + Flex({ direction: FlexDirection.Column }) { + if (this.mPermissionsManage.applyFlag) { + if (Constants.deviceType == DeviceType.PHONE) { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start, justifyContent: FlexAlign.Start }) { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.End, justifyContent: FlexAlign.End }) { + Tabs({ barPosition: BarPosition.End, index: this.bottomTabIndex, controller: this.controller }) { + + TabContent() { + callPage() + } + + TabContent() { + contactPage() + } + } + .onChange((index: number) => { + HiLog.i(TAG, 'onChange' + index) + this.bottomTabIndex = index + }) + .width('100%') + .vertical(false) + .barMode(BarMode.Fixed) + .barWidth(0) + .barHeight(0) + .scrollable(false) + .animationDuration(0) + + } + .layoutWeight(1) + .height('100%') + + HorizontalTabs({ controller: this.controller, bottomTabIndex: $bottomTabIndex }) + } + .width('100%') + .height('100%') + } else { + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Start, justifyContent: FlexAlign.Start }) { + // TabContent组件替代按钮 + Column() { + VerticalTabs({ controller: this.controller, bottomTabIndex: $bottomTabIndex }) + } + .alignItems(HorizontalAlign.Start) + .width($r("app.float.contact_navigation_width")) + .height('100%') + .zIndex(3) + + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.End, justifyContent: FlexAlign.End }) { + Tabs({ barPosition: BarPosition.Start, index: this.bottomTabIndex, controller: this.controller }) { + + TabContent() { + callTabletPage() + } + + TabContent() { + contactPage() + } + } + .onChange((index: number) => { + HiLog.i(TAG, 'onChange' + index) + this.bottomTabIndex = index + }) + .width('100%') + .vertical(true) + .barMode(BarMode.Fixed) + .barWidth(0) + .barHeight(0) + .scrollable(false) + .animationDuration(0) + } + .layoutWeight(1) + .height('100%') + } + .width('100%') + .height('100%') + } + } + } + .width('100%') + .height('100%') + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/pages/contacts/ContactList.ets b/entry/src/main/ets/MainAbility/pages/contacts/ContactList.ets new file mode 100644 index 0000000..3a0f3dd --- /dev/null +++ b/entry/src/main/ets/MainAbility/pages/contacts/ContactList.ets @@ -0,0 +1,253 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import ContactEmptyPage from '../../component/contact/ContactEmptyPage'; +import ContactListItemView from '../../component/contact/ContactListItemView'; +import {ContactVo} from '../../model/bean/ContactVo'; +import ContactListPresenter from '../../presenter/contact/ContactListPresenter'; +import HiLog from '../../util/HiLog'; +import resourceManager from '@ohos.resourceManager'; +import Constants, {DeviceType} from '../../model/common/Constants'; + +const TAG = 'ContactList '; + +/** + * 联系人列表界面 + */ +@Entry +@Component +export default struct ContactListPage { + @State mContactPresenter: ContactListPresenter = ContactListPresenter.getInstance(); + @State private mIsSearched: boolean = false; + @State private mContactMenu: any = [{ + value: "", + action: () => { + } + }]; + @State mSizeType: SizeType = Constants.deviceType == DeviceType.WGR ? SizeType.LG : SizeType.SM; + @State mColumns: number = Constants.deviceType == DeviceType.WGR ? 12 : 4; + @State mGutter: number = Constants.deviceType == DeviceType.WGR ? 12 : 24; + @State mMargin: number = Constants.deviceType == DeviceType.WGR ? 12 : 0; + @State mBackgroudColor: string = (Constants.deviceType == DeviceType.WGR) ? '#F1F3F5' : '#FFF'; + + aboutToAppear() { + HiLog.i(TAG, 'Contact aboutToAppear!'); + this.mContactPresenter.aboutToAppear(); + this.getSettingsMenus(); + } + + aboutToDisappear() { + HiLog.i(TAG, 'Contact aboutToDisappear!'); + this.mContactPresenter.aboutToDisappear(); + } + + /** + * 当此页面显示时触发一次。包括路由过程、应用进入前后台等场景,仅@Entry修饰的自定义组件生效。 + */ + onPageShow() { + HiLog.i(TAG, 'onPageShow') + this.mContactPresenter.onPageShow() + } + + /** + * 当此页面消失时触发一次。包括路由过程、应用进入前后台等场景,仅@Entry修饰的自定义组件生效。 + */ + onPageHide() { + HiLog.i(TAG, 'onPageHide') + this.mContactPresenter.onPageHide() + } + + /** + *联系人右上角菜单初始化 + */ + getSettingsMenus() { + let tmpPhoneMenu = []; + this.mContactPresenter.settingsMenu.forEach(element => { + tmpPhoneMenu.push({}); + }); + this.mContactMenu = tmpPhoneMenu; + resourceManager.getResourceManager().then(result => { + this.mContactPresenter.settingsMenu.forEach((element, i) => { + result.getString(element.id, (err, typeName) => { + HiLog.i(TAG, typeName); + this.mContactMenu[i] = { + value: typeName, + action: () => { + } + }; + }); + }); + }); + } + + build() { + Stack() { + GridContainer({ columns: this.mColumns, sizeType: this.mSizeType, gutter: this.mGutter, margin: this.mMargin }) { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start, justifyContent: FlexAlign.Start }) { + TitleGuide({ presenter: this.mContactPresenter, contactMenu: this.mContactMenu }) + + if (this.mContactPresenter.contactList.length > 0) { + ContactContent({ + presenter: $mContactPresenter, + isSearched: $mIsSearched + }) + } else { + ContactEmptyPage({ presenter: this.mContactPresenter }) + } + } + .height('100%') + .useSizeType({ + xs: { span: 8, offset: 2 }, + sm: { span: 4, offset: 0 }, + md: { span: 8, offset: 2 }, + lg: { span: 8, offset: 2 } + }) + } + } + .backgroundColor(this.mBackgroudColor) + .width('100%') + .height('100%') + } +} + +@Component +struct TitleGuide { + private presenter: ContactListPresenter; + private contactMenu: any; + + build() { + Flex({ direction: FlexDirection.Row, justifyContent: FlexAlign.End, alignItems: ItemAlign.Center }) { + Image($r("app.media.ic_public_add")) + .width($r("app.float.contact_samll_image_width_height")) + .height($r("app.float.contact_samll_image_width_height")) + .objectFit(ImageFit.Contain) + .onClick(() => { + HiLog.i(TAG, 'add contact') + this.presenter.createContact(); + }) + + Image($r("app.media.ic_public_more")) + .width($r("app.float.contact_samll_image_width_height")) + .height($r("app.float.contact_samll_image_width_height")) + .objectFit(ImageFit.Contain) + .margin({ left: $r("app.float.common_margin"), right: $r("app.float.common_margin") }) + // .bindMenu(this.contactMenu) + } + .height($r("app.float.contact_titleguide_height")) + .width('100%') + } +} + +@Component +struct ContactContent { + @Link private presenter: ContactListPresenter; + @Link private isSearched: boolean; + + @Builder + GroupsView(imageRes: Resource, title: string | Resource, showArrow: boolean) { + Row() { + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { + Image(imageRes) + .width(40) + .height(40) + .objectFit(ImageFit.Contain) + .margin({ left: $r("app.float.common_margin"), right: 16 }) + + Text(title) + .fontSize($r("app.float.contact_text_size_body1")) + .fontWeight(FontWeight.Medium) + // .fontColor($r("app.color.textColorPrimary")) + .fontColor('#182431') + .layoutWeight(1) + .textAlign(TextAlign.Start) + + Image($r("app.media.ic_contacts_arrow_up")) + .width(12) + .height(24) + .objectFit(ImageFit.Contain) + .margin({ right: $r("app.float.common_margin") }) + + } + } + .width('100%') + .height($r("app.float.contact_listitem_height")) + .backgroundColor(Color.White) + } + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start, justifyContent: FlexAlign.Start }) { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start, justifyContent: FlexAlign.Start }) { + Text($r("app.string.contact")) + .fontSize(30) + .fontWeight(FontWeight.Bold) + // .fontColor($r("app.color.textColorPrimary")) + .fontColor('#182431') + .margin({ left: $r("app.float.common_margin"), right: $r("app.float.common_margin"), bottom: 2 }) + .height($r("app.float.contact_title_height")) + + Text($r("app.string.contact_num", this.presenter.contactList.length)) + .fontSize($r("app.float.contact_text_size_body2")) + .fontWeight(FontWeight.Regular) + // .fontColor($r("app.color.textColorTertiary")) + .fontColor("#66182431") + .margin({ left: $r("app.float.common_margin"), right: $r("app.float.common_margin") }) + .height(19) + } + .height(82) + + List({ space: 0, initialIndex: 0 }) { + ForEach(this.presenter.contactList, (item, index) => { + + // 判断当前item是否为第一个 或与上一个item的namePrefix不同,则插入字母前缀 + if (index == 0 || !(item.namePrefix == this.presenter.contactList[index-1].namePrefix)) { + ListItem() { + Text(item.namePrefix) + .fontColor(Color.Black) + .fontSize(18) + .fontWeight(FontWeight.Medium) + .height($r("app.float.contact_listitem_index_height")) + .textAlign(TextAlign.End) + .padding({ top: 5 }) + }.margin({ left: $r("app.float.common_margin") }) + } + // 插入联系人item + ListItem() { + ContactListItemView({ item: item, index: index }) + } + + // 判断item前缀是否与下一个item前缀相同 相同则插入divider + if (index < this.presenter.contactList.length - 1 && item.namePrefix == this.presenter.contactList[index+1].namePrefix) { + ListItem() { + Row() { + Divider() + .vertical(false) + .strokeWidth('0.5vp') + .color('#F1F3F5') + .margin({ left: 76, right: $r("app.float.common_margin") }) + } + .width('100%') + .height('0.5') + .backgroundColor(Color.White) + } + } + }, (item: ContactVo) => item.contactId.toString()) + } + .width('100%') + .layoutWeight(1) + .listDirection(Axis.Vertical) + .edgeEffect(EdgeEffect.Spring) + } + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/pages/contacts/accountants/Accountants.ets b/entry/src/main/ets/MainAbility/pages/contacts/accountants/Accountants.ets new file mode 100644 index 0000000..803ff44 --- /dev/null +++ b/entry/src/main/ets/MainAbility/pages/contacts/accountants/Accountants.ets @@ -0,0 +1,923 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import resourceManager from '@ohos.resourceManager'; +import router from '@system.router'; +import util from "../../../util/Utils"; +import HiLog from '../../../util/Hilog'; +import {EmailBean} from "../../../model/bean/EmailBean"; +import {ContactInfo} from "../../../model/bean/ContactInfo"; +import {PhoneNumBean} from "../../../model/bean/PhoneNumBean"; +import {GroupBean} from "../../../model/bean/GroupBean"; +import {HouseBean} from "../../../model/bean/HouseBean"; +import {EventBean} from "../../../model/bean/EventBean"; +import {RelationBean} from "../../../model/bean/RelationBean"; +import {AIMBean} from "../../../model/bean/AIMBean"; +import {AssociatedPersonBean} from "../../../model/bean/AssociatedPersonBean"; +import ContactAbility from '../../../model/ContactAbilityModel'; +import AccountantsPresenter from '../../../presenter/contact/accountants/AccountantsPresenter'; +import Constants, {DeviceType} from '../../../model/common/Constants'; + +const TAG = 'AddContact '; + +/** + * 添加联系人外层容器 + */ +@Entry +@Component +struct Accountants { + /** + * 联系人Id + */ + private contactId = ""; + @State private routerAvtiveFlag: boolean = false; + @State mPresenter: AccountantsPresenter = AccountantsPresenter.getInstance(); + + /** + * 是否展示职位 + */ + @State private isShowPosition: boolean = false; + /** + * 是否展示更多 + */ + @State private showMore: boolean = false; + private updataShow = false; + private pageTitle: Resource = $r("app.string.create_contact"); + + /** + * 弹窗添加日期 + */ + dialogController: CustomDialogController = new CustomDialogController({ + builder: showDayTime({ mPresent: $mPresenter, cancel: this.onCancel, confirm: this.onAccept }), + cancel: this.existApp, + autoCancel: true + }) + + onCancel() { + HiLog.i(TAG, 'Callback when the first button is clicked'); + } + + onAccept() { + HiLog.i(TAG, 'Callback when the second button is clicked'); + } + + existApp() { + HiLog.i(TAG, 'Click the callback in the blank area'); + } + + aboutToAppear() { + HiLog.i(TAG, "the Page aboutToAppear Begin !!") + this.mPresenter.init(); + if (!util.isEmptyObject(router.getParams())) { + let obj = router.getParams(); + if (obj.hasOwnProperty("updataShow")) { + this.updataShow = obj.updataShow; + } + if (obj.hasOwnProperty("phoneNumbers") && !util.isEmptyList(obj.phoneNumbers)) { + let phoTemp = [new PhoneNumBean("1", obj.phoneNumbers[0].phoneNumber, "1", "", "")]; + this.mPresenter.contactInfoBefore.setPhones(phoTemp) + } + } + if (this.updataShow == true) { + this.pageTitle = $r("app.string.edit_contact"); + let obj = router.getParams().contactForm; + this.mPresenter.contactId = obj.id; + this.mPresenter.updateShow = true; + this.mPresenter.updatesInit(); + } + HiLog.i(TAG, "the Page aboutToAppear End"); + } + + onPageShow() { + this.mPresenter.refresh(); + } + + @State mSizeType: SizeType = Constants.deviceType == DeviceType.WGR ? SizeType.LG : SizeType.SM; + @State mColumns: number = Constants.deviceType == DeviceType.WGR ? 12 : 4; + @State mGutter: number = Constants.deviceType == DeviceType.WGR ? 12 : 12; + @State mMargin: number = Constants.deviceType == DeviceType.WGR ? 12 : 12; + + build() { + + //container + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { + GridContainer({ + columns: this.mColumns, + sizeType: this.mSizeType, + gutter: this.mGutter, + margin: this.mMargin + }) { + //container + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { + // 路由跳转管理 + Flex() { + Navigator({ target: 'pages/contacts/details/ContactDetail', type: NavigationType.Replace }) { + } + .active(this.routerAvtiveFlag) + .params({ + contactId: this.contactId, + phoneNumber: util.isEmptyList(this.mPresenter.contactInfoAfter.phones) ? "" : this.mPresenter.contactInfoAfter.phones[0].num, + homeLocation: "", + carries: "", + isNewSource: true + }) + }.visibility(Visibility.None) + //头部提交 + //title + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { + //cancel img + Flex({ alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { + Image($r("app.media.ic_public_cancel")) + .height('24vp') + .width('24vp') + .margin({ top: "16vp", bottom: "16vp", right: "16vp", left: "24vp" }) + .onClick(() => { + router.back() + }) + Text(this.pageTitle) + .margin({ top: "13vp", bottom: "15vp" }) + .lineHeight("28vp") + .fontSize("20fp") + .fontColor($r("app.color.colorPrimary")) + .fontWeight("Bold") + } + .height("56vp") + .width("50%") + + //comfirm img 保存按钮 + Flex({ alignItems: ItemAlign.Center, justifyContent: FlexAlign.End }) { + Image($r("app.media.ic_public_ok")) + .height("24vp") + .width("24vp") + .margin({ right: "24vp" }) + .onClick(() => { + var tempInfo = this.mPresenter.contactInfoAfter; + if (this.mPresenter.isEmptyInfo(tempInfo)) { + if (this.updataShow == false) { + ContactAbility.addContact(tempInfo, null, (arg) => { + this.contactId = arg.toString(); + this.routerAvtiveFlag = true; + }) + } + else { + tempInfo.id = this.mPresenter.contactId; + ContactAbility.updateContact(null, tempInfo, (arg) => { + this.contactId = arg.toString(); + this.routerAvtiveFlag = true; + }) + } + } + }) + } + .height("56vp") + .width("50%") + } + .width('100%') + .height("56vp") + .useSizeType({ + xs: { span: 4, offset: 0 }, + sm: { span: 4, offset: 0 }, + md: { span: 4, offset: 0 }, + lg: { span: 12, offset: 0 } + }) + + /** + * 添加联系人输入 + */ + List() { + // 头像 + ListItem() { + Flex({ + direction: FlexDirection.Column, + alignItems: ItemAlign.Center, + justifyContent: FlexAlign.Center + }) { + Image($r("app.media.ic_user_portrait")) + .height("56vp") + .width("56vp") + .objectFit(ImageFit.Contain) + + Text($r("app.string.save_to_phone")) + .lineHeight("21vp") + .fontSize("16fp") + .fontColor($r("app.color.colorPrimary")) + .fontWeight("Medium") + .margin({ top: "18vp" }) + + } + .height("144vp") + } + + //姓名 + ListItem() { + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) { + Image($r("app.media.ic_public_contacts")) + .margin({ left: "24vp", top: "19vp", bottom: "21vp" }) + .height("24vp") + .width("24vp") + .objectFit(ImageFit.Contain); + TextInput({ + placeholder: $r("app.string.name_hock"), + text: this.mPresenter.contactInfoBefore.display_name + }) + .margin({ left: "16" }) + .fontSize("16fp") + .caretColor($r("app.color.colorConnected")) + .type(InputType.Normal) + .maxLength(256) + .height("56vp") + .flexGrow(1) + .onChange((value) => { + this.mPresenter.contactInfoAfter.display_name = value; + }) + } + } + .borderRadius("24vp") + .height("64vp") + .width("100%") + .margin({ top: "16vp" }) + .backgroundColor("#FFFFFF"); + + //公司 + ListItem() { + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) { + Image($r("app.media.ic_contacts_company")) + .margin({ left: "24vp", top: "19vp", bottom: "21vp" }) + .height("24vp") + .width("24vp") + .objectFit(ImageFit.Contain) + TextInput({ + placeholder: $r("app.string.house_type_position_hock"), + text: this.mPresenter.contactInfoBefore.company + }) + .margin({ left: "16" }) + .fontSize("16fp") + .caretColor($r("app.color.colorConnected")) + .type(InputType.Normal) + .maxLength(256) + .height("56vp") + .flexGrow(1) + .onChange((arg) => { + this.mPresenter.contactInfoAfter.company = arg.valueOf(); + if (!util.isEmpty(arg.valueOf())) { + this.isShowPosition = true; + } + }); + } + } + .borderRadius("24vp") + .height("64vp") + .width("100%") + .margin({ top: "12vp" }) + .backgroundColor("#FFFFFF") + + if (this.isShowPosition) { + ListItem() { + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) { + TextInput({ + placeholder: $r("app.string.position_hock"), + text: this.mPresenter.contactInfoBefore.position + }) + .fontSize("16fp") + .caretColor($r("app.color.colorConnected")) + .type(InputType.Normal) + .maxLength(256) + .height("56vp") + .flexGrow(1) + .onChange((arg) => { + this.mPresenter.contactInfoAfter.position = arg.valueOf(); + }) + .margin({ left: "64vp" }) + } + } + .margin({ top: "12vp" }) + .borderRadius("24vp") + .height("64vp") + .width("100%") + .backgroundColor("#FFFFFF") + } + //手机 + ListItem() { + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { + Column() { + Image($r("app.media.ic_public_phone")) + .objectFit(ImageFit.Contain) + .height("24vp") + .width("24vp") + .margin({ left: "24vp", top: "19vp", bottom: "21vp", right: "0vp" }) + } + .alignItems(HorizontalAlign.Start) + .alignSelf(ItemAlign.Start) + + Column() { + ForEach(this.mPresenter.getArray(this.mPresenter.contactInfoBefore.phones) + , (item) => { + ItemList({ + mPresent: $mPresenter, + data: item, + typeName: "phone", + placeholder: $r("app.string.phone_number_hock") + }) + }, item => item.i.toString()) + + AddItem({ mPresent: $mPresenter, + labelName: $r("app.string.add_more"), + typeName: "phone" }); + + }.alignItems(HorizontalAlign.Start) + } + } + .borderRadius("24vp") + .width("100%") + .margin({ top: "12vp" }) + .backgroundColor("#FFFFFF") + //邮件 + ListItem() { + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { + Column() { + Image($r("app.media.ic_public_email")) + .objectFit(ImageFit.Contain) + .height("24vp") + .width("24vp") + .margin({ left: "24vp", top: "19vp", bottom: "21vp", right: "0vp" }) + } + .alignItems(HorizontalAlign.Start) + .alignSelf(ItemAlign.Start) + + Column() { + ForEach(this.mPresenter.getArray(this.mPresenter.contactInfoBefore.emails) + , (item) => { + ItemList({ + mPresent: $mPresenter, + data: item, + typeName: "email", + placeholder: $r("app.string.email_hock") + }) + }, item => item.i.toString()) + + AddItem({ mPresent: $mPresenter, + labelName: $r("app.string.add_more"), + typeName: "email" }); + + }.alignItems(HorizontalAlign.Start) + } + } + .borderRadius("24vp") + .width("100%") + .margin({ top: "12vp" }) + .backgroundColor("#FFFFFF") + //备注 + ListItem() { + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) { + Image($r("app.media.ic_public_drawer")) + .objectFit(ImageFit.Contain) + .margin({ left: "24vp", top: "19vp", bottom: "21vp" }) + .height("24vp") + .width("24vp") + + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) { + Text($r("app.string.remarks")) + .fontSize("16fp") + .lineHeight("22vp") + .fontWeight(FontWeight.Medium) + .fontColor($r("app.color.colorPrimary")) + } + .margin({ left: "12vp" }) + .height("22vp") + .width("72vp") + + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) { + TextInput({ + placeholder: $r("app.string.remarks_hock"), + text: util.isEmpty(this.mPresenter.contactInfoBefore.remarks) + ? "" + : this.mPresenter.contactInfoBefore.remarks + }) + .fontSize("16fp") + .caretColor($r("app.color.colorConnected")) + .type(InputType.Normal) + .maxLength(256) + .height("56vp") + .onChange((arg) => { + this.mPresenter.contactInfoAfter.remarks = arg.valueOf(); + }) + .flexGrow(1) + } + } + } + .borderRadius("24vp") + .height("64vp") + .width("832vp") + .margin({ top: "12vp" }) + .backgroundColor("#FFFFFF") + + if (!this.showMore) { + //添加更多项 + ListItem() { + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) { + Image($r("app.media.ic_public_add_norm")) + .objectFit(ImageFit.Contain) + .margin({ left: "24vp", top: "19vp", bottom: "21vp" }) + .height("24vp") + .width("24vp") + .fillColor($r("app.color.colorConnected")) + + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) { + Text($r("app.string.addmore")) + .fontSize("16fp") + .lineHeight("22vp") + .fontWeight(FontWeight.Medium) + .fontColor($r("app.color.colorConnected")) + .onClick(() => { + this.showMore = true; + }) + } + .width("652vp") + .margin({ left: "12vp" }) + } + } + .borderRadius("24vp") + .height("64vp") + .width("832vp") + .margin({ top: "16vp" }) + .backgroundColor("#FFFFFF"); + } + if (this.showMore) { + //即时消息 + ListItem() { + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { + Column() { + Image($r("app.media.ic_public_message")) + .objectFit(ImageFit.Contain) + .height("24vp") + .width("24vp") + .margin({ left: "24vp", top: "19vp", bottom: "21vp", right: "0vp" }) + } + .alignItems(HorizontalAlign.Start) + .alignSelf(ItemAlign.Start) + + Column() { + ForEach(this.mPresenter.getArray(this.mPresenter.contactInfoBefore.aims) + , (item) => { + ItemList({ + mPresent: $mPresenter, + data: item, + typeName: "AIM", + placeholder: $r("app.string.instant_messaging_hock") + }) + }, item => item.i.toString()) + + AddItem({ mPresent: $mPresenter, + labelName: $r("app.string.add_more"), + typeName: "AIM" }); + + }.alignItems(HorizontalAlign.Start) + } + } + .borderRadius("24vp") + .width("100%") + .margin({ top: "12vp" }) + .backgroundColor("#FFFFFF") + //住宅 + ListItem() { + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { + Column() { + Image($r("app.media.ic_public_home")) + .objectFit(ImageFit.Contain) + .height("24vp") + .width("24vp") + .margin({ left: "24vp", top: "19vp", bottom: "21vp", right: "0vp" }) + } + .alignItems(HorizontalAlign.Start) + .alignSelf(ItemAlign.Start) + + Column() { + ForEach(this.mPresenter.getArray(this.mPresenter.contactInfoBefore.houses) + , (item) => { + ItemList({ + mPresent: $mPresenter, + data: item, + typeName: "house", + placeholder: $r("app.string.address_add_hock") + }) + }, item => item.i.toString()) + + AddItem({ mPresent: $mPresenter, + labelName: $r("app.string.add_more"), + typeName: "house" }); + + }.alignItems(HorizontalAlign.Start) + } + } + .borderRadius("24vp") + .width("100%") + .margin({ top: "12vp" }) + .backgroundColor("#FFFFFF") + //昵称 + ListItem() { + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) { + Image($r("app.media.ic_contacts_nickname")) + .objectFit(ImageFit.Contain) + .margin({ left: "24vp", top: "19vp", bottom: "21vp" }) + .height("24vp") + .width("24vp") + + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) { + Text($r("app.string.nickname")) + .fontSize("16fp") + .lineHeight("22vp") + .fontWeight(FontWeight.Medium) + .fontColor($r("app.color.colorPrimary")) + } + .margin({ left: "12vp" }) + .height("22vp") + .width("72vp") + + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) { + TextInput({ + placeholder: $r("app.string.nickname_hock"), + text: util.isEmpty(this.mPresenter.contactInfoBefore.nickname) + ? "" + : this.mPresenter.contactInfoBefore.nickname + }) + .fontSize("16fp") + .caretColor($r("app.color.colorConnected")) + .type(InputType.Normal) + .maxLength(256) + .height("56vp") + .onChange((arg) => { + this.mPresenter.contactInfoAfter.nickname = arg.valueOf(); + }) + .flexGrow(1) + } + + } + } + .borderRadius("24vp") + .height("64vp") + .width("832vp") + .margin({ top: "12vp" }) + .backgroundColor("#FFFFFF") + //网站 + ListItem() { + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) { + Image($r("app.media.ic_public_worldclock")) + .objectFit(ImageFit.Contain) + .margin({ left: "24vp", top: "19vp", bottom: "21vp" }) + .height("24vp") + .width("24vp") + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) { + Text($r("app.string.website")) + .fontSize("16fp") + .lineHeight("22vp") + .fontWeight(FontWeight.Medium) + .fontColor($r("app.color.colorPrimary")) + } + .margin({ left: "12vp" }) + .height("22vp") + .width("72vp") + + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) { + TextInput({ + placeholder: $r("app.string.website_hock"), + text: util.isEmptyList(this.mPresenter.contactInfoBefore.websites) + ? "" + : this.mPresenter.contactInfoAfter.websites[0] + }) + .fontSize("16fp") + .caretColor($r("app.color.colorConnected")) + .type(InputType.Normal) + .maxLength(256) + .height("56vp") + .onChange((arg) => { + this.mPresenter.contactInfoBefore.websites = [arg.valueOf()]; + }) + .flexGrow(1) + } + } + } + .borderRadius("24vp") + .height("64vp") + .width("832vp") + .margin({ top: "12vp" }) + .backgroundColor("#FFFFFF") + //生日 + ListItem() { + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) { + Image($r("app.media.ic_contacts_birthday")) + .objectFit(ImageFit.Contain) + .margin({ left: "24vp", top: "19vp", bottom: "21vp" }) + .height("24vp") + .width("24vp") + + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) { + Text(this.mPresenter.birthDaySelect) + .fontSize("16fp") + .margin({ bottom: "9vp", top: "9vp" }) + .lineHeight("22vp") + .fontWeight(FontWeight.Medium) + .fontColor($r("app.color.colorPrimary")) + .height("22vp") + .width("38vp") + .bindMenu(this.mPresenter.birthdayMenu) + + Image($r("app.media.ic_public_spinner")) + .objectFit(ImageFit.Contain) + .height("24vp") + .width("12vp") + } + .margin({ left: "12vp" }) + .height("40vp") + .width("72vp") + + Flex({ + direction: FlexDirection.Column, + alignItems: ItemAlign.Center, + justifyContent: FlexAlign.End + }) { + Text(util.isEmptyList(this.mPresenter.contactInfoBefore.events) + ? $r("app.string.birth_hock") + : this.mPresenter.contactInfoBefore.events[0].data) + .margin({ left: px2vp(10) }) + .height("55vp") + .fontSize("15vp") + .fontColor(Color.Gray) + }.onClick(() => { + this.dialogController.open() + }) + } + } + .borderRadius("24vp") + .height("64vp") + .width("832vp") + .margin({ top: "12vp" }) + .backgroundColor("#FFFFFF") + //助理 + ListItem() { + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { + Column() { + Image($r("app.media.ic_contacts_assistant")) + .objectFit(ImageFit.Contain) + .height("24vp") + .width("24vp") + .margin({ left: "24vp", top: "19vp", bottom: "21vp", right: "0vp" }) + } + .alignItems(HorizontalAlign.Start) + .alignSelf(ItemAlign.Start) + + Column() { + ForEach(this.mPresenter.getArray(this.mPresenter.contactInfoBefore.relationships) + , (item) => { + ItemList({ + mPresent: $mPresenter, + data: item, + typeName: "relationships", + placeholder: $r("app.string.assistant_hock") + }) + }, item => item.i.toString()) + + AddItem({ mPresent: $mPresenter, + labelName: $r("app.string.add_more"), + typeName: "relationships" }); + + }.alignItems(HorizontalAlign.Start) + } + } + .borderRadius("24vp") + .width("100%") + .margin({ top: "12vp" }) + .backgroundColor("#FFFFFF") + } + + if (this.updataShow) { + ListItem() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start }) { + Text($r("app.string.from_the_accounts")) + .width('312vp') + .fontFamily('HarmonyHeiTi') + .fontSize('14fp') + .height('19vp') + .fontColor($r("app.color.colorPrimary")) + .fontWeight(FontWeight.Regular) + .lineHeight('19vp') + Text($r("app.string.phone")) + .width('312vp') + .fontFamily('HarmonyHeiTi') + .fontSize('14fp') + .height('19vp') + .fontColor($r("app.color.colorPrimary")) + .fontWeight(FontWeight.Regular) + .lineHeight('19vp') + .margin({ top: '8vp' }) + } + } + .width("100%") + .margin({ top: "12vp" }) + } + + } + .scrollBar(BarState.On) + .width("100%") + .height("100%") + .alignSelf(ItemAlign.Start) + .useSizeType({ + xs: { span: 4, offset: 0 }, + sm: { span: 4, offset: 0 }, + md: { span: 4, offset: 0 }, + lg: { span: 8, offset: 2 } + }) + } + .height('100%') + } + } + .backgroundColor("#D8D8D8") + } +} + +/** + * 添加日期弹窗 + */ +@CustomDialog +struct showDayTime { + private date = new Date(2000, 0, 1); + @Link mPresent: any; + @State + private showTime: string = this.date.getUTCFullYear() + "年" + (this.date.getMonth() + 1) + "月" + this.date.getDate() + "日"; + controller: CustomDialogController + cancel: () => void + confirm: () => void + + build() { + Column() { + Text(this.showTime) + .height("50vp") + .width('70%') + .fontSize(20) + .margin({ top: 10, bottom: 10 }) + .textAlign(TextAlign.Center) + + DatePicker({ type: DatePickerType.Date, selected: this.date }) + .width("85%") + .height("200vp") + .onChange((arg) => { + this.date = new Date(arg.year, arg.month, arg.day); + this.showTime = arg.year + "年" + (arg.month + 1) + "月" + arg.day + "日"; + }) + + Row() { + Button($r("app.string.dialog_cancel")) + .width("50%") + .onClick(() => { + this.controller.close() + this.cancel() + }).backgroundColor("#D8D8D8").fontColor($r("app.color.colorPrimary")) + Button($r("app.string.save")) + .width("50%") + .onClick(() => { + let tempEvent = new EventBean("", this.showTime, "1", ""); + this.mPresent.contactInfoAfter.setEvents([tempEvent]); + this.mPresent.refresh(); + this.controller.close() + this.confirm() + }).backgroundColor("#D8D8D8").fontColor($r("app.color.colorPrimary")) + } + .height("50vp") + .width('70%') + + }.height("350vp") + } +} + +@Component +struct ItemList { + @Link mPresent: any; + private data: any; + private typeName: any; + private placeholder: Resource; + + build() { + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) { + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) { + Text(this.mPresent.menuSelect( + this.typeName, + this.data + )) + .fontSize("16fp") + .margin({ bottom: "9vp", top: "9vp" }) + .lineHeight("22vp") + .fontWeight(FontWeight.Medium) + .fontColor($r("app.color.colorPrimary")) + .height("22vp") + .width("38vp") + .bindMenu(this.MenuBuilder) + + Image($r("app.media.ic_public_spinner")) + .objectFit(ImageFit.Contain) + .height("24vp") + .width("12vp") + } + .margin({ left: "12vp" }) + .height("40vp") + .width("72vp") + + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) { + TextInput({ + placeholder: this.placeholder, + text: this.mPresent.getTextDisplay(this.typeName, this.data) + }) + .fontSize("16fp") + .caretColor($r("app.color.colorConnected")) + .type(InputType.Normal) + .maxLength(256) + .height("56vp") + .onChange((arg) => { + this.mPresent.listItemChange(this.typeName, this.data, arg.toString()) + }) + } + .flexGrow(1) + + Row() { + Image($r("app.media.ic_public_close_filled")) + .objectFit(ImageFit.Contain) + .height("24vp") + .width("24vp") + .margin({ top: "16vp", right: "28vp", bottom: "16vp" }) + .onClick(() => { + this.mPresent.deleteItem(this.typeName, this.data.i - 1); + }) + } + } + .height("64vp") + } + + @Builder MenuBuilder() { + Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) { + ForEach(this.mPresent.getMenuList(this.typeName), + (item) => { + Text(item.labelRes) + .fontSize("16fp") + .width("156vp") + .height("48vp") + .fontColor($r("app.color.colorPrimary")) + .textAlign(TextAlign.Start) + .margin({ left: "16vp" }) + .onClick(() => { + this.mPresent.menuChange(this.typeName, this.data, item); + }) + + Divider().height("1vp").width("124vp").color("#33000000") + }, + (item) => item.rawValue.toString()) + } + .width("156vp") + .borderRadius("16vp") + } +} + +@Component +struct AddItem { + @Link mPresent: any; + private labelName: Resource; + private typeName: string; + + build() { + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) { + Column() { + Text(this.labelName) + .fontSize("16fp") + .margin({ bottom: "9vp", top: "9vp", left: "12vp" }) + .lineHeight("22vp") + .fontWeight(FontWeight.Medium) + .fontColor($r("app.color.colorPrimary")) + .height("22vp") + } + .alignItems(HorizontalAlign.Start) + .flexGrow(1) + + Column() { + Image($r("app.media.ic_public_add_norm_filled")) + .objectFit(ImageFit.Contain) + .height("24vp") + .width("24vp") + .margin({ top: "16vp", right: "12vp", bottom: "16vp" }) + .onClick(() => { + this.mPresent.addMore(this.typeName); + }) + } + .alignItems(HorizontalAlign.End) + } + .height("64vp") + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/pages/contacts/batchselectcontacts/BatchSelectContactsPage.ets b/entry/src/main/ets/MainAbility/pages/contacts/batchselectcontacts/BatchSelectContactsPage.ets new file mode 100644 index 0000000..03dc092 --- /dev/null +++ b/entry/src/main/ets/MainAbility/pages/contacts/batchselectcontacts/BatchSelectContactsPage.ets @@ -0,0 +1,368 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import BatchSelectContactsPresenter from '../../../presenter/contact/batchselectcontacts/BatchSelectContactsPresenter'; +import HiLog from '../../../util/HiLog'; +import Utils from '../../../util/Utils'; +import BatchSelectRecentItemView from '../../../component/contact/batchselectcontacts/BatchSelectRecentItemView'; +import BatchSelectContactItemView from '../../../component/contact/batchselectcontacts/BatchSelectContactItemView'; +import BatchTabGuide from '../../../component/contact/batchselectcontacts/BatchTabGuide'; +import util from '../../../util/Utils'; +import {CallBean} from '../../../model/bean/CallBean'; +import {ContactVo} from '../../../model/bean/ContactVo'; +import Constants, {DeviceType} from '../../../model/common/Constants'; + +const TAG = 'BatchSelectContactsPage '; + +/** + * 短信选择联系人列表界面 + */ +@Entry +@Component +export default struct BatchSelectContactsPage { + @State mPresenter: BatchSelectContactsPresenter = BatchSelectContactsPresenter.getInstance(); + @State currentIndex: number = 0; + private controller: TabsController = new TabsController(); + @State mSizeType: SizeType = Constants.deviceType == DeviceType.WGR ? SizeType.LG : SizeType.SM; + @State mColumns: number = Constants.deviceType == DeviceType.WGR ? 12 : 4; + @State mGutter: number = Constants.deviceType == DeviceType.WGR ? 12 : 24; + @State mMargin: number = Constants.deviceType == DeviceType.WGR ? 12 : 0; + + /** + * 函数在创建自定义组件的新实例后,在执行其build函数之前执行。 + * 允许在aboutToAppear函数中改变状态变量,这些更改将在后续执行build函数中生效。 + */ + aboutToAppear() { + HiLog.i(TAG, 'aboutToAppear') + this.mPresenter.aboutToAppear() + } + + /** + * 函数在自定义组件析构消耗之前执行。 + * 不允许在aboutToDisappear函数中改变状态变量,特别是@Link变量的修改可能会导致应用程序行为不稳定。 + */ + aboutToDisappear() { + HiLog.i(TAG, 'aboutToDisappear') + this.mPresenter.aboutToDisappear() + } + + /** + * 当此页面显示时触发一次。包括路由过程、应用进入前后台等场景,仅@Entry修饰的自定义组件生效。 + */ + onPageShow() { + HiLog.i(TAG, 'onPageShow') + this.mPresenter.onPageShow() + } + + /** + * 当此页面消失时触发一次。包括路由过程、应用进入前后台等场景,仅@Entry修饰的自定义组件生效。 + */ + onPageHide() { + HiLog.i(TAG, 'onPageHide') + this.mPresenter.onPageHide() + } + + /** + * 当用户点击返回按钮时触发,,仅@Entry修饰的自定义组件生效。 + * 返回true表示页面自己处理返回逻辑, 不进行页面路由。 + * 返回false表示使用默认的返回逻辑。 + * 不返回值会作为false处理。 + */ + onBackPress() { + return false; + } + + build() { + Column() { + GridContainer({ columns: this.mColumns, sizeType: this.mSizeType, gutter: this.mGutter, margin: this.mMargin }) { + Flex({ direction: FlexDirection.Column }) { + Row() { + Flex({ direction: FlexDirection.Row, + justifyContent: FlexAlign.Start, + alignItems: ItemAlign.Center }) { + //cancel img + Image($r("app.media.ic_public_cancel")) + .height($r("app.float.contact_samll_image_width_height")) + .width($r("app.float.contact_samll_image_width_height")) + .margin({ left: $r("app.float.common_margin") }) + .onClick(() => { + this.mPresenter.cancel() + }) + + Text(this.mPresenter.selectCount == 0 ? $r('app.string.no_select') : $r('app.string.select_num', this.mPresenter.selectCount)) + .textAlign(TextAlign.Start) + .fontSize(20) + .fontWeight(FontWeight.Bold) + // .fontColor($r("app.color.textColorPrimary")) + .fontColor('#182431') + .margin({ left: $r("app.float.common_margin_16") }) + .height($r("app.float.contact_batchselect_title_height")) + .layoutWeight(1) + + //comfirm img + Image($r("app.media.ic_public_ok")) + .height($r("app.float.contact_samll_image_width_height")) + .width($r("app.float.contact_samll_image_width_height")) + .margin({ right: $r("app.float.common_margin") }) + .onClick(() => { + this.mPresenter.comfirm() + }) + + if (Constants.deviceType == DeviceType.WGR) { + Image($r("app.media.ic_public_select_all")) + .width($r("app.float.contact_samll_image_width_height")) + .height($r("app.float.contact_samll_image_width_height")) + .objectFit(ImageFit.Contain) + .margin({ right: $r("app.float.common_margin") }) + .onClick((event: ClickEvent) => { + HiLog.i(TAG, 'clickSelectAll clicked!') + this.mPresenter.clickSelectAll(); + }) + } + } + .width('100%') + .height($r("app.float.contact_titleguide_height")) + } + .height($r("app.float.contact_titleguide_height")) + .useSizeType({ + xs: { span: 12, offset: 0 }, + sm: { span: 4, offset: 0 }, + md: { span: 12, offset: 0 }, + lg: { span: 12, offset: 0 } + }) + + Column() { + BatchTabGuide({ currentIndex: $currentIndex, controller: this.controller }) + + Tabs({ barPosition: BarPosition.Start, index: this.currentIndex, controller: this.controller }) { + TabContent() { + if (util.isEmptyList(this.mPresenter.callLogTemp)) { + NoContactsEmptyView() + } else { + RecentList({ + presenter: $mPresenter + }) + } + } + + TabContent() { + if (util.isEmptyList(this.mPresenter.contactsList)) { + NoContactsEmptyView() + } else { + ContactsList({ + presenter: $mPresenter + }) + } + } + } + .vertical(false) + .scrollable(true) + .barMode(BarMode.Fixed) + .barWidth(0) + .barHeight(0) + .animationDuration(200) + .onChange((index: number) => { + HiLog.i(TAG, index.toString()); + this.currentIndex = index; + this.mPresenter.onTabChange(index); + }) + .margin({ top: 8 }) + } + .flexGrow(1) + .useSizeType({ + xs: { span: 8, offset: 2 }, + sm: { span: 4, offset: 0 }, + md: { span: 8, offset: 2 }, + lg: { span: 8, offset: 2 } + }) + + if (Constants.deviceType == DeviceType.PHONE) { + Flex({ + direction: FlexDirection.Column, + justifyContent: FlexAlign.Center, + alignItems: ItemAlign.Center + }) { + Image($r("app.media.ic_public_select_all")) + .width($r("app.float.contact_samll_image_width_height")) + .height($r("app.float.contact_samll_image_width_height")) + .objectFit(ImageFit.Contain) + + Text($r("app.string.select_all")) + .height(14) + .margin({ top: 3 }) + .fontSize(10) + // .fontColor($r("app.color.textColorPrimary")) + .fontColor("#182431") + .fontWeight(FontWeight.Medium) + } + .height($r("app.float.contact_titleguide_height")) + .useSizeType({ + xs: { span: 8, offset: 2 }, + sm: { span: 4, offset: 0 }, + md: { span: 8, offset: 2 }, + lg: { span: 8, offset: 2 } + }) + .onClick((event: ClickEvent) => { + HiLog.i(TAG, 'clickSelectAll clicked!') + this.mPresenter.clickSelectAll(); + }) + } + } + .width("100%") + .height("100%") + .backgroundColor('#F1F3F5') + } + .width("100%") + .height("100%") + } + .width('100%') + .height('100%') + } +} + +@Component +struct RecentList { + @Link presenter: BatchSelectContactsPresenter; + + build() { + Column() { + List({ space: 0, initialIndex: 0 }) { + ForEach(this.presenter.callLogTemp, (item, index) => { + // 插入联系人item + ListItem() { + BatchSelectRecentItemView({ + item: item, + index: index, + onRecentItemClicked: (index) => this.presenter.onRecentItemClicked(index) + }) + } + + if (!util.isEmptyList(this.presenter.callLogTemp) && index != this.presenter.callLogTemp.length - 1) { + ListItem() { + Row() { + Divider() + .vertical(false) + .strokeWidth('0.5vp') + .color('#F1F3F5') + .margin({ left: 76, right: $r("app.float.common_margin") }) + } + .width('100%') + .height('0.5') + .backgroundColor(Color.White) + } + } + }, (item) => item.id.toString()) + } + .width('100%') + .listDirection(Axis.Vertical) + .edgeEffect(EdgeEffect.Spring) + } + .width('100%') + .backgroundColor(Color.White) + .padding({ top: 4, bottom: 4 }) + .borderRadius($r("app.float.contact_list_groups_radius")) + } +} + +@Component +struct ContactsList { + @Link presenter: BatchSelectContactsPresenter; + + build() { + Column() { + List({ space: 0, initialIndex: 0 }) { + ForEach(this.presenter.contactsList, (item, index) => { + // 判断当前item是否为第一个 或与上一个item的namePrefix不同,则插入字母前缀 + if (index == 0 || !(item.namePrefix == this.presenter.contactsList[index-1].namePrefix)) { + ListItem() { + Text(item.namePrefix) + .fontColor(Color.Black) + .fontSize(18) + .fontWeight(FontWeight.Medium) + .height($r("app.float.contact_listitem_index_height")) + .textAlign(TextAlign.End) + .padding({ top: 5 }) + }.margin({ left: $r("app.float.common_margin") }) + } + + // 插入联系人item + ListItem() { + BatchSelectContactItemView({ + item: item, + index: index, + onContactItemClicked: (index, indexChild) => this.presenter.onContactItemClicked(index, indexChild) + }) + } + + if (!util.isEmptyList(this.presenter.contactsList) && index != this.presenter.contactsList.length - 1) { + ListItem() { + Row() { + Divider() + .vertical(false) + .strokeWidth('0.5vp') + .color('#F1F3F5') + .margin({ left: 76, right: $r("app.float.common_margin") }) + } + .width('100%') + .height('0.5') + .backgroundColor(Color.White) + } + } + }, (item) => item.contactId.toString()) + } + .width('100%') + .listDirection(Axis.Vertical) + .edgeEffect(EdgeEffect.Spring) + } + .width('100%') + .padding({ top: 4, bottom: 4 }) + } +} + +@Component +struct GroupsList { + @State presenter: BatchSelectContactsPresenter = BatchSelectContactsPresenter.getInstance(); + + build() { + + } +} + +@Component +struct NoContactsEmptyView { + @State presenter: BatchSelectContactsPresenter = BatchSelectContactsPresenter.getInstance(); + + build() { + Flex({ direction: FlexDirection.Column, + justifyContent: FlexAlign.Center, + alignItems: ItemAlign.Center }) { + Image($r("app.media.no_contacts_illustration")) + .width($r("app.float.contact_emptyview_image_width_height")) + .height($r("app.float.contact_emptyview_image_width_height")) + .objectFit(ImageFit.Contain) + .margin({ bottom: 8 }) + + Text(this.presenter.getEmptyText()) + .fontSize($r("app.float.contact_text_size_body2")) + .fontWeight(FontWeight.Regular) + // .fontColor($r("app.color.textColorTertiary")) + .fontColor('#66182431') + .height(19) + .textAlign(TextAlign.Center) + } + .width('100%') + .height('100%') + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/pages/contacts/details/ContactDetail.ets b/entry/src/main/ets/MainAbility/pages/contacts/details/ContactDetail.ets new file mode 100644 index 0000000..f30e2d0 --- /dev/null +++ b/entry/src/main/ets/MainAbility/pages/contacts/details/ContactDetail.ets @@ -0,0 +1,419 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import router from '@system.router'; +import utils from '../../../util/Utils'; +import detailModel from '../../../model/contactDetailModel'; +import HiLog from '../../../util/HiLog'; +import resourceManager from '@ohos.resourceManager'; +import DetailCalllog from '../../../component/contactdetail/DetailCalllog' +import DetailInfoListView from '../../../component/contactdetail/DetailInfoListView' +import Constants, {DeviceType} from '../../../model/common/Constants' + +const TAG = 'ContactDetail '; + +/** + * 联系人详情 页面 + */ +@Entry +@Component +struct ContactDetail { + @State mDetailModel: typeof detailModel = detailModel; + @State private mMoreMenu: any = [{ + value: "", + action: () => { + } + }]; + @State hasFavorited: boolean = false; + @State mSizeType: SizeType = Constants.deviceType == DeviceType.WGR ? SizeType.LG : SizeType.SM; + @State mColumns: SizeType = Constants.deviceType == DeviceType.WGR ? 12 : 4; + @State mGutter: SizeType = Constants.deviceType == DeviceType.WGR ? 12 : 24; + @State mMargin: SizeType = Constants.deviceType == DeviceType.WGR ? 12 : 0; + + aboutToAppear() { + // 根据不同情况初始化联系人详情数据 1.已有联系人(群组,收藏,联系人列表):根据联系人ID从数据库获取详情数据 + // 2.新增编辑联系人 :contacts已经传入只加载通话记录 + // 3.未知联系人:未添加联系人且来自于通话记录跳转 + // (1)根据电话号码查询联系人id + // (2)如果不存在联系人,则按照新号码处理,如果存在联系人,则根据第一个联系人id展示详情 + HiLog.i(TAG, 'aboutToAppear:'); + this.mDetailModel.isNewSource = router.getParams().isNewSource; + this.mDetailModel.contactId = router.getParams().contactId; + this.mDetailModel.sourceFromCallRecord = router.getParams().sourceFromCallRecord; + this.mDetailModel.isNewNumber = router.getParams().isNewNumber; + this.mDetailModel.phoneNumberShow = router.getParams().phoneNumberShow; + this.mDetailModel.newNumberContactDetail = router.getParams().newNumberContactDetail; + + this.mDetailModel.onShow(() => { + HiLog.i(TAG, 'aboutToAppear:callback') + this.mDetailModel.flash++ + }); + this.getSettingsMenus(); + } + + onShow() { + } + + /** + *联系人右上角菜单初始化 + */ + getSettingsMenus() { + let tmpMoreMenu = []; + this.mDetailModel.moreMenuOptions.forEach(element => { + tmpMoreMenu.push({}); + }); + this.mMoreMenu = tmpMoreMenu; + resourceManager.getResourceManager().then(result => { + this.mDetailModel.moreMenuOptions.forEach((element, i) => { + result.getString(element.id, (err, typeName) => { + HiLog.i(TAG, 'mDetailModel.moreMenuOptions') + + this.mMoreMenu[i] = { + value: typeName, + action: () => { + switch (i) { + case 0: + HiLog.i(TAG, 'deleteContact') + this.mDetailModel.deleteContact(); + break; + } + } + }; + }); + }); + }); + + } + + build() { + Stack({ alignContent: Alignment.TopStart }) { + TopBar({ mDetailModel: $mDetailModel, moreMenu: $mMoreMenu }); + + GridContainer({ columns: this.mColumns, sizeType: this.mSizeType, gutter: this.mGutter, margin: this.mMargin }) { + Stack({ alignContent: Alignment.BottomStart }) { + Content({ mDetailModel: $mDetailModel }) + } + .useSizeType({ + xs: { span: 4, offset: 0 }, + sm: { span: 4, offset: 0 }, + md: { span: 8, offset: 0 }, + lg: { span: 8, offset: 2 }, + }) + } + .width('100%') + .margin({bottom: Constants.deviceType == DeviceType.PHONE ? '56vp' : 0}) + + if(Constants.deviceType == DeviceType.PHONE) { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.End, justifyContent: FlexAlign.End }) { + Flex({ direction: FlexDirection.Row,wrap: FlexWrap.NoWrap, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Flex ({direction: FlexDirection.Column, alignItems: ItemAlign.Center}) { + Image($r("app.media.ic_public_edit")) + .objectFit(ImageFit.Contain) + .height('24vp') + .width('24vp') + Text($r('app.string.edit')) + }.width('50%') + .onClick(() => { + this.mDetailModel.updateContact(); + }) + if (!utils.isEmpty(this.mDetailModel.contactId)) { + Flex({direction: FlexDirection.Column, alignItems: ItemAlign.Center}) { + Image($r("app.media.ic_public_more")) + .objectFit(ImageFit.Contain) + .height('24vp') + .width('24vp') + Text($r('app.string.More')) + }.width('50%').bindMenu(this.mMoreMenu) + + } else { + Flex({direction: FlexDirection.Column, alignItems: ItemAlign.Center}) { + Image($r("app.media.ic_public_more")) + .objectFit(ImageFit.Contain) + .height('24vp') + .width('24vp') + Text($r('app.string.More')) + }.width('50%') + + } + }.height('56vp') + .width('100%') + } + .zIndex(3) + + } + + + } + .width('100%') + .height('100%') + .padding({ left: '12vp', right: '12vp' }) + // .backgroundColor('#46B1E3') + .backgroundColor(this.mDetailModel.contacts.detailsBgColor) + } +} + +@Component +struct Content { + scroller: Scroller = new Scroller(); + @Link private mDetailModel: any; + + build() { + Scroll(this.scroller) { + Column() { + // 上部背景和圆 + Stack({ alignContent: Alignment.Bottom }) { + // 圆的圆心以下 的 白色背景 + Stack() + .backgroundColor($r('app.color.white')) + .width("100%") + .height("51vp") + + //中部 圆 头像 + if (this.mDetailModel.contactForm.isNewNumber) { + // || this.mDetailModel.contactForm.namePrefix == '0' + Image($r('app.media.defalut_user_light')) + .backgroundColor($r('app.color.gray')) + .height('100vp') + .width('100vp') + .clip(new Circle({ width: '100vp', height: '100vp' })) + .border({ width: '4vp', color: Color.White, radius: '100vp' }) + .backgroundColor(this.mDetailModel.contacts.portraitColor) + } else { + Text(this.mDetailModel.contactForm.namePrefix) + .fontSize('30vp') + .fontWeight(FontWeight.Bold) + .fontColor($r('app.color.white')) + .backgroundColor($r('app.color.gray')) + .height('100vp') + .width('100vp') + .textAlign(TextAlign.Center) + .clip(new Circle({ width: '100vp', height: '100vp' })) + .border({ width: '4vp', color: Color.White, radius: '100vp' }) + .backgroundColor(this.mDetailModel.contacts.portraitColor) + } + } + .width("100%") + .height("267vp") + + Column() { + // 名字 + Text((this.mDetailModel.showNameLast && this.mDetailModel.showNameLast.length > 0) + ? this.mDetailModel.showNameLast : $r('app.string.noName')) + .fontSize('24fp') + .fontWeight(FontWeight.Bold) + .margin({ top: '14vp', bottom: '4vp' }) + .width('100%') + .textAlign(TextAlign.Center) + + if (!this.mDetailModel.contactForm.isNewNumber) { + // 公司 + Row() { + Text(this.mDetailModel.contactForm.company) + .fontSize('14fp') + .fontColor($r('app.color.gray')) + .margin({ bottom: '4vp' }) + .visibility(utils.isEmpty(this.mDetailModel.contactForm.company) ? Visibility.None : Visibility.Visible) + // 职务 + Text(this.mDetailModel.contactForm.position) + .fontSize('14fp') + .fontColor($r('app.color.gray')) + .margin({ bottom: '4vp' }) + .visibility(utils.isEmpty(this.mDetailModel.contactForm.position) ? Visibility.None : Visibility.Visible) + } + } + // 详细信息列表 + DetailInfoListView({ mDetailModel: $mDetailModel }); + } + .width('100%') + .backgroundColor($r('app.color.white')) + .padding({ left: '24vp', right: '24vp' }) + + // 通话记录 + DetailCalllog({ mDetailModel: $mDetailModel }) + } + .width('100%') + } + .scrollable(ScrollDirection.Vertical) + .scrollBar(BarState.Off) + .width("100%") + } +} + +/** + * 底部栏 + */ +@Component +struct BottomBar { + @Link private mDetailModel: any; + @Link private moreMenu: any; + + build() { + if (this.mDetailModel.contactForm.showNewContact) { + BottomBarB({ mDetailModel: $mDetailModel, moreMenu: $moreMenu }); + } else { + BottomBarA({ mDetailModel: $mDetailModel, moreMenu: $moreMenu }); + } + } +} + +/** + * 底部栏 + */ +@Component +struct BottomBarA { + @State hasFavorited: boolean = false; + @Link private mDetailModel: any; + @Link private moreMenu: any; + + build() { + Flex({ alignItems: ItemAlign.Center }) { + Column() { + Image(this.hasFavorited ? $r('app.media.ic_contacts_favorite_filled_m') : $r('app.media.ic_contacts_favorite_filled_m_black')) + .objectFit(ImageFit.Contain) + .height(20) + + Text(this.hasFavorited ? $r('app.string.concal_favorite') : $r('app.string.favorite')) + .fontSize(10) + .fontColor(this.hasFavorited ? $r('app.color.font_hasFavorited') : $r('app.color.black')) + .margin({ top: 5 }) + } + .layoutWeight(1) + .onClick(() => { + // this.mDetailModel.selectFavorite() + this.hasFavorited = !this.hasFavorited; + }) + + } + .height("60vp") + .backgroundColor($r('app.color.white')) + .onClick(() => { + this.mDetailModel.showMoreMenuOperationSaveContacts(); + }) + } +} +/** + * 底部栏 新号码(未保存) + */ +@Component +struct BottomBarB { + @Link + private mDetailModel: any; + @Link private moreMenu: any; + + build() { + Flex({ alignItems: ItemAlign.Center }) { + Column() { + Image($r('app.media.ic_public_add')) + .objectFit(ImageFit.Contain) + .height(20) + + Text($r('app.string.create_contact')) + .fontSize(10) + .margin({ top: 5 }) + } + .layoutWeight(1) + .onClick(() => { + this.mDetailModel.addContacts(); + }) + + Column() { + Image($r('app.media.ic_contacts_name_m')) + .objectFit(ImageFit.Contain) + .height(20) + + Text($r('app.string.save_to_existing_contacts')) + .fontSize(10) + .margin({ top: 5 }) + } + .layoutWeight(1) + .onClick(() => { + this.mDetailModel.sendNewContent(); + }) + } + .height("60vp") + .backgroundColor($r('app.color.white')) + .onClick(() => { + this.mDetailModel.showMoreMenuOperationNew(); + }) + } +} + +/** + * 头部栏 + */ +@Component +struct TopBar { + @State hasFavorited: boolean = false; + @Link private mDetailModel: any; + @Link private moreMenu: any; + + build() { + Row() { + Image($r("app.media.ic_public_back")) + .objectFit(ImageFit.Contain) + .height('24vp') + .width('24vp') + .margin({ left: '12vp' }) + .onClick(() => { + router.back(); + }) + + Text("name") + .fontSize(18) + .margin({ left: 10 }) + .visibility(Visibility.None) + + Blank() + + if(Constants.deviceType == DeviceType.WGR) { + Image($r('app.media.ic_contacts_favorite_filled_m_black')) + .objectFit(ImageFit.Contain) + .height('24vp') + .width('24vp') + .margin({ left: '12vp', right: '12vp' }) + .onClick(() => { + this.hasFavorited = !this.hasFavorited; + }) + Image($r("app.media.ic_public_edit")) + .objectFit(ImageFit.Contain) + .height('24vp') + .width('24vp') + .margin({ left: '12vp', right: '12vp' }) + .onClick(() => { + this.mDetailModel.updateContact(); + }) + + if (!utils.isEmpty(this.mDetailModel.contactId)) { + Image($r("app.media.ic_public_more")) + .objectFit(ImageFit.Contain) + .height('24vp') + .width('24vp') + .margin({ left: '12vp', right: '12vp' }) + .bindMenu(this.moreMenu) + } else { + Image($r("app.media.ic_public_more")) + .objectFit(ImageFit.Contain) + .height('24vp') + .width('24vp') + .margin({ left: '12vp', right: '12vp' }) + } + } + } + .height("56vp") + .width("100%") + .position({ x: 0, y: 0 }) + .zIndex(3) + } +} diff --git a/entry/src/main/ets/MainAbility/pages/dialer/DialerTablet.ets b/entry/src/main/ets/MainAbility/pages/dialer/DialerTablet.ets new file mode 100644 index 0000000..edf28f5 --- /dev/null +++ b/entry/src/main/ets/MainAbility/pages/dialer/DialerTablet.ets @@ -0,0 +1,448 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import CallRecord from './callRecord/CallRecord' +import Utils from '../../util/Utils'; +import vibrator from '@ohos.vibrator'; +import resourceManager from '@ohos.resourceManager'; +import media from '@ohos.multimedia.media'; +import fileIO from '@ohos.fileio'; +import HiLog from '../../util/Hilog'; +import DialUtil from '../../util/DialUtil'; +import appStorage from '../../util/AppStorageUtil'; +import COMMON from '../../model/common'; +import DialerPresenter from './../../presenter/dialer/DialerPresenter'; + +const TAG = 'DialerTablet' + +@Component +struct DialButton { + // 按键数字 + @Prop button_number: string + // 按键对应的字符 + @Prop button_char: string + @Link mPresenter: DialerPresenter + + build() { + Column() { + Button() { + Flex({ + direction: FlexDirection.Column, + alignItems: ItemAlign.Center, + justifyContent: FlexAlign.Center + }) { + if (`${this.button_number}` == '*') { + Image($r("app.media.symbol")) + .width($r("app.float.dialer_keypad_height")) + .height($r("app.float.dialer_keypad_width")) + } else if (`${this.button_number}` == '#') { + Image($r("app.media.symbols")) + .width($r("app.float.dialer_keypad_height")) + .height($r("app.float.dialer_keypad_width")) + } else if (`${this.button_number}` == '0') { + Text(`${this.button_number}`) + .fontSize($r("app.float.dialer_button_number_fontSize")) + .fontColor($r('app.color.colorPrimary')) + .margin({ top: $r("app.float.dialer_common_very_small_margin1") }) + } else { + Text(`${this.button_number}`) + .fontSize($r("app.float.dialer_button_number_fontSize")) + .fontColor($r('app.color.colorPrimary')) + } + + if ((this.button_char == 'ic')) { + Image($r("app.media.ic_contacts_voicemail_mini")) + .width($r("app.float.dialer_keypad_margin2")) + .height($r("app.float.dialer_keypad_margin2")) + } else if ((this.button_char == '+')) { + Image($r("app.media.ic_public_add")) + .width($r("app.float.dialer_keypad_margin1")) + .height($r("app.float.dialer_keypad_margin1")) + } else { + Text(`${this.button_char}`) + .fontSize($r("app.float.dialer_button_char_fontSize")) + .fontColor($r('app.color.light_colorPrimary')) + } + } + } + .backgroundColor(Color.White) + .margin({ right: $r("app.float.dialer_common_margin") }) + .width($r("app.float.dialer_keypad_button_width")) + .height($r("app.float.dialer_keypad_button_height")) + .onClick(() => { + this.mPresenter.pressVibrate(); + this.mPresenter.playAudio(this.button_number); + this.mPresenter.ifNeedSpace(); + this.mPresenter.tele_number += this.button_number + this.mPresenter.all_number += this.button_number + this.mPresenter.viewNumberTextProc(); + }) + } + } +} + +@Component +struct DialPad { + @Link mPresenter: any; + + build() { + Column() { + Flex({ direction: FlexDirection.Row, justifyContent: FlexAlign.SpaceAround }) { + DialButton({ + button_number: '1', + button_char: 'ic', + mPresenter: $mPresenter, + }) + + DialButton({ + button_number: '2', + button_char: 'ABC', + mPresenter: $mPresenter, + }) + + DialButton({ + button_number: '3', + button_char: 'DEF', + mPresenter: $mPresenter, + }) + } + + Flex({ direction: FlexDirection.Row, justifyContent: FlexAlign.SpaceAround }) { + DialButton({ + button_number: '4', + button_char: 'GHI', + mPresenter: $mPresenter, + }) + + DialButton({ + button_number: '5', + button_char: 'JKL', + mPresenter: $mPresenter, + }) + + DialButton({ + button_number: '6', + button_char: 'MNO', + mPresenter: $mPresenter, + }) + } + + Flex({ direction: FlexDirection.Row, justifyContent: FlexAlign.SpaceAround }) { + DialButton({ + button_number: '7', + button_char: 'PQRS', + mPresenter: $mPresenter, + }) + + DialButton({ + button_number: '8', + button_char: 'TUV', + mPresenter: $mPresenter, + }) + + DialButton({ + button_number: '9', + button_char: 'WXYZ', + mPresenter: $mPresenter, + }) + } + + Flex({ direction: FlexDirection.Row, justifyContent: FlexAlign.SpaceAround }) { + DialButton({ + button_number: '*', + button_char: '(P)', + mPresenter: $mPresenter, + }) + + DialButton({ + button_number: '0', + button_char: '+', + mPresenter: $mPresenter, + }) + + DialButton({ + button_number: '#', + button_char: '(W)', + mPresenter: $mPresenter, + }) + } + } + .width('100%') + .height('100%') + .backgroundColor(Color.White) + } +} + +@Entry +@Component +export default struct CallTablet { + @State mPresenter: DialerPresenter = DialerPresenter.getInstance() + menuRes: Resource[] = [$r("app.string.call_setting_type_paste"), + $r("app.string.call_setting_type_batch_delete"), + $r("app.string.call_setting_type_harassment_interception"), + $r("app.string.call_setting_type_setting")]; + @State private callmenu: any = [{ value: "", action: () => { + } }]; + + aboutToAppear() { + this.getMenu(); + this.mPresenter.aboutToAppear(); + } + + onPageShow() { + this.mPresenter.onPageShow(); + } + + aboutToDisappear() { + this.mPresenter.onDestroy(); + } + + // bindMenu的文字 + getMenu() { + let tmpPhoneMenu = []; + this.menuRes.forEach(element => { + tmpPhoneMenu.push({}); + }); + this.callmenu = tmpPhoneMenu; + resourceManager.getResourceManager().then(result => { + this.menuRes.forEach((element, i) => { + result.getString(element.id, (err, typeName) => { + HiLog.i(TAG, typeName); + this.callmenu[i] = { + value: typeName, + action: () => { + } + }; + }); + }); + }); + } + + build() { + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Start, justifyContent: FlexAlign.Start }) { + + Column() { + if (this.mPresenter.tele_number.length > 0) { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Text(`${this.mPresenter.tele_number}`) + .fontSize(this.mPresenter.tele_num_size) + .fontColor($r('app.color.colorPrimary')) + .maxLines(1) + } + .width('100%') + .height($r("app.float.dialer_telephone_number_height")) + + // 输入完整手机号码时 + if (this.mPresenter.tele_number.length >= 3) { + Row() { + Image($r("app.media.ic_public_add")) + .width($r("app.float.dialer_common_margin")) + .height($r("app.float.dialer_common_margin")) + .margin({ + left: $r("app.float.dialer_common_margin"), + right: $r("app.float.dialer_common_small_margin") + }) + + Text($r("app.string.new_contact")) + .fontSize($r("app.float.contact_text_size_body1")) + .fontColor($r('app.color.colorPrimary')) + } + .width('100%') + .height($r("app.float.dialer_button_height")) + .onClick(() => { + this.mPresenter.jumpToAccountants() + }) + + Divider() + .vertical(false) + .strokeWidth(1) + .color($r('app.color.light_grey')) + .lineCap(LineCapStyle.Square) + .width($r("app.float.dialer_divider_width")) + .margin({ left: $r("app.float.dialer_common_big_margin") }) + + Row() { + Image($r("app.media.ic_public_contacts")) + .width($r("app.float.dialer_common_margin")) + .height($r("app.float.dialer_common_margin")) + .margin({ + left: $r("app.float.dialer_common_margin"), + right: $r("app.float.dialer_common_small_margin") + }) + + Text($r("app.string.save_to_existing_contacts")) + .fontSize($r("app.float.contact_text_size_body1")) + .fontColor($r('app.color.colorPrimary')) + } + .width('100%') + .height($r("app.float.dialer_button_height")) + .onClick(()=>{ + }) + + Divider() + .vertical(false) + .strokeWidth(1) + .color($r('app.color.light_grey')) + .lineCap(LineCapStyle.Square) + .width($r("app.float.dialer_divider_width")) + .margin({ left: $r("app.float.dialer_common_big_margin") }) + + Row() { + Image($r("app.media.ic_public_message")) + .width($r("app.float.dialer_common_margin")) + .height($r("app.float.dialer_common_margin")) + .margin({ + left: $r("app.float.dialer_common_margin"), + right: $r("app.float.dialer_common_small_margin") + }) + + Text($r("app.string.send_messages")) + .fontSize($r("app.float.contact_text_size_body1")) + .fontColor($r('app.color.colorPrimary')) + } + .width('100%') + .height($r("app.float.dialer_button_height")) + .onClick(()=>{ + this.mPresenter.sendMessage(); + }) + + Divider() + .vertical(false) + .strokeWidth(1) + .color($r('app.color.light_grey')) + .lineCap(LineCapStyle.Square) + .width($r("app.float.dialer_divider_width")) + .margin({ left: $r("app.float.dialer_common_big_margin") }) + } + + } + .width('100%') + .height('100%') + .backgroundColor(Color.White) + } else { + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.End }) { + Button() { + Image($r("app.media.ic_public_more")) + .width($r("app.float.dialer_common_margin")) + .height($r("app.float.dialer_common_margin")) + .bindMenu(this.callmenu) + } + .width($r("app.float.dialer_middle_button_width")) + .height($r("app.float.dialer_middle_button_width")) + .backgroundColor(Color.White) + .margin({ right: $r("app.float.dialer_keypad_margin1")}) + .type(ButtonType.Normal) + } + .width('100%') + .height($r("app.float.dialer_button_height")) + .backgroundColor(Color.White) + .zIndex(3) + + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { + Text($r("app.string.dialer")) + .fontSize($r("app.float.dialer_phone_number_fontSize")) + .fontWeight(FontWeight.Bold) + .height($r("app.float.contact_title_height")) + .fontColor($r('app.color.colorPrimary')) + .margin({ left: $r("app.float.dialer_common_margin") }) + } + .width('100%') + .height($r("app.float.dialer_button_height")) + .backgroundColor(Color.White) + .zIndex(3) + + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + CallRecord() + } + .height('100%') + .zIndex(1) + } + } + .alignItems(HorizontalAlign.Center) + .width('40%') + .height('100%') + + Column() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { + Column().width('73%').height($r("app.float.dialer_block_height")) + + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { + DialPad({ mPresenter: $mPresenter }) + } + .width('73%') + .height($r("app.float.dialer_dialpad_height")) + + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.SpaceBetween }) { + Button() + .backgroundColor(Color.White) + .width($r("app.float.dialer_common_middle_margin")) + .height($r("app.float.dialer_common_middle_margin")) + + // 拨打按钮,悬浮按钮 + Button() { + Image($r("app.media.ic_public_phone_filled_white")) + .width($r("app.float.dialer_dial_icon_width")) + .height($r("app.float.dialer_dial_icon_width")) + } + .width($r("app.float.dialer_big_button_width")) + .height($r("app.float.dialer_big_button_width")) + .backgroundColor($r('app.color.colorConnected')) + .onClick(() => { + this.mPresenter.dialing(this.mPresenter.all_number); + this.mPresenter.tele_number = ''; + this.mPresenter.all_number = ''; + }) + + + // 删除按钮 + Button() { + Image($r("app.media.ic_public_dial_delete")) + .width($r("app.float.dialer_small_button_width")) + .height($r("app.float.dialer_small_button_width")) + } + .backgroundColor(Color.White) + .width($r("app.float.dialer_middle_button_width")) + .height($r("app.float.dialer_middle_button_width")) + .opacity(this.mPresenter.tele_number.length > 0 ? 1 : 0.6) + .enabled(this.mPresenter.tele_number.length > 0 ? true : false) + .gesture( + LongPressGesture({ repeat: false, fingers: 1, duration: 700 }) + .onAction((event: GestureEvent) => { + this.mPresenter.tele_number = ''; + this.mPresenter.all_number = ''; + }) + ) + .onClick(() => { + this.mPresenter.pressVibrate(); + this.mPresenter.all_number = this.mPresenter.all_number.substr(0, this.mPresenter.all_number.length - 1) + this.mPresenter.deleteAddSpace(); + this.mPresenter.deleteTeleNum(); + }) + } + .width('52%') + .height($r("app.float.dialer_keypad_button_height")) + } + .width('100%') + .height('100%') + } + .width('60%') + .height('100%') + .backgroundColor(Color.White) + } + .width('100%') + .height('100%') + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/pages/dialer/callRecord/AllRecord.ets b/entry/src/main/ets/MainAbility/pages/dialer/callRecord/AllRecord.ets new file mode 100644 index 0000000..d1fa414 --- /dev/null +++ b/entry/src/main/ets/MainAbility/pages/dialer/callRecord/AllRecord.ets @@ -0,0 +1,424 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * 通话记录全部通话 + */ +import router from '@system.router'; +import COMMON from '../../../model/common'; +import CONSTANTS from '../../../model/common/Constants'; +import Calllog from '../../../model/calllog/CalllogModel'; +import CallLogRepository from '../../../call/repo/CallLogRepository'; +import appStorage from '../../../util/AppStorageUtil'; +import HiLog from '../../../util/Hilog'; +import DialUtil from '../../../util/DialUtil'; + +const TAG = "AllRecord "; + +@Component +export default struct AllRecord { + @State callLogTotalData: any = { + callLogList: [], + missedList: [], + totalCount: 0, + missedCount: 0 + }; + // 长按单条通话记录显示的菜单 + @State menuShow: boolean = false; + @State currentMsg: string = ''; + @State offsetY: number = 0; + + aboutToAppear() { + this.getCallLog(); + } + + getCallLog() { + let DAHelper = COMMON.getDAHelper(CONSTANTS.uri.CALLLOG_DB_URI); + Calllog.getAllCalls(DAHelper, '', data => { + this.callLogTotalData = data; + }) + } + + build() { + Stack() { + if (this.callLogTotalData.callLogList.length == 0) { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { + Image($r('app.media.no_call_records')) + .objectFit(ImageFit.Contain) + .width($r("app.float.contact_emptyview_image_width_height")) + .height($r("app.float.contact_emptyview_image_width_height")) + .margin({ + top: $r("app.float.dialer_calllog_bindmenu_width1"), + bottom: $r("app.float.dialer_common_very_small_margin1") + }) + Text($r("app.string.no_dialer_calllog")) + .fontSize($r("app.float.contact_text_size_body2")) + .fontWeight(FontWeight.Regular) + .fontColor($r('app.color.textColorTertiary')) + .height($r("app.float.dialer_common_middle_margin")) + .textAlign(TextAlign.Center) + } + .width('100%') + .height('100%') + } else { + List() { + ForEach(this.callLogTotalData.callLogList, (item) => { + ListItem() { + ContactItem({ msg: JSON.stringify(item), show: $menuShow, current: $currentMsg, offsetY: $offsetY }); + } + .height($r("app.float.dialer_listitem_height")) + .gesture( + // 滑动手势 + PanGesture({ fingers: 1, direction: PanDirection.Up | PanDirection.Down, distance: 5 }) + .onActionStart((event: GestureEvent) => { + // 关闭长按菜单 + this.menuShow = false; + }) + ) + }, item => item.id) + } + .divider({ + strokeWidth: 1, + color: $r('app.color.basic_background'), + startMargin: $r("app.float.dialer_keypad_width"), + endMargin: $r("app.float.dialer_common_margin"), + }) + .margin({ bottom: $r("app.float.dialer_calllog_list_margin_bottom") }) + } + + + if (this.menuShow) { + Column() { + Row() { + Text(JSON.parse(this.currentMsg).displayName ? + JSON.parse(this.currentMsg).displayName : + JSON.parse(this.currentMsg).phoneNumber) + .fontSize($r("app.float.dialer_font_size")) + .fontColor($r('app.color.colorPrimary')) + .fontWeight(FontWeight.Medium) + .margin({ left: $r("app.float.dialer_common_small_margin") }) + .textAlign(TextAlign.Start) + .lineHeight($r("app.float.dialer_small_button_width")) + } + .width($r("app.float.dialer_calllog_bindmenu_width1")) + .height($r("app.float.dialer_listitem_height")) + .borderRadius($r("app.float.dialer_common_small_margin")) + .backgroundColor(Color.White) + .onClick(() => { + this.menuShow = false; + }) + + Divider() + .vertical(false) + .strokeWidth(1) + .color($r('app.color.light_grey')) + .lineCap(LineCapStyle.Square) + .width($r("app.float.dialer_divider_width1")) + Row() { + Text($r("app.string.send_message")) + .fontSize($r("app.float.contact_text_size_body1")) + .fontColor($r('app.color.colorPrimary')) + .margin({ left: $r("app.float.dialer_common_small_margin") }) + .textAlign(TextAlign.Start) + .lineHeight($r("app.float.dialer_line_height")) + } + .width($r("app.float.dialer_calllog_bindmenu_width1")) + .height($r("app.float.dialer_middle_button_width")) + .backgroundColor(Color.White) + .onClick(() => { + this.menuShow = false; + }) + + Divider() + .vertical(false) + .strokeWidth(1) + .color($r('app.color.light_grey')) + .lineCap(LineCapStyle.Square) + .width($r("app.float.dialer_divider_width1")) + Row() { + Text($r("app.string.copy_phoneNumber")) + .fontSize($r("app.float.contact_text_size_body1")) + .fontColor($r('app.color.colorPrimary')) + .margin({ left: $r("app.float.dialer_common_small_margin") }) + .textAlign(TextAlign.Start) + .lineHeight($r("app.float.dialer_line_height")) + } + .width($r("app.float.dialer_calllog_bindmenu_width1")) + .height($r("app.float.dialer_middle_button_width")) + .backgroundColor(Color.White) + .onClick(() => { + this.menuShow = false; + }) + + Divider() + .vertical(false) + .strokeWidth(1) + .color($r('app.color.light_grey')) + .lineCap(LineCapStyle.Square) + .width($r("app.float.dialer_divider_width1")) + Row() { + Text($r("app.string.edit_beforeCall")) + .fontSize($r("app.float.contact_text_size_body1")) + .fontColor($r('app.color.colorPrimary')) + .margin({ left: $r("app.float.dialer_common_small_margin") }) + .textAlign(TextAlign.Start) + .lineHeight($r("app.float.dialer_line_height")) + } + .width($r("app.float.dialer_calllog_bindmenu_width1")) + .height($r("app.float.dialer_middle_button_width")) + .backgroundColor(Color.White) + .onClick(() => { + this.menuShow = false; + }) + + Divider() + .vertical(false) + .strokeWidth(1) + .color($r('app.color.light_grey')) + .lineCap(LineCapStyle.Square) + .width($r("app.float.dialer_divider_width1")) + Row() { + Text($r("app.string.add_to_blockList")) + .fontSize($r("app.float.contact_text_size_body1")) + .fontColor($r('app.color.colorPrimary')) + .margin({ left: $r("app.float.dialer_common_small_margin") }) + .textAlign(TextAlign.Start) + .lineHeight($r("app.float.dialer_line_height")) + } + .width($r("app.float.dialer_calllog_bindmenu_width1")) + .height($r("app.float.dialer_middle_button_width")) + .backgroundColor(Color.White) + .onClick(() => { + this.menuShow = false; + }) + + Divider() + .vertical(false) + .strokeWidth(1) + .color($r('app.color.light_grey')) + .lineCap(LineCapStyle.Square) + .width($r("app.float.dialer_divider_width1")) + Row() { + Text($r("app.string.delete_call_logs")) + .fontSize($r("app.float.contact_text_size_body1")) + .fontColor($r('app.color.colorPrimary')) + .margin({ left: $r("app.float.dialer_common_small_margin") }) + .textAlign(TextAlign.Start) + .lineHeight($r("app.float.dialer_line_height")) + } + .width($r("app.float.dialer_calllog_bindmenu_width1")) + .height($r("app.float.dialer_middle_button_width")) + .borderRadius($r("app.float.dialer_common_small_margin")) + .backgroundColor(Color.White) + .onClick(() => { + this.menuShow = false; + CallLogRepository.getInstance().deleteByIdIn(JSON.parse(this.currentMsg).ids).then(data => { + this.getCallLog(); + }); + }) + } + .borderRadius($r("app.float.dialer_common_small_margin")) + .backgroundColor(Color.White) + .shadow({ radius: 10, color: $r('app.color.dialer_shadow_color'), offsetX: 2, offsetY: 2 }) + .position({ x: 200, y: this.offsetY < 416 ? this.offsetY - 170 : 220 }) + } + } + } +} + +@Component +struct ContactItem { + @Link show: boolean + @Link current: string + @Link offsetY: number + @Prop msg: string + + // 拨号拨出 + dialing(phoneNumber) { + DialUtil.getInstance().dial(phoneNumber, (data, err, value) => { + HiLog.i(TAG, 'dial isEmergencyPhoneNumber : ' + data + ' err : ' + err + ' value : ' + value); + }); + } + + build() { + Flex({ direction: FlexDirection.Row, + justifyContent: FlexAlign.SpaceBetween, + alignItems: ItemAlign.Center }) { + + // 左侧布局 + Row() { + Flex({ direction: FlexDirection.Column, + justifyContent: FlexAlign.Start, + alignItems: ItemAlign.Center }) { + if (JSON.parse(this.msg).callType == 1) { + // 呼入 + Row() { + Blank(16) + } + } else if (JSON.parse(this.msg).callType == 2) { + // 呼出 + Image($r('app.media.ic_contacts_Dialled')) + .height($r("app.float.dialer_common_small_margin")) + .width($r("app.float.dialer_common_small_margin")) + } else if (JSON.parse(this.msg).callType == 3) { + // 未接 + Row() { + Blank(16) + } + } else if (JSON.parse(this.msg).callType == 5) { + // 拒接 + Image($r('app.media.ic_contacts_Reject')) + .height($r("app.float.dialer_common_small_margin")) + .width($r("app.float.dialer_common_small_margin")) + } + } + .margin({ + right: $r("app.float.dialer_keypad_margin1"), + top: $r("app.float.dialer_keypad_margin1"), + left: $r("app.float.dialer_keypad_margin1") + }) + .height($r("app.float.dialer_middle_button_width")) + + Flex({ direction: FlexDirection.Column, + justifyContent: FlexAlign.Center, + alignItems: ItemAlign.Start }) { + + Flex({ direction: FlexDirection.Row, + justifyContent: FlexAlign.Start, + alignItems: ItemAlign.Center }) { + + // 拒接和未接标红 + if (JSON.parse(this.msg).displayName) { + if (JSON.parse(this.msg).callType == 3 || JSON.parse(this.msg).callType == 5) { + Text(JSON.parse(this.msg).displayName) + .fontSize($r("app.float.contact_text_size_body1")) + .margin({ right: $r("app.float.dialer_common_very_small_margin2") }) + .fontColor($r('app.color.error')) + .fontWeight(FontWeight.Medium) + } else { + Text(JSON.parse(this.msg).displayName) + .fontSize($r("app.float.contact_text_size_body1")) + .margin({ right: $r("app.float.dialer_common_very_small_margin2") }) + .fontColor($r('app.color.colorPrimary')) + .fontWeight(FontWeight.Medium) + } + } else { + if (JSON.parse(this.msg).callType == 3 || JSON.parse(this.msg).callType == 5) { + Text(JSON.parse(this.msg).phoneNumber) + .fontSize($r("app.float.contact_text_size_body1")) + .margin({ right: $r("app.float.dialer_common_very_small_margin2") }) + .fontColor($r('app.color.error')) + .fontWeight(FontWeight.Medium) + } else { + Text(JSON.parse(this.msg).phoneNumber) + .fontSize($r("app.float.contact_text_size_body1")) + .margin({ right: $r("app.float.dialer_common_very_small_margin2") }) + .fontColor($r('app.color.colorPrimary')) + .fontWeight(FontWeight.Medium) + } + } + + // 通话次数一次以上才显示通话次数 + if (JSON.parse(this.msg).count != 1) { + if (JSON.parse(this.msg).callType == 3 || JSON.parse(this.msg).callType == 5) { + Text('(' + JSON.parse(this.msg).count + ')') + .fontSize($r("app.float.contact_text_size_body1")) + .fontColor($r('app.color.error')) + .fontWeight(FontWeight.Medium) + } else { + Text('(' + JSON.parse(this.msg).count + ')') + .fontSize($r("app.float.contact_text_size_body1")) + .fontColor($r('app.color.colorPrimary')) + .fontWeight(FontWeight.Medium) + } + } + + } + + // 标签 + if (JSON.parse(this.msg).numberLocation) { + Text(JSON.parse(this.msg).numberLocation) + .fontSize($r("app.float.dialer_text_size_body1")) + .fontColor($r('app.color.more_light_colorPrimary')) + .margin({ top: $r("app.float.dialer_common_very_small_margin1") }) + } else { + Text($r("app.string.unknown")) + .fontSize($r("app.float.dialer_text_size_body1")) + .fontColor($r('app.color.more_light_colorPrimary')) + .margin({ top: $r("app.float.dialer_common_very_small_margin1") }) + } + + } + .height($r("app.float.dialer_listitem_height")) + } + + // 右侧布局 + Row() { + Flex({ direction: FlexDirection.Column, + justifyContent: FlexAlign.Center, + alignItems: ItemAlign.Center }) { + Text(JSON.parse(this.msg).createTime) + .fontSize($r("app.float.contact_text_size_body2")) + .margin({ right: $r("app.float.dialer_keypad_margin1") }) + .fontColor($r('app.color.more_light_colorPrimary')) + .width($r("app.float.dialer_time_width")) + .textAlign(TextAlign.End) + } + + Image($r('app.media.ic_public_detail')) + .height($r("app.float.dialer_common_margin")) + .width($r("app.float.dialer_common_margin")) + .margin({ right: $r("app.float.dialer_time_width") }) + .onClick(() => { + router.push( + { + uri: "pages/contacts/details/ContactDetail", + params: { + sourceFromCallRecord: true, + isNewNumber: true, + phoneNumberShow: JSON.parse(this.msg).phoneNumber + } + } + ) + }) + } + } + .width('100%') + .height($r("app.float.dialer_listitem_height")) + .gesture( + // 滑动手势 + PanGesture({ fingers: 1, direction: PanDirection.Left, distance: 5 }) + .onActionStart(() => { + }) + ) + .gesture( + // 长按手势 + LongPressGesture({ repeat: false, fingers: 1, duration: 700 }) + // 长按动作识别成功时触发 + .onAction((event: GestureEvent) => { + this.show = true + this.current = this.msg + this.offsetY = JSON.parse(JSON.stringify(event)) + .globalY + }) + ) + .onClick((event: ClickEvent) => { + this.show = false + // 跳转到拨打电话界面 + this.dialing(JSON.parse(this.msg).phoneNumber) + }) + } +} + diff --git a/entry/src/main/ets/MainAbility/pages/dialer/callRecord/CallRecord.ets b/entry/src/main/ets/MainAbility/pages/dialer/callRecord/CallRecord.ets new file mode 100644 index 0000000..304ed79 --- /dev/null +++ b/entry/src/main/ets/MainAbility/pages/dialer/callRecord/CallRecord.ets @@ -0,0 +1,61 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * 通话记录 + */ +import AllRecord from './AllRecord'; +import MissedRecord from './MissedRecord'; +import {CallLogTabs} from '../../../component/dialer/CallLogTabs'; + + +@Entry +@Component +export default struct CallRecord { + @State bottomTabIndex: number = 0; + private controller: TabsController = new TabsController(); + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start, justifyContent: FlexAlign.Start }) { + CallLogTabs({ controller: this.controller, bottomTabIndex: $bottomTabIndex}) + + Tabs({ barPosition: BarPosition.Start, index: this.bottomTabIndex, controller: this.controller }) { + TabContent() { + AllRecord() + } + + TabContent() { + MissedRecord() + } + + } + .onChange((index: number) => { + this.bottomTabIndex = index + }) + .vertical(false) + .barHeight(0) + .barWidth(0) + .barMode(BarMode.Fixed) + .scrollable(false) + .backgroundColor(Color.White) + .animationDuration(0) + .zIndex(1) + } + .width('100%') + .height('100%') + .layoutWeight(1) + .backgroundColor(Color.White) + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/pages/dialer/callRecord/MissedRecord.ets b/entry/src/main/ets/MainAbility/pages/dialer/callRecord/MissedRecord.ets new file mode 100644 index 0000000..cd2dcbc --- /dev/null +++ b/entry/src/main/ets/MainAbility/pages/dialer/callRecord/MissedRecord.ets @@ -0,0 +1,392 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * 通话记录未接来电 + */ +import router from '@system.router'; +import COMMON from '../../../model/common' +import CONSTANTS from '../../../model/common/Constants' +import Calllog from '../../../model/calllog/CalllogModel' +import CallLogRepository from '../../../call/repo/CallLogRepository'; +import HiLog from '../../../util/Hilog'; +import DialUtil from '../../../util/DialUtil'; + +const TAG = "MissedRecord "; + +@Component +export default struct MissedRecord { + @State callLogTotalData: any = { + callLogList: [], + missedList: [], + totalCount: 0, + missedCount: 0 + }; + @State menuShow: boolean = false; + @State currentMsg: string = ''; + @State offsetY: number = 0; + + aboutToAppear() { + this.getCallLog(); + } + + getCallLog() { + var DAHelper = COMMON.getDAHelper(CONSTANTS.uri.CALLLOG_DB_URI); + Calllog.getAllCalls(DAHelper, '', data => { + this.callLogTotalData = data; + }) + } + + build() { + Stack() { + if (this.callLogTotalData.missedList.length == 0) { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { + Image($r('app.media.no_call_records')) + .objectFit(ImageFit.Contain) + .width($r("app.float.contact_emptyview_image_width_height")) + .height($r("app.float.contact_emptyview_image_width_height")) + .margin({ + top: $r("app.float.dialer_calllog_bindmenu_width1"), + bottom: $r("app.float.dialer_common_very_small_margin1") + }) + Text($r("app.string.no_dialer_missed_calllog")) + .fontSize($r("app.float.contact_text_size_body2")) + .fontWeight(FontWeight.Regular) + .fontColor($r('app.color.textColorTertiary')) + .height($r("app.float.dialer_common_middle_margin")) + .textAlign(TextAlign.Center) + } + .width('100%') + .height('100%') + } else { + List() { + ForEach(this.callLogTotalData.missedList, (item) => { + ListItem() { + ContactItem({ msg: JSON.stringify(item), show: $menuShow, current: $currentMsg, offsetY: $offsetY }); + } + .height($r("app.float.dialer_listitem_height")) + .gesture( + // 滑动手势 + PanGesture({ fingers: 1, direction: PanDirection.Up | PanDirection.Down, distance: 5 }) + .onActionStart((event: GestureEvent) => { + // 关闭长按菜单 + this.menuShow = false; + }) + ) + }, item => item.id) + } + .divider({ + strokeWidth: 1, + color: $r('app.color.light_grey'), + startMargin: $r("app.float.dialer_keypad_width"), + endMargin: $r("app.float.dialer_common_margin"), + }) + .margin({ bottom: $r("app.float.dialer_calllog_list_margin_bottom") }) + } + + if (this.menuShow) { + Column() { + Row() { + Text(JSON.parse(this.currentMsg).displayName ? + JSON.parse(this.currentMsg).displayName : + JSON.parse(this.currentMsg).phoneNumber) + .fontSize($r("app.float.dialer_font_size")) + .fontColor($r('app.color.colorPrimary')) + .fontWeight(FontWeight.Medium) + .margin({ left: $r("app.float.dialer_common_small_margin") }) + .textAlign(TextAlign.Start) + .lineHeight($r("app.float.dialer_small_button_width")) + } + .width($r("app.float.dialer_calllog_bindmenu_width1")) + .height($r("app.float.dialer_listitem_height")) + .borderRadius($r("app.float.dialer_common_small_margin")) + .backgroundColor(Color.White) + .onClick(() => { + this.menuShow = false; + }) + + Divider() + .vertical(false) + .strokeWidth(1) + .color($r('app.color.light_grey')) + .lineCap(LineCapStyle.Square) + .width($r("app.float.dialer_divider_width1")) + Row() { + Text($r("app.string.send_message")) + .fontSize($r("app.float.contact_text_size_body1")) + .fontColor($r('app.color.colorPrimary')) + .margin({ left: $r("app.float.dialer_common_small_margin") }) + .textAlign(TextAlign.Start) + .lineHeight($r("app.float.dialer_line_height")) + } + .width($r("app.float.dialer_calllog_bindmenu_width1")) + .height($r("app.float.dialer_middle_button_width")) + .backgroundColor(Color.White) + .onClick(() => { + this.menuShow = false; + }) + + Divider() + .vertical(false) + .strokeWidth(1) + .color($r('app.color.light_grey')) + .lineCap(LineCapStyle.Square) + .width($r("app.float.dialer_divider_width1")) + Row() { + Text($r("app.string.copy_phoneNumber")) + .fontSize($r("app.float.contact_text_size_body1")) + .fontColor($r('app.color.colorPrimary')) + .margin({ left: $r("app.float.dialer_common_small_margin") }) + .textAlign(TextAlign.Start) + .lineHeight($r("app.float.dialer_line_height")) + } + .width($r("app.float.dialer_calllog_bindmenu_width1")) + .height($r("app.float.dialer_middle_button_width")) + .backgroundColor(Color.White) + .onClick(() => { + this.menuShow = false; + }) + + Divider() + .vertical(false) + .strokeWidth(1) + .color($r('app.color.light_grey')) + .lineCap(LineCapStyle.Square) + .width($r("app.float.dialer_divider_width1")) + Row() { + Text($r("app.string.edit_beforeCall")) + .fontSize($r("app.float.contact_text_size_body1")) + .fontColor($r('app.color.colorPrimary')) + .margin({ left: $r("app.float.dialer_common_small_margin") }) + .textAlign(TextAlign.Start) + .lineHeight($r("app.float.dialer_line_height")) + } + .width($r("app.float.dialer_calllog_bindmenu_width1")) + .height($r("app.float.dialer_middle_button_width")) + .backgroundColor(Color.White) + .onClick(() => { + this.menuShow = false; + }) + + Divider() + .vertical(false) + .strokeWidth(1) + .color($r('app.color.light_grey')) + .lineCap(LineCapStyle.Square) + .width($r("app.float.dialer_divider_width1")) + Row() { + Text($r("app.string.add_to_blockList")) + .fontSize($r("app.float.contact_text_size_body1")) + .fontColor($r('app.color.colorPrimary')) + .margin({ left: $r("app.float.dialer_common_small_margin") }) + .textAlign(TextAlign.Start) + .lineHeight($r("app.float.dialer_line_height")) + } + .width($r("app.float.dialer_calllog_bindmenu_width1")) + .height($r("app.float.dialer_middle_button_width")) + .backgroundColor(Color.White) + .onClick(() => { + this.menuShow = false; + }) + + Divider() + .vertical(false) + .strokeWidth(1) + .color($r('app.color.light_grey')) + .lineCap(LineCapStyle.Square) + .width($r("app.float.dialer_divider_width1")) + Row() { + Text($r("app.string.delete_call_logs")) + .fontSize($r("app.float.contact_text_size_body1")) + .fontColor($r('app.color.colorPrimary')) + .margin({ left: $r("app.float.dialer_common_small_margin") }) + .textAlign(TextAlign.Start) + .lineHeight($r("app.float.dialer_line_height")) + } + .width($r("app.float.dialer_calllog_bindmenu_width1")) + .height($r("app.float.dialer_middle_button_width")) + .borderRadius($r("app.float.dialer_common_small_margin")) + .backgroundColor(Color.White) + .onClick(() => { + this.menuShow = false; + CallLogRepository.getInstance().deleteByIdIn(JSON.parse(this.currentMsg).ids).then(data => { + this.getCallLog(); + }); + }) + } + .borderRadius($r("app.float.dialer_common_small_margin")) + .backgroundColor(Color.White) + .shadow({ radius: 10, color: $r('app.color.dialer_shadow_color'), offsetX: 2, offsetY: 2 }) + .position({ x: 200, y: this.offsetY < 416 ? this.offsetY - 170 : 220 }) + } + } + } +} + +@Component +struct ContactItem { + @Link show: boolean + @Link current: string + @Link offsetY: number + @Prop msg: string + + // 拨号拨出 + dialing(phoneNumber) { + DialUtil.getInstance().dial(phoneNumber, (data, err, value) => { + HiLog.i(TAG, 'dial isEmergencyPhoneNumber : ' + data + ' err : ' + err + ' value : ' + value); + }); + } + + build() { + Flex({ direction: FlexDirection.Row, + justifyContent: FlexAlign.SpaceBetween, + alignItems: ItemAlign.Center }) { + + // 左侧布局 + Row() { + Flex({ direction: FlexDirection.Column, + justifyContent: FlexAlign.Start, + alignItems: ItemAlign.Center }) { + + if (JSON.parse(this.msg).callType == 3) { + // 未接 + Row() { + Blank(16) + } + } else if (JSON.parse(this.msg).callType == 5) { + // 拒接 + Image($r('app.media.ic_contacts_Reject')) + .height($r("app.float.dialer_common_small_margin")) + .width($r("app.float.dialer_common_small_margin")) + } else { + Row() { + Blank(16) + } + } + } + .margin({ + right: $r("app.float.dialer_keypad_margin1"), + top: $r("app.float.dialer_keypad_margin1"), + left: $r("app.float.dialer_keypad_margin1") + }) + .height($r("app.float.dialer_middle_button_width")) + + Flex({ direction: FlexDirection.Column, + justifyContent: FlexAlign.Center, + alignItems: ItemAlign.Start }) { + + Flex({ direction: FlexDirection.Row, + justifyContent: FlexAlign.Start, + alignItems: ItemAlign.Center }) { + + // 未接和拒接标红 + if (JSON.parse(this.msg).displayName) { + Text(JSON.parse(this.msg).displayName) + .fontSize($r("app.float.contact_text_size_body1")) + .margin({ right: $r("app.float.dialer_common_very_small_margin2") }) + .fontColor($r('app.color.error')) + .fontWeight(FontWeight.Medium) + } else { + Text(JSON.parse(this.msg).phoneNumber) + .fontSize($r("app.float.contact_text_size_body1")) + .margin({ right: $r("app.float.dialer_common_very_small_margin2") }) + .fontColor($r('app.color.error')) + .fontWeight(FontWeight.Medium) + } + + // 通话次数一次以上才显示通话次数 + if (JSON.parse(this.msg).count != 1) { + Text('(' + JSON.parse(this.msg).count + ')') + .fontSize($r("app.float.contact_text_size_body1")) + .fontColor($r('app.color.error')) + .fontWeight(FontWeight.Medium) + } + } + + // 标签 + if (JSON.parse(this.msg).numberLocation) { + Text(JSON.parse(this.msg).numberLocation) + .fontSize($r("app.float.dialer_text_size_body1")) + .fontColor($r('app.color.more_light_colorPrimary')) + .margin({ top: $r("app.float.dialer_common_very_small_margin1") }) + } else { + Text($r("app.string.unknown")) + .fontSize($r("app.float.dialer_text_size_body1")) + .fontColor($r('app.color.more_light_colorPrimary')) + .margin({ top: $r("app.float.dialer_common_very_small_margin1") }) + } + + } + .height($r("app.float.dialer_listitem_height")) + } + + // 右侧布局 + Row() { + Flex({ direction: FlexDirection.Column, + justifyContent: FlexAlign.Center, + alignItems: ItemAlign.Center }) { + Text(JSON.parse(this.msg).createTime) + .fontSize($r("app.float.contact_text_size_body2")) + .margin({ right: $r("app.float.dialer_keypad_margin1") }) + .fontColor($r('app.color.more_light_colorPrimary')) + .width($r("app.float.dialer_time_width")) + .textAlign(TextAlign.End) + } + + Image($r('app.media.ic_public_detail')) + .height($r("app.float.dialer_common_margin")) + .width($r("app.float.dialer_common_margin")) + .margin({ right: $r("app.float.dialer_time_width") }) + .onClick(() => { + router.push( + { + uri: "pages/contacts/details/ContactDetail", + params: { + sourceFromCallRecord: true, + isNewNumber: true, + phoneNumberShow: JSON.parse(this.msg).phoneNumber + } + } + ) + }) + } + } + .width('100%') + .height($r("app.float.dialer_listitem_height")) + .gesture( + // 滑动手势 + PanGesture({ fingers: 1, direction: PanDirection.Left, distance: 5 }) + .onActionStart(() => { + }) + ) + .gesture( + // 长按手势 + LongPressGesture({ repeat: false, fingers: 1, duration: 700 }) + // 长按动作识别成功时触发 + .onAction((event: GestureEvent) => { + this.show = true; + this.current = this.msg; + this.offsetY = JSON.parse(JSON.stringify(event)) + .globalY; + }) + ) + .onClick((event: ClickEvent) => { + this.show = false + // 跳转到拨打电话界面 + this.dialing(JSON.parse(this.msg).phoneNumber) + }) + } +} + diff --git a/entry/src/main/ets/MainAbility/pages/dialog/DeleteDialogEx.ets b/entry/src/main/ets/MainAbility/pages/dialog/DeleteDialogEx.ets new file mode 100644 index 0000000..115e909 --- /dev/null +++ b/entry/src/main/ets/MainAbility/pages/dialog/DeleteDialogEx.ets @@ -0,0 +1,82 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * 删除弹框,在底部显示; + */ +@CustomDialog +export default struct DeleteDialogEx { + controller: CustomDialogController; + cancel: () => void; + confirm: () => void; + title: string | Resource; + cancalText: string | Resource; + confrimText: string | Resource; + + build() { + Flex({ + direction: FlexDirection.Column, + justifyContent: FlexAlign.Center, + alignItems: ItemAlign.Center + }) { + Flex({ + direction: FlexDirection.Column, + justifyContent: FlexAlign.Center, + alignItems: ItemAlign.Center + }) { + Text(this.title).fontSize(24) + } + .height(30) + .margin({ bottom: 10 }) + + Row() { + Flex({ + direction: FlexDirection.Column, + justifyContent: FlexAlign.Center, + alignItems: ItemAlign.Center + }) { + Text(this.cancalText).fontColor($r("app.color.cancel")).fontSize(20) + } + .layoutWeight(1) + .height(35) + .onClick(() => { + this.controller.close(); + this.cancel(); + }) + + Line().width(1).height(25).backgroundColor(Color.Gray) + + Flex({ + direction: FlexDirection.Column, + justifyContent: FlexAlign.Center, + alignItems: ItemAlign.Center + }) { + Text(this.confrimText).fontColor(Color.Red).fontSize(20) + } + .layoutWeight(1) + .height(35) + .onClick(() => { + this.controller.close(); + this.confirm(); + }) + } + .height('30vp') + } + .width('90%') + .height(110) + .borderRadius(20) + .padding(20) + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/pages/dialog/ShareDialogEx.ets b/entry/src/main/ets/MainAbility/pages/dialog/ShareDialogEx.ets new file mode 100644 index 0000000..de1c1c6 --- /dev/null +++ b/entry/src/main/ets/MainAbility/pages/dialog/ShareDialogEx.ets @@ -0,0 +1,72 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * 分享弹框,在底部显示; + */ +@CustomDialog +export default struct ShareDialogEx { + controller: CustomDialogController; + cancel: () => void; + title: string | Resource; + itemList: string[] | Resource[]; + cancelText: string | Resource; + onItemClick: (item, index) => {}; + + build() { + Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.Center, alignItems: ItemAlign.Start }) { + Text(this.title) + .width('100%') + .height(40) + .fontSize(24) + + List() { + ForEach(this.itemList, (item, index) => { + ListItem() { + Column() { + Text(item).fontSize(20).margin({ top: 5, bottom: 5 }) + } + .width('100%') + .alignItems(HorizontalAlign.Start) + .onClick(() => { + this.onItemClick(item, index); + this.controller.close(); + }) + } + }, item => item); + } + .width('100%') + .flexGrow(1) + + Column() { + Text(this.cancelText).textAlign(TextAlign.Center) + .width('100%') + .fontSize(20) + .fontColor($r("app.color.cancel")) + } + .width('100%') + .height(30) + .alignItems(HorizontalAlign.Center) + .onClick(() => { + this.controller.close(); + this.cancel(); + }) + } + .width('90%') + .height(200) + .borderRadius(20) + .padding(10) + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/pages/navigation/Navigation.ets b/entry/src/main/ets/MainAbility/pages/navigation/Navigation.ets new file mode 100644 index 0000000..9edc906 --- /dev/null +++ b/entry/src/main/ets/MainAbility/pages/navigation/Navigation.ets @@ -0,0 +1,102 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import presenter from '../../presenter/navigation/NavigationPresenter'; + +/** + * 联系人导航栏页面基础按钮&跳转逻辑; + */ +@Component +export struct VerticalTabs { + private tabSrc: number[] = [0, 1] + private controller: TabsController + @Link bottomTabIndex: number + @State present: typeof presenter = presenter; + + build() { + Flex({ + direction: FlexDirection.Column, + alignItems: ItemAlign.Center, + justifyContent: FlexAlign.Center + }) { + ForEach(this.tabSrc, item => { + Flex({direction: FlexDirection.Column, + alignItems: ItemAlign.Center, + justifyContent: FlexAlign.Center}) { + Image(this.present.getTabSrc(this.bottomTabIndex, item)) + .objectFit(ImageFit.Contain) + .width($r("app.float.contact_samll_image_width_height")) + .height($r("app.float.contact_samll_image_width_height")) + Text(this.present.getTabText(this.bottomTabIndex, item)) + .fontSize($r("app.float.contact_text_size_body3")) + .fontColor(this.present.getTabTextColor(this.bottomTabIndex, item)) + } + .width($r("app.float.contact_navigation_width")) + .height($r("app.float.contact_navigation_element_height")) + .onClick(() => { + if (this.bottomTabIndex != item) { + this.controller.changeIndex(item) + } + }) + }, item => item.toString()) + } + .width($r("app.float.contact_navigation_width")) + .height('100%') + } +} + +/** + * 联系人导航栏页面基础按钮&跳转逻辑; + */ +const DENSITY = 1.5 + +@Component +export struct HorizontalTabs { + private tabSrc: number[] = [0, 1] + private controller: TabsController + @Link bottomTabIndex: number + @State present: typeof presenter = presenter; + + build() { + Flex({ + direction: FlexDirection.Row, + alignItems: ItemAlign.Center, + justifyContent: FlexAlign.Center + }) { + ForEach(this.tabSrc, item => { + Flex({direction: FlexDirection.Column, + alignItems: ItemAlign.Center, + justifyContent: FlexAlign.Center}) { + Image(this.present.getTabSrc(this.bottomTabIndex, item)) + .objectFit(ImageFit.Contain) + .width($r("app.float.contact_samll_image_width_height")) + .height($r("app.float.contact_samll_image_width_height")) + Text(this.present.getTabText(this.bottomTabIndex, item)) + .fontSize($r("app.float.contact_text_size_body3")) + .fontColor(this.present.getTabTextColor(this.bottomTabIndex, item)) + } + .height($r("app.float.contact_titleguide_height")) + .layoutWeight(1) + .onClick(() => { + if (this.bottomTabIndex != item) { + this.controller.changeIndex(item) + } + }) + }, item => item.toString()) + } + .height($r("app.float.contact_titleguide_height")) + .width('100%') + .padding({ left: $r("app.float.common_margin"), right: $r("app.float.common_margin") }) + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/pages/phone/dialer/Dialer.ets b/entry/src/main/ets/MainAbility/pages/phone/dialer/Dialer.ets new file mode 100644 index 0000000..7feb106 --- /dev/null +++ b/entry/src/main/ets/MainAbility/pages/phone/dialer/Dialer.ets @@ -0,0 +1,579 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import router from '@system.router'; +import CallRecord from './callRecord/CallRecord' +import Utils from '../../../util/Utils'; +import vibrator from '@system.vibrator'; +import ContactsLog from '../../../util/ContactsLog'; +import resourceManager from '@ohos.resourceManager'; +import HiLog from '../../../util/Hilog'; +import DialUtil from '../../../util/DialUtil'; +import {UPDATE_RECORD} from './callRecord/allRecord' + +// 号码编辑框最大可显示号码长度,依据p40为25个数字 +const NUM_TEXT_MAX_LENGTH = 20; +// 号码编辑框 最大字体 70px时的最大长度 +const NUM_TEXT_MAXSIZE_LENGTH = 14; +// 号码编辑框数字最大字体大小,单位px +const NUM_TEXT_FONT_SIZE_MAX = 40; +const NUM_BUTTON_BASIC_LENGTH = 50; +const DIALER_BUTTON_MARGIN = 20; + +const TAG = 'Dialer'; + +const DENSITY = 1.5; + +// 输入号码时检查是否需要添加格式化空格 +function checkNeedNumberSpace(numText) { + let isSpace = /[\+;,#\*]/g; + let isRule = /^\+.*/; + if (isSpace.test(numText)) { // 号码字符串中包含特殊字符则不添加空格 + if (isRule.test(numText)) { + return true; + } else { + return false; + } + } + return true; +} +// 按键振动 +function pressVibrate() { + vibrator.vibrate({ + mode: 'short', + success: () => void {}, + fail: function (ret) { + ContactsLog.info(TAG + 'vibrate is failed'); + }, + complete: () => void {} + }); +} +// 按键音 +function setRingTone() { + ContactsLog.info(TAG + 'keypad tone'); +} + +@Component +struct DialButton { + // 按键数字 + @Prop button_number: string + // 按键对应的字符 + @Prop button_char: string + // 电话号码 + @Link tel_num: string + @Link numTextSize: number + + // 输入号码时添加空格 + ifNeedSpace() { + switch (this.tel_num.length) { + case 3: + if (checkNeedNumberSpace(this.tel_num)) { + this.tel_num = this.tel_num + ' '; + } + break; + case 8: + this.tel_num = this.tel_num + ' '; + break; + default: + break; + } + } + // 输入号码超长处理 + viewNumberTextProc() { + let numStringNoSpace = Utils.removeSpace(this.tel_num); + // 超长后去除全部空格 + this.tel_num = numStringNoSpace.length > NUM_TEXT_MAX_LENGTH ? + numStringNoSpace.substr(numStringNoSpace.length - NUM_TEXT_MAX_LENGTH) : this.tel_num; + if (this.tel_num.length > NUM_TEXT_MAXSIZE_LENGTH) { + this.tel_num = Utils.removeSpace(this.tel_num); + } + if (this.tel_num.length > NUM_TEXT_MAXSIZE_LENGTH) { + this.numTextSize = NUM_TEXT_FONT_SIZE_MAX * NUM_TEXT_MAXSIZE_LENGTH / (this.tel_num.length); // 可视号码在16-25位时,适配font-size + } else { + this.numTextSize = NUM_TEXT_FONT_SIZE_MAX; + } + } + + build() { + Column() { + Button() { + Flex({ + direction: FlexDirection.Column, + alignItems: ItemAlign.Center, + justifyContent: FlexAlign.Center + }) { + Text(`${this.button_number}`) + .fontSize(25 * DENSITY) + if ((this.button_char == 'ic')) { + Image($r("app.media.ic_contacts_voicemail_mini")) + .width(15 * DENSITY) + .height(15 * DENSITY) + } else { + Text(`${this.button_char}`) + .fontColor($r("app.color.dialer_char_button_color")) + .fontSize(10 * DENSITY) + } + } + } + .backgroundColor($r("app.color.basic_background")) + .width(NUM_BUTTON_BASIC_LENGTH * DENSITY) + .height(NUM_BUTTON_BASIC_LENGTH * DENSITY) + .onClick(() => { + pressVibrate(); + setRingTone(); + this.ifNeedSpace(); + this.tel_num += this.button_number + this.viewNumberTextProc(); + ContactsLog.info(TAG + this.tel_num) + if (this.tel_num.length > 0) { + AppStorage.SetOrCreate('number_show', true) + } + }) + } + } +} + +@Component +struct DialPad { + @Link tel_num: string + @Link numTextSize: number + + build() { + Column() { + Flex({ direction: FlexDirection.Row, justifyContent: FlexAlign.SpaceAround }) { + DialButton({ button_number: '1', button_char: 'ic', tel_num: $tel_num, numTextSize: $numTextSize }) + + DialButton({ button_number: '2', button_char: 'ABC', tel_num: $tel_num, numTextSize: $numTextSize }) + + DialButton({ button_number: '3', button_char: 'DEF', tel_num: $tel_num, numTextSize: $numTextSize }) + }.margin({ top: DIALER_BUTTON_MARGIN }) + + Flex({ direction: FlexDirection.Row, justifyContent: FlexAlign.SpaceAround }) { + DialButton({ button_number: '4', button_char: 'GHI', tel_num: $tel_num, numTextSize: $numTextSize }) + + DialButton({ button_number: '5', button_char: 'JKL', tel_num: $tel_num, numTextSize: $numTextSize }) + + DialButton({ button_number: '6', button_char: 'MNO', tel_num: $tel_num, numTextSize: $numTextSize }) + }.margin({ top: DIALER_BUTTON_MARGIN }) + + Flex({ direction: FlexDirection.Row, justifyContent: FlexAlign.SpaceAround }) { + DialButton({ button_number: '7', button_char: 'PQRS', tel_num: $tel_num, numTextSize: $numTextSize }) + + DialButton({ button_number: '8', button_char: 'TUV', tel_num: $tel_num, numTextSize: $numTextSize }) + + DialButton({ button_number: '9', button_char: 'WXYZ', tel_num: $tel_num, numTextSize: $numTextSize }) + }.margin({ top: DIALER_BUTTON_MARGIN }) + + Flex({ direction: FlexDirection.Row, justifyContent: FlexAlign.SpaceAround }) { + DialButton({ button_number: '*', button_char: '(P)', tel_num: $tel_num, numTextSize: $numTextSize }) + + DialButton({ button_number: '0', button_char: '+', tel_num: $tel_num, numTextSize: $numTextSize }) + + DialButton({ button_number: '#', button_char: '(W)', tel_num: $tel_num, numTextSize: $numTextSize }) + }.margin({ top: DIALER_BUTTON_MARGIN }) + }.width("100%") + } +} + +@Entry +@Component +export default struct Call { + + // 默认显示拨号盘 + @State panelShow: boolean = false + // 默认不显示收展键 + @State btnShow: boolean = true + // 电话号码 + @State tele_number: string = '' + @State tele_num_size: number = NUM_TEXT_FONT_SIZE_MAX; + @State dialer_w: number = 50; + @State dialer_h: number = 50; + @State call_w: number = 50; + @State call_h: number = 50; + @State call_p: number = 150 * DENSITY; + @State moveX: number = 0 + @State moveY: number = 800 + @State newHidden: Visibility= Visibility.None + @StorageLink('number_show') number_show: boolean = false + private menuRes: Resource[] = [$r("app.string.call_setting_type_paste"), + $r("app.string.call_setting_type_batch_delete"), + $r("app.string.call_setting_type_harassment_interception"), + $r("app.string.call_setting_type_setting")]; + @State private callmenu: any = [{ value: "", action: () => { + } }]; + + private aboutToAppear(): void { + AppStorage.SetOrCreate('number_show', false) + let tmpPhoneMenu = []; + this.menuRes.forEach(element => { + tmpPhoneMenu.push({}); + }); + this.callmenu = tmpPhoneMenu; + resourceManager.getResourceManager().then(result => { + this.menuRes.forEach((element, i) => { + result.getString(element.id, (err, typeName) => { + ContactsLog.info(TAG + typeName); + this.callmenu[i] = { + value: typeName, + action: () => { + } + }; + }); + }); + }); + } + + // 删除号码时,改变字体大小 + deleteTeleNum() { + if (this.tele_number.length > NUM_TEXT_MAXSIZE_LENGTH) { + this.tele_num_size = NUM_TEXT_FONT_SIZE_MAX * NUM_TEXT_MAXSIZE_LENGTH / this.tele_number.length; + } else if (this.tele_number.length <= NUM_TEXT_MAXSIZE_LENGTH) { + this.tele_num_size = NUM_TEXT_FONT_SIZE_MAX; + } + } + // 删除号码时,添加格式化空格 + deleteAddSpace() { + let teleNumberNoSpace = Utils.removeSpace(this.tele_number); + if (teleNumberNoSpace.length > NUM_TEXT_MAXSIZE_LENGTH - 2) { + this.tele_number = teleNumberNoSpace; + return; + } + if (checkNeedNumberSpace(this.tele_number)) { + if (teleNumberNoSpace.length <= 3) { + this.tele_number = teleNumberNoSpace; + return; + } + if (teleNumberNoSpace.length > 3) { + var split1 = teleNumberNoSpace.substr(0, 3); + var split2 = teleNumberNoSpace.substr(3, teleNumberNoSpace.length - 3); + this.tele_number = split1 + ' ' + split2; + } + if (teleNumberNoSpace.length > 7) { + split2 = teleNumberNoSpace.substr(3, 4); + var split3 = teleNumberNoSpace.substr(7, teleNumberNoSpace.length - 7); + this.tele_number = split1 + ' ' + split2 + ' ' + split3; + } + } else { + if (teleNumberNoSpace.length > 8) { + var split4 = teleNumberNoSpace.substr(0, 8); + let split5 = teleNumberNoSpace.substr(8, teleNumberNoSpace.length - 8); + this.tele_number = split4 + ' ' + split5; + } + } + } + + dialing(phoneNumber) { + DialUtil.getInstance().dial(phoneNumber, (data, err, value) => { + HiLog.i(TAG, 'dial isEmergencyPhoneNumber : ' + data + ' err : ' + err + ' value : ' + value); + AppStorage.SetOrCreate('number_show', false); + }); + } + + build() { + Stack({ alignContent: Alignment.Bottom }) { + // 号码,通话记录 + Column() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.End }) { + Text(`${this.tele_number}`) + .fontSize(this.tele_num_size * DENSITY) + .fontColor(Color.Black) + .maxLines(1) + .margin({ left: DIALER_BUTTON_MARGIN * DENSITY, right: 10 * DENSITY, bottom: 580 * DENSITY }) + } + .width('100%') + .visibility(this.number_show ? Visibility.Visible : Visibility.None) + + Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.Start }) { + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.End }) { + Button() { + Image($r("app.media.menu")) + .width(25 * DENSITY) + .height(25 * DENSITY) + .bindMenu(this.callmenu) + } + .width(35 * DENSITY) + .height(35 * DENSITY) + .backgroundColor(Color.White) + .margin({ right: 30 * DENSITY, top: 15 * DENSITY }) + .type(ButtonType.Normal) + } + .width('100%') + + Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { + Text($r("app.string.dialer")) + .fontSize(25 * DENSITY) + .height(35 * DENSITY) + .fontColor(Color.Black) + .margin({ left: 25 * DENSITY }) + } + .width('100%') + + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + if (true) { + // 如果通话列表有数据 + Flex() { + CallRecord() + } + .width('100%').height('100%') + } else { + // 如果通话列表没数据 + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { + Image($r("app.media.phonebook")) + .width(40 * DENSITY) + .height(40 * DENSITY) + Text($r("app.string.no_dialer_calllog")) + .fontSize(12 * DENSITY) + .fontColor(Color.Gray) + .margin({ top: DIALER_BUTTON_MARGIN * DENSITY }) + } + .height('60%') + } + } + .height('100%') + .onTouch(() => { + this.btnShow = true + this.panelShow = false + animateTo({ duration: 500, curve: Curve.Linear }, () => { + this.dialer_w = 20 * DENSITY; + this.dialer_h = 20 * DENSITY; + this.call_w = 40 * DENSITY; + this.call_h = 40 * DENSITY; + this.call_p = 150 * DENSITY; + }) + }) + } + .width('100%') + .height('100%') + .visibility(this.number_show ? Visibility.None : Visibility.Visible) + // } + } + .alignItems(HorizontalAlign.Center) + .width('100%') + .height('100%') + + // 拨打按钮,悬浮按钮 + Column() { + Button() { + Image(this.btnShow ? $r("app.media.keypad_white") : $r("app.media.ic_public_phone_filled_white")) + .width($r("app.float.dialer_common_big_margin")) + .height($r("app.float.dialer_common_big_margin")) + } + .width($r("app.float.dialer_button_height")) + .height($r("app.float.dialer_button_height")) + .margin({ top: 30 }) + .backgroundColor($r("app.color.colorConnected")) + .translate({ x: this.call_p }) + .onClick(() => { + if (this.btnShow) { + + + // this.panelShow = true; + animateTo({ + duration: 500, + curve: Curve.Linear, + onFinish: () => { + } + }, () => { + this.call_w = NUM_BUTTON_BASIC_LENGTH * DENSITY; + this.call_h = NUM_BUTTON_BASIC_LENGTH * DENSITY; + this.dialer_w = NUM_BUTTON_BASIC_LENGTH * DENSITY; + this.dialer_h = NUM_BUTTON_BASIC_LENGTH * DENSITY; + this.call_p = 0; + this.moveX = 0; + this.moveY = 0 + }) + this.btnShow = false; + } else { + if (this.tele_number.length > 0) { + // 跳转到拨打电话界面 + this.dialing(this.tele_number) + this.tele_number = ''; + } + } + }) + } + .alignItems(HorizontalAlign.Center) + .width(60 * DENSITY) + .height('10%') + .zIndex(3) + + + Column() { + // 展示拨号盘 + Column() { + Column() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { + Stack({ alignContent: Alignment.Bottom }) { + if (this.tele_number.length > 0 && !this.btnShow) { + Column() { + Flex({ + direction: FlexDirection.Row, + alignItems: ItemAlign.Center, + justifyContent: FlexAlign.SpaceBetween + }) { + Button() { + Flex({ + direction: FlexDirection.Column, + alignItems: ItemAlign.Center, + justifyContent: FlexAlign.Center + }) { + Image($r("app.media.add_black")) + .width(20 * DENSITY) + .height(20 * DENSITY) + Text($r("app.string.new_contact")) + .fontSize(10 * DENSITY) + .width(52 * DENSITY) + } + } + .layoutWeight(1) + .type(ButtonType.Normal) + .height(NUM_BUTTON_BASIC_LENGTH * DENSITY) + .backgroundColor($r("app.color.basic_background")) + .onClick(() => { + router.push({ + uri: "pages/contacts/accountants/Accountants" + }) + }) + + Button() { + Flex({ + direction: FlexDirection.Column, + alignItems: ItemAlign.Center, + justifyContent: FlexAlign.Center + }) { + Image($r("app.media.people_black")) + .width(20 * DENSITY) + .height(20 * DENSITY) + Text($r("app.string.save_to_existing_contacts")) + .fontSize(10 * DENSITY) + .width(82 * DENSITY) + } + } + .layoutWeight(1) + .type(ButtonType.Normal) + .height(NUM_BUTTON_BASIC_LENGTH * DENSITY) + .backgroundColor($r("app.color.basic_background")) + + Button() { + Flex({ + direction: FlexDirection.Column, + alignItems: ItemAlign.Center, + justifyContent: FlexAlign.Center + }) { + Image($r("app.media.msg_black")) + .width(20 * DENSITY) + .height(20 * DENSITY) + Text($r("app.string.send_messages")) + .fontSize(10 * DENSITY) + .width(42 * DENSITY) + } + } + .layoutWeight(1) + .type(ButtonType.Normal) + .height(NUM_BUTTON_BASIC_LENGTH * DENSITY) + .backgroundColor($r("app.color.basic_background")) + } + .margin({ top: 10 * DENSITY }) + + } + .width('100%') + .height(NUM_BUTTON_BASIC_LENGTH * DENSITY) + .offset({ x: 0, y: -470 }) + .zIndex(3) + .borderRadius(20) + } + Column() { + + DialPad({ tel_num: $tele_number, numTextSize: $tele_num_size }) + + Flex({ direction: FlexDirection.Row, justifyContent: FlexAlign.SpaceBetween }) { + Button() { + Image($r("app.media.ic_contacts_dialer")) + .width(25 * DENSITY) + .height(25 * DENSITY) + } + .margin({ top: 20 }) + .layoutWeight(1) + .type(ButtonType.Normal) + .backgroundColor($r("app.color.basic_background")) + .width(NUM_BUTTON_BASIC_LENGTH * DENSITY) + .height(NUM_BUTTON_BASIC_LENGTH * DENSITY) + .onClick(() => { + this.tele_number.length < 0 + this.btnShow = true; + animateTo({ duration: 500, curve: Curve.Linear }, () => { + this.dialer_w = 20 * DENSITY; + this.dialer_h = 20 * DENSITY; + this.call_w = 40 * DENSITY; + this.call_h = 40 * DENSITY; + this.call_p = 150 * DENSITY; + this.moveY = 500; + this.moveX = 0 + }) + }) + //占位控件 + Text().layoutWeight(1) + // 删除按钮 + Button() { + Image($r("app.media.ic_contacts_Delete_m")) + .width(25 * DENSITY) + .height(25 * DENSITY) + } + .backgroundColor($r("app.color.basic_background")) + .type(ButtonType.Normal) + .width(NUM_BUTTON_BASIC_LENGTH * DENSITY) + .height(NUM_BUTTON_BASIC_LENGTH * DENSITY) + .margin({ top: DIALER_BUTTON_MARGIN }) + .layoutWeight(1) + .opacity(this.tele_number.length > 0 ? 1 : 0.5) + .enabled(this.tele_number.length > 0 ? true : false) + .onClick(() => { + pressVibrate(); + this.tele_number = this.tele_number.substr(0, this.tele_number.length - 1) + this.deleteAddSpace(); + this.deleteTeleNum(); + if (this.tele_number.length == 0) { + AppStorage.SetOrCreate('number_show', false) + } + }) + } + } + .zIndex(this.panelShow ? 2 : -1) + }.width('100%') + } + + }.width('100%') + } + .backgroundColor($r("app.color.basic_background")) + .width("100%") + .height("100%") + .borderRadius(20) + } + .zIndex(2) + .offset({ x: this.moveX, y: this.moveY }) + .width('100%') + .height(500) + .gesture( + // 滑动手势 + PanGesture({ fingers: 1, direction: PanDirection.Down, distance: 5 }) + .onActionStart(() => { + this.moveY = 0 + }) + ) + } + .width('100%') + .height('100%') + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/pages/phone/dialer/callRecord/AllRecord.ets b/entry/src/main/ets/MainAbility/pages/phone/dialer/callRecord/AllRecord.ets new file mode 100644 index 0000000..b6e844d --- /dev/null +++ b/entry/src/main/ets/MainAbility/pages/phone/dialer/callRecord/AllRecord.ets @@ -0,0 +1,400 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * 通话记录全部通话 + */ +import router from '@system.router'; +import COMMON from '../../../../model/common'; +import CONSTANTS from '../../../../model/common/Constants'; +import Calllog from '../../../../model/calllog/CalllogModel'; +import CallLogRepository from '../../../../call/repo/CallLogRepository'; +import appStorage from '../../../../util/AppStorageUtil'; +import call from '@ohos.telephony.call'; +import HiLog from '../../../../util/Hilog'; + +const TAG = "AllRecord "; + +const DENSITY = 1.5; + +export let UPDATE_RECORD = null + +@Component +export struct AllRecord { + @State callLogTotalData: any = { + callLogList: [], + missedList: [], + totalCount: 0, + missedCount: 0 + }; + // 长按单条通话记录显示的菜单 + @State menuShow: boolean = false; + @State currentMsg: string = ''; + @State offsetY: number = 0; + + aboutToAppear() { + UPDATE_RECORD = this.getCallLog.bind(this) + this.getCallLog(); + } + + getCallLog() { + var DAHelper = COMMON.getDAHelper(CONSTANTS.uri.CALLLOG_DB_URI); + Calllog.getAllCalls(DAHelper, '', data => { + this.callLogTotalData = data; + HiLog.i(TAG, "getCallLog" + this.callLogTotalData.callLogList.length.toString()); + }) + } + + build() { + Stack() { + if (this.callLogTotalData.callLogList.length == 0) { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { + Image($r('app.media.no_call_records')) + .objectFit(ImageFit.Contain) + .width($r("app.float.contact_emptyview_image_width_height")) + .height($r("app.float.contact_emptyview_image_width_height")) + .margin({ top: 150 * DENSITY, bottom: 4 * DENSITY }) + Text($r("app.string.no_dialer_calllog")) + .fontSize($r("app.float.contact_text_size_body2")) + .fontWeight(FontWeight.Regular) + .fontColor('#66182431') + .height(19 * DENSITY) + .textAlign(TextAlign.Center) + } + .width('100%') + .height('100%') + } else { + List() { + ForEach(this.callLogTotalData.callLogList, (item) => { + ListItem() { + ContactItem({ msg: JSON.stringify(item), show: $menuShow, current: $currentMsg, offsetY: $offsetY }); + } + .height($r("app.float.dialer_calllog_item_height")) + .gesture( + // 滑动手势 + PanGesture({ fingers: 1, direction: PanDirection.Up | PanDirection.Down, distance: 5 }) + .onActionStart((event: GestureEvent) => { + // 关闭长按菜单 + this.menuShow = false; + }) + ) + }, item => item.id) + } + .divider({ + strokeWidth: 1, + color: $r('app.color.basic_background'), + startMargin: $r("app.float.dialer_common_little_margin"), + endMargin: $r("app.float.dialer_common_little_margin"), + }) + } + + + if (this.menuShow) { + Column() { + Button(JSON.parse(this.currentMsg) + .displayName ? JSON.parse(this.currentMsg) + .displayName : JSON.parse(this.currentMsg) + .phoneNumber, { type: ButtonType.Normal, stateEffect: true }) + .width($r("app.float.dialer_calllog_bindmenu_width1")) + .fontSize($r("app.float.contact_text_size_body1")) + .fontColor($r('app.color.colorPrimary')) + .backgroundColor(Color.White) + .borderRadius($r("app.float.dialer_common_little_margin")) + .margin({ bottom: $r("app.float.dialer_common_very_small_margin1") }) + .onClick(() => { + this.menuShow = false + }) + Divider() + .vertical(false) + .strokeWidth(1) + .color($r('app.color.light_grey')) + .lineCap(LineCapStyle.Square) + .width($r("app.float.dialer_calllog_bindmenu_divider_width")) + Button($r("app.string.send_message"), { type: ButtonType.Normal, stateEffect: true }) + .width($r("app.float.dialer_calllog_bindmenu_width2")) + .fontSize($r("app.float.contact_text_size_body2")) + .fontColor($r('app.color.colorPrimary')) + .backgroundColor(Color.White) + .borderRadius($r("app.float.dialer_common_little_margin")) + .margin({ bottom: $r("app.float.dialer_common_very_small_margin1") }) + .onClick(() => { + this.menuShow = false + }) + Divider() + .vertical(false) + .strokeWidth(1) + .color($r('app.color.light_grey')) + .lineCap(LineCapStyle.Square) + .width($r("app.float.dialer_calllog_bindmenu_divider_width")) + Button($r("app.string.copy_phoneNumber"), { type: ButtonType.Normal, stateEffect: true }) + .width($r("app.float.dialer_calllog_bindmenu_width2")) + .fontSize($r("app.float.contact_text_size_body2")) + .fontColor($r('app.color.colorPrimary')) + .backgroundColor(Color.White) + .borderRadius($r("app.float.dialer_common_little_margin")) + .margin({ bottom: $r("app.float.dialer_common_very_small_margin1") }) + .onClick(() => { + this.menuShow = false + }) + Divider() + .vertical(false) + .strokeWidth(1) + .color($r('app.color.light_grey')) + .lineCap(LineCapStyle.Square) + .width($r("app.float.dialer_calllog_bindmenu_divider_width")) + Button($r("app.string.edit_beforeCall"), { type: ButtonType.Normal, stateEffect: true }) + .width($r("app.float.dialer_calllog_bindmenu_width2")) + .fontSize($r("app.float.contact_text_size_body2")) + .fontColor($r('app.color.colorPrimary')) + .backgroundColor(Color.White) + .borderRadius($r("app.float.dialer_common_little_margin")) + .margin({ bottom: $r("app.float.dialer_common_very_small_margin1") }) + .onClick(() => { + this.menuShow = false + }) + Divider() + .vertical(false) + .strokeWidth(1) + .color($r('app.color.light_grey')) + .lineCap(LineCapStyle.Square) + .width($r("app.float.dialer_calllog_bindmenu_divider_width")) + Button($r("app.string.add_to_blockList"), { type: ButtonType.Normal, stateEffect: true }) + .width($r("app.float.dialer_calllog_bindmenu_width2")) + .fontSize($r("app.float.contact_text_size_body2")) + .fontColor($r('app.color.colorPrimary')) + .backgroundColor(Color.White) + .borderRadius($r("app.float.dialer_common_little_margin")) + .margin({ bottom: $r("app.float.dialer_common_very_small_margin1") }) + .onClick(() => { + this.menuShow = false + }) + Divider() + .vertical(false) + .strokeWidth(1) + .color($r('app.color.light_grey')) + .lineCap(LineCapStyle.Square) + .width($r("app.float.dialer_calllog_bindmenu_divider_width")) + Button($r("app.string.delete_call_logs"), { type: ButtonType.Normal, stateEffect: true }) + .width($r("app.float.dialer_calllog_bindmenu_width2")) + .fontSize($r("app.float.contact_text_size_body2")) + .fontColor($r('app.color.colorPrimary')) + .backgroundColor(Color.White) + .borderRadius($r("app.float.dialer_common_little_margin")) + .margin({ bottom: $r("app.float.dialer_common_very_small_margin1") }) + .onClick(() => { + this.menuShow = false + // 删除通话记录 + CallLogRepository.getInstance().deleteByIdIn(JSON.parse(this.currentMsg).ids).then(data => { + this.getCallLog(); + }); + }) + } + .height($r("app.float.dialer_calllog_bindmenu_height")) + .padding($r("app.float.dialer_common_very_small_margin1")) + .borderRadius($r("app.float.dialer_keypad_margin2")) + .backgroundColor(Color.White) + // .border({ width: 1, color: '#999999', style: BorderStyle.Solid }) + .shadow({ radius: 10 * DENSITY, color: Color.Gray, offsetX: 5 * DENSITY, offsetY: 5 * DENSITY }) + .position({ x: 200 * DENSITY, y: this.offsetY < 416 * DENSITY ? (this.offsetY - 170) : 246 * DENSITY }) + } + } + } +} + +@Component +struct ContactItem { + @Link show: boolean + @Link current: string + @Link offsetY: number + @Prop msg: string + + // 拨号拨出 + dialing(phoneNumber) { + if (phoneNumber == null || phoneNumber == '') { + HiLog.i(TAG, 'call param is null'); + return; + } + if (phoneNumber.length > 0) { + call.dial(phoneNumber).then((value) => { + // this.pageState = false; + HiLog.i(TAG, 'call dial success '); + }).catch((err) => { + HiLog.e(TAG, 'call dial error, '); + }); + } + } + + build() { + Flex({ direction: FlexDirection.Row, + justifyContent: FlexAlign.SpaceBetween, + alignItems: ItemAlign.Center }) { + + // 左侧布局 + Row() { + Flex({ direction: FlexDirection.Column, + justifyContent: FlexAlign.Start, + alignItems: ItemAlign.Center }) { + if (JSON.parse(this.msg).callType == 1) { + // 呼入 + Row() { + Blank(16) + } + } else if (JSON.parse(this.msg).callType == 2) { + // 呼出 + Image($r('app.media.ic_contacts_Dialled')) + .height($r("app.float.dialer_common_small_margin")) + .width($r("app.float.dialer_common_small_margin")) + } else if (JSON.parse(this.msg).callType == 3) { + // 未接 + Row() { + Blank(16) + } + } else if (JSON.parse(this.msg).callType == 5) { + // 拒接 + Image($r('app.media.ic_contacts_Reject')) + .height($r("app.float.dialer_common_small_margin")) + .width($r("app.float.dialer_common_small_margin")) + } + } + .margin({ + right: $r("app.float.dialer_keypad_margin1"), + top: $r("app.float.dialer_keypad_margin1"), + left: $r("app.float.dialer_keypad_margin1") + }) + .height($r("app.float.dialer_middle_button_width")) + + Flex({ direction: FlexDirection.Column, + justifyContent: FlexAlign.Center, + alignItems: ItemAlign.Start }) { + + Flex({ direction: FlexDirection.Row, + justifyContent: FlexAlign.Start, + alignItems: ItemAlign.Center }) { + + // 拒接标红 + if (JSON.parse(this.msg).displayName) { + if (JSON.parse(this.msg).callType == 5) { + Text(JSON.parse(this.msg).displayName) + .fontSize($r("app.float.contact_text_size_body1")) + .margin({ right: $r("app.float.dialer_common_very_small_margin2") }) + .fontColor($r('app.color.error')) + } else { + Text(JSON.parse(this.msg).displayName) + .fontSize($r("app.float.contact_text_size_body1")) + .margin({ right: $r("app.float.dialer_common_very_small_margin2") }) + .fontColor($r('app.color.colorPrimary')) + } + } else { + if (JSON.parse(this.msg).callType == 5) { + Text(JSON.parse(this.msg).phoneNumber) + .fontSize($r("app.float.contact_text_size_body1")) + .margin({ right: $r("app.float.dialer_common_very_small_margin2") }) + .fontColor($r('app.color.error')) + } else { + Text(JSON.parse(this.msg).phoneNumber) + .fontSize($r("app.float.contact_text_size_body1")) + .margin({ right: $r("app.float.dialer_common_very_small_margin2") }) + .fontColor($r('app.color.colorPrimary')) + } + } + + // 通话次数一次以上才显示通话次数 + if (JSON.parse(this.msg).count != 1) { + if (JSON.parse(this.msg).callType == 5) { + Text('(' + JSON.parse(this.msg).count + ')') + .fontSize($r("app.float.contact_text_size_body1")) + .fontColor($r('app.color.error')) + } else { + Text('(' + JSON.parse(this.msg).count + ')') + .fontSize($r("app.float.contact_text_size_body1")) + .fontColor($r('app.color.colorPrimary')) + } + } + + } + + // 标签 + if (JSON.parse(this.msg).numberLocation) { + Text(JSON.parse(this.msg).numberLocation) + .fontSize($r("app.float.dialer_text_size_body1")) + .fontColor($r('app.color.more_light_colorPrimary')) + .margin({ top: $r("app.float.dialer_common_very_small_margin1") }) + } else { + Text($r("app.string.unknown")) + .fontSize($r("app.float.dialer_text_size_body1")) + .fontColor($r('app.color.more_light_colorPrimary')) + .margin({ top: $r("app.float.dialer_common_very_small_margin1") }) + } + + } + .height($r("app.float.contact_listitem_height")) + } + + // 右侧布局 + Row() { + Flex({ direction: FlexDirection.Column, + justifyContent: FlexAlign.Center, + alignItems: ItemAlign.Center }) { + Text(JSON.parse(this.msg).createTime) + .fontSize($r("app.float.contact_text_size_body2")) + .margin({ right: $r("app.float.dialer_keypad_margin1") }) + .fontColor($r('app.color.more_light_colorPrimary')) + } + + Image($r('app.media.ic_public_detail')) + .height($r("app.float.dialer_common_margin")) + .width($r("app.float.dialer_common_margin")) + .margin({ right: 36 }) + .onClick(() => { + router.push( + { + uri: "pages/contacts/details/ContactDetail", + params: { + sourceFromCallRecord: true, + isNewNumber: true, + phoneNumberShow: JSON.parse(this.msg).phoneNumber + } + } + ) + }) + } + } + .width('100%') + .height($r("app.float.contact_listitem_height")) + .gesture( + // 滑动手势 + PanGesture({ fingers: 1, direction: PanDirection.Left, distance: 5 }) + .onActionStart(() => { + }) + ) + .gesture( + // 长按手势 + LongPressGesture({ repeat: false, fingers: 1, duration: 500 }) + // 长按动作识别成功时触发 + .onAction((event: GestureEvent) => { + this.show = true + this.current = this.msg + this.offsetY = JSON.parse(JSON.stringify(event)) + .globalY + }) + ) + .onClick((event: ClickEvent) => { + this.show = false + // 跳转到拨打电话界面 + this.dialing(JSON.parse(this.msg).phoneNumber) + }) + } +} + diff --git a/entry/src/main/ets/MainAbility/pages/phone/dialer/callRecord/CallRecord.ets b/entry/src/main/ets/MainAbility/pages/phone/dialer/callRecord/CallRecord.ets new file mode 100644 index 0000000..07fb632 --- /dev/null +++ b/entry/src/main/ets/MainAbility/pages/phone/dialer/callRecord/CallRecord.ets @@ -0,0 +1,61 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * 通话记录 + */ +import {AllRecord} from './AllRecord'; +import MissedRecord from './MissedRecord'; +import {CallLogTabs} from '../../../../component/dialer/CallLogTabs'; + +const DENSITY = 1.5 + +@Entry +@Component +export default struct CallRecord { + @State bottomTabIndex: number = 0; + private controller: TabsController = new TabsController(); + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start, justifyContent: FlexAlign.Start }) { + CallLogTabs({ controller: this.controller, bottomTabIndex: $bottomTabIndex}) + + Tabs({ barPosition: BarPosition.Start, index: this.bottomTabIndex, controller: this.controller }) { + TabContent() { + AllRecord() + } + + TabContent() { + MissedRecord() + } + } + .onChange((index: number) => { + this.bottomTabIndex = index + }) + .vertical(false) + .barHeight(0) + .barWidth(0) + .barMode(BarMode.Fixed) + .scrollable(false) + .backgroundColor(Color.White) + .animationDuration(0) + .zIndex(1) + } + .width('100%') + .height('100%') + .layoutWeight(1) + .backgroundColor(Color.White) + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/pages/phone/dialer/callRecord/MissedRecord.ets b/entry/src/main/ets/MainAbility/pages/phone/dialer/callRecord/MissedRecord.ets new file mode 100644 index 0000000..7efe1b5 --- /dev/null +++ b/entry/src/main/ets/MainAbility/pages/phone/dialer/callRecord/MissedRecord.ets @@ -0,0 +1,395 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * 通话记录未接来电 + */ +import router from '@system.router'; +import COMMON from '../../../../model/common' +import CONSTANTS from '../../../../model/common/Constants' +import Calllog from '../../../../model/calllog/CalllogModel' +import CallLogRepository from '../../../../call/repo/CallLogRepository'; +import call from '@ohos.telephony.call'; +import HiLog from '../../../../util/Hilog'; + +const TAG = "MissedRecord "; + +const DENSITY = 1.5 + +@Component +export default struct MissedRecord { + @State callLogTotalData: any = { + callLogList: [], + missedList: [], + totalCount: 0, + missedCount: 0 + }; + @State menuShow: boolean = false; + @State currentMsg: string = ''; + @State offsetY: number = 0; + + aboutToAppear() { + this.getCallLog(); + } + + getCallLog() { + var DAHelper = COMMON.getDAHelper(CONSTANTS.uri.CALLLOG_DB_URI); + Calllog.getAllCalls(DAHelper, '', data => { + this.callLogTotalData = data; + }) + } + + build() { + Stack() { + if (this.callLogTotalData.missedList.length == 0) { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) { + Image($r('app.media.no_call_records')) + .objectFit(ImageFit.Contain) + .width($r("app.float.contact_emptyview_image_width_height")) + .height($r("app.float.contact_emptyview_image_width_height")) + .margin({ top: 150 * DENSITY,bottom: 4 * DENSITY }) + Text($r("app.string.no_dialer_missed_calllog")) + .fontSize($r("app.float.contact_text_size_body2")) + .fontWeight(FontWeight.Regular) + // .fontColor($r("app.color.textColorTertiary")) + .fontColor('#66182431') + .height(19 * DENSITY) + .textAlign(TextAlign.Center) + } + .width('100%') + .height('100%') + } else { + List() { + ForEach(this.callLogTotalData.missedList, (item) => { + ListItem() { + ContactItem({ msg: JSON.stringify(item), show: $menuShow, current: $currentMsg, offsetY: $offsetY }); + } + .height($r("app.float.dialer_calllog_item_height")) + .gesture( + // 滑动手势 + PanGesture({ fingers: 1, direction: PanDirection.Up | PanDirection.Down, distance: 5 }) + .onActionStart((event: GestureEvent) => { + // 关闭长按菜单 + this.menuShow = false; + }) + ) + }, item => item.id) + } + .divider({ + strokeWidth: 1, + color: $r('app.color.light_grey'), + startMargin: $r("app.float.dialer_common_little_margin"), + endMargin: $r("app.float.dialer_common_little_margin"), + }) + .gesture( + // 长按手势 + LongPressGesture({ fingers: 1, duration: 500 }) + // 长按动作识别成功时触发 + .onAction(() => { + }) + ) + } + + if (this.menuShow) { + Column() { + Button(JSON.parse(this.currentMsg) + .displayName ? JSON.parse(this.currentMsg) + .displayName : JSON.parse(this.currentMsg) + .phoneNumber, { type: ButtonType.Normal, stateEffect: true }) + .width($r("app.float.dialer_calllog_bindmenu_width1")) + .fontSize($r("app.float.contact_text_size_body1")) + .fontColor($r('app.color.colorPrimary')) + .backgroundColor(Color.White) + .borderRadius($r("app.float.dialer_common_little_margin")) + .margin({ bottom: $r("app.float.dialer_common_very_small_margin1") }) + .onClick(() => { + this.menuShow = false + }) + Divider() + .vertical(false) + .strokeWidth(1) + .color($r('app.color.light_grey')) + .lineCap(LineCapStyle.Square) + .width($r("app.float.dialer_calllog_bindmenu_divider_width")) + Button($r("app.string.send_message"), { type: ButtonType.Normal, stateEffect: true }) + .width($r("app.float.dialer_calllog_bindmenu_width2")) + .fontSize($r("app.float.contact_text_size_body2")) + .fontColor($r('app.color.colorPrimary')) + .backgroundColor(Color.White) + .borderRadius($r("app.float.dialer_common_little_margin")) + .margin({ bottom: $r("app.float.dialer_common_very_small_margin1") }) + .onClick(() => { + this.menuShow = false + }) + Divider() + .vertical(false) + .strokeWidth(1) + .color($r('app.color.light_grey')) + .lineCap(LineCapStyle.Square) + .width($r("app.float.dialer_calllog_bindmenu_divider_width")) + Button($r("app.string.copy_phoneNumber"), { type: ButtonType.Normal, stateEffect: true }) + .width($r("app.float.dialer_calllog_bindmenu_width2")) + .fontSize($r("app.float.contact_text_size_body2")) + .fontColor($r('app.color.colorPrimary')) + .backgroundColor(Color.White) + .borderRadius($r("app.float.dialer_common_little_margin")) + .margin({ bottom: $r("app.float.dialer_common_very_small_margin1") }) + .onClick(() => { + this.menuShow = false + }) + Divider() + .vertical(false) + .strokeWidth(1) + .color($r('app.color.light_grey')) + .lineCap(LineCapStyle.Square) + .width($r("app.float.dialer_calllog_bindmenu_divider_width")) + Button($r("app.string.edit_beforeCall"), { type: ButtonType.Normal, stateEffect: true }) + .width($r("app.float.dialer_calllog_bindmenu_width2")) + .fontSize($r("app.float.contact_text_size_body2")) + .fontColor($r('app.color.colorPrimary')) + .backgroundColor(Color.White) + .borderRadius($r("app.float.dialer_common_little_margin")) + .margin({ bottom: $r("app.float.dialer_common_very_small_margin1") }) + .onClick(() => { + this.menuShow = false + }) + Divider() + .vertical(false) + .strokeWidth(1) + .color($r('app.color.light_grey')) + .lineCap(LineCapStyle.Square) + .width($r("app.float.dialer_calllog_bindmenu_divider_width")) + Button($r("app.string.add_to_blockList"), { type: ButtonType.Normal, stateEffect: true }) + .width($r("app.float.dialer_calllog_bindmenu_width2")) + .fontSize($r("app.float.contact_text_size_body2")) + .fontColor($r('app.color.colorPrimary')) + .backgroundColor(Color.White) + .borderRadius($r("app.float.dialer_common_little_margin")) + .margin({ bottom: $r("app.float.dialer_common_very_small_margin1") }) + .onClick(() => { + this.menuShow = false + }) + Divider() + .vertical(false) + .strokeWidth(1) + .color($r('app.color.light_grey')) + .lineCap(LineCapStyle.Square) + .width($r("app.float.dialer_calllog_bindmenu_divider_width")) + Button($r("app.string.delete_call_logs"), { type: ButtonType.Normal, stateEffect: true }) + .width($r("app.float.dialer_calllog_bindmenu_width2")) + .fontSize($r("app.float.contact_text_size_body2")) + .fontColor($r('app.color.colorPrimary')) + .backgroundColor(Color.White) + .borderRadius($r("app.float.dialer_common_little_margin")) + .margin({ bottom: $r("app.float.dialer_common_very_small_margin1") }) + .onClick(() => { + this.menuShow = false + // 删除通话记录 + CallLogRepository.getInstance().deleteByIdIn(JSON.parse(this.currentMsg).ids).then(data => { + this.getCallLog(); + }); + }) + } + .height($r("app.float.dialer_calllog_bindmenu_height")) + .padding($r("app.float.dialer_common_very_small_margin1")) + .borderRadius($r("app.float.dialer_keypad_margin2")) + .backgroundColor(Color.White) + // .border({ width: 1, color: '#999999', style: BorderStyle.Solid }) + .shadow({ radius: 10 * DENSITY, color: Color.Gray, offsetX: 5 * DENSITY, offsetY: 5 * DENSITY }) + .position({ x: 200 * DENSITY, y: this.offsetY < 416 * DENSITY ? (this.offsetY - 170) : 246 * DENSITY }) + } + } + } +} + +@Component +struct ContactItem { + @Link show: boolean + @Link current: string + @Link offsetY: number + @Prop msg: string + + // 拨号拨出 + dialing(phoneNumber) { + if (phoneNumber == null || phoneNumber == '') { + HiLog.i(TAG, 'call param is null'); + return; + } + if (phoneNumber.length > 0) { + call.dial(phoneNumber).then((value) => { + // this.pageState = false; + HiLog.i(TAG, 'call dial success '); + }).catch((err) => { + HiLog.e(TAG, 'call dial error, '); + }); + } + } + + build() { + Flex({ direction: FlexDirection.Row, + justifyContent: FlexAlign.SpaceBetween, + alignItems: ItemAlign.Center }) { + + // 左侧布局 + Row() { + Flex({ direction: FlexDirection.Column, + justifyContent: FlexAlign.Start, + alignItems: ItemAlign.Center }) { + + if (JSON.parse(this.msg).callType == 3) { + // 未接 + Row() { + Blank(16 * DENSITY) + } + } else if (JSON.parse(this.msg).callType == 5) { + // 拒接 + Image($r('app.media.ic_contacts_Reject')) + .height($r("app.float.dialer_common_small_margin")) + .width($r("app.float.dialer_common_small_margin")) + } else { + Row() { + Blank(16 * DENSITY) + } + } + } + .margin({ + right: $r("app.float.dialer_keypad_margin1"), + top: $r("app.float.dialer_keypad_margin1"), + left: $r("app.float.dialer_keypad_margin1") + }) + .height($r("app.float.dialer_middle_button_width")) + + Flex({ direction: FlexDirection.Column, + justifyContent: FlexAlign.Center, + alignItems: ItemAlign.Start }) { + + Flex({ direction: FlexDirection.Row, + justifyContent: FlexAlign.Start, + alignItems: ItemAlign.Center }) { + + if (JSON.parse(this.msg).displayName) { + // 拒接标红 + if (JSON.parse(this.msg).callType == 5) { + Text(JSON.parse(this.msg).displayName) + .fontSize($r("app.float.contact_text_size_body1")) + .margin({ right: $r("app.float.dialer_common_very_small_margin2") }) + .fontColor($r('app.color.error')) + } else { + Text(JSON.parse(this.msg).displayName) + .fontSize($r("app.float.contact_text_size_body1")) + .margin({ right: $r("app.float.dialer_common_very_small_margin2") }) + .fontColor($r('app.color.colorPrimary')) + } + } else { + if (JSON.parse(this.msg).callType == 5) { + Text(JSON.parse(this.msg).phoneNumber) + .fontSize($r("app.float.contact_text_size_body1")) + .margin({ right: $r("app.float.dialer_common_very_small_margin2") }) + .fontColor($r('app.color.error')) + } else { + Text(JSON.parse(this.msg).phoneNumber) + .fontSize($r("app.float.contact_text_size_body1")) + .margin({ right: $r("app.float.dialer_common_very_small_margin2") }) + .fontColor($r('app.color.colorPrimary')) + } + } + + // 通话次数一次以上才显示通话次数 + if (JSON.parse(this.msg).count != 1) { + if (JSON.parse(this.msg).callType == 5) { + Text('(' + JSON.parse(this.msg).count + ')') + .fontSize($r("app.float.contact_text_size_body1")) + .fontColor($r('app.color.error')) + } else { + Text('(' + JSON.parse(this.msg).count + ')') + .fontSize($r("app.float.contact_text_size_body1")) + .fontColor($r('app.color.colorPrimary')) + } + } + } + + // 标签 + if (JSON.parse(this.msg).numberLocation) { + Text(JSON.parse(this.msg).numberLocation) + .fontSize($r("app.float.dialer_text_size_body1")) + .fontColor($r('app.color.more_light_colorPrimary')) + .margin({ top: $r("app.float.dialer_common_very_small_margin1") }) + } else { + Text($r("app.string.unknown")) + .fontSize($r("app.float.dialer_text_size_body1")) + .fontColor($r('app.color.more_light_colorPrimary')) + .margin({ top: $r("app.float.dialer_common_very_small_margin1") }) + } + + } + .height($r("app.float.contact_listitem_height")) + } + + // 右侧布局 + Row() { + Flex({ direction: FlexDirection.Column, + justifyContent: FlexAlign.Center, + alignItems: ItemAlign.Center }) { + Text(JSON.parse(this.msg).createTime) + .fontSize($r("app.float.contact_text_size_body2")) + .margin({ right: $r("app.float.dialer_keypad_margin1") }) + .fontColor($r('app.color.more_light_colorPrimary')) + } + + Image($r('app.media.ic_public_detail')) + .height($r("app.float.dialer_common_margin")) + .width($r("app.float.dialer_common_margin")) + .margin({ right: 36 }) + .onClick(() => { + router.push( + { + uri: "pages/contacts/details/ContactDetail", + params: { + sourceFromCallRecord: true, + isNewNumber: true, + phoneNumberShow: JSON.parse(this.msg).phoneNumber + } + } + ) + }) + } + } + .width('100%') + .height($r("app.float.contact_listitem_height")) + .gesture( + // 滑动手势 + PanGesture({ fingers: 1, direction: PanDirection.Left, distance: 5 }) + .onActionStart(() => { + }) + ) + .gesture( + // 长按手势 + LongPressGesture({ repeat: false, fingers: 1, duration: 500 }) + // 长按动作识别成功时触发 + .onAction((event: GestureEvent) => { + this.show = true; + this.current = this.msg; + this.offsetY = JSON.parse(JSON.stringify(event)) + .globalY; + }) + ) + .onClick((event: ClickEvent) => { + this.show = false + // 跳转到拨打电话界面 + this.dialing(JSON.parse(this.msg).phoneNumber) + }) + } +} + diff --git a/entry/src/main/ets/MainAbility/presenter/IndexPresenter.ets b/entry/src/main/ets/MainAbility/presenter/IndexPresenter.ets new file mode 100644 index 0000000..96bd7b1 --- /dev/null +++ b/entry/src/main/ets/MainAbility/presenter/IndexPresenter.ets @@ -0,0 +1,278 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import router from '@system.router'; +import HiLog from '../util/HiLog'; +import Utils from '../util/Utils'; +import featureAbility from '@ohos.ability.featureAbility'; +import AppStorageUtil from '../util/AppStorageUtil'; +import PreferencesUtil from '../util/PreferencesUtil'; +import abilityAccessCtrl from '@ohos.abilityAccessCtrl' +import bundle from '@ohos.bundle' + +const TAG = 'IndexPresenter '; + +export class IndexPresenter { + /*当前tab页面*/ + uriTabFlag: boolean = false; + tabsIndex: number = 0; + private static instance: IndexPresenter + + public static getInstance(): IndexPresenter { + if (!IndexPresenter.instance) { + IndexPresenter.instance = new IndexPresenter() + } + return IndexPresenter.instance + } + + onPageShow() { + HiLog.i(TAG, 'aboutToAppear !!!'); + featureAbility.getWant().then((Want) => { + HiLog.i(TAG, 'aboutToAppear Want is ' + JSON.stringify(Want)); + if (Utils.isEmpty(Want.uri) && Utils.isEmpty(Want.parameters.pageFlag)) { + HiLog.i(TAG, 'pageRouteHandler' + 'routeMessage.pageFlag isEmpty '); + } else if (!Utils.isEmpty(Want.uri)) { + HiLog.i(TAG, "want uri is not empty!"); + this.pageRouteHandler({ + pageFlag: Want.uri + }); + } else { + HiLog.i(TAG, "go pageRouteHandler"); + // 跳转到3方应用所指定的页面 + this.pageRouteHandler(Want.parameters); + } + }).catch((error) => { + HiLog.e(TAG, 'aboutToAppear logMessage Operation failed. Cause: ' + JSON.stringify(error)); + }) + } + + aboutToAppear() { + HiLog.i(TAG, 'aboutToAppear !!!'); + PreferencesUtil.initDataStorage().then((prefIns) => { + HiLog.i(TAG, 'initStorage first done: %s', prefIns); + AppStorageUtil.setPreferences(prefIns); + }).catch((err) => { + HiLog.i(TAG, 'initStorage error : %s', err.message); + }); + } + + pageRouteHandler(routeMessage) { + HiLog.i(TAG, 'pageRouteHandler routeMessage is ' + JSON.stringify(routeMessage)); + let uri = ""; + let params = {}; + if (Utils.isEmpty(routeMessage.pageFlag)) { + this.goToContacts(); + HiLog.i(TAG, 'pageRouteHandler' + 'routeMessage.pageFlag isEmpty '); + return; + } + HiLog.i(TAG, 'pageRouteHandler case is ' + routeMessage.pageFlag); + switch (routeMessage.pageFlag.toString()) { + // ------------------ 三方跳转 index start --------------------- + case 'page_flag_choose_contacts': // 三方跳转至选择联系人 + this.tabsIndex = 1; + this.uriTabFlag = !this.uriTabFlag; + return; + case 'page_flag_dialer': // 三方跳转至拨号盘 + this.tabsIndex = 0; + this.uriTabFlag = !this.uriTabFlag; + return; + // ------------------ 三方跳转 index end --------------------- + + case 'page_flag_contact_details': // 三方跳转到详情 + uri = "pages/contacts/details/ContactDetail"; + if (routeMessage.contactId) { + params = { + 'contactId': routeMessage.contactId, + } + } else { + HiLog.i(TAG, 'pageRouteHandler' + 'routeMessage.phoneNumber + ' + routeMessage.phoneNumber); + params = { + 'sourceFromCallRecord': true, + 'isNewNumber': true, + 'phoneNumberShow': routeMessage.phoneNumber, + } + } + break; + case 'page_flag_contact_index': + uri = "pages/index"; + break; + case 'page_flag_contacts': + uri = 'pages/navigation/navigation'; + params = { + 'navigationType': 'contacts' // 跳转至联系人 + } + break; + case 'page_flag_edit_before_calling': // 呼叫前编辑 + this.editBeforeCall(routeMessage.phoneNumber); + break; + case 'page_flag_save_contact': // 新建联系人 + HiLog.i(TAG, routeMessage.phoneNumber); + this.addContacts(routeMessage.phoneNumber); + break; + case 'page_flag_save_exist_contact': // 保存至已有联系人 + this.saveToContacts(routeMessage.phoneNumber); + break; + case 'page_flag_sms_forward': + uri = 'pages/contacts/batchselectcontacts/batchselectcontacts'; + params = { + selectType: 1 // 短信发送跳转到选择联系人界面 + } + break; + case 'page_flag_mult_choose': + uri = 'pages/contacts/batchselectcontacts/BatchSelectContactsPage'; + params = { + selectType: 0 // 短信发送跳转到选择联系人界面 + } + break; + case 'page_flag_call_logs': // 三方跳转至通话记录 + uri = 'pages/navigation/navigation'; + params = { + 'navigationType': 0 // 跳转至拨号盘界面 + } + break; + case 'page_flag_missed_calls': + this.goToMissedCalls(); + break; + case 'page_flag_card_details': // 跳转我的名片 + this.goToMyCard(); + break; + default: + HiLog.e(TAG, 'pageRouteHandler' + 'This page is not open.'); + break; + } + HiLog.i(TAG, 'final uri is ' + uri); + router.replace({ + uri: uri, + params: params + }); + } + + /* 跳转到我的名片 */ + goToMyCard() { + } + /* 呼叫前编辑 */ + editBeforeCall(phoneNumber) { + HiLog.i(TAG, 'editBeforeCall' + phoneNumber); + AppStorageUtil.setIsEditNumber(true); // 标识为呼叫前编辑 + AppStorageUtil.setNumTextDialer(phoneNumber); // 赋值电话号码 + this.goToDialer(); + } + /* 跳转到未接来电界面 */ + goToMissedCalls() { + } + /* 跳转至联系人界面 */ + goToContacts() { + } + /* 跳转至拨号盘界面 */ + goToDialer() { + router.replace({ // 跳转至拨号盘 + uri: 'pages/index', + }); + + } + /* 保存至已有联系人 */ + saveToContacts(phoneNumber) { + router.replace({ + uri: 'pages/contacts/selectContactsList/selectContactsList', + params: { + type: 'saveContacts', + number: phoneNumber, + } + }); + } + /* 新建联系人 */ + addContacts(phoneNumber) { + var number = phoneNumber.replace(/[^0123456789+]*/g, ''); // 去除所有空格及非数字或+号的字符 + var show = false; + let uri = 'pages/contacts/accountants/Accountants'; + router.replace({ + uri: 'pages/contacts/accountants/Accountants', + params: { + phoneNumbers: [ + { + 'labelId': 2, + 'labelName': $r('app.string.phone'), + 'phoneNumber': number, + 'phoneAddress': 'N', + 'showP': show, + 'blueStyle': true + } + ] + } + }); + } +} + + +export class PermissionsManage { + applyFlag: boolean = false; + private static instance: PermissionsManage + + public getApplyFlag() { + return this.applyFlag + } + + public static getInstance(): PermissionsManage { + if (!PermissionsManage.instance) { + PermissionsManage.instance = new PermissionsManage() + } + return PermissionsManage.instance + } + + async initPermissions() { + let array: Array = [ + "ohos.permission.READ_CONTACTS", + "ohos.permission.WRITE_CONTACTS", + "ohos.permission.MANAGE_VOICEMAIL", + "ohos.permission.READ_CALL_LOG", + "ohos.permission.PLACE_CALL" + ]; + var bundleFlag = 0; + var tokenID = undefined; + var userID = 100; + var appInfo = await bundle.getApplicationInfo('com.ohos.contacts', bundleFlag, userID); + tokenID = appInfo.accessTokenId; + var atManager = abilityAccessCtrl.createAtManager(); + let requestPermissions: Array = []; + for (let i = 0;i < array.length; i++) { + var result = await atManager.verifyAccessToken(tokenID, array[i]); + HiLog.i(TAG, 'Application initPermissions result%s', JSON.stringify(result)); + if (result == abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) { + // 执行操作 + } else { + // 申请动态授权,使用接口:requestPermissionsFromUser + requestPermissions.push(array[i]); + } + } + HiLog.i(TAG, 'Application initPermissions %s', JSON.stringify(requestPermissions)); + if (requestPermissions.length == 0 || requestPermissions == []) { + this.applyFlag = true; + return; + } + let context = featureAbility.getContext(); + context.requestPermissionsFromUser(requestPermissions, 1, (data) => { + HiLog.i(TAG, "data authResults:" + JSON.stringify(data.authResults)); + let authflag = true; + for (let i = 0; i < data.authResults.length; i++) { + if (data.authResults[i] == -1) { + authflag = authflag && false; + } + } + HiLog.i(TAG, "data authflag:" + JSON.stringify(authflag)); + this.applyFlag = authflag; + }); + HiLog.i(TAG, 'Application requestPermissionsFromUser end'); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/presenter/contact/ContactListPresenter.ets b/entry/src/main/ets/MainAbility/presenter/contact/ContactListPresenter.ets new file mode 100644 index 0000000..b0a5bb9 --- /dev/null +++ b/entry/src/main/ets/MainAbility/presenter/contact/ContactListPresenter.ets @@ -0,0 +1,224 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import router from '@system.router'; +import HiLog from '../../util/HiLog'; +import Constants from '../../model/common/Constants'; +import {ContactVo} from '../../model/bean/ContactVo'; +import {ContactInfo} from '../../model/bean/ContactInfo' +import common from '../../model/common'; +import dbChangeHelper from '../../model/common/DbChangeHelper'; +import utils from '../../util/Utils'; +import appStorageUtil from '../../util/AppStorageUtil'; +import preferencesUtil from '../../util/PreferencesUtil'; +import prompt from '@system.prompt'; +import ContactRepository from '../../contact/repo/ContactRepository'; +import ContactAbilityModel from '../../model/ContactAbilityModel'; + +const TAG = 'ContactListPresenter '; + +/** + * 联系人列表被点击的控件类型 + */ +export enum ContactClickType { + LOGIN_IN, + IMPORT_CONTACT, + CREATE_CONTACT, + SCAN_CARD +} + +/** + * 联系人列表逻辑接口模型 + */ +export default class ContactListPresenter { + private static sInstance: ContactListPresenter; + indexs: string[] = ['#', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '…']; + contactList: ContactVo[] = []; + curItem: ContactVo = new ContactVo("", "", "", "", "", "", true, "", ""); + page: number = 0; + limit: number = 20; + queryContactsType: string = 'all'; + contactCount: number = 0; + isEmptyGroup: boolean = true; + shareList: Resource[] = [$r("app.string.qr_code"), $r("app.string.v_card"), $r("app.string.text")]; + layoutState: boolean = true; + settingsMenu: Resource[] = [$r("app.string.contact_setting_type_scancard"), $r("app.string.call_setting_type_setting")]; + + public static getInstance(): ContactListPresenter { + if (ContactListPresenter.sInstance == null) { + ContactListPresenter.sInstance = new ContactListPresenter(); + } + return ContactListPresenter.sInstance; + } + + aboutToAppear() { + HiLog.i(TAG, 'Contact aboutToAppear!'); + + var DAHelper = common.getDAHelper(Constants.uri.CONTACT_DB_URI); + this.refresh(); + dbChangeHelper.getInstance().registerDbChangeLister(DAHelper, Constants.uri.CONTACT_DATA_URI, (data) => { + this.refresh(); + }); + dbChangeHelper.getInstance().registerDbChangeLister(DAHelper, Constants.uri.CONTACT_URI, (data) => { + this.refresh(); + }); + } + + aboutToDisappear() { + HiLog.i(TAG, 'Contact aboutToDisappear!'); + var DAHelper = common.getDAHelper(Constants.uri.CONTACT_DB_URI); + dbChangeHelper.getInstance().unRegisterDbChangeLister(DAHelper, Constants.uri.CONTACT_DATA_URI, (data) => { + HiLog.i(TAG, 'Contact aboutToDisappear!'); + }); + dbChangeHelper.getInstance().unRegisterDbChangeLister(DAHelper, Constants.uri.CONTACT_URI, (data) => { + HiLog.i(TAG, 'Contact aboutToDisappear!'); + }); + } + + /** + * 当此页面显示时触发一次。包括路由过程、应用进入前后台等场景,仅@Entry修饰的自定义组件生效。 + */ + onPageShow() { + } + + /** + * 当此页面消失时触发一次。包括路由过程、应用进入前后台等场景,仅@Entry修饰的自定义组件生效。 + */ + onPageHide() { + } + + refresh() { + HiLog.i(TAG, 'Contact refresh!'); + var DAHelper = common.getDAHelper(Constants.uri.CONTACT_DB_URI); + ContactAbilityModel.getAllContact(DAHelper, (result) => { + if (utils.isEmptyList(result)) { + this.contactList = []; + } else { + this.contactList = result; + } + }) + } + + // 简洁布局选项初始化 + conciseLayoutInit() { + let data = preferencesUtil.getConciseLayout(); + this.layoutState = data == 'true' ? false : true; + } + + /** + * 联系人列表长按联系人item保存的当前联系人信息,提供给后面删除和分享的操作 + * + * @param curItem + */ + setCurItem(curItem: ContactVo) { + HiLog.i(TAG, 'setCurItem'); + this.curItem = curItem; + } + + /** + * 删除弹框取消按钮 + */ + onDeleteDialogCancel() { + HiLog.i(TAG, 'onDeleteDialogCancel !!!'); + } + + /** + * 删除弹框确认按钮 + * @param result + */ + onDeleteDialogConfirm(item) { + HiLog.i(TAG, 'onDeleteDialogConfirm !!! '); + ContactRepository.getInstance().deleteById(item.contactId) + .then((result) => { + HiLog.i(TAG, 'onDeleteDialogConfirm result is ' + JSON.stringify(result)); + dbChangeHelper.getInstance() + .notifyChange(common.getDAHelper(Constants.uri.CONTACT_DB_URI), Constants.uri.CONTACT_URI); + }); + } + + /** + * 分享取消按钮 + */ + onShareDialogCancel() { + HiLog.i(TAG, 'onShareDialogCancel !!! '); + } + + /** + * 分享确认按钮 + */ + onShareDialogConfirm() { + HiLog.i(TAG, 'onShareDialogConfirm !!! '); + } + + /** + * 分享弹框item点击事件回调 + * + * @param item 点击条目的string + * @param index 索引 + */ + onShareItemClick(item: any, index: number | null) { + HiLog.i(TAG, 'onShareItemClick !!! index is %s', index); + } + + /** + * 登录华为账号 + */ + loginAccount() { + HiLog.i(TAG, 'loginAccount !!'); + router.push( + { + uri: "", + params: {} + } + ); + } + + /** + * 导入联系人弹框 + */ + importContact() { + HiLog.i(TAG, 'importContact !!'); + router.push( + { + uri: "", + params: {} + } + ); + } + + /** + * 新建联系人 + */ + createContact() { + HiLog.i(TAG, 'createContact !!'); + router.push( + { + uri: "pages/contacts/accountants/Accountants" + } + ); + } + + /** + * 扫名片 + */ + scanCard() { + HiLog.i(TAG, 'scanCard !!'); + router.push( + { + uri: "" + } + ); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/presenter/contact/accountants/AccountantsPresenter.ets b/entry/src/main/ets/MainAbility/presenter/contact/accountants/AccountantsPresenter.ets new file mode 100644 index 0000000..2762a9f --- /dev/null +++ b/entry/src/main/ets/MainAbility/presenter/contact/accountants/AccountantsPresenter.ets @@ -0,0 +1,467 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import resourceManager from '@ohos.resourceManager'; +import router from '@system.router'; +import ContactAbility from '../../../model/ContactAbilityModel' +import HiLog from '../../../util/Hilog'; + +import common from "../../../model/common"; +import Constants from "../../../model/common/Constants"; +import util from "../../../util/Utils"; + +import AccountTypeService from '../../../account/AccountTypeService'; +import AccountType from '../../../account/type/AccountType'; +import Aim from '../../../contact/contract/Aim'; +import Birthday from '../../../contact/contract/Birthday'; +import Email from '../../../contact/contract/Email'; +import House from '../../../contact/contract/House'; +import Relation from '../../../contact/contract/Relation'; +import Phone from '../../../contact/contract/Phone'; +import {EmailBean} from "../../../model/bean/EmailBean"; +import {ContactInfo} from "../../../model/bean/ContactInfo"; +import {PhoneNumBean} from "../../../model/bean/PhoneNumBean"; +import {GroupBean} from "../../../model/bean/GroupBean"; +import {HouseBean} from "../../../model/bean/HouseBean"; +import {RelationBean} from "../../../model/bean/RelationBean"; +import {AIMBean} from "../../../model/bean/AIMBean"; +import {AssociatedPersonBean} from "../../../model/bean/AssociatedPersonBean"; + +const TAG = 'AccountantsPresenter '; + +/** + * 添加联系人页面 + */ +export default class AccountantsPresenter { + + private static instance: AccountantsPresenter; + + // 联系人id + contactId:string = ""; + + // 编辑模式 + updateShow: boolean = false; + + // 监听更新标识 + changed: boolean = false; + + // 联系人详情 + contactInfoBefore: ContactInfo = new ContactInfo("", "", "", [], [], "", "", "", [], [], [], [], [], []); + contactInfoAfter: ContactInfo = new ContactInfo("", "", "", [], [], "", "", "", [], [], [], [], [], []); + + // 下拉菜单 + birthdayMenu: any = [{ value: "", action: () => {} }]; + + // 生日菜单默认选择类型 + birthDaySelect: Resource = $r("app.string.birthday_type_grebirthday"); + + // 多联系人管理 + // [1] 占位 + MagList:any = []; + + private constructor() { + } + + public static getInstance(): AccountantsPresenter { + if (!AccountantsPresenter.instance) { + AccountantsPresenter.instance = new AccountantsPresenter() + } + return AccountantsPresenter.instance + } + + init() { + this.getContactMenus(); + + this.contactId = ""; + this.updateShow = false; + this.MagList = [1]; + this.contactInfoBefore = new ContactInfo("", "", "", [], [], "", "", "", [], [], [], [], [], []); + this.contactInfoAfter = new ContactInfo("", "", "", [], [], "", "", "", [], [], [], [], [], []); + } + + refresh() { + this.contactInfoBefore = this.contactInfoAfter; + this.changed = !this.changed; + } + + getContactMenus() { + let accountTypeService = new AccountTypeService(); + let menuKindTypeList; + let phoneType = accountTypeService.getAccountType(AccountType.PHONE_ACCOUNT_TYPE); + let tmpPhoneMenu = []; + menuKindTypeList = phoneType.mineKinds.get(Birthday.CONTENT_ITEM_TYPE).typeList; + menuKindTypeList.forEach(element => { + tmpPhoneMenu.push({}); + }); + this.birthdayMenu = tmpPhoneMenu; + resourceManager.getResourceManager().then(result => { + menuKindTypeList.forEach((element, i) => { + result.getString(element.labelRes.id, (err, typeName) => { + this.birthdayMenu[i] = { + value: typeName, + action: () => { + this.birthDaySelect = element.labelRes; + } + } + }) + }) + }) + } + + updatesInit() { + HiLog.i(TAG, ' init start'); + this.contactInfoAfter.setID(this.contactId); + if(this.updateShow == true ){ + HiLog.i(TAG, ' getPageData start %s', this.contactId); + this.getPageData(this.contactId); + } + } + + isEmptyInfo(afterInfo: any) { + let flag = false; + flag = flag || !util.isEmpty(afterInfo.display_name); + flag = flag || !util.isEmpty(afterInfo.nickname); + flag = flag || !util.isEmpty(afterInfo.remarks); + flag = flag || !util.isEmpty(afterInfo.position); + flag = flag || !util.isEmpty(afterInfo.company); + if (!util.isEmptyList(afterInfo.phones)) { + flag = flag || !util.isEmpty(afterInfo.phones[0].num); + } + if (!util.isEmptyList(afterInfo.emails)) { + flag = flag || !util.isEmpty(afterInfo.emails[0].address); + } + if (!util.isEmptyList(afterInfo.aims)) { + flag = flag || !util.isEmpty(afterInfo.aims[0].aimId); + } + if (!util.isEmptyList(afterInfo.houses)) { + flag = flag || !util.isEmpty(afterInfo.houses[0].houseId); + } + if (!util.isEmptyList(afterInfo.websites)) { + flag = flag || !util.isEmpty(afterInfo.websites[0]); + } + if (!util.isEmptyList(afterInfo.events)) { + flag = flag || !util.isEmpty(afterInfo.events[0].data); + } + if (!util.isEmptyList(afterInfo.relationships)) { + flag = flag || !util.isEmpty(afterInfo.relationships[0].associatedPersonId); + } + return flag; + } + + getPageData(id: string) { + if (util.isEmpty(id)) { + HiLog.e(TAG, 'The parameter ID is empty.'); + } + var DAHelper = common.getDAHelper(Constants.uri.CONTACT_DB_URI); + ContactAbility.getContactById(DAHelper, id, result => { + if (util.isEmpty(result)) { + HiLog.e(TAG, 'The result in the database is empty.'); + return; + } + this.dealRecordDetailsData(result.data); + }); + } + + private dealRecordDetailsData(data){ + let contactTemp = new ContactInfo("", "", "", [], [], "", "", "", [], [], [], [], [], []); + if (!data.hasOwnProperty('id') || data.id != this.contactId) { + HiLog.e(TAG, 'Failed to query the database based on the ID.'); + return; + } + contactTemp.setID(data.id); + if(data.hasOwnProperty('display_name')) { + contactTemp.setDisplayName(data.display_name); + } + if(data.hasOwnProperty('nickname')) { + contactTemp.setNickName(data.nickname); + } + if(data.hasOwnProperty('phones')) { + contactTemp.setPhones(data.phones); + } + if(data.hasOwnProperty('emails')) { + contactTemp.setEmails(data.emails); + } + if(data.hasOwnProperty('remarks')) { + contactTemp.setRemarks(data.remarks); + } + if(data.hasOwnProperty('position')) { + contactTemp.setPosition(data.position); + } + if(data.hasOwnProperty('company')) { + contactTemp.setCompany(data.company); + } + if(data.hasOwnProperty('aims')) { + contactTemp.setAims(data.aims); + } + if(data.hasOwnProperty('houses')) { + contactTemp.setHouses(data.houses); + } + if(data.hasOwnProperty('websites')) { + contactTemp.setWebsites(data.websites); + } + if(data.hasOwnProperty('relationships')) { + contactTemp.setRelationships(data.relationships); + } + if(data.hasOwnProperty('events')) { + contactTemp.setEvents(data.events); + } + if(data.hasOwnProperty('groups')) { + contactTemp.setGroups(data.groups); + } + this.contactInfoBefore = contactTemp; + this.contactInfoAfter = contactTemp; + } + + public getArray(array) { + if(util.isEmptyList(array)) + array.push({}); + let itemList = util.isEmptyList(array) ? this.MagList : array; + itemList = itemList.map((item, index) => {return { i: index + 1, item: item };}) + return itemList; + } + + public addMore(type: any) { + switch (type) { + case "phone": + this.contactInfoAfter.phones.push(new PhoneNumBean("1", "", "1", "", "")); + break; + case "email": + this.contactInfoAfter.emails.push(new EmailBean("1", "", "")); + break; + case "AIM": + this.contactInfoAfter.aims.push(new AIMBean("", "1", "", "")); + break; + case "house": + this.contactInfoAfter.houses.push(new HouseBean("", "1", "", "")); + break; + case "relationships": + this.contactInfoAfter.relationships.push(new AssociatedPersonBean("", "1", "", "")); + break; + default: + break; + } + this.refresh(); + } + + public deleteItem(typeName: string, startIndex){ + switch(typeName){ + case "phone": + if(this.contactInfoAfter.phones.length > 1){ + this.contactInfoAfter.phones.splice(startIndex, 1); + } + break; + case "email": + if(this.contactInfoAfter.emails.length > 1){ + this.contactInfoAfter.emails.splice(startIndex, 1); + } + break; + case "AIM": + if(this.contactInfoAfter.aims.length > 1){ + this.contactInfoAfter.aims.splice(startIndex, 1); + } + case "house": + if(this.contactInfoAfter.houses.length > 1){ + this.contactInfoAfter.houses.splice(startIndex, 1); + } + break; + case "relationships": + if(this.contactInfoAfter.relationships.length > 1){ + this.contactInfoAfter.relationships.splice(startIndex, 1); + } + break; + default: + break; + } + this.refresh(); + } + + public phoneMenuSelect(type: number){ + return Phone.getTypeLabelResource(type); + } + + public getTextDisplay(typeName: string, data: any) { + let display: string = ""; + switch (typeName) { + case "phone": + if (data.item.hasOwnProperty("num")) { + display = data.item.num; + } + break; + case "email": + if (data.item.hasOwnProperty("address")) { + display = data.item.address; + } + break; + case "AIM": + if (data.item.hasOwnProperty("aimName")) { + display = data.item.aimName; + } + break; + case "house": + if (data.item.hasOwnProperty("houseName")) { + display = data.item.houseName; + } + break; + case "relationships": + if (data.item.hasOwnProperty("name")) { + display = data.item.name; + } + break; + default: + break; + } + return display; + } + + public listItemChange(typeName: string, data:any, arg:string){ + switch(typeName){ + case "phone": + if (util.isEmpty(this.contactInfoAfter.phones[data.i - 1].id)) { + this.contactInfoAfter.phones[data.i - 1] = new PhoneNumBean("1", "", "", "", ""); + } + this.contactInfoAfter.phones[data.i - 1].num = arg.toString(); + break; + case "email": + if (util.isEmpty(this.contactInfoAfter.emails[data.i - 1].id)) { + this.contactInfoAfter.emails[data.i - 1] = new EmailBean("1", "", ""); + } + this.contactInfoAfter.emails[data.i - 1].address = arg.toString(); + break; + case "AIM": + if (util.isEmpty(this.contactInfoAfter.aims[data.i - 1].aimId)) { + this.contactInfoAfter.aims[data.i - 1] = new AIMBean("", "1", "", ""); + } + this.contactInfoAfter.aims[data.i - 1].aimName = arg.toString(); + break; + case "house": + if (util.isEmpty(this.contactInfoAfter.houses[data.i - 1].houseId)) { + this.contactInfoAfter.houses[data.i - 1] = new HouseBean("", "1", "", ""); + } + this.contactInfoAfter.houses[data.i - 1].houseName = arg.toString(); + break; + case "relationships": + if (util.isEmpty(this.contactInfoAfter.relationships[data.i - 1].associatedPersonId)) { + this.contactInfoAfter.relationships[data.i - 1] = new AssociatedPersonBean("", "1", "", ""); + } + this.contactInfoAfter.relationships[data.i - 1].name = arg.toString(); + break; + default: + break; + } + } + + public menuSelect(typeName: string, data: any) { + let typeId = 1; + switch (typeName) { + case "phone": + if (data.item.hasOwnProperty("id")) { + typeId = Number(data.item.id) + } + return Phone.getTypeLabelResource(typeId); + break; + case "email": + if (data.item.hasOwnProperty("id")) { + typeId = Number(data.item.id) + } + return Email.getTypeLabelResource(typeId); + break; + case "AIM": + if (data.item.hasOwnProperty("aimId")) { + typeId = Number(data.item.aimId) + } + return Aim.getTypeLabelResource(typeId); + break; + case "house": + if (data.item.hasOwnProperty("houseId")) { + typeId = Number(data.item.houseId) + } + return House.getTypeLabelResource(typeId); + break; + case "relationships": + if (data.item.hasOwnProperty("associatedPersonId")) { + typeId = Number(data.item.associatedPersonId) + } + return Relation.getTypeLabelResource(typeId); + break; + default: + return ""; + break; + } + } + + getMenuList(typeName: string){ + let accountTypeService = new AccountTypeService(); + let menuKindTypeList; + let phoneType = accountTypeService.getAccountType(AccountType.PHONE_ACCOUNT_TYPE); + switch(typeName){ + case "phone": + menuKindTypeList = phoneType.mineKinds.get(Phone.CONTENT_ITEM_TYPE).typeList; + break; + case "email": + menuKindTypeList = phoneType.mineKinds.get(Email.CONTENT_ITEM_TYPE).typeList; + break; + case "AIM": + menuKindTypeList = phoneType.mineKinds.get(Aim.CONTENT_ITEM_TYPE).typeList; + break; + case "house": + menuKindTypeList = phoneType.mineKinds.get(House.CONTENT_ITEM_TYPE).typeList; + break; + case "relationships": + menuKindTypeList = phoneType.mineKinds.get(Relation.CONTENT_ITEM_TYPE).typeList; + break; + default: + break; + } + return menuKindTypeList; + } + + public menuChange(typeName: string, data: any, item: any) { + switch (typeName) { + case "phone": + if (util.isEmptyObject(this.contactInfoAfter.phones[data.i - 1])) { + this.contactInfoAfter.phones[data.i - 1] = new PhoneNumBean("", "", "", "", ""); + } + this.contactInfoAfter.phones[data.i - 1].id = item.rawValue.toString(); + break; + case "email": + if (util.isEmptyObject(this.contactInfoAfter.emails[data.i - 1])) { + this.contactInfoAfter.emails[data.i - 1] = new EmailBean("", "", ""); + } + this.contactInfoAfter.emails[data.i - 1].id = item.rawValue.toString(); + break; + case "AIM": + if (util.isEmptyObject(this.contactInfoAfter.aims[data.i - 1])) { + this.contactInfoAfter.aims[data.i - 1] = new AIMBean("", "", "", ""); + } + this.contactInfoAfter.aims[data.i - 1].aimId = item.rawValue.toString(); + break; + case "house": + if (util.isEmptyObject(this.contactInfoAfter.houses[data.i - 1])) { + this.contactInfoAfter.houses[data.i - 1] = new HouseBean("", "", "", ""); + } + this.contactInfoAfter.houses[data.i - 1].houseId = item.rawValue.toString(); + break; + case "relationships": + if (util.isEmptyObject(this.contactInfoAfter.relationships[data.i - 1])) { + this.contactInfoAfter.relationships[data.i - 1] = new AssociatedPersonBean("", "", "", ""); + } + this.contactInfoAfter.relationships[data.i - 1].associatedPersonId = item.rawValue.toString(); + break; + default: + break; + } + this.refresh(); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/presenter/contact/batchselectcontacts/BatchSelectContactsPresenter.ets b/entry/src/main/ets/MainAbility/presenter/contact/batchselectcontacts/BatchSelectContactsPresenter.ets new file mode 100644 index 0000000..5460f8c --- /dev/null +++ b/entry/src/main/ets/MainAbility/presenter/contact/batchselectcontacts/BatchSelectContactsPresenter.ets @@ -0,0 +1,881 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import HiLog from '../../../util/HiLog'; +import appStorage from '../../../util/AppStorageUtil'; +import {ContactVo} from '../../../model/bean/ContactVo'; +import callLogService from '../../../model/calllog/CalllogModel'; +import Constants from '../../../model/common/Constants'; +import PreferencesUtil from '../../../util/PreferencesUtil'; +import Common from '../../../model/common'; +import Utils from '../../../util/Utils'; +import AppStorageUtil from '../../../util/AppStorageUtil'; +import {CallBean} from '../../../model/bean/CallBean'; +import LooseObject from '../../../model/bean/LooseObject'; +import ContactAbilityModel from '../../../model/ContactAbilityModel'; +import featureAbility from '@ohos.ability.featureAbility'; +import router from '@system.router'; + +const TAG = 'BatchSelectContactsPresenter '; + +/** + * 短信选择联系人列表 P层 + */ +export default class BatchSelectContactsPresenter { + private static sInstance: BatchSelectContactsPresenter; + sizeType: SizeType = SizeType.LG; + selectCount: number = 0; + // 最近通话记录 + callLogTemp: any[] = []; + // 联系人列表 + contactsList: any[] = []; + searchContactList: any[] = []; + // 简洁布局 + layoutState: boolean = true; + // 群组列表 + groupList: any[] = []; + emptyViewText: Resource = $r("app.string.no_recent_contacts"); + controller: TabsController = new TabsController(); + currentIndex: number = 0; + // tabTextSrc: string[] | Resource[] = [$r("app.string.recent"), $r("app.string.contact"), $r("app.string.groups")]; + tabTextSrc: string[] | Resource[] = [$r("app.string.recent"), $r("app.string.contact")]; + tabInfo: TabInfo = new TabInfo(0); + contactsInfo: ContactsInfo = new ContactsInfo(); + // 是否显示底部全选按钮,当本页签无数据时,不显示 + showOption: boolean = false; + // 搜索关键字 + searchText: string = ''; + // 当前总体已选择的数据,key为电话号码,value为 包含电话号码和姓名的obj + selectedNumberMap: any = new Map(); + //是否显示搜索列表 + searchLayoutShow: boolean = false; + selectDisabled: boolean = true; + isSelectAll: boolean = false; + + public static getInstance(): BatchSelectContactsPresenter { + if (BatchSelectContactsPresenter.sInstance == null) { + BatchSelectContactsPresenter.sInstance = new BatchSelectContactsPresenter(); + appStorage.setAndLink('batchselectcontactspresenter', BatchSelectContactsPresenter.sInstance); + } + return BatchSelectContactsPresenter.sInstance; + } + + /** + * 函数在创建自定义组件的新实例后,在执行其build函数之前执行。 + * 允许在aboutToAppear函数中改变状态变量,这些更改将在后续执行build函数中生效。 + */ + aboutToAppear() { + this.initCallLog(); + this.initContactsList(); + } + + /** + * 函数在自定义组件析构消耗之前执行。 + * 不允许在aboutToDisappear函数中改变状态变量,特别是@Link变量的修改可能会导致应用程序行为不稳定。 + */ + aboutToDisappear() { + } + + /** + * 当此页面显示时触发一次。包括路由过程、应用进入前后台等场景,仅@Entry修饰的自定义组件生效。 + */ + onPageShow() { + } + + /** + * 当此页面消失时触发一次。包括路由过程、应用进入前后台等场景,仅@Entry修饰的自定义组件生效。 + */ + onPageHide() { + } + + /** + * 点击cancel图标 + */ + cancel() { + router.back(); + } + + /** + * 点击ok图标 + */ + comfirm() { + let checkedList = []; + this.selectedNumberMap.forEach((value) => { + checkedList.push(value); + }); + let contacts = this.dealContactName(checkedList); + let parameters = { + contactObjects: JSON.stringify(contacts) + }; + let result = { + resultCode: 0, + want: { + parameters: parameters + } + }; + // 短信新建选择联系人 + featureAbility.terminateSelfWithResult(result) + .then((data) => { + HiLog.i(TAG, "terminateSelfWithResult Operation succeeded: " + data); + }) + .catch((error) => { + HiLog.e(TAG, "Operation failed. Cause: " + error); + }); + } + + /** + * 处理选中的联系人的信息 + * + * @param {Array} checkedList 选中的list + * @return {boolean} 返回处理后的联系人 + */ + dealContactName(checkedList) { + let contacts = []; + for (let item of checkedList) { + let contact = { + contactName: item.name, + telephone: item.number + }; + contacts.push(contact); + } + return contacts; + } + + /** + * 底部全选按钮被点击 + */ + clickSelectAll() { + switch (this.tabInfo.tabIndex) { + // 最近页签 + case 0: + if (this.tabInfo.recentCount != 0 && this.tabInfo.recentCount == this.tabInfo.recentTotal) { // 已经全选,则取消全选 + this.tabInfo.allClickedRecent = false; + this.unSelectAll(); + } else { // 未全选,则全部选中 + this.tabInfo.allClickedRecent = true; + this.selectAll(); + } + break; + + // 联系人列表页签 + case 1: + if (this.tabInfo.contactsCount != 0 && this.tabInfo.contactsCount == this.tabInfo.contactsTotal) { + // 已经全选,则取消全选 + this.tabInfo.allClickedContacts = false; + this.unSelectAll(); + } else { + // 未全选,则全部选中 + this.tabInfo.allClickedContacts = true; + this.selectAll(); + } + break; + + // 群组页签 + case 2: + if (this.tabInfo.groupsCount != 0 && this.tabInfo.groupsCount == this.tabInfo.groupsTotal) { // 已经全选,则取消全选 + this.tabInfo.allClickedGroups = false; + this.unSelectAll(); + } else { // 未全选,则全部选中 + this.tabInfo.allClickedGroups = true; + this.selectAll(); + } + break; + + default: + break; + } + this.refreshPageMessage(); + } + /** + * 取消全选 + * */ + unSelectAll() { + switch (this.tabInfo.tabIndex) { + // 最近页签 + case 0: + this.unSelectAllRecentProc(); + break; + + // 联系人列表页签 + case 1: + this.unSelectAllContactProc(); + break; + + // 群组页签 + case 2: // 群组页签 + this.groupList.forEach(element => { + element.checked = false; + }); + this.tabInfo.groupsCount = 0; + break; + + default: + break; + } + } + + /** + * 全选列表项, 每个页签在全选时,将自身的选择结果追加给selectCount + * */ + selectAll() { + switch (this.tabInfo.tabIndex) { + // 最近页签 + case 0: + this.selectAllRecentProc(); + break; + + // 联系人列表页签 + case 1: + this.selectAllContactProc(); + break; + + // 群组页签 + case 2: + this.groupList.forEach(element => { + element.checked = true; + }); + this.tabInfo.groupsCount = this.tabInfo.groupsTotal; + break; + + default: + break; + } + } + + /** + * 最近联系列表取消全选 + * */ + unSelectAllRecentProc() { + this.callLogTemp.forEach(element => { + element.checked = false; + if (this.checkIfSelectedNumber(element.phoneNumber)) { + this.deleteSelectedNumber(element.phoneNumber); + } + }); + this.tabInfo.recentCount = 0; + } + + /* 联系人列表取消全选 */ + unSelectAllContactProc() { + // 搜索界面 + if (this.contactsInfo.searchLayoutShow) { + this.contactsInfo.searchContactList.forEach(element => { + for (let i = 0; i < element.phoneNumbers.length; i++) { + if (element.phoneNumbers[i].checked) { + element.phoneNumbers[i].checked = false; + this.deleteSelectedNumber(element.phoneNumbers[i].phoneNumber); + } + } + }); + } else { // 主列表 + this.contactsList.forEach(element => { + for (let i = 0; i < element.phoneNumbers.length; i++) { + if (element.phoneNumbers[i].checked) { + element.phoneNumbers[i].checked = false; + this.deleteSelectedNumber(element.phoneNumbers[i].phoneNumber); + } + } + }); + } + this.tabInfo.contactsCount = 0; + } + + /* 最近联系页签全选操作 */ + selectAllRecentProc() { + this.callLogTemp.forEach(element => { + element.checked = true; + this.addOrUpdateSelectedNumberMap(element.phoneNumber, element.displayName); + }); + this.tabInfo.recentCount = this.tabInfo.recentTotal; + } + + /* 联系人全选操作 */ + selectAllContactProc() { + // 搜索界面 + if (this.contactsInfo.searchLayoutShow) { + this.contactsInfo.searchContactList.forEach(element => { + if (!element.phoneNumbers[0].checked) { + element.phoneNumbers[0].checked = true; + this.addOrUpdateSelectedNumberMap(element.phoneNumbers[0].phoneNumber, element.name.fullName); + } + }); + } else { + // 若是主列表,则只修改主列表数据 + this.contactsList.forEach(element => { + if (!element.phoneNumbers[0].checked) { + element.phoneNumbers[0].checked = true; + this.addOrUpdateSelectedNumberMap(element.phoneNumbers[0].phoneNumber, element.name.fullName); + } + }); + } + this.tabInfo.contactsCount = this.tabInfo.contactsTotal; + } + + /** + * 校验当前号码是否已被选择 + * + * @param {number} number 号码 + * @return {Object} 校验当前号码是否已被选择 + */ + checkIfSelectedNumber(number): boolean { + if (Utils.isEmpty(number)) { + return false; + } + return this.selectedNumberMap.has(number.replace(/\s+/g, '')); + } + + onTabChange(tabIndex: number) { + HiLog.i(TAG, 'onTabChange tabIndex is %s', tabIndex); + this.tabInfo.tabIndex = tabIndex; + } + + getEmptyText(): Resource { + switch (this.tabInfo.tabIndex) { + // 最近 + case 0: + this.emptyViewText = $r("app.string.no_recent_contacts"); + break + // 联系人 + case 1: + this.emptyViewText = $r("app.string.no_select_contacts"); + break + // 群组 + case 2: + this.emptyViewText = $r("app.string.no_group_contacts"); + break + default: + this.emptyViewText = $r("app.string.no_recent_contacts"); + break + } + return this.emptyViewText; + } + + /** + * 当recent-item被点击的回调 + * + * @param isOn CheckBox是否被选中 + */ + onRecentItemClicked(index: number) { + HiLog.i(TAG, 'onRecentItemClicked index is %s', index); + this.checkStateChange(index, { + checked: !(this.callLogTemp[index].checked) + }); + } + + /** + * 当contact-item被点击的回调 + * + * @param isOn CheckBox是否被选中 + */ + onContactItemClicked(index: number, indexChild: number) { + HiLog.i(TAG, 'onContactItemClicked index is %s', index); + HiLog.i(TAG, 'onContactItemClicked indexChild is %s', indexChild); + + let event = { + contactIndex: index, + numberIndex: indexChild, + checked: this.searchLayoutShow ? !(this.searchContactList[index].phoneNumbers[indexChild].checked) + : !(this.contactsList[index].phoneNumbers[indexChild].checked) + } + this.checkStateChange(index, event); + } + + /** + * 列表复选框状态变化 + * + * @param {number} index 下标 + * @param {Object} e event事件 + */ + checkStateChange(index, e) { + HiLog.i(TAG, 'checkStateChange index is ' + index + " ,event is " + JSON.stringify(e)); + HiLog.i(TAG, 'checkStateChange tabIndex is %s', this.tabInfo.tabIndex); + switch (this.tabInfo.tabIndex) { + // 最近 + case 0: + this.changeCallLogItemState(index, e); + break; + + case 1: + this.changeContactsItemState(index, e); + break; + + // case 2: + // this.changeGroupsItemState(index, e); + // break; + + default: + break; + } + this.refreshPageMessage(); + } + + /** + * 联系人主列表或搜索列表点击复选框事件 + * + * @param {Object} e event事件 + */ + changeContactState(event) { + // 调用统一的复选框变化函数 + this.checkStateChange(event.contactIndex, event); + } + + /** + * 最近页签通话记录复选框状态变化 + * + * @param {number} index 下标 + * @param {Object} e event事件 + */ + changeCallLogItemState(index, e) { + HiLog.i(TAG, 'changeCallLogItemState index is' + index + ' , item is ' + JSON.stringify(e)); + this.callLogTemp[index].checked = e.checked; + AppStorageUtil.SetOrCreate('callLogTemp', this.callLogTemp); + if (this.callLogTemp[index].checked) { + this.addOrUpdateSelectedNumberMap(this.callLogTemp[index].phoneNumber, this.callLogTemp[index].displayName); + this.tabInfo.recentCount++; + } else { + this.deleteSelectedNumber(this.callLogTemp[index].phoneNumber); + this.tabInfo.recentCount--; + } + } + + /** + * 联系人列表页签通话记录复选框状态变化 + * + * @param {number} index 下标 + * @param {Object} e event事件 + */ + changeContactsItemState(index, e) { + HiLog.i(TAG, "changeContactsItemState searchLayoutShow is %s", this.contactsInfo.searchLayoutShow); + let contactId = ''; + if (!this.contactsInfo.searchLayoutShow) { + // 联系人主列表界面点击复选框 + contactId = this.contactsList[index].contactId; + } else { + // 联系人搜索列表界面点击复选框 + contactId = this.contactsInfo.searchContactList[index].contactId; + } + this.checkContactsCount(e, contactId); + } + + /** + * 判断当前是否需要增加或减小联系人计数,若所有子号码及主号码都变为未选中,则减1,如果有任何的号码变为选中,则加一 + * + * @param {Object} e event事件 + * @param {number} contactId 联系人ID + */ + checkContactsCount(e, contactId) { + HiLog.i(TAG, "checkContactsCount searchLayoutShow is %s", this.contactsInfo.searchLayoutShow); + // 当前为搜索页面 + if (this.contactsInfo.searchLayoutShow) { + this.contactsInfo.searchContactList.forEach(element => { + if (contactId == element.contactId) { + if (e.checked) { + // 修改前原数据中不存在已选项时,页签计数加1; + if (!this.checkIfNeedCount(element)) { + this.tabInfo.contactsCount++; + } + element.phoneNumbers[e.numberIndex].checked = true; + this.contactsInfo.contactsNumberCount++; + this.addOrUpdateSelectedNumberMap(element.phoneNumbers[e.numberIndex].phoneNumber, + element.name.fullName); + } else { + element.phoneNumbers[e.numberIndex].checked = false; + this.contactsInfo.contactsNumberCount--; + // 修改后原数据中不存在已选项时,页签计数减1; + if (!this.checkIfNeedCount(element)) { + this.tabInfo.contactsCount--; + } + this.deleteSelectedNumber(element.phoneNumbers[e.numberIndex].phoneNumber); + } + } + }); + } else { // 当前为主列表 + this.contactsList.forEach(element => { + if (contactId == element.contactId) { + if (e.checked) { + // 修改前原数据中不存在已选项时,页签计数加1; + if (!this.checkIfNeedCount(element)) { + this.tabInfo.contactsCount++; + } + element.phoneNumbers[e.numberIndex].checked = true; + this.contactsInfo.contactsNumberCount++; + this.addOrUpdateSelectedNumberMap(element.phoneNumbers[e.numberIndex].phoneNumber, + element.name.fullName); + } else { + element.phoneNumbers[e.numberIndex].checked = false; + this.contactsInfo.contactsNumberCount--; + // 修改后原数据中不存在已选项时,页签计数减1; + if (!this.checkIfNeedCount(element)) { + this.tabInfo.contactsCount--; + } + this.deleteSelectedNumber(element.phoneNumbers[e.numberIndex].phoneNumber); + } + } + }); + } + } + + /** + * 判断当前联系人元素是否存在已选项,存在则反true,不存在则反false + * + * @param {Object} contact 联系人数据 + * @return {boolean} 存在则反true,不存在则反false + */ + checkIfNeedCount(contact) { + if (contact.phoneNumbers.length > 0) { + for (let index = 0; index < contact.phoneNumbers.length; index++) { + const element = contact.phoneNumbers[index]; + if (element.checked) { + return true; + } + } + } else { + return false; + } + } + + /* 标题计数刷新函数 */ + refreshPageMessage() { + this.selectCount = this.selectedNumberMap.size; + if (this.selectedNumberMap.size > 0) { + this.selectDisabled = false; + this.checkAllClickButtonStyle(); + } else { + this.selectDisabled = true; + this.isSelectAll = false; + } + } + + /** + * 校验全选按钮的显示样式 + */ + checkAllClickButtonStyle() { + switch (this.tabInfo.tabIndex) { + // 最近页签 + case 0: + if (this.tabInfo.recentCount == this.tabInfo.recentTotal) { + // this.changeToFullSelect(); + this.tabInfo.allClickedRecent = true; + } else { + // this.changeToUnFullSelect(); + } + break; + + // 联系人列表页签 + case 1: + if (this.tabInfo.contactsCount == this.tabInfo.contactsTotal) { + // this.changeToFullSelect(); + this.tabInfo.allClickedContacts = true; + } else { + // this.changeToUnFullSelect(); + } + break; + + // // 群组页签 + // case 2: + // if (this.tabInfo.groupsCount == this.tabInfo.groupsTotal) { + // // this.changeToFullSelect(); + // this.tabInfo.allClickedGroups = true; + // } + // break; + default: + break; + } + } + + /** + * 刷新已选map数据 + * + * @param {number} number 号码 + * @param {string} name 姓名 + */ + addOrUpdateSelectedNumberMap(number, name) { + if (Utils.isEmpty(number)) { + return; + } + this.selectedNumberMap.set(number.replace(/\s+/g, ''), { + name: name, + number: number.replace(/\s+/g, '') + }); + } + + /** + * 从已选号码中删除 + * + * @param {number} number 号码 + */ + deleteSelectedNumber(number) { + if (Utils.isEmpty(number)) { + return; + } + this.selectedNumberMap.delete(number.replace(/\s+/g, '')); + } + + /** + * 获取最近通话记录 + * */ + initCallLog() { + HiLog.i(TAG, 'initCallLog start !'); + // 用于防止号码重复校验 + let tempMap = new Map(); + // 用于临时存放不重复的item + let tempList: any[] = []; + + let mergeRule = PreferencesUtil.getCalllogMergeRule(); + HiLog.i(TAG, 'initCallLog mergeRule is %s ', mergeRule); + + let DAHelper = Common.getDAHelper(Constants.uri.CALLLOG_DB_URI); + callLogService.getAllCalls(DAHelper, mergeRule, data => { + AppStorageUtil.setCallLogTotalData(data); + if (data.hasOwnProperty('callLogList') && !Utils.isEmptyList(data.callLogList)) { + HiLog.i(TAG, 'data has callLogList key'); + for (let i = 0; i < data.callLogList.length; i++) { + HiLog.i(TAG, 'callLogList index is %s', i); + let element = data.callLogList[i]; + let bgColorIndex = parseInt(element.id, 10) % (Constants.background.Color.length); + element.portraitColor = Constants.background.Color[bgColorIndex]; + element.suffix = Utils.isEmpty(element.displayName) ? '' : element.displayName.substr(element.displayName.length - 1); + element.checked = false; + // 重复的号码无需显示 + if (!tempMap.has(Utils.removeSpace(element.phoneNumber))) { + HiLog.i(TAG, 'callLogList remove same'); + tempList.push(element); + tempMap.set(element.phoneNumber, null); + } + // 显示最近产生通话记录的50条号码 + if (tempList.length > 50) { + HiLog.i(TAG, 'callLogList more 50 break!'); + break; + } + + } + } + + this.callLogTemp = tempList; + AppStorageUtil.SetOrCreate('callLogTemp', tempList); + this.tabInfo.recentTotal = this.callLogTemp.length; + this.checkOptionState(); + }); + } + + buildCalllog(data: LooseObject): CallBean { + HiLog.i(TAG, 'buildCalllog start !'); + if (Utils.isEmptyObject(data)) { + HiLog.i(TAG, 'buildCalllog data is empty'); + return null; + } + let callbean: CallBean = new CallBean(data.id, data.phone); + callbean.setName(data.name) + .setCallTime(data.callTime) + .setCallType(data.callType) + .setCallTag(data.callTag) + .setSimType(data.simType) + .setIsHd(data.isHd) + .setFormatNumber(data.formatNumber) + .setContactKey(data.contactKey); + HiLog.i(TAG, 'buildCalllog callbean success!'); + return callbean; + } + + /** + * 校验是否需要显示底部全选按钮 + * */ + checkOptionState() { + switch (this.tabInfo.tabIndex) { + case 0: + Utils.isEmptyList(this.callLogTemp) ? this.showOption = false : this.showOption = true; + break; + + case 1: + Utils.isEmptyList(this.contactsList) ? this.showOption = false : this.showOption = true; + break; + + case 2: + Utils.isEmptyList(this.groupList) ? this.showOption = false : this.showOption = true; + break; + + default: + break; + } + } + + /* + * 初始化联系人列表数据 + */ + initContactsList() { + HiLog.i(TAG, 'initContactsList start!'); + let DAHelper = Common.getDAHelper(Constants.uri.CONTACT_DB_URI); + ContactAbilityModel.getAllContact(DAHelper, (resultList) => { + HiLog.i(TAG, 'initContactsList resultList success ' + resultList.length); + let listTemp: any[] = []; + if (!Utils.isEmptyList(resultList)) { + for (let element of resultList) { + element.name = {}; + element.name.fullName = element.emptyNameData; + element.name.namePrefix = element.namePrefix; + element.name.nameSuffix = element.nameSuffix; + if (element.phoneNumbers != null && element.phoneNumbers.length > 0) { + element.phoneNumbers.forEach(childEle => { + childEle.checked = false; + childEle.labelName = this.getPhoneLabelNameById(childEle.labelId); + this.initVariableSpan(element); + }); + listTemp.push(element); + } + } + this.contactsList = listTemp; + AppStorageUtil.SetOrCreate('contactsList', listTemp); + this.tabInfo.contactsTotal = this.contactsList.length; + this.contactsInfo.contactsListTotal = this.contactsList.length; + } else { + HiLog.e(TAG, 'select contact list is empty!'); + } + }); + } + + + /** + * 赋值自定义属性,为后面可变字体搜索做准备 + * + * @param {Object} item 联系人数据 + */ + initVariableSpan(item) { + // 初始化可变名称 + let matchString = Utils.getMatchedString(item.emptyNameData, this.searchText); + if (Utils.isEmpty(matchString) || Utils.isEmpty(this.searchText.trim())) { + item.name.searchTextStart = ''; + item.name.searchTextMiddle = ''; + item.name.searchTextEnd = item.emptyNameData; + } else { + let name = item.emptyNameData; + let index = name.indexOf(matchString); + item.name.searchTextStart = name.substr(0, index); + item.name.searchTextMiddle = name.substr(index, matchString.length); + item.name.searchTextEnd = name.substr(index + matchString.length); + } + // 初始化可变手机号 + for (let i = 0; i < item.phoneNumbers.length; i++) { + let phoneNumber = item.phoneNumbers[i].phoneNumber; + let matchStringPhone = Utils.getMatchedString(phoneNumber, this.searchText); + if (Utils.isEmpty(matchStringPhone) || Utils.isEmpty(this.searchText.trim())) { + item.phoneNumbers[i].startPhone = ''; + item.phoneNumbers[i].middlePhone = ''; + item.phoneNumbers[i].endPhone = phoneNumber; + } else { + let phoneIndex = phoneNumber.indexOf(matchStringPhone); + item.phoneNumbers[i].startPhone = phoneNumber.substr(0, phoneIndex); + item.phoneNumbers[i].middlePhone = phoneNumber.substr(phoneIndex, matchStringPhone.length); + item.phoneNumbers[i].endPhone = phoneNumber.substr(phoneIndex + matchStringPhone.length); + } + } + } + + /** + * 根据手机号的LabelId获取LabelName + */ + getPhoneLabelNameById(phoneLabelId: string) { + let labelName: string | Resource = ''; + switch (parseInt(phoneLabelId, 10)) { + case 1: + labelName = "住宅"; + break; + + case 2: + labelName = "电话"; + break; + + case 3: + labelName = "单位"; + break; + + case 4: + labelName = "单位传真"; + break; + + case 5: + labelName = "住宅传真"; + break; + + case 6: + labelName = "寻呼机"; + break; + + case 7: + labelName = "其他"; + break; + + case 12: + labelName = "总机"; + break; + + case 99: + labelName = "自定义"; + break; + + default: + break; + } + return labelName; + } +} + +export class TabInfo { + tabIndex: number = 0; + recentTotal: number = 0; + contactsTotal: number = 0; + groupsTotal: number = 0; + // 是否点击过全选 :当点击全选时置为true,当点击取消全选时置为false,适配大数据时的情况 + allClickedRecent: boolean = false; + allClickedContacts: boolean = false; + allClickedGroups: boolean = false; + // 各页签的计数 + recentCount: number = 0; + contactsCount: number = 0; + groupsCount: number = 0; + refreshGroupItemState: boolean = false; + constructor(tabIndex: number) { + this.tabIndex = tabIndex; + } +} + +/** + * 联系人列表相关数据 + */ +export class ContactsInfo { + searchContactList = []; + // 当前已选择的联系人列表,后续大数据时使用 + selectedContactMap = new Map(); + // 是否显示搜索页 + searchLayoutShow: boolean = false; + // 搜索匹配条数 + searchPhoneNum: number = 0; + // 是否是搜索列表 + showSearchList: boolean = false; + // 是否显示默认号码 + showDefaultNumber: boolean = true; + // 是否显示子号码列表 + showNumberList: boolean = true; + // 是否显示主号码复选框 + phoneCheckShow: boolean = true; + // 是否显示子号码列表复选框 + childPhoneCheckShow: boolean = true; + contactsListCount: number = 0; + contactsListTotal: number = 0; + // 对联系人列表已选择的号码计数 + contactsNumberCount: number = 0; + constructor() { + + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/presenter/dialer/DialerPresenter.ets b/entry/src/main/ets/MainAbility/presenter/dialer/DialerPresenter.ets new file mode 100644 index 0000000..4c41e34 --- /dev/null +++ b/entry/src/main/ets/MainAbility/presenter/dialer/DialerPresenter.ets @@ -0,0 +1,346 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import vibrator from '@ohos.vibrator'; +import HiLog from '../../util/Hilog'; +import Utils from '../../util/Utils'; +import resourceManager from '@ohos.resourceManager'; +import media from '@ohos.multimedia.media'; +import fileIO from '@ohos.fileio'; +import DialUtil from '../../util/DialUtil'; +import appStorage from './../../util/AppStorageUtil'; +import COMMON from '../../model/common'; +import router from '@system.router'; +import LooseObject from './../../model/bean/LooseObject' +import featureAbility from '@ohos.ability.featureAbility'; +import Constants from './../../model/common/Constants'; + +const TAG = 'DialerPresenter'; +/** + * 拨号盘 P层 + */ +export default class DialerPresenter { + private static mPresenter: DialerPresenter; + + // 号码编辑框最大可显示号码长度,依据p40为25个数字 + readonly NUM_TEXT_MAX_LENGTH = 20; + // 号码编辑框 最大字体 70px时的最大长度 + readonly NUM_TEXT_MAXSIZE_LENGTH = 14; + // 号码编辑框数字最大字体大小,单位px + readonly NUM_TEXT_FONT_SIZE_MAX = 38; + readonly TAG = 'DailerTablet'; + readonly HOST = 'fd://'; + readonly BASE_PATH = 'data/app/el1/bundle/public/com.ohos.contacts/com.ohos.contacts/assets/entry/resources/rawfile/'; + // 默认显示拨号盘 + panelShow: boolean = true; + // 默认不显示收展键 + btnShow: boolean = false; + // 电话号码 + tele_number: string = '' + tele_num_size: number = this.NUM_TEXT_FONT_SIZE_MAX; + audioPlayer: any = undefined; + mAudioPath: string = ''; + //完整长度号码 + all_number: string = '' + + static getInstance() { + if (this.mPresenter == null) { + this.mPresenter = new DialerPresenter(); + appStorage.setAndLink('DialerPresenter', this.mPresenter); + } + return this.mPresenter; + } + + onPageShow() { + // 呼叫前编辑的号码 + if (appStorage.isEditNumber() && appStorage.getNumTextDialer()) { + this.tele_number = COMMON.toStrings(appStorage.getNumTextDialer()) + } + } + + aboutToAppear() { + this.audioPlayer = media.createAudioPlayer(); + // 音频播放暂时替代 + HiLog.i(TAG, 'keypad tone'); + // 设置'dataLoad'事件回调,src属性设置成功后,触发此回调 + this.audioPlayer.on('dataLoad', () => { + HiLog.i(TAG, 'audio set source success'); + this.audioPlayer.play(); + }); + this.audioPlayer.on('play', () => { + HiLog.i(TAG, 'audio play success'); + }); + this.audioPlayer.on('reset', () => { + HiLog.i(TAG, 'audio reset success'); + }); + this.audioPlayer.on('finish', () => { + HiLog.i(TAG, 'audio play finish'); + }); + } + + onDestroy() { + this.audioPlayer.release(); + this.audioPlayer = undefined; + } + + /* + * 删除号码时,改变字体大小 + */ + deleteTeleNum() { + if (this.all_number.length < this.NUM_TEXT_MAX_LENGTH) { + this.tele_number = this.all_number; + } else { + this.tele_number = this.all_number.substr(this.all_number.length - this.NUM_TEXT_MAX_LENGTH) + } + if (this.tele_number.length > this.NUM_TEXT_MAXSIZE_LENGTH) { + this.tele_num_size = this.NUM_TEXT_FONT_SIZE_MAX * this.NUM_TEXT_MAXSIZE_LENGTH / this.tele_number.length; + } else if (this.tele_number.length <= this.NUM_TEXT_MAXSIZE_LENGTH) { + this.tele_num_size = this.NUM_TEXT_FONT_SIZE_MAX; + } + } + + /* + * 删除号码时,添加格式化空格 + */ + deleteAddSpace() { + let teleNumberNoSpace = Utils.removeSpace(this.tele_number); + this.all_number = Utils.removeSpace(this.all_number); + if (teleNumberNoSpace.length > this.NUM_TEXT_MAXSIZE_LENGTH - 2) { + this.tele_number = teleNumberNoSpace; + return; + } + if (this.checkNeedNumberSpace(this.tele_number)) { + if (teleNumberNoSpace.length <= 3) { + this.tele_number = teleNumberNoSpace; + return; + } + if (teleNumberNoSpace.length > 3) { + var split1 = teleNumberNoSpace.substr(0, 3); + var split2 = teleNumberNoSpace.substr(3, teleNumberNoSpace.length - 3); + this.tele_number = split1 + ' ' + split2; + } + if (teleNumberNoSpace.length > 7) { + split2 = teleNumberNoSpace.substr(3, 4); + var split3 = teleNumberNoSpace.substr(7, teleNumberNoSpace.length - 7); + this.tele_number = split1 + ' ' + split2 + ' ' + split3; + } + } else { + if (teleNumberNoSpace.length > 8) { + var split4 = teleNumberNoSpace.substr(0, 8); + var split5 = teleNumberNoSpace.substr(8, teleNumberNoSpace.length - 8); + this.tele_number = split4 + ' ' + split5; + } + } + } + + /* + * 输入号码时检查是否需要添加格式化空格 + */ + checkNeedNumberSpace(numText) { + let isSpace = /[\+;,#\*]/g; + let isRule = /^\+.*/; + if (isSpace.test(numText)) { // 号码字符串中包含特殊字符则不添加空格 + if (isRule.test(numText)) { + return true; + } else { + return false; + } + } + return true; + } + + dialing(phoneNumber) { + DialUtil.getInstance().dial(phoneNumber, (data, err, value) => { + HiLog.i(TAG, 'dial isEmergencyPhoneNumber : ' + data + ' err : ' + err + ' value : ' + value); + }); + } + + /* + * 按键振动 + */ + pressVibrate() { + vibrator.vibrate(1000, function (error) { + if (error) { + HiLog.e(TAG, "pressVibrate error"); + } else { + HiLog.i(TAG, "Callback returned to indicate a successful vibration."); + } + }) + } + + + /* + * 输入号码时添加空格 + */ + ifNeedSpace() { + switch (this.tele_number.length) { + case 3: + if (this.checkNeedNumberSpace(this.tele_number)) { + this.tele_number = this.tele_number + ' '; + } + break; + case 8: + this.tele_number = this.tele_number + ' '; + break; + default: + break; + } + } + + /* + * 输入号码超长处理 + */ + viewNumberTextProc() { + // 超长后去除全部空格 + var numStringNoSpace = Utils.removeSpace(this.tele_number); + var numStringNoSpace_all = Utils.removeSpace(this.all_number); + this.tele_number = numStringNoSpace_all.length > this.NUM_TEXT_MAX_LENGTH ? + numStringNoSpace_all.substr(numStringNoSpace_all.length - this.NUM_TEXT_MAX_LENGTH) : this.tele_number; + + if (this.tele_number.length > this.NUM_TEXT_MAXSIZE_LENGTH) { + this.tele_number = Utils.removeSpace(this.tele_number); + } + if (this.tele_number.length > this.NUM_TEXT_MAXSIZE_LENGTH) { + this.tele_num_size = this.NUM_TEXT_FONT_SIZE_MAX * this.NUM_TEXT_MAXSIZE_LENGTH / (this.tele_number.length); // 可视号码在16-25位时,适配font-size + } else { + this.tele_num_size = this.NUM_TEXT_FONT_SIZE_MAX; + } + } + + /* + * 根据按键数字播放不同音频资源 + */ + playAudio(number) { + let audioFileName: string = ''; + HiLog.i(TAG, 'number : ' + number.toString()); + switch (number.toString()) { + case '1': + audioFileName = '1.ogg'; + break; + case '2': + audioFileName = '2.ogg'; + break; + case '3': + audioFileName = '3.ogg'; + break; + case '4': + audioFileName = '4.ogg'; + break; + case '5': + audioFileName = '5.ogg'; + break; + case '6': + audioFileName = '6.ogg'; + break; + case '7': + audioFileName = '7.ogg'; + break; + case '8': + audioFileName = '8.ogg'; + break; + case '9': + audioFileName = '9.ogg'; + break; + case '0': + audioFileName = '0.ogg'; + break; + case '*': + audioFileName = '10.ogg'; + break; + case '#': + audioFileName = '11.ogg'; + break; + default: + HiLog.e(TAG, "keytone src is error"); + } + HiLog.i(TAG, 'mAudioPath ' + this.mAudioPath); + if (this.mAudioPath == '') { + fileIO.open(this.BASE_PATH + audioFileName).then((fdNumber) => { + let fdPath = this.HOST + '' + fdNumber; + HiLog.i(TAG, 'first ' + fdPath); + this.audioPlayer.src = fdPath; + }).catch(error => { + HiLog.e(TAG, 'open fd error:' + JSON.stringify(error)); + }); + } else if (this.mAudioPath == audioFileName) { + this.audioPlayer.seek(0); + this.audioPlayer.play(); + } else { + this.audioPlayer.reset(); + fileIO.open(this.BASE_PATH + audioFileName).then((fdNumber) => { + let fdPath = this.HOST + '' + fdNumber; + HiLog.i(TAG, 'open fd sucess fd is ' + fdPath); + this.audioPlayer.src = fdPath; + }).catch(error => { + HiLog.e(TAG, 'open fd error:' + JSON.stringify(error)); + }); + } + this.mAudioPath = audioFileName; + } + /* + * 跳转新建联系人 + */ + jumpToAccountants() { + router.push({ + uri: "pages/contacts/accountants/Accountants", + params: { + //true编辑 false新建 + updataShow: false, + phoneNumbers: [{phoneNumber: this.tele_number}] + }, + }) + } + + + /** + * 发送消息 + * + */ + sendMessage() { + HiLog.i(TAG, 'sendMessage'); + let params = []; + params.push({ + telephone: this.tele_number, + telephoneFormat: this.tele_number + }); + this.jumpToMms(params); + } + + /** + * 跳转短信app + * + * @param {string} params 跳转参数 + */ + jumpToMms(params) { + let actionData: LooseObject = {}; + actionData.contactObjects = JSON.stringify(params); + actionData.pageFlag = 'conversation'; + let str = { + 'want': { + 'bundleName': Constants.string.MMS_BUNDLE_NAME, + 'abilityName': Constants.string.MMS_ABILITY_NAME, + 'parameters': actionData, + 'entities': [ + Constants.string.MMS_ENTITIES, + ] + }, + }; + featureAbility.startAbility(str).then((data) => { + HiLog.i(TAG, 'jumpToMms,success: '); + }).catch((error) => { + HiLog.e(TAG, 'jumpToMms,failed: '); + }) + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/presenter/navigation/NavigationPresenter.ets b/entry/src/main/ets/MainAbility/presenter/navigation/NavigationPresenter.ets new file mode 100644 index 0000000..d5c5883 --- /dev/null +++ b/entry/src/main/ets/MainAbility/presenter/navigation/NavigationPresenter.ets @@ -0,0 +1,61 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +const TAG = 'NavigationPresenter '; + +/** + * 进入联系人底部导航栏 + */ +export default { + getTabSrc(tabIndex: number, index: number): Resource{ + let imgSrc = $r('app.media.phone') + if (index === 0) { + if (tabIndex === index) { + imgSrc = $r('app.media.ic_public_phone_filled') + } else { + imgSrc = $r("app.media.ic_phonecall_m") + } + } else if (index === 1) { + if (tabIndex === index) { + imgSrc = $r("app.media.ic_public_contacts_group_filled") + } else { + imgSrc = $r("app.media.ic_contacts_m") + } + } else { + if (tabIndex === index) { + imgSrc = $r('app.media.ic_contacts_favorite_filled_m') + } else { + imgSrc = $r("app.media.ic_contacts_favorite_m") + } + } + return imgSrc + }, + + getTabText(tabIndex: number, index: number): Resource { + let text = $r('app.string.dialer') + if (index === 1) { + text = $r('app.string.contact') + } + return text + }, + + getTabTextColor(tabIndex: number, index: number): string{ + let color = '#66182431' + if (tabIndex === index) { + color = '#00CB87' + } + return color + } +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/util/AppStorageUtil.ets b/entry/src/main/ets/MainAbility/util/AppStorageUtil.ets new file mode 100644 index 0000000..70f6494 --- /dev/null +++ b/entry/src/main/ets/MainAbility/util/AppStorageUtil.ets @@ -0,0 +1,149 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import deviceInfo from '@ohos.deviceInfo'; + +/** + * 保存全局的数据工具 + */ +export default class AppStorageUtil { + constructor() { + this.initData(); + } + + initData() { + } + + /** + * 是否从全屏界面回来 + * + * @param isFromFullScreen + */ + static setPreferences(preferences) { + AppStorage.SetOrCreate('preferences', preferences); + } + + /** + * 是否从全屏界面回来 + * + * @return isFromFullScreen + */ + static getPreferences() { + let preferences = AppStorage.Get('preferences'); + return preferences; + } + + static setCallLogTotalData(callLogTotalData: {}) { + AppStorage.SetOrCreate("callLogTotalData", callLogTotalData); + } + + static getCallLogTotalData() { + let callLogTotalData: {} = AppStorage.Get('callLogTotalData'); + return callLogTotalData; + } + + /** + * 查询设备的类型 + * + * @param deviceType 设备的类型 + * + * default:智能手机 + * tablet:平板 + * tv:智慧屏 + * wearable:智能穿戴 + * liteWearable:轻量级智能穿戴 + * smartVision:智慧视觉设备 + * + */ + + static setDeviceType(deviceType) { + AppStorage.SetOrCreate('deviceType', deviceType); + } + + /** + * 获取查询到的设备的类型 + * + * @return deviceType 设备的类型 + */ + static getDeviceType() { + let deviceType: string = AppStorage.Get('deviceType'); + return deviceType; + } + + /** + * 保存状态到AppStorage,和组件建立双向数据绑定 + * + * @param propName 键 + * @param defaultValue 值 + */ + static setAndLink(propName, defaultValue) { + AppStorage.SetAndLink(propName, defaultValue); + } + + /** + * 保存状态到AppStorage,和组件建立双向数据绑定 + * + * @param propName 键 + * @param defaultValue 值 + */ + static SetOrCreate(propName, defaultValue) { + AppStorage.SetOrCreate(propName, defaultValue); + } + + /** + * 标识为呼叫前编辑 + * + * @param hasInfoMsg 标识为呼叫前编辑 + */ + static setIsEditNumber(isEditNumber) { + AppStorage.SetOrCreate('isEditNumber', isEditNumber); + } + + /** + * 标识为呼叫前编辑 + * + * @return isEditNumber 标识为呼叫前编辑 + */ + static isEditNumber() { + let isEditNumber: boolean = AppStorage.Get('isEditNumber'); + return isEditNumber; + } + + /** + * 赋值电话号码 + * + * @param hasInfoMsg 赋值电话号码 + */ + static setNumTextDialer(numTextDialer) { + AppStorage.SetOrCreate('numTextDialer', numTextDialer); + } + + /** + * 获取呼叫前电话号码 + * + * @return isEditNumber 电话号码 + */ + static getNumTextDialer() { + let numTextDialer: number = AppStorage.Get('numTextDialer'); + return numTextDialer; + } + + static initData() { + let deviceTypeInfo = deviceInfo.deviceType; + AppStorageUtil.setDeviceType(deviceTypeInfo); + AppStorageUtil.setIsEditNumber(false); + AppStorageUtil.setNumTextDialer(''); + + } +} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/index/index.css b/entry/src/main/ets/MainAbility/util/ArrayUtil.ets similarity index 76% rename from entry/src/main/js/default/pages/index/index.css rename to entry/src/main/ets/MainAbility/util/ArrayUtil.ets index 11e637a..d1d67c8 100644 --- a/entry/src/main/js/default/pages/index/index.css +++ b/entry/src/main/ets/MainAbility/util/ArrayUtil.ets @@ -1,5 +1,5 @@ /** - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -12,10 +12,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -.container { - width: 100%; - height: 100%; - flex-direction: column; - justify-content: flex-end; - align-items: center; +export default { + isEmpty: function (list: any[]) { + return list == undefined || list == null || list.length == 0; + } } \ No newline at end of file diff --git a/entry/src/main/js/default/utils/ContactsLog.js b/entry/src/main/ets/MainAbility/util/ContactsLog.ets similarity index 79% rename from entry/src/main/js/default/utils/ContactsLog.js rename to entry/src/main/ets/MainAbility/util/ContactsLog.ets index dc4ee4a..f0587cd 100644 --- a/entry/src/main/js/default/utils/ContactsLog.js +++ b/entry/src/main/ets/MainAbility/util/ContactsLog.ets @@ -1,19 +1,21 @@ /** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, + * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ -const APP_TAG = 'Contacts JS: timestamp: '; - +const APP_TAG = 'Contacts ETS: timestamp: '; +/** + * log package tool class + */ export default { data: { pageTag: ' msg: ' diff --git a/entry/src/main/ets/MainAbility/util/DialUtil.ets b/entry/src/main/ets/MainAbility/util/DialUtil.ets new file mode 100644 index 0000000..d4d4d78 --- /dev/null +++ b/entry/src/main/ets/MainAbility/util/DialUtil.ets @@ -0,0 +1,73 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import Utils from './Utils'; +import HiLog from './HiLog'; +import call from '@ohos.telephony.call'; + +const TAG = 'DialUtil '; + +export default class DialUtil { + private static sInstance: DialUtil; + + public static getInstance(): DialUtil { + HiLog.i(TAG, 'getInstance start !'); + if (DialUtil.sInstance == null) { + HiLog.i(TAG, 'getInstance init '); + DialUtil.sInstance = new DialUtil(); + } + return DialUtil.sInstance; + } + + /** + * dial拨号 + * + * @param phoneNum 电话号码 + * @param callback 拨号回调 data:是否是紧急号码 err:拨号失败 value:拨号结果 + */ + dial(phoneNum: string, callback) { + HiLog.i(TAG, 'dial phonenum is %s', phoneNum); + if (Utils.isEmpty(phoneNum)) { + return; + } + let num: string = Utils.removeSpace(phoneNum); + + call.isEmergencyPhoneNumber(num, (err, data) => { + if (err) { + HiLog.e(TAG, 'isEmergencyPhoneNumber err %s', err.message); + return; + } + if (data) { + call.dial(num, { dialScene: 2 }, (err, value) => { + callback(data, err, value); + if (err) { + HiLog.e(TAG, 'dialEmergencyPhoneNumber finish err %s', err.message); + return; + } + HiLog.i(TAG, 'dialEmergencyPhoneNumber finish %s', value); + }); + } else { + call.dial(num, (err, value) => { + callback(data, err, value); + if (err) { + HiLog.e(TAG, 'dial finish err %s', err.message); + return; + } + HiLog.i(TAG, 'dial finish %s', value); + }); + } + }); + } +} + diff --git a/entry/src/main/ets/MainAbility/util/HiLog.ets b/entry/src/main/ets/MainAbility/util/HiLog.ets new file mode 100644 index 0000000..e13abac --- /dev/null +++ b/entry/src/main/ets/MainAbility/util/HiLog.ets @@ -0,0 +1,59 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Log Util + * + * standard : + * 1. define TAG, recommend class name。 + * 2. switch IS_DEBUG_ON as true, when debugging. + * 3. msg should be short and valuable. + * 4. choose appropriate function. + * 5. the function execute many times can not print. + * 6. uniqueness. + */ +export default class HiLog { + private static readonly IS_DEBUG_ON: boolean = false; + private static readonly CONTACTS_DOMAIN: string = "00900"; + private static readonly SLASH: string = "/"; + private static readonly COLON: string = ": "; + constructor() { + } + + private static prefix(tag: string) { + return this.CONTACTS_DOMAIN + this.SLASH + tag + this.COLON; + } + + static d(tag: string, msg: string, ...args: any[]) { + if (this.IS_DEBUG_ON) { + console.info(this.prefix(tag) + msg, args); + } else { + console.debug(this.prefix(tag) + msg, args); + } + } + + static i(tag: string, msg: string, ...args: any[]) { + console.info(this.prefix(tag) + msg, args); + } + + static w(tag: string, msg: string, ...args: any[]) { + console.warn(this.prefix(tag) + msg, args); + } + + static e(tag: string, msg: string, ...args: any[]) { + console.error(this.prefix(tag) + msg, args); + } +} + diff --git a/entry/src/main/ets/MainAbility/util/Pasteboard.ets b/entry/src/main/ets/MainAbility/util/Pasteboard.ets new file mode 100644 index 0000000..512c374 --- /dev/null +++ b/entry/src/main/ets/MainAbility/util/Pasteboard.ets @@ -0,0 +1,39 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import pasteboard from '@ohos.pasteboard'; +import HiLog from './HiLog'; + +const TAG = 'pasteBoard'; + +let commonPasteboard = { + /** + * 返回类型:promise + * 返回对象:{'records':[{'mimeType':'text/plain','text':'www.baidu.com'}],'dataProperty':{'mimeTypes':['text/plain'],'expiration':0,'tag':''}} + */ + getPasteboard() { + let sysPasteboard = pasteboard.getSystemPasteboard(); + return sysPasteboard.getPasteData(); + }, + setPasteboard(text) { + let sysPasteboard = pasteboard.getSystemPasteboard(); + let textData = pasteboard.createPlainTextData(text); + sysPasteboard.setPasteData(textData, () => { + HiLog.i(TAG, 'setPasteboard pasteboard setPasteData done'); + }); + } +}; + +export {commonPasteboard}; \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/util/PreferencesUtil.ets b/entry/src/main/ets/MainAbility/util/PreferencesUtil.ets new file mode 100644 index 0000000..a53af3f --- /dev/null +++ b/entry/src/main/ets/MainAbility/util/PreferencesUtil.ets @@ -0,0 +1,102 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import dataStorage from '@ohos.data.storage'; +import featureAbility from '@ohos.ability.featureAbility'; +import Constants from '../model/common/Constants'; +import HiLog from './HiLog'; +import AppStorageUtil from './AppStorageUtil'; + +const TAG = 'PreferencesUtil->'; + +/** + * 保存全局的数据工具 + */ +export default { + async initDataStorage() { + let context = featureAbility.getContext(); + let path = await context.getFilesDir(); + return dataStorage.getStorageSync(path + Constants.string.PATH_OF_PREFERENCES); + }, + + getPreferencesInstance() { + return AppStorageUtil.getPreferences(); + }, + + /** + * 获取值 + * + * @param {string} key value值 + */ + getValue(key) { + HiLog.i(TAG, 'getValue start: %s', key); + let prefIns = this.getPreferencesInstance(); + return prefIns.getSync(key, Constants.string.EMPTY_STR); + }, + + /** + * 给设置值 + * + * @param keyOfSwitch key + * @param valueOfSwitch value + */ + setValueForSwitch(keyOfSwitch, valueOfSwitch) { + HiLog.i(TAG, 'setValueForSwitch start:' + keyOfSwitch + 'valueOfSwitch:' + valueOfSwitch); + let prefIns = this.getPreferencesInstance(); + prefIns.putSync(keyOfSwitch, valueOfSwitch); + prefIns.flushSync(); + }, + + /** + * 是否是简洁布局 + */ + getConciseLayout() { + let prefIns = this.getPreferencesInstance(); + return prefIns.getSync(Constants.string.CONCISE_LAYOUT_SWITCH, Constants.bool.TRUE); + }, + + /** + * 查询联系人类型 + */ + getAccountRadio() { + let prefIns = this.getPreferencesInstance(); + return prefIns.getSync(Constants.string.DISPLAY_ACCOUNT_RADIO, Constants.string.EMPTY_STR); + }, + + /** + * 自定义联系人视图 + */ + getCustomizeView() { + let prefIns = this.getPreferencesInstance(); + return prefIns.getSync(Constants.string.CUSTOMIZE_VIEW_INPUT, Constants.string.EMPTY_STR); + }, + + /** + * 联系人数量 + */ + getContactCount() { + let prefIns = this.getPreferencesInstance(); + return prefIns.getSync(Constants.string.CONTACTS_COUNT, Constants.int.ZERO); + }, + + /** + * 通话记录合并规则 + */ + getCalllogMergeRule(): string{ + let prefIns = this.getPreferencesInstance(); + HiLog.i(TAG, 'getCalllogMergeRule %s', prefIns); + return prefIns.getSync(Constants.string.CALL_LOG_MERGE_RULE, 'from_time'); + }, +} \ No newline at end of file diff --git a/entry/src/main/ets/MainAbility/util/StringUtil.ets b/entry/src/main/ets/MainAbility/util/StringUtil.ets new file mode 100644 index 0000000..30bd0ab --- /dev/null +++ b/entry/src/main/ets/MainAbility/util/StringUtil.ets @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +export default { + isEmpty: function (str: string) { + return str == undefined || str == null || str == ''; + }, + removeSpace: function (str: string) { + if (this.isEmpty(str)) { + return ''; + } + return str.replace(/[\s]/g, ''); + } +} \ No newline at end of file diff --git a/entry/src/main/js/default/utils/Utils.js b/entry/src/main/ets/MainAbility/util/Utils.ets similarity index 51% rename from entry/src/main/js/default/utils/Utils.js rename to entry/src/main/ets/MainAbility/util/Utils.ets index bfabd35..a726d8a 100644 --- a/entry/src/main/js/default/utils/Utils.js +++ b/entry/src/main/ets/MainAbility/util/Utils.ets @@ -1,23 +1,26 @@ /** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, + * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ +import ArrayUtil from './ArrayUtil'; +import StringUtil from './StringUtil'; + export default { isEmpty: function (string) { - return string == undefined || string == null || string == ''; + return StringUtil.isEmpty(string); }, isEmptyList: function (list) { - return list == undefined || list == null || list.length == 0; + return ArrayUtil.isEmpty(list); }, isEmptyObject: function (object) { return object == undefined || object == null || object == {}; @@ -25,47 +28,47 @@ export default { copy(obj) { return JSON.parse(JSON.stringify(obj)); }, - + /* 拨号盘粘贴字符串规则校验:除了白名单字符:[^0123456789+;,\-#\*] 外,存在任何字符,则不可在拨号盘粘贴 */ checkDialerNumberString(numText) { if (this.isEmpty(numText)) { return false; } - var regExp = /[^0123456789\+\s;,\-#\*]/; - return!regExp.test(numText); + let regExp = /[^0123456789\+\s;,\-#\*]/; //匹配非白名单字符,如果匹配到,反回false,匹配不到返回true + return !regExp.test(numText); }, - + /* 获取原数据经过过滤后的合法电话号码字符 */ getNumberString(numText) { if (this.isEmpty(numText)) { return ''; } - return numText.replace(/[^0123456789\+;,#\*]/g, ''); + return numText.replace(/[^0123456789\+;,#\*]/g, ''); //此处空格和-也需要被过滤 }, - + /* 去除字符串中的空格 */ removeSpace(textContent) { if (this.isEmpty(textContent)) { return ''; } return textContent.replace(/[\s]/g, ''); }, - + /* 获取原字符串中与指定子串匹配的结果字符串,只返回第一次匹配成功的结果(匹配规则忽略空格) */ getMatchedString(textValue, regString) { if (this.isEmpty(textValue) || this.isEmpty(regString)) { return ''; } - regString = this.removeSpace(regString); - var matchedTemp = ''; - var k = 0; - for (var i = 0; i < textValue.length; i++) { + regString = this.removeSpace(regString);//去除子串中所有空格 + let matchedTemp = ''; + let k = 0; //空格数量 + for (let i = 0; i < textValue.length; i++) { if (textValue.charAt(i) == regString.charAt(0)) { - for (var j = 0; j < regString.length; j++) { - if (textValue.charAt(i + k + j) == regString.charAt(j) || textValue.charAt(i + k + j) == ' ') { - matchedTemp = matchedTemp + textValue.charAt(i + k + j); - if (textValue.charAt(i + k + j) == ' ') { - k++; - j--; + for (let j = 0; j < regString.length; j++) { + if (textValue.charAt(i+k+j) == regString.charAt(j) || textValue.charAt(i+k+j) == ' ') { + matchedTemp = matchedTemp + textValue.charAt(i+k+j); + if (textValue.charAt(i+k+j) == ' ') { + k++; //空格计数加1; + j--; //如果是主串空格,则子串不计入 } } else { - k = 0; + k = 0; //空格数量清空 matchedTemp = ''; break; } diff --git a/entry/src/main/js/ServiceAbility/missedCallsService.js b/entry/src/main/js/ServiceAbility/missedCallsService.js deleted file mode 100644 index 7886014..0000000 --- a/entry/src/main/js/ServiceAbility/missedCallsService.js +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file: call manager service - */ -import commonEvent from '@ohos.commonEvent'; -import wantAgent from '@ohos.wantAgent'; -import notify from '@ohos.notification'; -let Subscriber; -let id = 1; -const events = ['usual.event.INCOMING_CALL_MISSED']; - - -class MissedCallsService { - constructor() { - } - - async addSubscriber() { - Subscriber = await new Promise((resolve, reject) => { - commonEvent.createSubscriber({ events }, - (err, data) => { - resolve(data); - } - ); - }); - - commonEvent.subscribe(Subscriber, (err, data) => { - this.sendNotification(data.data); - }); - } - - async sendNotification(text) { - const notificationRequest = { - content: { - contentType: notify.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, - normal: { - title: 'voice call', - text: '', - }, - }, - id: id, - slotType: notify.SlotType.OTHER_TYPES, - deliveryTime: new Date().getTime() - }; - const res = await wantAgent.getWantAgent({ - wants: [{ - bundleName: 'com.ohos.contacts', - abilityName: 'com.ohos.contacts.MainAbility', - uri: 'page_flag_missed_calls', - }], - operationType: wantAgent.OperationType.START_ABILITY, - requestCode: 0, - }); - Object.assign(notificationRequest, { wantAgent: res }); - notificationRequest.content.normal.title = text; - notificationRequest.content.normal.text = this.$t('value.callRecords.missedCalls'); - id++; - notify.publish(notificationRequest); - } -} - -let service = new MissedCallsService(); - -export default service; \ No newline at end of file diff --git a/entry/src/main/js/ServiceAbility/service.js b/entry/src/main/js/ServiceAbility/service.js deleted file mode 100644 index 05e26e1..0000000 --- a/entry/src/main/js/ServiceAbility/service.js +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file: call manager missedCallsService - */ -import MissedCallsService from './missedCallsService.js'; - -export default { - - /** - * onStart - */ - onStart() { - console.log('logMessage service onStart contacts'); - MissedCallsService.addSubscriber(); - }, - - /** - * onDestroy - */ - onDestroy() { - console.log('logMessage service onDestroy contacts'); - }, -}; \ No newline at end of file diff --git a/entry/src/main/js/default/app.js b/entry/src/main/js/default/app.js deleted file mode 100644 index d6dd56c..0000000 --- a/entry/src/main/js/default/app.js +++ /dev/null @@ -1,181 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import dataStorage from '@ohos.data.storage'; -import call from '@ohos.telephony.call'; -import file from '@system.file'; -import featureAbility from '@ohos.ability.featureAbility'; -import LOG from '../default/utils/ContactsLog.js'; -var TAG = 'app'; - -export default { - featureAbility: featureAbility, - onCreate() { - LOG.info(TAG + 'AceApplication onCreate'); - this.initDataStorage(); - }, - onDestroy() { - }, - async initDataStorage() { - let context = featureAbility.getContext(); - let path = await context.getFilesDir(); - this.globalData.storage = dataStorage.getStorageSync(path + this.globalData.path); - }, - globalData: { - file: file, - path: '/PREFERENCES_FOR_CONTACTS', - storage: '', - addAccount: false, - editContacts: false, - refreshContacts: false, - refreshFavorites: false, - navigationType: -1, - menuType: '', - showClipBoardInit: true, - isSearchList: false, - callLogTotalData: { - callLogList: [], - missedList: [], - totalCount: 0, - missedCount: 0, - }, - voicemailTotalData: { - voicemailList: [], - voicemailCount: 0 - }, - contactsAnimation: { - title: '', - backBut: 'hidden-init', - setting: '', - contactTitle: '', - search: '', - isHidden: false, - isSearch: false - }, - voicemailNumber: '', - refreshFunctions: [], - navigationBackPressFunctions: [], - batchSelectContactsRefreshFunction: [], - isDisplay: true, - searchValue: '', - contactCount: 0, - pushToGroup: false, - groupParams: null, - dialogShow: false - }, - dialerStateData: { - isEditNumber: false, - isGoToMissedCalls: false, - numTextDialer: '', - showDialer: true, - copyDisabled: true, - isCallState: false, - isNeedShowDialer: true, - isNeedHideDialer: false, - }, - groups: { - group: [] - }, - dialer: {}, - - setAddAccount(addAccount) { - this.globalData.addAccount = addAccount; - }, - clearAddAccount() { - this.globalData.addAccount = false; - }, - setRefreshContacts(refreshContacts) { - this.globalData.refreshContacts = refreshContacts; - }, - setRefreshFavorite() { - this.globalData.refreshFavorites = true; - }, - clearRefreshFavorite() { - this.globalData.refreshFavorites = false; - }, - clearRefreshContacts() { - this.globalData.refreshContacts = false; - }, - setEditContacts(editContacts) { - this.globalData.editContacts = editContacts; - }, - clearEditContacts() { - this.globalData.editContacts = false; - }, - setContactsAnimation(title, backBut, setting, contactTitle, search, isHidden) { - this.globalData.contactsAnimation.title = title; - this.globalData.contactsAnimation.backBut = backBut; - this.globalData.contactsAnimation.setting = setting; - this.globalData.contactsAnimation.contactTitle = contactTitle; - this.globalData.contactsAnimation.search = search; - this.globalData.contactsAnimation.isHidden = isHidden; - }, - setIsSearch(isSearch) { - this.globalData.contactsAnimation.isSearch = isSearch; - }, - setIsSearchList(isSearchList) { - this.globalData.isSearchList = isSearchList; - }, - getDAHelper: function (URL) { - var DAHelper = featureAbility.acquireDataAbilityHelper(URL); - return DAHelper; - }, - - /** - * Make a phone call - * - * @param {number} phoneNumber - */ - call(phoneNumber) { - if (phoneNumber == null || phoneNumber == '') { - LOG.info(TAG + 'call param is null'); - return; - } - LOG.info(TAG + 'callPhone executed phone number = ' + phoneNumber); - if (phoneNumber.length) { - call.dial(phoneNumber).then((value) => { - this.pageState = false; - LOG.info(TAG + `call dial success : value = ${value}`); - }).catch((err) => { - LOG.info(TAG + 'call dial error, ' + err.message); - }); - } - }, - - sendMessage(params) { - let actionData = {}; - actionData.contactObjects = JSON.stringify(params); - actionData.pageFlag = 'conversation'; - this.jumpToContract(actionData); - }, - - jumpToContract(actionData) { - var str = { - 'want': { - 'bundleName': 'com.ohos.mms', - 'abilityName': 'com.ohos.mms.MainAbility', - 'parameters': actionData, - 'entities': [ - 'entity.system.home' - ] - }, - }; - featureAbility.startAbility(str) - .then((data) => { - LOG.info(TAG + 'jumpToContract Operation successful. Data: ' + JSON.stringify(data)); - }).catch((error) => { - LOG.error(TAG + 'jumpToContract Operation failed. Cause: ' + JSON.stringify(error)); - }); - } -}; diff --git a/entry/src/main/js/default/base/base_color.scss b/entry/src/main/js/default/base/base_color.scss deleted file mode 100644 index 49417a3..0000000 --- a/entry/src/main/js/default/base/base_color.scss +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -$backgroundColorOnClick: gainsboro; -$baseColorGreen: #41ba41; -$baseColorGreenClicked: #3aa73a; -$backgroundColorDialer: #f9f9f9; -$textColorTabBar:royalblue; -$textColorDefault:#e6000000; -$textColorDisabled:gray; \ No newline at end of file diff --git a/entry/src/main/js/default/base/base_style.css b/entry/src/main/js/default/base/base_style.css deleted file mode 100644 index 9bde946..0000000 --- a/entry/src/main/js/default/base/base_style.css +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -.title_font { - font-size: 50px; - font-weight: bold; -} \ No newline at end of file diff --git a/entry/src/main/js/default/common/component/contactlist/contactList.css b/entry/src/main/js/default/common/component/contactlist/contactList.css deleted file mode 100644 index b25ac0f..0000000 --- a/entry/src/main/js/default/common/component/contactlist/contactList.css +++ /dev/null @@ -1,415 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.list-div-group { - width: 100%; - flex-direction: column; - justify-content: center; - align-items: flex-start; -} - -.list-group { - width: 100%; - justify-content: center; - flex-direction: column; - align-items: flex-start; -} - -.list-item { - width: 100%; - flex-direction: column; - align-items: flex-start; - justify-content: flex-start; -} - -.list-item-body-group { - padding-top: 20px; - width: 100%; - align-items: center; - padding-bottom: 20px; - flex-direction: row; -} - -.list-item-body-group:active { - background-color: #d3d3d3; -} - -.list-item-head-group { - width: 100px; - height: 100px; - justify-content: center; - align-items: center; - border-radius: 50px; -} - -.list-item-head-name { - text-overflow: ellipsis; - text-align: center; - allow-scale: true; - font-size: 38px; - font-weight: 600; - color: #fff; -} - -.child-image-default { - border-radius: 50px; - object-fit: contain; - position: absolute; - width: 100%; - height: 100%; -} - -.todo-content-body-group { - width: 85px; - height: 85px; - align-items: center; - margin-left: 25px; - margin-right: 25px; - flex-direction: row; - flex-shrink: 0; -} - -.list-item-body-name { - text-align: left; - margin-bottom: 20px; - justify-content: flex-start; - align-items: flex-start; - font-size: 32px; - font-weight: 600; - max-lines: 1; - text-overflow: ellipsis; -} - -.list-item-body-name-search { - text-align: left; - margin-bottom: 20px; - justify-content: flex-start; - align-items: flex-start; - font-size: 32px; - font-weight: 600; - color: #007DFE; - max-lines: 1; - text-overflow: ellipsis; -} - -.list-item-name-search-group { - width: 100%; - height: 40px; - justify-content: flex-start; - align-items: flex-start; - flex-direction: row; -} - -.list-item-name-search-txt { - text-align: left; - font-size: 30px; - font-weight: 600; - justify-content: flex-start; - align-items: flex-start; - color: #007DFE; -} - -.list-item-body-name-group { - align-items: flex-start; - justify-content: flex-start; - height: 80px; - flex-direction: column; -} - -.list-item-body-phone-check-box-group { - flex-shrink: 1; - flex-direction: row; -} - -.list-item-body-phone-group { - flex-direction: row; - background-color: #ff0000; - flex-shrink: 1; -} - -.list-item-phone-group { - width: 100%; - height: 40px; - flex-direction: row; - align-items: center; -} - -.list-child-phone-group { - align-items: center; - flex-direction: column; - justify-content: center; -} - -.list-child-phone-group:active { - background-color: lightgray; -} - -.list-child-phone-item { - padding-left: 135px; - width: 100%; - flex-direction: column; -} - -.list-child-phone-item1 { - padding-left: 50px; - width: 100%; - flex-direction: column; -} - -.list-child-phone-item:active { - background-color: lightgray; -} - -.list-child-phone-line-group { - margin-right: 60px; - width: 100%; -} - -.line-group { - width: 100%; - margin-right: 60px; - justify-content: flex-end; - align-items: flex-end; -} - -.list-group-line { - stroke-width: 1px; - line-cap: round; - color: #ccc; - width: 520px; - justify-content: flex-end; - align-items: flex-end; -} - -.list-group-line1 { - stroke-width: 1px; - line-cap: round; - color: #ccc; - width: 100%; - margin-left: 50px; - justify-content: flex-end; - align-items: flex-end; -} - -.list-child-phone-line { - stroke-width: 1px; - line-cap: round; - color: #ccc; -} - -.list-child-phone-number-group { - flex-direction: row; - align-items: center; - height: 100px; - width: 100%; -} - -.list-item-phone { - text-align: left; - font-size: 24px; - color: #636363; -} - -.list-item-phone-label { - text-align: left; - font-size: 24px; - position: absolute; - max-lines: 2; - text-overflow: ellipsis; - color: #636363; -} - -.list-item-phone { - text-align: left; - max-lines: 2; - background-color: transparent; - text-overflow: ellipsis; - color: #636363; - font-size: 28px; -} - -.list-item-phone-search { - text-align: left; - max-lines: 2; - background-color: transparent; - text-overflow: ellipsis; - color: #007DFE; - font-size: 28px; -} - -.list-item-phone-absolute { - text-align: left; - position: absolute; - font-size: 24px; - max-lines: 2; - match-text-direction: false; - text-overflow: ellipsis; - color: #636363; -} - -.list-item-name-div { - align-items: center; - flex-direction: row; -} - -.list-item-phone-div { - flex-direction: row; - align-items: center; -} - -.list-item-phone-number { - text-align: left; - max-lines: 2; - background-color: transparent; - text-overflow: ellipsis; - color: #636363; - font-size: 28px; -} - -.search-result-list { - width: 100%; - flex-direction: column; -} - -.list-search-phone-num { - padding-left: 30px; - margin-bottom: 30px; - padding-right: 30px; - text-align: left; - font-size: 24px; - align-items: center; - color: #a9a9a9; -} - -.list-search-group { - width: 100%; - justify-content: center; - flex-direction: column; - align-items: center; -} - -.input-type-group { - width: 120px; - height: 120px; - margin-right: 50px; - align-items: center; -} - -.input-type-group1 { - width: 100px; - height: 100px; - margin-left: 20px; - align-items: center; -} - -.input-type { - width: 80px; - height: 80px; - margin-left: 18px; -} - -.input-number-type { - margin-right: 65px; - height: 80px; - width: 80px; - align-items: center; - justify-content: center; - position: absolute; -} - -.input-number-type1 { - margin-right: 50px; - height: 80px; - width: 80px; - align-items: center; - justify-content: center; - position: absolute; -} - -.list-item-body-content { - align-items: center; - flex-shrink: 1; - flex-direction: row; -} - -.list-item-body-name-phone { - flex-direction: column; - width: 430px; -} - -.list-item-body-name-phone1 { - flex-direction: column; - width: 520px; - margin-left: 50px; -} - -.todo-content-name-last { - width: 90%; - height: 65%; - text-align: center; - font-size: 38px; - allow-scale: true; - font-weight: 600; - color: #fff; -} - -.todo-item-content-div { - width: 100%; - height: 100%; - align-items: center; - justify-content: center; -} - -.todo-name-suffix-div { - flex-direction: column; - align-items: center; - justify-content: center; - width: 80px; - height: 80px; - border-radius: 40px; -} - -.todo-item-content-image { - width: 80px; - height: 80px; -} - -.todo-content-div-div { - flex-direction: column; - justify-content: center; - align-items: flex-start; - margin-start: 32px; - width: 88%; -} - -.todo-content-name { - width: 100%; - text-align: left; - font-size: 32px; - font-weight: 600; - max-lines: 1; - text-overflow: ellipsis; -} - -.todo-content { - margin-top: 9px; - width: 100%; - text-align: left; - max-lines: 1; - text-overflow: ellipsis; - color: #636363; - font-size: 28px; -} - - diff --git a/entry/src/main/js/default/common/component/contactlist/contactList.hml b/entry/src/main/js/default/common/component/contactlist/contactList.hml deleted file mode 100644 index 0088524..0000000 --- a/entry/src/main/js/default/common/component/contactlist/contactList.hml +++ /dev/null @@ -1,170 +0,0 @@ - -

\ No newline at end of file diff --git a/entry/src/main/js/default/common/component/contactlist/contactList.js b/entry/src/main/js/default/common/component/contactlist/contactList.js deleted file mode 100644 index 809d3c1..0000000 --- a/entry/src/main/js/default/common/component/contactlist/contactList.js +++ /dev/null @@ -1,77 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -export default { - props: ['contactList', 'searchContactList', 'searchLayoutShow', 'searchPhoneNum', 'phoneCheckShow', - 'showDefaultNumber', 'childPhoneCheckShow', 'showNumberList', 'selectType'], - data: { - layoutState: true, - }, - onInit() { - this.conciseLayoutInit(); - }, - - deleteCheckedCalls() { - this.$element('deleteCheckDialog').show(); - }, - - doDelete() { - this.$emit('sureProcess', {}); - this.$element('deleteCheckDialog').close(); - }, - - conciseLayoutInit: function () { - let data = this.$app.$def.globalData.storage.getSync('contacts_settings_concise_layout_switch', 'false'); - this.layoutState = data === 'true' ? false : true; - }, - - cancelDialog() { - this.$element('deleteCheckDialog').close(); - }, - listItemTouchStartSearch(index, indexChild) { - this.listItemTouchStart(index, indexChild); - }, - listItemTouchStart(index, indexChild) { - if (this.selectType === 'batchSelect') { // Select contacts in batches - this.$emit('checkChange', { - contactIndex: index, - numberIndex: indexChild, - checked: this.searchLayoutShow ? !this.searchContactList[index].phoneNumbers[indexChild].checked - : !this.contactList[index].phoneNumbers[indexChild].checked - }); - } else { // The speed dial screen is displayed - this.$emit('eventType', { - index: index, - indexChild: indexChild - }); - } - }, - - editContacts(index) { - this.$emit('contactsSelected', { - contacts: this.contactList[index] - }); - }, - requestItem() { - // Data cache refresh - this.$emit('requestItem', {}); - }, - changeCheckState: function (contactIndex, numberIndex, event) { - this.$emit('checkChange', { - contactIndex: contactIndex, - numberIndex: numberIndex, - checked: event.checked - }); - } -}; \ No newline at end of file diff --git a/entry/src/main/js/default/common/component/dialog/dialog.css b/entry/src/main/js/default/common/component/dialog/dialog.css deleted file mode 100644 index 5a9263a..0000000 --- a/entry/src/main/js/default/common/component/dialog/dialog.css +++ /dev/null @@ -1,61 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.dialog-main { - width: 92%; - height: 15%; -} - -.dialog-div { - flex-direction: column; - align-items: center; - justify-content: flex-end; -} - -.inner-txt { - height: 40%; - width: 100%; - flex-direction: column; - align-items: center; - justify-content: space-around; -} - -.txt { - font-size: 30px; -} - -.inner-btn { - width: 100%; - height: 50%; - justify-content: space-around; - align-items: center; -} - -.btn-txt { - width: 40%; - height: 70%; - border-radius: 30px; - background-color: transparent; - text-color: #175cfe; - font-size: 30px; -} - -.btn-txt-delete { - width: 40%; - height: 70%; - border-radius: 30px; - background-color: transparent; - text-color: #ff0000; - font-size: 30px; -} \ No newline at end of file diff --git a/entry/src/main/js/default/common/component/dialog/dialog.hml b/entry/src/main/js/default/common/component/dialog/dialog.hml deleted file mode 100644 index 363dbe3..0000000 --- a/entry/src/main/js/default/common/component/dialog/dialog.hml +++ /dev/null @@ -1,26 +0,0 @@ - - -
-
- {{ deleteMessage }} -
-
- - -
-
-
\ No newline at end of file diff --git a/entry/src/main/js/default/common/component/dialog/dialog.js b/entry/src/main/js/default/common/component/dialog/dialog.js deleted file mode 100644 index 7bbbb1f..0000000 --- a/entry/src/main/js/default/common/component/dialog/dialog.js +++ /dev/null @@ -1,34 +0,0 @@ -/** - * @file dialog - */ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -export default { - props: ['deleteMessage'], - data: {}, - - deleteCheckedCalls() { - this.$element('deleteCheckDialog').show(); - }, - - doDelete() { - this.$emit('sureProcess', {}); - this.$element('deleteCheckDialog').close(); - }, - - cancelDialog() { - this.$element('deleteCheckDialog').close(); - }, -}; \ No newline at end of file diff --git a/entry/src/main/js/default/common/component/title/title.css b/entry/src/main/js/default/common/component/title/title.css deleted file mode 100644 index 363d711..0000000 --- a/entry/src/main/js/default/common/component/title/title.css +++ /dev/null @@ -1,61 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.page-title-box { - position: absolute; - width: 100%; - height: 17%; -} - -.page-title-box-small { - position: absolute; - width: 100%; - height: 9%; -} - -.page-title-text { - position: absolute; - bottom: 20px; - left: 40px; - font-size: 60px; - font-weight: 600; -} - -.page-title-text-small { - position: absolute; - bottom: 20px; - left: 40px; - font-size: 50px; - font-weight: 500; -} - -.page-title-more-image-box { - position: absolute; - top: 20px; - right: 20px; - justify-content: center; - align-items: center; - width: 90px; - height: 90px; - border-radius: 10px; -} - -.page-title-more-image-box:active { - background-color: #dcdcdc; -} - -.page-title-more-image { - width: 90px; - height: 90px; -} diff --git a/entry/src/main/js/default/common/component/title/title.hml b/entry/src/main/js/default/common/component/title/title.hml deleted file mode 100644 index e2b3054..0000000 --- a/entry/src/main/js/default/common/component/title/title.hml +++ /dev/null @@ -1,21 +0,0 @@ - -
-
- -
- {{ titleName }} - -
\ No newline at end of file diff --git a/entry/src/main/js/default/common/component/title/title.js b/entry/src/main/js/default/common/component/title/title.js deleted file mode 100644 index 6892c83..0000000 --- a/entry/src/main/js/default/common/component/title/title.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * @file title - */ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -export default { - props: ['titleName', 'titleType', 'showTitle'], - data: { - titleSmall: 'page-title-box-small', - titleBig: 'page-title-box', - titleTextBig: 'page-title-text', - titleTextSmall: 'page-title-text-small', - }, -}; \ No newline at end of file diff --git a/entry/src/main/js/default/common/constants/Constants.js b/entry/src/main/js/default/common/constants/Constants.js deleted file mode 100644 index 4a66adc..0000000 --- a/entry/src/main/js/default/common/constants/Constants.js +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -export default { - uri: { - CONTACT_DB_URI: 'dataability:///com.ohos.contactsdataability', // Uri for connecting to the contact database to obtain the contact database DAHelper - VOICEMAIL_DB_URI: 'dataability:///com.ohos.voicemailability', // Uri for connecting to the voice mailbox database to obtain the voice mailbox database DAHelper - CALLLOG_DB_URI: 'dataability:///com.ohos.calllogability', // Call record database URI, used to obtain the call record database DAHelper - CONTACTS_URI_PREFIX: 'dataability:///com.ohos.contactsdataability/contacts/', // Query the various table URI prefixes in the Contacts library - CALLS_URI_PREFIX: 'dataability:///com.ohos.calllogability/calls/', // SQL > alter TABLE URI prefixes - VOICEMAIL_URI_PREFIX: 'dataability:///com.ohos.voicemailability/calls/', // Example Query the URI prefixes of various tables in the Voicemail library - SEARCH_CONTACT_URI: 'dataability:///com.ohos.contactsdataability/contacts/search_contact', - ROW_CONTACTS_URI: 'dataability:///com.ohos.contactsdataability/contacts/raw_contact', // // Uri of the operation on the row_contacts table - CONTACT_DATA_URI: 'dataability:///com.ohos.contactsdataability/contacts/contact_data', // Uri of operation on contact_data table - CONTACT_URI: 'dataability:///com.ohos.contactsdataability/contacts/contact', - CONTACT_TYPE_URI: 'dataability:///com.ohos.contactsdataability/contacts/contact_type', - GROUPS_URI: 'dataability:///com.ohos.contactsdataability/contacts/groups', - CALL_LOG_URI: 'dataability:///com.ohos.calllogability/calls/calllog', // Uri of call record table operation - PROFILE_ROW_CONTACTS_URI: 'dataability:///com.ohos.contactsdataability/profile/raw_contact', // My business card raw_contact table operation URI - PROFILE_CONTACT_DATA_URI: 'dataability:///com.ohos.contactsdataability/profile/contact_data', // The URI of the contact_data table operation on my business card - VOICEMAIL_URI: 'dataability:///com.ohos.voicemailability/calls/voicemail' - }, - int: { - Success: 0, - Two: 2, - } -}; \ No newline at end of file diff --git a/entry/src/main/js/default/common/constants/color.js b/entry/src/main/js/default/common/constants/color.js deleted file mode 100644 index 3a35e27..0000000 --- a/entry/src/main/js/default/common/constants/color.js +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -export default { - Color: ['#FF53804D', '#FF406380', '#FF807240', '#FF664D80', '#FF8C465F', '#FF8C4F3F'], - - detailColor: ['#CCD9E4EE', '#CCE1DAED', '#CCD5E3D3', '#CCEBE0CC', '#CCF0DED8', '#CCEEDDE5'], -}; \ No newline at end of file diff --git a/entry/src/main/js/default/i18n/en-US.json b/entry/src/main/js/default/i18n/en-US.json deleted file mode 100644 index afe7258..0000000 --- a/entry/src/main/js/default/i18n/en-US.json +++ /dev/null @@ -1,584 +0,0 @@ -{ - "strings": { - "hello": "Hello", - "world": "World", - "calling": "calling", - "call_failed": "call failed" - }, - "svg": { - "common": { - "back": "/res/image/ic_back.svg", - "more": "/res/image/ic_more_24x24.svg" - }, - "phone": { - "unselected": "/res/image/ic_phonecall_m.svg", - "selected": "/res/image/ic_phonecall_filled_m.svg", - "ic_contacts_add": "/res/image/ic_contacts_add_m.svg", - "ic_contacts_add_2": "/res/image/ic_contacts_add_m2.svg", - "ic_contacts_name": "/res/image/ic_contacts_name_m.svg", - "ic_more": "/res/image/ic_more_24x24.svg", - "ic_more_three": "/res/image/ic_more_24x12.svg" - }, - "contacts": { - "group": "/res/image/ic_contacts_group.svg", - "unselected": "/res/image/ic_contacts_m.svg", - "selected": "/res/image/ic_contacts_filled_m.svg", - "detail": "/res/image/ic_public_about_m.svg", - "add": "/res/image/ic_contacts_add_m.svg", - "icmore": "/res/image/ic_more_24x24.svg", - "diageCardOne": "/res/image/ic_contacts_dial call_1_s.svg", - "diageCardTwo": "/res/image/ic_contacts_dial call_2_m.svg", - "diageEdit": "/res/image/ic_contacts_edit.svg", - "shrink": "/res/image/ic_contacts_arrow_up.svg", - "shrinkdown": "/res/image/ic_contacts_arrow_down.svg", - "shrinkdowncontactsdetail": "/res/image/ic_contacts_details_arrow_down.svg", - "businessCard": "/res/image/ic_contacts_m.svg", - "icEmptyContact": "/res/image/ic_contacts_name_m.svg", - "icContactsDetailQrCode": "/res/image/ic_contacts_detail_qrcode.svg" - }, - "favorites": { - "unselected": "/res/image/ic_contacts_favorite_m.svg", - "selected": "/res/image/ic_contacts_favorite_filled_m.svg", - "detailSelected": "/res/image/ic_contacts_favorite_filled_m_black.svg", - "detail": "/res/image/ic_public_about_m.svg", - "add": "/res/image/ic_contacts_favorite_add.svg", - "icmore": "/res/image/ic_more_24x24_favorite.svg", - "diageCardOne": "/res/image/ic_contacts_dial call_1_s.svg", - "diageCardTwo": "/res/image/ic_contacts_dial call_2_m.svg", - "diageEdit": "/res/image/ic_contacts_edit.svg" - }, - "accountants": { - "back": "/res/image/ic_back.svg", - "comfirm": "/res/image/ic_comfirm.svg", - "camera": "/res/image/ic_camera_filled.svg", - "name": "/res/image/ic_contacts_name_m.svg", - "company": "/res/image/ic_contacts_company_m.svg", - "phone": "/res/image/ic_phonecall_m.svg", - "email": "/res/image/ic_contacts_email_m.svg", - "message": "/res/image/ic_massage_m.svg", - "home": "/res/image/ic_contacts_edit address_m.svg", - "nickname": "/res/image/ic_contacts_edit nickname_m.svg", - "reset": "/res/image/ic_cancel_m.svg" - }, - "speedDial": { - "back": "/res/image/ic_back.svg", - "add": "/res/image/ic_speed_dial_add.svg", - "defaultHead": "/res/image/ic_avatar_default.svg", - "voice": "/res/image/ic_contacts_speeddial_voice_72.svg" - }, - "selectContact": { - "back": "/res/image/ic_back.svg", - "emptyImage": "/res/image/ic_speed_select_contact_empty.svg" - } - }, - "value": { - "phone": "phone", - "callRecords": { - "calls": "CALL LOG", - "clear": "CLEAR", - "allCalls": "All", - "missedCalls": "Missed", - "voiceMails": "Voicemail", - "serviceProvider": "Service provider", - "myProvider": "My network provider", - "noSettings": "Not set", - "voicemailNumber": "Voicemail number", - "simCard": "SIM", - "noMissedCalls": "No missed calls", - "noCallLogs": "Call log is empty", - "noVoiceMails": "No voicemails", - "delete": "DELETE", - "selectAll": "Select all", - "unSelectAll": "Deselect all", - "titleMessageNoSelect": "None selected", - "titleMessageSelect": "selected", - "titleMessageUnit": { - "one": "item", - "other": "items" - }, - "deleteMessageAsk": "Delete ", - "deleteMessageThis": "this ", - "deleteMessageUnit": " ", - "deleteMessageAll": "all ", - "deleteMessageCalls": { - "one": "call log entry?", - "other": "call log entries?" - }, - "sendMessage": "Send message", - "copyNumber": "Copy to clipboard", - "editBeforeCall": "Edit before call", - "addBlackList": "Block contact", - "deleteCall": "Delete entry", - "removeContactMark": "Erase History", - "remove": "ERASE", - "unKnowLocation": "Unknown", - "noneName": "(No name)", - "greeting": { - "title": "Greeting", - "default": "Default", - "new": "New Greeting", - "delete": "Delete", - "cancel": "CANCEL", - "startRecording": "RECORD", - "confirm": "OK", - "save": "SAVE" - } - }, - "contacts": { - "noInfo": "No other information is available for this contact", - "waitExport": "It will be exported later", - "batchSelectContacts": "Batch Selecting Contacts", - "samplePage": "The sample page", - "tab": "Contacts", - "page": { - "title": "Contacts", - "contactsLength": { - "one": " contact", - "other": " contacts" - }, - "search": "Search", - "group": "Groups", - "businessCard": "Business cards", - "myCard": "My card", - "loginAccount": "Login account", - "importContacts": "Import contacts", - "newContact": "New contact", - "scanCard": "Scan card", - "noPhoneContacts": "No contacts in Phone", - "noContacts": "No contacts", - "item": { - "noName": "(No name)" - }, - "searchContacts": { - "one": "FOUND num CONTACT", - "other": "FOUND num CONTACTS" - }, - "noSearchContacts": "No results", - "menu": { - "card": "Scan", - "settings": "Settings", - "item": { - "delete": "Delete ", - "share": "Share contact" - }, - "deleteInfo": { - "warningInfo": "Delete this contact?", - "warningInfoRecord": "Remove this dialer record?", - "deleteTxt": "DELETE", - "cancelTxt": "CANCEL" - }, - "shareInfo": { - "title": "Share", - "content": { - "qrCode": "QR code", - "vCard": "vCard", - "text": "Text" - }, - "cancelTxt": "CANCEL" - }, - "importInfo": { - "title": "Import contacts from", - "content": { - "storageImport": "Storage" - }, - "cancelTxt": "CANCEL" - } - }, - "free": { - "loginAccount": "SIGN IN TO AN ACCOUNT", - "importContacts": "IMPORT CONTACTS", - "newContact": "CREATE NEW CONTACT" - } - }, - "settingPage": { - "title": "Settings", - "account": "Accounts", - "manager": "MANAGE CONTACTS", - "displayContact": "Display preferences", - "organizeContacts": "Organize contacts", - "importExport": "Import/Export", - "about": "About" - }, - "displayPage": { - "title": "Display preferences", - "conciseLayout": "Simple view", - "layoutInstruction": "Hide profile pictures, company names, and more.", - "displayAccount": "ACCOUNTS", - "displayContacts": "All contacts", - "prefixSign": " (", - "displayContactsInstruction": "after auto-merge: ", - "suffixSign": ")", - "phoneContacts": "Phone (Will only be saved on the Phone. Enable Cloud to sync.)", - "all": "Total: ", - "customContacts": "Customize", - "customizePage": { - "title": "Define custom view", - "phone": "Phone", - "phoneInstruction": "Will only be saved on the Phone.", - "allContacts": "All contacts", - "unGrouped": "Ungrouped" - } - }, - "managePage": { - "title": "Organize contacts", - "mergeContacts": "Merge duplicate contacts", - "copyContacts": "Copy contacts", - "deleteContacts": "Delete multiple contacts", - "recentlyDeleted": "Recently deleted", - "recentlyDeletedInstruction": "Restore recently deleted contacts.", - "mergePage": { - "noSelect": "None selected", - "selectAll": "Select all", - "unSelectAll": "Deselect all", - "merge": "Merge", - "mergeInfo": "Merge contacts", - "percent": "100%", - "noMerge": "No duplicate contacts", - "titleMessageSelect": { - "one": " item selected", - "other": " items selected" - }, - "warningInfo": "Discard contacts merging?", - "cancelTxt": "CANCEL", - "discardTxt": "DISCARD" - - }, - "recentlyPage": { - "title": "Recently deleted", - "instruction": "Contacts will be permanently deleted after 30 days.", - "deleteSource": "Deleted from Contacts", - "surplus": " ", - "days": " days left", - "batchEmpty": "Clear", - "clearInfo": "All contacts on this list will be permanently cleared.", - "cancelButton": "CANCEL", - "clearButton": "CLEAR", - "batchDelete": "Delete", - "batchRecover": "Restore", - "noContacts": "No contacts", - "noSelect": "None selected", - "titleMessageSelect": { - "one": " item selected", - "other": " items selected" - }, - "selectAll": "Select all", - "unSelectAll": "Deselect all", - "deleteAllWarningInfo": "Permanently delete all contacts?", - "deleteOneWarningInfo": "Permanently delete this contact?", - "deleteOthersPrefix": "Permanently delete ", - "deleteOthersSuffix": " contacts?", - "recovering": "Restoring...", - "restored": "Restored ", - "numbers": { - "one": " contact", - "other": " contacts" - } - } - }, - "imorexportPage": { - "title": "Import/Export contacts", - "import": "IMPORT", - "bluetoothImport": "Import via Bluetooth", - "simImport": "Import from SIM", - "wlanConnected": "Import via WLAN Direct", - "wlanConnectedInstruction": " devices only.", - "storageDevice": "Import from storage", - "storageDeviceInstruction": "Import vCard from internal storage.", - "export": "EXPORT", - "exportStorage": "Export to storage", - "unimportStorage": "Import from storage failed", - "importContact": "Export contacts", - "StorageSource": "No vCard file found.", - "message": "ok", - "exportStorageInstruction": "Export to internal storage as vCard.", - "shareContacts": "Share contacts", - "warningInfo": "Import contacts from your SIM?", - "cancelTxt": "CANCEL", - "importTxt": "IMPORT", - "prompt": "Successfully imported num contacts.", - "choose": "Select the VCard file", - "selectAll": "select all", - "isExport": "Whether to export the contact list to internal storage /", - "safekeeping": "? After the export, keep your contact information safe" - }, - "aboutPage": { - "title": "About", - "contact": "Contacts", - "version": "Version ", - "license": "Open Source Licenses", - "copyright": " Contacts. All rights reserved.©2020" - }, - "groupsPage": { - "title": "Groups", - "smartGroups": "SMART GROUPS", - "company": "Companies", - "RecentContacts": "Recent contacts", - "mobilePhone": "GROUPS IN PHONE", - "delete": "Delete", - "new": "New", - "addGroup": "Create new group", - "oneWeekContacts": "Within 1 week", - "oneMonthContacts": "Within 1 month (excluding week 1)", - "threeMonthContacts": "Within 3 month (excluding month 1)", - "moreThreeMonthContacts": "Over 3 months ago", - "sendEmail": "Send email", - "sendMessage": "Send message", - "more": "More", - "noSelect": "None selected", - "alreadySelect": "num items selected", - "cancelBtnText": "CANCEL", - "deleteBtnText": "DELETE", - "deleteGroupText": "Contacts will not be deleted.", - "deleteGroupTip": "Contacts will not be deleted.", - "deleteThisGroup": "Delete this group?", - "deleteNumGroups": "Delete num groups?", - "deleteAllGroups": "Delete all groups?", - "people": "people", - "rename": "Rename", - "renameGroup": "Rename", - "addMember": "Add members", - "groupRing": "Group ringtone", - "deleteGroup": "Delete group", - "noContacts": "No people in this group", - "hasNumContactsFrom": "num PEOPLE FROM PHONE", - "selectAll": "Select all", - "cancelSelectAll": "Deselect all", - "alreadyExists": "A group with the same name already exists.", - "add": "Add", - "deleteFromGroup": "Remove from group", - "deleteMember": "Remove members", - "remove": "Remove", - "select": "Select", - "noMatchingResults": "No matching results", - "noMatchingMessageResults": "No results", - "noMatchingMailResults": "No matching contacts with email addresses", - "matchingResultNumber": "FOUND num CONTACTS", - "noGroups": "No groups", - "noContactsWithPhoneNum": "No contacts with phone numbers", - "noContactsWithEmail": "No contacts with email addresses", - "deleteOneContact":"Delete this contact?", - "deleteAllContacts": "Delete all contacts?", - "deleteOthersContacts": "Delete num contacts?", - "deleteWarnInfo": { - "one": "This contact will be deleted from all accounts.", - "other": "These contacts will be deleted from all accounts." - }, - "signNotice": "I've read and understand" - }, - "selectContacts": { - "recent": "Recents", - "contacts": "Contacts", - "group": "Groups", - "noContacts": "No recent contacts with phone numbers", - "noGroups": "No Contacts" - } - }, - "favorites": { - "tab": "Favorite", - "page": { - "title": "STARRED", - "dialog": { - "title": "Call", - "defaultValue": "Set default", - "defaultText": "Default", - "noAvailablePhoneNumber": "No available number.", - "setDefaultPhoneNumber": "Set default" - }, - "menu": { - "edit": "Edit" - }, - "delete": { - "titleMessageNoSelect": "None selected", - "titleMessageSelect": { - "one": " item selected", - "other": " items selected" - }, - "titleMessageUnit": "item", - "selectAll": "Select all", - "unSelectAll": "Deselect all", - "remove": "Remove" - }, - "noFavorites": "No favorites", - "deleteFavorites": "Unfavorite", - "serviceUnavailable": "Service unavailable", - "lastTimeUserThisCard": "Last time user this SIM card" - } - }, - "speedDial": { - "title": "Speed dial", - "page": { - "add": "Add", - "voiceMail": "Voicemail" - } - }, - "selectContact": { - "title": "Select contact", - "cancel": "CANCEL", - "dialog": { - "title": "Modify speed dial", - "one": "Clear assigned number", - "two": "Change assigned number" - }, - "page": { - "empty": "No contacts with phone numbers", - "emptyText": "NO result", - "search": "Search", - "find": "FOUND", - "findEnd": "NUMBER" - } - } - }, - "group": { - "frequent": "FREQUENT ", - "favorites": "STARRED " - }, - "phone": { - "phoneTitle": "Phone", - "addContacts": "Create new contact", - "saveContacts": "Save to existing contact", - "videoCall": "Video call", - "sendMessage": "Send message", - "attentionMsg1": "Pinyin search supported", - "attentionMsg3": "en)”,simply input:", - "attentionMsg4": "4 + 9 + 3", - "more": "More", - "fastConfigAttention": "No speed dial number has been assigned to this key.Assign one now?", - "cancel": "CANCEL", - "clearRecords": "Clear all call log entries?", - "settings": "ASSIGN", - "greeting": "Greeting", - "about": "About", - "paste": "Paste", - "batchDelete": "Delete entries", - "crankCall": "Blocked", - "clickPaste": "Touch to paste", - "simMsgYiDong": "China Mobile", - "simMsgLianTong": "China Unicom", - "simMsgDianXin": "China Telecom", - "emergencyCall": "Emergency calls only", - "notInService": "No service", - "sure": "OK", - "meid": "MEID", - "pesn": "PESN", - "imei1": "IMEI1", - "imei2": "IMEI2", - "sn": "SN", - "callLogMergeRule":"Merge call log", - "byTime": "By time", - "byContacts": "By contact" - }, - "recordDetail": { - "menu": { - "edit": "Edit before call", - "delete": "Delete entry", - "copy": "Copy to clipboard", - "readMap": "View on map", - "noAppToDealThisAction": "No application found to handle this action." - }, - "language": { - "noAnswer": "Rang", - "reject": "Rejected", - "blockCall": "Canceled", - "years": "year", - "months": "month", - "day": "day", - "hour": "hours", - "minute": "min", - "seconds": "sec", - "middleNight": "midnight", - "evening": "PM", - "AM": "AM", - "PM": "PM", - "earlyMorning": "AM", - "justNow": "Just now", - "minutesAgo": "min ago", - "yesterday": "Yesterday", - "nightfall": "PM", - "noon": "PM", - "morning": "AM", - "beforeDawn": "AM", - "unknown": "未知", - "timeHour": "hour" - } - }, - "accountants": { - "date": "Date", - "cardUpdate": "Imported from:", - "localResource": "My profile", - "share": "Share", - "addCarte": "Create personal business card", - "saveCarte": "My profile", - "PerEmInfor": "Emergency information", - "updateContacts": "Edit contact", - "addContacts": "New contact", - "name": "Name", - "letter": "Phonetic name", - "surname":"Phonetic surname", - "company": "Organization", - "position": "Title", - "phone": "Mobile", - "number": "Phone number", - "email": "Email", - "private": "Home", - "note": "Notes", - "group": "Group", - "selects": "ADD MORE FIELDS", - "savePhone": "Save to Phone", - "mobile": "Phone", - "justSave": "Will only be saved on the phone.Enable Cloud to sync.", - "message": "IM", - "ring": "Ringtone", - "house": "Home", - "householder": "Address", - "nick": "Nickname", - "website": "Website", - "birth": "Birthday", - "assistant": "Assistant", - "associated": "Relationship", - "unit": "Work", - "switchboard": "Main", - "unit fax": "Work Fax", - "home fax": "Home Fax", - "pager": "Pager", - "others": "Others", - "customize": "Custom", - "addNumber": "Add phone number", - "addEmail": "Add email", - "AIM": "AIM", - "Windows Live": "Windows Live", - "Yahoo": "Yahoo", - "Skype": "Skype", - "QQ": "QQ", - "Hangout": "Hangouts", - "ICQ": "ICQ", - "Jabber": "Jabber", - "address": "Add address", - "Lunar Birthday": "Lunar Birthday", - "Anniversary": "Anniversary", - "import day": "Important date", - "brothers": "Brother", - "child": "Child", - "companion": "Companion", - "father": "Father", - "friend": "Friend", - "boss": "Boss", - "mother": "Mother", - "parents": "Parent", - "Partner": "Partner", - "introducer": "Introducer", - "relatives": "Relative", - "sisters": "Sister", - "spouse": "Spouse", - "addrelship": "Add relationship", - "addlable": "Add custom label", - "reset": "CANCEL", - "submit": "OK", - "addMess": "Add IM service", - "save": "SAVE", - "unsave": "DISCARD", - "dosave": "Save the changes", - "addwebsite": "add website", - "confirm": "OK", - "cancel": "CANCEL" - } -} \ No newline at end of file diff --git a/entry/src/main/js/default/i18n/zh-CN.json b/entry/src/main/js/default/i18n/zh-CN.json deleted file mode 100644 index 6820e1c..0000000 --- a/entry/src/main/js/default/i18n/zh-CN.json +++ /dev/null @@ -1,554 +0,0 @@ -{ - "strings": { - "hello": "您好", - "world": "世界", - "calling": "呼叫中", - "call_failed": "呼叫失败" - }, - "svg": { - "common": { - "back": "/res/image/ic_back.svg", - "more": "/res/image/ic_more_24x24.svg" - }, - "phone": { - "unselected": "/res/image/ic_phonecall_m.svg", - "selected": "/res/image/ic_phonecall_filled_m.svg", - "ic_contacts_add": "/res/image/ic_contacts_add_m.svg", - "ic_contacts_name": "/res/image/ic_contacts_name_m.svg", - "ic_more": "/res/image/ic_more_24x24.svg", - "ic_more_three": "/res/image/ic_more_24x12.svg" - }, - "contacts": { - "group": "/res/image/ic_contacts_group.svg", - "unselected": "/res/image/ic_contacts_m.svg", - "selected": "/res/image/ic_contacts_filled_m.svg", - "detail": "/res/image/ic_public_about_m.svg", - "add": "/res/image/ic_contacts_add_m.svg", - "icmore": "/res/image/ic_more_24x24.svg", - "diageCardOne": "/res/image/ic_contacts_dial call_1_s.svg", - "diageCardTwo": "/res/image/ic_contacts_dial call_2_m.svg", - "diageEdit": "/res/image/ic_contacts_edit.svg", - "shrink": "/res/image/ic_contacts_arrow_up.svg", - "shrinkdown": "/res/image/ic_contacts_arrow_down.svg", - "shrinkdowncontactsdetail": "/res/image/ic_contacts_details_arrow_down.svg", - "businessCard": "/res/image/ic_contacts_m.svg", - "icEmptyContact": "/res/image/ic_contacts_name_m.svg", - "icContactsDetailQrCode": "/res/image/ic_contacts_detail_qrcode.svg" - }, - "favorites": { - "unselected": "/res/image/ic_contacts_favorite_m.svg", - "detailSelected": "/res/image/ic_contacts_favorite_filled_m_black.svg", - "selected": "/res/image/ic_contacts_favorite_filled_m.svg", - "detail": "/res/image/ic_public_about_m.svg", - "add": "/res/image/ic_contacts_favorite_add.svg", - "icmore": "/res/image/ic_more_24x24_favorite.svg", - "diageCardOne": "/res/image/ic_contacts_dial call_1_s.svg", - "diageCardTwo": "/res/image/ic_contacts_dial call_2_m.svg", - "diageEdit": "/res/image/ic_contacts_edit.svg" - }, - "accountants": { - "back": "/res/image/ic_back.svg", - "comfirm": "/res/image/ic_comfirm.svg", - "camera": "/res/image/ic_camera_filled.svg", - "name": "/res/image/ic_contacts_name_m.svg", - "company": "/res/image/ic_contacts_company_m.svg", - "phone": "/res/image/ic_phonecall_m.svg", - "email": "/res/image/ic_contacts_email_m.svg", - "message": "/res/image/ic_massage_m.svg", - "home": "/res/image/ic_contacts_edit address_m.svg", - "nickname": "/res/image/ic_contacts_edit nickname_m.svg", - "reset": "/res/image/ic_cancel_m.svg" - }, - "speedDial": { - "back": "/res/image/ic_back.svg", - "add": "/res/image/ic_speed_dial_add.svg", - "defaultHead": "/res/image/ic_avatar_default.svg", - "voice": "/res/image/ic_contacts_speeddial_voice_72.svg" - }, - "selectContact": { - "back": "/res/image/ic_back.svg", - "emptyImage": "/res/image/ic_speed_select_contact_empty.svg" - } - }, - "value": { - "phone": "电话", - "callRecords": { - "noSim": "未找到SIM卡。", - "calls": "通话记录", - "clear": "清空", - "allCalls": "全部通话", - "missedCalls": "未接来电", - "voiceMails": "语音信箱", - "serviceProvider": "服务提供商", - "myProvider": "我的运营商", - "noSettings": "未设置", - "voicemailNumber": "语音信箱号码", - "simCard": "卡", - "noMissedCalls": "没有未接来电", - "noCallLogs": "没有通话记录", - "noVoiceMails": "没有语音信息", - "delete": "删除", - "selectAll": "全选", - "unSelectAll": "取消全选", - "titleMessageNoSelect": "未选择", - "titleMessageSelect": "已选择", - "titleMessageUnit": "个", - "deleteMessageAsk": "是否删除", - "deleteMessageThis": "此", - "deleteMessageUnit": "条", - "deleteMessageAll": "全部", - "deleteMessageCalls": "通话记录?", - "sendMessage": "发送信息", - "copyNumber": "复制号码", - "editBeforeCall": "呼叫前编辑", - "addBlackList": "加入黑名单", - "deleteCall": "删除通话记录", - "removeContactMark": "擦除联系痕迹", - "remove": "擦除", - "unKnowLocation": "未知", - "noneName": "(无姓名)", - "greeting": { - "title": "应答语", - "default": "默认", - "new": "新建应答语", - "delete": "删除", - "cancel": "取消", - "startRecording": "开始录制", - "confirm": "确定", - "save": "保存" - } - }, - "contacts": { - "noInfo": "没有此联系人的其他信息", - "waitExport": "将在稍后导出", - "batchSelectContacts": "批量选择联系人", - "samplePage": "样例页面", - "tab": "联系人", - "page": { - "title": "联系人", - "contactsLength": " 个联系人", - "search": "搜索联系人", - "loginAccount": "登录帐号", - "importContacts": "导入联系人", - "newContact": "新建联系人", - "scanCard": "扫名片", - "group": "群组", - "businessCard": "名片夹", - "myCard": "我的名片", - "noPhoneContacts": "手机 中没有联系人", - "noContacts": "没有联系人", - "item": { - "noName": "(无姓名)" - }, - "searchContacts": "找到 num 个联系人", - "noSearchContacts": "没有匹配的结果", - "menu": { - "card": "扫名片", - "settings": "设置", - "item": { - "delete": "删除", - "share": "分享联系人" - }, - "deleteInfo": { - "warningInfo": "是否删除此联系人?", - "warningInfoRecord": "是否擦除联系痕迹?", - "deleteTxt": "删除", - "cancelTxt": "取消" - }, - "shareInfo": { - "title": "分享", - "content": { - "qrCode": "二维码", - "vCard": "vCard", - "text": "文本", - "scanQrcode": "扫一扫二维码,可添加联系人" - }, - "cancelTxt": "取消" - }, - "importInfo": { - "title": "导入联系人", - "content": { - "storageImport": "从存储设备" - }, - "cancelTxt": "取消" - } - }, - "free": { - "loginAccount": "登录账户", - "importContacts": "导入联系人", - "newContact": "新建联系人" - } - }, - "settingPage": { - "title": "设置", - "account": "帐户", - "manager": "联系人管理", - "displayContact": "显示联系人", - "organizeContacts": "整理联系人", - "importExport": "导入/导出", - "about": "关于" - }, - "displayPage": { - "title": "显示联系人", - "conciseLayout": "简洁布局", - "layoutInstruction": "联系人列表隐藏头像、公司、职位、IM 账号等信息", - "displayAccount": "要显示的账户", - "displayContacts": "所有联系人", - "total": "共 ", - "displayContactsInstruction": ",智能合并后 ", - "number": " 个", - "phoneContacts": "手机(仅保存在手机,开启云空间可同步)", - "all": "总共:", - "customContacts": "自定义", - "customizePage": { - "title": "自定义视图", - "phone": "手机", - "phoneInstruction": "仅保存在收机,开启可同步", - "allContacts": "所有联系人", - "unGrouped": "其他所有联系人" - } - }, - "managePage": { - "title": "整理联系人", - "mergeContacts": "合并重复联系人", - "copyContacts": "复制联系人", - "deleteContacts": "批量删除", - "recentlyDeleted": "最近删除", - "recentlyDeletedInstruction": "找回最近删除的联系人", - "mergePage": { - "noSelect": "未选择", - "select": "已选择 ", - "count": " 个", - "selectAll": "全选", - "unSelectAll": "取消全选", - "merge": "合并", - "mergeInfo": "合并联系人", - "percent": "100%", - "noMerge": "没有重复联系人", - "warningInfo": "是否放弃合并联系人?", - "cancelTxt": "取消", - "discardTxt": "放弃" - }, - "recentlyPage": { - "title": "最近删除", - "instruction": "联系人将保留 30 天,之后永久删除。", - "deleteSource": "联系人应用删除", - "surplus": "剩余 ", - "days": " 天", - "batchEmpty": "清空", - "clearInfo": "联系人清空后无法恢复。是否清空?", - "cancelButton": "取消", - "clearButton": "清空", - "batchDelete": "删除", - "batchRecover": "恢复", - "noContacts": "没有联系人", - "noSelect": "未选择", - "select": "已选择 ", - "count": " 个", - "selectAll": "全选", - "unSelectAll": "取消全选", - "deleteAllWarningInfo": "全部联系人将永久删除,无法恢复。是否删除?", - "deleteOneWarningInfo": "是否永久删除此联系人?", - "deleteOthersWarningInfo": " 个联系人将被永久删除,无法恢复。是否删除?", - "recovering": "正在恢复联系人...", - "restored": "已恢复 ", - "numbers": " 人" - } - }, - "imorexportPage": { - "title": "导入/导出联系人", - "import": "导入", - "bluetoothImport": "通过蓝牙导入", - "simImport": "从 SIM 卡导入", - "wlanConnected": "通过 WLAN 直接导入", - "storageDevice": "从存储设备导入", - "storageDeviceInstruction": "从内部存储导入 vCard 文件", - "export": "导出", - "exportStorage": "导出到存储设备", - "unimportStorage": "无法从存储设备导入", - "importContact": "导出联系人", - "StorageSource": "存储设备中无vCard文件", - "message": "知道了", - "exportStorageInstruction": "导出 vCard 文件到内部存储", - "shareContacts": "分享联系人", - "warningInfo": "是否将SIM卡联系人导入到手机?", - "cancelTxt": "取消", - "importTxt": "导入", - "prompt": "已成功导入 num 个联系人", - "choose": "选择VCard文件", - "selectAll": "全选", - "isExport": "是否将联系人列表导出至 内部存储/", - "safekeeping": "?导出后,请妥善保管您的联系人信息" - }, - "aboutPage": { - "title": "关于", - "contact": "联系人", - "version": "版本 ", - "license": "开放源代码许可" - }, - "groupsPage": { - "title": "群组", - "smartGroups": "智能群组", - "company": "公司", - "RecentContacts": "最近联系人", - "mobilePhone": "手机群组", - "delete": "删除", - "new": "新建", - "addGroup": "新建群组", - "oneWeekContacts": "1 周内联系过", - "oneMonthContacts": "1 个月联系过(不包含最近 1 周内)", - "threeMonthContacts": "3 个月联系过(不包含最近 1 个月内)", - "moreThreeMonthContacts": "3 个月以上未联系", - "sendEmail": "发送邮件", - "sendMessage": "发送信息", - "more": "更多", - "noSelect": "未选择", - "alreadySelect": "已选择 num 个", - "cancelBtnText": "取消", - "deleteBtnText": "删除", - "deleteGroupText": "群组内的联系人并不会被删除。", - "deleteGroupTip": "联系人不会被删除。", - "deleteThisGroup": "是否删除此群组?", - "deleteNumGroups": "是否删除 num 个群组?", - "deleteAllGroups": "是否删除全部群组?", - "people": "个人", - "rename": "重命名", - "renameGroup": "群组重命名", - "addMember": "添加成员", - "groupRing": "群组铃声", - "deleteGroup": "删除群组", - "noContacts": "没有联系人", - "hasNumContactsFrom": "有 num 个人来自手机", - "selectAll": "全选", - "cancelSelectAll": "取消全选", - "alreadyExists": "群组已存在", - "add": "添加", - "deleteFromGroup": "从群组中移除", - "deleteMember": "移除成员", - "remove": "移除", - "select": "选择", - "noMatchingResults": "没有匹配到结果", - "matchingResultNumber": "找到 num 个联系人", - "noGroups": "没有群组", - "noContactsWithPhoneNum": "没有带号码的联系人", - "noContactsWithEmail": "没有带邮件地址的联系人", - "deleteOneContact": "是否删除此联系人?", - "deleteAllContacts": "是否删除全部联系人?", - "deleteOthersContacts": "是否删除 num 个联系人?", - "deleteWarnInfo": "联系人将从所有帐户中删除。", - "signNotice": "我已阅读并了解" - }, - "selectContacts": { - "recent": "最近", - "contacts": "联系人", - "group": "群组", - "noContacts": "没有带号码的联系人", - "noGroups": "没有可用的群组信息" - } - }, - "favorites": { - "tab": "收藏", - "page": { - "title": "收藏", - "dialog": { - "title": "呼叫", - "defaultValue": "默认值", - "defaultText": "默认", - "noAvailablePhoneNumber": "联系人没有可用号码", - "setDefaultPhoneNumber": "设置默认值", - "clearDefaultPhoneNumber": "清除默认值" - }, - "menu": { - "edit": "编辑" - }, - "delete": { - "titleMessageNoSelect": "未选择", - "titleMessageSelect": "已选择", - "titleMessageUnit": "个", - "selectAll": "全选", - "unSelectAll": "取消全选", - "remove": "移除" - }, - "noFavorites": "没有收藏", - "deleteFavorites": "取消收藏", - "serviceUnavailable": "无服务", - "lastTimeUserThisCard": "上次使用此卡联系" - } - }, - "speedDial": { - "title": "快速拨号", - "page": { - "add": "添加", - "voiceMail": "语音信箱" - } - }, - "selectContact": { - "title": "选择联系人", - "cancel": "取消", - "dialog": { - "title": "修改快速拨号", - "one": "删除号码", - "two": "修改已设置的号码" - }, - "page": { - "empty": "没有带号码的联系人", - "emptyText": "没有匹配的搜索結果", - "search": "搜索联系人", - "find": "找到", - "findEnd": "个联系人号码" - } - } - }, - "group": { - "frequent": "常用 ", - "favorites": "收藏 " - }, - "phone": { - "phoneTitle": "电话", - "addContacts": "新建联系人", - "saveContacts": "保存至已有联系人", - "videoCall": "视频呼叫", - "sendMessage": "发送信息", - "attentionMsg1": "支持拼音搜索", - "attentionMsg3": "en)”,您可依次输入:", - "attentionMsg4": "4 + 9 + 3", - "more": "更多", - "fastConfigAttention": "该按键没有设置快速拨号,是否现在设置?", - "cancel": "取消", - "clearRecords": "是否清空通话记录", - "settings": "设置", - "greeting": "应答语", - "about": "关于", - "paste": "粘贴", - "batchDelete": "批量删除", - "crankCall": "骚扰拦截", - "clickPaste": "点击粘贴", - "simMsgYiDong": "中国移动", - "simMsgLianTong": "中国联通", - "simMsgDianXin": "中国电信", - "emergencyCall": "仅限紧急呼叫", - "notInService": "无服务", - "sure": "确定", - "meid": "MEID", - "pesn": "PESN", - "imei1": "IMEI1", - "imei2": "IMEI2", - "sn": "SN", - "callLogMergeRule": "通话记录合并", - "byTime": "按时间", - "byContacts": "按联系人" - }, - "recordDetail": { - "menu": { - "edit": "呼叫前编辑", - "delete": "删除通话记录", - "copy": "复制到剪贴板", - "readMap": "查看地图", - "noAppToDealThisAction": "未找到可处理此操作的应用" - }, - "language": { - "noAnswer": "响铃", - "reject": "拒接", - "blockCall": "未接通", - "years": "年", - "months": "月", - "day": "日", - "hour": "时", - "minute": "分", - "seconds": "秒", - "middleNight": "半夜", - "evening": "晚上", - "AM": "上午", - "PM": "下午", - "earlyMorning": "清晨", - "justNow": "刚刚", - "minutesAgo": "分钟前", - "yesterday": "昨天", - "nightfall": "傍晚", - "noon": "中午", - "morning": "早上", - "beforeDawn": "凌晨", - "unknown": "未知", - "timeHour": "小时" - } - }, - "accountants": { - "date": "日期", - "cardUpdate": "来自以下账户:", - "localResource": "本地个人资料", - "share": "分享", - "addCarte": "新建我的名片", - "saveCarte": "本地个人资料", - "PerEmInfor": "个人紧急信息", - "updateContacts": "编辑联系人", - "addContacts": "新建联系人", - "name": "姓名", - "letter": "姓名拼音", - "company": "公司", - "position": "职位", - "phone": "手机", - "number": "电话号码", - "email": "电子邮箱", - "private": "私人", - "note": "备注", - "group": "加入群组", - "selects": "添加更多项", - "savePhone": "保存至:手机", - "mobile": "手机", - "justSave": "仅保存在手机、开启云空间可同步", - "message": "即时信息", - "ring": "电话铃声", - "house": "住宅", - "householder": "地址", - "nick": "昵称", - "website": "网站", - "birth": "生日", - "assistant": "助理", - "associated": "关联人", - "unit": "单位", - "switchboard": "总机", - "unit fax": "单位传真", - "home fax": "住宅传真", - "pager": "寻呼机", - "others": "其他", - "customize": "自定义", - "addNumber": "添加号码", - "addEmail": "添加邮件", - "AIM": "AIM", - "Windows Live": "Windows Live", - "Yahoo": "雅虎", - "Skype": "Skype", - "QQ": "QQ", - "Hangout": "环聊", - "ICQ": "ICQ", - "Jabber": "Jabber", - "address": "添加地址", - "Lunar Birthday": "农历生日", - "Anniversary": "周年纪念日", - "import day": "其他重要日期", - "brothers": "兄弟", - "child": "子女", - "companion": "伴侣", - "father": "父亲", - "friend": "朋友", - "boss": "上司", - "mother": "母亲", - "parents": "父母", - "Partner": "合作伙伴", - "introducer": "介绍人", - "relatives": "亲属", - "sisters": "姐妹", - "spouse": "配偶", - "addrelship": "添加关系", - "addlable": "新增自定义标签", - "reset": "取消", - "submit": "确定", - "addMess": "添加即时消息", - "save": "保存", - "unsave": "不保存", - "dosave": "是否保存修改", - "addwebsite": "添加网站", - "confirm": "确定", - "cancel": "取消" - } -} \ No newline at end of file diff --git a/entry/src/main/js/default/model/AccountantsModel.js b/entry/src/main/js/default/model/AccountantsModel.js deleted file mode 100644 index 9af4b50..0000000 --- a/entry/src/main/js/default/model/AccountantsModel.js +++ /dev/null @@ -1,785 +0,0 @@ -/** - * @file: Create a Contact model - */ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -*/ - -import Utils from '../../default/utils/utils.js'; -import ohosDataAbility from '@ohos.data.dataability'; -import Constants from '../common/constants/Constants.js'; -import LOG from '../utils/ContactsLog.js'; -import backgroundColor from '../common/constants/color.js'; - -// Default color of avatar background -var PortraitColor = backgroundColor.Color; -// Dark color of avatar background -var DetailsBgColor = backgroundColor.detailColor; -var TAG = 'accountantsModel'; - -export default { - - /** - * Adding contacts - * - * @param {string} DAHelper Database path - * @param {Object} addParams Contact Information - * @param {Object} callBack The callback - */ - addContact: async function (DAHelper, addParams, callBack) { - // Adding contacts - var stringValue = { - 'display_name': this.getDisplayName(addParams), - }; - DAHelper.insert( - Constants.uri.ROW_CONTACTS_URI, - stringValue, - ).then(data => { - addParams.contactId = data; - this.dealParam(DAHelper, addParams, false); - callBack(data); - }).catch(error => { - LOG.error(TAG + 'addContact' + 'insert contact error: ' + error); - }); - }, - - /** - * Edit contacts - * - * @param {Object} addParams Contact Information - * @return {string} Contact Name - */ - getDisplayName: function (addParams) { - let displayName = ''; - if (addParams.name != undefined && addParams.name.fullName.length > 0) { - displayName = addParams.name.fullName; - } else if (addParams.name.fullName.length == 0 && addParams.name.familyNamePhonetic.length > 0) { - displayName = addParams.name.familyNamePhonetic; - } else if (addParams.hasOwnProperty('organization') && addParams.organization.name.length > 0) { - displayName = addParams.organization.name; - } else if (addParams.hasOwnProperty('organization') && addParams.organization.title.length > 0) { - displayName = addParams.organization.title; - } else if (addParams.hasOwnProperty('phoneNumbers') && addParams.phoneNumbers.length > 0) { - displayName = addParams.phoneNumbers[0].phoneNumber; - } else if (addParams.hasOwnProperty('emails') && addParams.emails.length > 0) { - displayName = addParams.emails[0].email; - } else if (addParams.hasOwnProperty('nickName') && addParams.nickName.nickName.length > 0) { - displayName = addParams.nickName.nickName; - } - return displayName; - }, - - /** - * Save the data conversion to the database - * - * @param {string} DAHelper Database path - * @param {Object} addParams Contact Information - * @param {boolean} isCard Whether it is a business card - */ - dealParam: function (DAHelper, addParams, isCard) { - var result = addParams.contactId; - var uri = isCard ? Constants.uri.PROFILE_CONTACT_DATA_URI : Constants.uri.CONTACT_DATA_URI; - // vnd.item/name 44 - this.dataContact(addParams, DAHelper, result, uri); - // vnd.item/organization 41 - this.organizationContact(addParams, DAHelper, result, uri); - // vnd.item/note note 48 - this.noteContact(addParams, DAHelper, result, uri); - // The phone number vnd.item/phone 42 - this.phoneContact(addParams, DAHelper, result, uri); - // email vnd.item/email 38 - this.emailContact(addParams, DAHelper, result, uri); - // vnd.item/postal_address address 45 - this.postalContact(addParams, DAHelper, result, uri); - // Nickname VND.item/nickname 40 - this.nickContact(addParams, DAHelper, result, uri); - // The date of VND.item/contact_event 49 - this.eventContact(addParams, DAHelper, result, uri); - // vnd.item/im Instant messaging 39 - this.imContact(addParams, DAHelper, result, uri); - // vnd.item/group_membership group - this.groupsContact(addParams, DAHelper, result, uri); - // vnd.item/websiteThe url 50 - this.websiteContact(addParams, DAHelper, result, uri); - // vnd.item/relation associates 51 - this.relationsContact(addParams, DAHelper, result, uri); - }, - - /** - * The contact name is stored in the database - * - * @param {Object} addParams Contact Information - * @param {string} DAHelper Database path - * @param {string} result The contact ID - * @param {string} uri The contact ID - */ - dataContact: function (addParams, DAHelper, result, uri) { - var displayName = ''; - if (addParams.name != undefined && addParams.name.fullName.length > 0) { - let middleName = addParams.name.middleName == undefined ? '' : addParams.name.middleName; - displayName = addParams.name.fullName + middleName + addParams.name.givenName; - } else if ((addParams.name.familyNamePhonetic) != undefined && addParams.name.familyNamePhonetic.length > 0) { - displayName = addParams.name.familyNamePhonetic; - } - if (displayName.length > 0) { - var dataContact = { - 'raw_contact_id': result, - 'detail_info': displayName, - 'alpha_name': addParams.name.fullName, - 'phonetic_name': addParams.name.familyNamePhonetic, - 'other_lan_last_name': addParams.name.middleName, - 'other_lan_first_name': addParams.name.givenName, - 'content_type': 'name' - }; - DAHelper.insert( - uri, - dataContact - ).catch(error => { - LOG.error(TAG + 'dataContact' + 'insert contact error:' + error); - }); - } - }, - - /** - * The contact group information is saved to the database - * - * @param {Object} addParams Contact Information - * @param {string} DAHelper Database path - * @param {string} result The contact ID - * @param {string} uri The contact ID - */ - organizationContact: function (addParams, DAHelper, result, uri) { - if (addParams.organization != undefined) { - var organizationContact = {}; - if (addParams.organization.name.length > 0 || addParams.organization.title.length > 0) { - organizationContact = { - 'raw_contact_id': result, - 'detail_info': addParams.organization.name, - 'position': addParams.organization.title, - 'content_type': 'organization' - }; - DAHelper.insert( - uri, - organizationContact - ).catch(error => { - LOG.error(TAG + 'organizationContact' + 'insert contact error:' + error); - }); - } - } - }, - - /** - * Contact remarks are stored in the database - * - * @param {Object} addParams Contact Information - * @param {string} DAHelper Database path - * @param {number} result The contact ID - * @param {string} uri The contact ID - */ - noteContact: function (addParams, DAHelper, result, uri) { - if (addParams.note != undefined && addParams.note.noteContent.length > 0) { - var noteContact = { - 'raw_contact_id': result, - 'detail_info': addParams.note.noteContent, - 'content_type': 'note' - }; - DAHelper.insert( - uri, - noteContact - ).catch(error => { - LOG.error(TAG + 'noteContact' + 'insert contact error:' + error); - }); - } - }, - - /** - * Contact manual number information stored in the database - * - * @param {Object} addParams Contact Information - * @param {string} DAHelper Database path - * @param {number} result The contact ID - * @param {string} uri The contact ID - */ - phoneContact: function (addParams, DAHelper, result, uri) { - if (addParams.phoneNumbers != undefined && addParams.phoneNumbers.length > 0) { - addParams.phoneNumbers.forEach(element => { - var phoneContact = { - 'raw_contact_id': result, - 'detail_info': element.phoneNumber, - 'extend7': element.labelId + '', - 'custom_data': element.labelName, - 'content_type': 'phone' - }; - DAHelper.insert( - uri, - phoneContact - ).catch(error => { - LOG.error(TAG + 'phoneContact' + 'insert contact error:' + error); - }); - }); - } - }, - - /** - * Contact email information is stored in the database - * - * @param {Object} addParams Contact Information - * @param {string} DAHelper Database path - * @param {number} result The contact ID - * @param {string} uri The contact ID - */ - emailContact: function (addParams, DAHelper, result, uri) { - if (addParams.emails != undefined && addParams.emails.length > 0) { - addParams.emails.forEach(element => { - var emailContact = { - 'raw_contact_id': result, - 'detail_info': element.email, - 'extend7': element.labelId + '', - 'custom_data': element.labelName, - 'content_type': 'email' - }; - DAHelper.insert( - uri, - emailContact - ).catch(error => { - LOG.error(TAG + 'emailContact' + 'insert contact error:' + error); - }); - }); - } - }, - - /** - * The contact address information is stored in the database - * - * @param {Object} addParams Contact Information - * @param {string} DAHelper Database path - * @param {number} result The contact ID - * @param {string} uri The contact ID - */ - postalContact: function (addParams, DAHelper, result, uri) { - if (addParams.postalAddresses != undefined && addParams.postalAddresses.length > 0) { - addParams.postalAddresses.forEach(element => { - var postalContact = { - 'raw_contact_id': result, - 'detail_info': element.postalAddress, - 'extend7': element.labelId + '', - 'custom_data': element.labelName, - 'content_type': 'postal_address' - }; - DAHelper.insert( - uri, - postalContact - ).catch(error => { - LOG.error(TAG + 'postalContact' + 'insert contact error:' + error); - }); - }); - } - }, - - /** - * Contact nicknames are stored in the database - * - * @param {Object} addParams Contact Information - * @param {string} DAHelper Database path - * @param {number} result The contact ID - * @param {string} uri The contact ID - */ - nickContact: function (addParams, DAHelper, result, uri) { - if (addParams.nickName != undefined && addParams.nickName.nickName.length > 0) { - var nickContact = { - 'raw_contact_id': result, - 'detail_info': addParams.nickName.nickName, - 'content_type': 'nickname' - }; - DAHelper.insert( - uri, - nickContact - ).catch(error => { - LOG.error(TAG + 'nickContact' + 'insert contact error:' + error); - }); - } - }, - - /** - * Contact specific date information is stored in the database - * - * @param {Object} addParams Contact Information - * @param {string} DAHelper Database path - * @param {number} result The contact ID - * @param {string} uri The contact ID - */ - eventContact: function (addParams, DAHelper, result, uri) { - if (addParams.events != undefined && addParams.events.length > 0) { - addParams.events.forEach(element => { - var eventContact = { - 'raw_contact_id': result, - 'detail_info': element.eventDate, - 'extend7': element.labelId + '', - 'content_type': 'contact_event' - }; - DAHelper.insert( - uri, - eventContact - ).catch(error => { - LOG.error(TAG + 'eventContact' + 'insert contact error:' + error); - }); - }); - } - }, - - /** - * Contact IMA information is stored in the database - * - * @param {Object} addParams Contact Information - * @param {string} DAHelper Database path - * @param {number} result The contact ID - * @param {string} uri The contact ID - */ - imContact: function (addParams, DAHelper, result, uri) { - if (addParams.imAddresses != undefined && addParams.imAddresses.length > 0) { - addParams.imAddresses.forEach(element => { - var imContact = { - 'raw_contact_id': result, - 'detail_info': element.imAddress, - 'extend7': element.labelId + '', - 'custom_data': element.labelName, - 'content_type': 'im' - }; - DAHelper.insert( - uri, - imContact - ).then(data => { - LOG.info(TAG + 'imContact' + 'logMessage insert data success! data = ' + data); - }).catch(error => { - LOG.error(TAG + 'imContact' + 'insert contact error:' + error); - }); - }); - } - }, - - /** - * The contact group information is saved to the database - * - * @param {Object} addParams Contact Information - * @param {string} DAHelper Database path - * @param {number} result The contact ID - * @param {string} uri The contact ID - */ - groupsContact: function (addParams, DAHelper, result, uri) { - if (addParams.groups != undefined && addParams.groups.length > 0) { - addParams.groups.forEach(element => { - var groupsContact = { - 'raw_contact_id': result, - 'detail_info': element.groupId, - 'content_type': 'group_membership' - }; - DAHelper.insert( - uri, - groupsContact - ).then(data => { - LOG.info(TAG + 'groupsContact' + 'logMessage insert data success! data = ' + data); - }).catch(error => { - LOG.error(TAG + 'groupsContact' + 'insert contact error:' + error); - }); - }); - } - }, - - /** - * The contact website information is stored in the database - * - * @param {Object} addParams Contact Information - * @param {string} DAHelper Database path - * @param {number} result The contact ID - * @param {string} uri The contact ID - */ - websiteContact: function (addParams, DAHelper, result, uri) { - if (addParams.websites != undefined && addParams.websites.length > 0) { - addParams.websites.forEach(element => { - var websiteContact = { - 'raw_contact_id': result, - 'detail_info': element.website, - 'content_type': 'website' - }; - DAHelper.insert( - uri, - websiteContact - ).then(data => { - LOG.info(TAG + 'websiteContact' + 'logMessage insert data success! data = ' + data); - }).catch(error => { - LOG.error(TAG + 'websiteContact' + 'insert contact error:' + error); - }); - }); - } - }, - - /** - * Contact Relation information is stored in the database - * - * @param {Object} addParams Contact Information - * @param {string} DAHelper Database path - * @param {number} result The contact ID - * @param {string} uri Database address - */ - relationsContact: function (addParams, DAHelper, result, uri) { - if (addParams.relations != undefined && addParams.relations.length > 0) { - addParams.relations.forEach(element => { - var relationsContact = { - 'raw_contact_id': result, - 'detail_info': element.relationName, - 'extend7': element.labelId + '', - 'custom_data': element.labelName, - 'content_type': 'relation' - }; - DAHelper.insert( - uri, - relationsContact - ).then(data => { - LOG.info(TAG + 'relationsContact' + 'logMessage insert data success! data = ' + data); - }).catch(error => { - LOG.error(TAG + 'relationsContact' + 'insert contact error:' + error); - }); - }); - } - }, - - /** - * Process contact database fields - * - * @param {Object} resultSet The result set - * @param {Object} contactDetailInfo Contact Details - * @param {Object} actionData Contact Information - */ - dealResult: function (resultSet, contactDetailInfo, actionData) { - var contactId = resultSet.getString(resultSet.getColumnIndex('contact_id')); - var favorite = resultSet.getString(resultSet.getColumnIndex('favorite')); - var nameSuffix = resultSet.getString(resultSet.getColumnIndex('photo_first_name')); - var typeText = resultSet.getString(resultSet.getColumnIndex('content_type')); - var detailInfo = resultSet.getString(resultSet.getColumnIndex('detail_info')); - var displayName = resultSet.getString(resultSet.getColumnIndex('display_name')); - var alphaName = resultSet.getString(resultSet.getColumnIndex('alpha_name')); - var familyNamePhonetic = resultSet.getString(resultSet.getColumnIndex('phonetic_name')); - var labelId = resultSet.getString(resultSet.getColumnIndex('extend7')); - var labelName = resultSet.getString(resultSet.getColumnIndex('custom_data')); - labelName = labelName ? labelName : ''; - var position = resultSet.getString(resultSet.getColumnIndex('position')); - var isPrimaryNum = resultSet.getString(resultSet.getColumnIndex('is_preferred_number')); - - contactDetailInfo.emptyNameData = displayName; - - if (favorite == 0) { - contactDetailInfo.favorite = false; - contactDetailInfo.starred = 0; - } else { - contactDetailInfo.favorite = true; - contactDetailInfo.starred = 1; - } - // If it is a search, the match type is passed out - if (!Utils.isEmpty(actionData) && actionData.searchMimetype) { - if (detailInfo.indexOf(actionData.searchValue) != -1) { - contactDetailInfo.searchMimetype.push('/' + typeText); - } - } - contactDetailInfo.nameSuffix = nameSuffix; - contactDetailInfo.contactId = contactId; - contactDetailInfo.portraitColor = PortraitColor[contactId % 6]; - contactDetailInfo.detailsBgColor = DetailsBgColor[contactId % 6]; - var dealResultInfo = { - 'contactId': contactId, - 'favorite': favorite, - 'nameSuffix': nameSuffix, - 'typeText': typeText, - 'detailInfo': detailInfo, - 'displayName': displayName, - 'alphaName': alphaName, - 'familyNamePhonetic': familyNamePhonetic, - 'labelId': labelId, - 'labelName': labelName, - 'position': position, - 'isPrimaryNum': isPrimaryNum, - 'contactDetailInfo': contactDetailInfo - } - this.switchTypeText(dealResultInfo); - }, - - switchTypeText: function (dealResultInfo) { - switch (dealResultInfo.typeText) { - case 'email': - var email = { - 'email': dealResultInfo.detailInfo, - 'labelId': dealResultInfo.labelId, - 'labelName': dealResultInfo.labelName, - 'showP': true - }; - if (dealResultInfo.contactDetailInfo.emails) { - dealResultInfo.contactDetailInfo.emails.push(email); - } else { - dealResultInfo.contactDetailInfo.emails = [email]; - } - break; - case 'im': - var imAddress = { - 'imAddress': dealResultInfo.detailInfo, - 'labelId': dealResultInfo.labelId, - 'labelName': dealResultInfo.labelName, - 'showP': true - }; - if (dealResultInfo.contactDetailInfo.imAddresses) { - dealResultInfo.contactDetailInfo.imAddresses.push(imAddress); - } else { - dealResultInfo.contactDetailInfo.imAddresses = [imAddress]; - } - break; - case 'nickname': - dealResultInfo.contactDetailInfo.nickName = { - 'nickName': dealResultInfo.detailInfo - }; - break; - case 'organization': - dealResultInfo.contactDetailInfo.organization = { - 'name': dealResultInfo.detailInfo, - 'title': dealResultInfo.position - }; - break; - case 'phone': - var phoneNumber = { - 'isPrimary': dealResultInfo.isPrimaryNum, - 'labelId': dealResultInfo.labelId, - 'labelName': dealResultInfo.labelName, - 'phoneAddress': 'N', - 'phoneNumber': dealResultInfo.detailInfo, - 'showP': true, - 'blueStyle': false - }; - if (dealResultInfo.contactDetailInfo.phoneNumbers) { - dealResultInfo.contactDetailInfo.phoneNumbers.push(phoneNumber); - } else { - dealResultInfo.contactDetailInfo.phoneNumbers = [phoneNumber]; - } - break; - case 'name': - dealResultInfo.contactDetailInfo.name = { - 'familyNamePhonetic': dealResultInfo.familyNamePhonetic, - 'fullName': dealResultInfo.detailInfo, - 'middleName': '', - 'givenName': '', - 'nameSuffix': dealResultInfo.nameSuffix, - 'alphaName': dealResultInfo.alphaName - }; - break; - case 'postal_address': - var postalAddress = { - 'labelId': dealResultInfo.labelId, - 'labelName': dealResultInfo.labelName, - 'postalAddress': dealResultInfo.detailInfo, - 'showP': true - }; - if (dealResultInfo.contactDetailInfo.postalAddresses) { - dealResultInfo.contactDetailInfo.postalAddresses.push(postalAddress); - } else { - dealResultInfo.contactDetailInfo.postalAddresses = [postalAddress]; - } - break; - case 'photo': - break; - case 'group_membership': - break; - case 'note': - dealResultInfo.contactDetailInfo.note = { - 'noteContent': dealResultInfo.detailInfo - }; - break; - case 'contact_event': - var event = { - 'labelId': dealResultInfo.labelId, - 'labelName': dealResultInfo.labelName, - 'eventDate': dealResultInfo.detailInfo, - 'showP': true, - 'showF': true, - 'showS': true - }; - if (dealResultInfo.contactDetailInfo.events) { - dealResultInfo.contactDetailInfo.events.push(event); - } else { - dealResultInfo.contactDetailInfo.events = [event]; - } - break; - case 'website': - var website = { - 'website': dealResultInfo.detailInfo, - 'showP': false - }; - if (dealResultInfo.contactDetailInfo.websites) { - dealResultInfo.contactDetailInfo.websites.push(website); - } else { - dealResultInfo.contactDetailInfo.websites = [website]; - } - break; - case 'relation': - var relation = { - 'labelId': dealResultInfo.labelId, - 'labelName': dealResultInfo.labelName, - 'relationName': dealResultInfo.detailInfo, - 'showP': true - }; - if (dealResultInfo.contactDetailInfo.relations) { - dealResultInfo.contactDetailInfo.relations.push(relation); - } else { - dealResultInfo.contactDetailInfo.relations = [relation]; - } - break; - default: - break; - } - }, - - - /** - * Create a business card - * - * @param {string} DAHelper Database path - * @param {Object} addParams Contact Information - * @param {Object} callBack The contact ID - */ - addMyCard: function (DAHelper, addParams, callBack) { - // Adding contacts - var stringValue = { - 'display_name': '', - }; - DAHelper.insert( - Constants.uri.PROFILE_ROW_CONTACTS_URI, - stringValue, - ).then(data => { - addParams.contactId = data; - this.dealParam(DAHelper, addParams, true); - callBack(data); - }).catch(error => { - LOG.error(TAG + 'addMyCard' + 'insert contact error: ' + error); - }); - }, - - /** - * Edit my business card - * - * @param {string} DAHelper Database path - * @param {Object} addParams Contact Information - * @param {Object} callBack The contact ID - */ - updateMyCard: function (DAHelper, addParams, callBack) { - var condition = new ohosDataAbility.DataAbilityPredicates(); - condition.equalTo('raw_contact_id', addParams.contactId + ''); - DAHelper.delete( - Constants.uri.PROFILE_CONTACT_DATA_URI, - condition, - ).then(data => { - this.dealParam(DAHelper, addParams, true); - callBack(addParams.contactId); - }).catch(error => { - LOG.error(TAG + 'updateMyCard' + 'update contact error: ' + error); - }); - }, - - /** - * Edit Contact Information - * - * @param {string} DAHelper Database path - * @param {Object} addParams Contact Information - * @param {Object} callBack The contact ID - */ - updateContact: async function (DAHelper, addParams, callBack) { - var condition = new ohosDataAbility.DataAbilityPredicates(); - condition.equalTo('raw_contact_id', addParams.contactId + ''); - DAHelper.delete( - Constants.uri.CONTACT_DATA_URI, - condition, - ).then(data => { - this.dealParam(DAHelper, addParams); - callBack(addParams.contactId); - }).catch(error => { - LOG.error(TAG + 'updateContact' + 'update contact error: ' + error); - }); - }, - - /** - * Get my business card information - * - * @param {string} DAHelper Database path - * @param {number} contactId The contact ID - * @param {Object} callBack Return contact data - */ - getCardDetails: function (DAHelper, contactId, callBack) { - var resultColumns = [ - 'contact_id', - 'favorite', - 'display_name', - 'detail_info', - 'type_id', - 'content_type', - 'alpha_name', - 'position', - 'extend7', - 'custom_data', - 'is_preferred_number', - 'photo_first_name', - 'phonetic_name' - ]; - var condition = new ohosDataAbility.DataAbilityPredicates(); - if (!Utils.isEmpty(contactId)) { - condition.equalTo('contact_id', contactId); - } - DAHelper.query(Constants.uri.PROFILE_CONTACT_DATA_URI, resultColumns, condition).then(resultSet => { - var contactDetailInfo = {}; - do { - this.dealResult(resultSet, contactDetailInfo); - } while (resultSet.goToNextRow()); - resultSet.close(); - LOG.info(TAG + 'getCardDetails' + ' card contactDetailInfo is ==' + contactDetailInfo); - var res = {}; - res.data = contactDetailInfo; - callBack(res); - }).catch(error => { - LOG.info(TAG + 'getCardDetails' + 'logMessage get call log error:' + error); - }); - }, - - /** - * Get my business card's contactId,display_name - * - * @param {string} DAHelper Database path - * @param {Object} callBack Return business card Detail - */ - getMyCardId: function (DAHelper, callBack) { - var resultColumns = [ - 'contact_id', - 'display_name' - ]; - var condition = new ohosDataAbility.DataAbilityPredicates(); - DAHelper.query(Constants.uri.PROFILE_ROW_CONTACTS_URI, resultColumns, condition).then(resultSet => { - var cardMainInfo = ''; - if (!Utils.isEmpty(resultSet) && resultSet.rowCount > 0) { - resultSet.goToFirstRow(); - cardMainInfo = { - cardId: resultSet.getString(0), - cardName: resultSet.getString(1) - }; - } else { - LOG.info(TAG + 'getMyCardId' + 'card info is empty!'); - } - resultSet.close(); - callBack(cardMainInfo); - }).catch(error => { - LOG.info(TAG + 'getMyCardId' + 'logMessage get call log error:' + error); - }); - } -}; \ No newline at end of file diff --git a/entry/src/main/js/default/model/CalllogModel.js b/entry/src/main/js/default/model/CalllogModel.js deleted file mode 100644 index 41e5a2b..0000000 --- a/entry/src/main/js/default/model/CalllogModel.js +++ /dev/null @@ -1,634 +0,0 @@ -/** - * @file: Call record model - */ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -*/ -import ohosDataAbility from '@ohos.data.dataability'; -import Utils from '../../default/utils/utils.js'; -import Constants from '../common/constants/Constants.js' -import LOG from '../utils/ContactsLog.js'; -import telephony from '@ohos.telephony.call'; - -var TAG = 'calllogModel'; - -export const CALL_LOG_DB_COLUMNS = { - ID: 'id', // Call History ID - PHONE_NUMBER: 'phone_number', // The phone number - CONTACT_NAME: 'display_name', // Contact Name - CALL_TIME: 'create_time', // Time when call records are generated - CALL_DIRECTION: 'call_direction', // Call type: 1 Incoming call, 2 Outgoing call, 3 missed call, 5 rejected call - NUMBER_LOCATION: 'number_location', // Address of number - SIM_ID: 'sim_type', // Call SIM card: 0: card 1, 1: card 2 - CALL_HD: 'is_hd', // Hd call True: HD call false: non-HD call - FORMAT_NUMBER: 'format_number', // Formatting a phone number - IS_READ: 'is_read', // Have read - RING_TIME: 'ring_duration', // The ring time - TALK_TIME: 'talk_duration', // duration - CONTACT_KEY: 'quicksearch_key', // The contact ID - ANSWER_STATE: 'answer_state', - VOICE_MAIL_URI: 'voicemail_uri', // Voice mail related -} -export const ANSWER_STATE = { - MISSED_CALLS : 0, // Did not get through - RECEIVED_CALLS : 1, // Has been switched on - REJECT_CALLS: 2 // reject -} -export const CALL_DIRECTION = { - CALL_IN: 0, // inbound - CALL_OUT: 1 // Breathe out -} -export const CALL_LOG_TYPE = { - CALL_LOG_IN: 1, // inbound - CALL_LOG_OUT: 2, // Breathe out - CALL_LOG_VOICEMAIL: 4, // voicemail - CALL_LOG_MISSED_CALLS: 3, // Don't answer - CALL_LOG_REJECTED: 5, // reject -} -export default { - - /** - * Obtain the full number of call records (2000) and cache them - * - * @param {string} DAHelper Database path - * @param {string} mergeRule Call Record Type - * @param {Object} callBack Call log data - */ - getAllCalls:async function(DAHelper, mergeRule, callBack) { - // The returned dataset field - var resultColumns = [ - CALL_LOG_DB_COLUMNS.ID, - CALL_LOG_DB_COLUMNS.PHONE_NUMBER, - CALL_LOG_DB_COLUMNS.CONTACT_NAME, - CALL_LOG_DB_COLUMNS.CALL_TIME, - CALL_LOG_DB_COLUMNS.CALL_DIRECTION, - CALL_LOG_DB_COLUMNS.NUMBER_LOCATION, - CALL_LOG_DB_COLUMNS.SIM_ID, - CALL_LOG_DB_COLUMNS.CALL_HD, - CALL_LOG_DB_COLUMNS.RING_TIME, - CALL_LOG_DB_COLUMNS.TALK_TIME, - CALL_LOG_DB_COLUMNS.ANSWER_STATE, - CALL_LOG_DB_COLUMNS.FORMAT_NUMBER, - CALL_LOG_DB_COLUMNS.CONTACT_KEY - ]; - var condition = new ohosDataAbility.DataAbilityPredicates(); - condition.limitAs(2000).orderByDesc(CALL_LOG_DB_COLUMNS.CALL_TIME).offsetAs(0); - var resultData = {}; - var resultSet = await DAHelper.query(Constants.uri.CALL_LOG_URI, resultColumns, condition); - if(Utils.isEmpty(resultSet) || resultSet.rowCount == 0){ - LOG.info(TAG + 'getAllCalls' + 'logMessage callLog resultSet is empty!'); - resultData.callLogList = []; - resultData.missedList = []; - resultData.totalCount = 0; - resultData.missedCount = 0; - callBack(resultData); - return; - } - resultSet.goToFirstRow(); - var callLogList = []; - var missedList = []; - do{ - var callLogItem = {}; - callLogItem.id = resultSet.getString(0); - callLogItem.phone = resultSet.getString(1); - callLogItem.name = resultSet.getString(2); - callLogItem.callTime = resultSet.getString(3); - callLogItem.callType = this.getCallLogType(resultSet.getString(4), - resultSet.getString(10));// param: call_direction, answer_state - callLogItem.callTag = resultSet.getString(5); - callLogItem.simType = resultSet.getString(6); - callLogItem.isHd = resultSet.getString(7); - var formattedNumber = resultSet.getString(1); - try{ - formattedNumber = await telephony.formatPhoneNumber(resultSet.getString(1)); - }catch{ - formattedNumber = resultSet.getString(1); - } - callLogItem.formatNumber = formattedNumber; - callLogItem.contactKey = resultSet.getString(12); // Id of a contact associated with call records - callLogList.push(callLogItem); - if (callLogItem.callType == CALL_LOG_TYPE.CALL_LOG_MISSED_CALLS || - callLogItem.callType == CALL_LOG_TYPE.CALL_LOG_REJECTED) { - missedList.push(callLogItem);// Filter missed call data - let timeList = []; - if (mergeRule == 'from_contact') { // Filter calls by missed calls and redial calls - for (var k = 0; k < missedList.length; k++) { - let missedPhone = missedList[k].phone; - for (var i = 0; i < callLogList.length; i++) { - let allSpecialPhone = callLogList[i].phone; - if (missedPhone == allSpecialPhone ) { - let time = callLogList[i].callTime; - let timeNumber = parseInt(time); - let obj = { - 'id': i, - 'timeObj': timeNumber, - }; - timeList.push(obj); - let max = timeList[0].timeObj; - for (var j = 0; j < timeList.length; j++) { - if (timeList[j].timeObj > max) { - max = timeList[j].timeObj; - let n = timeList[j].id; - if (callLogList[n].callType == CALL_LOG_TYPE.CALL_LOG_OUT) { - missedList.splice(k,1); - } - } else { - let m = timeList[0].id - if (callLogList[m].callType == CALL_LOG_TYPE.CALL_LOG_OUT) { - missedList.splice(k,1); - } - } - } - } - } - } - } - } - } while(resultSet.goToNextRow()); - if (mergeRule == 'from_contact') { - resultData.callLogList = this.fillCallLogDataMergeByContact(callLogList); - resultData.missedList = this.fillCallLogDataMergeByContact(missedList); - resultData.totalCount = resultData.callLogList.length; - resultData.missedCount = resultData.missedList.length; - } else { - resultData.callLogList = this.fillCallLogDataMergeByTime(callLogList); - resultData.missedList = this.fillCallLogDataMergeByTime(missedList); - resultData.totalCount = resultSet.rowCount; - resultData.missedCount = missedList.length; - } - resultSet.close(); - callBack(resultData); - }, - - /** - * Gets the voice mailbox list - * - * @param {string} DAHelper Database path - * @param {Object} callBack Voicemail list - */ - getVoicemailList: async function(DAHelper, callBack) { - var condition = new ohosDataAbility.DataAbilityPredicates(); - condition.orderByDesc('create_time'); - var resultColumns = [ - 'id', - 'phone_number', - 'display_name', - 'voicemail_uri', - 'voicemail_type', - 'voice_file_size', - 'voice_duration', - 'voice_status', - 'origin_type', - 'create_time', - ]; - var resultSet = await DAHelper.query(Constants.uri.VOICEMAIL_URI, resultColumns, condition); - var voicemailList = []; - if (Utils.isEmpty(resultSet) || resultSet.rowCount == 0) { - callBack(voicemailList); - LOG.error(TAG + 'getVoicemailList' + 'logMessage voicemailList is empty! resultSet = ' + resultSet); - return; - } - resultSet.goToFirstRow(); - do{ - var voicemailItem = {}; - voicemailItem.id = resultSet.getString(0); - voicemailItem.phone = resultSet.getString(1); - voicemailItem.name = resultSet.getString(2); - voicemailItem.uri = resultSet.getString(3); // voicemail_uri - voicemailItem.callTime = this.getCallTime(resultSet.getString(9)); // create_time - voicemailItem.callType = CALL_LOG_TYPE.CALL_LOG_VOICEMAIL;// param: call_direction, answer_state - voicemailItem.callTag = resultSet.getString(4); // voicemail_type - try{ - voicemailItem.formatNumber = await telephony.formatPhoneNumber(resultSet.getString(1)); - }catch{ - voicemailItem.formatNumber = resultSet.getString(1); - } - voicemailItem.timeDuration = resultSet.getString(6); - voicemailItem.voicemailDuration = this.getTimeString(resultSet.getString(6)) // voice_duration - voicemailItem = this.fillServiceProperty(voicemailItem); - voicemailList.push(voicemailItem); - } while(resultSet.goToNextRow()); - resultSet.close(); - callBack(voicemailList); - }, - - /** - * Generates a string of type 00:00 based on the number of seconds given - * - * @param {number} secondsString A period of voicemail - * @return {string} The time of voice mail playback - */ - getTimeString(secondsString) { - var timeString = '00:00'; - var seconds= parseInt(secondsString); - if (seconds > 60) { - var minutes = parseInt(seconds/60); - timeString = (minutes < 10 ? ('0'+minutes) : minutes)+':' - +((seconds%60) < 10 ? ('0'+(seconds%60)) : (seconds%60)); - } else { - timeString = '00:'+(seconds < 10 ? ('0'+seconds) : seconds); - } - return timeString; - }, - - /** - * Obtain the call record type - * - * @param {string} callDirection Call type - * @param {string} answerState Whether the call is connected - * @return {string} Exhale type - */ - getCallLogType(callDirection, answerState) { - if (callDirection == CALL_DIRECTION.CALL_IN) { - if (answerState == ANSWER_STATE.RECEIVED_CALLS) { - return CALL_LOG_TYPE.CALL_LOG_IN; - } - if (answerState == ANSWER_STATE.MISSED_CALLS) { - return CALL_LOG_TYPE.CALL_LOG_MISSED_CALLS - } - if (answerState == ANSWER_STATE.REJECT_CALLS) { - return CALL_LOG_TYPE.CALL_LOG_REJECTED; - } - } else { - return CALL_LOG_TYPE.CALL_LOG_OUT; - } - }, - - /** - * Page to obtain the call history list - * - * @param {number} pageIndex Page index - * @param {number} pageSize How many pieces of data on a page - * @param {Array} callLogList Call history list - * @return {Array} Call history list - */ - getCallLog:function(pageIndex, pageSize, callLogList) { - var tempList = []; - if (Utils.isEmptyList(callLogList)) { - return []; - } - var length = callLogList.length; - if (length > (pageIndex+1)*pageSize) { - for (var i = pageIndex * pageSize; i < (pageIndex+1)*pageSize; i++) { - tempList.push(callLogList[i]); - } - } else { - for (var i = pageIndex * pageSize; i < length; i++) { - tempList.push(callLogList[i]); - } - } - return tempList; - }, - - /** - * Obtain all call records of these numbers based on the phone number array for displaying call record details - * - * @param {string} DAHelper Database path - * @param {Array} phoneNumbers The phone number - * @param {Object} callBack The callback - */ - async getCallLogListByPhoneNumber(DAHelper, phoneNumbers, callBack) { - if (Utils.isEmptyList(phoneNumbers)) { - return []; - } - var realPhoneNumbers = []; - for (var i = 0; i < phoneNumbers.length; i++) { - realPhoneNumbers.push(Utils.removeSpace(phoneNumbers[i])); - } - var condition = new ohosDataAbility.DataAbilityPredicates(); - condition.in(CALL_LOG_DB_COLUMNS.PHONE_NUMBER, realPhoneNumbers).orderByDesc(CALL_LOG_DB_COLUMNS.CALL_TIME); - var resultColumns = [ - CALL_LOG_DB_COLUMNS.ID, - CALL_LOG_DB_COLUMNS.PHONE_NUMBER, - CALL_LOG_DB_COLUMNS.CONTACT_NAME, - CALL_LOG_DB_COLUMNS.CALL_TIME, - CALL_LOG_DB_COLUMNS.CALL_DIRECTION, - CALL_LOG_DB_COLUMNS.NUMBER_LOCATION, - CALL_LOG_DB_COLUMNS.SIM_ID, - CALL_LOG_DB_COLUMNS.CALL_HD, - CALL_LOG_DB_COLUMNS.RING_TIME, - CALL_LOG_DB_COLUMNS.TALK_TIME, - CALL_LOG_DB_COLUMNS.ANSWER_STATE, - CALL_LOG_DB_COLUMNS.FORMAT_NUMBER - ]; - var resultSet = await DAHelper.query(Constants.uri.CALL_LOG_URI, resultColumns, condition); - var resultList = []; - if(Utils.isEmpty(resultSet) || resultSet.rowCount == 0){ - callBack(resultList); - return; - } - resultSet.goToFirstRow(); - do{ - var callLogItem = {}; - callLogItem.id = resultSet.getString(0); - callLogItem.phone = resultSet.getString(1); - callLogItem.name = resultSet.getString(2); - callLogItem.callTime = resultSet.getString(3); - callLogItem.callType = this.getCallLogType(resultSet.getString(4), - resultSet.getString(10));// param: call_direction, answer_state - callLogItem.callTag = resultSet.getString(5); - callLogItem.simType = resultSet.getString(6); - callLogItem.isHd = resultSet.getString(7); - callLogItem.ringTime = resultSet.getString(8); - callLogItem.talkTime = resultSet.getString(9); - var formattedNumber = resultSet.getString(1); - try{ - formattedNumber = await telephony.formatPhoneNumber(resultSet.getString(1)); - }catch{ - formattedNumber = resultSet.getString(1); - } - callLogItem.formatNumber = formattedNumber; - resultList.push(callLogItem); - } while(resultSet.goToNextRow()); - resultSet.close(); - callBack(resultList); - }, - - /** - * Clearing Call History - * - * @param {string} DAHelper Database path - * @param {Object} callBack - */ - clearCallLog(DAHelper, callBack) { - var condition = new ohosDataAbility.DataAbilityPredicates(); - DAHelper.delete(Constants.uri.CALL_LOG_URI, condition).then(data=>{ - callBack(); - }).catch(error=>{ - LOG.error(TAG + 'clearCallLog' + 'logMessage delete call log error:' + error); - }); - }, - - /** - * Clearing voice Mail - * - * @param {string} DAHelper Database path - * @param {Object} callBack - */ - clearVoicemailList(DAHelper, callBack) { - var condition = new ohosDataAbility.DataAbilityPredicates(); - DAHelper.delete(Constants.uri.VOICEMAIL_URI, condition).then(data=>{ - callBack(); - }).catch(error=>{ - LOG.error(TAG + 'clearVoicemailList' + 'logMessage delete call log error:' + error); - }); - }, - - /** - * In the contact merge case, you can delete call records by phone number or contact ID - * - * @param {string} DAHelper Database path - * @param {Array} phoneNumbers - * @param {number} contactKeys The contact ID - * @param {Object} callBack - */ - deleteCallLogByNumbersOrContacts:async function(DAHelper, phoneNumbers, contactKeys, callBack) { - var condition = new ohosDataAbility.DataAbilityPredicates(); - if (!Utils.isEmptyList(phoneNumbers)) { - condition = condition.in(CALL_LOG_DB_COLUMNS.PHONE_NUMBER, phoneNumbers); - } - if (!Utils.isEmptyList(phoneNumbers) && !Utils.isEmptyList(contactKeys)) { - condition = condition.or(); - } - if (!Utils.isEmptyList(contactKeys)) { - condition = condition.in(CALL_LOG_DB_COLUMNS.CONTACT_KEY, contactKeys); - } - await DAHelper.delete(Constants.uri.CALL_LOG_URI, condition); - callBack(); - }, - - /** - * Delete specified call records by ID - * - * @param {string} DAHelper Database path - * @param {Array} ids The contact ID - * @param {Object} callBack - */ - deleteCallLogByIds: async function (DAHelper, ids, callBack) { - if (Utils.isEmptyList(ids)) { - return; - } - var condition = new ohosDataAbility.DataAbilityPredicates(); - condition.in(CALL_LOG_DB_COLUMNS.ID, ids); - await DAHelper.delete(Constants.uri.CALL_LOG_URI, condition); - callBack(); - }, - - /** - * Delete specified voice mailbox records by ID - * - * @param {string} DAHelper Database path - * @param {Array} ids The contact ID - * @param {Object} callBack - */ - deleteVoicemailByIds: async function (DAHelper, ids, callBack) { - if (Utils.isEmptyList(ids)) { - return; - } - var condition = new ohosDataAbility.DataAbilityPredicates(); - condition.in('id', ids); - await DAHelper.delete(Constants.uri.VOICEMAIL_URI, condition); - callBack(); - }, - - /** - * Deletes records other than the specified IDS - * - * @param {string} DAHelper Database path - * @param {Array} ids The contact ID - * @param {Object} callBack - */ - deleteOtherCallLog(DAHelper, ids, callBack) { - if (Utils.isEmptyList(ids)) { - return; - } - var condition = new ohosDataAbility.DataAbilityPredicates(); - for (var index = 0; index < ids.length; index++) { - condition = condition.notEqualTo('id',ids[index]); - } - DAHelper.delete(Constants.uri.CALL_LOG_URI, condition).then(data=>{ - LOG.info(TAG + 'deleteOtherCallLog' + 'logMessage delete call log by other ids success!!! data:'+data); - callBack(); - }).catch(error=>{ - LOG.error(TAG + 'deleteOtherCallLog' + 'logMessage delete call log error:' + error); - }); - }, - - /** - * In the case of merging by contact, improve the post-processing of call record service data based on the original call record data - * - * @param {Array} callLogList - * @return {Array} Call records - */ - fillCallLogDataMergeByContact: function(callLogList) { - var resultList = []; - if (Utils.isEmptyList(callLogList)) { - return resultList; - } - var contactTempMap = new Map(); - var phoneNumberMap = new Map(); - for (var i = 0; i < callLogList.length; i++) { - var element = this.fillServiceProperty(callLogList[i]); - element.callTime = this.getCallTime(callLogList[i].callTime); - element.num = 1; // In the case of contact merge, the merged record entry is fixed as 1 - element.ids = [element.id]; // In the case of contact merging, the ids of the merged record is its own ID - if (Utils.isEmpty(element.contactKey)) { // If there is no call record of the contact, merge it by phone number - if (!phoneNumberMap.has(element.phone)) { - resultList.push(element); - phoneNumberMap.set(element.phone); - } - } else { // If contact call records exist, merge calls based on contacts - let isContactKey = contactTempMap.has(element.contactKey); - if (!isContactKey) { - resultList.push(element); - contactTempMap.set(element.contactKey); - } - } - } - return resultList; - }, - - /** - * In the case of time consolidation, improve the post-processing of call record service data based on the original call record data - * - * @param callLogList - * @return - */ - fillCallLogDataMergeByTime: function(callLogList) { - var resultList = []; - if (Utils.isEmptyList(callLogList)) { - return resultList; - } - var tempElement = this.fillServiceProperty(callLogList[0]); // Caches call records starting from the first record - var tempCallTime = tempElement.callTime; // Retain the creation time of the last call record and display the time after the call record is merged. - var tempCallType = tempElement.callType; // The type of the latest call record is saved and displayed after the call record is merged. - var num = 1; - var ids = []; - ids.push(callLogList[0].id); - for (var i = 1; i < callLogList.length; i++) { - var element = callLogList[i]; - if(this.callLogMergeCheck(tempElement, element)) {// Check whether the cache field needs to be merged with the current field - num++; - ids.push(element.id);// Puts the latest record ID into the merge array - } else { - tempElement.num = num; - tempElement.ids = ids; - tempElement.callTime = this.getCallTime(tempCallTime); // Displays the creation time of the last saved record - tempElement.callType = tempCallType; - resultList.push(tempElement); - num = 1; - ids = []; - tempCallTime = element.callTime; - tempCallType = element.callType; - ids.push(element.id); - } - tempElement = this.fillServiceProperty(element); - } - if (tempElement != null) { - tempElement.num = num; - tempElement.ids = ids; - tempElement.callTime = this.getCallTime(tempCallTime); - tempElement.callType = tempCallType; - resultList.push(tempElement); - } - return resultList; - }, - - /** - * To verify whether two call records need to be merged by time, return true if the call records need to be merged; otherwise return false - * - * @param oldElement Merge call records before - * @param newElement Merged call records - * @return - */ - callLogMergeCheck:function(oldElement, newElement){ - if (oldElement.phone.trim() == newElement.phone.trim()) { - if (oldElement.callType == 1||oldElement.callType == 2) { - if (newElement.callType == 1 || newElement.callType ==2) { - return true; - } - return false; - } - if (newElement.callType == 3 || newElement.callType == 5) { - return true; - } - } - return false; - }, - - /** - * Add data attributes required by the business - * - * @param element Call records - * @return - */ - fillServiceProperty:function (element) { - element.leftDst = 0; - element.checked = false; - if (element.callType == CALL_LOG_TYPE.CALL_LOG_VOICEMAIL) { - element.showMail = false; - element.start = '00:00'; - element.percent = 0; - element.playState = 'start'; - element.volumeState = 'volume'; - element.percentProgress = 0; - element.ids = [element.id]; - element.num = 1; - } - return element; - }, - - /** - * Get talk time - * - * @param date Call record creation time stamp - * @return {object} Talk time - */ - getCallTime(date) { - let result = ""; - if (isNaN(date)) { // If the value is not a number, it is not parsed - return date; - } - var timestamp = parseInt(date)*1000; - let callTime = new Date(timestamp); - let now = new Date(); - if (callTime.getTime() > now.getTime()) { - result = callTime.getFullYear() + '/' + (callTime.getMonth()+1) + '/' + callTime.getDate(); - } else if (callTime.getFullYear() == now.getFullYear()) { - if (callTime.getMonth() == now.getMonth()) { - let timeDiff = parseInt((now.getTime() - callTime.getTime()) / 60000); - let dayDiff = now.getDate() - callTime.getDate(); - if (dayDiff == 0) { - if (timeDiff == 0) { - result = this.$t('recordDetail.language.justNow'); - } else if (timeDiff < 60) { - result = timeDiff + this.$t('recordDetail.language.minutesAgo'); - } else { - result = callTime.getHours() - + ':' + (callTime.getMinutes() < 10 ? '0' + callTime.getMinutes() : callTime.getMinutes()); - } - } else if (dayDiff == 1) { - result = this.$t('recordDetail.language.yesterday'); - } else { - result = (callTime.getMonth()+1) + '/' + callTime.getDate(); - } - } else { - result = (callTime.getMonth()+1) + '/' + callTime.getDate(); - } - } else { - result = callTime.getFullYear() + '/' + (callTime.getMonth()+1) + '/' + callTime.getDate(); - } - return result; - } -} diff --git a/entry/src/main/js/default/model/ContactDetailModel.js b/entry/src/main/js/default/model/ContactDetailModel.js deleted file mode 100644 index 3eca072..0000000 --- a/entry/src/main/js/default/model/ContactDetailModel.js +++ /dev/null @@ -1,338 +0,0 @@ -/** - * @file: Contact Details Model - */ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -*/ - -import ohosDataAbility from '@ohos.data.dataability'; -import Utils from '../../default/utils/utils.js'; -import LOG from '../utils/ContactsLog.js'; -import CONSTANTS from '../common/constants/Constants.js'; -import backgroundColor from '../common/constants/color.js'; - -var PortraitColor = backgroundColor.Color; -var DetailsBgColor = backgroundColor.detailColor; - -var TAG = 'contactDetailModel'; - -export default { - - /** - * Obtain contact details - * - * @param {string} DAHelper Database path - * @param {Object} actionData Contact data - * @param {Object} callback Contact Details - */ - getContactById: function (DAHelper, actionData, callback) { - var contactId = actionData.contactId; - var resultColumns = [ - 'contact_id', - 'favorite', - 'display_name', - 'detail_info', - 'type_id', - 'content_type', - 'alpha_name', - 'phonetic_name', - 'position', - 'group_name', - 'extend7', - 'custom_data', - 'is_preferred_number', - 'photo_first_name' - ]; - var condition = new ohosDataAbility.DataAbilityPredicates(); - condition.equalTo('contact_id', contactId); - DAHelper.query(CONSTANTS.uri.CONTACT_DATA_URI, resultColumns, condition).then(resultSet => { - var contactDetailInfo = {}; - // If it is a search, the match type is passed out - if (actionData.searchMimetype) { - contactDetailInfo.searchMimetype = []; - } - do { - this.dealResult(resultSet, contactDetailInfo, actionData); - } while (resultSet.goToNextRow()); - resultSet.close(); - LOG.info(TAG + 'getContactById' + ' contactDetailInfo is ==' + contactDetailInfo); - var res = {}; - res.data = contactDetailInfo; - callback(res); - }).catch(error => { - LOG.info(TAG + 'getContactById' + ' get call log error:' + error); - }); - }, - - /** - * Process contact details - * - * @param {Object} resultSet - * @param {Object} contactDetailInfo Contact Details - * @param {Object} actionData Contact data - */ - dealResult: function (resultSet, contactDetailInfo, actionData) { - var contactId = resultSet.getString(resultSet.getColumnIndex('contact_id')); - var rawContactId = resultSet.getString(resultSet.getColumnIndex('raw_contact_id')); - var favorite = resultSet.getString(resultSet.getColumnIndex('favorite')); - var nameSuffix = resultSet.getString(resultSet.getColumnIndex('photo_first_name')); - var typeText = resultSet.getString(resultSet.getColumnIndex('content_type')); - var detailInfo = resultSet.getString(resultSet.getColumnIndex('detail_info')); - var displayName = resultSet.getString(resultSet.getColumnIndex('display_name')); - var alphaName = resultSet.getString(resultSet.getColumnIndex('alpha_name')); - var familyNamePhonetic = resultSet.getString(resultSet.getColumnIndex('phonetic_name')); - var labelId = resultSet.getString(resultSet.getColumnIndex('extend7')); - var labelName = resultSet.getString(resultSet.getColumnIndex('custom_data')); - labelName = labelName ? labelName : ''; - var groupName = resultSet.getString(resultSet.getColumnIndex('group_name')); - var position = resultSet.getString(resultSet.getColumnIndex('position')); - var isPrimaryNum = resultSet.getString(resultSet.getColumnIndex('is_preferred_number')); - - contactDetailInfo.emptyNameData = displayName; - - if (favorite == 0) { - contactDetailInfo.favorite = false; - contactDetailInfo.starred = 0; - } else { - contactDetailInfo.favorite = true; - contactDetailInfo.starred = 1; - } - - // If it is a search, the match type is passed out - if (actionData.searchMimetype) { - if (detailInfo.indexOf(actionData.searchValue) != -1 || position.indexOf(actionData.searchValue) != -1) { - contactDetailInfo.searchMimetype.push('/' + typeText); - } - } - - contactDetailInfo.nameSuffix = nameSuffix; - - contactDetailInfo.contactId = contactId; - - contactDetailInfo.rawContactId = rawContactId; - - contactDetailInfo.portraitColor = PortraitColor[contactId % 6]; - - contactDetailInfo.detailsBgColor = DetailsBgColor[contactId % 6]; - - this.determineFieldType(typeText, detailInfo, labelId, labelName, contactDetailInfo, position, isPrimaryNum, - familyNamePhonetic, nameSuffix, groupName, alphaName); - }, - - /** - * Determine the field type - * - * @param {string} typeText - * @param {string} detailInfo - * @param {number} labelId - * @param {string} labelName - * @param {Object} contactDetailInfo Contact Details - * @param {string} position - * @param {number} isPrimaryNum - * @param {string} familyNamePhonetic - * @param {string} nameSuffix - * @param {string} groupName - * @param {string} alphaName - */ - determineFieldType: function (typeText, detailInfo, labelId, labelName, contactDetailInfo, position, isPrimaryNum, - familyNamePhonetic, nameSuffix, groupName, alphaName) { - var determineInfo = { - 'typeText': typeText, - 'detailInfo': detailInfo, - 'nameSuffix': nameSuffix, - 'labelId': labelId, - 'labelName': labelName, - 'contactDetailInfo': contactDetailInfo, - 'position': position, - 'isPrimaryNum': isPrimaryNum, - 'familyNamePhonetic': familyNamePhonetic, - 'groupName': groupName, - 'alphaName': alphaName - } - - switch (determineInfo.typeText) { - case 'email': - var email = { - 'email': determineInfo.detailInfo, - 'labelId': determineInfo.labelId, - 'labelName': determineInfo.labelName, - 'showP': true - }; - if (determineInfo.contactDetailInfo.emails) { - determineInfo.contactDetailInfo.emails.push(email); - } else { - determineInfo.contactDetailInfo.emails = [email]; - } - break; - case 'im': - var imAddress = { - 'imAddress': determineInfo.detailInfo, - 'labelId': determineInfo.labelId, - 'labelName': determineInfo.labelName, - 'showP': true - }; - if (determineInfo.contactDetailInfo.imAddresses) { - determineInfo.contactDetailInfo.imAddresses.push(imAddress); - } else { - determineInfo.contactDetailInfo.imAddresses = [imAddress]; - } - break; - case 'nickname': - determineInfo.contactDetailInfo.nickName = { - 'nickName': determineInfo.detailInfo - }; - break; - case 'organization': - determineInfo.contactDetailInfo.organization = { - 'name': determineInfo.detailInfo, - 'title': determineInfo.position - }; - break; - case 'phone': - var phoneNumber = { - 'isPrimary': determineInfo.isPrimaryNum, - 'labelId': determineInfo.labelId, - 'labelName': determineInfo.labelName, - 'phoneAddress': 'N', - 'phoneNumber': determineInfo.detailInfo, - 'showP': true, - 'blueStyle': false - }; - if (determineInfo.contactDetailInfo.phoneNumbers) { - determineInfo.contactDetailInfo.phoneNumbers.push(phoneNumber); - } else { - determineInfo.contactDetailInfo.phoneNumbers = [phoneNumber]; - } - break; - } - this.switchNext(determineInfo); - }, - switchNext: function (determineInfo) { - switch (determineInfo.typeText) { - case 'name': - determineInfo.contactDetailInfo.name = { - 'familyNamePhonetic': determineInfo.familyNamePhonetic, - 'fullName': determineInfo.detailInfo, - 'middleName': '', - 'givenName': '', - 'nameSuffix': determineInfo.nameSuffix, - 'alphaName': determineInfo.alphaName - }; - break; - case 'postal_address': - var postalAddress = { - 'labelId': determineInfo.labelId, - 'labelName': determineInfo.labelName, - 'postalAddress': determineInfo.detailInfo, - 'showP': true - }; - if (determineInfo.contactDetailInfo.postalAddresses) { - determineInfo.contactDetailInfo.postalAddresses.push(postalAddress); - } else { - determineInfo.contactDetailInfo.postalAddresses = [postalAddress]; - } - break; - case 'photo': - break; - case 'group_membership': - var group = { - title: determineInfo.groupName, - groupId: determineInfo.detailInfo - }; - if (determineInfo.contactDetailInfo.groups) { - determineInfo.contactDetailInfo.groups.push(group); - } else { - determineInfo.contactDetailInfo.groups = [group]; - } - break; - case 'note': - determineInfo.contactDetailInfo.note = { - 'noteContent': determineInfo.detailInfo - }; - break; - case 'contact_event': - var event = { - 'labelId': determineInfo.labelId, - 'labelName': determineInfo.labelName, - 'eventDate': determineInfo.detailInfo, - 'showP': true, - 'showF': true, - 'showS': true - }; - if (determineInfo.contactDetailInfo.events) { - determineInfo.contactDetailInfo.events.push(event); - } else { - determineInfo.contactDetailInfo.events = [event]; - } - break; - case 'website': - var website = { - 'website': determineInfo.detailInfo, - 'showP': false - }; - if (determineInfo.contactDetailInfo.websites) { - determineInfo.contactDetailInfo.websites.push(website); - } else { - determineInfo.contactDetailInfo.websites = [website]; - } - break; - case 'relation': - var relation = { - 'labelId': determineInfo.labelId, - 'labelName': determineInfo.labelName, - 'relationName': determineInfo.detailInfo, - 'showP': true - }; - if (determineInfo.contactDetailInfo.relations) { - determineInfo.contactDetailInfo.relations.push(relation); - } else { - determineInfo.contactDetailInfo.relations = [relation]; - } - break; - default: - break; - } - }, - - /** - * Obtain the contact ID of a phone number - * - * @param {string} DAHelper - * @param {number} number - * @param {Object} callBack The contact ID - */ - getContactIdByNumber: async function (DAHelper, number, callBack) { - if (Utils.isEmpty(number)) { - return; - } - var resultColumns = [ - 'raw_contact_id', - ]; - var cleanNumber = Utils.removeSpace(number); - var condition = new ohosDataAbility.DataAbilityPredicates(); - condition.equalTo('detail_info', cleanNumber); - condition.and(); - condition.equalTo('is_deleted', 0); - var resultSet = await DAHelper.query(CONSTANTS.uri.CONTACT_DATA_URI, resultColumns, condition); - if (Utils.isEmpty(resultSet) || resultSet.rowCount == 0) { - LOG.info(TAG + 'getContactIdByNumber' + ' contactId resultSet is empty!'); - callBack(); - return; - } - resultSet.goToFirstRow(); - var contactId = resultSet.getString(0); - resultSet.close(); - callBack(contactId); - } -}; \ No newline at end of file diff --git a/entry/src/main/js/default/model/ContactModel.js b/entry/src/main/js/default/model/ContactModel.js deleted file mode 100644 index ed5a497..0000000 --- a/entry/src/main/js/default/model/ContactModel.js +++ /dev/null @@ -1,236 +0,0 @@ -/** - * @file: The contact model - */ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -import LOG from '../utils/ContactsLog.js'; -import ohosDataAbility from '@ohos.data.dataability'; -import Constants from '../common/constants/Constants.js'; -import GroupsModel from './GroupsModel.js'; -import Utils from '../utils/Utils.js'; -import backgroundColor from '../common/constants/color.js'; - -var TAG = 'contactModel'; -export default { - - /** - * Query the created group - * - * @param {string} DAHelper Database path - * @param {Object} data - * @param {Object} callback - */ - queryCustomizeGroups: async function (DAHelper, data, callback) { - var defaultData = { - 'isCheckedCustomize': false, - 'isCheckedOtherCustomize': false - }; - let ret = data.ret; - LOG.info(TAG + 'queryCustomizeGroups' + 'get customize json=' + ret); - var value = ret == 'false' ? defaultData : JSON.parse(ret); - if (value.isCheckedOtherCustomize) { - - data.hasGroup = 0; - } - var groupIds = []; - if (value.hasOwnProperty('checkedList')) { - value.checkedList.forEach(id => { - groupIds.push(id); - }); - if (!Utils.isEmptyList(groupIds)) { - var actionData = { - 'groupIds': groupIds - }; - var result = await GroupsModel.queryGroupsMembers(DAHelper, actionData); - LOG.info(TAG + 'queryCustomizeGroups' + 'Contacts GroupsModel: ' + result.contactIds); - data.contactIds = result.contactIds; - } - } - this.queryContacts(DAHelper, data, callback); - }, - - /** - * Querying Contacts - * - * @param {string} DAHelper Database path - * @param {Object} data - * @param {Object} callback - */ - queryContacts: async function (DAHelper, data, callback) { - var resultColumns = ['id as contactId', 'display_name as emptyNameData', 'sort_first_letter as namePrefix', - 'photo_first_name as nameSuffix', 'company as company', 'position as position']; - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - conditionArgs.equalTo('is_deleted', '0').orderByAsc('sort_first_letter') - .offsetAs(data.page * data.limit).limitAs(data.limit); - - if (data.hasOwnProperty('hasGroup') || data.hasOwnProperty('contactIds')) { - LOG.info(TAG + 'queryContacts' + 'query groups contacts.'); - conditionArgs.beginWrap(); - } - if (data.hasOwnProperty('hasGroup')) { - conditionArgs.equalTo('has_group', 0); - } - if (data.hasOwnProperty('hasGroup') && data.hasOwnProperty('contactIds')) { - conditionArgs.or(); - } - if (data.hasOwnProperty('contactIds')) { - conditionArgs.in('id', data.contactIds); - } - if (data.hasOwnProperty('hasGroup') || data.hasOwnProperty('contactIds')) { - conditionArgs.endWrap(); - } - var result = {}; - LOG.info(TAG + 'queryContacts' + 'Contacts requestInit get DAHelper.query --------------start'); - var resultSet = await DAHelper.query(Constants.uri.CONTACTS_URI_PREFIX - + 'contact', resultColumns, conditionArgs); - LOG.info(TAG + 'queryContacts' + 'Contacts requestInit get DAHelper.query --------------end'); - result.code = 0; - var resultList = []; - if (resultSet.rowCount > 0) { - resultSet.goToFirstRow(); - do { - var jsonObj = {}; - jsonObj.contactId = resultSet.getString(resultSet.getColumnIndex('contactId')); - var name = resultSet.getString(resultSet.getColumnIndex('emptyNameData')); - var frist = name.substr(0, 1); - if ((frist >= 'a' && frist <= 'z') || (frist >= 'A' && frist <= 'Z')) { - jsonObj.namePrefix = frist.toUpperCase(); - } else { - jsonObj.namePrefix = '0'; - } - jsonObj.emptyNameData = name; - jsonObj.nameSuffix = resultSet.getString(resultSet.getColumnIndex('nameSuffix')); - jsonObj.company = resultSet.getString(resultSet.getColumnIndex('company')); - jsonObj.position = resultSet.getString(resultSet.getColumnIndex('position')); - jsonObj.portraitColor = backgroundColor.Color[Math.abs(jsonObj.contactId) % 6]; - jsonObj.show = false; - resultList.push(jsonObj); - } while (resultSet.goToNextRow()); - } - resultSet.close(); - result.resultList = resultList; - LOG.info(TAG + 'queryContacts' + 'query contacts list =' + result); - this.queryContactsCount(DAHelper, data, result, callback); - }, - - /** - * Querying the Number of Contacts - * - * @param {string} DAHelper Database path - * @param {Object} data - * @param {Object} result Contact data - * @param {Object} callback - */ - queryContactsCount: async function (DAHelper, data, result, callback) { - var resultColumns = ['id']; - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - conditionArgs.equalTo('is_deleted', '0'); - LOG.info(TAG + 'queryContactsCount' + 'query groups contacts count data = ' + data); - if (data.hasOwnProperty('hasGroup') || data.hasOwnProperty('contactIds')) { - LOG.info(TAG + 'queryContactsCount' + 'query groups contacts count'); - conditionArgs.beginWrap(); - } - if (data.hasOwnProperty('hasGroup')) { - conditionArgs.equalTo('has_group', 0); - } - if (data.hasOwnProperty('hasGroup') && data.hasOwnProperty('contactIds')) { - conditionArgs.or(); - } - if (data.hasOwnProperty('contactIds')) { - conditionArgs.in('id', data.contactIds); - } - if (data.hasOwnProperty('hasGroup') || data.hasOwnProperty('contactIds')) { - conditionArgs.endWrap(); - } - var resultSet = await DAHelper.query(Constants.uri.CONTACTS_URI_PREFIX - + 'contact', resultColumns, conditionArgs); - LOG.info(TAG + 'queryContactsCount' + 'query contacts count =' + resultSet.rowCount); - result.contactCount = resultSet.rowCount; - callback(result); - }, - - /** - * Contact paging - * - * @param {string} DAHelper Database path - * @param {Object} data - * @param {Object} callback - */ - queryPageContacts: async function (DAHelper, data, callback) { - var resultColumns = ['id as contactId', 'display_name as emptyNameData', 'sort_first_letter as namePrefix', - 'photo_first_name as nameSuffix', 'company as company', 'position as position']; - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - conditionArgs.equalTo('is_deleted', '0').orderByAsc('sort_first_letter') - .offsetAs(data.page * data.limit).limitAs(data.limit); - - if (data.hasOwnProperty('hasGroup') || data.hasOwnProperty('contactIds')) { - LOG.info(TAG + 'queryPageContacts' + 'query groups contacts.'); - conditionArgs.beginWrap(); - } - if (data.hasOwnProperty('hasGroup')) { - conditionArgs.equalTo('has_group', 0); - } - if (data.hasOwnProperty('hasGroup') && data.hasOwnProperty('contactIds')) { - conditionArgs.or(); - } - if (data.hasOwnProperty('contactIds')) { - conditionArgs.in('id', data.contactIds); - } - if (data.hasOwnProperty('hasGroup') || data.hasOwnProperty('contactIds')) { - conditionArgs.endWrap(); - } - var result = {}; - var resultSet = await DAHelper.query(Constants.uri.CONTACTS_URI_PREFIX - + 'contact', resultColumns, conditionArgs); - result.code = 0; - var resultList = []; - if (resultSet.rowCount > 0) { - resultSet.goToFirstRow(); - do { - var jsonObj = {}; - jsonObj.contactId = resultSet.getString(resultSet.getColumnIndex('contactId')); - jsonObj.emptyNameData = resultSet.getString(resultSet.getColumnIndex('emptyNameData')); - jsonObj.namePrefix = resultSet.getString(resultSet.getColumnIndex('namePrefix')); - jsonObj.nameSuffix = resultSet.getString(resultSet.getColumnIndex('nameSuffix')); - jsonObj.company = resultSet.getString(resultSet.getColumnIndex('company')); - jsonObj.position = resultSet.getString(resultSet.getColumnIndex('position')); - jsonObj.portraitColor = backgroundColor.Color[Math.abs(jsonObj.contactId) % 6]; - jsonObj.show = false; - resultList.push(jsonObj); - } while (resultSet.goToNextRow()); - } - result.resultList = resultList; - LOG.info(TAG + 'queryPageContacts' + 'query page contacts list =' + result); - callback(result); - }, - - /** - * Deleting contacts - * - * @param {string} DAHelper Database path - * @param {Object} data Contact data - * @param {Object} callback - */ - deleteContacts: async function (DAHelper, data, callback) { - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - conditionArgs.equalTo('id', data.contactId); - LOG.info(TAG + 'deleteContacts' + 'delete contacts ----------------start'); - var result = await DAHelper.delete(Constants.uri.CONTACTS_URI_PREFIX + 'contact', conditionArgs); - LOG.info(TAG + 'deleteContacts' + 'delete contacts result = ' + result); - callback(result); - } -}; \ No newline at end of file diff --git a/entry/src/main/js/default/model/CustomizeModel.js b/entry/src/main/js/default/model/CustomizeModel.js deleted file mode 100644 index 96fd53b..0000000 --- a/entry/src/main/js/default/model/CustomizeModel.js +++ /dev/null @@ -1,58 +0,0 @@ -/** - * @file: The custom model - */ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -import ohosDataAbility from '@ohos.data.dataability'; -import LOG from '../utils/ContactsLog.js'; -import Constants from '../common/constants/Constants.js'; - -var TAG = 'customizeModel'; - -export default { - - /** - * Query group - * - * @param {string} DAHelper Database address - * @param {Object} callback - */ - queryGroups: async function (DAHelper, callback) { - var resultColumns = ['id as id', 'group_name as title']; - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - conditionArgs.orderByAsc('id'); - var result = {}; - var resultSet = await DAHelper.query(Constants.uri.CONTACTS_URI_PREFIX - + 'groups', resultColumns, conditionArgs); - result.code = 0; - var resultList = []; - LOG.info(TAG + 'queryGroups' + 'query customize groups count =' + resultSet.rowCount); - if (resultSet.rowCount > 0) { - resultSet.goToFirstRow(); - do { - var jsonObj = {}; - jsonObj.id = resultSet.getString(resultSet.getColumnIndex('id')); - jsonObj.title = resultSet.getString(resultSet.getColumnIndex('title')); - jsonObj.checked = false; - resultList.push(jsonObj); - } while (resultSet.goToNextRow()); - } - result.resultList = resultList; - LOG.info(TAG + 'queryGroups' + 'query customize groups list =' + result); - callback(result); - } -}; \ No newline at end of file diff --git a/entry/src/main/js/default/model/FavoritesModel.js b/entry/src/main/js/default/model/FavoritesModel.js deleted file mode 100644 index d8b84de..0000000 --- a/entry/src/main/js/default/model/FavoritesModel.js +++ /dev/null @@ -1,388 +0,0 @@ -/** - * @file: Collect the Model - */ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -import LOG from '../utils/ContactsLog.js'; -import ohosDataAbility from '@ohos.data.dataability'; -import CONSTANTS from '../common/constants/Constants.js'; -import backgroundColor from '../common/constants/color.js'; - -var TAG = 'favoritesModel'; - -export default { - /** - * Query unfavorites contacts - * - * @param {string} DAHelper Database address - * @param {Object} data Maximum number of contacts on the page and whether to favorites - * @param {Object} callback - */ - queryUnFavoritesContacts: async function (DAHelper, data, callback) { - var resultColumns = ['id as contactId', 'display_name as emptyNameData', 'sort_first_letter as namePrefix', - 'photo_first_name as nameSuffix', 'company as company', 'position as position']; - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - conditionArgs.equalTo('is_deleted', '0').equalTo('favorite', data.star + '') - .offsetAs(data.page * data.limit).limitAs(data.limit); - var result = {}; - var resultSet = await DAHelper.query(CONSTANTS.uri.CONTACT_URI, resultColumns, conditionArgs); - result.code = 0; - var resultList = []; - if (resultSet.rowCount > 0) { - resultSet.goToFirstRow(); - do { - var jsonObj = {}; - jsonObj.contactId = resultSet.getString(resultSet.getColumnIndex('contactId')); - jsonObj.emptyNameData = resultSet.getString(resultSet.getColumnIndex('emptyNameData')); - jsonObj.namePrefix = resultSet.getString(resultSet.getColumnIndex('namePrefix')); - jsonObj.nameSuffix = resultSet.getString(resultSet.getColumnIndex('nameSuffix')); - jsonObj.company = resultSet.getString(resultSet.getColumnIndex('company')); - jsonObj.position = resultSet.getString(resultSet.getColumnIndex('position')); - jsonObj.portraitColor = backgroundColor.Color[Math.abs(jsonObj.contactId) % 6]; - jsonObj.show = false; - resultList.push(jsonObj); - } while (resultSet.goToNextRow()); - } - resultSet.close(); - result.resultList = resultList; - result.contactCount = resultList.length; - callback(result); - }, - - /** - * Querying Favorite Contacts - * - * @param {string} DAHelper Database address - * @param {Object} data Maximum number of contacts on the page and whether to favorites - * @param {Object} callback - */ - queryFavoritesContacts: async function (DAHelper, data, callback) { - var resultColumns = ['id as contactId', 'display_name as emptyNameData', 'sort_first_letter as namePrefix', - 'photo_first_name as nameSuffix', 'company as company', 'position as position', 'favorite_order']; - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - conditionArgs.equalTo('is_deleted', '0').equalTo('favorite', data.star + '').orderByAsc('favorite_order'); - var result = {}; - var resultSet = await DAHelper.query(CONSTANTS.uri.CONTACT_URI, resultColumns, conditionArgs); - result.code = 0; - var resultList = []; - if (resultSet.rowCount > 0) { - resultSet.goToFirstRow(); - do { - var jsonObj = {}; - jsonObj.contactId = resultSet.getString(resultSet.getColumnIndex('contactId')); - jsonObj.emptyNameData = resultSet.getString(resultSet.getColumnIndex('emptyNameData')); - jsonObj.namePrefix = resultSet.getString(resultSet.getColumnIndex('namePrefix')); - jsonObj.nameSuffix = resultSet.getString(resultSet.getColumnIndex('nameSuffix')); - jsonObj.company = resultSet.getString(resultSet.getColumnIndex('company')); - jsonObj.position = resultSet.getString(resultSet.getColumnIndex('position')); - jsonObj.favorite_order = resultSet.getLong(resultSet.getColumnIndex('favorite_order')); - jsonObj.portraitColor = backgroundColor.Color[Math.abs(jsonObj.contactId) % 6]; - jsonObj.show = false; - jsonObj.star = 1; - resultList.push(jsonObj); - } while (resultSet.goToNextRow()); - } - resultSet.close(); - result.resultList = resultList; - result.contactCount = resultList.length; - this.queryFrequentlyContact(DAHelper, data, result, callback); - }, - - /** - * Query the number of favorite contacts - * - * @param {string} DAHelper Database address - * @param {number} star Whether the collection - * @param {Object} result Collected contact data - * @param {Object} callback - */ - queryFavoriteContactsCount: async function (DAHelper, star, result, callback) { - var resultColumns = ['id']; - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - conditionArgs.equalTo('favorite', star + '').equalTo('is_deleted', '0'); - var resultSet = await DAHelper.query(CONSTANTS.uri.CONTACT_URI, resultColumns, conditionArgs); - result.contactCount = resultSet.rowCount; - resultSet.close(); - callback(result); - }, - - /** - * Querying Common Contacts - * - * @param {string} DAHelper Database address - * @param {Object} data Maximum number of contacts on the page and whether to favorites - * @param {Object} result Common Contact Data - * @param {Object} callback - */ - queryFrequentlyContact: async function (DAHelper, data, result, callback) { - var resultColumns = ['type_id as type', 'raw_contact_id as contactId', 'detail_info as detailInfo', - 'photo_first_name as nameSuffix', 'extend7 as labelId', 'custom_data as labelName']; - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - conditionArgs.equalTo('is_deleted', '0').notEqualTo('favorite', data.star + '') - .greaterThanOrEqualTo('contacted_count', 1).in('type_id', ['6', '5']).orderByAsc('raw_contact_id'); - var resultSet = await DAHelper.query(CONSTANTS.uri.CONTACT_DATA_URI, resultColumns, conditionArgs); - result.code = 0; - var resultList = []; - if (resultSet.rowCount > 0) { - resultSet.goToFirstRow(); - var resultMap = new Map(); - do { - var type = resultSet.getString(resultSet.getColumnIndex('type')); - var contactId = resultSet.getString(resultSet.getColumnIndex('contactId')); - switch (type) { - case '6': - if (resultMap.has(contactId)) { - var updateJsonObj = resultMap.get(contactId); - updateJsonObj.contactId = resultSet.getString(resultSet.getColumnIndex('contactId')); - updateJsonObj.name = resultSet.getString(resultSet.getColumnIndex('detailInfo')); - updateJsonObj.nameSuffix = resultSet.getString(resultSet.getColumnIndex('nameSuffix')); - updateJsonObj.portraitColor = backgroundColor.Color[Math.abs(updateJsonObj.contactId) % 6]; - } else { - var addJsonObj = {}; - addJsonObj.contactId = resultSet.getString(resultSet.getColumnIndex('contactId')); - addJsonObj.name = resultSet.getString(resultSet.getColumnIndex('detailInfo')); - addJsonObj.nameSuffix = resultSet.getString(resultSet.getColumnIndex('nameSuffix')); - addJsonObj.portraitColor = backgroundColor.Color[Math.abs(addJsonObj.contactId) % 6]; - resultMap.set(addJsonObj.contactId, addJsonObj); - } - break; - case '5': - if (resultMap.has(contactId)) { - var jsonObject = resultMap.get(contactId); - if (!jsonObject.hasOwnProperty('numbers')) { - jsonObject.numberType = resultSet.getString(resultSet.getColumnIndex('labelId')); - jsonObject.numbers = resultSet.getString(resultSet.getColumnIndex('detailInfo')); - jsonObject.numberTypeLabel = resultSet.getString(resultSet.getColumnIndex('labelName')); - } - } else { - var jsonObj = {}; - jsonObj.numberType = resultSet.getString(resultSet.getColumnIndex('labelId')); - jsonObj.numbers = resultSet.getString(resultSet.getColumnIndex('detailInfo')); - jsonObj.numberTypeLabel = resultSet.getString(resultSet.getColumnIndex('labelName')); - resultMap.set(contactId, jsonObj); - } - break; - default: - break; - } - } while (resultSet.goToNextRow()); - resultSet.close(); - resultMap.forEach(function (value, key, mapObj) { - resultList.push(value); - }); - } - result.todoList = resultList; - result.frequentlyCount = resultList.length; - callback(result); - }, - - /** - * Query mobile phone numbers by contact ID - * - * @param {string} DAHelper Database address - * @param {number} contactId The contact ID - * @param {Array} phoneNumberLabelNames - * @param {Object} callback - */ - queryPhoneNumByContactId: async function (DAHelper, contactId, phoneNumberLabelNames, callback) { - var resultColumns = ['detail_info AS phoneNumber', 'extend7 AS labelId', 'is_preferred_number AS isPrimary']; - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - conditionArgs.equalTo('content_type', 'phone'); - conditionArgs.equalTo('contact_id', contactId); - var res = await DAHelper.query(CONSTANTS.uri.CONTACT_DATA_URI, resultColumns, conditionArgs); - var member = { - phoneNumbers: [] - }; - if (res.rowCount > 0) { - if (res.goToFirstRow()) { - do { - var phoneNumber = res.getString(res.getColumnIndex('phoneNumber')); - var labelId = res.getString(res.getColumnIndex('labelId')); - var isPrimary = res.getString(res.getColumnIndex('isPrimary')); - member.phoneNumbers.push({ - phoneNumber: phoneNumber, - isPrimary: isPrimary, - labelId: labelId, - labelName: labelId > 0 ? phoneNumberLabelNames[labelId - 1] : '' - }); - } while (res.goToNextRow()); - res.close(); - } - } else { - LOG.error(TAG + 'queryPhoneNumByContactId' + 'phoneNumbers is null.'); - } - var result = { - 'code': 0, - 'data': member - }; - callback(result); - }, - - /** - * Update the favorite status of contacts - * - * @param {string} DAHelper Database address - * @param {Object} actionData Contact data - * @param {Object} callback - */ - updateFavoriteState(DAHelper, actionData, callback) { - var condition = new ohosDataAbility.DataAbilityPredicates(); - - if (!actionData.isOperationAll) { - condition.in('contact_id', actionData.ids); - } else { - actionData.ids.forEach(contactId => { - condition.notEqualTo('contact_id', contactId); - }); - } - - var rawContact = { - 'favorite': actionData.favorite, - 'favorite_order': actionData.favorite_order - }; - DAHelper.update( - CONSTANTS.uri.ROW_CONTACTS_URI, - rawContact, - condition - ).then(data => { - callback(data); - }).catch(error => { - LOG.error(TAG + 'updateFavoriteState' + 'updateFavoriteState contact error:' + error); - }); - }, - - /** - * Deselect a favorite contact - * - * @param {string} DAHelper Database address - * @param {Object} actionData Contact data - * @param {Object} callback - */ - async removeFavoriteState(DAHelper, actionData, callback) { - var condition = new ohosDataAbility.DataAbilityPredicates(); - condition.equalTo('favorite', '0'); - condition.in('contact_id', actionData.ids); - var updateParam = { - 'contacted_count': '0' - }; - var result = await DAHelper.update(CONSTANTS.uri.ROW_CONTACTS_URI, updateParam, condition); - if (result == 0) { - condition = new ohosDataAbility.DataAbilityPredicates(); - condition.equalTo('favorite', '1'); - condition.in('contact_id', actionData.ids); - var rawContact = { - 'favorite': actionData.favorite - }; - result = await DAHelper.update(CONSTANTS.uri.ROW_CONTACTS_URI, rawContact, condition); - } else { - LOG.error(TAG + 'removeFavoriteState' + 'update frequent contacts result is failed.'); - result = -1; - } - callback(result); - }, - - /** - * Click to set the default phone number when dialing - * - * @param {string} DAHelper - * @param {Object} actionData - * @param {Object} callback - */ - setOrCancelDefaultPhoneNumber: async function (DAHelper, actionData, callback) { - var resultColumns = ['id AS rawContactId']; - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - conditionArgs.equalTo('contact_id', actionData.contactId); - var res = await DAHelper.query(CONSTANTS.uri.ROW_CONTACTS_URI, resultColumns, conditionArgs); - var rawContactIds = []; - - if (res.rowCount > 0) { - if (res.goToFirstRow()) { - do { - var rawContactId = res.getString(res.getColumnIndex('rawContactId')); - rawContactIds.push(rawContactId); - } while (res.goToNextRow()); - res.close(); - } - } else { - LOG.error(TAG + 'setOrCancelDefaultPhoneNumber' + 'rawContactIds is null.'); - } - var typeId = this.getTypeId(DAHelper, 'phone'); - if (actionData.isPrimary == 1) { - var params = new ohosDataAbility.DataAbilityPredicates(); - params.equalTo('type_id', typeId); - params.equalTo('raw_contact_id', rawContactIds); - params.equalTo('is_preferred_number', 1); - params.notEqualTo('detail_info', actionData.phoneNumber); - var contact = { - 'is_preferred_number': 0 - }; - DAHelper.update( - CONSTANTS.uri.CONTACT_DATA_URI, - contact, - params - ).then(data => { - LOG.info(TAG + 'setOrCancelDefaultPhoneNumber' + 'clear other phoneNumber default is .' + data); - }).catch(error => { - LOG.error(TAG + 'setOrCancelDefaultPhoneNumber' + 'clear other phoneNumber default error:' + error); - }); - } - - var condition = new ohosDataAbility.DataAbilityPredicates(); - condition.equalTo('type_id', typeId); - condition.equalTo('raw_contact_id', rawContactIds); - condition.equalTo('detail_info', actionData.phoneNumber); - var contact1 = { - 'is_preferred_number': actionData.isPrimary - }; - DAHelper.update( - CONSTANTS.uri.CONTACT_DATA_URI, - contact1, - condition - ).then(data => { - callback({ - code: data - }); - LOG.info(TAG + 'setOrCancelDefaultPhoneNumber' + 'end setOrCancelDefaultPhoneNumber.'); - }).catch(error => { - LOG.error(TAG + 'setOrCancelDefaultPhoneNumber' + 'setOrCancelDefaultPhoneNumber contact error:' + error); - }); - - }, - - /** - * Example Query the GROUP type ID - * - * @param {string} DAHelper - * @param {string} typeText - */ - getTypeId: async function (DAHelper, typeText) { - var params = new ohosDataAbility.DataAbilityPredicates(); - params.equalTo('content_type', typeText); - var resultColumns = ['id as typeId']; - var res = await DAHelper.query(CONSTANTS.uri.CONTACT_TYPE_URI, resultColumns, params); - var typeId = ''; - if (res.rowCount > 0) { - if (res.goToFirstRow()) { - typeId = res.getString(res.getColumnIndex('typeId')); - } - res.close(); - } else { - LOG.error(TAG + 'getTypeId' + 'typeText is null.'); - } - return typeId; - } -}; \ No newline at end of file diff --git a/entry/src/main/js/default/model/GreetingModel.js b/entry/src/main/js/default/model/GreetingModel.js deleted file mode 100644 index 282ffac..0000000 --- a/entry/src/main/js/default/model/GreetingModel.js +++ /dev/null @@ -1,118 +0,0 @@ -/** - * @file: Should answer the model - */ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import LOG from '../utils/ContactsLog.js'; -import ohosDataAbility from '@ohos.data.dataability'; -import Constants from '../common/constants/Constants.js'; - -var TAG = 'greetingModel'; - -export default { - - /** - * Inquiries should be answered - * - * @param {string} DAHelper The database - * @param {Object} data - * @param {Object} callback - */ - queryGreeting: async function (DAHelper, data, callback) { - var resultColumns = ['id', 'name', 'synced']; - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - conditionArgs.orderByAsc('id'); - var resultSet = await DAHelper.query(Constants.uri.VOICEMAIL_URI_PREFIX - + 'replaying', resultColumns, conditionArgs); - var result = {}; - result.code = 0; - var greetingList = []; - if (resultSet.rowCount > 0) { - resultSet.goToFirstRow(); - do { - var jsonObj = {}; - jsonObj.id = resultSet.getString(resultSet.getColumnIndex('id')); - jsonObj.name = resultSet.getString(resultSet.getColumnIndex('name')); - jsonObj.synced = resultSet.getString(resultSet.getColumnIndex('synced')); - jsonObj.radio = false; - jsonObj.checked = false; - greetingList.push(jsonObj); - } while (resultSet.goToNextRow()); - } - result.greetingList = greetingList; - LOG.info(TAG + 'queryGreeting' + 'query greeting list =' + result); - callback(result); - }, - - /** - * Add answers - * - * @param {string} DAHelper The database - * @param {Object} data Answer name and answer storage path - * @param {Object} callback - */ - insertGreeting: async function (DAHelper, data, callback) { - var insertParamValue = { - 'name': data.name, - 'replying_uri': data.voiceMailUri, - 'synced': '0' - }; - var result = await DAHelper.insert(Constants.uri.VOICEMAIL_URI_PREFIX + 'replaying', insertParamValue); - LOG.info(TAG + 'insertGreeting' + 'insert greeting record result = ' + result); - callback(result); - }, - - /** - * Delete answers - * - * @param {string} DAHelper The database - * @param {Object} data Answer name and answer storage path - * @param {Object} callback - */ - deleteGreeting: async function (DAHelper, data, callback) { - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - conditionArgs.in('id', data.ids); - var result = await DAHelper.delete(Constants.uri.VOICEMAIL_URI_PREFIX + 'replaying', conditionArgs); - callback(result); - }, - - /** - * Save the selected answer - * - * @param {string} DAHelper The database - * @param {Object} data Answer name and answer storage path - * @param {Object} callback - */ - saveCheckedGreeting: async function (DAHelper, data, callback) { - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - var result = 0; - if (data.checkedI != -1) { - conditionArgs.equalTo('id', data.checkedId); - var updateParams = { - 'synced': '1' - }; - result = await DAHelper.update(Constants.uri.VOICEMAIL_URI_PREFIX - + 'replaying', updateParams, conditionArgs); - } - conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - conditionArgs.in('id', data.uncheckedIds); - updateParams = { - 'synced': '0' - }; - result = await DAHelper.update(Constants.uri.VOICEMAIL_URI_PREFIX + 'replaying', updateParams, conditionArgs); - callback(result); - }, -}; \ No newline at end of file diff --git a/entry/src/main/js/default/model/GroupsModel.js b/entry/src/main/js/default/model/GroupsModel.js deleted file mode 100644 index f87ebb7..0000000 --- a/entry/src/main/js/default/model/GroupsModel.js +++ /dev/null @@ -1,1061 +0,0 @@ -/** - * @file: The model group - */ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import LOG from '../utils/ContactsLog.js'; -import CONSTANTS from '../common/constants/Constants.js'; -import ohosDataAbility from '@ohos.data.dataability'; -import contactModel from './ContactDetailModel.js'; -import backgroundColor from '../common/constants/color.js'; - -var TAG = 'groupsModel'; -export default { - - /** - * Add a group - * - * @param {string} DAHelper Database path - * @param {string} title - * @param {Object} callback - */ - addGroup: function (DAHelper, title, callback) { - this.isSameGroupName(DAHelper, title, data => { - if (data) { - callback(-2); - } else { - var group = { - 'group_name': title, - 'account_id': 1 - }; - DAHelper.insert( - CONSTANTS.uri.GROUPS_URI, - group - ).then(data => { - LOG.info(TAG + 'addGroup' + 'addGroup result is .' + data); - callback(data); - }).catch(error => { - LOG.error(TAG + 'addGroup' + 'insert contact error:' + error); - }); - } - }); - }, - - /** - * Querying the Group List - * - * @param {string} DAHelper Database path - * @param {Object} actionData - * @param {Object} callback - */ - queryGroups: async function (DAHelper, actionData, callback) { - var resultColumns = [ - 'id AS groupId', - 'group_name AS title' - ]; - var condition = new ohosDataAbility.DataAbilityPredicates(); - LOG.info(TAG + 'queryGroups' + 'start queryGroups condition 0'); - condition.orderByAsc('group_name'); - condition.offsetAs(actionData.page * actionData.limit).limitAs(actionData.limit); - var queryUri = CONSTANTS.uri.GROUPS_URI; - var resultSet = await DAHelper.query(queryUri, resultColumns, condition); - LOG.info(TAG + 'queryGroups' + 'start deal groups resultSet' + resultSet.length); - var groups = []; - if (resultSet.rowCount > 0) { - if (resultSet.goToFirstRow()) { - do { - var groupId = resultSet.getString(resultSet.getColumnIndex('groupId')); - var title = resultSet.getString(resultSet.getColumnIndex('title')); - var group = { - groupId: groupId, - title: title - }; - groups.push(group); - } while (resultSet.goToNextRow()); - } - } - resultSet.close(); - if (groups.length > 0) { - groups.forEach((group, index) => { - this.queryGroupContacts(DAHelper, group, groups, index, callback); - }); - } - }, - - /** - * Example Query the ID of a group member - * - * @param {string} DAHelper Database path - * @param {Object} group - * @param {Array} groups - * @param {number} i - * @param {Object} callback - */ - queryGroupContacts: async function (DAHelper, group, groups, i, callback) { - try { - var resultColumns = [ - 'detail_info AS groupId', - 'raw_contact_id AS contactId' - ]; - var typeText = 'group_membership'; - var condition = new ohosDataAbility.DataAbilityPredicates(); - condition.equalTo('content_type', typeText).equalTo('is_deleted', '0') - .equalTo('detail_info', group.groupId + ''); - var queryUri = CONSTANTS.uri.CONTACT_DATA_URI; - var resultSet = await DAHelper.query(queryUri, resultColumns, condition); - group.contactCount = resultSet.rowCount; - resultSet.close(); - LOG.info(TAG + 'queryGroupContacts' + '--------------groups length is ' + groups.length); - if (i == Number(groups.length - 1)) { - callback(groups); - } - } catch (e) { - LOG.error(TAG + 'queryGroupContacts' + 'queryGroupContacts error. e ' + e.getMessage()); - } - }, - async isSameGroupName(DAHelper, newGroupName, callback) { - var resultColumns = [ - 'id AS groupId', - 'group_name AS title' - ]; - var condition = new ohosDataAbility.DataAbilityPredicates(); - var queryUri = CONSTANTS.uri.GROUPS_URI; - var resultSet = await DAHelper.query(queryUri, resultColumns, condition); - var exist = false; - if (resultSet.rowCount > 0) { - if (resultSet.goToFirstRow()) { - do { - var title = resultSet.getString(resultSet.getColumnIndex('title')); - if (title == newGroupName) { - LOG.error(TAG + 'isSameGroupName' + 'Group name already exists.'); - exist = true; - } - } while (resultSet.goToNextRow()); - } - } - callback(exist); - }, - - /** - * Update the group - * - * @param {string} DAHelper Database path - * @param {Object} actionData - * @param {Object} callback - */ - updateGroup: function (DAHelper, actionData, callback) { - this.isSameGroupName(DAHelper, actionData.title, data => { - if (data) { - // The nuptial - callback(-2); - } else { - var condition = new ohosDataAbility.DataAbilityPredicates(); - condition.equalTo('id', actionData.groupId); - - var group = { - 'group_name': actionData.title - }; - DAHelper.update( - CONSTANTS.uri.GROUPS_URI, - group, - condition - ).then(data => { - LOG.info(TAG + 'updateGroup' + 'updateGroup result is .' + data); - callback(data); - LOG.info(TAG + 'updateGroup' + 'end updateGroup.'); - }).catch(error => { - LOG.error(TAG + 'updateGroup' + 'updateGroup contact error:' + error); - }); - } - }); - }, - - /** - * Delete the group - * - * @param {string} DAHelper Database path - * @param {Array} groupIds - * @param {Object} callback - */ - deleteGroups: async function (DAHelper, groupIds, callback) { - - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - conditionArgs.in('id', groupIds); - var result = await DAHelper.delete(CONSTANTS.uri.GROUPS_URI, conditionArgs); - LOG.info(TAG + 'deleteGroups' + 'deleteGroups delete result = ' + result.length); - - var typeText = 'group_membership'; - var condition = new ohosDataAbility.DataAbilityPredicates(); - condition.equalTo('content_type', typeText).in('detail_info', groupIds); - await DAHelper.delete(CONSTANTS.uri.CONTACT_DATA_URI, condition); - LOG.info(TAG + 'deleteGroups' + 'delete group contact result = ' + result.length); - callback(result); - }, - - /** - * Example Query the ID of a group member - * - * @param {string} DAHelper Database path - * @param {number} groupId - */ - queryGroupMemberIds: async function (DAHelper, groupId) { - var resultColumns = [ - 'detail_info AS groupId', - 'raw_contact_id AS contactId' - ]; - var typeText = 'group_membership'; - var condition = new ohosDataAbility.DataAbilityPredicates(); - condition.equalTo('content_type', typeText).equalTo('is_deleted', '0').equalTo('detail_info', groupId + ''); - var resultSet = await DAHelper.query(CONSTANTS.uri.CONTACT_DATA_URI, resultColumns, condition); - var contactIds = []; - if (resultSet.rowCount > 0) { - if (resultSet.goToFirstRow()) { - do { - var contactId = resultSet.getString(resultSet.getColumnIndex('contactId')); - contactIds.push(contactId); - } while (resultSet.goToNextRow()); - } - - } else { - LOG.info(TAG + 'queryGroupMemberIds' + 'getOutOfGroupMembers: groupMembers is null.'); - } - return contactIds; - }, - - /** - * Example Query the member list of a group - * - * @param {string} DAHelper Database path - * @param {Object} actionData - * @param {Object} callback - */ - queryGroupMembers: async function (DAHelper, actionData, callback) { - var resultColumns = [ - 'detail_info AS groupId', - 'raw_contact_id AS contactId' - ]; - var typeText = 'group_membership'; - var condition = new ohosDataAbility.DataAbilityPredicates(); - condition.equalTo('content_type', typeText).equalTo('detail_info', actionData.groupId + ''); - var resultSet = await DAHelper.query(CONSTANTS.uri.CONTACT_DATA_URI, resultColumns, condition); - var contactIds = []; - if (resultSet.rowCount > 0) { - if (resultSet.goToFirstRow()) { - do { - var contactId = resultSet.getString(resultSet.getColumnIndex('contactId')); - contactIds.push(contactId); - } while (resultSet.goToNextRow()); - } - - } else { - LOG.info(TAG + 'queryGroupMembers' + 'getOutOfGroupMembers: groupMembers is null.'); - } - - var result = { - code: 0, - resultList: [], - totalCount: 0 - }; - if (contactIds.length == 0) { - callback(result); - } else { - var resultColumns = [ - 'id AS contactId', - 'display_name AS emptyNameData', - 'sort_first_letter AS namePrefix', - 'photo_first_name AS nameSuffix', - 'company AS company', - 'position AS position', - ]; - var typeText = 'group_membership'; - var condition = new ohosDataAbility.DataAbilityPredicates(); - condition.equalTo('is_deleted', '0').in('name_raw_contact_id', contactIds); - condition.offsetAs(actionData.page * actionData.limit).limitAs(actionData.limit); - - var queryUri = CONSTANTS.uri.CONTACT_URI; - var resultSet = await DAHelper.query(queryUri, resultColumns, condition); - if (resultSet.rowCount > 0) { - var contacts = []; - if (resultSet.goToFirstRow()) { - do { - var contactId = resultSet.getString(resultSet.getColumnIndex('contactId')); - var contact = { - groupId: resultSet.getString(resultSet.getColumnIndex('groupId')), - contactId: contactId, - emptyNameData: resultSet.getString(resultSet.getColumnIndex('emptyNameData')), - namePrefix: resultSet.getString(resultSet.getColumnIndex('namePrefix')), - nameSuffix: resultSet.getString(resultSet.getColumnIndex('nameSuffix')), - company: resultSet.getString(resultSet.getColumnIndex('company')), - position: resultSet.getString(resultSet.getColumnIndex('position')), - portraitColor: backgroundColor.Color[contactId % 6], - favorite: false, - show: false, - checked: false - }; - contacts.push(contact); - } while (resultSet.goToNextRow()); - } - result.resultList = contacts; - resultSet.close(); - - LOG.info(TAG + 'queryGroupMembers' + 'start queryGroupContacts count.'); - var resultColumns = [ - 'detail_info AS groupId', - 'raw_contact_id AS contactId' - ]; - var params = new ohosDataAbility.DataAbilityPredicates(); - params.equalTo('content_type', typeText).equalTo('is_deleted', '0') - .equalTo('detail_info', actionData.groupId + ''); - var res = await DAHelper.query(CONSTANTS.uri.CONTACT_DATA_URI, resultColumns, params); - result.totalCount = res.rowCount; - res.close(); - } else { - LOG.info(TAG + 'queryGroupMembers' + 'groupMembers is null.'); - } - callback(result); - } - }, - - /** - * Example Query the member lists of multiple groups - * - * @param {string} DAHelper Database path - * @param {Object} actionData - */ - queryGroupsMembers: async function (DAHelper, actionData) { - LOG.info(TAG + 'queryGroupsMembers' + 'start queryGroupsMembers.'); - var result = { - code: 0 - }; - var resultColumns = [ - 'contact_id AS contactId' - ]; - var typeText = 'group_membership'; - var condition = new ohosDataAbility.DataAbilityPredicates(); - condition.equalTo('content_type', typeText).equalTo('is_deleted', '0').in('detail_info', actionData.groupIds); - var queryUri = CONSTANTS.uri.CONTACT_DATA_URI; - var resultSet = await DAHelper.query(queryUri, resultColumns, condition); - if (resultSet.rowCount > 0) { - var contactIds = []; - if (resultSet.goToFirstRow()) { - do { - var contactId = resultSet.getString(resultSet.getColumnIndex('contactId')); - contactIds.push(contactId); - } while (resultSet.goToNextRow()); - } - result.contactIds = contactIds; - resultSet.close(); - } else { - LOG.info(TAG + 'queryGroupsMembers' + 'groupsMembers is null.'); - } - return result; - }, - - /** - * Adding a Group Member - * - * @param {string} DAHelper - * @param {Object} actionData - * @param {Object} callback - */ - addGroupMembers: function (DAHelper, actionData, callback) { - LOG.info(TAG + 'addGroupMembers' + 'start addGroupMembers'); - var contactDataItem = { - 'content_type': 'group_membership', - 'detail_info': actionData.groupId, - }; - - if (actionData.isOperationAll) { - let queryParams = { - page: 0, - limit: 2000, - groupId: actionData.groupId - }; - var unCheckContactIds = []; - actionData.contactBeans.forEach((contact) => { - unCheckContactIds.push(contact.contactId); - }); - this.getOutOfGroupMembers(DAHelper, queryParams, allOutOfGroupMembers => { - var allOutOfGroupMembersIds = []; - allOutOfGroupMembers.resultList.forEach((member) => { - allOutOfGroupMembersIds.push(member.contactId); - }); - LOG.info(TAG + 'addGroupMembers' + 'addGroupMembers ' + allOutOfGroupMembers.length); - var addContactIds = []; - allOutOfGroupMembersIds.forEach((member) => { - if (unCheckContactIds.indexOf(member) == -1) { - addContactIds.push(member); - } - }); - addContactIds.forEach((id) => { - contactDataItem.raw_contact_id = id; - DAHelper.insert( - CONSTANTS.uri.CONTACT_DATA_URI, - contactDataItem - ).catch(error => { - LOG.error(TAG + 'addGroupMembers' + 'insert contact error:' + error); - }); - }); - }); - LOG.info(TAG + 'addGroupMembers' + 'end addGroupMembers ~~'); - callback(); - } else { - LOG.info(TAG + 'addGroupMembers' + 'addGroupMembers actionData is ' + actionData); - - actionData.contactBeans.forEach((contact) => { - contactDataItem.raw_contact_id = contact.contactId; - DAHelper.insert( - CONSTANTS.uri.CONTACT_DATA_URI, - contactDataItem - ).catch(error => { - LOG.error(TAG + 'addGroupMembers' + 'insert contact error:' + error); - }); - }); - LOG.info(TAG + 'addGroupMembers' + 'end addGroupMembers ~~~~'); - callback(); - } - }, - - /** - * Obtain the list of members outside the group - * - * @param {string} DAHelper Database path - * @param {Object} actionData - * @param {Object} callback - */ - getOutOfGroupMembers: async function (DAHelper, actionData, callback) { - LOG.info(TAG + 'getOutOfGroupMembers' + 'start getOutOfGroupMembers'); - var result = { - code: 0, - resultList: [], - totalCount: 0 - }; - var resultColumns = [ - 'detail_info AS groupId', - 'raw_contact_id AS contactId' - ]; - var typeText = 'group_membership'; - var condition = new ohosDataAbility.DataAbilityPredicates(); - condition.equalTo('content_type', typeText).equalTo('is_deleted', '0') - .equalTo('detail_info', actionData.groupId + ''); - var resultSet = await DAHelper.query(CONSTANTS.uri.CONTACT_DATA_URI, resultColumns, condition); - var contactIds = []; - if (resultSet.rowCount > 0) { - if (resultSet.goToFirstRow()) { - do { - var contactId = resultSet.getString(resultSet.getColumnIndex('contactId')); - contactIds.push(contactId); - } while (resultSet.goToNextRow()); - } - - } else { - LOG.info(TAG + 'getOutOfGroupMembers' + 'getOutOfGroupMembers: groupMembers is null.'); - } - resultColumns = [ - 'id AS contactId', - 'display_name AS emptyNameData', - 'sort_first_letter AS namePrefix', - 'photo_first_name AS nameSuffix', - 'company AS company', - 'position AS position', - ]; - var params = new ohosDataAbility.DataAbilityPredicates(); - params.equalTo('is_deleted', '0'); - if (contactIds.length > 0) { - contactIds.forEach(id => { - params.notEqualTo('name_raw_contact_id', id); - }); - } - params.offsetAs(actionData.page * actionData.limit).limitAs(actionData.limit); - - var res = await DAHelper.query(CONSTANTS.uri.CONTACT_URI, resultColumns, params); - if (res.rowCount > 0) { - var contacts = []; - if (res.goToFirstRow()) { - do { - var contactId = res.getString(res.getColumnIndex('contactId')); - var contact = { - contactId: contactId, - emptyNameData: res.getString(res.getColumnIndex('emptyNameData')), - namePrefix: res.getString(res.getColumnIndex('namePrefix')), - nameSuffix: res.getString(res.getColumnIndex('nameSuffix')), - company: res.getString(res.getColumnIndex('company')), - position: res.getString(res.getColumnIndex('position')), - portraitColor: backgroundColor.Color[contactId % 6], - favorite: false, - show: false, - checked: false - }; - contacts.push(contact); - } while (res.goToNextRow()); - } - result.resultList = contacts; - res.close(); - - LOG.info(TAG + 'getOutOfGroupMembers' + 'start queryGroupContacts count.'); - resultColumns = [ - 'name_raw_contact_id AS contactId' - ]; - var params1 = new ohosDataAbility.DataAbilityPredicates(); - params1.equalTo('is_deleted', '0'); - if (contactIds.length > 0) { - contactIds.forEach(id => { - params1.notEqualTo('name_raw_contact_id', id); - }); - } - - var res1 = await DAHelper.query(CONSTANTS.uri.CONTACT_URI, resultColumns, params); - result.totalCount = res1.rowCount; - res1.close(); - } else { - LOG.info(TAG + 'getOutOfGroupMembers' + 'out of groupMembers is null----.'); - } - - callback(result); - }, - - /** - * Removing a Group Member - * - * @param {string} DAHelper The database - * @param {Object} actionData - * @param {Object} callback - */ - deleteGroupMembers: async function (DAHelper, actionData, callback) { - var typeText = 'group_membership'; - var typeId = this.getTypeId(DAHelper, typeText); - LOG.info(TAG + 'deleteGroupMembers' + 'deleteGroupMembers actionData is ' + actionData); - var contactIds = []; - actionData.contactBeans.forEach((contact) => { - contactIds.push(contact.contactId); - }); - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - if (actionData.isOperationAll) { - conditionArgs.equalTo('type_id', typeId).equalTo('detail_info', actionData.groupId + ''); - if (contactIds.length > 0) { - contactIds.forEach(id => { - conditionArgs.notEqualTo('raw_contact_id', id); - }); - } - } else { - conditionArgs.equalTo('type_id', typeId).equalTo('detail_info', actionData.groupId + '') - .in('raw_contact_id', contactIds); - } - var result = await DAHelper.delete(CONSTANTS.uri.CONTACT_DATA_URI, conditionArgs); - LOG.info(TAG + 'deleteGroupMembers' + 'deleteGroupMembers delete result = ' + result.length); - callback(); - }, - - /** - * Example Query the group member list - * - * @param {string} DAHelper Database path - * @param {Object} actionData - * @param {Object} callback - */ - getGroupMemberList: function (DAHelper, actionData, callback) { - this.queryGroupMembers(DAHelper, actionData, result => { - result.resultList.forEach((member, index) => { - var params = new ohosDataAbility.DataAbilityPredicates(); - params.equalTo('content_type', actionData.filterItem); - params.equalTo('raw_contact_id', member.contactId); - if ('phone' == actionData.filterItem) { - var resultColumns = ['detail_info AS phoneNumber', 'extend7 AS labelId']; - - var phoneNumbers = []; - DAHelper.query(CONSTANTS.uri.CONTACT_DATA_URI, resultColumns, params).then(res => { - if (res.rowCount > 0) { - if (res.goToFirstRow()) { - do { - var phoneNumber = res.getString(res.getColumnIndex('phoneNumber')); - var labelId = res.getString(res.getColumnIndex('labelId')); - phoneNumbers.push({ - phoneNumber: phoneNumber, - labelId: labelId, - labelName: labelId > 0 ? actionData.phoneNumberLabelNames[labelId - 1] : '' - }); - } while (res.goToNextRow()); - res.close(); - member.phoneNumbers = phoneNumbers; - } - } else { - LOG.error(TAG + 'getGroupMemberList' + 'phoneNumbers is null.'); - } - if (index == result.resultList.length - 1) { - callback(result); - } - }); - } - if ('email' == actionData.filterItem) { - var resultColumns = ['detail_info AS email', 'extend7 AS labelId']; - var emails = []; - DAHelper.query(CONSTANTS.uri.CONTACT_DATA_URI, resultColumns, params).then(res => { - if (res.rowCount > 0) { - if (res.goToFirstRow()) { - do { - var email = res.getString(res.getColumnIndex('email')); - var labelId = res.getString(res.getColumnIndex('labelId')); - emails.push({ - email: email, - labelId: labelId, - labelName: labelId > 0 ? actionData.emailsLabelNames[labelId - 1] : '' - }); - } while (res.goToNextRow()); - } - res.close(); - member.emails = emails; - LOG.info(TAG + 'getGroupMemberList' + ' ' + emails); - } else { - LOG.error(TAG + 'getGroupMemberList' + 'emails is null.'); - } - if (index == result.resultList.length - 1) { - callback(result); - } - }); - } - }); - - }); - }, - - /** - * Querying Recent Contacts - * - * @param {string} DAHelper Database path - * @param {Object} actionData - * @param {Object} callback - */ - getRecentContacts: function (DAHelper, actionData, callback) { - this.queryRecentContacts(DAHelper, actionData, result => { - LOG.info(TAG + 'getRecentContacts' + 'start result.resultList.forEach'); - result.resultList.forEach((member, index) => { - var params = new ohosDataAbility.DataAbilityPredicates(); - params.equalTo('content_type', actionData.filterItem); - params.equalTo('raw_contact_id', member.raw_contact_id); - if ('phone' == String(actionData.filterItem)) { - var resultColumns = ['detail_info AS phoneNumber', 'extend7 AS labelId']; - - var phoneNumbers = []; - DAHelper.query(CONSTANTS.uri.CONTACT_DATA_URI, resultColumns, params).then(res => { - if (res.rowCount > 0) { - if (res.goToFirstRow()) { - do { - var phoneNumber = res.getString(res.getColumnIndex('phoneNumber')); - var labelId = res.getString(res.getColumnIndex('labelId')); - phoneNumbers.push({ - phoneNumber: phoneNumber, - labelId: labelId, - labelName: labelId > 0 ? actionData.phoneNumberLabelNames[labelId - 1] : '' - }); - } while (res.goToNextRow()); - res.close(); - member.phoneNumbers = phoneNumbers; - if (index == result.resultList.length - 1) { - callback(result); - } - } - } else { - LOG.error(TAG + 'getRecentContacts' + 'phoneNumbers is null.'); - if (index == result.resultList.length - 1) { - callback(result); - } - } - }); - } - if ('email' == actionData.filterItem) { - var resultColumns = ['detail_info AS email', 'extend7 AS labelId']; - var emails = []; - DAHelper.query(CONSTANTS.uri.CONTACT_DATA_URI, resultColumns, params).then(res => { - if (res.rowCount > 0) { - if (res.goToFirstRow()) { - do { - var email = res.getString(res.getColumnIndex('email')); - var labelId = res.getString(res.getColumnIndex('labelId')); - emails.push({ - email: email, - labelId: labelId, - labelName: labelId > 0 ? actionData.emailsLabelNames[labelId - 1] : '' - }); - } while (res.goToNextRow()); - } - res.close(); - member.emails = emails; - LOG.info(TAG + 'getRecentContacts' + 'getRecentContacts emails:' + emails); - if (index == result.resultList.length - 1) { - callback(result); - } - } else { - LOG.error(TAG + 'getRecentContacts' + 'emails is null.'); - if (index == result.resultList.length - 1) { - callback(result); - } - } - }); - } - }); - - }); - }, - - /** - * Get the list and contacts in the group - * - * @param {string} DAHelper - * @param {Object} actionData - * @param {Object} callback - */ - getGroupListAndContacts: function (DAHelper, actionData, callback) { - this.queryGroups(DAHelper, actionData, result => { - result.forEach((groupItem, index) => { - var request = { - page: 0, - limit: 200, - groupId: groupItem.groupId, - filterItem: actionData.filterItem, - phoneNumberLabelNames: actionData.phoneNumberLabelNames - }; - - this.getGroupMemberList(DAHelper, request, groupMember => { - groupItem.contactBeans = groupMember.resultList; - if (index == result.length - 1) { - var groupResult = { - code: 0, - resultList: result - }; - callback(groupResult); - } - }); - }); - }); - }, - - /** - * Example Query the GROUP type ID - * - * @param {string} DAHelper Database path - * @param {string} typeText key - */ - getTypeId: async function (DAHelper, typeText) { - var params = new ohosDataAbility.DataAbilityPredicates(); - params.equalTo('content_type', typeText); - var resultColumns = ['id as typeId']; - - var res = await DAHelper.query(CONSTANTS.uri.CONTACT_TYPE_URI, resultColumns, params); - var typeId = ''; - if (res.rowCount > 0) { - if (res.goToFirstRow()) { - typeId = res.getString(res.getColumnIndex('typeId')); - } - } else { - LOG.error(TAG + 'getTypeId' + 'typeText is null.'); - } - return typeId; - }, - - /** - * Querying Recent Contacts - * - * @param {string} DAHelper Database path - * @param {Object} data - * @param {Object} callback - */ - queryRecentContacts: async function (DAHelper, data, callback) { - LOG.info(TAG + 'addGroup' + 'Model: queryRecentContacts start.'); - var resultColumns = ['id as contactId', 'name_raw_contact_id as raw_contact_id', - 'display_name as emptyNameData', 'sort_first_letter as namePrefix', 'photo_first_name as nameSuffix', - 'company as company', 'position as position']; - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - var now = Date.now(); - LOG.info(TAG + 'addGroup' + 'now is =' + now); - var afterDifValue = now - (data.startDate * 24 * 3600 * 1000); - - var startTime = afterDifValue < 0 ? 0 : afterDifValue; - - var difValue = now - (data.endDate * 24 * 3600 * 1000); - var endTime = difValue < 0 ? 0 : difValue; - - if (data.startDate != -1) { - conditionArgs.greaterThan('lastest_contacted_time', startTime); - } - LOG.info(TAG + 'addGroup' + 'startTime is ' + startTime + ' and endTime is ' + endTime); - conditionArgs.equalTo('is_deleted', '0').lessThanOrEqualTo('lastest_contacted_time', endTime) - .offsetAs(data.page * data.limit).limitAs(data.limit); - var result = {}; - LOG.info(TAG + 'addGroup' + 'queryRecentContacts get DAHelper.query start'); - var resultSet = await DAHelper.query(CONSTANTS.uri.CONTACT_URI, resultColumns, conditionArgs); - result.code = 0; - var resultList = []; - if (resultSet.rowCount > 0) { - resultSet.goToFirstRow(); - do { - var jsonObj = {}; - jsonObj.contactId = resultSet.getString(resultSet.getColumnIndex('contactId')); - jsonObj.raw_contact_id = resultSet.getString(resultSet.getColumnIndex('raw_contact_id')); - jsonObj.emptyNameData = resultSet.getString(resultSet.getColumnIndex('emptyNameData')); - jsonObj.namePrefix = resultSet.getString(resultSet.getColumnIndex('namePrefix')); - jsonObj.nameSuffix = resultSet.getString(resultSet.getColumnIndex('nameSuffix')); - jsonObj.company = resultSet.getString(resultSet.getColumnIndex('company')); - jsonObj.position = resultSet.getString(resultSet.getColumnIndex('position')); - jsonObj.portraitColor = backgroundColor.Color[Math.abs(jsonObj.contactId) % 6]; - jsonObj.show = false; - resultList.push(jsonObj); - } while (resultSet.goToNextRow()); - } - resultSet.close(); - result.resultList = resultList; - callback(result); - }, - - /** - * Query the total number of recent contacts - * - * @param {string} DAHelper Database path - * @param {Object} callback - */ - queryRecentContactsCount: async function (DAHelper, callback) { - var result = { - count1: 0, - count2: 0, - count3: 0, - count4: 0 - }; - var data = { - startDate: 7, - endDate: 0 - }; - this.queryContactsCount(DAHelper, data, count1 => { - result.count1 = count1; - data = { - startDate: 30, - endDate: 7 - }; - this.queryContactsCount(DAHelper, data, count2 => { - result.count2 = count2; - data = { - startDate: 90, - endDate: 30 - }; - this.queryContactsCount(DAHelper, data, count3 => { - result.count3 = count3; - data = { - startDate: -1, - endDate: 90 - }; - this.queryContactsCount(DAHelper, data, count4 => { - result.count4 = count4; - callback(result); - }); - }); - }); - }); - }, - - /** - * Querying the Number of Contacts - * - * @param {string} DAHelper Database path - * @param {Object} data - * @param {Object} callback - */ - queryContactsCount: async function (DAHelper, data, callback) { - var now = Date.now(); - LOG.info(TAG + 'addGroup' + 'now is =' + now); - var afterDifValue = now - (data.startDate * 24 * 3600 * 1000); - - var startTime = afterDifValue < 0 ? 0 : afterDifValue; - - var difValue = now - (data.endDate * 24 * 3600 * 1000); - var endTime = difValue < 0 ? 0 : difValue; - - var resultColumns = ['id']; - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - if (data.startDate != -1) { - conditionArgs.greaterThan('lastest_contacted_time', startTime); - } - conditionArgs.equalTo('is_deleted', '0').lessThanOrEqualTo('lastest_contacted_time', endTime); - var resultSet = await DAHelper.query(CONSTANTS.uri.CONTACT_URI, resultColumns, conditionArgs); - var count = resultSet.rowCount; - resultSet.close(); - callback(count); - }, - - /** - * Searching for Contacts - * - * @param {string} DAHelper Database address - * @param {Object} data - * @param {Object} callback - * */ - searchContacts: async function (DAHelper, data, callback) { - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - conditionArgs.equalTo('is_deleted', '0').notEqualTo('content_type', 'relation') - .notEqualTo('content_type', 'photo'); - if (data.groupId > 0) { - var contactIds = await this.queryGroupMemberIds(DAHelper, data.groupId); - if (data.searchType == 2) { - conditionArgs.in('raw_contact_id', contactIds); - } else if (data.searchType == 3) { - if (contactIds.length > 0) { - contactIds.forEach(id => { - conditionArgs.notEqualTo('raw_contact_id', id); - }); - } - } else { - LOG.error(TAG + 'addGroup' + 'searchType is error. searchType: ' + data.searchType); - } - } - if (data.starred == 0 || data.starred == 1) { - conditionArgs.and().equalTo('favorite', data.starred); - } - - if (!data.searchProperty) { - conditionArgs.beginWrap().contains('detail_info', data.likeValue).or().contains('position', data.likeValue) - .or().contains('search_name', data.likeValue).endWrap(); - } else { - conditionArgs.in('content_type', data.searchProperty).beginWrap().contains('detail_info', data.likeValue).or().contains('position', data.likeValue).or().contains('search_name', data.likeValue).endWrap(); - } - - if (data.pinYinArr && data.pinYinArr.length != 0) { - data.pinYinArr.forEach((pinyin, index) => { - conditionArgs.or().contains('search_name', pinyin); - }); - } - this.queryData(DAHelper,data,conditionArgs,callback) - }, - queryData: function (DAHelper,data,conditionArgs,callback) { - var resultColumns = ['contact_id AS contactId']; - var contactIds = []; - DAHelper.query(CONSTANTS.uri.SEARCH_CONTACT_URI, resultColumns, conditionArgs).then(resultSet => { - LOG.info(TAG + 'addGroup' + 'query contactIds success. resultSet.rowCount is ' + resultSet.rowCount); - if (resultSet.rowCount > 0) { - if (resultSet.goToFirstRow()) { - do { - var contactId = resultSet.getString(resultSet.getColumnIndex('contactId')); - if (contactIds.indexOf(contactId) == -1) { - contactIds.push(contactId); - } - } while (resultSet.goToNextRow()); - } - } else { - LOG.info(TAG + 'addGroup' + 'contactIds is null.'); - } - var searchResult = { - code: 0, - data: [], - contactCount: contactIds.length - }; - - if (contactIds.length != 0) { - contactIds.forEach((contactId, index) => { - var actionData = { - contactId: contactId, - searchMimetype: true, - searchValue: data.likeValue - }; - LOG.info(TAG + 'addGroup' + 'start getContactById!!!'); - contactModel.getContactById(DAHelper, actionData, result => { - if (!data.pinYinArr || data.pinYinArr.length == 0) { - this.deleteProperties(result.data, data.likeValue); - } - searchResult.data.push(result.data); - if (index == contactIds.length - 1) { - LOG.info(TAG + 'addGroup' + '!!!!!!!!!!!!!!!!!!+' + searchResult); - callback(searchResult); - } - }); - }); - } else { - callback(searchResult); - } - }); - }, - - /** - * Delete array fields that are redundant matches. - * For example, if only one of multiple phone numbers is matched, delete the remaining numbers - * - * @param {Object} detailInfo - * @param {string} likeValue - */ - deleteProperties: function (detailInfo, likeValue) { - var searchType = detailInfo.searchMimetype[0]; - switch (searchType) { - case '/phone': - if (detailInfo.phoneNumbers && detailInfo.phoneNumbers.length > 0) { - var newPhoneNumbers = []; - detailInfo.phoneNumbers.forEach(phoneNumber => { - if (phoneNumber.phoneNumber.indexOf(likeValue) != -1) { - newPhoneNumbers.push(phoneNumber); - } - }); - detailInfo.phoneNumbers = newPhoneNumbers; - } - break; - case '/im': - if (detailInfo.imAddresses && detailInfo.imAddresses.length > 0) { - var newImAddresses = []; - detailInfo.imAddresses.forEach(imAddress => { - if (imAddress.imAddress.indexOf(likeValue) != -1) { - newImAddresses.push(imAddress); - } - }); - detailInfo.imAddresses = newImAddresses; - } - break; - case '/postal_address': - if (detailInfo.postalAddresses && detailInfo.postalAddresses.length > 0) { - var newPostalAddresses = []; - detailInfo.postalAddresses.forEach(postalAddress => { - if (postalAddress.postalAddress.indexOf(likeValue) != -1) { - newPostalAddresses.push(postalAddress); - } - }); - detailInfo.postalAddresses = newPostalAddresses; - } - break; - this.switchNext(searchType, detailInfo, likeValue); - } - }, - switchNext: function (searchType, detailInfo, likeValue) { - switch (searchType) { - - case '/website': - if (detailInfo.websites && detailInfo.websites.length > 0) { - var newWebsites = []; - detailInfo.websites.forEach(website => { - if (website.website.indexOf(likeValue) != -1) { - newWebsites.push(website); - } - }); - detailInfo.websites = newWebsites; - } - break; - case '/email': - if (detailInfo.emails && detailInfo.emails.length > 0) { - var newEmail = []; - detailInfo.emails.forEach(email => { - if (email.email.indexOf(likeValue) != -1) { - newEmail.push(email); - } - }); - detailInfo.emails = newEmail; - } - break; - default: - break; - } - }, -}; \ No newline at end of file diff --git a/entry/src/main/js/default/model/SelectContactsListModel.js b/entry/src/main/js/default/model/SelectContactsListModel.js deleted file mode 100644 index a09cdf9..0000000 --- a/entry/src/main/js/default/model/SelectContactsListModel.js +++ /dev/null @@ -1,121 +0,0 @@ -/** - * @file: Select the contact list Model - */ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import ohosDataAbility from '@ohos.data.dataability'; -import LOG from '../utils/ContactsLog.js'; -import Constants from '../common/constants/Constants.js'; -import backgroundColor from '../common/constants/color.js'; - -var reGu = '^[a-zA-Z\u4e00-\u9fa5]+$'; -var re = new RegExp(reGu); -var TAG = 'selectContactsListModel'; - -export default { - - /** - * Deleting selected Contacts - * - * @param {string} DAHelper Database address - * @param {boolean} isChecked - * @param {Array} contactIds - * @param {Object} callback - * */ - checkedDelete: async function (DAHelper, isChecked, contactIds, callback) { - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - if (isChecked) { - LOG.info(TAG + 'checkedDelete' + 'reverse selection'); - contactIds.forEach((id) => { - conditionArgs.notEqualTo('id', id); - }); - } else { - LOG.info(TAG + 'checkedDelete' + 'Positive selection'); - conditionArgs.in('id', contactIds); - } - var result = await DAHelper.delete(Constants.uri.CONTACTS_URI_PREFIX + 'contact', conditionArgs); - LOG.info(TAG + 'checkedDelete' + 'batch delete contacts delete result = ' + result.length); - callback(result); - }, - - /** - * Querying a Contact List - * - * @param {string} DAHelper Database address - * @param {Object} actionData - * @param {Object} callback - * */ - queryContactList: async function (DAHelper, actionData, callback) { - var resultColumns = ['id as contactId', 'display_name as emptyNameData', 'sort_first_letter as namePrefix', - 'photo_first_name as nameSuffix', 'company as company', 'position as position']; - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - conditionArgs.equalTo('is_deleted', '0').orderByAsc('sort_first_letter') - .offsetAs(actionData.page * actionData.limit).limitAs(actionData.limit); - var result = {}; - var resultSet = await DAHelper.query(Constants.uri.CONTACTS_URI_PREFIX - + 'contact', resultColumns, conditionArgs); - result.code = 0; - var resultList = []; - if (resultSet.rowCount > 0) { - resultSet.goToFirstRow(); - do { - var jsonObj = {}; - jsonObj.contactId = resultSet.getString(resultSet.getColumnIndex('contactId')); - jsonObj.emptyNameData = resultSet.getString(resultSet.getColumnIndex('emptyNameData')); - jsonObj.namePrefix = resultSet.getString(resultSet.getColumnIndex('namePrefix')); - jsonObj.nameSuffix = resultSet.getString(resultSet.getColumnIndex('nameSuffix')); - jsonObj.company = resultSet.getString(resultSet.getColumnIndex('company')); - jsonObj.position = resultSet.getString(resultSet.getColumnIndex('position')); - jsonObj.portraitColor = backgroundColor.Color[Math.abs(jsonObj.contactId) % 6]; - jsonObj.show = false; - resultList.push(jsonObj); - } while (resultSet.goToNextRow()); - } - result.resultList = resultList; - LOG.info(TAG + 'queryContactList' + 'query batch delete contacts list =' + result.length); - callback(result); - }, - - getTypeId: async function (DAHelper, actionData, callback) { - let contactIds = []; - for (let id of actionData.contactIds) { - contactIds.push(id + ''); - } - var resultColumns = [ - 'detail_info', - 'contact_id' - ]; - var condition = new ohosDataAbility.DataAbilityPredicates(); - condition.in('contact_id', contactIds); - condition.and(); - condition.equalTo('content_type', 'phone'); - var result = {}; - var resultSet = await DAHelper.query(Constants.uri.CONTACTS_URI_PREFIX + 'contact_data', resultColumns, condition); - var resultList = []; - if (resultSet.rowCount > 0) { - resultSet.goToFirstRow(); - do { - var jsonObj = {}; - jsonObj.detailInfo = resultSet.getString(resultSet.getColumnIndex('detail_info')); - jsonObj.contactId = resultSet.getString(resultSet.getColumnIndex('contact_id')); - resultList.push(jsonObj); - } while (resultSet.goToNextRow()); - } - resultSet.close(); - result.resultList = resultList; - callback(result); - } -}; \ No newline at end of file diff --git a/entry/src/main/js/default/model/SelectcontactsModel.js b/entry/src/main/js/default/model/SelectcontactsModel.js deleted file mode 100644 index 78640c3..0000000 --- a/entry/src/main/js/default/model/SelectcontactsModel.js +++ /dev/null @@ -1,105 +0,0 @@ -/** - * @file: Select contact Model - */ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import ohosDataAbility from '@ohos.data.dataability'; -import Utils from '../utils/Utils.js'; -import LOG from '../utils/ContactsLog.js'; -import Constants from '../common/constants/Constants.js'; -import backgroundColor from '../common/constants/color.js'; - -var TAG = 'selectContactsModel'; - -export default { - - /** - * Querying Contacts - * - * @param {string} DAHelper Database address - * @param {Object} callBack - */ - queryContacts: async function (DAHelper, callBack) { - var contactNumberMap = await this.getAllContactNumbers(DAHelper); - var resultColumns = ['id as contactId', 'display_name as emptyNameData', 'sort_first_letter as namePrefix', - 'photo_first_name as nameSuffix', 'company as company', 'position as position']; - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - conditionArgs.equalTo('is_deleted', '0').orderByAsc('sort_first_letter'); - var resultSet = await DAHelper.query(Constants.uri.CONTACTS_URI_PREFIX + 'contact', - resultColumns, conditionArgs); - if (Utils.isEmpty(resultSet) || resultSet.rowCount == 0) { - LOG.error(TAG + 'queryContacts' + 'SelectcontactsModel queryContact resultSet is empty!'); - callBack(); - return; - } - var resultList = []; - resultSet.goToFirstRow(); - do { - var jsonObj = {}; - jsonObj.contactId = resultSet.getString(resultSet.getColumnIndex('contactId')); - jsonObj.emptyNameData = resultSet.getString(resultSet.getColumnIndex('emptyNameData')); - jsonObj.namePrefix = resultSet.getString(resultSet.getColumnIndex('namePrefix')); - jsonObj.nameSuffix = resultSet.getString(resultSet.getColumnIndex('nameSuffix')); - jsonObj.company = resultSet.getString(resultSet.getColumnIndex('company')); - jsonObj.position = resultSet.getString(resultSet.getColumnIndex('position')); - jsonObj.portraitColor = backgroundColor.Color[Math.abs(jsonObj.contactId) % 6]; - jsonObj.show = false; - jsonObj.phoneNumbers = contactNumberMap.get(jsonObj.contactId); - resultList.push(jsonObj); - } while (resultSet.goToNextRow()); - callBack(resultList); - }, - - /** - * Query all contact phone numbers - * - * @param {string} DAHelper Database address - */ - getAllContactNumbers: async function (DAHelper) { - var resultColumns = ['raw_contact_id', 'detail_info', 'extend7']; - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - conditionArgs.equalTo('type_id', '5').orderByAsc('raw_contact_id'); - var resultSet = await DAHelper.query(Constants.uri.CONTACT_DATA_URI, resultColumns, conditionArgs); - if (Utils.isEmpty(resultSet) || resultSet.rowCount == 0) { - LOG.error(TAG + 'getAllContactNumbers' + ' Selectcontacts Model getAllContactNumbers resultSet is empty!'); - return new Map(); - } - var contactNumberMap = new Map(); - resultSet.goToFirstRow(); - var oldContact = resultSet.getString(0); - var numberList = []; - do { - var newContact = resultSet.getString(0); - if (oldContact == String(newContact)) { - numberList.push({ - 'phoneNumber': resultSet.getString(1), - 'labelId': resultSet.getString(2) - }); - } else { - - contactNumberMap.set(oldContact, numberList); - oldContact = newContact; - - numberList = [{ - 'phoneNumber': resultSet.getString(1), - 'labelId': resultSet.getString(2) - }]; - } - } while (resultSet.goToNextRow()); - contactNumberMap.set(oldContact, numberList); - return contactNumberMap; - }, -}; \ No newline at end of file diff --git a/entry/src/main/js/default/model/mergeModel.js b/entry/src/main/js/default/model/mergeModel.js deleted file mode 100644 index 7c450dc..0000000 --- a/entry/src/main/js/default/model/mergeModel.js +++ /dev/null @@ -1,106 +0,0 @@ -/** - * @file Combined Model - */ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import LOG from '../utils/ContactsLog.js'; -import ohosDataAbility from '@ohos.data.dataability'; -import Constants from '../common/constants/Constants.js'; -import backgroundColor from '../common/constants/color.js'; - -var reGu = '^[a-zA-Z\u4e00-\u9fa5]+$'; -var re = new RegExp(reGu); -var TAG = 'mergeModel'; - -export default { - - /** - * Query merged contacts - * - * @param {string} DAHelper The database - * @param {null} data null - * @param {Object} callback - */ - queryMergeContactsList: async function (DAHelper, data, callback) { - var resultColumns = []; - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - var result = {}; - var resultSet = await DAHelper.query(Constants.uri.CONTACTS_URI_PREFIX - + 'raw_contact/query_merge_list', resultColumns, conditionArgs); - result.code = 0; - var resultMap = new Map(); - var mergeList = []; - if (resultSet.rowCount > 0) { - resultSet.goToFirstRow(); - var resultSetList = []; - do { - var jsonObj = {}; - jsonObj.contactId = resultSet.getString(resultSet.getColumnIndex('raw_contact_id')); - jsonObj.emptyNameData = resultSet.getString(resultSet.getColumnIndex('display_name')); - jsonObj.nameSuffix = resultSet.getString(resultSet.getColumnIndex('photo_first_name')); - jsonObj.phoneNumber = resultSet.getString(resultSet.getColumnIndex('detail_info')); - jsonObj.portraitColor = backgroundColor.Color[Math.abs(jsonObj.contactId) % 6]; - if (!resultMap.has(jsonObj.emptyNameData)) { - resultSetList = []; - } - resultSetList.push(jsonObj); - resultMap.set(jsonObj.emptyNameData, resultSetList); - } while (resultSet.goToNextRow()); - resultMap.forEach(function (value, key, mapObj) { - var mergeObj = {}; - mergeObj.contactBeans = value; - mergeObj.checked = true; - mergeList.push(mergeObj); - }); - } - result.mergeList = mergeList; - LOG.info(TAG + 'queryMergeContactsList' + ' merge contacts list =' + JSON.stringify(result.mergeList.length)); - callback(result); - }, - - /** - * Query merged contacts - * - * @param {string} DAHelper The database - * @param {null} data null - * @param {Object} callback - */ - autoMergeContacts: async function (DAHelper, data, callback) { - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - var updateParams = {}; - var result = await DAHelper.update(Constants.uri.CONTACTS_URI_PREFIX - + 'raw_contact/auto_merge', updateParams, conditionArgs); - LOG.info(TAG + 'autoMergeContacts' + 'autoMergeContacts get DAHelper.query --------------end'); - this.queryMergeContactsList(DAHelper, data, callback); - }, - - /** - * Query merged contacts - * - * @param {string} DAHelper The database - * @param {Object} data - * @param {Object} callback - */ - mergeContacts: async function (DAHelper, data, callback) { - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - conditionArgs.in('raw_contact_id', data.contactIds); - var updateParams = {}; - var result = await DAHelper.update(Constants.uri.CONTACTS_URI_PREFIX - + 'raw_contact/manual_merge', updateParams, conditionArgs); - LOG.info(TAG + 'mergeContacts' + 'mergeContacts get DAHelper.query --------------end'); - callback(result); - } -}; \ No newline at end of file diff --git a/entry/src/main/js/default/model/recentlydelModel.js b/entry/src/main/js/default/model/recentlydelModel.js deleted file mode 100644 index 5b06593..0000000 --- a/entry/src/main/js/default/model/recentlydelModel.js +++ /dev/null @@ -1,82 +0,0 @@ -/** - * @file: Recently deleted model - */ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import LOG from '../utils/ContactsLog.js'; -import ohosDataAbility from '@ohos.data.dataability'; -import Constants from '../common/constants/Constants.js'; - -var TAG = 'recentlydelModel'; - -export default { - - /** - * Query recently deleted contacts - * - * @param {string} DAHelper Database address - * @param {Object} data - * @param {Object} callback - */ - queryRecentlyDelContacts: async function (DAHelper, data, callback) { - var resultColumns = ['contact_id as contactId', 'display_name as name', 'delete_time as deleteTime']; - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - var now = Date.now(); - LOG.info(TAG + 'queryRecentlyDelContacts' + 'now is =' + now); - var difValue = now - (30 * 24 * 3600 * 1000); - var BeforeThirtyTime = difValue < 0 ? 0 : difValue; - LOG.info(TAG + 'queryRecentlyDelContacts' + '30 days before is =' + BeforeThirtyTime); - conditionArgs.greaterThan('delete_time', BeforeThirtyTime).orderByDesc('id').offsetAs(data.page * data.limit) - .limitAs(data.limit).groupBy('contact_id'); - var result = {}; - LOG.info(TAG + 'queryRecentlyDelContacts' + 'RecentlyDelContacts get DAHelper.query --------------start'); - var resultSet = await DAHelper.query(Constants.uri.CONTACTS_URI_PREFIX + 'deleted_raw_contact', - resultColumns, conditionArgs); - LOG.info(TAG + 'queryRecentlyDelContacts' + 'RecentlyDelContacts get DAHelper.query --------------end'); - result.code = 0; - var recentlyList = []; - if (resultSet.rowCount > 0) { - resultSet.goToFirstRow(); - do { - var jsonObj = {}; - jsonObj.contactId = resultSet.getString(resultSet.getColumnIndex('contactId')); - jsonObj.name = resultSet.getString(resultSet.getColumnIndex('name')); - jsonObj.deleteTime = resultSet.getString(resultSet.getColumnIndex('deleteTime')); - var timeDifStamp = now - jsonObj.deleteTime; - jsonObj.days = 30 - Math.floor(timeDifStamp < 0 ? 0 : timeDifStamp / (24 * 3600 * 1000)); - jsonObj.checked = false; - recentlyList.push(jsonObj); - } while (resultSet.goToNextRow()); - } - result.recentlyList = recentlyList; - LOG.info(TAG + 'queryRecentlyDelContacts' + 'query recently delete contacts list =' + result.length); - callback(result); - }, - - /** - * Clear recently deleted contacts - * - * @param {string} DAHelper Database address - * @param {Object} data - * @param {Object} callback - */ - clearRecentlyDelContacts: async function (DAHelper, data, callback) { - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - conditionArgs.in('contact_id', data.contactIds); - var result = await DAHelper.delete(Constants.uri.CONTACTS_URI_PREFIX + 'deleted_raw_contact', conditionArgs); - LOG.info(TAG + 'clearRecentlyDelContacts' + 'delete recently delete contacts result = ' + result.length); - callback(result); - } -}; \ No newline at end of file diff --git a/entry/src/main/js/default/model/recoverModel.js b/entry/src/main/js/default/model/recoverModel.js deleted file mode 100644 index ff7bf33..0000000 --- a/entry/src/main/js/default/model/recoverModel.js +++ /dev/null @@ -1,54 +0,0 @@ -/** - * @file: Restore deleting contact Model - */ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import LOG from '../utils/ContactsLog.js'; -import ohosDataAbility from '@ohos.data.dataability'; -import Constants from '../common/constants/Constants.js'; - -var TAG = 'recoverModel'; - - -export default { - - /** - * Resume Deleting contacts - * - * @param {string} DAHelper Database address - * @param {Object} data - * @param {Object} callback - */ - recoverRlyDelContacts: async function (DAHelper, data, callback) { - var conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - conditionArgs.in('contact_id', data.contactIds); - var updateParams = { - 'is_deleted': '0' - }; - let CONTACTS_URI_PREFIX = Constants.uri.CONTACTS_URI_PREFIX; - var result = await DAHelper.update(CONTACTS_URI_PREFIX + 'raw_contact', updateParams, conditionArgs); - LOG.info(TAG + 'recoverRlyDelContacts' + 'Recover contact is update state result=' + result.length); - if (result == 0) { - conditionArgs = new ohosDataAbility.DataAbilityPredicates(); - conditionArgs.in('contact_id', data.contactIds); - result = await DAHelper.delete(CONTACTS_URI_PREFIX + 'deleted_raw_contact_record', conditionArgs); - LOG.info(TAG + 'recoverRlyDelContacts' + 'Recover contact result = ' + result.length); - } else { - LOG.error(TAG + 'recoverRlyDelContacts' + 'Recover contact result is failed.'); - result = -1; - } - callback(result); - } -}; \ No newline at end of file diff --git a/entry/src/main/js/default/pages/calllog/calllog.hml b/entry/src/main/js/default/pages/calllog/calllog.hml deleted file mode 100644 index e28bee3..0000000 --- a/entry/src/main/js/default/pages/calllog/calllog.hml +++ /dev/null @@ -1,403 +0,0 @@ - - -
- - - - - {{ $t('value.callRecords.allCalls') }} - {{ $t('value.callRecords.missedCalls') }} - {{ $t('value.callRecords.voiceMails') }} - - - -
- - -
-
- - -
- - - - - - - - - - - - - - -
- - -
-
-
- - - {{ - ($item.name == '' || $item.name == undefined || $item.name == null) ? $item.formatNumber : $item.name - }} - - - {{ - ($item.num == '' || $item.num == undefined || $item.num <= 1) ? '' : '(' + $item.num + ')' - }} - -
-
- - - - - {{ $item.callTag }} - - - {{ $t('value.callRecords.unKnowLocation') }} - -
-
- {{ - $item.callTime }} -
- -
-
- -
-
- - -
-
-
-
- -
-
- -
-
- {{ $item.start }} - - {{ $item.voicemailDuration }} -
-
-
- -
-
- -
-
- - -
-
- -
-
- - -
-
-
-
-
- -
-
- - {{ $t('value.callRecords.noCallLogs') }} -
-
- -
- - - - -
-
- -
- - -
- -
-
-
- - {{ - ($item.name == '' || $item.name == undefined) ? $item.formatNumber : $item.name - }} - - - {{ - ($item.num == '' || $item.num == undefined || $item.num <= 1) ? '' : '(' + $item.num + ')' - }} - -
-
- - - - - {{ $item.callTag }} - - - {{ $t('value.callRecords.unKnowLocation') }} - -
-
- {{ $item.callTime }} - -
- -
-
- - -
-
-
-
- - -
-
-
-
- - -
-
- - - {{ $t('value.callRecords.noMissedCalls') }} - -
-
-
- - -
-
- - -
- -
-
- -
- - {{ ($item.name == '' || $item.name == undefined || $item.name == null) ? $item.formatNumber : $item.name }} - -
- -
- - - - - {{ $item.callTag }} - - - {{ $t('value.callRecords.unKnowLocation') }} - -
-
- - {{ $item.callTime }} -
- -
-
- -
-
- - -
-
- -
- - -
-
-
-
- {{ $item.start }} - - {{ $item.voicemailDuration }} -
-
-
- -
-
- -
-
- - -
-
- -
-
- - -
-
-
-
-
-
-
- - - {{ $t('value.callRecords.noVoiceMails') }} - -
-
-
-
- - - - - - - - - - - -
diff --git a/entry/src/main/js/default/pages/calllog/calllog.js b/entry/src/main/js/default/pages/calllog/calllog.js deleted file mode 100644 index 1970bde..0000000 --- a/entry/src/main/js/default/pages/calllog/calllog.js +++ /dev/null @@ -1,539 +0,0 @@ -/** - * @file: Call records - */ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import router from '@system.router'; -import LOG from '../../utils/ContactsLog.js'; - -var TAG = 'callLog'; - -export default { - props: ['allCalls', 'batchDelete', 'missedCallLogs', 'voicemailList', 'singleCardMode', 'showVoicemail'], - data: { - voicemailIntervalId: 0, - tabIndex: 0, - lastVoicemailDetailIndex: -1, - showTabTitle: false, - isFirstTop: true, - - icContactsCallIn: '/res/image/ic_contacts_call_in_mini.svg', - icContactsCallMissed: '/res/image/ic_contacts_call_missed_mini.svg', - icContactsCallRejected: '/res/image/ic_contacts_call_rejected_mini.svg', - icContactsCallOut: '/res/image/ic_contacts_callout_mini.svg', - icContactsVoicemailMini: '/res/image/ic_contacts_voicemail_mini.svg', - icContactsSim1: '/res/image/ic_contacts_sim_1_mini.svg', - icContactsSim2: '/res/image/ic_contacts_sim_2_mini.svg', - icContactsHd: '/res/image/ic_contacts_HD_mini.svg', - icDetailPublic: '/res/image/ic_public_about_m.svg', - icContactsEmptyCallLog: '/res/image/ic_contacts_empty_calllog_72.svg', - icContactsEmptyVoicemail: '/res/image/ic_contacts_empty_voicemaile_72.svg', - icDeleteM: '/res/image/ic_delete_white.svg', - - icVoicemailPlay: '/res/image/ic_play_filled_m.svg', - icVoicemailPause: '/res/image/ic_contacts_pause voicemail_m.svg', - icVoicemailVolume: '/res/image/ic_volume_m.svg', - icVoicemailEarpiece: '/res/image/ic_contacts_Earpiece_m.svg', - icVoicemailMessage: '/res/image/ic_massage_m.svg', - icVoicemailPhone: '/res/image/ic_phonecall_m_block.svg', - icVoicemailDelete: '/res/image/ic_delete_m.svg', - - useCheckBox: true, - checked: true, - - needSmallTitle: true, - touchMoveData: { - touchStartX: 0, - touchStartY: 0, - lastFrameX: 0, - lastFrameY: 0, - isTouchMove: false - }, - listAnimateId: 0, - - callMenuData: { - index: '', - itemId: [], - name: '', - number: '' - }, - - showMenuTimeOutId: '', - contactCount: 0, - contacts: [], - numRecords: [] - }, - onInit() { - LOG.info(TAG + 'onInit' + 'logMessage: onInit calllog: length = ' + this.allCalls.length); - this.$app.$def.globalData.refreshFunctions.push(() => { - LOG.info(TAG + 'onInit' + 'logMessage callBack callLog!'); - if (this.$app.$def.dialerStateData.isGoToMissedCalls) { - this.tabIndex = 1; - this.showTabTitle = true; - this.$app.$def.dialerStateData.isGoToMissedCalls = false; - } - }); - this.useCheckBox = this.batchDelete; - }, - onShow() { - this.isFirstTop = true; - }, - onDestroy() { - LOG.info(TAG + 'onDestroy' + 'logMessage onDestroy callLog!'); - this.$app.$def.globalData.refreshFunctions.pop(); - }, - - /** - * Play or pause - * - * @param {number} index - */ - startOrPause: function (index) { - LOG.info(TAG + 'startOrPause' + 'logMessage startOrPause index = ' + index); - if (this.voicemailList[index].playState == 'start') { - this.voicemailIntervalId = setInterval(() => { - this.voicemailList[index].percentProgress += 1; - if (this.voicemailList[index].percentProgress % 10 == 0) { - var displayValue = this.voicemailList[index].percentProgress / 10; - this.voicemailList[index].start = displayValue < 10 ? '00:0' + displayValue : '00:' + displayValue; - } - this.voicemailList[index].percent = parseInt(parseFloat(this.voicemailList[index].percentProgress) - / parseFloat(this.voicemailList[index].timeDuration) * 10, 10); - - if (this.voicemailList[index].percentProgress - == this.voicemailList[index].timeDuration * 10) { - clearInterval(this.voicemailIntervalId); - this.voicemailList[index].playState = 'start'; - this.voicemailList[index].start = '00:00'; - this.voicemailList[index].percentProgress = 0; - this.voicemailList[index].percent = 0; - } - }, 100); - this.voicemailList[index].playState = 'pause'; - } else { - clearInterval(this.voicemailIntervalId); - this.voicemailList[index].playState = 'start'; - } - LOG.info(TAG + 'onInit' + 'logMessage startOrPause voicemailList = ' + this.voicemailList); - }, - - /** - * Change the volume - * - * @param {number} index - */ - changeVolume: function (index) { - LOG.info(TAG + 'changeVolume' + 'logMessage changeVolume index = ' + index); - if (this.voicemailList[index].volumeState == 'volume') { - this.voicemailList[index].volumeState = 'earpiece'; - } else { - this.voicemailList[index].volumeState = 'volume'; - } - LOG.info(TAG + 'onInit' + 'logMessage startOrPause voicemailList = ' + this.voicemailList); - }, - deleteVoicemail() { - this.$element('deleteDialog').show(); - }, - sendMessageByLog() { - var params = []; - params.push({ - contactsName: this.callMenuData.name, - telephone: this.callMenuData.number.replace(' ', '').replace(' ', ''), - telephoneFormat: this.callMenuData.number, - }); - this.$app.$def.sendMessage(params); - }, - editBeforeByLog() { - this.$emit('editCall', { - number: this.callMenuData.number, - }); - }, - - /** - * Click on a voicemail message - * - * @param {number} index - */ - clickVoicemailMessage: function (index) { - this.callMenuData.index = index; - this.callMenuData.itemId = this.voicemailList[index].ids; - this.callMenuData.name = this.voicemailList[index].name; - this.callMenuData.number = this.voicemailList[index].formatNumber; - if (this.lastVoicemailDetailIndex != -1 && this.lastVoicemailDetailIndex != index) { - this.voicemailList[this.lastVoicemailDetailIndex].showMail = false; - this.voicemailList[this.lastVoicemailDetailIndex].start = '00:00'; - this.voicemailList[this.lastVoicemailDetailIndex].percent = 0; - this.voicemailList[this.lastVoicemailDetailIndex].percentProgress = 0; - } - this.voicemailList[index].showMail = !this.voicemailList[index].showMail; - if (this.voicemailList[index].showMail) { - this.lastVoicemailDetailIndex = index; - } else { - this.lastVoicemailDetailIndex = -1; - } - }, - - /** - * Example Delete a single call record - * - * @param {number} index - */ - deleteSingleLog: function (index) { - var tempList = []; - if (this.tabIndex == 2) { - tempList = this.voicemailList; - } else if (this.tabIndex == 1) { - tempList = this.missedCallLogs; - } else { - tempList = this.allCalls; - } - this.$emit('deleteSingleCall', { - id: tempList[index].ids, - phoneNumber: [tempList[index].phone], - contactKey: [tempList[index].contactKey], - tabIndex: this.tabIndex - }); - - }, - - /** - * In the case of batch deletion, click a call record to select or deselect the check box. In the case of non-batch deletion, dial the call based on card 1 and card 2 - * - * @param {number} index - * @param {number} type - * @param {number} e - */ - callLogProcess(index, type, e) { - if (this.batchDelete) { - var checked = !this.allCalls[index].checked; - this.changeCheckState(index, { - 'checked': checked - }); - - } else { - this.$emit('callProcess', { - number: Number(type) === 0 ? this.allCalls[index].formatNumber - : this.missedCallLogs[index].formatNumber, - }); - } - }, - - listScrollTop() { - if (!this.batchDelete) { - this.showTabTitle = true; - this.needSmallTitle = true; - this.$emit('changeTitle', { - type: 0 - }); - } - }, - - listScrollBottom() { - this.showTabTitle = false; - }, - listScroll(e) { - if (this.isFirstTop && e.scrollY < 0 && !this.batchDelete) { - this.showTabTitle = true; - this.isFirstTop = false; - } - }, - - /** - * Display specific call history details - * - * @param {number} id - * @param {Object} e - */ - showRecordDetails: function (id, e) { - this.$emit('showDetails', { - logIndex: id, - tabIndex: this.tabIndex - }); - }, - - /** - * Change the selected state - * - * @param {number} index - * @param {Object} e - */ - changeCheckState(index, e) { - this.$emit('changeChecked', { - checked: e.checked, - index: index, - num: this.allCalls[index].num - }); - }, - - /** - * Select the call - * - * @param {number} index - */ - selectCall(index) { - this.$emit('checkCall', { - id: this.allCalls[index].id, - index: index - }); - }, - requestCallLog() { - this.$emit('requestLog', {}); - }, - requestMissedCalls() { - this.$emit('requestMissed', {}); - }, - - /** - * Start touching the Call List child event - * - * @param {number} index - * @param {Object} e - */ - touchStartListItemDiv(index, e) { - if (this.batchDelete) { - return; - } - LOG.info(TAG + 'touchStartListItemDiv' + 'logMessage touchStartListItemDiv : ' + e); - this.touchMoveData.touchStartX = e.touches[0].globalX; - this.touchMoveData.touchStartY = e.touches[0].globalY; - this.$emit('itemTouchStart', { - index: index, - positionX: e.touches[0].globalX, - positionY: e.touches[0].globalY, - }); - }, - - /** - * Slide the call List child event - * - * @param {number} index - * @param {Object} e - */ - touchMoveListItem(index, e) { - if (this.batchDelete) { - return; - } - this.$emit('itemTouchMove', { - index: index, - positionX: e.touches[0].globalX, - positionY: e.touches[0].globalY, - }); - }, - - /** - * End touch Call List child event - * - * @param {number} index - * @param {Object} e - */ - touchEndListItem(index, e) { - if (this.batchDelete) { - return; - } - this.$emit('itemTouchEnd', { - index: index, - positionX: e.changedTouches[0].globalX, - positionY: e.changedTouches[0].globalY, - }); - }, - - /** - * Long press to display a single record menu item - * - * @param {number} index - * @param {number} type - */ - showCallMenu(index, type) { - if (this.batchDelete) { - return; - } - if (type == 2) { - this.callMenuData.index = index; - this.callMenuData.itemId = this.voicemailList[index].ids; - this.callMenuData.name = this.voicemailList[index].name; - this.callMenuData.number = this.voicemailList[index].formatNumber; - } else if (type == 1) { - this.callMenuData.index = index; - this.callMenuData.itemId = this.missedCallLogs[index].ids; - this.callMenuData.name = this.missedCallLogs[index].name; - this.callMenuData.number = this.missedCallLogs[index].formatNumber; - } else { - this.callMenuData.index = index; - this.callMenuData.itemId = this.allCalls[index].ids; - this.callMenuData.name = this.allCalls[index].name; - this.callMenuData.number = this.allCalls[index].formatNumber; - } - var tempX = this.touchMoveData.touchStartX; - var tempY = this.touchMoveData.touchStartY; - - if (this.touchMoveData.touchStartX > 360) { - tempX = 360; - } - if (this.callMenuData.name == '' || this.callMenuData.name == undefined) { - if ((tempX > 320 && tempX < 330) && tempY > 450) { - tempY = 450; - } else if (tempX < 320 && tempY > 510) { - tempY = 510; - } else if (tempY > 420) { - tempY = 420; - } - } else { - tempY = tempY > 700 ? 700 : tempY; - } - clearTimeout(this.showMenuTimeOutId); - - this.showMenuTimeOutId = setTimeout(() => { - this.$element('callLogMenu').show({ - x: tempX, - y: tempY - }); - }, 100); - }, - - /** - * Long press the menu item to process each operation - * - * @param {Object} e - */ - onCallMenuSelected(e) { - switch (parseInt(e.value, 10)) { - case 1: - router.push({ - uri: 'pages/contacts/accountants/accountants', - params: { - phoneNumbers: [ - { - 'labelId': 2, - 'labelName': this.$t('accountants.phone'), - 'phoneNumber': this.callMenuData.number, - 'phoneAddress': 'N', - 'showP': true, - 'blueStyle': true - } - ] - }, - }); - break; - case 2: - router.push({ - uri: 'pages/contacts/selectContactsList/selectContactsList', - params: { - type: 'saveContacts', - number: this.callMenuData.number, - } - }); - break; - case 3: - this.sendMessageByLog(); - break; - case 4: - this.$emit('copyNumber', { - number: this.callMenuData.number - }); - break; - case 5: // Pre-call editing - this.$emit('editCall', { - number: this.callMenuData.number, - }); - break; - case 6: // Add to the blacklist - break; - case 7: // Deleting Call History - this.$element('deleteDialog').show(); - break; - default: - break; - } - }, - doDelete() { - this.$emit('removeCall', { - id: this.callMenuData.itemId, - index: this.callMenuData.index - }); - }, - - /** - * Monitor the sliding distance to determine whether the dial needs to be hidden - * - * @param {Object} e - */ - touchMoveContent(e) { - if (e.touches[0].globalY - this.touchMoveData.touchStartY > 100 && !this.touchMoveData.isTouchMove) { - this.$emit('hideDialer', {}); - if (!this.batchDelete && this.allCalls.length > 0) { - this.showTabTitle = true; - } - this.touchMoveData.isTouchMove = true; - } - if ((e.touches[0].globalY - this.touchMoveData.touchStartY < -100) && this.allCalls.length > 0 - && !this.touchMoveData.isTouchMove) { - this.$emit('hideDialer', {}); - this.showTabTitle = false; - if (this.needSmallTitle) { - this.$emit('changeTitle', { - type: 1 - }); - this.needSmallTitle = false; - } - this.touchMoveData.isTouchMove = true; - } - }, - touchEndContent: function () { - this.touchMoveData.isTouchMove = false; - }, - - /** - * Call history and missed call switchover event - * - * @param {Object} e - */ - changeCallListTab(e) { - this.tabIndex = e.index; - this.$emit('changeLog', { - logIndex: e.index, - }); - }, - - /** - * Parameters that: - * - * @param {string} str - * @return {string} newStr - */ - subStringWithEllipsis(str) { - let newLength = 0; - let len = 7; - let newStr = ''; - let chineseRegex = /[^\x00-\xff]/g; - let singleChar = ''; - let strLength = str.replace(chineseRegex, '**').length; - for (var i = 0; i < strLength; i++) { - singleChar = str.charAt(i).toString(); - if (singleChar.match(chineseRegex) != null) { - newLength += 2; - } else { - newLength++; - } - - if (newLength > len) { - break; - } - newStr += singleChar; - } - newStr += '..' - return newStr; - } -}; \ No newline at end of file diff --git a/entry/src/main/js/default/pages/calllog/calllog.scss b/entry/src/main/js/default/pages/calllog/calllog.scss deleted file mode 100644 index 5dcf9e1..0000000 --- a/entry/src/main/js/default/pages/calllog/calllog.scss +++ /dev/null @@ -1,344 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -@import '../../base/base_color.scss'; -.container { - width: 100%; - height: 100%; -} -.tabs-records { - flex-direction: column; - justify-content: center; - align-items: center; - width: 100%; - height: 100%; -} - -.tab-bar-box { - width: 72%; - height: 100px; -} -.tab-bar-box-display { - width:60%; - height: 0px; - animation-name: displayTabBar; - animation-fill-mode: forwards; - animation-duration: 3000ms; - animation-delay: 0ms; -} - -.tab-bar-box text:active{ - font-weight: 600; - color: $textColorTabBar; -} -.tab-bar-title{ - width:120px; -} -.tab-content-box { - width: 100%; - height: 100%; - justify-content: center; -} -.tab-content-box-hide-bar { - width: 100%; - height: 100%; - justify-content: center; -} -.tab-content-container { - height: 100%; - width: 100%; - justify-content: center; - align-items: center; -} -.allrecords-list { - flex-direction: column; - columns: 1; -} -.list-item-content { - width: 100%; - height: 130px; -} -.allrecords-list-item { - width: 100%; - height: 100%; - padding-top: 20px; - padding-bottom: 20px; -} - -.allrecords-item-icon-left { - flex-direction: column; - align-items: center; - width: 90px; - padding-top: 5px; -} -.allrecords-item-content { - flex-direction: row; - height: 100%; - width: 500px; - flex-grow:1; - align-items: flex-start; -} - -.allrecords-item-right { - height: 100%; - width:130px; - justify-content: center; - align-items: center; -} -.records-delete-box { - height: 80px; - width: 80px; - background-color: red; - justify-content: center; - align-items: center; - border-radius: 40px; -} -.one-btn { - width: 180px; - margin-right: -180px; -} -.records-delete-image { - height:80px; - width: 80px; -} -.allrecords-item-right-text { - height:100%; - align-items:center; - font-size: 26px; - font-weight: 500; - color: gray; - max-lines: 1; - text-align: right; - max-width: 310px; - min-width: 50px; - flex-basis: 160px; - margin-right: 0px; - text-overflow: ellipsis; - flex-grow:2; -} -.allrecords-item-right-image { - justify-content: center; - align-items: center; - width: 100px; - height: 100px; - border-radius: 10px; -} -.allrecords-item-right-checkbox { - justify-content: center; - align-items: center; - width: 110px; - height: 110px; - border-radius: 10px; -} -.allrecords-item-right-image:active { - background-color: lightgray; -} -.allrecords-item-right-image-icon { - height: 50px; - width: 50px; -} -.allrecords-item-delete { - top: 0px; - height: 100%; - flex-direction: row; - align-items: center; - justify-content: center; - background-color: #F2F2F2; -} -.allrecords-list-item-line { - width: 100%; - margin-right: 40px; - margin-left: 87px; - height: 1px; - border-bottom: 1px; - border-color: lightgray; -} -.allrecords-list-item-padding { - width: 100%; - height: 200px; -} -.list-item-log { - flex-direction: column; - align-items: center; -} - -.allrecords-list-item-delete { - width: 120%; - height: 12%; - padding-top: 14px; - padding-bottom: 15px; - animation-name: displayDeleteButton; - animation-fill-mode: forwards; - animation-duration: 3000ms; - animation-delay: 1000ms; -} -.allrecords-item-icon-left-image { - height: 30px; - width: 30px; - opacity: .5; -} -.voicemail-item-icon-left-image { - margin-top:10px; - height: 30px; - width: 30px; -} -.voicemail-detail { - width: 100%; - margin-right: 40px; - margin-left: 87px; - flex-direction: column; - height: 240px; -} -.voicemail-progress-box { - flex-direction: row; - align-items: center; - height:120; -} -.voicemail-options-box { - flex-direction:row; - align-items:center; - justify-content:space-between; - height:120; -} -.option-image-box { - justify-content:center; - align-items:center; - width:100px; - height:100px; - border-radius:10px; -} -.option-image-box:active{ - background-color: lightgray; -} -.voicemail-detail-option-image { - width:50px; - height:50px; -} - -.voicemail-duration-text-start { - color:gray; - width:130px; - text-align: left; - flex-shirik:0; -} -.voicemail-duration-text-end { - color:gray; - width:130px; - text-align: right; - flex-shirik:0; -} -.voicemail-detail-progress { - width:100%; -} -.allrecords-item-content-middle-box { - height: 50%; - align-items: center; -} -.allrecords-item-content-middle-data { - flex-direction: column; - min-width: 0px; - max-width: 400px; - flex-grow: 1; -} -.allrecords-item-content-middle-text { - font-size: 32px; - font-weight: 600; - max-lines: 1; - min-width:0px; - max-width:350px; - text-overflow: ellipsis; - margin-right: 5px; -} -.allrecords-item-content-middle-text-red { - font-size: 32px; - font-weight: 600; - max-lines: 1; - min-width:0px; - max-width:350px; - text-overflow: ellipsis; - margin-right: 5px; - color: #e80000; -} -.allrecords-item-number { - font-size: 30px; - font-weight: 600; - min-width:0px; - max-width:200px; - flex-basis:130px; - flex-grow: 1; -} -.allrecords-item-number-red { - font-size: 30px; - font-weight: 600; - min-width:0px; - max-width:200px; - flex-basis:130px; - flex-grow: 1; - color: #e80000; -} -.allrecords-item-content-middle-bottom-image { - width: 25px; - height: 25px; - opacity: .5; - margin-right:6px; -} -.allrecords-item-content-middle-bottom-text { - font-size: 26px; - font-weight: 500; - color: gray; - max-lines: 2; - max-width: 310px; - min-width: 50px; - text-overflow: ellipsis; -} - -.tab-content-no-missed-calls { - justify-content: center; - align-items: center; - flex-direction: column; - margin-bottom: 20px; -} -.tab-content-no-voice-mail { - justify-content: center; - align-items: center; - flex-direction: column; - margin-bottom: 20px; -} -.empty-list-image { - height: 160px; - width: 160px; -} -.empty-list-text { - font-size: 28px; - color: gray; -} - -@keyframes displayDeleteButton { - from{ - transform: translateX(0%); - } - to{ - transform: translateX(-10%); - } -} -@keyframes displayTabBar { - from{ - height:0px; - transform: translateY(0px); - } - to{ - height:120px; - transform: translateY(120px); - } -} diff --git a/entry/src/main/js/default/pages/contacts/accountants/accountants.css b/entry/src/main/js/default/pages/contacts/accountants/accountants.css deleted file mode 100644 index 3f6dade..0000000 --- a/entry/src/main/js/default/pages/contacts/accountants/accountants.css +++ /dev/null @@ -1,473 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - width: 100%; - height: 100%; - flex-direction: column; - justify-content: flex-start; - align-items: center; -} - -.list-wraper { - width: 100%; - height: 100%; - columns: 1; -} - -.text-style { - margin-top: 30px; - align-items: center; - margin-left: 15px; - font-size: 26px; -} - -.title { - flex-direction: row; - justify-content: flex-start; - align-items: center; - width: 100%; - height: 160px; - margin-left: 25px; - margin-right: 25px; -} - -.title-image { - height: 50px; - width: 50px; -} - -.button-click { - height: 80; - width: 80; - justify-content: center; - align-items: center; - border-radius: 10px; - flex-shrink: 0; -} - -.button-click:active { - background-color: #d3d3d3; -} - -.title-image:disabled { - opacity: .2; -} - -.title-context { - width: 100%; - height: 200px; - text-align: left; - font-size: 34px; - margin-left: 25px; -} - -.const-fisrt-image { - height: 180px; - width: 180px; -} - -.const-div { - flex-direction: column; - justify-content: center; - align-items: center; - height: 400px; - width: 100%; -} - -.const-div-are { - height: 100px; - width: 100%; -} - -.const-fisrt-div { - flex-direction: column; - justify-content: center; - align-items: center; - height: 90%; - -} - -.const-fisrt-dis-image { - justify-content: center; - align-items: center; - height: 100%; - width: 20%; -} - -.const-fisrt { - flex-direction: row; - align-items: center; - height: 90px; -} - -.const-note { - align-items: center; - height: 100%; - background-color: #F00; - width: 15%; - font-size: 31px; -} - -.const-fisrt-1 { - flex-direction: row; - align-items: flex-start; - height: 3%; - width: 100%; - background-color: #F548FF; -} - -.const-text { - height: 30%; - font-size: 26px; - color: #e5000000; - font-weight: bolder; -} - -.const-text-sub { - font-size: 26px; - color: #a9a9a9; -} - -.const-div-div { - flex-direction: column; - align-content: flex-start; - height: 70%; - width: 100%; - background-color: #345B80; -} - -.const-global-div { - flex-direction: row; - height: 16.666%; - width: 100%; -} - -.const-image-div { - height: 80px; - width: 80px; - margin-left: 15px; - align-items: center; - justify-content: center; -} - -.const-image-div-1 { - height: 100%; - width: 20%; - align-items: center; - justify-content: center; - background-color: #2749FF; -} - -.fisrt-image { - height: 42px; - width: 42px; -} - -.font-color-text { - height: 100%; - width: 60%; - background-color: transparent; - border-style: solid; - border-bottom-style: solid; - display: flex; - flex-shrink: 1; -} - -.test-hidder { - height: 100%; - width: 60%; - background-color: transparent; - border-bottom: 1px solid #000; - -} - -.font-color-first { - height: 100%; - width: 82%; - background-color: transparent; - border-bottom: 1px solid #bababa; - margin-left: 20px; - justify-content: center; - align-items: center; -} - -.font-color-first:focus { - height: 100%; - width: 82%; - background-color: transparent; - border-bottom: 1px solid #4e4e4e; - margin-left: 20px; - justify-content: center; - align-items: center; -} - -.input-font { - margin-left: -30px; - background-color: transparent; - font-size: 26px; - height: 60px; -} - -.font-color-note { - background-color: transparent; - height: 100%; - width: 55%; - border-bottom: 1px solid #bababa; - justify-content: center; - align-items: center; -} - -.font-color-note:focus { - background-color: transparent; - height: 100%; - width: 55%; - border-bottom: 1px solid #4e4e4e; - justify-content: center; - align-items: center; -} - -.text-note { - height: 100%; - width: 27%; - flex-direction: row; - align-items: center; - font-size: 26px; -} - -.font-color { - height: 100%; - color: #F30A64D1; - font-size: 26px; - font-weight: bold; -} - -.title-text { - margin: 20px; -} - -.more-info { - width: 1080px; - height: 700px; - flex-direction: column; - -} - -.more-fisrt { - flex-direction: row; - height: 100px; - width: 100%; -} - -.test-div { - flex-direction: row; - height: 100px; - width: 100%; - background-color: #2CFF54; -} - -.test-div-div { - flex-direction: row; - height: 20%; - width: 100%; - background-color: #3960FF; -} - -.input-style { - width: 85%; - color: #000; - font-size: 26px; - height: 60px; - flex-direction: row; - background-color: transparent; - margin-left: -35px; -} - -.input-style-blue { - color: #1E90FF; - width: 85%; - flex-direction: row; - background-color: transparent; - margin-left: -35px; -} - -.more-style { - width: 100%; - flex-direction: row; - background-color: transparent; - color: #808080; -} - -.right-image { - height: 50px; - width: 50px; - border-radius: 25px; - background-color: #a9a9a9; - margin-bottom: 20px; - border-radius: 30px; -} - -.more-image { - height: 50px; - width: 55px; - border-radius: 25px; - background-color: #a9a9a9; - -} - -.font-text { - height: 100%; - width: 92%; - background-color: transparent; - flex-direction: row; -} - -.end-div { - height: 600px; -} - -.delete-main { - width: 650px; - height: 15%; -} - -.delete-div { - flex-direction: column; - align-items: center; - justify-content: flex-end; -} - -.txt-v { - font-size: 26px; -} - -.delete-btn { - width: 100%; - height: 50%; - justify-content: space-around; - align-items: center; -} - -delete-txt { - width: 40%; - height: 70%; - border-radius: 30px; - background-color: transparent; - text-color: #175cfe; - font-size: 26px; -} - -.delete-txt-delete { - width: 40%; - height: 70%; - border-radius: 30px; - background-color: transparent; - text-color: #F00; - font-size: 26px; -} - -.card-div { - flex-direction: column; - height: 60%; -} - -.card-bottom-div { - flex-direction: row; - width: 100%; - height: 200px; -} - -.edit-bottom-div { - flex-direction: row; - width: 100%; - height: 200px; -} - -.card-test-div { - height: 50%; - color: #6c6c6c; - font-size: 26px; -} - -.card-test-local-div { - height: 50%; - font-size: 26px; -} - -.dialog-main { - width: 85%; - margin-bottom: 600px; - align-items: center; -} - -.dialog-reset { - height: 300px; - width: 85%; - align-items: center; -} - -.dialog-input { - width: 85%; - background-color: transparent; - border-bottom: 1px solid #80807F; -} - -.dialog-div { - flex-direction: column; - align-items: center; - border-style: dotted; - border-radius: 50px; -} - -.inner-txt { - width: 400px; - height: 160px; - flex-direction: column; - align-items: flex-start; - justify-content: space-around; - margin-right: 150px; -} - -.inner-title { - width: 400px; - height: 160px; - flex-direction: column; - align-items: center; - justify-content: space-around; -} - -.txt { - color: #000; - font-size: 26px; -} - -.inner-btn { - width: 400px; - height: 120px; - justify-content: space-around; - align-items: center; -} - -.date-style { - font-size: 26px; - margin-top: 30px; - align-items: center; - margin-left: 15px; - width: 80%; - background-color: transparent; -} - -.item-padding-bottom { - height: 100px; -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/accountants/accountants.hml b/entry/src/main/js/default/pages/contacts/accountants/accountants.hml deleted file mode 100644 index e3adde3..0000000 --- a/entry/src/main/js/default/pages/contacts/accountants/accountants.hml +++ /dev/null @@ -1,472 +0,0 @@ - - -
-
-
- -
- {{ $t('accountants.addContacts') }} - {{ $t('accountants.addCarte') }} - - {{ $t('accountants.updateContacts') }} -
- -
-
- - -
- - {{ - $t('accountants.savePhone') }} - {{ $t('accountants.saveCarte') }} -
-
- - -
- -
-
- -
-
- - -
-
-
- -
-
- - -
-
-
- -
-
- - -
-
-
- -
-
- - -
- -
-
- -
-
- - -
-
-
- -
-
- - -
- -
-
- -
-
- - -
-
- - - -
-
-
- {{ $t('accountants.addNumber') }} - -
-
- - -
-
- -
-
- -
-
- - -
-
-
- - -
-
-
- {{ $t('accountants.addEmail') }} - -
-
- - -
- -
-
- {{ $t('accountants.note') }} -
-
- -
-
- - - -
- -
-
- {{ $t('accountants.group') }} -
-
- -
-
- - - -
-
- -
-
- - -
- -
- - -
-
-
- - - -
-
-
- {{ $t('accountants.addMess') }} - -
-
- - - > -
- -
- - - -
- - -
- -
-
- -
-
- - -
- -
- - -
-
-
- {{ $t('accountants.address') }} - -
-
- - -
- -
-
- {{ $t('accountants.nick') }} -
-
- -
-
- - -
- -
-
- {{ $t('accountants.website') }} -
-
- - -
-
- - -
-
-
- {{ $t('accountants.addwebsite') }} - -
-
- - -
- -
- -
- -
-
- - -
-
- - -
-
-
- {{ $t('accountants.import day') }} - -
-
- - -
- -
- -
- -
-
- - -
-
- - -
-
-
- {{ $t('accountants.addrelship') }} - -
-
- - - -
-
- {{ $t('accountants.selects') }} -
- - -
-
-
- {{ $t('accountants.cardUpdate') }} - {{ $t('accountants.localResource') }} -
-
- -
-
-
- {{ $t('accountants.cardUpdate') }} - {{ $t('accountants.mobile') }} -
-
- -
- - - -
-
- {{ $t('accountants.addlable') }} -
- -
- - | - -
-
-
- - - -
- {{ $t('accountants.dosave') }} -
- - | - -
-
-
-
\ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/accountants/accountants.js b/entry/src/main/js/default/pages/contacts/accountants/accountants.js deleted file mode 100644 index 25aed1d..0000000 --- a/entry/src/main/js/default/pages/contacts/accountants/accountants.js +++ /dev/null @@ -1,1832 +0,0 @@ -/** - * @file Creating a Contact - */ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import router from '@system.router'; -import contactReq from '../../../../default/model/AccountantsModel.js'; -import configuration from '@system.configuration'; -import contactDetailReq from '../../../../default/model/ContactDetailModel.js'; -import LOG from '../../../utils/ContactsLog.js'; -import Constants from '../../../../default/common/constants/Constants.js'; -import Prompt from '@system.prompt'; - -var TAG = ' accountants...: '; - -export default { - data: { - // New Contact Status - addShow: true, - // Editing contact Status - updataShow: false, - // Business card - carteFlag: false, - // Edit card - updateCard: false, - phonShow: false, - MoreDivStatus: true, - // State of pinyin - LetterShow: false, - // Instant Message Status - upMessShow: false, - // The bell state - upRingShow: false, - // Residential status - upHouseShow: false, - // The nickname status - upNickShow: false, - // Site condition - upWebShow: false, - // State of birthday - upBirthShow: false, - // assistant - upAssShow: false, - showWork: false, - isEmpty: false, - - flexInputStyle: 'const-fisrt', - flexImageStyle: 'const-image-div', - flexImageSize: 'fisrt-image', - flexInputSize: 'font-color-first', - flexInputFont: 'font-color-note', - flexCenterSize: 'text-note', - ringText: '', - id: 0, - emailShow: false, - messShow: false, - houseShow: false, - websiteShow: false, - assisShow: false, - groups: [], - saveContact: false, - phoneNumber: '', - groupContext: '', - emails: [ - { - 'id': 1, - 'email': '', - 'labelId': 1, - 'labelName': '', - 'showP': false - } - ], - events: [ - { - 'id': 1, - 'eventDate': '', - 'labelId': 3, - 'showP': false, - 'showF': true, - 'showS': true - } - ], - imAddresses: [ - { - 'id': 1, - 'imAddress': '', - 'labelId': 1, - 'labelName': 'AIM', - 'showP': false - } - ], - phoneNumbers: [ - { - 'id': 1, - 'labelId': 2, - 'labelName': '', - 'phoneNumber': '', - 'phoneAddress': 'N', - 'blueStyle': false, - 'showP': false - } - ], - postalAddresses: [ - { - 'id': 1, - 'labelId': 1, - 'labelName': '', - 'postalAddress': '', - 'showP': false - } - ], - relations: [ - { - 'id': 1, - 'labelId': 1, - 'labelName': '', - 'relationName': '', - 'showP': false - } - ], - websites: [ - { - 'id': 1, - 'website': '', - 'showP': false - } - ], - name: { - 'fullName': '', - 'givenName': '', - 'familyName': '', - 'middleName': '', - 'familyNamePhonetic': '', - 'alphaName': '' - }, - nickName: { - 'nickName': '' - }, - note: { - 'noteContent': '' - }, - organization: { - 'name': '', - 'title': '' - }, - birthShow: false, - showF: true, - showS: true, - types: ['3', '2', '4', '1'], - typeShow: false, - labType: '', - labId: 0, - contactForm: {}, - timeOutId: '', - DialogStatus: true, - year: '', - endyear: '', - customizeInputValue: '', // Customize the value of the input box - oldCustomizeLabelId: '2', - oldParam: {}, - isInitFirst: true, - delCard: false, - // Whether to add an id to the group - groupStatus: false, - contactId: 0, - contacts: {}, - language: '', - langStatus: true, - usStatus: false, - letter: '', - givenName: '', - familyName: '', - middleName: '', - familyNamePhonetic: '', - }, - - onInit() { - LOG.info(TAG + 'onInit......'); - this.events[0].eventDate = this.$t('accountants.date'); - this.language = configuration.getLocale().language; - this.isInitFirst = true; - var date = new Date(); - this.letter = this.$t('accountants.letter'); - if (this.language == 'en') { - this.langStatus = false; - } - this.endyear = date.getFullYear() + 1 + '-1-1'; - LOG.info(TAG + 'onInit' + '----' + this.endyear); - var temp = ''; - - if (this.addShow && !this.groupStatus) { - this.contactForm = { - 'emails': this.emails, - 'events': this.events, - 'favorite': false, - 'imAddresses': this.imAddresses, - 'name': this.name, - 'nickName': this.nickName, - 'note': this.note, - 'organization': this.organization, - 'phoneNumbers': this.phoneNumbers, - 'postalAddresses': this.postalAddresses, - 'relations': this.relations, - 'show': false, - 'websites': this.websites, - 'groups': this.groups - } - } - // Group return value Splicing page display value - if (!this.contactForm.groups || this.contactForm.groups.length == 0) { - this.contactForm.groups = this.groups; - } - if (this.contactForm.groups.length > 0) { - if (this.contactForm.groups.length == 1) { - temp = this.groups[0].title; - } else { - this.contactForm.groups.forEach(group => { - temp = temp + ',' + group.title - }) - temp = temp.substring(1, temp.length - 1); - } - this.groupContext = temp; - } - // Update page initialization - if (this.updataShow && !this.groupStatus) { - if (this.saveContact) { - var requestData = { - contactId: this.contactId - }; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - contactDetailReq.getContactById(DAHelper, requestData, result => { - LOG.info(TAG + 'onInit' + 'getContactById .....'); - this.initUpdateData(result.data) - this.contactForm = result.data; - if (this.contactForm.phoneNumbers.length == 1 && this.contactForm.phoneNumbers[0].phoneNumber == '') { - this.contactForm.phoneNumbers = []; - } - this.contactForm.phoneNumbers.push({ - 'labelId': 2, - 'labelName': this.$t('accountants.phone'), - 'phoneNumber': this.phoneNumber, - 'phoneAddress': 'N', - 'showP': false, - 'blueStyle': true - }) - }); - } - this.initUpdateData(this.contactForm); - // The number type on the page automatically removes the space for the phone number, resulting in inconsistent data - if (this.contactForm.phoneNumbers) { - this.contactForm.phoneNumbers.forEach(element => { - element.phoneNumber = element.phoneNumber.replace(/\s+/g, ''); - }); - } - this.oldParam = this.copy(this.contactForm); - if (this.contactForm.name.fullName == undefined) { - this.contactForm.name.fullName = ''; - } - if (this.contactForm.name.alphaName == '') { - this.contactForm.name.fullName = ''; - } - if (this.contactForm.organization.title == undefined) { - this.contactForm.organization.title = '' - } - // The number type on the page automatically removes the space for the phone number, resulting in inconsistent data - if (this.contactForm.phoneNumbers) { - this.contactForm.phoneNumbers.forEach(element => { - element.phoneNumber = element.phoneNumber.replace(/\s+/g, ''); - }); - } - this.oldParam = this.copy(this.contactForm); - } - - if (this.carteFlag) { - this.isEmpty = false; - this.contactForm = { - 'emails': this.emails, - 'events': this.events, - 'favorite': false, - 'imAddresses': this.imAddresses, - 'name': this.name, - 'nickName': this.nickName, - 'note': this.note, - 'organization': this.organization, - 'phoneNumbers': this.phoneNumbers, - 'postalAddresses': this.postalAddresses, - 'relations': this.relations, - 'show': false, - 'websites': this.websites - } - } - - this.flexInputStyle = 'const-fisrt'; - this.flexImageStyle = 'const-image-div'; - this.flexImageSize = 'fisrt-image'; - this.flexInputSize = 'font-color-first'; - this.flexInputFont = 'font-color-note'; - this.flexCenterSize = 'text-note'; - let obj = { - 'name': this.contactForm.name.fullName, - 'Pname': this.contactForm.name.familyNamePhonetic, - 'company': this.contactForm.organization.name, - 'position': this.contactForm.organization.title, - 'phone': this.contactForm.phoneNumbers[0].phoneNumber, - 'email': this.contactForm.emails[0].email, - 'note': this.contactForm.note.noteContent, - 'mess': this.contactForm.imAddresses[0].imAddress, - 'address': this.contactForm.postalAddresses[0].postalAddress, - 'nick': this.contactForm.nickName.nickName, - 'website': this.contactForm.websites[0].website, - 'birth': this.year, - 'assistant': this.contactForm.relations[0].relationName, - 'groupContext': this.groupContext - } - this.ListenParam(obj); - }, - - onShow() { - LOG.info(TAG + 'onShow......'); - this.initGroupData(); - if (this.groups.length > 0) { - var temp = ''; - if (this.groups.length == 1) { - temp = this.groups[0].title; - } else { - this.groups.forEach(group => { - temp = temp + ',' + group.title - }) - temp = temp.substring(1, temp.length - 1); - } - this.groupContext = temp; - this.isEmpty = false; - } - }, - - initGroupData() { - if (this.$app.$def.globalData.pushToGroup && this.$app.$def.globalData.groupParams) { - let params = this.$app.$def.globalData.groupParams; - this.contactId = params.contactId; - this.contactForm = params.contactForm; - this.addShow = params.addShow; - this.updataShow = params.updataShow; - this.screenDirection = params.screenDirection; - this.MoreDivStatus = params.MoreDivStatus; - this.LetterShow = params.LetterShow; - this.upMessShow = params.upMessShow; - this.upRingShow = params.upRingShow; - this.upHouseShow = params.upHouseShow; - this.upNickShow = params.upNickShow; - this.upWebShow = params.upWebShow; - this.upBirthShow = params.upBirthShow; - this.upAssShow = params.upAssShow; - this.groups = params.groups; - this.groupStatus = params.groupStatus; - this.$app.$def.globalData.pushToGroup = false; - } - }, - - /** - * Update page data during initialization - * - * @param {Object} contact Contact data - */ - initUpdateData(contact) { - if (!contact.emails || contact.emails.length == 0) { - contact.emails = this.emails; - } - if (!contact.events || contact.events.length == 0) { - contact.events = this.events; - } else { - if (contact.events[0].eventDate != this.events[0].eventDate) { - this.birthShow = true; - } - this.dealBirthTypes(contact.events, contact); - } - if (!contact.imAddresses || contact.imAddresses.length == 0) { - contact.imAddresses = this.imAddresses; - } - if (!contact.phoneNumbers || contact.phoneNumbers.length == 0) { - contact.phoneNumbers = this.phoneNumbers; - } - if (!contact.postalAddresses || contact.postalAddresses.length == 0) { - contact.postalAddresses = this.postalAddresses; - } - if (!contact.relations || contact.relations.length == 0) { - contact.relations = this.relations; - } - if (!contact.websites || contact.websites.length == 0) { - contact.websites = this.websites; - } - if (!contact.name) { - contact.name = this.name; - } - - this.initUpdateDatas(contact); - }, - initUpdateDatas(contact) { - if (!contact.nickName) { - contact.nickName = this.nickName; - } - if (!contact.note) { - contact.note = this.note; - } - if (!contact.organization) { - contact.organization = this.organization; - } - - // Group return value Splicing page display value - if (!contact.groups || contact.groups.length == 0) { - contact.groups = this.groups; - } - if (contact.groups.length > 0) { - var temp = ''; - if (contact.groups.length == 1) { - temp = contact.groups[0].title; - } else { - contact.groups.forEach(group => { - temp = temp + ',' + group.title - }) - - temp = temp.substring(1, temp.length - 1); - } - this.groupContext = temp; - this.groups = contact.groups; - } - }, - - onBackPress() { - if (this.isEmpty) { - return false; - } - this.$element('reset').show(); - return true; - }, - - back() { - if (!this.isEmpty) { - this.$element('reset').show(); - } else if (this.updataShow) { - if (this.updateCard || this.carteFlag) { - this.getCardDetail(21001); - } else { - router.replace({ - uri: 'pages/contacts/contactDetail/contactDetail', - params: { - isNewSource: true, - contactId: this.contactForm.contactId, - } - }) - } - } else { - router.back({ - path: 'pages/navigation/navigation' - }) - } - }, - - takePhotos: function () { - router.push({ - uri: 'pages/contacts/accountants/takephone/takephone', - params: {} - }); - }, - - /** - * Process edit page dates - * - * @param {Object} events - * @param {Object} contact Contact data - */ - dealBirthTypes(events, contact) { - var flagF = false; - var flagS = false; - var indexF = 0; - var indexS = 0; - for (let index = 0; index < events.length; index++) { - const element = events[index]; - var dexF = 0; - if (element.labelId == '3') { - indexF = index; - var dexF = this.types.indexOf('3'); - this.types.splice(index, 1); - this.showF = false; - flagF = true; - } - var dexS = 0; - if (element.labelId == '2') { - indexS = index; - dexS = this.types.indexOf('2'); - this.types.splice(dexS, 1); - this.showS = false; - flagS = true; - } - if (flagS) { - if (flagF) { - contact.events[indexF].showS = false; - contact.events[indexS].showF = false; - } - } - } - }, - - onDestroy() { - LOG.info(TAG + 'onDestroy' + 'execute accountants onDestroy.'); - this.$app.$def.groups.group = '' - }, - - anSave() { - this.$app.$def.setRefreshContacts(false); - if (this.saveContact) { - this.$app.$def.dialerStateData.isEditNumber = false; - this.$app.$def.globalData.navigationType = 0; - this.$app.$def.globalData.menuType = 0; - router.back({ - path: 'pages/navigation/navigation' - }); - } else { - router.back(); - } - }, - - childClicked() { - this.showWork = true; - }, - - showDialog(e) { - this.DialogStatus = true; - this.$element('simpledialog').show() - }, - - cancelSchedule(e) { - - if (this.labType == '1') { - this.contactForm.phoneNumbers[this.labId].labelId = this.oldCustomizeLabelId; - } - if (this.labType == '2') { - this.contactForm.emails[this.labId].labelId = this.oldCustomizeLabelId; - } - if (this.labType == '3') { - this.contactForm.imAddresses[this.labId].labelId = this.oldCustomizeLabelId; - } - if (this.labType == '4') { - this.contactForm.postalAddresses[this.labId].labelId = this.oldCustomizeLabelId; - } - if (this.labType == '5') { - this.contactForm.relations[this.labId].labelId = this.oldCustomizeLabelId; - } - this.$element('simpledialog').close() - }, - - setSchedule(id) { - this.$element('simpledialog').close(); - - if (this.labType == '1' && this.customizeInputValue) { - this.contactForm.phoneNumbers[this.labId].labelId = '0'; - this.contactForm.phoneNumbers[this.labId].labelName = this.customizeInputValue; - } - - // email - if (this.labType == '2' && this.customizeInputValue) { - this.contactForm.emails[this.labId].labelId = '0'; - this.contactForm.emails[this.labId].labelName = this.customizeInputValue; - } - - // Instant messaging - if (this.labType == '3' && this.customizeInputValue) { - this.contactForm.imAddresses[this.labId].labelId = '0'; - this.contactForm.imAddresses[this.labId].labelName = this.customizeInputValue; - } - - // Custom residential address - if (this.labType == '4' && this.customizeInputValue) { - this.contactForm.postalAddresses[this.labId].labelId = '0'; - this.contactForm.postalAddresses[this.labId].labelName = this.customizeInputValue; - } - - // User-defined association person - if (this.labType == '5' && this.customizeInputValue) { - this.contactForm.relations[this.labId].labelId = '0'; - this.contactForm.relations[this.labId].labelName = this.customizeInputValue; - } - }, - - /** - * Custom labels - * - * @param {Object} e - */ - getLabel(e) { - if (e.value) { - this.DialogStatus = false; - this.customizeInputValue = e.value; - } else { - this.DialogStatus = true; - } - }, - - /** - * Get name - * - * @param {Object} e - */ - getName(e) { - this.contactForm.name.fullName = e.value; - let obj = { - 'name': this.contactForm.name.fullName, - 'Pname': this.contactForm.name.familyNamePhonetic, - 'company': this.contactForm.organization.name, - 'position': this.contactForm.organization.title, - 'phone': this.contactForm.phoneNumbers[0].phoneNumber, - 'email': this.contactForm.emails[0].email, - 'note': this.contactForm.note.noteContent, - 'mess': this.contactForm.imAddresses[0].imAddress, - 'address': this.contactForm.postalAddresses[0].postalAddress, - 'nick': this.contactForm.nickName.nickName, - 'website': this.contactForm.websites[0].website, - 'birth': this.year, - 'assistant': this.contactForm.relations[0].relationName, - 'groupContext': this.groupContext - } - this.ListenParam(obj) - }, - - /** - * Obtain only letters ^[a-za-z]+$ - * - * @param {Object} e - */ - getLetter(e) { - var temp = ''; - if (this.langStatus && !this.usStatus) { - this.contactForm.name.familyNamePhonetic = e.value; - temp = e.value; - } - if (this.usStatus) { - this.contactForm.name.familyName = e.value; - this.familyName = e.value; - temp = this.familyName.concat(this.givenName).concat(this.middleName); - } - let obj = { - 'name': this.contactForm.name.fullName, - 'Pname': temp, - 'company': this.contactForm.organization.name, - 'position': this.contactForm.organization.title, - 'phone': this.contactForm.phoneNumbers[0].phoneNumber, - 'email': this.contactForm.emails[0].email, - 'note': this.contactForm.note.noteContent, - 'mess': this.contactForm.imAddresses[0].imAddress, - 'address': this.contactForm.postalAddresses[0].postalAddress, - 'nick': this.contactForm.nickName.nickName, - 'website': this.contactForm.websites[0].website, - 'birth': this.year, - 'assistant': this.contactForm.relations[0].relationName, - 'groupContext': this.groupContext - } - this.ListenParam(obj); - }, - - /** - * Gets the middle name of the name - * - * @param {Object} e - */ - getMiddleName(e) { - this.contactForm.name.middleName = e.value; - this.middleName = e.value; - var temp = this.middleName.concat(this.givenName).concat(this.familyName); - let obj = { - 'name': this.contactForm.name.fullName, - 'Pname': temp, - 'company': this.contactForm.organization.name, - 'position': this.contactForm.organization.title, - 'phone': this.contactForm.phoneNumbers[0].phoneNumber, - 'email': this.contactForm.emails[0].email, - 'note': this.contactForm.note.noteContent, - 'mess': this.contactForm.imAddresses[0].imAddress, - 'address': this.contactForm.postalAddresses[0].postalAddress, - 'nick': this.contactForm.nickName.nickName, - 'website': this.contactForm.websites[0].website, - 'birth': this.year, - 'assistant': this.contactForm.relations[0].relationName, - 'groupContext': this.groupContext - } - this.ListenParam(obj); - }, - - /** - * First name of first name - * - * @param {Object} e - */ - getGivenName(e) { - this.contactForm.name.givenName = e.value; - this.givenName = e.value; - var temp = this.familyName.concat(this.givenName).concat(this.middleName); - let obj = { - 'name': this.contactForm.name.fullName, - 'Pname': temp, - 'company': this.contactForm.organization.name, - 'position': this.contactForm.organization.title, - 'phone': this.contactForm.phoneNumbers[0].phoneNumber, - 'email': this.contactForm.emails[0].email, - 'note': this.contactForm.note.noteContent, - 'mess': this.contactForm.imAddresses[0].imAddress, - 'address': this.contactForm.postalAddresses[0].postalAddress, - 'nick': this.contactForm.nickName.nickName, - 'website': this.contactForm.websites[0].website, - 'birth': this.year, - 'assistant': this.contactForm.relations[0].relationName, - 'groupContext': this.groupContext - } - this.ListenParam(obj); - }, - - // FamilyName - familyName, middleName- middleName, givenName- first name - showEnDiv() { - if (!this.langStatus) { - this.letter = this.$t('accountants.surname'); - this.familyNamePhonetic = this.contactForm.name.familyName; - this.usStatus = true; - } - }, - - /** - * The company - * - * @param {Object} e - */ - getComp(e) { - this.contactForm.organization.name = e.value; - let obj = { - 'name': this.contactForm.name.fullName, - 'Pname': this.contactForm.name.familyNamePhonetic, - 'company': this.contactForm.organization.name, - 'position': this.contactForm.organization.title, - 'phone': this.contactForm.phoneNumbers[0].phoneNumber, - 'email': this.contactForm.emails[0].email, - 'note': this.contactForm.note.noteContent, - 'mess': this.contactForm.imAddresses[0].imAddress, - 'address': this.contactForm.postalAddresses[0].postalAddress, - 'nick': this.contactForm.nickName.nickName, - 'website': this.contactForm.websites[0].website, - 'birth': this.year, - 'assistant': this.contactForm.relations[0].relationName, - 'groupContext': this.groupContext - } - this.ListenParam(obj); - }, - - /** - * position - * - * @param {Object} e - */ - getWork(e) { - this.contactForm.organization.title = e.value; - let obj = { - 'name': this.contactForm.name.fullName, - 'Pname': this.contactForm.name.familyNamePhonetic, - 'company': this.contactForm.organization.name, - 'position': this.contactForm.organization.title, - 'phone': this.contactForm.phoneNumbers[0].phoneNumber, - 'email': this.contactForm.emails[0].email, - 'note': this.contactForm.note.noteContent, - 'mess': this.contactForm.imAddresses[0].imAddress, - 'address': this.contactForm.postalAddresses[0].postalAddress, - 'nick': this.contactForm.nickName.nickName, - 'website': this.contactForm.websites[0].website, - 'birth': this.year, - 'assistant': this.contactForm.relations[0].relationName, - 'groupContext': this.groupContext - } - this.ListenParam(obj); - }, - - /** - * The phone type - * - * @param {string} labType - * @param {number} id labelId - * @param {Object} e - */ - selectChange(labType, id, e) { - this.labType = labType; - var customizeLabelId = '99'; - this.labId = id; - if (e.newValue == customizeLabelId) { - if (labType == '1') { - this.contactForm.phoneNumbers[this.labId].labelId = customizeLabelId; - } - if (labType == '2') { - this.contactForm.emails[this.labId].labelId = customizeLabelId; - } - if (labType == '3') { - this.contactForm.imAddresses[this.labId].labelId = customizeLabelId; - } - if (labType == '4') { - this.contactForm.postalAddresses[this.labId].labelId = customizeLabelId; - } - if (labType == '5') { - this.contactForm.relations[this.labId].labelId = customizeLabelId; - } - this.showDialog(); - } else { - if (labType == '1') { - this.contactForm.phoneNumbers[this.labId].labelId = e.newValue; - } - if (labType == '2') { - this.contactForm.emails[this.labId].labelId = e.newValue; - } - if (labType == '3') { - this.contactForm.imAddresses[this.labId].labelId = e.newValue; - } - if (labType == '4') { - this.contactForm.postalAddresses[this.labId].labelId = e.newValue; - } - if (labType == '5') { - this.contactForm.relations[this.labId].labelId = e.newValue; - } - this.oldCustomizeLabelId = e.newValue; - } - }, - - /** - * The phone number - * - * @param {number} id - * @param {Object} e - */ - getPhone: function (id, e) { - if (e.value) { - this.phonShow = true; - this.contactForm.phoneNumbers[id].phoneNumber = e.value; - this.contactForm.phoneNumbers[id].showP = true; - if (!this.isInitFirst && this.contactForm.phoneNumbers[id].blueStyle && !this.saveContact) { - this.contactForm.phoneNumbers[id].blueStyle = false; - } - this.isInitFirst = false; - this.isEmpty = false; - } else { - this.contactForm.phoneNumbers[id].showP = false; - this.contactForm.phoneNumbers[id].phoneNumber = ''; - } - let obj = { - 'name': this.contactForm.name.fullName, - 'Pname': this.contactForm.name.familyNamePhonetic, - 'company': this.contactForm.organization.name, - 'position': this.contactForm.organization.title, - 'phone': e.value, - 'email': this.contactForm.emails[0].email, - 'note': this.contactForm.note.noteContent, - 'mess': this.contactForm.imAddresses[0].imAddress, - 'address': this.contactForm.postalAddresses[0].postalAddress, - 'nick': this.contactForm.nickName.nickName, - 'website': this.contactForm.websites[0].website, - 'birth': this.year, - 'assistant': this.contactForm.relations[0].relationName, - 'groupContext': this.groupContext - } - this.ListenParam(obj); - }, - - /** - * Reenter the phone - * - * @param {number} id - */ - cleanNum(id) { - let phones = JSON.parse(JSON.stringify(this.contactForm.phoneNumbers)); - if (this.contactForm.phoneNumbers.length > 1) { - phones.splice(id, 1); - this.contactForm.phoneNumbers = []; - setTimeout(() => { - this.contactForm.phoneNumbers = phones; - }, 0); - } else { - this.contactForm.phoneNumbers[id].showP = false; - this.contactForm.phoneNumbers[id].phoneNumber = ''; - } - let obj = { - 'name': this.contactForm.name.fullName, - 'Pname': this.contactForm.name.familyNamePhonetic, - 'company': this.contactForm.organization.name, - 'position': this.contactForm.organization.title, - 'phone': this.contactForm.phoneNumbers[0].phoneNumber, - 'email': this.contactForm.emails[0].email, - 'note': this.contactForm.note.noteContent, - 'mess': this.contactForm.imAddresses[0].imAddress, - 'address': this.contactForm.postalAddresses[0].postalAddress, - 'nick': this.contactForm.nickName.nickName, - 'website': this.contactForm.websites[0].website, - 'birth': this.year, - 'assistant': this.contactForm.relations[0].relationName, - 'groupContext': this.groupContext - } - setTimeout(() => { - this.ListenParam(obj); - }, 0); - }, - - addNumber: function () { - var i = this.contactForm.phoneNumbers.length; - this.contactForm.phoneNumbers.push({ - id: i + 1, - labelId: '2', - phoneNumber: '', - showP: true, - }); - }, - - getMore: function () { - var l = this.bigsize + 600; - this.bigsize = l; - this.divSize = l + 'px'; - this.MoreDivStatus = false; - this.LetterShow = true; - this.upMessShow = true; - this.upRingShow = true; - this.upHouseShow = true; - this.upNickShow = true; - this.upWebShow = true; - this.upBirthShow = true; - this.upAssShow = true; - }, - - /** - * Access to email - * - * @param {number} id - * @param {Object} e - */ - getEmail: function (id, e) { - this.contactForm.emails[id].email = ''; - if (e.value) { - this.isEmpty = false; - this.emailShow = true; - this.contactForm.emails[id].email = e.value; - this.contactForm.emails[id].showP = true; - } else { - this.contactForm.emails[id].showP = false; - this.contactForm.emails[id].email = ''; - } - let obj = { - 'name': this.contactForm.name.fullName, - 'Pname': this.contactForm.name.familyNamePhonetic, - 'company': this.contactForm.organization.name, - 'position': this.contactForm.organization.title, - 'phone': this.contactForm.phoneNumbers[0].phoneNumber, - 'email': e.value, - 'note': this.contactForm.note.noteContent, - 'mess': this.contactForm.imAddresses[0].imAddress, - 'address': this.contactForm.postalAddresses[0].postalAddress, - 'nick': this.contactForm.nickName.nickName, - 'website': this.contactForm.websites[0].website, - 'birth': this.year, - 'assistant': this.contactForm.relations[0].relationName, - 'groupContext': this.groupContext - } - this.ListenParam(obj); - }, - - /** - * Clear current Email - * - * @param {number} id - */ - cleanEmail(id) { - if (this.contactForm.emails.length > 1) { - this.contactForm.emails.splice(id, 1); - } else { - var param = { - value: '' - }; - this.contactForm.emails[id].showP = false; - this.contactForm.emails[id].email = ''; - } - let obj = { - 'name': this.contactForm.name.fullName, - 'Pname': this.contactForm.name.familyNamePhonetic, - 'company': this.contactForm.organization.name, - 'position': this.contactForm.organization.title, - 'phone': this.contactForm.phoneNumbers[0].phoneNumber, - 'email': this.contactForm.emails[0].email, - 'note': this.contactForm.note.noteContent, - 'mess': this.contactForm.imAddresses[0].imAddress, - 'address': this.contactForm.postalAddresses[0].postalAddress, - 'nick': this.contactForm.nickName.nickName, - 'website': this.contactForm.websites[0].website, - 'birth': this.year, - 'assistant': this.contactForm.relations[0].relationName, - 'groupContext': this.groupContext - } - this.ListenParam(obj); - }, - - addEmail: function () { - var i = this.contactForm.emails.length; - this.contactForm.emails.push({ - id: i + 1, - labelId: '1', - email: '', - showP: false, - }) - }, - - /** - * Get note - * - * @param {Object} e - */ - getNote(e) { - this.contactForm.note.noteContent = e.value; - let obj = { - 'name': this.contactForm.name.fullName, - 'Pname': this.contactForm.name.familyNamePhonetic, - 'company': this.contactForm.organization.name, - 'position': this.contactForm.organization.title, - 'phone': this.contactForm.phoneNumbers[0].phoneNumber, - 'email': this.contactForm.emails[0].email, - 'note': this.contactForm.note.noteContent, - 'mess': this.contactForm.imAddresses[0].imAddress, - 'address': this.contactForm.postalAddresses[0].postalAddress, - 'nick': this.contactForm.nickName.nickName, - 'website': this.contactForm.websites[0].website, - 'birth': this.year, - 'assistant': this.contactForm.relations[0].relationName, - 'groupContext': this.groupContext - } - this.ListenParam(obj); - }, - - /** - * Clear message - * - * @param id - */ - cleanMessage(id) { - if (this.contactForm.imAddresses.length > 1) { - this.contactForm.imAddresses.splice(id, 1); - } else { - this.contactForm.imAddresses[id].imAddress = ''; - this.contactForm.imAddresses[id].showP = false; - } - let obj = { - 'name': this.contactForm.name.fullName, - 'Pname': this.contactForm.name.familyNamePhonetic, - 'company': this.contactForm.organization.name, - 'position': this.contactForm.organization.title, - 'phone': this.contactForm.phoneNumbers[0].phoneNumber, - 'email': this.contactForm.emails[0].email, - 'note': this.contactForm.note.noteContent, - 'mess': this.contactForm.imAddresses[0].imAddress, - 'address': this.contactForm.postalAddresses[0].postalAddress, - 'nick': this.contactForm.nickName.nickName, - 'website': this.contactForm.websites[0].website, - 'birth': this.year, - 'assistant': this.contactForm.relations[0].relationName, - 'groupContext': this.groupContext - } - this.ListenParam(obj); - }, - - /** - * Get IMA timely messages - * - * @param {number} id - * @param {Object} e - */ - getMessage: function (id, e) { - if (e.value) { - this.isEmpty = false; - this.messShow = true; - this.contactForm.imAddresses[id].imAddress = e.value; - this.contactForm.imAddresses[id].showP = true; - } else { - this.contactForm.imAddresses[id].showP = false; - this.contactForm.imAddresses[id].imAddress = ''; - } - let obj = { - 'name': this.contactForm.name.fullName, - 'Pname': this.contactForm.name.familyNamePhonetic, - 'company': this.contactForm.organization.name, - 'position': this.contactForm.organization.title, - 'phone': this.contactForm.phoneNumbers[0].phoneNumber, - 'email': this.contactForm.emails[0].email, - 'note': this.contactForm.note.noteContent, - 'mess': e.value, - 'address': this.contactForm.postalAddresses[0].postalAddress, - 'nick': this.contactForm.nickName.nickName, - 'website': this.contactForm.websites[0].website, - 'birth': this.year, - 'assistant': this.contactForm.relations[0].relationName, - 'groupContext': this.groupContext - } - this.ListenParam(obj); - }, - - addMess: function () { - var i = this.contactForm.imAddresses.length; - this.contactForm.imAddresses.push({ - id: i + 1, - labelId: '1', - imAddress: '', - showP: false, - }) - }, - - /** - * To get the bell - * - * @param {Object} e - */ - getRing(e) { - this.ringText = e.value; - if (this.ringText.length > 0) { - this.isEmpty = false; - } - }, - - /** - * Obtain residential Address - * - * @param {number} id - * @param {Object} e - */ - getHouText: function (id, e) { - if (e.value.length > 0) { - this.isEmpty = false; - this.houseShow = true; - this.contactForm.postalAddresses[id].postalAddress = e.value; - this.contactForm.postalAddresses[id].showP = true; - } else { - this.contactForm.postalAddresses[id].showP = false; - this.contactForm.postalAddresses[id].postalAddress = ''; - } - let obj = { - 'name': this.contactForm.name.fullName, - 'Pname': this.contactForm.name.familyNamePhonetic, - 'company': this.contactForm.organization.name, - 'position': this.contactForm.organization.title, - 'phone': this.contactForm.phoneNumbers[0].phoneNumber, - 'email': this.contactForm.emails[0].email, - 'note': this.contactForm.note.noteContent, - 'mess': this.contactForm.imAddresses[0].imAddress, - 'address': e.value, - 'nick': this.contactForm.nickName.nickName, - 'website': this.contactForm.websites[0].website, - 'birth': this.year, - 'assistant': this.contactForm.relations[0].relationName, - 'groupContext': this.groupContext - } - this.ListenParam(obj); - }, - - /** - * Access to email - * - * @param {number} id - */ - cleanHouse(id) { - if (this.contactForm.postalAddresses.length > 1) { - this.contactForm.postalAddresses.splice(id, 1); - } else { - this.contactForm.postalAddresses[id].postalAddress = ''; - this.contactForm.postalAddresses[id].showP = false; - } - let obj = { - 'name': this.contactForm.name.fullName, - 'Pname': this.contactForm.name.familyNamePhonetic, - 'company': this.contactForm.organization.name, - 'position': this.contactForm.organization.title, - 'phone': this.contactForm.phoneNumbers[0].phoneNumber, - 'email': this.contactForm.emails[0].email, - 'note': this.contactForm.note.noteContent, - 'mess': this.contactForm.imAddresses[0].imAddress, - 'address': this.contactForm.postalAddresses[0].postalAddress, - 'nick': this.contactForm.nickName.nickName, - 'website': this.contactForm.websites[0].website, - 'birth': this.year, - 'assistant': this.contactForm.relations[0].relationName, - 'groupContext': this.groupContext - } - this.ListenParam(obj); - }, - - addHouse() { - var i = this.contactForm.postalAddresses.length; - this.contactForm.postalAddresses.push({ - id: i + 1, - labelId: '1', - postalAddress: '', - showP: false, - }) - }, - - /** - * To obtain a nickname - * - * @param {Object} e - */ - getNick(e) { - this.contactForm.nickName.nickName = e.value; - let obj = { - 'name': this.contactForm.name.fullName, - 'Pname': this.contactForm.name.familyNamePhonetic, - 'company': this.contactForm.organization.name, - 'position': this.contactForm.organization.title, - 'phone': this.contactForm.phoneNumbers[0].phoneNumber, - 'email': this.contactForm.emails[0].email, - 'note': this.contactForm.note.noteContent, - 'mess': this.contactForm.imAddresses[0].imAddress, - 'address': this.contactForm.postalAddresses[0].postalAddress, - 'nick': this.contactForm.nickName.nickName, - 'website': this.contactForm.websites[0].website, - 'birth': this.year, - 'assistant': this.contactForm.relations[0].relationName, - 'groupContext': this.groupContext - } - this.ListenParam(obj); - }, - - /** - * Access to the website - * - * @param {number} id - * @param {Object} e - */ - getWebsite(id, e) { - if (e.value) { - this.contactForm.websites[id].website = e.value; - this.contactForm.websites[id].showP = true; - this.websiteShow = true; - } else { - this.contactForm.websites[id].website = ''; - this.contactForm.websites[id].showP = false; - } - let obj = { - 'name': this.contactForm.name.fullName, - 'Pname': this.contactForm.name.familyNamePhonetic, - 'company': this.contactForm.organization.name, - 'position': this.contactForm.organization.title, - 'phone': this.contactForm.phoneNumbers[0].phoneNumber, - 'email': this.contactForm.emails[0].email, - 'note': this.contactForm.note.noteContent, - 'mess': this.contactForm.imAddresses[0].imAddress, - 'address': this.contactForm.postalAddresses[0].postalAddress, - 'nick': this.contactForm.nickName.nickName, - 'website': e.value, - 'birth': this.year, - 'assistant': this.contactForm.relations[0].relationName, - 'groupContext': this.groupContext - } - this.ListenParam(obj); - }, - - /** - * Clear current URL - * - * @param {number} id - */ - cleanWebsite(id) { - if (this.contactForm.websites.length > 1) { - this.contactForm.websites.splice(id, 1); - } else { - this.contactForm.websites[id].showP = false; - this.contactForm.websites[id].website = ''; - } - let obj = { - 'name': this.contactForm.name.fullName, - 'Pname': this.contactForm.name.familyNamePhonetic, - 'company': this.contactForm.organization.name, - 'position': this.contactForm.organization.title, - 'phone': this.contactForm.phoneNumbers[0].phoneNumber, - 'email': this.contactForm.emails[0].email, - 'note': this.contactForm.note.noteContent, - 'mess': this.contactForm.imAddresses[0].imAddress, - 'address': this.contactForm.postalAddresses[0].postalAddress, - 'nick': this.contactForm.nickName.nickName, - 'website': this.contactForm.websites[0].website, - 'birth': this.year, - 'assistant': this.contactForm.relations[0].relationName, - 'groupContext': this.groupContext - } - this.ListenParam(obj); - }, - - addWebsite() { - var i = this.contactForm.events.length; - this.contactForm.websites.push({ - id: i + 1, - website: '', - showP: false - }) - }, - - /** - * Get date type - * - * @param {number} id - * @param {Object} e - */ - getBirType(id, e) { - this.contactForm.events[id].labelId = e.newValue; - if (this.contactForm.events[id].eventDate != this.$t('accountants.date')) { - if (this.contactForm.events[id].labelId == '3') { - for (var index = 0; index < this.contactForm.events.length; index++) { - this.contactForm.events[index].showF = false; - } - this.contactForm.events[id].showF = true; - } - - if (this.contactForm.events[id].labelId == '2') { - for (var index = 0; index < this.contactForm.events.length; index++) { - this.contactForm.events[index].showS = false; - } - this.contactForm.events[id].showS = true; - } - } - }, - - /** - * For birthday - * - * @param {number} id - * @param {Object} e - */ - getBirthText(id, e) { - var year = e.year; - this.year = year; - var month = e.month + 1; - var day = e.day - var birthText = year + '-' + month + '-' + day; - if (birthText.length > 0) { - this.birthShow = true; - this.isEmpty = false; - this.contactForm.events[id].showP = true; - this.contactForm.events[id].eventDate = birthText; - } - for (var index = 0; index < this.contactForm.events.length; index++) { - if (this.contactForm.events[index].eventDate == this.$t('accountants.date')) { - this.contactForm.events.splice(index, 1); - } - } - for (var index = 0; index < this.contactForm.events.length; index++) { - if (this.contactForm.events[index].eventDate != this.$t('accountants.date')) { - if (this.contactForm.events[index].labelId == '3') { - this.contactForm.events[index].showF = true; - this.showF = false; - } else { - this.contactForm.events[index].showF = false; - } - if (this.contactForm.events[index].labelId == '2') { - this.contactForm.events[index].showS = true; - this.showS = false; - } else { - this.contactForm.events[index].showS = false; - } - } - } - for (var index = 0; index < this.contactForm.events.length; index++) { - if (this.contactForm.events[index].eventDate == this.$t('accountants.date')) { - this.contactForm.events.splice(index, 1); - } - } - let obj = { - 'name': this.contactForm.name.fullName, - 'Pname': this.contactForm.name.familyNamePhonetic, - 'company': this.contactForm.organization.name, - 'position': this.contactForm.organization.title, - 'phone': this.contactForm.phoneNumbers[0].phoneNumber, - 'email': this.contactForm.emails[0].email, - 'note': this.contactForm.note.noteContent, - 'mess': this.contactForm.imAddresses[0].imAddress, - 'address': this.contactForm.postalAddresses[0].postalAddress, - 'nick': this.contactForm.nickName.nickName, - 'website': this.contactForm.websites[0].website, - 'birth': birthText, - 'assistant': this.contactForm.relations[0].relationName, - 'groupContext': this.groupContext - } - this.ListenParam(obj); - }, - - addBirth: function () { - var id = this.contactForm.events.length; - id = id + 1; - this.contactForm.events.push({ - id: id, - labelId: 4, - eventDate: this.$t('accountants.date'), - showF: this.showF, - showS: this.showS, - showP: false - }) - }, - - /** - * Clears the current birthday date - * - * @param {number} id - */ - cleanBirth(id) { - if (this.contactForm.events.length > 1) { - if (this.contactForm.events[id].labelId == '3') { - this.contactForm.events.splice(id, 1); - for (var index = 0; index < this.contactForm.events.length; index++) { - this.contactForm.events[index].showF = true; - this.showF = true; - } - } else if (this.contactForm.events[id].labelId == '2') { - this.contactForm.events.splice(id, 1); - for (var index = 0; index < this.contactForm.events.length; index++) { - this.contactForm.events[index].showS = true; - this.showS = true; - } - } else { - this.contactForm.events.splice(id, 1); - } - - } else { - this.contactForm.events[id].showP = false; - this.contactForm.events[id].eventDate = this.$t('accountants.date'); - } - - this.year = ''; - let obj = { - 'name': this.contactForm.name.fullName, - 'Pname': this.contactForm.name.familyNamePhonetic, - 'company': this.contactForm.organization.name, - 'position': this.contactForm.organization.title, - 'phone': this.contactForm.phoneNumbers[0].phoneNumber, - 'email': this.contactForm.emails[0].email, - 'note': this.contactForm.note.noteContent, - 'mess': this.contactForm.imAddresses[0].imAddress, - 'address': this.contactForm.postalAddresses[0].postalAddress, - 'nick': this.contactForm.nickName.nickName, - 'website': this.contactForm.websites[0].website, - 'birth': this.year, - 'assistant': this.contactForm.relations[0].relationName, - 'groupContext': this.groupContext - } - this.ListenParam(obj); - }, - - /** - * Get more relationships - * - * @param {number} id - * @param {Object} e - */ - getAssText(id, e) { - if (e.value.length > 0) { - this.isEmpty = false; - this.assisShow = true; - this.contactForm.relations[id].relationName = e.value; - this.contactForm.relations[id].showP = true; - } else { - this.contactForm.relations[id].showP = false; - this.contactForm.relations[id].relationName = ''; - } - let obj = { - 'name': this.contactForm.name.fullName, - 'Pname': this.contactForm.name.familyNamePhonetic, - 'company': this.contactForm.organization.name, - 'position': this.contactForm.organization.title, - 'phone': this.contactForm.phoneNumbers[0].phoneNumber, - 'email': this.contactForm.emails[0].email, - 'note': this.contactForm.note.noteContent, - 'mess': this.contactForm.imAddresses[0].imAddress, - 'address': this.contactForm.postalAddresses[0].postalAddress, - 'nick': this.contactForm.nickName.nickName, - 'website': this.contactForm.websites[0].website, - 'birth': this.year, - 'assistant': this.contactForm.relations[0].relationName, - 'groupContext': this.groupContext - } - this.ListenParam(obj); - }, - - /** - * Clear current relationship - * - * @param {number} id - */ - cleanAss(id) { - if (this.contactForm.relations.length > 1) { - this.contactForm.relations.splice(id, 1); - } else { - this.contactForm.relations[id].relationName = ''; - this.contactForm.relations[id].showP = false; - } - let obj = { - 'name': this.contactForm.name.fullName, - 'Pname': this.contactForm.name.familyNamePhonetic, - 'company': this.contactForm.organization.name, - 'position': this.contactForm.organization.title, - 'phone': this.contactForm.phoneNumbers[0].phoneNumber, - 'email': this.contactForm.emails[0].email, - 'note': this.contactForm.note.noteContent, - 'mess': this.contactForm.imAddresses[0].imAddress, - 'address': this.contactForm.postalAddresses[0].postalAddress, - 'nick': this.contactForm.nickName.nickName, - 'website': this.contactForm.websites[0].website, - 'birth': this.year, - 'assistant': this.contactForm.relations[0].relationName, - 'groupContext': this.groupContext - } - this.ListenParam(obj); - }, - - addAss() { - var id = this.contactForm.relations.length; - id = id + 1; - this.contactForm.relations.push({ - id: id, - labelId: '1', - relationName: '', - showP: false, - }) - }, - - // Jumping to a Group - onGroup() { - this.$app.$def.globalData.pushToGroup = true; - router.push({ - uri: 'pages/contacts/groups/deleteGroup/deleteGroup', - params: { - addContactStatus: true, - addShow: this.addShow, - updataShow: this.updataShow, - contactForm: this.contactForm, - contactId: this.contactId, - editGroup: true, - MoreDivStatus: this.MoreDivStatus, - LetterShow: this.LetterShow, - upMessShow: this.upMessShow, - upRingShow: this.upRingShow, - upHouseShow: this.upHouseShow, - upNickShow: this.upNickShow, - upWebShow: this.upWebShow, - upBirthShow: this.upBirthShow, - upAssShow: this.upAssShow, - groups: this.groups - }, - }); - }, - - /** - * Deep copy obJ objects - * - * @param {Object} obj Contact's contactForm - * @return - */ - copy(obj) { - return JSON.parse(JSON.stringify(obj)); - }, - - /** - * Monitor whether the data on the edit page has changed - * - * @param {Array} existData - * @param {Array} newData - * @param {string} type = 'Object' Define the type as 'Object' - * @return {Boolean} - */ - isSameData(existData, newData, type = 'Object') { - if (type == 'Array') { - if (Object.prototype.toString.call(existData) != '[object Array]' || Object.prototype.toString.call(newData) != '[object Array]') { - throw new Error('At least one of the inputs not an array'); - } - - if (existData.length != newData.length) { - return false; - } - } else if (!(existData instanceof Object && newData instanceof Object)) { - throw new Error('At least one of the inputs not an Object'); - } else { - LOG.info(TAG + 'isSameData' + 'type error.'); - } - for (const key in existData) { - if (Object.prototype.hasOwnProperty.call(newData, key)) { - if (existData[key] instanceof Array && newData[key] instanceof Array) { - try { - if (!this.isSameData(existData[key], newData[key], 'Array')) { - return false; - } - } catch { - return false; - } - } else if (existData[key] instanceof Object && newData[key] instanceof Object) { - try { - if (!this.isSameData(existData[key], newData[key], 'Object')) { - return false; - } - } catch { - return false; - } - } else if (existData[key] != newData[key]) { - return false; - } - } else { - return false; - } - } - return true; - }, - - /** - * Listen for all input parameters - * - * @param {string} name - * @param {string} Pname - * @param {string} company - * @param {string} position - * @param {string} phone - * @param {string} email - * @param {string} note - * @param {string} mess - * @param {string} address - * @param {string} nick - * @param {string} website - * @param {string} birth - * @param {string} assistant - * @param {string} groupContext - */ - - - ListenParam(obj) { - obj.name = obj.name.trim(); - obj.Pname = obj.Pname.trim(); - obj.company = obj.company.trim(); - obj.position = obj.position.trim(); - obj.phone = obj.phone.trim(); - obj.email = obj.email.trim(); - obj.note = obj.note.trim(); - obj.mess = obj.mess.trim(); - obj.address = obj.address.trim(); - obj.nick = obj.nick.trim(); - obj.website = obj.website.trim(); - obj.address = obj.address.trim(); - obj.birth = obj.birth.trim(); - obj.assistant = obj.assistant.trim(); - obj.groupContext = obj.groupContext.trim(); - if (this.updataShow && !(JSON.stringify(this.oldParam) == '{}')) { - if (this.isSameData(this.oldParam, this.contactForm, 'Object')) { - this.isEmpty = true; - return; - } else { - this.isEmpty = false; - } - } - obj.birth = this.contactForm.events[0].eventDate; - if (obj.birth == this.$t('accountants.date')) { - obj.birth = ''; - } - if (this.updateCard) { - this.isEmpty = false; - } - if (obj.name || obj.Pname || obj.company || obj.position || obj.phone || obj.email || obj.note || obj.mess || - obj.address || obj.nick || obj.website || obj.birth || obj.assistant || obj.groupContext) { - this.isEmpty = false; - this.delCard = false; - } else if (this.updateCard) { - this.isEmpty = false; - this.delCard = true; - } else { - this.isEmpty = true; - } - }, - - - deleteCard() { - LOG.info(TAG + 'deleteCard' + 'del contactForm' + this.contactForm); - var delParams = {}; - delParams.contactId = this.contactForm.contactId; - }, - - - addAccountants() { - LOG.info(TAG + 'addAccountants' + 'logMessage addAccountants is start'); - - if (this.updateCard && this.delCard) { - this.deleteCard(); - return; - } - var addParams = this.copy(this.contactForm); - this.listFieldIsNull(addParams.phoneNumbers); - this.listFieldIsNull(addParams.imAddresses); - this.listFieldIsNull(addParams.emails); - this.listFieldIsNull(addParams.postalAddresses); - this.listFieldIsNull(addParams.relations); - this.listFieldIsNull(addParams.events); - this.listFieldIsNull(addParams.websites); - var that = this; - if (this.carteFlag) { - this.addCard(addParams); - } else if (this.updateCard) { - this.editCard(addParams); - } else { - that.addShow ? that.$app.$def.setAddAccount(true) : that.$app.$def.setEditContacts(true); - if (this.addShow) { - this.isaddContact(addParams); - } else { - this.updateContact(addParams); - } - } - }, - addCard(addParams) { - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - contactReq.addMyCard(DAHelper, addParams, (contactId) => { - setTimeout(() => { - this.goToMyCard(contactId); - }, 500); - }); - }, - editCard(addParams) { - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - contactReq.updateMyCard(DAHelper, addParams, (contactId) => { - setTimeout(() => { - this.goToMyCard(contactId); - }, 500); - }); - }, - updateContact(addParams) { - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - contactReq.updateContact(DAHelper, addParams, (contactId) => { - LOG.info(TAG + 'addAccountants' + 'logMessage addContact callBack success! contactId = ' + ', route = ' + router); - router.replace({ - uri: 'pages/contacts/contactDetail/contactDetail', - params: { - isNewSource: true, - contactId: contactId, - } - }); - }); - }, - addContacts(addParams) { - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - contactReq.addContact(DAHelper, addParams, (contactId) => { - LOG.info(TAG + 'addAccountants' + 'logMessage addContact callBack success! contactId = ' + ', route = ' + router); - router.replace({ - uri: 'pages/contacts/contactDetail/contactDetail', - params: { - isNewSource: true, - contactId: contactId, - } - }); - }); - }, - isaddContact(addParams) { - let emails = addParams.emails == '' ? false : true; - let events = addParams.events == '' ? false : true; - let imAddresses = addParams.imAddresses == '' ? false : true; - let fullName = addParams.name.fullName == '' ? false : true; - let givenName = addParams.name.givenName == '' ? false : true; - let familyName = addParams.name.familyName == '' ? false : true; - let middleName = addParams.name.middleName == '' ? false : true; - let familyNamePhonetic = addParams.name.familyNamePhonetic == '' ? false : true; - let nickName = addParams.nickName.nickName == '' ? false : true; - let note = addParams.note.noteContent == '' ? false : true; - let organizationName = addParams.organization.name == '' ? false : true; - let organizationTitle = addParams.organization.title == '' ? false : true; - let phoneNumbers = addParams.phoneNumbers == '' ? false : true; - let postalAddresses = addParams.postalAddresses == '' ? false : true; - let relations = addParams.relations == '' ? false : true; - let websites = addParams.phoneNumbers == '' ? false : true; - let groups = addParams.groups == '' ? false : true; - - if (!(emails || events || imAddresses || fullName || givenName || familyName || middleName || familyNamePhonetic || - nickName || note || organizationName || organizationTitle || phoneNumbers || postalAddresses || relations || websites) && groups) { - Prompt.showToast({ - message: this.$t('value.contacts.noInfo'), - duration: 2000, - bottom: '150px' - }); - router.back(); - } else { - this.addContacts(addParams); - } - }, - - /** - * Delete empty data and remove the labelName field - * - * @param {Array} field Data of a contact - */ - listFieldIsNull: function (field) { - if (field && field.length > 0) { - for (var index = field.length - 1;index >= 0; index--) { - if (!field[index].showP) { - field.splice(index, 1); - } - if (field[index] && field[index].labelId != '0') { - delete field[index].labelName; - } - } - } - }, - - /** - * Jump to my business card - * - * @param {number} contactId The contact ID - */ - goToMyCard(contactId) { - LOG.info(TAG + 'goToMyCard' + 'logMessage goToMyCard start!'); - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - contactReq.getCardDetails(DAHelper, contactId, (result) => { - var contactForm = result.data; - LOG.info(TAG + 'goToMyCard' + 'logMessage get card details success!'); - router.replace({ - uri: 'pages/contacts/card/card', - params: { - contactForm: contactForm - } - }); - }); - } -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/accountants/takephone/takephone.css b/entry/src/main/js/default/pages/contacts/accountants/takephone/takephone.css deleted file mode 100644 index e725777..0000000 --- a/entry/src/main/js/default/pages/contacts/accountants/takephone/takephone.css +++ /dev/null @@ -1,77 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - width: 100%; - height: 100%; - flex-direction: column; - justify-content: space-around; - align-items: center; -} - -.page-title-div { - flex-direction: row; - align-items: center; - justify-content: space-between; - padding-left: 15px; - padding-top: 10px; - padding-bottom: 10px; - position: relative; - background-color: #000; -} - -.customize-title-div { - flex-direction: row; - align-items: center; - justify-content: flex-start; - position: relative; -} - -.customize-back-but-div { - width: 93px; - height: 93px; - border-radius: 15px; - align-items: center; -} - -.customize-back-but-div:active { - background-color: #f3f3f3; -} - -.customize-back-image { - margin-left: 21px; - width: 50px; - height: 50px; - border-radius: 10px; -} - - -.show-Camera { - width: 100%; - height: 81%; -} - -.page-footer-div { - flex-direction: row; - align-items: center; - justify-content: center; - height: 200px; - background-color: #000; -} - -.shoot-image { - width: 130px; - height: 130px; - background-color: #00ffff; -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/accountants/takephone/takephone.hml b/entry/src/main/js/default/pages/contacts/accountants/takephone/takephone.hml deleted file mode 100644 index f31adb9..0000000 --- a/entry/src/main/js/default/pages/contacts/accountants/takephone/takephone.hml +++ /dev/null @@ -1,27 +0,0 @@ - -
-
-
-
- -
-
-
- - -
\ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/accountants/takephone/takephone.js b/entry/src/main/js/default/pages/contacts/accountants/takephone/takephone.js deleted file mode 100644 index 563d73b..0000000 --- a/entry/src/main/js/default/pages/contacts/accountants/takephone/takephone.js +++ /dev/null @@ -1,49 +0,0 @@ -/** - * @file camera - */ - -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import router from '@system.router'; - - -export default { - data: {}, - - onInit() { - console.info('maobingbing'); - }, - onDestroy() { - console.info('execute camera onDestroy.'); - }, - back() { - router.back(); - }, - - shootButton() { - this.$element('cameraApp').takePhoto({ - quality: 'low', - success: function (data) { - console.info('camera get success: ' + JSON.stringify(data)); - }, - fail: function (data) { - console.info('camera get fail, data: ' + JSON.stringify(data)); - }, - complete: function (data) { - console.info('camera complete data' + JSON.stringify(data)); - } - }); - }, -}; \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/batchselectcontacts/batchselectcontacts.css b/entry/src/main/js/default/pages/contacts/batchselectcontacts/batchselectcontacts.css deleted file mode 100644 index 9548006..0000000 --- a/entry/src/main/js/default/pages/contacts/batchselectcontacts/batchselectcontacts.css +++ /dev/null @@ -1,551 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - justify-content: center; - align-items: center; - width: 100%; - height: 100%; - flex-direction: column; -} - -.tabs-records { - flex-direction: column; - justify-content: center; - align-items: center; - width: 100%; - height: 100%; -} - -.tab-content-contacts { - height: 100%; - width: 100%; - justify-content: center; - align-items: center; -} - -.tab-content-contacts-list { - height: 100%; - width: 100%; -} - -.tab-bar-box { - width: 75%; - height: 120px; -} - -.tab-bar-title { - font-size: 30px; - color: #808080; -} - -.tab-bar-box text:active { - font-weight: 600; - color: #4169e1; -} - -.select-contacts-title { - width: 100%; - height: 8%; - align-items: center; -} - -.select-contacts-title-image-button { - width: 65px; - height: 65px; - justify-content: center; - align-items: center; - margin-left: 35px; -} - -.select-contacts-title-image-button:active { - background-color: #d3d3d3; -} - -.select-contacts-title-image-button-right { - width: 65px; - height: 65px; - justify-content: center; - align-items: center; - position: absolute; - right: 30px; - top: 30px; -} - -.select-contacts-title-image-button-right:active { - background-color: #d3d3d3; -} - -.select-contacts-title-image-button-right:disabled { - opacity: 0.5; -} - -.select-contacts-title-image { - width: 55px; - height: 55px; -} - -.select-contacts-title-image-right { - width: 45px; - height: 45px; -} - -.select-contacts-title-text { - font-size: 40px; - margin-left: 20px; -} - -.allrecords-list { - flex-direction: column; - columns: 1; -} - -.list-item-log { - flex-direction: column; - align-items: center; -} - -.allrecords-list-item { - width: 100%; - height: 140px; -} - -.allrecords-item-icon-left { - flex-direction: column; - justify-content: center; - align-items: center; - width: 150px; - flex-shrink: 0; -} - -.todo-item-content-div { - flex-direction: column; - align-items: center; - justify-content: center; - width: 150px; - flex-shrink: 0; -} - -.todo-name-suffix-div { - width: 80px; - height: 80px; - justify-content: center; - align-items: center; - border-radius: 40px; -} - -.todo-content-name-last { - width: 90%; - height: 65%; - text-align: center; - font-size: 38px; - allow-scale: true; - font-weight: 600; - color: white; -} - -.allrecords-item-default-image { - height: 80px; - width: 80px; -} - -.allrecords-item-content { - flex-direction: row; - height: 100%; - width: 440px; - flex-grow: 1; - align-items: flex-start; -} - -.allrecords-item-content1 { - flex-direction: row; - height: 100%; - width: 520px; - margin-left: 50px; - flex-grow: 1; - align-items: flex-start; -} - -.allrecords-item-content-middle-data { - flex-direction: column; - min-width: 0px; - max-width: 400px; - flex-grow: 1; - padding-top: 25px; - padding-bottom: 25px; -} - -.allrecords-item-content-middle-box { - height: 50%; - align-items: center; -} - -.allrecords-item-content-middle-text { - font-size: 32px; - font-weight: 600; - max-lines: 1; - min-width: 100px; - max-width: 350px; - text-overflow: ellipsis; - margin-right: 5px; -} - -.allrecords-item-content-middle-bottom-text { - font-size: 26px; - font-weight: 500; - color: #808080; - max-lines: 2; - max-width: 310px; - min-width: 50px; - text-overflow: ellipsis; - margin-right: 10px; -} - -.allrecords-item-right { - height: 100%; - width: 130px; - justify-content: center; - align-items: center; -} - -.allrecords-item-right-checkbox { - justify-content: center; - align-items: center; - width: 110px; - height: 110px; - border-radius: 10px; -} - -.item-check-box { - width: 80px; - height: 80px; -} - -.allrecords-list-item-line { - width: 100%; - margin-right: 40px; - margin-left: 146px; - height: 1px; - border-bottom: 1px; - border-color: #d3d3d3; -} - -.allrecords-list-item-line1 { - width: 100%; - margin-right: 40px; - margin-left: 50px; - height: 1px; - border-bottom: 1px; - border-color: #d3d3d3; -} - -.tab-content-no-data { - justify-content: center; - align-items: center; - flex-direction: column; - margin-bottom: 20px; -} - -.tab-content-no-data-image { - height: 160px; - width: 160px; -} - -.tab-content-no-data-text { - font-size: 28px; - color: #808080; -} - -.select-contacts-operation { - width: 100%; - height: 8%; - justify-content: center; -} - -.select-contacts-operation-button { - width: 30%; - height: 100%; - border-radius: 15px; - flex-direction: column;/*background-color: gray;*/ - justify-content: center; - align-items: center; -} - -.select-contacts-operation-button:active { - background-color: #d3d3d3; -} - -.select-contacts-image-icon { - width: 50px; - height: 50px; -} - -.batch-select-text { - font-size: 22px; - color: #e5000000; -} - -.batch-select-text-selected { - font-size: 22px; - color: #007cfe; -} - -.batch-select-list-container { - width: 100%; - height: 84%; -} - -.dialog-main { - width: 92%; - height: 15%; -} - -.dialog-div { - flex-direction: column; - align-items: center; - justify-content: flex-end; -} - -.inner-txt { - height: 40%; - width: 100%; - flex-direction: column; - align-items: center; - justify-content: space-around; -} - -.txt { - font-size: 30px; -} - -.inner-btn { - width: 100%; - height: 50%; - justify-content: space-around; - align-items: center; -} - -.btn-txt { - width: 40%; - height: 70%; - border-radius: 30px; - background-color: transparent; - text-color: #175cfe; - font-size: 30px; -} - -.btn-txt-delete { - width: 40%; - height: 70%; - border-radius: 30px; - background-color: transparent; - text-color: #ff0000; - font-size: 30px; -} - -.select-contacts-list { - flex-direction: column; -} - -.search-div { - flex-direction: row; - justify-content: flex-start; - align-items: flex-start; - width: 100%; - height: 100px; - margin-left: 25px; - margin-right: 25px; -} - -.list-div-group { - width: 100%; - justify-content: center; - flex-direction: column; - align-items: center; -} - -.list-group { - width: 100%; - justify-content: center; - flex-direction: column; - align-items: center; -} - -.list-item { - width: 100%; - flex-direction: column; - align-items: flex-start; - justify-content: flex-start; -} - -.list-item-body-group { - padding-top: 20px; - width: 100%; - padding-bottom: 20px; - flex-direction: row; - align-items: flex-start; - justify-content: flex-start; -} - -.list-item-body-group:active { - background-color: lightgray; -} - -.list-item-head-group { - width: 100px; - height: 100px; - background-color: antiquewhite; - justify-content: center; - align-items: center; - border-radius: 50px; -} - -.list-item-head-name { - text-align: center; - font-size: 40px; - allow-scale: true; - font-weight: 600; -} - -.todo-content-body-group { - width: 80px; - height: 80px; - margin-left: 30px; - margin-right: 30px; - flex-direction: row; -} - -.list-item-body-name { - text-align: left; - font-size: 30px; - font-weight: 600; - width: 100%; - height: 40px; -} - -.list-item-body-name-group { - align-items: center; - justify-content: center; - height: 80px; - flex-direction: column; -} - -.list-item-body-phone-check-box-group { - width: 580px; - align-items: center; - flex-direction: row; - justify-content: center; -} - -.list-item-body-phone-group { - flex-direction: row; -} - -.list-item-phone-group { - width: 100%; - height: 40px; - align-items: center; -} - -.list-child-phone-group { - align-items: center; - flex-direction: column; - justify-content: center; -} - -.list-child-phone-item { - padding-left: 140px; - width: 100%; - left: 0px; - bottom: 0px; - flex-direction: column; -} - -.list-child-phone-item:active { - background-color: #d3d3d3; -} - -.list-child-phone-line-group { - margin-right: 60px; - width: 100%; -} - -.list-child-phone-line { - stroke-width: 1px; - color: #000; -} - -.list-child-phone-number-group { - flex-direction: row; - align-items: center; - height: 80px; -} - -.list-item-phone-number { - align-items: center; - text-align: left; - font-size: 24px; - justify-content: center; - text-color: #808080; -} - -.search-result-list { - width: 100%; - flex-direction: column; -} - -.list-search-phone-num { - padding-left: 30px; - margin-bottom: 30px; - padding-right: 30px; - text-align: left; - font-size: 24px; - align-items: center; - text-color: #808080; -} - -.list-search-group { - width: 100%; - justify-content: center; - flex-direction: column; - align-items: center; -} - -.input-type-group { - align-items: center; - flex-direction: row; - width: 100%; - height: 80px; - justify-content: center; -} - -.input-type { - margin-right: 40px; - align-items: center; - justify-content: center; - position: absolute; - right: 0px; - height: 80px; - width: 80px; -} - -.input-number-type { - margin-right: 40px; - align-items: center; - justify-content: center; - position: absolute; - right: 0px; - height: 80px; - width: 80px; -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/batchselectcontacts/batchselectcontacts.hml b/entry/src/main/js/default/pages/contacts/batchselectcontacts/batchselectcontacts.hml deleted file mode 100644 index b486a9d..0000000 --- a/entry/src/main/js/default/pages/contacts/batchselectcontacts/batchselectcontacts.hml +++ /dev/null @@ -1,155 +0,0 @@ - - - -
-
-
- -
- {{ titleMessage }} -
- -
-
-
- - - - - {{ $t('value.contacts.selectContacts.recent') }} - {{ $t('value.contacts.selectContacts.contacts') }} - {{ $t('value.contacts.selectContacts.group') }} - - - -
- - -
- -
- -
-
-
- {{ $item.suffix }} - -
-
-
-
- - -
-
- -
-
-
- {{ - ($item.name == '' || $item.name == undefined || $item.name == null) ? $item.phone : $item.name }} -
-
- - {{ $item.formatNumber }} - - - {{ $item.callTag }} - - - {{ $t('value.callRecords.unKnowLocation') }} - -
-
-
- -
-
- -
-
-
-
-
-
-
-
- - {{ - $t('value.contacts.selectContacts.noContacts') }} -
-
- - -
-
-
- -
- - -
-
- - {{ - $t('value.contacts.selectContacts.noContacts') }} -
-
-
- - -
-
-
-
-
-
- - {{ allSelectMessage }} -
-
-
diff --git a/entry/src/main/js/default/pages/contacts/batchselectcontacts/batchselectcontacts.js b/entry/src/main/js/default/pages/contacts/batchselectcontacts/batchselectcontacts.js deleted file mode 100644 index fcf8aa6..0000000 --- a/entry/src/main/js/default/pages/contacts/batchselectcontacts/batchselectcontacts.js +++ /dev/null @@ -1,957 +0,0 @@ -/** - * @file Batch Selecting Contacts - */ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import callLogService from '../../../../default/model/CalllogModel.js'; -import selectContactsAbility from '../../../../default/model/SelectcontactsModel.js'; -import httpcontact from '../../../../default/model/ContactModel.js'; -import Utils from '../../../../default/utils/utils.js'; -import LOG from '../../../utils/ContactsLog.js'; -import Constants from '../../../../default/common/constants/Constants.js'; -import featureAbility from '@ohos.ability.featureAbility'; -import backgroundColor from '../../../common/constants/color.js'; -import router from '@system.router'; - -const SELECT_CONFIRM = 1000; // Confirm interface selection -const SEARCH_CONTACTS = 2012; // Searching for Contacts - -var TAG = 'batchSelectContacts'; - -export default { - data: { - callLogTemp: [], // Recent call history - contactsList: [], // Contact list - layoutState: true, // Concise layout - groupList: [], - backgroundColor: backgroundColor.Color, - showGroupList: true, - selectedNumberMap: new Map(), - searchText: '', - icCancelM: '/res/image/ic_cancel_m.svg', - icDeleteM: '/res/image/ic_delete_m.svg', - icSelectAll: '/res/image/ic_select all_m.svg', - icComFirm: '/res/image/ic_comfirm.svg', - titleMessage: '', - selectCount: 0, - allSelectMessage: '', - allSelectTextStyle: 'batch-select-text', - selectMessage: '', - isSelectAll: false, - selectAllClicked: false, - selectDisabled: true, - refreshBatchDeleteLogId: 0, - isFirstInit: true, - showOption: false, - contactListShow: false, - pageInfo: { - pageIndex: 0, - pageSize: 50, - }, - emptyDataImage: { - icSelectNoRecent: '', - icSelectNoContacts: '/res/image/ic_contacts_empty_contact_72.svg', - icSelectNoGroups: '/res/image/ic_contacts_empty_group.svg', - }, - tabInfo: { - tabIndex: 0, - recentTotal: 0, - contactsTotal: 0, - groupsTotal: 0, - allClickedRecent: false, - allClickedContacts: false, - allClickedGroups: false, - recentCount: 0, - contactsCount: 0, - groupsCount: 0, - refreshGroupItemState: false - }, - contactsInfo: { // Contact list data - searchContactList: [], - selectedContactMap: new Map(), - searchLayoutShow: false, // Whether to display the search page - searchPhoneNum: 0, - showSearchList: false, - showDefaultNumber: true, - showNumberList: true, - phoneCheckShow: true, - childPhoneCheckShow: true, - contactsListCount: 0, - contactsListTotal: 0, - contactsNumberCount: 0, - } - }, - onInit() { - this.initCallLog(); - this.conciseLayoutInit(); - this.initContactsList(); - this.titleMessage = this.$t('value.callRecords.titleMessageNoSelect'); - this.allSelectMessage = this.$t('value.callRecords.selectAll'); - this.allSelectTextStyle = 'batch-select-text'; - }, - onShow() { - }, - - // The clean layout option is initialized - conciseLayoutInit: function () { - let data = this.$app.$def.globalData.storage.getSync('contacts_settings_concise_layout_switch', 'false'); - this.layoutState = data == 'true' ? false : true; - }, - - /** - * Change the TAB selection - * - * @param {Object} e - */ - changeSelectTab(e) { - this.tabInfo.tabIndex = e.index; - this.checkTabListStyle(); // Verify the current TAB list data selection status - this.checkOptionState(); // Verify that the current TAB selection button is displayed - }, - - checkOptionState() { - switch (this.tabInfo.tabIndex) { - case 0: - Utils.isEmptyList(this.callLogTemp) ? this.showOption = false : this.showOption = true; - break; - - case 1: - Utils.isEmptyList(this.contactsList) ? this.showOption = false : this.showOption = true; - break; - - case 2: - Utils.isEmptyList(this.groupList) ? this.showOption = false : this.showOption = true; - break; - - default: - break; - } - }, - - clickSelectAll(e) { - switch (this.tabInfo.tabIndex) { - case 0: - if (this.tabInfo.recentCount != 0 && this.tabInfo.recentCount == this.tabInfo.recentTotal) { // 已经全选,则取消全选 - this.tabInfo.allClickedRecent = false; - this.unSelectAll(); - } else { - this.tabInfo.allClickedRecent = true; - this.selectAll(); - } - break; - - case 1: // Contact list TAB - if (this.tabInfo.contactsCount != 0 && this.tabInfo.contactsCount == this.tabInfo.contactsTotal) { // 已经全选,则取消全选 - this.tabInfo.allClickedContacts = false; - this.unSelectAll(); - } else { - this.tabInfo.allClickedContacts = true; - this.selectAll(); - } - break; - - case 2: // Groups TAB - if (this.tabInfo.groupsCount != 0 && this.tabInfo.groupsCount == this.tabInfo.groupsTotal) { // 已经全选,则取消全选 - this.tabInfo.allClickedGroups = false; - this.unSelectAll(); - } else { - this.tabInfo.allClickedGroups = true; - this.selectAll(); - } - break; - - default: - break; - } - this.refreshPageMessage(); - }, - - /** - * The status of the list check box changes - * - * @param {number} index - * @param {Object} e - */ - checkStateChange(index, e) { - switch (this.tabInfo.tabIndex) { - case 0: - this.changeCallLogItemState(index, e); - break; - - case 1: - this.changeContactsItemState(index, e); - break; - - case 2: - this.changeGroupsItemState(index, e); - break; - - default: - break; - } - this.refreshPageMessage(); - }, - - /** - * The status of the TAB Call History check box changed recently - * - * @param {number} index - * @param {Object} e - */ - changeCallLogItemState: function (index, e) { - this.callLogTemp[index].checked = e.checked; - if (this.callLogTemp[index].checked) { - this.addOrUpdateSelectedNumberMap(this.callLogTemp[index].phone, this.callLogTemp[index].name); - this.tabInfo.recentCount++; - } else { - this.deleteSelectedNumber(this.callLogTemp[index].phone); - this.tabInfo.recentCount--; - } - }, - - /** - * Contact list TAB The status of the call history check box changes - * - * @param {number} index - * @param {Object} e - */ - changeContactsItemState: function (index, e) { - var contactId = ''; - if (!this.contactsInfo.searchLayoutShow) { // Contact main list interface click the check box - contactId = this.contactsList[index].contactId; - } else { // On the contact search list screen, click the check box - contactId = this.contactsInfo.searchContactList[index].contactId; - } - this.checkContactsCount(e, contactId); - }, - - /** - * Determine whether to increase or decrease the contact count. If all subnumbers and major numbers are unselected, - * decrease by 1. If all numbers are selected, increase by 1 - * - * @param {Object} e - * @param {number} contactId The contact ID - */ - checkContactsCount(e, contactId) { - if (this.contactsInfo.searchLayoutShow) { - this.contactsInfo.searchContactList.forEach(element => { - if (contactId == element.contactId) { - if (e.detail.checked) { - if (!this.checkIfNeedCount(element)) { - this.tabInfo.contactsCount++; - } - element.phoneNumbers[e.detail.numberIndex].checked = true; - this.contactsInfo.contactsNumberCount++; - this.addOrUpdateSelectedNumberMap(element.phoneNumbers[e.detail.numberIndex].phoneNumber, - element.name.fullName); - } else { - element.phoneNumbers[e.detail.numberIndex].checked = false; - this.contactsInfo.contactsNumberCount--; - if (!this.checkIfNeedCount(element)) { - this.tabInfo.contactsCount--; - } - this.deleteSelectedNumber(element.phoneNumbers[e.detail.numberIndex].phoneNumber); - } - } - }); - } else { - this.contactsList.forEach(element => { - if (contactId == element.contactId) { - if (e.detail.checked) { - if (!this.checkIfNeedCount(element)) { - this.tabInfo.contactsCount++; - } - element.phoneNumbers[e.detail.numberIndex].checked = true; - this.contactsInfo.contactsNumberCount++; - this.addOrUpdateSelectedNumberMap(element.phoneNumbers[e.detail.numberIndex].phoneNumber, - element.name.fullName); - } else { - element.phoneNumbers[e.detail.numberIndex].checked = false; - this.contactsInfo.contactsNumberCount--; - if (!this.checkIfNeedCount(element)) { - this.tabInfo.contactsCount--; - } - this.deleteSelectedNumber(element.phoneNumbers[e.detail.numberIndex].phoneNumber); - } - } - }); - } - }, - - /** - * Checks whether the current contact element has an option, negating true if it does, and false if it does not - * - * @param {Object} contact Contact data - * @return {boolean} - */ - checkIfNeedCount: function (contact) { - if (contact.phoneNumbers.length > 0) { - for (var index = 0; index < contact.phoneNumbers.length; index++) { - const element = contact.phoneNumbers[index]; - if (element.checked) { - return true; - } - } - } - return false; - }, - - /** - * Group TAB The status of the call record check box changes - * - * @param {number} index - * @param {Object} e - */ - changeGroupsItemState: function (index, e) { - this.groupList[index].checked = e.checked; - if (this.groupList[index].checked) { - this.tabInfo.groupsCount++; - } else { - this.tabInfo.groupsCount--; - } - }, - - selectAll() { - switch (this.tabInfo.tabIndex) { - case 0: // Recent TAB. - this.selectAllRecentProc(); - break; - - case 1: // Contact list TAB - this.selectAllContactProc(); - break; - - case 2: // Groups TAB. - this.groupList.forEach(element => { - element.checked = true; - }); - this.tabInfo.groupsCount = this.tabInfo.groupsTotal; - break; - - default: - break; - } - }, - - selectAllRecentProc: function () { - this.callLogTemp.forEach(element => { - element.checked = true; - this.addOrUpdateSelectedNumberMap(element.phone, element.name); - }); - this.tabInfo.recentCount = this.tabInfo.recentTotal; - }, - - selectAllContactProc: function () { - if (this.contactsInfo.searchLayoutShow) { - this.contactsInfo.searchContactList.forEach(element => { - if (!element.phoneNumbers[0].checked) { - element.phoneNumbers[0].checked = true; - this.addOrUpdateSelectedNumberMap(element.phoneNumbers[0].phoneNumber, element.name.fullName); - } - }); - } else { - this.contactsList.forEach(element => { - if (!element.phoneNumbers[0].checked) { - element.phoneNumbers[0].checked = true; - this.addOrUpdateSelectedNumberMap(element.phoneNumbers[0].phoneNumber, element.name.fullName); - } - }); - } - this.tabInfo.contactsCount = this.tabInfo.contactsTotal; - }, - - /** - * Verifies whether the master list contact needs to be selected, returning true if selected, false otherwise - * - * @param {Array} element Data for the current element - * @return {boolean} - */ - checkIfNeedSelected: function (element) { - if (this.contactsInfo.selectedContactList.length > 0) { - this.contactsInfo.selectedContactList.forEach(selectedElement => { - if (selectedElement.contactId == element.contactId) { - return true; - } - }); - } - return false; - }, - - unSelectAll() { - switch (this.tabInfo.tabIndex) { - case 0: // Recent TAB. - this.unSelectAllRecentProc(); - break; - - case 1: // Contact list TAB - this.unSelectAllContactProc(); - break; - - case 2: // Groups TAB. - this.groupList.forEach(element => { - element.checked = false; - }); - this.tabInfo.groupsCount = 0; - break; - - default: - break; - } - }, - - unSelectAllRecentProc: function () { - this.callLogTemp.forEach(element => { - element.checked = false; - if (this.checkIfSelectedNumber(element.phone)) { - this.deleteSelectedNumber(element.phone); - } - }); - this.tabInfo.recentCount = 0; - }, - - unSelectAllContactProc: function () { - if (this.contactsInfo.searchLayoutShow) { - this.contactsInfo.searchContactList.forEach(element => { - for (var i = 0; i < element.phoneNumbers.length; i++) { - if (element.phoneNumbers[i].checked) { - element.phoneNumbers[i].checked = false; - this.deleteSelectedNumber(element.phoneNumbers[i].phoneNumber); - } - } - }); - } else { - this.contactsList.forEach(element => { - for (var i = 0; i < element.phoneNumbers.length; i++) { - if (element.phoneNumbers[i].checked) { - element.phoneNumbers[i].checked = false; - this.deleteSelectedNumber(element.phoneNumbers[i].phoneNumber); - } - } - }); - } - this.tabInfo.contactsCount = 0; - }, - - /** - * Refresh selected Map data - * - * @param {number} number - * @param {string} name - */ - addOrUpdateSelectedNumberMap: function (number, name) { - if (Utils.isEmpty(number)) { - return; - } - this.selectedNumberMap.set(number.replace(/\s+/g, ''), { - name: name, - number: number.replace(/\s+/g, '') - }); - }, - - /** - * Delete the selected number from the list - * - * @param {number} number - */ - deleteSelectedNumber: function (number) { - if (Utils.isEmpty(number)) { - return; - } - this.selectedNumberMap.delete(number.replace(/\s+/g, '')); - }, - - /** - * Verify whether the current number is selected - * - * @param {number} number - * @return {Object} - */ - checkIfSelectedNumber: function (number) { - if (Utils.isEmpty(number)) { - return false; - } - return this.selectedNumberMap.has(number.replace(/\s+/g, '')); - }, - - refreshPageMessage() { - if (this.selectedNumberMap.size > 0) { - this.titleMessage = this.$t('value.callRecords.titleMessageSelect') + this.selectedNumberMap.size - + this.$t('value.callRecords.titleMessageUnit'); - this.selectDisabled = false; - this.checkAllClickButtonStyle(); - } else { - this.icSelectAll = '/res/image/ic_select all_m.svg'; - this.allSelectMessage = this.$t('value.callRecords.selectAll'); - this.allSelectTextStyle = 'batch-select-text'; - this.titleMessage = this.$t('value.callRecords.titleMessageNoSelect'); - this.selectDisabled = true; - this.isSelectAll = false; - } - }, - - checkTabListStyle: function () { - switch (this.tabInfo.tabIndex) { - case 0: // Recent TAB to update the call history list - this.checkRecentListSelectState(); - break; - - case 1: // Contact list TAB - this.checkContactsListSelectState(); - break; - - case 2: // Groups TAB. - this.checkGroupsListSelectState(); - break; - - default: - break; - } - this.checkAllClickButtonStyle(); - }, - - checkGroupsListSelectState: function () { - if (this.$app.$def.globalData.batchSelectContactsRefreshFunction.length > 0) { - this.$app.$def.globalData.batchSelectContactsRefreshFunction.forEach((refreshFunction) => { - refreshFunction(); - }); - } // Only the property value changes. The lower level group component refreshes its list check box status when it detects the change - }, - - checkRecentListSelectState: function () { - this.tabInfo.recentCount = 0; - this.callLogTemp.forEach(element => { - if (this.checkIfSelectedNumber(element.phone)) { // The number is selected - element.checked = true; - } else if (element.checked) { - element.checked = false; - } - if (element.checked) { // According to the result of final judgment, if the status is selected, then the TAB count is increased by 1; - this.tabInfo.recentCount++; - } - }); - }, - - checkContactsListSelectState: function () { - var tempList = this.contactsInfo.searchLayoutShow ? this.contactsInfo.searchContactList : this.contactsList; - this.tabInfo.contactsCount = 0; - tempList.forEach(element => { - for (var i = 0; i < element.phoneNumbers.length; i++) { - if (this.checkIfSelectedNumber(element.phoneNumbers[i].phoneNumber)) { - element.phoneNumbers[i].checked = true; - } else if (element.phoneNumbers[i].checked) { - element.phoneNumbers[i].checked = false; - } - } - if (this.checkIfNeedCount(element)) { - this.tabInfo.contactsCount++; - } - }); - this.contactsInfo.searchLayoutShow ? this.contactsInfo.searchContactList - = tempList : this.contactsList = tempList; - }, - - checkAllClickButtonStyle: function () { - switch (this.tabInfo.tabIndex) { - case 0: - if (this.tabInfo.recentCount == this.tabInfo.recentTotal) { - this.changeToFullSelect(); - this.tabInfo.allClickedRecent = true; - } else { - this.changeToUnFullSelect(); - } - break; - - case 1: - if (this.tabInfo.contactsCount == this.tabInfo.contactsTotal) { - this.changeToFullSelect(); - this.tabInfo.allClickedContacts = true; - } else { - this.changeToUnFullSelect(); - } - break; - - case 2: - if (this.tabInfo.groupsCount == this.tabInfo.groupsTotal) { - this.changeToFullSelect(); - this.tabInfo.allClickedGroups = true; - } - break; - default: - break; - } - }, - - changeToFullSelect: function () { - this.icSelectAll = '/res/image/ic_select all_filled_m.svg'; - this.allSelectMessage = this.$t('value.callRecords.unSelectAll'); - this.allSelectTextStyle = 'batch-select-text-selected'; - }, - - changeToUnFullSelect: function () { - this.icSelectAll = '/res/image/ic_select all_m.svg'; - this.allSelectMessage = this.$t('value.callRecords.selectAll'); - this.allSelectTextStyle = 'batch-select-text'; - }, - - /** - * The checkbox is also selected or deselected when clicking on a single call record - * - * @param {number} index - */ - clickCallLog(index) { - this.checkStateChange(index, { - checked: !this.callLogTemp[index].checked - }); - }, - - doSelect() { - var checkedList = []; - this.selectedNumberMap.forEach((value) => { - checkedList.push(value); - }); - let contacts = this.dealContactName(checkedList); - let parameters = { - contactObjects: JSON.stringify(contacts) - }; - var result = { - resultCode: 0, - want: { - parameters: parameters - } - }; - if (this.selectType == 1) { - } else { - featureAbility.finishWithResult(result); - featureAbility.terminateSelf(); - } - }, - - /** - * Processes information about the selected contact - * - * @param {Array} checkedList - * @return {boolean} - */ - dealContactName(checkedList) { - let contacts = []; - for (let item of checkedList) { - let contact = { - contactName: item.name, - telephone: item.number - }; - contacts.push(contact); - } - return contacts; - }, - - back() { - router.back(); - }, - - initCallLog() { - var tempMap = new Map(); - var tempList = []; - var mergeRule = this.$app.$def.globalData.storage.getSync('call_log_merge_rule', 'from_time'); - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CALLLOG_DB_URI); - callLogService.getAllCalls(DAHelper, mergeRule, data => { - this.$app.$def.globalData.callLogTotalData = data; - for (var i = 0; i < this.$app.$def.globalData.callLogTotalData.callLogList.length; i++) { - var element = this.$app.$def.globalData.callLogTotalData.callLogList[i]; - var bgColorIndex = parseInt(element.id, 10) % (this.backgroundColor.length); - element.portraitColor = this.backgroundColor[bgColorIndex]; - element.suffix = Utils.isEmpty(element.name) ? '' : element.name.substr(element.name.length - 1); - if (!tempMap.has(Utils.removeSpace(element.phone))) { - tempList.push(element); - tempMap.set(element.phone, null); - } - if (tempList.length > 50) { - break; - } - } - this.callLogTemp = tempList; - this.tabInfo.recentTotal = this.callLogTemp.length; - this.checkOptionState(); - }); - }, - - getPhoneLabelNameById: function (phoneLabelId) { - var labelName = ''; - switch (parseInt(phoneLabelId, 10)) { - case 1: - labelName = this.$t('accountants.house'); - break; - - case 2: - labelName = this.$t('accountants.phone'); - break; - - case 3: - labelName = this.$t('accountants.unit'); - break; - - case 4: - labelName = this.$t('accountants.unit fax'); - break; - - case 5: - labelName = this.$t('accountants.home fax'); - break; - - case 6: - labelName = this.$t('accountants.pager'); - break; - - case 7: - labelName = this.$t('accountants.others'); - break; - - case 12: - labelName = this.$t('accountants.switchboard'); - break; - - case 99: - labelName = this.$t('accountants.customize'); - break; - - default: - break; - } - return labelName; - }, - - initContactsList: function () { - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - selectContactsAbility.queryContacts(DAHelper, (resultList) => { - var listTemp = []; - if (!Utils.isEmptyList(resultList)) { - for (let element of resultList) { - element.name = {}; - element.name.fullName = element.emptyNameData; - element.name.namePrefix = element.namePrefix; - element.name.nameSuffix = element.nameSuffix; - element.portraitPath = false; - if (element.phoneNumbers != null && element.phoneNumbers.length > 0) { - element.phoneNumbers.forEach(childEle => { - childEle.checked = false; - childEle.labelName = this.getPhoneLabelNameById(childEle.labelId); - this.initVariableSpan(element); - }); - listTemp.push(element); - } - } - this.contactsList = listTemp; - this.tabInfo.contactsTotal = this.contactsList.length; - this.contactsInfo.contactsListTotal = this.contactsList.length; - } else { - LOG.error(TAG + 'select contact list is empty!'); - } - }); - }, - - /** - * The phone number is resold - * - * @param {Object} result - * @return {Object} result - */ - duplicateRemoval: function (result) { - if (Utils.isEmptyList(result.data)) { - return result; - } - var resultList = result.data; - for (var i = 0; i < resultList.length; i++) { - var item = resultList[i]; - var phoneNumbersList = []; - for (var j = item.phoneNumbers.length - 1; j >= 0; j--) { - item.phoneNumbers[j].checked = false; - var indexOf = this.indexOf(item.phoneNumbers[j], phoneNumbersList); - if (indexOf == -1) { - phoneNumbersList.push(item.phoneNumbers[j]); - } - } - this.initVariableSpan(item); - item.phoneNumbers = phoneNumbersList; - } - return result; - }, - - /** - * Click on the event - * - * @param {Object} params - */ - selectClick: function (params) { - var item = this.contactsList[params.detail.index]; - var index = params.detail.index; - var indexChild = params.detail.indexChild; - var speedNumber = item.phoneNumbers[indexChild].phoneNumber; - this.$app.$def.setSpeedSelectResultData(item, index, indexChild, speedNumber); - }, - - onTextChange: function (text) { - - this.searchText = text.text; - this.onSearchTextChange(text.text); - }, - touchStartSearch: function () { - this.$element('search').focus({ - focus: true - }) - }, - indexOf: function (item, phoneNumbersList) { - var index = -1; - if (Utils.isEmptyList(phoneNumbersList)) { - return index; - } - for (var i = 0; i < phoneNumbersList.length; i++) { - if (item.phoneNumber == phoneNumbersList[i].phoneNumber) { - index = i; - break; - } - } - return index; - }, - - /** - * Click on the event - * - * @param {string} text Value - */ - onSearchTextChange: function (text) { - var requestData = { - page: 0, - limit: 0, - likeValue: text - }; - var internal = 1; - var sync = 0; - var messageCode = SEARCH_CONTACTS; - var actionData = requestData; - httpcontact.contactHttp(internal, sync, messageCode, actionData, (result) => { - if (result.code == 0 && result.contactCount > 0) { - var resultData = this.duplicateRemoval(result); - this.contactsInfo.searchContactList = resultData.data; - } else { - this.searchContactList = []; - } - this.refreshSearchList(text); - }); - }, - - refreshSearchList: function (text) { - this.contactsInfo.searchPhoneNum = this.contactsInfo.searchContactList.length; - if (Utils.isEmpty(text)) { - this.contactsInfo.searchLayoutShow = false; - this.tabInfo.contactsTotal = this.contactsInfo.contactsListTotal; - this.emptyText = this.$t('value.selectContact.page.empty'); - if (this.tabInfo.tabIndex == 1) { - this.checkTabListStyle(); - } - } else if (Utils.isEmptyList(this.contactsInfo.searchContactList)) { - this.emptyText = this.$t('value.selectContact.page.emptyText'); - this.contactListShow = false; - this.contactsInfo.searchLayoutShow = false; - this.tabInfo.contactsTotal = this.contactsInfo.contactsListTotal; - if (this.tabInfo.tabIndex == 1) { - this.checkTabListStyle(); - } - } else { - this.contactsInfo.searchLayoutShow = true; - this.tabInfo.contactsTotal = this.contactsInfo.searchContactList.length; - this.contactListShow = true; - this.emptyText = this.$t('value.selectContact.page.empty'); - if (this.tabInfo.tabIndex == 1) { - this.checkTabListStyle(); - } - } - }, - - /** - * Contact the main list or search list by clicking the checkbox event - * - * @param {Object} e event事件 - */ - changeContactState: function (e) { - this.checkStateChange(e.detail.contactIndex, e); - }, - - /** - * Assign custom attributes in preparation for later variable font searches - * - * @param {Object} item Contact data - */ - initVariableSpan: function (item) { - var matchString = Utils.getMatchedString(item.emptyNameData, this.searchText); - if (Utils.isEmpty(matchString) || Utils.isEmpty(this.searchText.trim())) { - item.name.searchTextStart = ''; - item.name.searchTextMiddle = ''; - item.name.searchTextEnd = item.emptyNameData; - } else { - var name = item.emptyNameData; - var index = name.indexOf(matchString); - item.name.searchTextStart = name.substr(0, index); - item.name.searchTextMiddle = name.substr(index, matchString.length); - item.name.searchTextEnd = name.substr(index + matchString.length); - } - for (var i = 0; i < item.phoneNumbers.length; i++) { - var phoneNumber = item.phoneNumbers[i].phoneNumber; - var matchStringPhone = Utils.getMatchedString(phoneNumber, this.searchText); - if (Utils.isEmpty(matchStringPhone) || Utils.isEmpty(this.searchText.trim())) { - item.phoneNumbers[i].startPhone = ''; - item.phoneNumbers[i].middlePhone = ''; - item.phoneNumbers[i].endPhone = phoneNumber; - } else { - var phoneIndex = phoneNumber.indexOf(matchStringPhone); - item.phoneNumbers[i].startPhone = phoneNumber.substr(0, phoneIndex); - item.phoneNumbers[i].middlePhone = phoneNumber.substr(phoneIndex, matchStringPhone.length); - item.phoneNumbers[i].endPhone = phoneNumber.substr(phoneIndex + matchStringPhone.length); - } - } - }, - - /** - * Add a contact from the group list - * - * @param {Object} e - */ - addCheckedContact(e) { - e.detail.checkedList.forEach(element => { - this.selectedNumberMap.set(element.number.replace(/\s+/g, ''), element); - }); - this.refreshPageMessage(); - }, - - /** - * Delete a contact from the group list - * - * @param {Object} e - */ - deleteCheckedContact(e) { - e.detail.checkedList.forEach(element => { - this.selectedNumberMap.delete(element.number.replace(/\s+/g, '')); - }); - this.refreshPageMessage(); - }, - - /** - * Example Change the group list status - * - * @param {Object} e - */ - changeGroupShowState(e) { - this.showGroupList = e.detail.showGroupList; - }, -}; \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/card/card.css b/entry/src/main/js/default/pages/contacts/card/card.css deleted file mode 100644 index 2bf6a77..0000000 --- a/entry/src/main/js/default/pages/contacts/card/card.css +++ /dev/null @@ -1,372 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - display: flex; - flex-direction: column; - align-items: center; - width: 100%; - height: 100%; -} - -.title { - flex-direction: row; - justify-content: flex-start; - align-items: center; - width: 100%; - height: 8%; - margin-left: 25px; - margin-right: 25px; -} - -.back-image { - height: 45px; - width: 45px; -} - -.div-details-item-first { - flex-direction: column; - justify-content: center; - align-items: center; - width: 90%; - height: 1360px; - border-top-left-radius: 30px; - border-top-right-radius: 30px; - border-top-style: dotted; - border-bottom-style: dotted; -} - -.list-details-item-first-image-box { - width: 200px; - height: 200px; - border-radius: 100px; - justify-content: center; - align-items: center; -} - -.list-details-item-first-image-box-pic { - width: 200px; - height: 200px; - border-radius: 150px; -} - -.list-details-item-first-text { - font-size: 80px; - font-weight: bold; - color: white; -} - -.div-details-item-first-shrink { - flex-direction: column; - justify-content: center; - align-items: center; - width: 90%; - height: 150px; - font-size: 50px; -} - -.list-details-item-first-number-shrink { - width: 85%; - text-align: center; - max-lines: 1; - text-overflow: ellipsis; - font-weight: 500; - font-size: 60px; -} - -.list-details-item-first-number { - font-weight: normal; - width: 85%; - text-align: center; - max-lines: 2; - text-overflow: ellipsis; -} - -.list-details-item-first-company { - font-size: 27px; - font-weight: normal; - height: 45px; - width: 87%; - text-align: center; - color: grey; - max-lines: 1; - text-overflow: ellipsis; -} - -.list-details-item-first-position { - font-size: 27px; - font-weight: normal; - height: 45px; - width: 87%; - text-align: center; - color: grey; - max-lines: 1; - text-overflow: ellipsis; -} - -.list-wraper { - flex-direction: column; - justify-content: center; - align-items: center; - width: 90%; - box-shadow: 10px 10px 10px 10px #E7DFDF; -} - -.item-extent-div { - width: 100%; - height: 450px; - justify-content: center; -} - -.qrcode-div { - width: 55%; - height: 55%; - align-content: center; - justify-content: center; -} - -.list-details-number-list-item { - flex-direction: column; - justify-content: center; - align-items: center; - width: 90%; -} - -.list-details-number-div { - flex-direction: row; - justify-content: center; - align-items: center; - width: 100%; - margin-top: 15px; - margin-bottom: 15px; -} - -.list-details-number-sub-div-left { - flex-direction: column; - align-items: center; - justify-content: center; - width: 68%; -} - -.list-details-number-sub-div-right { - flex-direction: row; - justify-content: center; - align-items: center; - width: 32%; -} - -.list-details-email-sub-div-more-left { - flex-direction: column; - justify-content: center; - width: 95%; -} - -.list-details-number-text-up { - width: 100%; - font-size: 32px; - max-lines: 5; - text-overflow: ellipsis; -} - - -.item-card-number { - flex-direction: column; - justify-content: center; - align-items: center; - width: 100%; -} - -.item-card-number-div { - flex-direction: row; - justify-content: center; - align-items: center; - width: 100%; - margin-top: 15px; - margin-bottom: 15px; -} - -.item-card-number-inner { - flex-direction: column; - align-items: center; - justify-content: center; - width: 80%; -} - -.item-card-number-text { - width: 100%; - font-size: 32px; -} - -.list-card-number-text-down { - width: 100%; - font-size: 27px; - color: #808080; - margin-top: 10px; - max-lines: 2; - text-overflow: ellipsis; -} - -.item-carte-number-address-text { - width: 100%; - font-size: 27px; - color: #808080;; - margin-top: 10px; - max-lines: 1; - text-overflow: ellipsis; -} - -.item-card-number-end { - height: 25%; - width: 100%; - position: absolute; -} - -.global-bottom-div { - height: 13%; - width: 100%; - position: absolute; - bottom: 0px; -} - -.up-botton-div { - height: 30%; - width: 100%; - background-color: white; - justify-content: center; -} - -.up-image-div { - width: 35px; - height: 35px; -} - -.bottom-three-div { - background-color: white; - height: 80%; - width: 100%; - position: absolute; - bottom: 0px; - flex-direction: row; - align-items: center; - padding-left: 20px; - padding-right: 20px; - box-shadow: 10px 10px 10px 10px #E7DFDF; -} - -.bottom-div-edit { - flex-direction: column; - justify-content: center; - align-items: center; - height: 90%; - width: 60%; - border-radius: 20px; -} - -.image-div { - width: 40px; - height: 40px; -} - -.share-dialog-main { - width: 650px; - margin-left: 25px; - margin-right: 25px; - margin-bottom: 25px; -} - -.share-dialog-div { - flex-direction: column; - align-items: center; - height: 550px; -} - -.share-inner-div { - width: 85%; - flex-direction: column; - align-items: flex-start; - justify-content: center; - height: 130px; -} - -.share-inner-txt { - font-size: 40px; - font-weight: bold; -} - -.first-dialog-inner-txt { - font-size: 40px; - font-weight: 600; -} - -.share-dialog-wraper { - width: 100%; - height: 60%; - columns: 1; -} - -.share-dialog-item { - height: 101px; - flex-direction: column; - columns: 1; - align-items: stretch; -} - -.share-dialog-content-div { - margin-left: 49px; - margin-right: 49px; - width: 85%; - height: 100%; - flex-direction: row; - justify-content: flex-start; - align-items: center; -} - -.share-dialog-content-name { - width: 100%; - text-align: left; - font-size: 32px; -} - -.share-todo-divider { - margin-left: 49px; - margin-right: 49px; - line-cap: round; - stroke-width: 1px; - border-bottom: 1px solid #bababa; -} - -.share-inner-btn { - margin-top: -30px; - width: 580px; - height: 120px; - justify-content: space-around; - align-items: center; -} - -.share-btn-div { - width: 100%; - height: 60px; - border-radius: 50px; - justify-content: center; - align-items: center; -} - -.share-btn-div:active { - background-color: #E7E6E6; -} - -.share-btn-cancel-txt { - color: #007DFE; -} - diff --git a/entry/src/main/js/default/pages/contacts/card/card.hml b/entry/src/main/js/default/pages/contacts/card/card.hml deleted file mode 100644 index 7033b2e..0000000 --- a/entry/src/main/js/default/pages/contacts/card/card.hml +++ /dev/null @@ -1,270 +0,0 @@ - -
-
- -
- -
-
- - - {{ contactForm.name.nameSuffix }} -
- {{ - (showNameLast && showNameLast.length > 0) ? showNameLast : $t('value.contacts.page.item.noName') }} - {{ - contactForm.organization.name }} - {{ - contactForm.organization.title }} -
- - - - -
- -
-
- - -
-
- {{ $item.phoneNumber }} - - {{ (($item.labelName == undefined || $item.labelName == '') ? '' : ($item.labelName + ' - ')) }} - {{ (($item.phoneAddress == 'N' || $item.phoneAddress == '') ? $t('value.callRecords.unKnowLocation') : $item.phoneAddress) }} - {{ $item.isPrimary == 1 ? " " + $t('value.favorites.page.dialog.defaultText') : "" }} - -
-
-
- - -
-
- {{ $item.email }} - {{ $item.labelName }} -
-
-
- - -
-
- {{ $item.imAddress }} - {{ $t('accountants.AIM') - }} - {{ - $t('accountants.Windows Live') }} - {{ - $t('accountants.Yahoo') }} - {{ - $t('accountants.Skype') }} - {{ $t('accountants.QQ') - }} - {{ - $t('accountants.Hangout') }} - {{ - $t('accountants.ICQ') }} - {{ - $t('accountants.Jabber') }} - {{ $item.labelName }} - -
-
-
- - -
-
- {{ contactForm.nickName.nickName }} - {{ $t('accountants.nick') }} -
-
-
- - -
-
- {{ $item.website }} - {{ $t('accountants.website') }} -
-
-
- - -
-
- {{ $item.postalAddress }} - {{ $item.labelName }} - - {{ - $t('accountants.house') }} - {{ - $t('accountants.unit') }} - {{ - $t('accountants.others') }} -
-
-
- - -
-
- {{ $item.eventDate }} - {{ - $t('accountants.Anniversary') }} - {{ - $t('accountants.Lunar Birthday') }} - {{ - $t('accountants.birth') }} - {{ - $t('accountants.import day') }} -
-
-
- - -
-
- {{ contactForm.name.familyNamePhonetic }} - {{ $t('accountants.letter') }} -
-
-
- - -
-
- {{ $item.relationName }} - {{ $item.labelName }} - - {{ - $t('accountants.assistant') }} - {{ - $t('accountants.brothers') }} - {{ - $t('accountants.child') }} - {{ - $t('accountants.companion') }} - {{ - $t('accountants.father') }} - {{ - $t('accountants.friend') }} - {{ - $t('accountants.boss') }} - {{ - $t('accountants.mother') }} - {{ - $t('accountants.parents') }} - {{ - $t('accountants.Partner') }} - {{ - $t('accountants.introducer') }} - {{ - $t('accountants.relatives') }} - {{ - $t('accountants.sisters') }} - {{ - $t('accountants.spouse') }} -
-
-
- - -
-
- {{ contactForm.note.noteContent }} - {{ $t('accountants.note') }} -
-
-
- -
-
-
-
-
-
- -
-
-
- -
-
- -
-
- -
-
- - - {{ $t('value.favorites.page.menu.edit') }} -
-
- - {{ $t('accountants.share') }} -
-
- - {{ $t('accountants.PerEmInfor') }} -
-
-
- - -
diff --git a/entry/src/main/js/default/pages/contacts/card/card.js b/entry/src/main/js/default/pages/contacts/card/card.js deleted file mode 100644 index 3f7aee6..0000000 --- a/entry/src/main/js/default/pages/contacts/card/card.js +++ /dev/null @@ -1,382 +0,0 @@ -/** - * @file: card - */ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import router from '@system.router'; -import prompt from '@system.prompt'; -import Utils from '../../../../default/utils/utils.js'; -import LOG from '../../../utils/ContactsLog.js'; - -var TAG = 'Card...:'; - -export default { - data: { - icAvatarNormalLight: '/res/image/ic_contacts_name_m.svg', - icContactsAllergies: '/res/image/ic_contacts_allergies_m.svg', - icShare: '/res/image/ic_share_m.svg', - arrowUnfold: '/res/image/ic_contacts_arrow_unfold_s.svg', - arrowUp: '/res/image/ic_contacts_arrow_unfold.svg', - scrollDown: true, - scrollUp: false, - contactForm: {}, - startGlobalY: 0, - moveGlobalY: 0, - shareList: [], - emails: [], - events: [], - imAddresses: [], - phoneNumbers: [], - postalAddresses: [], - relations: [], - websites: [], - name: { - 'fullName': '', - 'givenName': '', - 'familyNamePhonetic': '', - 'alphaName': '' - }, - nickName: { - 'nickName': '' - }, - note: { - 'noteContent': '' - }, - organization: { - 'name': '', - 'title': '' - }, - showNameLast: '', - count: 0, - countStaus: true, - qrcodeParam: '' - }, - onInit() { - if (Utils.isEmpty(this.contactForm.name)) { - this.contactForm.name = this.name; - } - this.showNameLast = this.contactForm.name && this.contactForm.name.fullName ? this.contactForm.name.fullName - : ((this.contactForm.emptyNameData && this.contactForm.emptyNameData.length > 0) - ? this.contactForm.emptyNameData : (this.contactForm.phoneNumbers && this.contactForm.phoneNumbers[0]) - ? this.contactForm.phoneNumbers[0].phoneNumber : ''); - if (!this.contactForm.emails || this.contactForm.emails.length == 0) { - this.contactForm.emails = this.emails; - } else { - this.count = this.count + 1; - } - if (!this.contactForm.events || this.contactForm.events.length == 0) { - this.contactForm.events = this.events; - } else { - this.count = this.count + 1; - } - this.setInit(); - this.isState(); - this.getQrcode(); - }, - setInit() { - if (!this.contactForm.imAddresses || this.contactForm.imAddresses.length == 0) { - this.contactForm.imAddresses = this.imAddresses; - } else { - this.count = this.count + 1; - } - if (!this.contactForm.phoneNumbers || this.contactForm.phoneNumbers.length == 0) { - this.contactForm.phoneNumbers = this.phoneNumbers; - } else { - this.count = this.count + 1; - } - if (!this.contactForm.postalAddresses || this.contactForm.postalAddresses.length == 0) { - this.contactForm.postalAddresses = this.postalAddresses; - } else { - this.count = this.count + 1; - } - if (!this.contactForm.relations || this.contactForm.relations.length == 0) { - this.contactForm.relations = this.relations; - } else { - this.count = this.count + 1; - } - }, - isState() { - if (!this.contactForm.websites || this.contactForm.websites.length === 0) { - this.contactForm.websites = this.websites; - } else { - this.count = this.count + 1; - } - if (this.contactForm.name.familyNamePhonetic.length > 0) { - this.count = this.count + 1; - } - if (!this.contactForm.name) { - this.contactForm.name = this.name; - } - if (!this.contactForm.nickName) { - this.contactForm.nickName = this.nickName; - } else { - this.count = this.count + 1; - } - if (!this.contactForm.note) { - this.contactForm.note = this.note; - } else { - this.count = this.count + 1; - } - if (!this.contactForm.organization) { - this.contactForm.organization = this.organization; - } - if (Utils.isEmpty(this.contactForm.organization.name)) { - this.contactForm.organization.name = ''; - } - if (Utils.isEmpty(this.contactForm.organization.title)) { - this.contactForm.organization.title = ''; - } - if (this.count <= 1) { - this.countStaus = false; - - } - this.shareList = [{ - text: this.$t('value.contacts.page.menu.shareInfo.content.qrCode') - }, - { - text: this.$t('value.contacts.page.menu.shareInfo.content.vCard') - }, - { - text: this.$t('value.contacts.page.menu.shareInfo.content.text') - }]; - }, - onBackPress() { - router.back(); - }, - - getQrcode() { - var name = (this.contactForm.name && this.contactForm.name.fullName - && this.contactForm.name.fullName.length > 0) ? 'N:' + this.contactForm.name.fullName + ';' : ''; - - var company = (this.contactForm.organization && this.contactForm.organization.name - && this.contactForm.organization.name.length > 0) ? 'ORG:' + this.contactForm.organization.name + ';' : ''; - - var postalAddresses = (this.contactForm.postalAddresses && this.contactForm.postalAddresses[0] - && this.contactForm.postalAddresses[0].postalAddress.length > 0) ? 'ADR:' + this.contactForm.postalAddresses[0].postalAddress + ';' : ''; - - var phoneNumbersString = ''; - var phoneNumberLength = (this.contactForm && this.contactForm.phoneNumbers) - ? this.contactForm.phoneNumbers.length : 0; - for (var i = 0; i < phoneNumberLength; i++) { - if (i >= 2) { - break; - } else { - phoneNumbersString = phoneNumbersString + 'TEL:' + this.contactForm.phoneNumbers[i].phoneNumber + ';'; - } - } - var stringEmails = ''; - var emailsLength = (this.contactForm && this.contactForm.emails) ? this.contactForm.emails.length : 0; - for (var i = 0; i < emailsLength; i++) { - if (i >= 2) { - break; - } else { - stringEmails = stringEmails + 'EMAIL:' + this.contactForm.emails[i].email + ';'; - } - } - var websites = (this.contactForm.websites && this.contactForm.websites[0] - && this.contactForm.websites[0].website.length > 0) ? 'URL:' + this.contactForm.websites[0].website + ';' : ''; - - var position = (this.contactForm.organization && this.contactForm.organization.title - && this.contactForm.organization.title.length > 0) ? 'TIL:' + this.contactForm.organization.title + ';' : ''; - - var note = (this.contactForm.note && this.contactForm.note.noteContent - && this.contactForm.note.noteContent.length > 0) ? 'NOTE:' + this.contactForm.note.noteContent : ''; - - var imAddresses = (this.contactForm.imAddresses && this.contactForm.imAddresses.length > 0 - && this.contactForm.imAddresses[0].imAddress.length > 0) - ? this.contactForm.imAddresses[0].imAddress + ';;' : ''; - - this.qrcodeParam = 'MECARD:' + name + company + postalAddresses + phoneNumbersString - + stringEmails + websites + position + note + imAddresses; - }, - - routerBack() { - router.back(); - }, - onDestroy() { - - }, - - /** - * Scroll to the bottom of the list - * - * @param {Object} e - */ - scrollTend(e) { - LOG.info(TAG + 'scrollTend' + e); - this.scrollDown = false; - }, - - /** - * Move after finger touch finger touch action begins. - * - * @param {Object} e - */ - moveSroll(e) { - this.moveGlobalY = e.touches[0].globalY; - var temp = this.startGlobalY - this.moveGlobalY; - if (temp < 0) { - this.scrollDown = true; - } - }, - - /** - * Finger touch begins。 - * - * @param {Object} e - */ - srtartMove(e) { - this.startGlobalY = e.touches[0].globalY; - }, - scrollToTop(e) { - this.scrollDown = true; - this.$element('listItem').scrollTop(true); - }, - scrollToBottom(e) { - this.$element('listItem').scrollBottom(true); - }, - - editCard() { - this.setContactForm(); - - this.setContactForms(); - - this.addAccountants() - }, - setContactForm() { - if (this.contactForm.emails) { - this.addShowPField(this.contactForm.emails); - } - if (this.contactForm.events) { - this.addShowPField(this.contactForm.events); - } - if (this.contactForm.imAddresses) { - this.addShowPField(this.contactForm.imAddresses); - } - if (this.contactForm.phoneNumbers) { - this.addShowPField(this.contactForm.phoneNumbers); - } - if (this.contactForm.postalAddresses) { - this.addShowPField(this.contactForm.postalAddresses); - } - if (this.contactForm.relations) { - this.addShowPField(this.contactForm.relations); - } - if (this.contactForm.websites) { - this.addShowPField(this.contactForm.websites); - } - }, - setContactForms() { - if (!this.contactForm.emails || this.contactForm.emails.length == 0) { - this.contactForm.emails = this.emails; - } - if (!this.contactForm.events || this.contactForm.events.length == 0) { - this.contactForm.events = this.events; - } - if (!this.contactForm.imAddresses || this.contactForm.imAddresses.length == 0) { - this.contactForm.imAddresses = this.imAddresses; - } - if (!this.contactForm.phoneNumbers || this.contactForm.phoneNumbers.length == 0) { - this.contactForm.phoneNumbers = this.phoneNumbers; - } - if (!this.contactForm.postalAddresses || this.contactForm.postalAddresses.length == 0) { - this.contactForm.postalAddresses = this.postalAddresses; - } - if (!this.contactForm.relations || this.contactForm.relations.length == 0) { - this.contactForm.relations = this.relations; - } - if (!this.contactForm.websites || this.contactForm.websites.length == 0) { - this.contactForm.websites = this.websites; - } - }, - addAccountants() { - if (!this.contactForm.name) { - this.contactForm.name = this.name; - } - if (!this.contactForm.nickName) { - this.contactForm.nickName = this.nickName; - } - if (!this.contactForm.note) { - this.contactForm.note = this.note; - } - if (!this.contactForm.organization) { - this.contactForm.organization = this.organization; - } - - LOG.info(TAG + 'contactForm is ' + this.contactForm); - router.replace({ - uri: 'pages/contacts/accountants/accountants', - params: { - addShow: false, - updataShow: true, - updateCard: true, - showWork: true, - upHouseShow: true, - contactForm: this.contactForm, - upPinShow: true, - }, - }); - }, - - /** - * Displays the showP attribute for each element in the array - * - * @param {Array} array - */ - addShowPField(array) { - if (array || array.length > 0) { - array.forEach((item, index) => { - item.showP = true; - delete item.id; - }); - } - }, - - shareCarte() { - this.$element('shareCartedialog').show(); - }, - - /** - * Share Contacts - * - * @param {number} idx Contact data - */ - shareClick(idx) { - switch (idx) { - case 0: - prompt.showToast({ - message: 'Call share qr code three parties' - }); - break; - case 1: - prompt.showToast({ - message: 'Call share vCard three parties' - }); - break; - case 2: - prompt.showToast({ - message: 'Call text tripartite' - }); - break; - default: - break; - } - }, - - shareCancelClick() { - this.$element('shareCartedialog').close(); - } -}; diff --git a/entry/src/main/js/default/pages/contacts/contactDetail/contactDetail.hml b/entry/src/main/js/default/pages/contacts/contactDetail/contactDetail.hml deleted file mode 100644 index 5a11ff2..0000000 --- a/entry/src/main/js/default/pages/contacts/contactDetail/contactDetail.hml +++ /dev/null @@ -1,563 +0,0 @@ - - -
-
-
-
-
- -
- -
-
-
-
-
-
-
- -
- -
- - {{ (showNameLast && showNameLast.length > 0) ? showNameLast : $t('value.contacts.page.item.noName') }} - -
-
- - - -
-
- - {{ contactForm.namePrefix }} -
- {{ - (showNameLast && showNameLast.length > 0) ? showNameLast : $t('value.contacts.page.item.noName') }} - - {{ contactForm.company }} - - {{ contactForm.position }} - -
-
- - -
-
- {{ $item.phoneNumber }} - {{ - newNumberContactDetail.callTag }} - {{ - (($item.labelName == undefined || $item.labelName == '') ? '' : ($item.labelName + ' - ')) }}{{ - (($item.phoneAddress == 'N' || $item.phoneAddress == '') ? $t('value.callRecords.unKnowLocation') : $item.phoneAddress) - }}{{ $item.isPrimary == 1 ? " " + $t('value.favorites.page.dialog.defaultText') : "" }} -
-
-
- -
-
- -
-
-
- -
- - -
-
- {{ $item.email }} - {{ $item.labelName }} - - {{ $item.labelName }} -
-
- -
-
- -
- - -
-
- {{ $item.imAddress }} - {{ $t('accountants.AIM') }} - - {{ - $t('accountants.Windows Live') }} - {{ - $t('accountants.Yahoo') }} - {{ - $t('accountants.Skype') }} - {{ $t('accountants.QQ') - }} - {{ - $t('accountants.Hangout') }} - {{ $t('accountants.ICQ') - }} - {{ - $t('accountants.Jabber') }} - {{ $item.labelName }} - -
-
- -
-
- -
- - -
- {{ contactForm.nickName }} - {{ $t('accountants.nick') }} -
- -
- - -
-
- {{ $item.website }} - {{ $t('accountants.website') }} -
-
- -
-
- -
- - -
-
- {{ $item.postalAddress }} - {{ $item.labelName }} - - {{ $item.labelName }} -
-
- -
-
- -
- - -
-
- {{ $item.eventDate }} - {{ - $t('accountants.Anniversary') }} - {{ - $t('accountants.Lunar Birthday') }} - {{ - $t('accountants.birth') }} - {{ - $t('accountants.import day') }} - {{ $t('value.callRecords.unKnowLocation') }} -
-
- -
-
- -
- - -
- {{ contactForm.showGroupsString }} - {{ $t('value.contacts.selectContacts.group') }} -
- -
- - -
- {{ contactForm.pinYinName }} - {{ $t('accountants.letter') }} -
- -
- - -
-
- {{ $item.relationName }} - {{ $item.labelName }} - - {{ $item.labelName }} -
-
- -
-
- -
- - -
- {{ contactForm.note }} - {{ $t('accountants.note') }} -
- -
- - -
-
- {{ $t('phone.more') }} -
-
- -
-
-
- - - - - - -
- {{ $t('value.callRecords.calls') }} - - {{ - $t('value.callRecords.clear') }} -
-
- -
-
-
- {{ $item.timeDetail }} - {{ $item.timeDetail }} -
-
- - - - - - - - {{ $item.formatNumber }} -
-
-
- {{ $item.talkTime }} -
-
- -
- - -
- -
-
- - {{ $t('phone.addContacts') }} -
-
- - {{ $t('phone.saveContacts') }} -
-
- - {{ $t('phone.more') }} -
-
- - -
-
- - - {{ - $t('value.favorites.tab') }} - {{ - $t('value.favorites.page.deleteFavorites') }} -
-
- - {{ $t('value.favorites.page.menu.edit') }} -
-
- - {{ $t('phone.more') }} -
-
- - - -
- {{ $t('phone.clearRecords') }} -
- - - -
-
-
- - - - - - - - - - - - - - - - - - -
-
- -
-
- -
- -
- -
-
- -
-
-
- - - - - - - - - - -
- {{ - $t('value.callRecords.deleteMessageAsk') + $t('value.callRecords.deleteMessageThis') + $t('value.callRecords.deleteMessageCalls') - }} -
- - - -
-
-
- - - - - - - - - - - - -
- {{ $t('value.contacts.page.menu.deleteInfo.warningInfo') }} -
- - - -
-
-
- - -
- {{ $t('value.contacts.page.menu.deleteInfo.warningInfoRecord') }} -
- - - -
-
-
- - -
-
- -
-
- {{ $t('value.contacts.page.menu.shareInfo.content.scanQrcode') }} -
-
- - -
-
-
- - -
diff --git a/entry/src/main/js/default/pages/contacts/contactDetail/contactDetail.js b/entry/src/main/js/default/pages/contacts/contactDetail/contactDetail.js deleted file mode 100644 index 97231f8..0000000 --- a/entry/src/main/js/default/pages/contacts/contactDetail/contactDetail.js +++ /dev/null @@ -1,1724 +0,0 @@ -/** - * @file: Contact Details - */ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import contactDetailReq from '../../../../default/model/ContactDetailModel.js'; -import contactsService from '../../../../default/model/ContactModel.js'; -import callLogService from '../../../../default/model/CalllogModel.js'; -import favoritesModel from '../../../../default/model/FavoritesModel.js'; -import router from '@system.router'; -import prompt from '@system.prompt'; -import Utils from '../../../../default/utils/utils.js'; -import LOG from '../../../utils/ContactsLog.js'; -import Constants from '../../../../default/common/constants/Constants.js'; -import backgroundColor from '../../../common/constants/color.js'; - -var TAG = 'contactDetail...:'; - -const DELETE_CONTACT = 2003; -const GET_CONTACT_DETAIL = 2005; - -// 1 indicates a collected contact. 0 indicates a non-collected contact -const IS_FAVORITE = 1; -const IS_NOT_FAVORITE = 0; -const ACTION_SYNC = 0; -const SET_DEFAULT = 1; -const CLEAR_DEFAULT = 0; - -export default { - data: { - icPhoneCallMBlock: '/res/image/ic_phonecall_m_block.svg', - icVideoM: '/res/image/ic_video_m.svg', - icMassageM: '/res/image/ic_massage_m.svg', - icContactsCallOut: '/res/image/ic_contacts_callout_mini.svg', - icContactsCallIn: '/res/image/ic_contacts_call_in_mini.svg', - icContactsCallMissed: '/res/image/ic_contacts_call_missed_mini.svg', - icContactsCallRejected: '/res/image/ic_contacts_call_rejected_mini.svg', - showHeaderFlag: true, - pYStart: 0, - pYMove: 0, - directPoint: 0, - backgroundColor: backgroundColor.Color, - backgroundDetailColor: backgroundColor.detailColor, - directPointTemp: 0, - touchMoveStartX: 0, - touchMoveStartY: 0, - isFavorite: false, - newNumberContactDetail: {}, - showMenuTimeOutId: '', - showPhoneNumber: '', - phoneNumbersLength: 0, - copyToClipBoardContent: '', - postalAddressName: '', - sendNumber: '', - deleteIndex: '', - numLongPressIndexIndex: 0, - globalX: '', - globalY: '', - showNameLastMenu: '', - showNameLast: '', - qrcodeString: '', - contactForm: { - 'showLastDividerGroupsP': false, - 'showGroupsP': false, - 'isNewNumber': false, - 'showLastDividerNickNameP': false, - 'showLastDividerNoteP': false, - 'showNickNameP': false, - 'showNoteP': false, - 'showPinYinNameP': false, - 'showLastDividerPinYinNameP': false, - 'showMoreButton': false, - 'phoneNumbers': [], - 'emails': [], - 'imAddresses': [], - 'nickName': '', - 'websites': [], - 'postalAddresses': [], - 'events': [], - 'note': '', - 'relations': [], - 'pinYinName': '', - 'alphaName': '', - 'showGroupsString': '', - 'name': '', - 'emptyNameData': '', - 'namePrefix': '', - 'lastName': '', - 'company': '', - 'position': '', - 'numRecords': [], - 'groups': [], - 'showNewContact': false, - }, - contacts: {}, - emails: [ - { - 'id': 0, - 'email': '', - 'labelId': 1, - 'labelName': '', - 'showP': false - } - ], - events: [ - { - 'id': 0, - 'eventDate': '', - 'labelId': 3, - 'labelName': '', - 'showP': false, - 'showF': true, - 'showS': true - } - ], - imAddresses: [ - { - 'id': 0, - 'imAddress': '', - 'labelId': 1, - 'labelName': 'AIM', - 'showP': false - } - ], - phoneNumbers: [ - { - 'id': 0, - 'labelId': 2, - 'labelName': '', - 'phoneNumber': '', - 'phoneAddress': 'N', - 'showP': false, - 'blueStyle': false - } - ], - postalAddresses: [ - { - 'id': 0, - 'labelId': 1, - 'labelName': '', - 'postalAddress': '', - 'showP': false - } - ], - relations: [ - { - 'id': 0, - 'labelId': 1, - 'labelName': '', - 'relationName': '', - 'showP': false - } - ], - websites: [ - { - 'id': 0, - 'website': '', - 'showP': false - } - ], - name: { - 'fullName': '', - 'givenName': '', - 'familyNamePhonetic': '', - 'alphaName': '' - }, - nickName: { - 'nickName': '' - }, - note: { - 'noteContent': '' - }, - organization: { - 'name': '', - 'title': '' - }, - isNewSource: false, - containContacts: false, - showSetDefault: false, - sourceFromCallRecord: false, - phoneNumberShow: '', - contactId: '', - isNewNumber: false, - }, - onInit() { - LOG.info(TAG + ' onInit detail'); - }, - onReady() { - LOG.info(TAG + ' onReady detail'); - }, - onShow() { - this.emails[0].labelName = this.$t('accountants.private'); - this.events[0].eventDate = this.$t('accountants.date'); - this.events[0].labelName = this.$t('accountants.birth'); - this.phoneNumbers[0].labelName = this.$t('accountants.phone'); - this.postalAddresses[0].labelName = this.$t('accountants.house'); - this.relations[0].labelName = this.$t('accountants.assistant'); - if (this.isNewSource) { - let requestData = { - contactId: this.contactId - }; - this.getContactDetail(GET_CONTACT_DETAIL, requestData); - } else if (this.containContacts) { - this.dealRecordDetailsData(); - } else if (this.sourceFromCallRecord) { - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - contactDetailReq.getContactIdByNumber(DAHelper, this.phoneNumberShow, (contactId) => { - if (!Utils.isEmpty(contactId)) { - this.isNewNumber = false; - let requestData = { - contactId: contactId - }; - this.getContactDetail(GET_CONTACT_DETAIL, requestData); - } else { - this.getDetailAsNewNumber(); - } - }); - } - LOG.info(TAG + ' onShow detail'); - }, - - onHide() { - LOG.info(TAG + ' onHide detail'); - }, - - onDestroy() { - LOG.info(TAG + ' onDestroy detail'); - }, - - getDetailAsNewNumber() { - var numbers = [this.phoneNumberShow.replace(/\s+/g, '')]; - this.getNewNumRecords(numbers); - }, - - selectFavorite() { - LOG.info(TAG + 'favorites: onDestroy detail'); - var starred = IS_NOT_FAVORITE; - if (this.contacts.starred == IS_NOT_FAVORITE) { - this.contacts.starred = IS_FAVORITE; - starred = IS_FAVORITE; - } else { - this.contacts.starred = IS_NOT_FAVORITE; - starred = IS_NOT_FAVORITE; - } - var timestamp = (new Date()).valueOf(); - var actionData = { - ids: [this.contacts.contactId], - favorite: starred, - isOperationAll: false, - favorite_order: timestamp - }; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - favoritesModel.updateFavoriteState(DAHelper, actionData, result => { - }); - }, - - clearPhoneRecords() { - this.$element('clearRecordsDialog').show(); - }, - - clearRecords() { - var id = ''; - var ids = []; - for (let index = 0; index < this.contactForm.numRecords.length; index++) { - id = this.contactForm.numRecords[index].id; - ids.push(id); - } - this.contactForm.numRecords = []; - this.removeCallLog(ids); - this.$element('clearRecordsDialog').close(); - }, - - /** - * Finger touch begins - * - * @param {Object} e - */ - listItemTouchStart(e) { - LOG.info(TAG + 'listItemTouchStart e' + e); - this.globalX = e.touches[0].globalX; - this.globalY = e.touches[0].globalY; - }, - - /** - * Single point call records - * - * @param {number} index - */ - callOutRecord(index) { - LOG.info(TAG + 'callOutRecord index' + index); - this.callOut(this.contactForm.numRecords[index].phone); - }, - - /** - * Hold down the call history popup - * - * @param {number} index - */ - listItemOnLongPress: function (index) { - LOG.info(TAG + 'listItemOnLongPress index' + index); - this.deleteIndex = index; - this.sendNumber = this.contactForm.numRecords[index].formatNumber; - this.$element('itemMenu').show({ - x: this.globalX, - y: this.globalY - }); - }, - - /** - * Long press the phone number to pop up - * - * @param {number} index - */ - listItemOnLongPressNumber: function (index) { - LOG.info(TAG + 'listItemOnLongPressNumber index' + index); - this.numLongPressIndexIndex = index; - this.sendNumber = this.contactForm.phoneNumbers[index].phoneNumber; - this.showSetDefault = (this.contactForm.phoneNumbers[index].isPrimary == 1) ? false : true; - this.phoneNumbersLength = (this.contactForm.phoneNumbers && this.contactForm.phoneNumbers.length > 0) - ? this.contactForm.phoneNumbers.length : 0; - - this.showPhoneNumber = (this.contactForm.phoneNumbers && this.contactForm.phoneNumbers[index] - && this.contactForm.phoneNumbers[index].phoneNumber.length > 0) - ? (this.contactForm.phoneNumbers[index].phoneNumber.length <= 8 - ? this.contactForm.phoneNumbers[index].phoneNumber - : this.contactForm.phoneNumbers[index].phoneNumber.substring(0, 7) + '..') : ''; - - clearTimeout(this.showMenuTimeOutId); - this.showMenuTimeOutId = setTimeout(() => { - this.$element('itemMenuNumber').show({ - x: this.globalX, - y: this.globalY, - }); - }, 60); - }, - - /** - * Hold down the association window - * - * @param {string} content - */ - listItemOnLongPressContent: function (content) { - LOG.info(TAG + 'listItemOnLongPressContent content' + content); - this.copyToClipBoardContent = (content && content.length > 7) - ? this.subStringWithEllipsis(content, 9) : content; - - clearTimeout(this.showMenuTimeOutId); - this.showMenuTimeOutId = setTimeout(() => { - this.$element('itemMenuContent').show({ - x: this.globalX, - y: this.globalY, - }); - }, 60); - }, - - cancelClearRecordDialog() { - this.$element('clearRecordsDialog').close(); - }, - - updateContact() { - if (this.contacts.emails) { - this.addShowPField(this.contacts.emails); - } - if (this.contacts.events) { - this.addShowPField(this.contacts.events); - } - if (this.contacts.imAddresses) { - this.addShowPField(this.contacts.imAddresses); - } - if (this.contacts.phoneNumbers) { - this.addShowPField(this.contactForm.phoneNumbers); - } - if (this.contacts.postalAddresses) { - this.addShowPField(this.contacts.postalAddresses); - } - if (this.contacts.relations) { - this.addShowPField(this.contacts.relations); - } - if (this.contacts.websites) { - this.addShowPField(this.contacts.websites); - } - - if (!this.contacts.emails || this.contacts.emails.length == 0) { - this.contacts.emails = this.emails; - } - if (!this.contacts.events || this.contacts.events.length == 0) { - this.contacts.events = this.events; - } - if (!this.contacts.imAddresses || this.contacts.imAddresses.length == 0) { - this.contacts.imAddresses = this.imAddresses; - } - if (!this.contacts.phoneNumbers || this.contacts.phoneNumbers.length == 0) { - this.contacts.phoneNumbers = this.phoneNumbers; - } - - this.updateContacts(); - }, - updateContacts() { - if (!this.contacts.postalAddresses || this.contacts.postalAddresses.length === 0) { - this.contacts.postalAddresses = this.postalAddresses; - } - if (!this.contacts.relations || this.contacts.relations.length == 0) { - this.contacts.relations = this.relations; - } - if (!this.contacts.websites || this.contacts.websites.length == 0) { - this.contacts.websites = this.websites; - } - if (!this.contacts.groups || this.contacts.groups.length == 0) { - this.contacts.groups = this.groups; - } - if (!this.contacts.name) { - this.contacts.name = this.name; - } - if (!this.contacts.nickName) { - this.contacts.nickName = this.nickName; - } - if (!this.contacts.note) { - this.contacts.note = this.note; - } - if (!this.contacts.organization) { - this.contacts.organization = this.organization; - } - - router.replace({ - uri: 'pages/contacts/accountants/accountants', - params: { - addShow: false, - updataShow: true, - showWork: true, - upHouseShow: true, - contactForm: this.contacts, - groups: this.contacts.groups, - upPinShow: true, - }, - }); - }, - - /** - * Displays the showP attribute for each element in the array - * - * @param {Array} array - */ - addShowPField(array) { - LOG.info(TAG + 'addShowPField array' + array); - if (array || array.length > 0) { - array.forEach((item, index) => { - item.showP = true; - delete item.id; - }); - } - }, - - routerBack() { - this.$app.$def.setRefreshContacts(false); - router.back(); - }, - - onBackPress() { - this.$app.$def.setRefreshContacts(false); - router.back(); - }, - - getMore: function () { - if (Boolean(this.contactForm.showMoreButton) == true) { - this.contactForm.showMoreButton = false; - } - this.dealRecordDetailsData(); - }, - - /** - * Deep copy obJ objects - * - * @param {Object} obj - * @return {Object} - */ - copy(obj) { - return JSON.parse(JSON.stringify(obj)); - }, - - /** - * Obtain contact details - * - * @param {number} code 2005 FA and PA pass protocol codes - * @param {number} data contactId The contact ID - */ - getContactDetail: function (code, data) { - var actionData = data; - data.contactId = actionData.contactId; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - contactDetailReq.getContactById(DAHelper, data, result => { - if (!result) { - this.getDetailAsNewNumber(); - return; - } - this.contacts = result.data; - LOG.info(TAG + 'getContactDetail is ' + result); - this.dealRecordDetailsData(); - }); - }, - - /** - * Request background: obtain contact details, and assemble the display data after obtaining call record data - */ - dealRecordDetailsData: function () { - - this.phoneNumberType(); - - this.emailType(); - - this.instantMessageType(); - - this.residentialType(); - - this.birthdayType(); - - this.assistantType(); - - var newContacts = this.copy(this.contacts); - - var totalCountNumber = 0; - totalCountNumber = this.isTotalCountNumber(totalCountNumber, newContacts); - - var dataLengthCount = 0; - - newContacts.phoneNumbers = this.setTempPhoneNumbersList(totalCountNumber, dataLengthCount, newContacts); - - newContacts.emails = this.setTempEmailsList(totalCountNumber, dataLengthCount, newContacts); - - newContacts.imAddresses = this.setTempImAddressesList(totalCountNumber, dataLengthCount, newContacts); - - var showNickNameP = false; - var showLastDividerNickNameP = true; - if (newContacts.nickName && newContacts.nickName.nickName && newContacts.nickName.nickName.length > 0) { - showNickNameP = true; - if (dataLengthCount === totalCountNumber - 1) { - showLastDividerNickNameP = false; - } else { - showLastDividerNickNameP = true; - } - dataLengthCount++; - } - - newContacts.websites = this.setTempWebsitesList(totalCountNumber, dataLengthCount, newContacts); - - newContacts.postalAddresses = this.setTempPostalAddressesList(totalCountNumber, dataLengthCount, newContacts); - - newContacts.events = this.setTempEventsList(totalCountNumber, dataLengthCount, newContacts); - - var showGroupsP = false; - var showLastDividerGroupsP = true; - var showGroupsString = ''; - if (newContacts.groups && newContacts.groups.length > 0) { - newContacts.groups.forEach((element) => { - showGroupsString = showGroupsString + element.title + ', '; - }); - showGroupsString = showGroupsString.substr(0, showGroupsString.length - 2); - } - if (showGroupsString && showGroupsString.length > 0) { - showGroupsP = true; - if (dataLengthCount === totalCountNumber - 1) { - showLastDividerGroupsP = false; - } else { - showLastDividerGroupsP = true; - } - dataLengthCount++; - } - - var showPinYinNameP = false; - var showLastDividerPinYinNameP = true; - if (newContacts.name && newContacts.name.familyNamePhonetic && newContacts.name.familyNamePhonetic.length > 0) { - showPinYinNameP = true; - if (dataLengthCount === totalCountNumber - 1) { - showLastDividerPinYinNameP = false; - } else { - showLastDividerPinYinNameP = true; - } - dataLengthCount++; - } - - newContacts.relations = this.setTempRelationsList(totalCountNumber, dataLengthCount, newContacts); - - var showNoteP = false; - var showLastDividerNoteP = true; - if (newContacts.note && newContacts.note.noteContent && newContacts.note.noteContent.length > 0) { - showNoteP = true; - if (dataLengthCount === totalCountNumber - 1) { - showLastDividerNoteP = false; - } else { - showLastDividerNoteP = true; - } - dataLengthCount++; - } - - this.contactForm.showLastDividerNickNameP = showLastDividerNickNameP; - this.contactForm.showLastDividerNoteP = showLastDividerNoteP; - this.contactForm.showNickNameP = showNickNameP; - this.contactForm.showNoteP = showNoteP; - this.contactForm.showPinYinNameP = showPinYinNameP; - this.contactForm.showLastDividerPinYinNameP = showLastDividerPinYinNameP; - this.contactForm.showGroupsP = showGroupsP; - this.contactForm.showLastDividerGroupsP = showLastDividerGroupsP; - this.contactForm.isNewNumber = false; - this.contactForm.showMoreButton = false; - this.contactForm.emptyNameData = newContacts.emptyNameData; - var frist = this.contactForm.emptyNameData.substr(0, 1); - if ((frist >= 'a' && frist <= 'z') || (frist >= 'A' && frist <= 'Z')) { - this.contactForm.namePrefix = frist.toUpperCase(); - } else { - this.contactForm.namePrefix = '0'; - } - - this.setContactForm(showGroupsString, newContacts); - - this.processingInitializationData(newContacts); - }, - phoneNumberType() { - if (this.contacts.hasOwnProperty('phoneNumbers') && this.contacts.phoneNumbers.length > 0) { - this.contacts.phoneNumbers.forEach((element) => { - switch (parseInt(element.labelId, 10)) { - case 1: - element.labelName = this.$t('accountants.house'); - break; - case 2: - element.labelName = this.$t('accountants.phone'); - break; - case 3: - element.labelName = this.$t('accountants.unit'); - break; - case 4: - element.labelName = this.$t('accountants.unit fax'); - break; - case 5: - element.labelName = this.$t('accountants.home fax'); - break; - case 6: - element.labelName = this.$t('accountants.pager'); - break; - case 7: - element.labelName = this.$t('accountants.others'); - break; - case 12: - element.labelName = this.$t('accountants.switchboard'); - break; - default: - element.labelName = element.labelName; - - } - }); - } - }, - emailType() { - if (this.contacts.hasOwnProperty('emails') && this.contacts.emails.length > 0) { - this.contacts.emails.forEach((element) => { - switch (parseInt(element.labelId, 10)) { - case 1: - element.labelName = this.$t('accountants.private'); - break; - case 2: - element.labelName = this.$t('accountants.unit'); - break; - case 3: - element.labelName = this.$t('accountants.others'); - break; - default: - element.labelName = element.labelName; - } - }); - } - }, - instantMessageType() { - if (this.contacts.hasOwnProperty('imAddresses') && this.contacts.imAddresses.length > 0) { - this.contacts.imAddresses.forEach((element) => { - switch (parseInt(element.labelId, 10)) { - case 1: - element.labelName = this.$t('accountants.AIM'); - break; - case 2: - element.labelName = this.$t('accountants.Windows Live'); - break; - case 3: - element.labelName = this.$t('accountants.Yahoo'); - break; - case 4: - element.labelName = this.$t('accountants.Skype'); - break; - case 5: - element.labelName = this.$t('accountants.QQ'); - break; - case 6: - element.labelName = this.$t('accountants.Hangout'); - break; - case 7: - element.labelName = this.$t('accountants.ICQ'); - break; - case 8: - element.labelName = this.$t('accountants.Jabber'); - break; - default: - element.labelName = element.labelName; - } - }); - } - }, - residentialType() { - if (this.contacts.hasOwnProperty('postalAddresses') && this.contacts.postalAddresses.length > 0) { - this.contacts.postalAddresses.forEach((element) => { - switch (parseInt(element.labelId, 10)) { - case 1: - element.labelName = this.$t('accountants.house'); - break; - case 2: - element.labelName = this.$t('accountants.unit'); - break; - case 3: - element.labelName = this.$t('accountants.others'); - break; - default: - element.labelName = element.labelName; - } - }); - } - }, - birthdayType() { - if (this.contacts.hasOwnProperty('events') && this.contacts.events.length > 0) { - this.contacts.events.forEach((element) => { - LOG.info(TAG + ' contactDetail events parseInt(element.labelId) =' + this.$t('accountants.phone')); - switch (parseInt(element.labelId, 10)) { - case 1: - element.labelName = this.$t('accountants.Anniversary'); - break; - case 2: - element.labelName = this.$t('accountants.Lunar Birthday'); - break; - case 3: - element.labelName = this.$t('accountants.birth'); - break; - case 4: - element.labelName = this.$t('accountants.import day'); - } - }); - } - }, - assistantType() { - if (this.contacts.hasOwnProperty('relations') && this.contacts.relations.length > 0) { - this.contacts.relations.forEach((element) => { - switch (parseInt(element.labelId, 10)) { - case 1: - element.labelName = this.$t('accountants.assistant'); - break; - case 2: - element.labelName = this.$t('accountants.brothers'); - break; - case 3: - element.labelName = this.$t('accountants.child'); - break; - case 4: - element.labelName = this.$t('accountants.companion'); - break; - case 5: - element.labelName = this.$t('accountants.father'); - break; - case 6: - element.labelName = this.$t('accountants.friend'); - break; - case 7: - element.labelName = this.$t('accountants.boss'); - break; - case 8: - element.labelName = this.$t('accountants.mother'); - break; - case 9: - element.labelName = this.$t('accountants.parents'); - break; - case 10: - element.labelName = this.$t('accountants.Partner'); - break; - case 11: - element.labelName = this.$t('accountants.introducer'); - break; - case 12: - element.labelName = this.$t('accountants.relatives'); - break; - case 13: - element.labelName = this.$t('accountants.sisters'); - break; - case 14: - element.labelName = this.$t('accountants.spouse'); - break; - default: - element.labelName = element.labelName; - - } - }); - } - }, - isTotalCountNumber(totalCountNumber, newContacts) { - totalCountNumber = (newContacts.phoneNumbers && newContacts.phoneNumbers.length > 0) - ? totalCountNumber + newContacts.phoneNumbers.length : totalCountNumber; - - totalCountNumber = (newContacts.emails && newContacts.emails.length > 0) - ? totalCountNumber + newContacts.emails.length : totalCountNumber; - - totalCountNumber = (newContacts.imAddresses && newContacts.imAddresses.length > 0) - ? totalCountNumber + newContacts.imAddresses.length : totalCountNumber; - - totalCountNumber = (newContacts.nickName && newContacts.nickName.nickName - && newContacts.nickName.nickName.length > 0) ? totalCountNumber + 1 : totalCountNumber; - - totalCountNumber = (newContacts.websites && newContacts.websites.length > 0) - ? totalCountNumber + newContacts.websites.length : totalCountNumber; - - totalCountNumber = (newContacts.postalAddresses && newContacts.postalAddresses.length > 0) - ? totalCountNumber + newContacts.postalAddresses.length : totalCountNumber; - - totalCountNumber = (newContacts.note && newContacts.note.noteContent - && newContacts.note.noteContent.length > 0) ? totalCountNumber + 1 : totalCountNumber; - - totalCountNumber = (newContacts.events && newContacts.events.length > 0) - ? totalCountNumber + newContacts.events.length : totalCountNumber; - - totalCountNumber = (newContacts.relations && newContacts.relations.length > 0) - ? totalCountNumber + newContacts.relations.length : totalCountNumber; - - totalCountNumber = (newContacts.name && newContacts.name.familyNamePhonetic - && newContacts.name.familyNamePhonetic.length > 0) ? totalCountNumber + 1 : totalCountNumber; - - totalCountNumber = (newContacts.groups && newContacts.groups.length > 0) - ? totalCountNumber + 1 : totalCountNumber; - - return totalCountNumber; - }, - setTempPhoneNumbersList(totalCountNumber, dataLengthCount, newContacts) { - var tempPhoneNumbersList = []; - if (newContacts.phoneNumbers && newContacts.phoneNumbers.length > 0) { - newContacts.phoneNumbers.forEach((element) => { - element.showElement = true; - if (dataLengthCount === totalCountNumber - 1) { - element.showLastDivider = false; - } else { - element.showLastDivider = true; - } - dataLengthCount++; - tempPhoneNumbersList.push(element); - }); - } - return tempPhoneNumbersList; - }, - setTempEmailsList(totalCountNumber, dataLengthCount, newContacts) { - var tempEmailsList = []; - if (newContacts.emails && newContacts.emails.length > 0) { - newContacts.emails.forEach((element) => { - element.showElement = true; - if (dataLengthCount === totalCountNumber - 1) { - element.showLastDivider = false; - } else { - element.showLastDivider = true; - } - dataLengthCount++; - tempEmailsList.push(element); - }); - } - return tempEmailsList; - }, - setTempImAddressesList(totalCountNumber, dataLengthCount, newContacts) { - var tempImAddressesList = []; - if (newContacts.imAddresses && newContacts.imAddresses.length > 0) { - newContacts.imAddresses.forEach((element) => { - element.showElement = true; - if (dataLengthCount === totalCountNumber - 1) { - element.showLastDivider = false; - } else { - element.showLastDivider = true; - } - dataLengthCount++; - tempImAddressesList.push(element); - }); - } - return tempImAddressesList; - }, - setTempWebsitesList(totalCountNumber, dataLengthCount, newContacts) { - var tempWebsitesList = []; - if (newContacts.websites && newContacts.websites.length > 0) { - newContacts.websites.forEach((element) => { - element.showElement = true; - if (dataLengthCount === totalCountNumber - 1) { - element.showLastDivider = false; - } else { - element.showLastDivider = true; - } - dataLengthCount++; - tempWebsitesList.push(element); - }); - } - return tempWebsitesList; - }, - setTempPostalAddressesList(totalCountNumber, dataLengthCount, newContacts) { - var tempPostalAddressesList = []; - if (newContacts.postalAddresses && newContacts.postalAddresses.length > 0) { - newContacts.postalAddresses.forEach((element) => { - element.showElement = true; - - if (dataLengthCount === totalCountNumber - 1) { - element.showLastDivider = false; - } else { - element.showLastDivider = true; - } - dataLengthCount++; - tempPostalAddressesList.push(element); - }); - } - return tempPostalAddressesList; - }, - setTempEventsList(totalCountNumber, dataLengthCount, newContacts) { - var tempEventsList = []; - if (newContacts.events && newContacts.events.length > 0) { - newContacts.events.forEach((element) => { - element.showElement = true; - if (dataLengthCount === totalCountNumber - 1) { - element.showLastDivider = false; - } else { - element.showLastDivider = true; - } - dataLengthCount++; - tempEventsList.push(element); - }); - } - return tempEventsList; - }, - setTempRelationsList(totalCountNumber, dataLengthCount, newContacts) { - var tempRelationsList = []; - if (newContacts.relations && newContacts.relations.length > 0) { - newContacts.relations.forEach((element) => { - element.showElement = true; - if (dataLengthCount === totalCountNumber - 1) { - element.showLastDivider = false; - } else { - element.showLastDivider = true; - } - dataLengthCount++; - tempRelationsList.push(element); - }); - } - return tempRelationsList; - }, - setContactForm(showGroupsString, newContacts) { - this.contactForm.lastName = (newContacts.name && newContacts.name.nameSuffix - && newContacts.name.nameSuffix.length > 0) ? newContacts.name.nameSuffix : ''; - - this.contactForm.company = (newContacts.organization && newContacts.organization.name - && newContacts.organization.name.length > 0) ? newContacts.organization.name : ''; - - this.contactForm.position = (newContacts.organization && newContacts.organization.title - && newContacts.organization.title.length > 0) ? newContacts.organization.title : ''; - - this.contactForm.phoneNumbers = (newContacts.phoneNumbers && newContacts.phoneNumbers.length > 0) - ? newContacts.phoneNumbers : []; - - this.contactForm.emails = (newContacts.emails && newContacts.emails.length > 0) ? newContacts.emails : []; - - this.contactForm.imAddresses = (newContacts.imAddresses && newContacts.imAddresses.length > 0) - ? newContacts.imAddresses : []; - - this.contactForm.nickName = (newContacts.nickName && newContacts.nickName.nickName - && newContacts.nickName.nickName.length > 0) ? newContacts.nickName.nickName : ''; - - this.contactForm.websites = (newContacts.websites && newContacts.websites.length > 0) - ? newContacts.websites : []; - - this.contactForm.postalAddresses = (newContacts.postalAddresses && newContacts.postalAddresses.length > 0) - ? newContacts.postalAddresses : []; - - this.contactForm.events = (newContacts.events && newContacts.events.length > 0) ? newContacts.events : []; - - this.contactForm.note = (newContacts.note && newContacts.note.noteContent - && newContacts.note.noteContent.length > 0) ? newContacts.note.noteContent : ''; - - this.contactForm.relations = (newContacts.relations && newContacts.relations.length > 0) - ? newContacts.relations : []; - - this.contactForm.pinYinName = (newContacts.name && newContacts.name.familyNamePhonetic - && newContacts.name.familyNamePhonetic.length > 0) ? newContacts.name.familyNamePhonetic : ''; - - this.contactForm.showGroupsString = (showGroupsString && showGroupsString.length > 0) ? showGroupsString : ''; - this.contactForm.groups = (newContacts.groups && newContacts.groups.length > 0) ? newContacts.groups : []; - }, - processingInitializationData(newContacts) { - if (!Utils.isEmptyList(this.contactForm.phoneNumbers)) { - var numbers = []; - this.contactForm.phoneNumbers.forEach(element => { - numbers.push(element.phoneNumber); - }); - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CALLLOG_DB_URI); - callLogService.getCallLogListByPhoneNumber(DAHelper, numbers, (resultList) => { - this.contactForm.numRecords = this.getDetailMessage(resultList); - }); - } - - if (this.sourceFromCallRecord && this.isNewNumber) { - this.showNameLast = (this.contactForm.phoneNumbers && this.contactForm.phoneNumbers[0]) - ? this.contactForm.phoneNumbers[0].phoneNumber : ''; - } else { - this.showNameLast = (this.contactForm.emptyNameData && this.contactForm.emptyNameData.length > 0) - ? this.contactForm.emptyNameData : ''; - } - this.showNameLastMenu = (this.showNameLast && this.showNameLast.length > 6) - ? this.subStringWithEllipsis(this.showNameLast, 7) : this.showNameLast; - - if (!Utils.isEmptyList(this.contactForm.phoneNumbers)) { - for (var i = 0; i < this.contactForm.phoneNumbers.length; i++) { - if (this.contactForm.phoneNumbers[i].isPrimary === 1) { - var tempPhoneNumber = newContacts.phoneNumbers[i]; - this.contactForm.phoneNumbers.splice(i, 1); - this.contactForm.phoneNumbers.unshift(tempPhoneNumber); - } - } - } - }, - openMailApp: function (index) { - prompt.showToast({ - message: this.$t('recordDetail.menu.noAppToDealThisAction') - }); - }, - openMessageApp: function (index) { - prompt.showToast({ - message: this.$t('recordDetail.menu.noAppToDealThisAction') - }); - }, - openCalenderApp: function (index) { - prompt.showToast({ - message: this.$t('recordDetail.menu.noAppToDealThisAction') - }); - }, - - openMapApp() { - this.$element('dialogPostalAddressMap').close(); - var actionData = {}; - actionData.postalAddressName = this.postalAddressName; - let result = { - 'code': 0 - }; - if (result.code != 0) { - LOG.info(TAG + 'plus result is error:' + result.code); - } - }, - - /** - * If source is 0, the search page is displayed for new contacts. When source is 1, the relation from relation relation jumps - * - * @param {number} source - * @param {number} index - */ - openSearchContact: function (source, index) { - this.$app.$def.globalData.searchValue = this.contactForm.relations[index].relationName; - this.$app.$def.globalData.navigationType = 'contacts'; - router.back({ - path: 'pages/navigation/navigation' - }); - }, - sendNewContent() { - router.push({ - uri: 'pages/contacts/selectContactsList/selectContactsList', - params: { - type: 'saveContacts', - number: this.phoneNumberShow, - } - }); - }, - - /** - * Click to open the corresponding website - * - * @param {number} index - */ - openBrowser: function (index) { - var actionData = {}; - actionData.openContent = this.contactForm.websites[index].website; - let result = { - 'code': 0 - }; - if (result.code != 0) { - LOG.info(TAG + 'plus result is error:' + result.code); - } - }, - - /** - * Click postalAddress to open the select button - * - * @param {number} index - */ - onclickPostalAddress: function (index) { - LOG.info(TAG + 'onclickPostalAddress index' + index); - this.postalAddressName = this.contacts.postalAddresses[index].postalAddress; - clearTimeout(this.showMenuTimeOutId); - this.showMenuTimeOutId = setTimeout(() => { - this.$element('dialogPostalAddressMap').show({}); - }, 60); - }, - - /** - * List The list move ends - * - * @param {Object} e - */ - onTouchEnd: function (e) { - LOG.info(TAG + 'onTouchEnd e' + e); - this.directPoint = (this.directPoint + this.directPointTemp); - this.directPointTemp = 0; - }, - - /** - * The current list has slid to the top position - * - * @param {Object} e - */ - onScrollTop: function (e) { - LOG.info(TAG + 'onScrollTop e' + e); - this.showHeaderFlag = true; - this.directPoint = 0; - this.directPointTemp = 0; - }, - - /** - * Use the contact icon to place a call - * - * @param {Object} e - */ - callOutByDialerIcon(e) { - LOG.info(TAG + ' callOutByLog:' + e); - this.callOut(this.contactForm.numRecords[e.detail.index].numbers[0].number); - }, - - /** - * Outgoing interface of telephone - * - * @param {Array} phoneNumber - */ - callOut(phoneNumber) { - var actionData = {}; - if (phoneNumber.length == 0 && this.contactForm.numRecords.length > 0) { - actionData.phoneNumber = this.contactForm.numRecords[0].numbers[0].number; - } else if (phoneNumber.length > 0) { - actionData.phoneNumber = phoneNumber; - } - this.$app.$def.call(phoneNumber); - }, - - /** - * Obtaining Call Records - * - * @param {Array} numbers - */ - getNumRecords(numbers) { - var actionData = {}; - actionData.number = numbers; - actionData.language = this.$t('recordDetail.language'); - }, - - /** - * Delete the call history menu option - * - * @param {Object} event - */ - todoSelected(event) { - if (event.value == 'delete') { - this.$element('deleteCheckDialog').show(); - } - if (event.value == 'edit') { - this.$app.$def.dialerStateData.numTextDialer = this.sendNumber; - this.$app.$def.dialerStateData.isEditNumber = true; - this.$app.$def.globalData.navigationType = 0; - this.$app.$def.globalData.menuType = 0; - router.back({ - path: 'pages/navigation/navigation' - }); - } - }, - - /** - * Select menu option - * - * @param {Object} event - */ - todoSelectedPhoneNumber(event) { - if (event.value == 'copyNumber') { - var number = ''; - number = this.contacts.phoneNumbers[this.numLongPressIndexIndex].phoneNumber.replace(/\s+/g, ''); - this.copyNumber(number); - } - if (event.value == 'edit') { - this.$app.$def.dialerStateData.numTextDialer = this.sendNumber; - this.$app.$def.dialerStateData.isEditNumber = true; - this.$app.$def.globalData.navigationType = 0; - this.$app.$def.globalData.menuType = 0; - router.back({ - path: 'pages/navigation/navigation' - }); - } - if (event.value == 'setDefaultPhoneNumber') { - this.setOrCancelDefaultPhoneNumber(SET_DEFAULT); - } - if (event.value == 'clearDefaultPhoneNumber') { - this.setOrCancelDefaultPhoneNumber(CLEAR_DEFAULT); - } - }, - - /** - * Setting to cancel the default phone - * - * @param {number} defaultStatus - */ - setOrCancelDefaultPhoneNumber(defaultStatus) { - LOG.info(TAG + 'setOrCancelDefaultPhoneNumber' + defaultStatus); - var actionData = {}; - actionData.contactId = this.contacts.contactId; - actionData.phoneNumber = this.contactForm.phoneNumbers[this.numLongPressIndexIndex] - .phoneNumber.replace(/\s+/g, ''); - actionData.isPrimary = defaultStatus; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - favoritesModel.setOrCancelDefaultPhoneNumber(DAHelper, actionData, result => { - if (result.code == 0) { - if (defaultStatus == SET_DEFAULT) { - this.contactForm.phoneNumbers[this.numLongPressIndexIndex].isPrimary = SET_DEFAULT; - var tempPhoneNumber = this.contactForm.phoneNumbers[this.numLongPressIndexIndex]; - this.contactForm.phoneNumbers = this.copy(this.contacts.phoneNumbers); - var tempIndex = 0; - if (!Utils.isEmptyList(this.contactForm.phoneNumbers)) { - for (var i = 0; i < this.contactForm.phoneNumbers.length; i++) { - if (tempPhoneNumber.phoneNumber == this.contactForm.phoneNumbers[i].phoneNumber) { - tempIndex = i; - } else { - this.contactForm.phoneNumbers[i].isPrimary = CLEAR_DEFAULT; - } - } - } - this.contactForm.phoneNumbers.splice(tempIndex, 1); - this.contactForm.phoneNumbers.unshift(tempPhoneNumber); - } - if (defaultStatus == CLEAR_DEFAULT) { - this.contactForm.phoneNumbers = this.contacts.phoneNumbers; - this.contactForm.phoneNumbers.forEach(element => { - element.isPrimary = CLEAR_DEFAULT; - }); - } - } else { - prompt.showToast({ - message: this.$t('Fail to update default phone number!') - }); - } - }); - - }, - - /** - * Jump to the relational person - * - * @param {Object} event - */ - todoSelectedContent(event) { - if (event.value == 'copyToClipBoard') { - this.copyNumber(this.relationName); - } - }, - copyContentCancelDialogPostalAddress() { - this.$element('dialogPostalAddressMap').close(); - this.copyNumber(this.postalAddressName); - }, - - copyNumber(data) { - LOG.info(TAG + 'copyNumber data' + data); - var actionData = {}; - actionData.pasteBoardContent = data; - }, - - /** - * Share selected content - * - * @param {Object} event - */ - shareSelectContact: function (event) { - if (event.value == 'deleteContact') { - this.$element('deletedialogcontact').show(); - } - if (event.value == 'deleteRecord') { - this.$element('deletedialogrecord').show(); - } - if (event.value == 'shareContact') { - this.$element('shareDialogDetails').show(); - } - }, - - /** - * Delete Contact Details More Call History Menu option - * - * @param {Object} event - */ - shareSelectRecord: function (event) { - if (event.value == 'deleteRecord') { - this.$element('deletedialogrecord').show(); - } - }, - - cancelClickContact: function () { - this.$element('deletedialogcontact').close(); - }, - - cancelClickQrCode: function () { - this.$element('dialogContactsDetailQrCode').close(); - }, - - cancelClickRecord: function () { - this.$element('deletedialogrecord').close(); - }, - - /** - * Delete contact list data - * - * @param {number} code - * @param {number} data contactId The contact ID - */ - deleteContactData(code, data) { - LOG.info(TAG + 'deleteContactData code' + code); - LOG.info(TAG + 'deleteContactData data' + data); - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - var result = contactsService.deleteContacts(DAHelper, data, result => { - if (result == 0) { - router.back(); - } else { - prompt.showToast({ - message: 'contactDetail Failed to delete data.' - }); - } - }); - }, - - deleteClickContact: function () { - this.$element('deletedialogcontact').close(); - var requestData = { - contactId: this.contacts.contactId - }; - this.deleteContactData(DELETE_CONTACT, requestData); - }, - - deleteClickRecord: function () { - this.$element('deletedialogrecord').close(); - this.clearRecordsMore(); - }, - - clearRecordsMore() { - var id = ''; - var ids = []; - for (let index = 0; index < this.contactForm.numRecords.length; index++) { - id = this.contactForm.numRecords[index].id; - ids.push(id); - } - this.removeCallLog(ids); - this.contactForm.numRecords = []; - this.contactForm.showMoreButton = false; - }, - - doDelete() { - var id = this.contactForm.numRecords[this.deleteIndex].id; - var ids = []; - ids.push(id); - this.removeCallLog(ids); - this.contactForm.numRecords.splice(this.index, 1); - this.$element('deleteCheckDialog').close(); - }, - - cancelDialog() { - this.$element('deleteCheckDialog').close(); - }, - - cancelDialogPostalAddress() { - this.$element('dialogPostalAddressMap').close(); - }, - - /** - * Deleting Call History - * - * @param {Array} ids - */ - removeCallLog: function (ids) { - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CALLLOG_DB_URI); - callLogService.deleteCallLogByIds(DAHelper, ids, () => { - }); - }, - - /** - * Send a message - * - * @param {number} phoneNumber - * @param {string} name - */ - sendMessage(phoneNumber, name) { - var params = []; - params.push({ - contactsName: name, - telephone: phoneNumber, - telephoneFormat: phoneNumber, - }); - this.$app.$def.sendMessage(params); - }, - - addContacts() { - let show = this.phoneNumberShow.length > 0 ? true : false; - this.$app.$def.dialerStateData.isNeedShowDialer = false; - router.push({ - uri: 'pages/contacts/accountants/accountants', - params: { - addShow: true, - updataShow: false, - showWork: true, - upHouseShow: true, - phoneNumbers: [ - { - 'id': '', - 'labelId': 2, - 'labelName': this.$t('accountants.phone'), - 'phoneNumber': this.phoneNumberShow, - 'phoneAddress': 'N', - 'blueStyle': false, - 'showP': show - }] - }, - }); - }, - - /** - * Intercepts the first five characters of the string - * - * @param {string} str - * @param {number} len - * @return {Object} newStr - */ - subStringWithEllipsis(str, len) { - let newLength = 0; - let newStr = ''; - let chineseRegex = /[^\x00-\xff]/g; - let singleChar = ''; - let strLength = str.replace(chineseRegex, '**').length; - for (var i = 0; i < strLength; i++) { - singleChar = str.charAt(i).toString(); - if (singleChar.match(chineseRegex) != null) { - newLength += 2; - } else { - newLength++; - } - if (newLength > len) { - break; - } - newStr += singleChar; - } - newStr += '..' - return newStr; - }, - showMoreMenuOperationSaveContacts() { - this.$element('contactSaveContactBottom').show({ - x: this.touchMoveStartX, - y: this.touchMoveStartY - }); - }, - showMoreMenuOperationNew() { - this.$element('contactNewNumberBottom').show({ - x: this.touchMoveStartX, - y: this.touchMoveStartY - }); - }, - - touchMoreStartButtom(e) { - LOG.info(TAG + 'touchMoreStartButtom e' + e); - this.touchMoveStartX = e.touches[0].globalX; - this.touchMoveStartY = e.touches[0].globalY; - }, - - onclickContactsDetailQrCode: function () { - var name = (this.contacts.name && this.contacts.name.fullName && this.contacts.name.fullName.length > 0) - ? 'N:' + this.contacts.name.fullName + ';' : ''; - - var company = (this.contacts.organization && this.contacts.organization.name - && this.contacts.organization.name.length > 0) ? 'ORG:' + this.contacts.organization.name + ';' : ''; - - var postalAddresses = (this.contacts.postalAddresses && this.contacts.postalAddresses[0] - && this.contacts.postalAddresses[0].postalAddress.length > 0) - ? 'ADR:' + this.contacts.postalAddresses[0].postalAddress + ';' : ''; - - var phoneNumbersString = ''; - var phoneNumberLength = (this.contacts && this.contacts.phoneNumbers) ? this.contacts.phoneNumbers.length : 0; - for (var i = 0; i < phoneNumberLength; i++) { - if (i >= 2) { - break; - } else { - phoneNumbersString = phoneNumbersString + 'TEL:' + this.contacts.phoneNumbers[i].phoneNumber + ';'; - } - } - var stringEmails = ''; - var emailsLength = (this.contacts && this.contacts.emails) ? this.contacts.emails.length : 0; - for (var i = 0; i < emailsLength; i++) { - if (i >= 2) { - break; - } else { - stringEmails = stringEmails + 'EMAIL:' + this.contacts.emails[i].email + ';'; - } - } - var websites = (this.contacts.websites && this.contacts.websites[0] - && this.contacts.websites[0].website.length > 0) ? 'URL:' + this.contacts.websites[0].website + ';' : ''; - - var position = (this.contacts.organization && this.contacts.organization.title - && this.contacts.organization.title.length > 0) ? 'TIL:' + this.contacts.organization.title + ';' : ''; - - var note = (this.contacts.note && this.contacts.note.noteContent && this.contacts.note.noteContent.length > 0) - ? 'NOTE:' + this.contacts.note.noteContent : ''; - - var imAddresses = (this.contacts.imAddresses && this.contacts.imAddresses.length > 0 - && this.contacts.imAddresses[0].imAddress.length > 0) ? this.contacts.imAddresses[0].imAddress + ';;' : ''; - - this.qrcodeString = 'MECARD:' + name + company + postalAddresses + phoneNumbersString - + stringEmails + websites + position + note + imAddresses; - clearTimeout(this.showMenuTimeOutId); - this.showMenuTimeOutId = setTimeout(() => { - this.$element('dialogContactsDetailQrCode').show(); - }, 60); - }, - cancelContactsDetailQrCode: function () { - clearTimeout(this.showMenuTimeOutId); - this.$element('dialogContactsDetailQrCode').close(); - }, - - shareCancelClick: function () { - this.$element('shareDialogDetails').close(); - }, - - shareClickQrCode: function () { - prompt.showToast({ - message: this.$t('recordDetail.menu.noAppToDealThisAction') - }); - }, - - /** - * Non-contact, call records, assembly parameters - * - * @param {Array} numbers - */ - getNewNumRecords(numbers) { - var actionData = {}; - actionData.number = numbers; - actionData.language = this.$t('recordDetail.language'); - var newContacts = {}; - this.contactForm.isNewNumber = true; - this.contactForm.showMoreButton = false; - this.contactForm.name = this.phoneNumberShow; - this.contactForm.showNewContact = true; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CALLLOG_DB_URI); - callLogService.getCallLogListByPhoneNumber(DAHelper, numbers, (resultList) => { - this.contactForm.numRecords = this.getDetailMessage(resultList); - var phoneNumbersTemp = {}; - if (this.contactForm.numRecords.length > 0) { - phoneNumbersTemp.phoneAddress = this.contactForm.numRecords[0].callTag; - } - phoneNumbersTemp.phoneNumber = this.phoneNumberShow; - var phoneNumbersTempList = [phoneNumbersTemp]; - this.contactForm.phoneNumbers = phoneNumbersTempList; - newContacts.phoneNumbers = phoneNumbersTempList; - newContacts.name = { - 'name': this.contactForm.name - }; - newContacts.isNewNumber = this.contactForm.isNewNumber; - newContacts.showMoreButton = this.contactForm.showMoreButton; - newContacts.numRecords = this.contactForm.numRecords; - var index = parseInt(this.contactForm.numRecords[0].id, 10) % 6; - newContacts.portraitColor = this.backgroundColor[index]; - newContacts.detailsBgColor = this.backgroundDetailColor[index]; - this.contacts = newContacts; - if (this.sourceFromCallRecord && this.isNewNumber) { - this.showNameLast = (this.contactForm.phoneNumbers && this.contactForm.phoneNumbers[0]) - ? this.contactForm.phoneNumbers[0].phoneNumber : ''; - } else { - this.showNameLast = (this.contactForm.emptyNameData && this.contactForm.emptyNameData.length > 0) - ? this.contactForm.emptyNameData : ''; - } - this.showNameLastMenu = (this.showNameLast && this.showNameLast.length > 6) - ? this.subStringWithEllipsis(this.showNameLast, 7) : this.showNameLast; - }); - }, - - /** - * Data required to convert the original callLogList content into call record details - * - * @param {Array} originList - * @return {Array} resultList - */ - getDetailMessage(originList) { - LOG.info(TAG + 'getDetailMessage originList' + originList); - var resultList = []; - if (Utils.isEmptyList(originList)) { - return resultList; - } - originList.forEach(element => { - element.timeDetail = this.getTimeDetailByCallTime(element.callTime); - element.talkTime = this.getTalkTimeMessage(element); - }); - resultList = originList; - return resultList; - }, - - shareContactInfoByTest() { - var detailInfo = JSON.stringify(this.contactForm); - }, - - /** - * Obtain the call details based on the call record - * - * @param {Object} callLogElement - * @return {string} resultMessage - */ - getTalkTimeMessage(callLogElement) { - LOG.info(TAG + 'getTalkTimeMessage callLogElement' + callLogElement); - var resultMessage = ''; - if (callLogElement.callType == 1) { - resultMessage = this.getDescriptionByDuration(callLogElement.talkTime); - } else if (callLogElement.callType == 2) { - resultMessage = callLogElement.talkTime == 0 ? this.$t('recordDetail.language.blockCall') - : this.getDescriptionByDuration(callLogElement.talkTime); - } else if (callLogElement.callType == 3) { - resultMessage = this.$t('recordDetail.language.noAnswer') + this.getDescriptionByDuration(callLogElement.ringTime); - } else if (callLogElement.callType == 5) { - resultMessage = this.$t('recordDetail.language.reject'); - } - return resultMessage; - }, - - /** - * Takes the call duration (timeDuration in s) based on the specified timestamp - * - * @param {number} timeDuration - * @return {Object} - */ - getDescriptionByDuration(timeDuration) { - LOG.info(TAG + 'getDescriptionByDuration timeDuration' + timeDuration); - var seconds = parseInt(timeDuration); - if (seconds < 60) { - return seconds + this.$t('recordDetail.language.seconds'); - } else { - var minutes = parseInt(seconds / 60); - if (minutes < 60) { - return minutes + this.$t('recordDetail.language.minute') + seconds % 60 + this.$t('recordDetail.language.seconds'); - } else { - var hours = parseInt(minutes / 60); - return hours + this.$t('recordDetail.language.hour') + minutes % 60 + this.$t('recordDetail.language.minute') + seconds % 3600 % 60 + this.$t('recordDetail.language.seconds'); - } - } - }, - - /** - * Get time details based on when call records were generated - * - * @param {number} callTime - * @return {string} timeDetail - */ - getTimeDetailByCallTime(callTime) { - LOG.info(TAG + 'getTimeDetailByCallTime callTime' + callTime); - var callLogTime = new Date(parseInt(callTime, 10) * 1000); - var now = new Date(); - var yearDiff = now.getFullYear() - callLogTime.getFullYear(); - var monthDiff = now.getMonth() - callLogTime.getMonth(); - var dayDiff = now.getDate() - callLogTime.getDate(); - var hour = callLogTime.getHours(); - var timeDetail = ''; - if (yearDiff == 0) { - if (monthDiff == 0) { - if (dayDiff == 0) { - timeDetail = this.getDayMessage(hour) + callLogTime.getHours() + ':' - + (callLogTime.getMinutes() < 10 ? '0' + callLogTime.getMinutes() : callLogTime.getMinutes()); - } - } - timeDetail = (callLogTime.getMonth() + 1) + this.$t('recordDetail.language.months') + callLogTime.getDate() + this.$t('recordDetail.language.day') + ' ' - + this.getDayMessage(hour) + callLogTime.getHours() + ':' - + (callLogTime.getMinutes() < 10 ? '0' + callLogTime.getMinutes() : callLogTime.getMinutes()); - } else { - timeDetail = callLogTime.getFullYear() + this.$t('recordDetail.language.years') + (callLogTime.getMonth() + 1) + this.$t('recordDetail.language.months') - + callLogTime.getDate() + this.$t('recordDetail.language.day') + ' ' + this.getDayMessage(hour) + callLogTime.getHours() + ':' - + (callLogTime.getMinutes() < 10 ? '0' + callLogTime.getMinutes() : callLogTime.getMinutes()); - } - LOG.info(TAG + ' timeDetail = ' + timeDetail); - return timeDetail; - }, - - getDayMessage(hour) { - LOG.info(TAG + ' getDayMessage' + hour); - if (hour >= 0 && hour < 5) { - return this.$t('recordDetail.language.beforeDawn'); - } - if (hour >= 5 && hour < 11) { - return this.$t('recordDetail.language.AM'); - } - if (hour >= 11 && hour < 13) { - return $t('recordDetail.language.noon'); - } - if (hour >= 13 && hour < 17) { - return $t('recordDetail.language.PM'); - } - if (hour >= 17 && hour < 19) { - return $t('recordDetail.language.nightfall'); - } - if (hour >= 19 && hour < 22) { - return $t('recordDetail.language.evening'); - } - if (hour >= 22 && hour < 24) { - return $t('recordDetail.language.middleNight'); - } - } -}; diff --git a/entry/src/main/js/default/pages/contacts/contactDetail/contactDetail.scss b/entry/src/main/js/default/pages/contacts/contactDetail/contactDetail.scss deleted file mode 100644 index 23ba146..0000000 --- a/entry/src/main/js/default/pages/contacts/contactDetail/contactDetail.scss +++ /dev/null @@ -1,735 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -@import '../../../base/base_color.scss'; -@import '../../../base/base_style.css'; -.container { - flex-direction: column; - justify-content: center; - align-items: center; - width: 100%; - height: 100%; -} -.list-details { - flex-direction: column; - justify-content: center; - align-items: center; - width: 100%; -} -.title { - flex-direction: row; - justify-content: flex-start; - align-items: center; - width: 100%; - height: 150px; - margin-left: 25px; - margin-right: 25px; -} -.div-details-item-first { - flex-direction: column; - justify-content: center; - align-items: center; - width: 100%; -} -.div-details-item-first-shrink { - flex-direction: column; - align-items: center; - justify-content: center; - align-content: center; - background-color: white; - width: 100%; -} -.list-details-item-first-image-box { - width: 200px; - height: 200px; - border-radius: 100px; - justify-content: center; - align-items: center; -} -.list-details-item-first-image-box-pic { - width: 200px; - height: 200px; - border-radius: 150px; -} -.list-details-item-first-text { - font-size: 80px; - font-weight: bold; - color: white; -} -.list-details-item-first-number { - font-weight: normal; - width: 85%; - text-align: center; - max-lines: 2; - text-overflow: ellipsis; - max-font-size: 60px; - min-font-size: 40px; - padding-top: 20px; -} -.list-details-item-first-numbers { - font-weight: normal; - width: 85%; - text-align: center; - max-lines: 2; - text-overflow: ellipsis; - max-font-size: 60px; - min-font-size: 40px; - padding-top: 20px; - display:none; -} -.list-details-item-first-company { - font-size: 27px; - font-weight: normal; - height: 45px; - width: 87%; - text-align: center; - color: grey; - max-lines: 1; - text-overflow: ellipsis; - padding-top: 10px; -} -.list-details-item-first-position { - font-size: 27px; - font-weight: normal; - height: 45px; - width: 87%; - text-align: center; - color: grey; - max-lines: 1; - text-overflow: ellipsis; - padding-top: 2px; -} -.list-details-number-list-item { - flex-direction: column; - justify-content: center; - align-items: center; - margin-top: 35px; - width: 88%; -} -.list-details-number-div { - flex-direction: row; - justify-content: center; - align-items: center; - width: 100%; - margin-top: 15px; - margin-bottom: 15px; -} -.list-details-number-sub-div-left { - flex-direction: column; - align-items: center; - justify-content: center; - width: 68%; -} -.list-details-number-sub-div-right { - flex-direction: row; - justify-content: center; - align-items: center; - width: 32%; -} -.list-details-email-sub-div-more-left { - flex-direction: column; - justify-content: center; - width: 95%; -} -.list-details-number-text-up { - width: 100%; - font-size: 32px; - max-lines: 5; - text-overflow: ellipsis; -} -.list-details-number-text-down { - width: 100%; - font-size: 27px; - color: gray; - margin-top: 10px; - max-lines: 2; - text-overflow: ellipsis; -} -.list-details-email-sub-div-more-right { - flex-direction: row; - justify-content: space-around; - align-items: center; - width: 5%; -} -.list-details-operate-icon-left { - height: 45px; - width: 45px; - margin-left: 45px; -} - -.list-details-div{ - height: 100px; - width: 100px; - justify-content:center; - align-items:center; - align-content:center; -} -.list-details-div:active { - background-color: $backgroundColorOnClick; -} -.list-details-operate-icon-right { - height: 45px; - width: 45px; - margin-left: 60px; -} -.list-details-email-sub-div-left { - flex-direction: column; - justify-content: center; - width: 100%; - align-items: flex-start; - margin-top: 15px; - margin-bottom: 15px; -} - -.list-details-email-text-up { - width: 100%; - font-size: 32px; - max-lines: 1; - text-overflow: ellipsis; -} -.list-details-email-text-postal-up { - width: 100%; - font-size: 32px; -} -.list-details-email-text-up-remark { - width: 100%; - font-size: 32px; -} -.list-details-email-text-down { - width: 100%; - font-size: 27px; - color: gray; - margin-top: 10px; - max-lines: 1; - text-overflow: ellipsis; -} -.list-details-email-sub-div-right { - flex-direction: column; - justify-content: flex-end; - width: 0%; - padding-right: 10px; -} -.list-details-operate-icon-shrink { - height: 30px; - width: 30px; -} - -.list-details-email-operate-more { - flex-direction: row; - justify-content: center; - align-items: center; - width: 100%; - height: 100px; - padding-top: 20px; - padding-bottom: 20px; -} -.list-details-email-operate-left-more { - flex-direction: column; - justify-content: center; - width: 50%; - height: 100%; - padding-left: 6px; - padding-right: 18px; -} -.list-details-email-operate-right-more { - flex-direction: row; - justify-content: flex-start; - width: 50%; - height: 100%; - padding-left: 10px; - padding-top: 16px; -} -.todo-divider { - stroke-width: 1px; - color: lightgray; - width: 100%; -} -.todo-divider-map { - stroke-width: 1px; - color: lightgray; - width: 87%; - margin-left: 42px; -} -.list-details-email-divider { - align-items: center; - width: 90%; -} -.list-details-email-divider-record { - align-items: center; - width: 100%; -} -.todo-divider-record { - stroke-width: 12px; - color: #f9f9f0; -} -.list-details-number-text-more { - width: 100%; - height: 100%; - font-size: 27px; - text-align: right; -} -.list-details-operate-icon-more { - height: 35px; - width: 35px; - justify-content: flex-start; -} - -.list-details-operate-icon-shrink-more { - height: 30px; - width: 30px; -} -.list-details-calls-title { - width: 88%; -} -.list-details-calls-title-text-left { - height: 100%; - width: 50%; - color: gray; - text-align: left; - font-size: 27px; -} -.list-details-calls-title-div { - width: 100%; - height: 100px; - padding-left: 0px; - padding-top: 10px; -} -.list-details-calls-title-text-right { - height: 100%; - width: 50%; - color:#2970f2; - text-align: right; - font-size: 27px; -} -.list-details-calls-records { - flex-direction: column; - justify-content: center; - align-items: center; - height: 120px; - width: 88%; -} -.list-details-calls-records-left { - flex-direction: column; - height: 80%; - width: 80%; -} -.list-details-calls-records-right { - justify-content: flex-end; - height: 80%; - width: 20%; -} -.list-details-calls-duration { - font-size: 27px; - color: gray; -} -.list-details-calls-time { - height: 50%; - width: 100%; -} -.list-details-calls-time-text { - font-size: 32px; -} - -.list-details-calls-time-no-text { - font-size: 32px; - color: red; -} - -.list-details-calls-type { - flex-direction: row; - align-items: center; - height: 50%; - width: 100%; -} -.list-details-calls-type-image { - height: 35px; - width: 35px; -} -.list-details-calls-type-text { - font-size: 27px; - color: gray; - margin-left: 10px; - max-lines: 1; - text-overflow: ellipsis; -} -.records-detail-contacts-operate { - height: 8%; - width: 100%; - position: absolute; - bottom: 0px; - flex-direction: row; - align-items: center; - justify-content: space-around; - background-color: $backgroundColorDialer; - padding-left: 20px; - padding-right: 20px; -} -.records-detail-contacts-operate-blank { - height: 9%; - width: 100%; - position: absolute; -} -.contacts-operate-detail-box { - flex-direction: column; - justify-content: center; - align-items: center; - height: 90%; - width: 100%; - border-radius: 20px; -} -.contacts-operate-detail-box:active { - background-color: lightgray; -} -.contacts-operate-detail-image { - width: 50px; - height: 50px; -} -.contacts-operate-detail-text { - margin-top: 10px; - font-size: 20px; -} -.records-detail-back-image { - height: 45px; - width: 45px; - margin-left: 0px; -} -.back-div{ - height: 100px; - width: 100px; - justify-content:center; - align-items:center; - flex-shrink:0; - border-radius:10px; -} -.back-div:active { - background-color: $backgroundColorOnClick; -} -.records-detail-back-image-mid { - height: 45px; - width: 1000px; - margin-left: 45px; -} -.list-details-item-first-number-shrink { - font-size: 40px; - font-weight: bold; - width: 100%; - height: 140px; - text-align: left; - padding-left: 120px; - padding-right: 120px; - margin-top: -5px; - max-lines: 1; - text-overflow: ellipsis; -} -.records-detail-back-image-right { - height: 60px; - width: 60px; - margin-left: 460px; -} -.records-detail-back { - flex-direction: row; - align-items: flex-start; - justify-content: flex-start; - align-content: flex-start; - position: fixed; - margin-top: 10px; - margin-bottom: 15px; - margin-left: 45px; - top: 25px; - height: 100px; - width: 100%; - border-radius: 10px; -} -.list-details-operate-more { - flex-direction: row; - justify-content: center; - align-items: center; - width: 90%; - height: 120px; - border-top: 1px solid #cccccc; -} -.list-details-operate-more-left { - flex-direction: column; - justify-content: center; - width: 100%; - height: 100%; -} -.list-details-operate-more-text { - width: 100%; - height: 40%; - font-size: 32px; -} -.list-details-operate-type-text { - width: 100%; - height: 40%; - font-size: 27px; - color: gray; -} -.dialog-main { - height: 15%; - width: 85%; - align-items: center; -} - -.dialog-input { - width: 85%; - background-color: transparent; - border-bottom: 1px solid #80807F; -} -.dialog-div { - flex-direction: column; - align-items: center; -} -.inner-txt { - width: 400px; - height: 160px; - flex-direction: column; - align-items: flex-start; - justify-content: space-around; -} -.inner-title{ - width: 400px; - height: 160px; - flex-direction: column; - align-items: center; - justify-content: space-around; -} -.txt { - color: #000000; - font-size: 30px; -} -.inner-btn { - width: 400px; - height: 120px; - justify-content: space-around; - align-items: center; -} -.delete-main { - width: 650px; - height: 15%; -} -.delete-div { - flex-direction: column; - align-items: center; - justify-content: flex-end; -} -.txt-v { - font-size: 30px; -} -.delete-btn { - width: 100%; - height: 50%; - justify-content: space-around; - align-items: center; -} -.delete-btn-map { - width: 100%; - height: 250px; - padding-left: 40px; - padding-right: 40px; - padding-top: 10px; - padding-bottom: 20px; -} -.delete-btn-map-cancel { - width: 100%; - height: 250px; - justify-content: space-around; - align-items: center; - padding-left: 40px; - padding-right: 40px; - padding-top: 10px; - padding-bottom: 10px; -} -.delete-txt { - width: 40%; - height: 70%; - border-radius: 30px; - background-color: transparent; - text-color: #175cfe; - font-size: 30px; -} -.delete-txt-map { - width: 100%; - height: 70%; - border-radius: 30px; - background-color: transparent; - text-color: #175cfe; - font-size: 32px; -} -.delete-txt-delete{ - width: 40%; - height: 70%; - border-radius: 30px; - background-color: transparent; - text-color: red; - font-size: 30px; -} -.list-details-number-operate { - flex-direction: row; - justify-content: center; - align-items: center; - width: 100%; - height: 120px; -} -.share-name-text { - font-size: 32px; -} -.share-name-text-map-header { - font-weight: bold; - min-font-size: 30px; - max-font-size: 40px; - max-lines: 2; - text-overflow: ellipsis; - text-align: left; - margin-bottom: 30px; -} -.share-name-text-map { - width: 100%; - margin-top: 20px; - font-size: 30px; - text-align: left; -} -.share-name-text-big { - font-size: 50px; -} -.delete-main-map { - width: 650px; - height: 450px; -} -.delete-main-qrcode { - width: 650px; - height: 550px; -} -.delete-div-map { - flex-direction: column; - width: 100%; - height: 85%; - align-items: flex-start; - justify-content: flex-start; - padding-top: 0px; - padding-bottom: 10px; -} -.share-name-text-map-center { - width: 100%; - height: 50px; - font-size: 30px; - text-color: #175cfe; - margin-left: 0px; - margin-top: 30px; - margin-bottom: 50px; - background-color: grey; -} -.share-dialog-main { - width: 650px; - margin-left: 25px; - margin-right: 25px; - margin-bottom: 25px; -} -.share-dialog-div { - flex-direction: column; - align-items: center; - height: 530px; - width: 87%; -} -.share-inner-div { - margin-top: 45px; - height: 80px; -} -.share-inner-txt { - font-size: 40px; - font-weight: bold; - text-align: left; -} -.share-inner-btn { - margin-top: -35px; - width: 580px; - height: 120px; - justify-content: space-around; - align-items: center; -} -.share-btn-div { - width: 100%; - height: 60px; - border-radius: 50px; - justify-content: center; - align-items: center; -} -.share-btn-div:active { - background-color: #E7E6E6; -} -.share-btn-cancel-txt { - color: #007DFE; -} -.delete-btn-share { - height: 100px; - justify-content: space-around; - align-items: center; -} -.todo-divider-share { - stroke-width: 1px; - color: lightgray; -} -.qrcode-btn-div { - width: 100%; - height: 115px; - justify-content: space-around; - align-items: center; - margin-top: -25px; -} -.txt-qrcode { - font-size: 25px; - text-align: center; -} -.qrcode-text-div { - width: 100%; - height: 60px; - justify-content: space-around; - align-items: center; - margin-top: 20px; - margin-bottom: 20px; -} -.qrcode-main-div { - flex-direction: column; - height: 100%; - width: 100%; - align-items: flex-start; - justify-content: flex-start; -} -.qrcode-div { - width: 100%; - height: 375px; - flex-direction: column; - align-items: center; - align-content: center; - justify-content: center; - margin-top: 40px; -} -.qrcode-size { - width: 300px; - height: 300px; -} -.dialog-buttom-txt { - width: 40%; - height: 60%; - border-radius: 30px; - background-color: transparent; - text-color: #175cfe; - font-size: 30px; -} -.dialog-inner-divider { - line-cap: round; - stroke-width: 1px; - height: 45px; - color: grey; -} diff --git a/entry/src/main/js/default/pages/contacts/contacts.css b/entry/src/main/js/default/pages/contacts/contacts.css deleted file mode 100644 index 486c118..0000000 --- a/entry/src/main/js/default/pages/contacts/contacts.css +++ /dev/null @@ -1,849 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - flex-direction: column; - justify-content: flex-start; - align-items: center; - width: 100%; -} - -.list-div { - flex-direction: column; - justify-content: flex-start; - align-items: center; - width: 100%; -} - -.search-list-title-div { - margin-top: 35px; - padding-left: 50px; - height: 40px; - width: 100%; -} - -.search-list-title-text { - font-size: 25px; - font-weight: 500; - color: #747474; -} - -.todo-wrapper { - columns: 1; -} - -.todo-item { - position: relative; - width: 454px; - height: 123px; - flex-direction: row; - columns: 1; - align-items: stretch; - padding-left: 20px; - padding-right: 20px; -} - -.phone-numbers { - font-size: 35px; - font-weight: 600; -} - -.todo-title-div { - flex-direction: row; - justify-content: space-between; - align-items: flex-start; - width: 100%; - height: 110px; - margin-left: 55px; - margin-right: 25px; - margin-top: 15px; -} - -.todo-setting-div { - border-radius: 10px; - width: 90px; - height: 90px; - align-content: center; - justify-content: center; - align-items: center; - background-color: #FFF; -} - -.todo-setting-div:active { - background-color: #F2F2F2; -} - -.hidden-setting { - animation-name: setting-hidden-animation; - animation-duration: 100ms; - animation-fill-mode: forwards; -} - -.show-setting { - animation-name: setting-show-animation; - animation-duration: 700ms; - animation-fill-mode: forwards; -} - -@keyframes setting-hidden-animation { - from { - width: 90px; - height: 90px; - opacity: 1; - } - - to { - width: 0; - height: 0; - opacity: 0; - } -} - -@keyframes setting-show-animation { - from { - width: 0; - height: 0; - opacity: 0; - } - - to { - width: 90px; - height: 90px; - opacity: 1; - } -} - -.contacts-title-operation { - width: 90px; - height: 90px; -} - -.contacts-title-div { - flex-direction: row; - align-items: center; - justify-content: flex-start; - margin-left: 24px; - margin-top: 10px; -} - -.contacts-back-but-div { - margin-left: -20px; - width: 83px; - height: 83px; - border-radius: 15px; - align-items: center; -} - -.hidden-init { - animation-name: back-hidden-animation; - animation-duration: 0ms; - animation-fill-mode: forwards; -} - -.hidden-back { - animation-name: back-hidden-animation; - animation-duration: 700ms; - animation-fill-mode: forwards; -} - -.show-back-init { - animation-name: back-show-animation; - animation-duration: 0ms; - animation-fill-mode: forwards; -} - -.show-back { - animation-name: back-show-animation; - animation-duration: 100ms; - animation-fill-mode: forwards; -} - -@keyframes back-show-animation { - from { - opacity: 0; - } - - to { - opacity: 1; - } -} - -@keyframes back-hidden-animation { - from { - opacity: 1; - } - - to { - opacity: 0; - } -} - - -.contacts-back-image { - margin-left: 21px; - width: 50px; - height: 50px; - border-radius: 10px; -} - -.contacts-search-div { - align-items: center; - justify-content: center; - margin-right: 40px; - margin-left: 15px; -} - - -.free-space { - align-content: center; - justify-content: center; - align-items: center; - flex-direction: column; - width: 100%; - height: 100%; -} - -.image-text-div { - align-content: center; - justify-content: center; - align-items: center; - flex-direction: column; -} - -.contacts-image-icon { - width: 210px; - height: 210px; -} - -.free-space-text { - font-size: 28px; - margin-top: -22px; - font-weight: 400; - color: #999; -} - -.free-space-content { - flex-direction: column; - justify-content: center; - align-items: center; -} - -.login-free-btn-div { - margin-top: 64px; - width: 350px; - height: 71px; - border-radius: 50px; - justify-content: center; - align-items: center; - background-color: #f0f0f0; -} - -.login-free-btn-div:active { - background-color: #d9d9d9; -} - -.free-btn-div { - margin-bottom: 60px; - width: 350px; - height: 71px; - border-radius: 50px; - justify-content: center; - align-items: center; - background-color: #f0f0f0; -} - -.free-btn-div:active { - background-color: #d9d9d9; -} - -.free-btn-account-txt { - color: #0076f6; - font-weight: 500; -} - -.empty-contacts-div { - position: absolute; - align-content: center; - justify-content: center; - align-items: center; - width: 96px; - height: 96px; - right: 50px; - bottom: 48px; - border-radius: 60px; - opacity: 1; - -} - -.search-doing-div { - flex-direction: row; - justify-content: flex-start; - align-items: flex-start; - width: 545px; - height: 90px; - margin-left: 18px; - margin-right: 20px; - border-radius: 40px; -} - -.todo-search-div { - flex-direction: row; - justify-content: flex-start; - align-items: flex-start; - width: 600px; - height: 90px; - margin-top: 43px; - margin-left: 70px; - margin-right: 45px; - border-radius: 40px; -} - -.search-init-action { - animation-name: search-translation; - animation-duration: 0ms; - animation-fill-mode: forwards; -} - -.search-translation { - animation-name: search-translation; - animation-duration: 400ms; - animation-fill-mode: forwards; -} - -.search-recover { - animation-name: search-recover; - animation-duration: 400ms; - animation-fill-mode: forwards; -} - -@keyframes search-translation { - from { - width: 600px; - height: 90px; - transform: translate(0px, 0px); - } - - to { - width: 537px; - height: 90px; - transform: translate(30px, -150px); - } -} - -@keyframes search-recover { - from { - width: 537px; - height: 90px; - transform: translate(30px, -150px); - } - - to { - width: 600px; - height: 90px; - transform: translate(0px, 0px); - } -} - -.title-div { - flex-direction: row; - justify-content: space-between; - align-items: flex-start; - width: 100%; - height: 120px; - margin-left: 55px; - margin-right: 25px; -} - -.hidden-title { - animation-name: title-hidden-animation; - animation-duration: 400ms; - animation-fill-mode: forwards; -} - -.show-title { - animation-name: title-show-animation; - animation-duration: 400ms; - animation-fill-mode: forwards; -} - -@keyframes title-hidden-animation { - from { - height: 120px; - } - - to { - height: 0; - } -} - -@keyframes title-show-animation { - from { - height: 0; - } - - to { - height: 120px; - } -} - -.todo-contact-title-div { - flex-direction: column; - justify-content: space-between; - align-items: flex-start; - height: 120px; -} - - -.hidden-contact-title { - animation-name: hidden-title-animation; - animation-duration: 100ms; - animation-fill-mode: forwards; -} - -.show-contact-title { - animation-name: show-title-animation; - animation-duration: 700ms; - animation-fill-mode: forwards; -} - -@keyframes hidden-title-animation { - from { - height: 120px; - opacity: 1; - } - - to { - height: 0; - opacity: 0; - } -} - -@keyframes show-title-animation { - from { - height: 0; - opacity: 0; - } - - to { - height: 120px; - opacity: 1; - } -} - -.todo-title-name { - height: 95px; - text-align: left; - font-size: 55px; - font-weight: 500; -} - -.todo-contact-length { - padding-top: 5px; - height: 60px; - text-align: left; - font-size: 28px; - color: #808080; -} - -.todo-content-div { - flex-direction: row; - justify-content: flex-start; - align-items: center; - width: 100%; - height: 100%; -} - -.first { - width: 20%; - margin-left: 25px; -} - -.last-name-stack { - margin-left: 8px; - flex-direction: column; - align-items: center; - justify-content: center; -} - -.image-content-name-div { - flex-direction: column; - align-items: center; - justify-content: center; - width: 80px; - height: 80px; - border-radius: 60px; - border: 2px solid #c9c9c9; -} - -.group-image { - width: 50px; - height: 50px; - display: flex; -} - -.third { - width: 20%; - justify-content: flex-end; -} - -.todo-content-div-div { - flex-direction: column; - justify-content: center; - align-items: flex-start; - margin-start: 32px; - width: 88%; - height: 100%; -} - -.todo-content-name { - width: 100%; - text-align: left; - font-size: 32px; - font-weight: 600; - max-lines: 1; - text-overflow: ellipsis; -} - -.todo-content-card { - width: 100%; - text-align: left; - font-size: 28px; - color: #808080; - max-lines: 1; - text-overflow: ellipsis; -} - -.todo-content { - margin-top: 9px; - width: 100%; - text-align: left; - max-lines: 1; - text-overflow: ellipsis; - color: #636363; - font-size: 28px; -} - -.todo-divider-div { - flex-direction: column; - justify-content: flex-start; - align-items: flex-start; - position: absolute; - bottom: 0; - width: 100%; -} - -.todo-divider { - line-cap: round; - stroke-width: 1px; - color: #ccc; -} - -.todo-item-content-div { - width: 90%; - height: 76%; - align-items: center; - justify-content: center; -} - -.todo-item-content-image { - width: 80px; - height: 80px; - border-radius: 60px; - border: 1px solid #c9c9c9; -} - -.todo-name-stack { - flex-direction: column; - align-items: center; - justify-content: center; -} - -.todo-name-suffix-div { - flex-direction: column; - align-items: center; - justify-content: center; - width: 80px; - height: 80px; - border-radius: 60px; - background-color: #D5BAC1; -} - -.todo-content-name-last { - width: 90%; - height: 65%; - text-align: center; - font-size: 38px; - allow-scale: true; - font-weight: 600; - color: #FFF; -} - -.flex-item-image { - width: 20px; - height: 20px; -} - -.dialog-main { - width: 650px; - margin-left: 25px; - margin-right: 25px; - margin-bottom: 40px; -} - -.dialog-div { - flex-direction: column; - align-items: center; - height: 205px; -} - -.inner-div { - width: 85%; - flex-direction: column; - align-items: center; - justify-content: center; - height: 150px; -} - -.dialog-inner-divider { - line-cap: round; - stroke-width: 1px; - height: 60px; - color: #000; -} - -.inner-btn { - margin-top: -30px; - width: 560px; - height: 120px; - justify-content: space-around; - align-items: center; -} - -.btn-div { - width: 265px; - height: 60px; - border-radius: 50px; - justify-content: center; - align-items: center; -} - -.btn-div:active { - background-color: #E7E6E6; -} - -.btn-cancel-txt { - color: #007DFE; -} - -.btn-delete-txt { - color: #F00; -} - -.contacts-button-div { - position: absolute; - align-content: center; - justify-content: center; - align-items: center; - width: 96px; - height: 96px; - right: 50px; - bottom: 48px; - border-radius: 60px; - opacity: 1; -} - -.contacts-image { - align-content: center; - justify-content: center; - align-items: center; - border-radius: 60px; - width: 96px; - height: 96px; - opacity: 1; - background-color: #254ff7; -} - -.contacts-image:active { - align-content: center; - justify-content: center; - align-items: center; - border-radius: 60px; - width: 92px; - height: 92px; - opacity: 1; - background-color: #254ff7; -} - -.share-dialog-main { - width: 650px; - margin-left: 25px; - margin-right: 25px; - margin-bottom: 25px; -} - -.share-dialog-div { - flex-direction: column; - align-items: center; - height: 550px; -} - -.share-inner-div { - width: 85%; - flex-direction: column; - align-items: flex-start; - justify-content: center; - height: 130px; -} - -.share-inner-txt { - font-size: 40px; - font-weight: bold; -} - -.first-dialog-inner-txt { - font-size: 40px; - font-weight: 600; -} - -.share-dialog-wraper { - width: 100%; - height: 60%; - columns: 1; -} - -.share-dialog-item { - height: 101px; - flex-direction: column; - columns: 1; - align-items: stretch; -} - -.share-dialog-content-div { - margin-left: 49px; - margin-right: 49px; - width: 85%; - height: 100%; - flex-direction: row; - justify-content: flex-start; - align-items: center; -} - -.share-dialog-content-name { - width: 100%; - text-align: left; - font-size: 32px; -} - -.share-todo-divider { - margin-left: 49px; - margin-right: 49px; - line-cap: round; - stroke-width: 1px; - color: #000; -} - -.share-inner-btn { - margin-top: -30px; - width: 580px; - height: 120px; - justify-content: space-around; - align-items: center; -} - -.share-btn-div { - width: 100%; - height: 60px; - border-radius: 50px; - justify-content: center; - align-items: center; -} - -.share-btn-div:active { - background-color: #E7E6E6; -} - -.share-btn-cancel-txt { - color: #007DFE; -} - -.import-div { - flex-direction: column; - align-items: center; - height: 300px; -} - -.import-title-inner-txt { - font-size: 40px; - font-weight: 600; -} - -.dialog-main { - width: 90%; - align-items: center; -} - -.dialog-export-div { - width: 600px; - height: 350px; - flex-direction: column; - align-content: center; -} - -.inner-export-content { - width: 500px; - height: 200px; - flex-direction: column; - justify-content: space-around; - align-items: center; -} - -.import-dialog-div { - width: 95%; - height: 260px; - flex-direction: column; -} - -.import-inner-txt { - width: 600px; - height: 100px; - flex-direction: column; - align-items: flex-start; - justify-content: space-around; - margin-top: 15px; -} - -.import-inner-content { - width: 600px; - height: 100px; - flex-direction: column; - align-items: flex-start; - justify-content: space-around; -} - -.import-inner-message { - width: 600px; - height: 100px; - flex-direction: column; - align-items: center; -} - -.import-txt { - font-size: 30px; -} - -.import-inner-btn { - height: 120px; - justify-content: space-around; - align-items: center; -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/contacts.hml b/entry/src/main/js/default/pages/contacts/contacts.hml deleted file mode 100644 index f7775c6..0000000 --- a/entry/src/main/js/default/pages/contacts/contacts.hml +++ /dev/null @@ -1,401 +0,0 @@ - - -
- -
-
- -
-
- -
-
- -
-
-
-
- {{ $t('value.contacts.page.title') }} - - - {{ contactCount }}{{ contactLengthText }} - -
-
- - - - - -
-
- - {{queryContactsType == 'phone'? $t('value.contacts.page.noPhoneContacts'):$t('value.contacts.page.noContacts')}} - -
-
- -
- -
-
- -
-
-
-
- -
-
-
-
- -
-
- - - -
- - {{ $t('value.contacts.page.noSearchContacts')}} -
-
- - -
- {{ language=='zh'? $t('value.contacts.page.searchContacts').replace('num', searchList.length) :$tc('value.contacts.page.searchContacts',searchList.length).replace('num', searchList.length)}} -
- - -
-
- -
-
-
- {{$item.name.nameSuffix}} - -
-
-
-
- - -
-
-
-
-
-
- - {{ $item.emptyNamePre }} - {{ $item.emptyNameMatch }} - {{ $item.emptyNameSuf }} - -
-
- - {{ $item.emptyNameData ?$item.emptyNameData:$t('value.contacts.page.item.noName') }} - - - - {{$item.organization.name}} - - - {{ $item.organization.organizationTitlePre }} - {{ $item.organization.organizationTitleMatch }} - {{ $item.organization.organizationTitleSuf }} - . - {{ $item.organization.organizationNamePre }} - {{ $item.organization.organizationNameMatch }} - {{ $item.organization.organizationNameSuf }} - - - {{ $item.phoneNumbers[0].phoneNumberPre }} - {{ $item.phoneNumbers[0].phoneNumberMatch }} - {{ $item.phoneNumbers[0].phoneNumberSuf }} - {{' '}} - {{ $item.organization.name }} - - - {{ $item.emails[0].emailPre }} - {{ $item.emails[0].emailMatch }} - {{ $item.emails[0].emailSuf }} - {{' '}} - {{ $item.organization.name }} - - - {{$item.imAddresses[0].imAddressPre }} - {{ $item.imAddresses[0].imAddressMatch }} - {{ $item.imAddresses[0].imAddressSuf }} - {{' '}} - {{ $item.organization.name }} - - - {{$item.postalAddresses[0].postalAddressPre }} - {{ $item.postalAddresses[0].postalAddressMatch }} - {{ $item.postalAddresses[0].postalAddressSuf }} - {{' '}} - {{ $item.organization.name }} - - - {{$item.note.notePre }} - {{ $item.note.noteMatch }} - {{ $item.note.noteSuf }} - {{' '}} - {{ $item.organization.name}} - - - {{$item.nickName.nickNamePre }} - {{ $item.nickName.nickNameMatch }} - {{ $item.nickName.nickNameSuf }} - {{' '}} - {{ $item.organization.name }} - - - -
-
- -
-
-
-
-
-
-
- - - - - -
-
-
- -
-
-
-
-
-
- - {{ $t('value.contacts.page.group') }} - -
- -
-
-
- -
-
-
-
- - -
-
- -
-
-
- {{nameSuffix}} - -
-
-
-
- - -
-
-
-
-
-
- - {{myCardInfo.cardName}} - - - {{ $t('value.contacts.page.myCard') }} - - -
-
- - {{ $t('value.contacts.page.myCard') }} - -
-
-
-
- - - -
-
- -
-
-
- {{$item.namePrefix}} - -
-
-
-
- - -
-
-
-
-
- - {{ $item.emptyNameData != '' ? $item.emptyNameData : ($item.company != '' ? $item.company : ($item.position != '' ? $item.position : $t('value.contacts.page.item.noName'))) }} - - - {{$item.company = $item.company == undefined ? '': $item.company}} {{$item.position = $item.position== undefined?'':$item.position}} - -
- -
-
-
-
- -
-
- -
-
-
- - - - - - -
-
- - {{$t('value.contacts.page.menu.deleteInfo.warningInfo')}} - -
-
-
- {{$t('value.contacts.page.menu.deleteInfo.cancelTxt')}} - -
- -
- {{$t('value.contacts.page.menu.deleteInfo.deleteTxt')}} - -
-
-
-
- -
- - - - -
-
- {{ - $t('value.contacts.imorexportPage.unimportStorage') }} -
-
- {{ $t('value.contacts.imorexportPage.StorageSource') }} -
-
- {{ - $t('value.contacts.imorexportPage.message') }} -
-
-
-
diff --git a/entry/src/main/js/default/pages/contacts/contacts.js b/entry/src/main/js/default/pages/contacts/contacts.js deleted file mode 100644 index 4cd9237..0000000 --- a/entry/src/main/js/default/pages/contacts/contacts.js +++ /dev/null @@ -1,1045 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import router from '@system.router'; -import Utils from '../../../default/utils/utils.js'; -import prompt from '@system.prompt'; -import contactsService from '../../../default/model/ContactModel.js'; -import groupReq from '../../../default/model/GroupsModel.js' -import cardModel from '../../../default/model/AccountantsModel.js' -import LOG from '../../utils/ContactsLog.js'; -import Constants from '../../../default/common/constants/Constants.js'; -import sim from '@ohos.telephony.sim'; -import backgroundColor from '../../common/constants/color.js'; - -var TAG = 'Contacts...:'; - -export default { - props: ['isInit', 'cancelMaskLayer'], - data: { - contactsList: [], - shareList: [], - importList: [], - fileName: '00001.vcf', - lastIndex: '#', - position: { - X: 0, - Y: 0 - }, - myCardInfo: { - cardId: '', - cardName: '', - hasMyCard: false, - }, - nameSuffix: '', - portraitPath: '', - portraitColor: '', - contactsName: '', - menuTimeOutId: '', - deleteIndex: '', - indexer: -1, - ic_free_space: '/res/image/ic_contacts_favorite_me_36.svg', - language: '', - buttonWidths: '350px', - contactLengthText: '', - page: 0, - isShow: false, - isExist: false, - layoutState: true, - contactCount: 0, - contacts: [], - numberList: [], - index: ['#', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '…'], - isShowName: 'true', - searchTimeOutId: '', - animation: { - title: '', - backBut: '', - setting: '', - contactTitle: '', - search: '', - list: '', - isHidden: false, - isAddShow: true, - isSearch: false - }, - queryContactsType: 'all', - isEmptyGroup: true, - marginTop: '195px', - listHeight: '72%', - isSearchList: false, - searchList: [], - isFirstChange: true, - searchContactsNumber: '', - backgroundColor: backgroundColor.Color, - limit: 20 - }, - onInit() { - LOG.info(TAG + 'onInit contacts page.'); - }, - onReady: function () { - LOG.info(TAG + 'onReady contacts page.'); - }, - onHide: function () { - LOG.info(TAG + 'onHide contacts page.'); - }, - onShow: function () { - LOG.info(TAG + 'onShow contacts page.'); - }, - onDestroy: function () { - LOG.info(TAG + 'onDestroy contacts page.'); - }, - onBackPress: function () { - LOG.info(TAG + 'onBackPress contacts page.'); - }, - - onRefresh: function () { - LOG.info(TAG + 'Contacts onRefresh --------------start'); - this.contactCount = 0; - this.contactsList = []; - this.isShow = false; - this.radioInit(); - while (this.contactsList.length < this.contactCount) { - this.requestItem(); - } - this.language = 'zh'; - this.buttonWidths = 'zh' == this.language ? this.buttonWidths : '650px'; - this.contactLengthText = 'zh' == this.language ? this.$t('value.contacts.page.contactsLength') : this.$tc('value.contacts.page.contactsLength', this.contactsList.length); - this.shareList = [{ - text: this.$t('value.contacts.page.menu.shareInfo.content.qrCode') - }, - { - text: this.$t('value.contacts.page.menu.shareInfo.content.vCard') - }, - { - text: this.$t('value.contacts.page.menu.shareInfo.content.text') - }]; - - this.animation.isSearch = this.$app.$def.globalData.contactsAnimation.isSearch; - this.animation.title = this.$app.$def.globalData.contactsAnimation.title; - this.animation.setting = this.$app.$def.globalData.contactsAnimation.setting; - this.animation.contactTitle = this.$app.$def.globalData.contactsAnimation.contactTitle; - this.animation.search = this.$app.$def.globalData.contactsAnimation.search; - this.animation.isHidden = this.$app.$def.globalData.contactsAnimation.isHidden; - this.animation.backBut = this.$app.$def.globalData.contactsAnimation.backBut; - this.isSearchList = this.$app.$def.globalData.isSearchList; - - if (this.$app.$def.globalData.searchValue) { - this.touchStartSearch(); - this.changeSearch({ - text: this.$app.$def.globalData.searchValue - }); - } - - LOG.info(TAG + 'Contacts onRefresh --------------end'); - }, - - radioInit: function () { - let data = this.$app.$def.globalData.storage.getSync('contacts_settings_display_account_radio', 'allContacts'); - switch (data) { - case 'allContacts': - this.queryContactsType = 'all'; - this.marginTop = '195px'; - this.isEmptyGroup = true; - break; - case 'phoneContacts': - this.queryContactsType = 'phone'; - this.isEmptyGroup = false; - this.marginTop = '-205px'; - break; - case 'customize': - this.queryContactsType = 'custom'; - this.isEmptyGroup = false; - this.marginTop = '-205px'; - break; - default: - break; - } - this.page = 0; - var requestData = { - page: this.page, - limit: this.limit, - queryContactsType: this.queryContactsType - }; - - this.requestInit(2001, requestData); - this.conciseLayoutInit(); - }, - - requestItem: function () { - if (this.contactsList.length < this.contactCount) { - this.page++; - var requestData = { - page: this.page, - limit: this.limit, - queryContactsType: this.queryContactsType - }; - this.requestPage(2001, requestData); - } - }, - - requestInit: function (code, data) { - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - LOG.info(TAG + 'requestInit get DAHelper --------------'); - if (data.queryContactsType == 'custom') { - let ret = this.$app.$def.globalData.storage.getSync('contacts_settings_customize_view_input', 'false'); - data.ret = ret; - contactsService.queryCustomizeGroups(DAHelper, data, (result) => { - if (result.code == 0 && result.contactCount > 0) { - this.contactsList = result.resultList; - this.contactCount = result.contactCount; - this.$app.$def.globalData.contactCount = this.contactCount; - this.isExist = false; - } else { - this.$app.$def.globalData.contactCount = result.contactCount; - if (result.code != 0) { - prompt.showToast({ - message: 'Failed to init data.' - }); - } - this.isExist = true; - this.isShow = false; - } - this.initMyCard(); - }); - } else { - contactsService.queryContacts(DAHelper, data, (result) => { - if (result.code == 0 && result.contactCount > 0) { - this.contactsList = result.resultList; - this.contactCount = result.contactCount; - this.$app.$def.globalData.contactCount = this.contactCount; - this.isExist = false; - } else { - this.$app.$def.globalData.contactCount = result.contactCount; - if (result.code != 0) { - prompt.showToast({ - message: 'Failed to init data.' - }); - } - this.isExist = true; - this.isShow = false; - } - this.initMyCard(); - }); - } - }, - - requestRefresh: function (code, data) { - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - LOG.info(TAG + 'Contacts requestRefresh get DAHelper --------------'); - if (data.queryContactsType == 'custom') { - let ret = this.$app.$def.globalData.storage.getSync('contacts_settings_customize_view_input', 'false'); - data.ret = ret; - contactsService.queryCustomizeGroups(DAHelper, data, (result) => { - if (result.code == 0 && result.contactCount > 0) { - this.contactsList = result.resultList; - this.contactCount = result.contactCount; - this.isExist = false; - } else { - if (result.code != 0) { - prompt.showToast({ - message: 'Failed to init data.' - }); - } - this.isExist = true; - this.isShow = false; - } - }); - } else { - contactsService.queryContacts(DAHelper, data, (result) => { - if (result.code == 0 && result.contactCount > 0) { - this.contactsList = result.resultList; - this.contactCount = result.contactCount; - this.isExist = false; - } else { - if (result.code != 0) { - prompt.showToast({ - message: 'Failed to init data.' - }); - } - this.isExist = true; - this.isShow = false; - } - }); - } - }, - - conciseLayoutInit: function () { - let data = this.$app.$def.globalData.storage.getSync('contacts_settings_concise_layout_switch', 'false'); - this.layoutState = data == 'true' ? false : true; - }, - - sleep: function (milliSeconds) { - var startTime = new Date().getTime(); - while (new Date().getTime() < startTime + milliSeconds) { - LOG.info(TAG + 'wait...'); - } - }, - - requestPage: function (code, data) { - LOG.info(TAG + 'requestPage code' + 'data') - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - if (data.queryContactsType == 'custom') { - let ret = this.$app.$def.globalData.storage.getSync('contacts_settings_customize_view_input', 'false'); - data.ret = ret; - contactsService.queryCustomizeGroups(DAHelper, data, (result) => { - if (result.code == 0) { - this.contactsList = this.contactsList.concat(result.resultList); - if (result.resultList.length == 0) { - this.contactsList.map(item => { - if (item.namePrefix > this.lastIndex) { - this.lastIndex = item.namePrefix; - } - return item; - }); - this.isShow = false; - } - } else { - prompt.showToast({ - message: 'Failed to paging data.' - }); - } - }); - } else { - contactsService.queryContacts(DAHelper, data, (result) => { - if (result.code == 0) { - this.contactsList = this.contactsList.concat(result.resultList); - if (result.resultList.length == 0) { - this.contactsList.map(item => { - if (item.namePrefix > this.lastIndex) { - this.lastIndex = item.namePrefix; - } - return item; - }); - this.isShow = false; - } - } else { - prompt.showToast({ - message: 'Failed to paging data.' - }); - } - }); - } - }, - - scrollBottom: function () { - }, - - /** - * Delete contact list data - * - * @param code - * @param data contactId The contact ID - */ - deleteContactData: function (code, data) { - LOG.info(TAG + 'deleteContactData code' + 'data') - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - contactsService.deleteContacts(DAHelper, data, (result) => { - if (result == 0) { - if (this.indexer > -1) { - this.contactsList.splice(this.indexer, 1); - } - this.contactCount > 0 ? this.contactCount-- : this.contactCount; - if (this.isSearchList && this.searchList.length > 0) { - this.searchList.splice(this.indexer, 1); - } - this.indexer = -1; - this.deleteIndex = ''; - this.contactsName = ''; - this.isExist = this.contactCount > 0 ? this.isExist : true; - this.onRefresh(); - } else { - prompt.showToast({ - message: 'Failed to delete data.' - }); - } - }); - }, - shareClick: function (idx) { - LOG.info(TAG + 'shareClick idx' + idx) - switch (idx) { - case 0: - prompt.showToast({ - message: 'Call share qr code three parties' - }); - break; - case 1: - prompt.showToast({ - message: 'Call share vCard three parties' - }); - break; - case 2: - prompt.showToast({ - message: 'Call text tripartite' - }); - break; - default: - break; - } - }, - shareCancelClick: function () { - this.$element('shareDialog').close(); - }, - cancelClick: function () { - this.$element('deleteDialog').close(); - this.indexer = -1; - this.deleteIndex = ''; - this.contactsName = ''; - }, - deleteClick: function () { - this.$element('deleteDialog').close(); - if (this.indexer == -1 || Utils.isEmpty(this.deleteIndex)) { - return; - } - var requestData = { - contactId: this.deleteIndex - }; - this.deleteContactData(2003, requestData); - }, - - importContactClicked: function () { - this.$element('importContactsDialog').show(); - }, - - importCancelClick: function () { - this.$element('importContactsDialog').close(); - }, - - importClick: function (idx) { - LOG.info(TAG + 'shareClick idx' + idx) - switch (idx) { - case 0: - - this.$element('ImportDialog').show(); - break; - } - }, - closeImportDialog: function () { - this.$element('ImportDialog').close(); - }, - - newContactClicked: function () { - router.push({ - uri: 'pages/contacts/accountants/accountants', - params: {}, - }); - }, - - addContactClicked: function () { - router.push({ - uri: 'pages/contacts/accountants/accountants', - params: {}, - }); - }, - listItemTouchStart: function (event) { - LOG.info(TAG + 'listItemTouchStart event') - this.position.X = Math.round(event.touches[0].globalX); - this.position.Y = Math.round(event.touches[0].globalY); - }, - listItemOnLongPress: function (index, event) { - LOG.info(TAG + 'listItemOnLongPress index' + index + 'event') - this.contactsName = event.emptyNameData == undefined || event.emptyNameData == '' ? '' : this.slice(event.emptyNameData, 9); - this.isShowName = event.emptyNameData == '' || event.emptyNameData == undefined ? false : true; - this.deleteIndex = event.contactId; - this.indexer = index; - var tempX = this.position.X; - var tempY = this.position.Y; - clearTimeout(this.menuTimeOutId); - this.menuTimeOutId = setTimeout(() => { - this.$element('itemMenu').show({ - x: tempX, - y: tempY - }); - }, 1); - }, - - slice: function (str, maxLength) { - LOG.info(TAG + 'slice str' + str + 'maxLength' + maxLength) - var result = ''; - var flag = false; - var len = 0; - var length = 0; - var length2 = 0; - for (var i = 0; i < str.length; i++) { - var code = str.codePointAt(i).toString(16); - if (code.length > 4) { - i++; - if ((i + 1) < str.length) { - flag = str.codePointAt(i + 1).toString(16) == '200d'; - } - } - if (flag) { - len += this.getByteByHex(code); - if (i == str.length - 1) { - length += len; - if (length <= maxLength) { - result += str.substr(length2, i - length2 + 1); - } else { - break - } - } - } else { - if (len != 0) { - length += len; - length += this.getByteByHex(code); - if (length <= maxLength) { - result += str.substr(length2, i - length2 + 1); - length2 = i + 1; - } else { - break - } - len = 0; - continue; - } - length += this.getByteByHex(code); - if (length <= maxLength) { - if (code.length <= 4) { - result += str[i] - } else { - result += str[i - 1] + str[i] - } - length2 = i + 1; - } else { - break; - } - } - } - if (length > 9) { - result = result + '..'; - } - return result; - }, - - getByteByBinary: function (binaryCode) { - LOG.info(TAG + 'getByteByBinary binaryCode' + binaryCode) - var byteLengthDatas = [0, 1, 2, 3, 4]; - var len = byteLengthDatas[Math.ceil(binaryCode.length / 8)]; - return len; - }, - - getByteByHex: function (hexCode) { - LOG.info(TAG + 'getByteByHex hexCode' + hexCode) - return this.getByteByBinary(parseInt(hexCode, 16).toString(2)); - }, - - - todoSelected: function (event) { - LOG.info(TAG + 'todoSelected event' + event) - if (event.value == 'delete') { - this.$element('deleteDialog').show(); - } - if (event.value == 'shareContact') { - this.$element('shareDialog').show(); - } - }, - cancelSelected: function () { - this.contactsName = ''; - this.indexer = -1; - this.deleteIndex = ''; - }, - - focusSearch: function (e) { - LOG.info(TAG + 'focusSearch e' + e); - }, - todoSearch: function () { - LOG.info(TAG + 'todoSearch'); - }, - submitSearch: function () { - LOG.info(TAG + 'submitSearch'); - }, - clickSearch: function () { - this.$element('search').focus({ - focus: true - }); - LOG.info(TAG + 'clickSearch'); - }, - back: function () { - if (this.animation.isHidden) { - this.$element('searchDoing').focus({ - focus: false - }); - this.animation.isSearch = false; - this.$app.$def.setIsSearch(this.animation.isSearch); - this.isSearchList = false; - this.$app.$def.setIsSearchList(this.isSearchList); - this.listHeight = '72%'; - this.animation.title = 'show-title'; - this.animation.setting = 'show-setting'; - this.animation.contactTitle = 'show-contact-title'; - this.animation.backBut = 'hidden-back'; - this.animation.search = 'search-recover'; - this.animation.isHidden = false; - this.$app.$def.setContactsAnimation('', 'hidden-init', '', '', '', this.animation.isHidden); - this.$emit('eventType', { - menuShow: true, - isMaskLayer: false, - contentHeight: '92%' - }); - this.animation.isAddShow = true; - LOG.info(TAG + 'back isAddShow' + this.animation.isAddShow); - } - }, - touchStartSearch: function () { - LOG.info(TAG + 'search is touchStartSearch'); - this.animation.contactTitle = ''; - this.animation.setting = ''; - this.animation.backBut = ''; - this.animation.contactTitle = 'hidden-contact-title'; - this.animation.setting = 'hidden-setting'; - this.animation.backBut = 'show-back'; - this.animation.title = ''; - this.animation.title = 'hidden-title'; - this.animation.search = ''; - this.animation.search = 'search-translation'; - this.animation.isHidden = true; - this.$app.$def.setContactsAnimation(this.animation.title, 'show-back-init', this.animation.setting, - this.animation.contactTitle, 'search-init-action', this.animation.isHidden); - this.animation.isAddShow = false; - this.$emit('eventType', { - menuShow: false, - isMaskLayer: true, - contentHeight: '100%' - }); - clearTimeout(this.searchTimeOutId); - this.searchTimeOutId = setTimeout(() => { - this.animation.isSearch = true; - this.$app.$def.setIsSearch(this.animation.isSearch); - this.listHeight = '100%'; - this.touchStart(); - }, 400); - }, - touchStart: function () { - this.$element('searchDoing').focus({ - focus: true - }) - }, - changeSearch: function (e) { - LOG.info(TAG + 'changeSearch e.text'); - if (e.text == '') { - this.$emit('eventType', { - menuShow: false, - isMaskLayer: true - }); - this.isSearchList = false; - this.$app.$def.setIsSearchList(this.isSearchList); - } else { - this.searchList = []; - this.$emit('eventType', { - menuShow: false, - isMaskLayer: false - }); - this.isSearchList = true; - this.$app.$def.setIsSearchList(this.isSearchList); - var data = {}; - data.likeValue = e.text; - this.searchResult(data); - } - }, - - searchResult: function (data) { - LOG.info(TAG + 'searchResult data' + data); - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.searchContacts(DAHelper, data, result => { - LOG.log(TAG + 'searchList=' + result); - if (result.code == 0 && result.contactCount > 0) { - this.processHighLight(result.data, data.likeValue); - this.searchList = result.data; - LOG.log(TAG + 'process searchList=' + this.searchList); - } else if (result.code != 0) { - prompt.showToast({ - message: 'Failed to init data.' - }); - } - this.$app.$def.globalData.searchValue = ''; - }); - }, - - processHighLight: function (searchList, likeValue) { - LOG.info(TAG + 'processHighLight searchList' + 'likeValue' + likeValue); - searchList.forEach((element) => { - if (element.searchMimetype[0].search('/name') != -1) { - - this.conditionOne(element, likeValue) - - } else if (element.searchMimetype[0].search('/organization') != -1) { - - this.conditionTwo(element, likeValue) - - this.conditionThree(element, likeValue) - - } else if (element.searchMimetype[0].search('/phone') != -1) { - - this.conditionFour(element, likeValue) - - } else if (element.searchMimetype[0].search('/email') != -1) { - - this.conditionFive(element, likeValue) - - } else if (element.searchMimetype[0].search('/im') != -1) { - - this.conditionSix(element, likeValue) - - } else if (element.searchMimetype[0].search('/postal-address_v2') != -1) { - - this.conditionSeven(element, likeValue) - } - else if (element.searchMimetype[0].search('/note') != -1) { - - this.conditionEight(element, likeValue) - - } else if (element.searchMimetype[0].search('/nickname') != -1) { - - this.conditionNine(element, likeValue) - - } - }); - }, - - conditionOne: function (element, likeValue) { - LOG.info(TAG + 'conditionOne element' + 'likeValue' + likeValue); - var emptyName = element.emptyNameData; - var emptyNameMatch = this.highLightChars(emptyName, likeValue); - var emptyNamePre = ''; - var emptyNameSuf = ''; - if (this.isEmpty(emptyNameMatch)) { - emptyNamePre = ''; - emptyNameMatch = ''; - emptyNameSuf = emptyName; - } else { - emptyNamePre = emptyName.substring(0, emptyName.indexOf(emptyNameMatch)); - emptyNameSuf = emptyName.substring(emptyName.indexOf(emptyNameMatch) + emptyNameMatch.length); - } - - element.emptyNamePre = emptyNamePre; - element.emptyNameMatch = emptyNameMatch; - element.emptyNameSuf = emptyNameSuf; - }, - - conditionTwo: function (element, likeValue) { - LOG.info(TAG + 'conditionTwo element' + 'likeValue' + likeValue); - var organizationTitle = element.organization.title; - if (this.isEmpty(organizationTitle)) { - organizationTitlePre = ''; - organizationTitleMatch = ''; - organizationTitleSuf = ''; - } else { - var organizationTitleMatch = this.highLightChars(organizationTitle, likeValue); - var organizationTitlePre = ''; - var organizationTitleSuf = ''; - if (this.isEmpty(organizationTitleMatch)) { - organizationTitlePre = ''; - organizationTitleMatch = ''; - organizationTitleSuf = organizationTitle; - } else { - organizationTitlePre = organizationTitle.substring(0, organizationTitle.indexOf(organizationTitleMatch)); - organizationTitleSuf = organizationTitle.substring(organizationTitle.indexOf(organizationTitleMatch) - + organizationTitleMatch.length); - } - } - element.organization.organizationTitlePre = organizationTitlePre; - element.organization.organizationTitleMatch = organizationTitleMatch; - element.organization.organizationTitleSuf = organizationTitleSuf; - }, - - conditionThree: function (element, likeValue) { - LOG.info(TAG + 'conditionThree element' + 'likeValue' + likeValue); - var organizationName = element.organization.name; - if (this.isEmpty(organizationName)) { - organizationNamePre = ''; - organizationNameMatch = ''; - organizationNameSuf = ''; - } else { - var organizationNameMatch = this.highLightChars(organizationName, likeValue); - var organizationNamePre = ''; - var organizationNameSuf = ''; - if (this.isEmpty(organizationNameMatch)) { - organizationNamePre = ''; - organizationNameMatch = ''; - organizationNameSuf = organizationName; - } else { - organizationNamePre = organizationName.substring(0, organizationName.indexOf(organizationNameMatch)); - organizationNameSuf = organizationName.substring(organizationName.indexOf(organizationNameMatch) + organizationNameMatch.length); - } - } - element.organization.organizationNamePre = organizationNamePre; - element.organization.organizationNameMatch = organizationNameMatch; - element.organization.organizationNameSuf = organizationNameSuf; - }, - - conditionFour: function (element, likeValue) { - LOG.info(TAG + 'conditionFour element' + 'likeValue' + likeValue); - var phoneNumber = element.phoneNumbers[0].phoneNumber; - var phoneNumberMatch = this.highLightChars(phoneNumber, likeValue); - var phoneNumberPre = ''; - var phoneNumberSuf = ''; - if (this.isEmpty(phoneNumberMatch)) { - phoneNumberPre = ''; - phoneNumberMatch = ''; - phoneNumberSuf = phoneNumber; - } else { - phoneNumberPre = phoneNumber.substring(0, phoneNumber.indexOf(phoneNumberMatch)); - phoneNumberSuf = phoneNumber.substring(phoneNumber.indexOf(phoneNumberMatch) + phoneNumberMatch.length); - } - element.phoneNumbers[0].phoneNumberPre = phoneNumberPre; - element.phoneNumbers[0].phoneNumberMatch = phoneNumberMatch; - element.phoneNumbers[0].phoneNumberSuf = phoneNumberSuf; - }, - - conditionFive: function (element, likeValue) { - LOG.info(TAG + 'conditionFive element' + 'likeValue' + likeValue); - var email = element.emails[0].email; - var emailMatch = this.highLightChars(email, likeValue); - var emailPre = ''; - var emailSuf = ''; - if (this.isEmpty(emailMatch)) { - emailPre = ''; - emailMatch = ''; - emailSuf = email; - } else { - emailPre = email.substring(0, email.indexOf(emailMatch)); - emailSuf = email.substring(email.indexOf(emailMatch) + emailMatch.length); - } - element.emails[0].emailPre = emailPre; - element.emails[0].emailMatch = emailMatch; - element.emails[0].emailSuf = emailSuf; - }, - - conditionSix: function (element, likeValue) { - LOG.info(TAG + 'conditionSix element' + 'likeValue' + likeValue); - var imAddress = element.imAddresses[0].imAddress; - var imAddressMatch = this.highLightChars(imAddress, likeValue); - var imAddressPre = ''; - var imAddressSuf = ''; - if (this.isEmpty(imAddressMatch)) { - imAddressPre = ''; - imAddressMatch = ''; - imAddressSuf = imAddress; - } else { - imAddressPre = imAddress.substring(0, imAddress.indexOf(imAddressMatch)); - imAddressSuf = imAddress.substring(imAddress.indexOf(imAddressMatch) + imAddressMatch.length); - } - element.imAddresses[0].imAddressPre = imAddressPre; - element.imAddresses[0].imAddressMatch = imAddressMatch; - element.imAddresses[0].imAddressSuf = imAddressSuf; - }, - - conditionSeven: function (element, likeValue) { - LOG.info(TAG + 'conditionSeven element' + 'likeValue' + likeValue); - var postalAddress = element.postalAddresses[0].postalAddress; - var postalAddressMatch = this.highLightChars(postalAddress, likeValue); - var postalAddressPre = ''; - var postalAddressSuf = ''; - if (this.isEmpty(postalAddressMatch)) { - postalAddressPre = ''; - postalAddressMatch = ''; - postalAddressSuf = postalAddress; - } else { - postalAddressPre = postalAddress.substring(0, postalAddress.indexOf(postalAddressMatch)); - postalAddressSuf = postalAddress.substring(postalAddress.indexOf(postalAddressMatch) + postalAddressMatch.length); - } - element.postalAddresses[0].postalAddressPre = postalAddressPre; - element.postalAddresses[0].postalAddressMatch = postalAddressMatch; - element.postalAddresses[0].postalAddressSuf = postalAddressSuf; - }, - - conditionEight: function (element, likeValue) { - LOG.info(TAG + 'conditionEight element' + 'likeValue' + likeValue); - var note = element.note.noteContent; - var noteMatch = this.highLightChars(note, likeValue); - var notePre = ''; - var noteSuf = ''; - if (this.isEmpty(noteMatch)) { - notePre = ''; - noteMatch = ''; - noteSuf = note; - } else { - notePre = note.substring(0, note.indexOf(noteMatch)); - noteSuf = note.substring(note.indexOf(noteMatch) + noteMatch.length); - } - element.note.notePre = notePre; - element.note.noteMatch = noteMatch; - element.note.noteSuf = noteSuf; - }, - - conditionNine: function (element, likeValue) { - LOG.info(TAG + 'conditionEight element' + 'likeValue' + likeValue); - var nickName = element.nickName.nickName; - var nickNameMatch = this.highLightChars(nickName, likeValue); - var nickNamePre = ''; - var nickNameSuf = ''; - if (this.isEmpty(nickNameMatch)) { - nickNamePre = ''; - nickNameMatch = ''; - nickNameSuf = nickName; - } else { - nickNamePre = nickName.substring(0, nickName.indexOf(nickNameMatch)); - nickNameSuf = nickName.substring(nickName.indexOf(nickNameMatch) + nickNameMatch.length); - } - element.nickName.nickNamePre = nickNamePre; - element.nickName.nickNameMatch = nickNameMatch; - element.nickName.nickNameSuf = nickNameSuf; - }, - - highLightChars: function (targetStr, matchStr) { - LOG.info(TAG + 'highLightChars targetStr' + 'matchStr'); - if (this.isEmpty(targetStr) || this.isEmpty(matchStr)) { - return ''; - } - var noSpaceMatch = matchStr.replace(/\s/g, ''); - var result = ''; - var spaceNum = 0; - for (var i = 0; i < targetStr.length; i++) { - if (targetStr.charAt(i) == noSpaceMatch.charAt(0)) { - for (var r = 0; r < noSpaceMatch.length; r++) { - if (targetStr.charAt(i + r + spaceNum) == ' ') { - result = result + targetStr.charAt(i + r + spaceNum); - spaceNum++; - r--; - continue; - } - if (targetStr.charAt(i + r + spaceNum) == noSpaceMatch.charAt(r)) { - result = result + targetStr.charAt(i + r + spaceNum); - if (r == noSpaceMatch.length - 1) { - return result; - } - } else { - result = ''; - spaceNum = 0; - break; - } - } - } - } - return result; - }, - isEmpty: function (str) { - LOG.info(TAG + 'isEmpty str'); - return str == undefined || str == null || str == ''; - }, - enterKeyClick: function (e) { - LOG.info(TAG + 'enterKeyClick' + e); - }, - cancelSearchDialog: function () { - LOG.log(TAG + 'cancelSearchDialog'); - }, - - onClickGroups: function () { - LOG.log(TAG + 'click groups'); - router.push({ - uri: 'pages/contacts/groups/groups', - params: {}, - }); - }, - - redirectCard: function () { - LOG.info(TAG + 'onclick card '); - if (this.myCardInfo.hasMyCard) { - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - cardModel.getCardDetails(DAHelper, this.myCardInfo.cardId, (result) => { - var contactForm = result.data; - router.push({ - uri: 'pages/contacts/card/card', - params: { - contactForm: contactForm, - }, - }); - }); - } else { - this.getDefaultSimNumber((defaultSimNumber) => { - if (Utils.isEmpty(defaultSimNumber)) { - router.push({ - uri: 'pages/contacts/accountants/accountants', - params: { - carteFlag: true, - addShow: false, - updateShow: false - }, - }) - } else { - router.push({ - uri: 'pages/contacts/accountants/accountants', - params: { - carteFlag: true, - addShow: false, - updateShow: false, - phoneNumbers: [ - { - 'labelId': 2, - 'labelName': this.$t('accountants.phone'), - 'phoneNumber': defaultSimNumber, - 'phoneAddress': 'N', - 'showP': true, - 'blueStyle': true - } - ] - }, - }); - } - }) - } - }, - - async getDefaultSimNumber(callBack) { - var defaultSimSlot = 0; - var defaultSimNumber = ''; - try { - defaultSimSlot = await sim.getDefaultVoiceSlotId(); - } catch { - defaultSimSlot = 0; - LOG.error(TAG + 'get default sim slot error!'); - } - try { - defaultSimNumber = await sim.getSimTelephoneNumber(defaultSimSlot); - } catch { - defaultSimNumber = ''; - LOG.error(TAG + 'get default sim telephoneNumber error!'); - } - callBack(defaultSimNumber); - }, - initMyCard: function () { - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - cardModel.getMyCardId(DAHelper, (cardMainInfo) => { - LOG.error(TAG + 'initMyCard cardMainInfo'); - if (Utils.isEmpty(cardMainInfo)) { - this.myCardInfo.hasMyCard = false; - } else { - this.myCardInfo.hasMyCard = true; - this.myCardInfo.cardName = cardMainInfo.cardName; - this.myCardInfo.cardId = cardMainInfo.cardId; - } - }) - }, - - showRecordDetails: function (index, type) { - LOG.error(TAG + 'showRecordDetails index' + index); - var contactId = type == 'search' ? this.searchList[index].contactId : this.contactsList[index].contactId; - router.push({ - uri: 'pages/contacts/contactDetail/contactDetail', - params: { - contactId: contactId, - isNewSource: true, - } - }); - }, - - settingOnSelected: function (event) { - if (event.value == 'settings') { - router.push({ - uri: 'pages/contacts/settings/settings', - params: {}, - }); - } - }, -} - diff --git a/entry/src/main/js/default/pages/contacts/groups/deleteGroup/deleteGroup.css b/entry/src/main/js/default/pages/contacts/groups/deleteGroup/deleteGroup.css deleted file mode 100644 index 6b270fb..0000000 --- a/entry/src/main/js/default/pages/contacts/groups/deleteGroup/deleteGroup.css +++ /dev/null @@ -1,450 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - flex-direction: column; - justify-content: flex-start; - align-items: center; - width: 100%; - height: 100%; -} - -.title-div { - flex-direction: row; - align-items: center; - justify-content: flex-start; - margin-left: 24px; - width: 100%; - margin-top: 10px; - position: relative; -} - -.free-space { - align-content: flex-start; - justify-content: flex-start; - align-items: center; - flex-direction: column; - width: 100%; - height: 82%; -} - -.contacts-image-icon { - margin-top: 40%; - width: 210px; - height: 210px; -} - -.free-space-text { - font-size: 28px; - margin-top: -22px; - font-weight: 400; - color: #999; -} - -.title { - flex-direction: row; - justify-content: flex-start; - align-items: center; - width: 100%; - height: 10%; - margin-left: 25px; - margin-right: 25px; -} - -.title-image { - height: 50px; - width: 60px; -} - -.title-context { - width: 100%; - height: 200px; - text-align: left; - font-size: 40px; - margin-left: 25px; -} - -.back-but-div { - width: 93px; - height: 93px; - border-radius: 15px; - align-items: center; -} - -.back-but-div:active { - width: 93px; - height: 93px; - border-radius: 15px; - align-items: center; - background-color: #f3f3f3; -} - -.back-image { - margin-left: 21px; - width: 50px; - height: 50px; - border-radius: 10px; -} - -.title-text { - align-items: center; - justify-content: center; - margin-left: 15px; - font-size: 40px; - font-weight: 500; - width: 100%; -} - -.list { - margin-top: 30px; -} - -.list-item { - position: relative; - flex-direction: column; - align-items: center; - height: 100px; - justify-content: flex-start; -} - -.list-item-div1 { - position: relative; - flex-direction: column; - align-items: center; - justify-content: flex-start; -} - -.list-content-div { - position: relative; - height: 100%; - flex-direction: row; - align-items: center; - justify-content: flex-start; - padding-left: 45px; -} - -.list-item-div { - position: relative; - flex-direction: column; - align-items: flex-start; - justify-content: space-around; - padding-top: 10px; - padding-bottom: 10px; -} - -.list-item-line { - width: 100%; - margin-right: 40px; - margin-left: 45px; - height: 1px; - border-bottom: 1px; - border-color: #D3D3D3; -} - -.name-text { - text-overflow: ellipsis; - max-lines: 1; - font-weight: 600; - width: 560px; - font-size: 30px; -} - -.contact-phone-groups-div { - margin-top: 5px; - width: 100%; - margin-left: 9px; - height: 90px; - align-items: center; - justify-content: flex-start; -} - -.contact-smart-groups-text { - margin-left: 45px; - font-size: 26px; - font-weight: 500; - color: #646464; -} - -.batch-delete-operation { - width: 100%; - height: 8%; - justify-content: center; -} - -.batch-delete-operation-button { - width: 30%; - height: 100%; - border-radius: 15px; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.batch-delete-image-icon { - width: 50px; - height: 50px; -} - -.batch-delete-text { - font-size: 22px; -} - -.batch-delete-operation-button:active { - background-color: #FFD3D3D3; -} - -.batch-delete-operation-button:disabled { - opacity: .5; -} - -.dialog-main { - width: 90%; - align-items: center; -} - -.deleteGroupText { - width: 85%; - background-color: transparent; -} - -.inner-txt { - width: 400px; - height: 160px; - flex-direction: column; - align-items: flex-start; - justify-content: space-around; - margin-right: 150px; -} - -.txt { - font-size: 30px; -} - -.dialog-input { - width: 90%; - background-color: transparent; - border-bottom: 1px solid #80807F; -} - -.dialog-div { - flex-direction: column; - align-items: center; - border-style: dotted; - border-radius: 50px; -} - -.inner-btn { - width: 90%; - height: 120px; - justify-content: space-around; - align-items: center; -} - -.btn-txt { - width: 40%; - height: 70%; - border-radius: 30px; - background-color: transparent; - text-color: #175cfe; - font-size: 30px; -} - -.cancel-btn-txt { - width: 40%; - height: 70%; - border-radius: 50px; - background-color: transparent; - text-color: #175cfe; - font-size: 30px; -} - -.delete-btn-txt { - width: 40%; - height: 70%; - border-radius: 30px; - background-color: transparent; - text-color: #FE1745; - font-size: 30px; -} - -@media screen and (orientation: landscape) { - .title-div { - margin-left: 12px; - margin-top: 5px; - width: 100%; - } - - .free-space { - height: 80%; - } - - .contacts-image-icon { - margin-top: 42%; - width: 105px; - height: 105px; - } - - .free-space-text { - font-size: 14px; - margin-top: -11px; - } - - .title { - margin-left: 12px; - margin-right: 12px; - } - - .title-image { - height: 25px; - width: 30px; - } - - .title-context { - height: 100px; - font-size: 20px; - margin-left: 12px; - } - - .back-but-div { - width: 46px; - height: 46px; - border-radius: 8px; - flex-shrink: 0; - } - - .back-but-div:active { - width: 46px; - height: 46px; - } - - .back-image { - margin-left: 10px; - width: 25px; - height: 25px; - border-radius: 5px; - } - - .title-text { - margin-left: 8px; - font-size: 20px; - flex-shrink: 1; - } - - .list { - margin-top: 15px; - } - - .list-item { - height: 50px; - } - - .list-content-div { - padding-left: 23px; - } - - .list-item-div { - padding-top: 5px; - padding-bottom: 5px; - width: 100%; - flex-shrink: 2; - } - - .list-item-line { - width: 100%; - margin-right: 20px; - margin-left: 22px; - } - - .name-text { - font-size: 15px; - } - - .contact-phone-groups-div { - margin-top: 2px; - height: 45px; - } - - .contact-smart-groups-text { - margin-left: 22px; - font-size: 13px; - } - - .batch-delete-operation { - width: 50px; - height: 50px; - align-items: center; - margin-right: 20px; - flex-shrink: 0; - } - - .batch-delete-operation-button { - width: 40px; - height: 40px; - border-radius: 8px; - } - - .batch-delete-image-icon { - width: 25px; - height: 25px; - } - - .batch-delete-text { - font-size: 11px; - } - - .dialog-main { - width: 60%; - } - - .deleteGroupText { - font-size: 15px; - } - - .inner-txt { - width: 200px; - height: 80px; - margin-right: 75px; - } - - .txt { - font-size: 15px; - } - - .dialog-div { - justify-content: center; - border-radius: 25px; - } - - .inner-btn { - height: 60px; - } - - .btn-txt { - width: 40%; - height: 70%; - border-radius: 15px; - background-color: transparent; - font-size: 15px; - } - - .cancel-btn-txt { - border-radius: 25px; - font-size: 15px; - } - - .delete-btn-txt { - border-radius: 15px; - font-size: 15px; - } -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/groups/deleteGroup/deleteGroup.hml b/entry/src/main/js/default/pages/contacts/groups/deleteGroup/deleteGroup.hml deleted file mode 100644 index 578ace7..0000000 --- a/entry/src/main/js/default/pages/contacts/groups/deleteGroup/deleteGroup.hml +++ /dev/null @@ -1,114 +0,0 @@ - -
-
-
- -
- - {{ title }} - -
-
- - {{ title }} -
- -
- -
-
- - - {{ $t('value.contacts.groupsPage.noGroups') }} - -
- - -
- - {{ $t('value.contacts.groupsPage.mobilePhone') }} - -
-
- -
-
-
- - {{ item.title }} - -
- - -
- -
-
-
-
-
-
-
-
- - {{ $t('value.contacts.groupsPage.delete') }} -
-
- - {{ $t('value.contacts.groupsPage.new') }} -
-
- -
-
- {{ deleteDialogTitle }} -
- {{ - $t('value.contacts.groupsPage.deleteGroupText') }} -
- - | - -
-
-
- - - -
-
- {{ - $t('value.contacts.groupsPage.addGroup') }} -
- -
- - | - -
-
-
-
\ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/groups/deleteGroup/deleteGroup.js b/entry/src/main/js/default/pages/contacts/groups/deleteGroup/deleteGroup.js deleted file mode 100644 index 69ca7c4..0000000 --- a/entry/src/main/js/default/pages/contacts/groups/deleteGroup/deleteGroup.js +++ /dev/null @@ -1,297 +0,0 @@ -/** - * @file: Group operating - */ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import router from '@system.router'; -import prompt from '@system.prompt'; -import groupReq from '../../../../../default/model/GroupsModel.js'; -import LOG from '../../../../utils/ContactsLog.js'; -import Constants from '../../../../../default/common/constants/Constants.js'; - -var TAG = 'deleteGroup...:'; - -export default { - data: { - // New contact ID - addContactStatus: false, - reset: '/res/image/ic_cancel_m.svg', - save: '/res/image/ic_comfirm.svg', - imageUnsave: '/res/image/uncomfirm.png', - addGroup: '/res/image/ic_contacts_add_m2.svg', - isEmpty: true, - groupList: [], - title: '', - deleteDialogTitle: '', - checkedNum: 0, - contactForm: {}, - // New group - newGroupName: '', - page: 0, - limit: 20, // Number of entries per page - addShow: false, - updataShow: false, - screenDirection: 0, // 0: vertical screen, 1: horizontal screen - oldParam: [], - dataflag: false, - groups: [] - }, - onInit() { - LOG.info(TAG + 'onInit success') - this.title = this.$t('value.contacts.groupsPage.noSelect'); - var requestData = { - page: this.page, - limit: this.limit - }; - this.getGroupList(requestData); - }, - - requestItem: function () { - this.page++; - var requestData = { - page: this.page, - limit: this.limit - }; - LOG.info(TAG + 'requestItem requestData' +requestData) - this.getGroupList(requestData); - }, - getGroupList: function (actionData) { - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.queryGroups(DAHelper, actionData, result => { - LOG.info(TAG + 'delete getGroupList' + result); - result.forEach((item) => { - if (this.groups.length > 0) { - this.groups.forEach((element) => { - if (item.groupId == element.groupId) { - item.checked = true; - } else { - item.checked = false; - } - }) - } else { - item.checked = false; - } - }) - if (this.page == 0) { - this.groupList = result; - } else { - this.groupList = this.groupList.concat(result); - } - this.oldParam = this.copy(this.groupList); - }); - }, - itemClick: function (item) { - LOG.info(TAG + 'itemClick item' + item) - item.checked = !item.checked; - if (item.checked) { - this.checkedNum++; - } else { - this.checkedNum--; - } - this.initTitle(); - }, - initTitle: function () { - if (this.checkedNum != 0) { - this.title = this.$t('value.contacts.groupsPage.alreadySelect').replace('num', this.checkedNum + ""); - if (this.addContactStatus) { - this.isEmpty = false; - } - } else { - this.title = this.$t('value.contacts.groupsPage.noSelect'); - } - LOG.info(TAG + 'old group is ' + this.oldParam); - LOG.info(TAG + 'group is ' + this.groupList) - if (this.isSameData(this.oldParam, this.groupList, 'Array')) { - this.isEmpty = true; - } else { - this.isEmpty = false; - } - }, - - isSameData(existData, newData, type = 'Object') { - if (type == 'Array') { - if (Object.prototype.toString.call(existData) != '[object Array]' || Object.prototype.toString.call(newData) != '[object Array]') { - throw new Error('At least one of the inputs not an array'); - } - - if (existData.length != newData.length) { - return false; - } - } else if (!(existData instanceof Object && newData instanceof Object)) { - throw new Error('At least one of the inputs not an Object'); - } else { - LOG.info(TAG + 'isSameData type') - } - - for (const key in existData) { - if (Object.prototype.hasOwnProperty.call(newData, key)) { - if (existData[key] instanceof Array && newData[key] instanceof Array) { - try { - if (!this.isSameData(existData[key], newData[key], 'Array')) { - return false; - } - } catch { - return false; - } - } else if (existData[key] instanceof Object && newData[key] instanceof Object) { - try { - if (!this.isSameData(existData[key], newData[key], 'Object')) { - return false; - } - } catch { - return false; - } - } else if (existData[key] != newData[key]) { - return false; - } - } else { - return false; - } - } - return true; - }, - - showDeleteGroupDialog: function () { - var deleteList = []; - this.groupList.forEach(item => { - if (item.checked) { - deleteList.push(item); - } - }) - if (deleteList.length == 1) { - this.deleteDialogTitle = this.$t('value.contacts.groupsPage.deleteThisGroup'); - } else if (deleteList.length == this.groupList.length) { - this.deleteDialogTitle = this.$t('value.contacts.groupsPage.deleteAllGroups'); - } else { - this.deleteDialogTitle = this.$t('value.contacts.groupsPage.deleteNumGroups').replace('num', this.checkedNum + ""); - } - this.$element('deleteGroupDialog').show() - }, - - showAddGroupDialog: function () { - this.newGroupName = ""; - this.$element('addGroupDialog').show(); - }, - - groupNameChanged: function (e) { - this.newGroupName = e.value; - }, - - cancelAddGroup() { - this.$element('addGroupDialog').close() - }, - - confirmAddGroup() { - var actionData = {}; - actionData.title = this.newGroupName; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.addGroup(DAHelper, this.newGroupName, result => { - if (result == -2) { - prompt.showToast({ - message: this.$t('value.contacts.groupsPage.alreadyExists') - }); - } else if (result != 0) { - let newGroup = { - 'groupId': result, - 'contactCount': 0, - 'contactBeans': [], - 'title': this.newGroupName, - 'checked': false - }; - this.dataflag = true; - this.isEmpty = false; - this.groupList.push(newGroup); - this.$element('addGroupDialog').close(); - } else { - LOG.error(TAG + 'add group error. code is ' + result.code) - } - this.$element('addGroupDialog').close() - }); - - }, - - cancelDeleteGroup: function () { - this.$element('deleteGroupDialog').close(); - }, - - confirmDeleteGroup: function () { - var actionData = { - ids: [] - }; - this.groupList.forEach((item) => { - LOG.info(TAG + 'confirmDeleteGroup item' + item) - if (item.checked) { - actionData.ids.push(item.groupId); - } - }) - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.deleteGroups(DAHelper, actionData.ids, result => { - this.getGroupList(); - this.checkedNum = 0; - this.initTitle(); - this.$element('deleteGroupDialog').close(); - router.back(); - }); - - }, - - selectGroups() { - var addConGroups = []; - this.groupList.forEach((item) => { - if (item.checked) { - addConGroups.push({ - groupId: item.groupId, - title: item.title, - checked: true, - id: 0 - }) - } - }) - this.contactForm.groups = addConGroups; - this.$app.$def.groups.group = addConGroups; - LOG.info(TAG + 'selectGroups' + addConGroups) - let params = { - contactId: this.contactId, - contactForm: this.contactForm, - groups: addConGroups, - groupStatus: true, - addShow: this.addShow, - updataShow: this.updataShow, - screenDirection: this.screenDirection, - MoreDivStatus: this.MoreDivStatus, - LetterShow: this.LetterShow, - upMessShow: this.upMessShow, - upRingShow: this.upRingShow, - upHouseShow: this.upHouseShow, - upNickShow: this.upNickShow, - upWebShow: this.upWebShow, - upBirthShow: this.upBirthShow, - upAssShow: this.upAssShow - }; - this.$app.$def.globalData.groupParams = params; - router.back(); - }, - - back () { - router.back({ - path:'pages/contacts/accountants/accountants' - }); - }, - - copy(obj) { - LOG.info(TAG + 'copy obj' + obj) - return JSON.parse(JSON.stringify(obj)); - }, -} diff --git a/entry/src/main/js/default/pages/contacts/groups/groupListWithContacts/groupListWithContacts.css b/entry/src/main/js/default/pages/contacts/groups/groupListWithContacts/groupListWithContacts.css deleted file mode 100644 index 150197e..0000000 --- a/entry/src/main/js/default/pages/contacts/groups/groupListWithContacts/groupListWithContacts.css +++ /dev/null @@ -1,367 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - flex-direction: column; - justify-content: flex-start; - align-items: center; - background-color: #FFF; - width: 100%; - height: 100%; -} - -.title-div { - flex-direction: row; - width: 100%; - align-items: center; - justify-content: flex-start; - margin-left: 24px; - margin-top: 10px; - position: relative; -} - -.back-but-div { - width: 93px; - height: 93px; - border-radius: 15px; - align-items: center; -} - -.back-but-div:active { - width: 93px; - height: 93px; - border-radius: 15px; - align-items: center; - background-color: #f3f3f3; -} - -.back-image { - margin-left: 21px; - width: 50px; - height: 50px; - border-radius: 10px; -} - -.title-text { - align-items: center; - justify-content: center; - margin-left: 15px; - font-size: 40px; - font-weight: 500; -} - -.tab-content-no-data { - height: 100%; - justify-content: center; - align-items: center; - flex-direction: column; - margin-bottom: 20px; -} - -.tab-content-no-data-image { - height: 160px; - width: 160px; -} - -.tab-content-no-data-text { - font-size: 28px; - color: #808080; -} - -.list { - margin-top: 30px; -} - -.list-item { - align-items: center; - margin-left: 20px; - justify-content: center; - flex-direction: column; -} - -.phoneNum-item { - align-items: center; - height: 100px; - margin-left: 20px; - justify-content: flex-start; -} - -.phoneNum-item-div { - align-items: center; - height: 130px; - margin-left: 20px; - justify-content: flex-start; -} - -.contact-item { - align-items: center; - margin-left: 20px; - flex-direction: column; - justify-content: flex-start; -} - -.list-content-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: flex-start; - padding-left: 45px; -} - -.list-item-div { - position: relative; - flex-direction: column; - align-items: flex-start; - justify-content: space-around; - padding-top: 10px; - padding-bottom: 10px; -} - -.list-item-line { - width: 100%; - height: 1px; - border-bottom: 1px; - border-color: #D3D3D3; - flex-direction: column; - align-items: center; -} - -.name-text { - text-overflow: ellipsis; - max-lines: 2; - font-weight: 600; - width: 560px; - font-size: 30px; -} - -.contact-phone-groups-div { - margin-top: 5px; - height: 90px; - align-items: center; - justify-content: flex-start; -} - -.contact-smart-groups-text { - margin-left: 10px; - font-size: 26px; - font-weight: 500; - color: #646464; -} - -.expand-div { - flex-direction: row; - justify-content: flex-start; - align-items: center; - height: 50px; - width: 50px; -} - -.todo-content-div { - flex-direction: row; - justify-content: flex-start; - align-items: center; -} - -.phoneNumber-content-div { - flex-direction: row; - margin-left: 22%; - height: 130px; - justify-content: flex-start; - align-items: center; -} - -.phoneNumber-content-div1 { - flex-direction: row; - height: 130px; - justify-content: flex-start; - align-items: center; -} - -.first { - width: 20%; -} - -.todo-content-button { - width: 90%; - height: 90%; - background-color: #DACEB5; -} - -.todo-content-name-last { - width: 90%; - height: 85%; - text-align: center; - font-size: 38px; - allow-scale: true; - font-weight: 600; - color: #FFF; -} - -.todo-item-content-div { - width: 90%; - height: 76%; - align-items: center; - justify-content: center; -} - -.todo-item-content-image { - width: 80px; - height: 80px; - border-radius: 60px; -} - -.todo-name-suffix-div { - flex-direction: column; - align-items: center; - justify-content: center; - width: 80px; - height: 80px; - border-radius: 60px; - background-color: #D5BAC1; -} - -.todo-content-div-div { - flex-direction: column; - justify-content: center; - align-items: flex-start; - margin-start: 32px; - width: 75%; -} - -.todo-content-name { - width: 100%; - text-align: left; - align-items: center; - font-size: 32px; - font-weight: 600; - max-lines: 1; - text-overflow: ellipsis; -} - -.todo-content { - margin-top: 9px; - width: 100%; - text-align: left; - max-lines: 1; - color: #636363; - font-size: 28px; -} - -.todo-divider-div { - flex-direction: column; - justify-content: flex-start; - align-items: flex-start; - position: absolute; - bottom: 0; - width: 100%; - margin-left: 22%; - margin-right: 60px; -} - -.todo-divider-div1 { - flex-direction: column; - justify-content: flex-start; - align-items: flex-start; - position: absolute; - bottom: 0; - width: 100%; - margin-left: 50px; - margin-right: 60px; -} - -.phoneNum-divider-div { - flex-direction: column; - justify-content: flex-start; - align-items: flex-start; - position: absolute; - bottom: 0; - width: 100%; - margin-left: -37px; - margin-right: 60px; -} - -.group-divider-div { - flex-direction: column; - justify-content: flex-start; - align-items: center; - position: absolute; - bottom: 0; - margin-left: 20px; - margin-right: 60px; -} - -.todo-divider { - line-cap: round; - stroke-width: 1px; - color: #ccc; -} - -.group-favorite-divider { - width: 100%; - height: 15px; - background-color: #F2F2F2; -} - -.group-item-right-checkbox { - justify-content: center; - align-items: center; - width: 120px; - border-radius: 10px; - margin-right: 50px; -} - -.contact-checkbox-div { - justify-content: center; - align-items: center; - width: 150px; - border-radius: 10px; - margin-right: 48px; -} - -.phoneNumber-checkbox-div { - justify-content: center; - align-items: center; - width: 150px; - border-radius: 10px; - margin-right: 36px; -} - -.group-item-right-checkbox1 { - justify-content: center; - align-items: center; - width: 120px; - border-radius: 10px; - margin-right: 50px; -} - -.contact-checkbox-div1 { - justify-content: center; - align-items: center; - width: 150px; - border-radius: 10px; - margin-right: 30px; -} - -.phoneNumber-checkbox-div1 { - justify-content: center; - align-items: center; - width: 150px; - border-radius: 10px; - margin-right: 30px; -} - -.checkbox { - height: 80px; - width: 80px; -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/groups/groupListWithContacts/groupListWithContacts.hml b/entry/src/main/js/default/pages/contacts/groups/groupListWithContacts/groupListWithContacts.hml deleted file mode 100644 index 753459f..0000000 --- a/entry/src/main/js/default/pages/contacts/groups/groupListWithContacts/groupListWithContacts.hml +++ /dev/null @@ -1,237 +0,0 @@ - -
-
-
- -
- - {{ title }} - -
-
- - {{ $t('value.contacts.selectContacts.noGroups') }} - -
- - -
-
-
- -
-
- -
-
- {{ $t('value.favorites.page.title') }} -
-
- {{ favoritesItem.contactBeans.length }} -
-
- - -
-
-
-
-
-
-
-
- - -
-
-
- {{ contactItem.nameSuffix }} - -
-
-
-
- - -
-
-
-
-
- - {{ - contactItem.emptyNameData ? contactItem.emptyNameData : $t('value.contacts.page.item.noName') - }} - - {{ phoneNumber.labelName + ' ' }}{{ - phoneNumber.phoneNumber }} - -
-
-
- - -
-
-
-
-
- {{ phoneNumber.labelName + ' ' }}{{ - phoneNumber.phoneNumber }} - -
-
- - -
- - -
-
-
- -
-
-
- -
-
-
-
-
- - -
- - {{ $t('value.contacts.groupsPage.mobilePhone') }} - -
-
- - -
-
-
- -
-
- -
-
- {{ groupItem.title }} -
-
- {{ groupItem.contactBeans.length }} -
-
- - -
-
-
-
-
-
-
-
- - -
-
-
- {{ contactItem.nameSuffix }} - -
-
-
-
- - -
-
-
-
-
- - {{ - contactItem.emptyNameData ? contactItem.emptyNameData : $t('value.contacts.page.item.noName') - }} - - {{ phoneNumber.labelName + ' ' }}{{ - phoneNumber.phoneNumber }} - -
-
-
- - -
-
-
-
-
- {{ phoneNumber.labelName + ' ' }}{{ - phoneNumber.phoneNumber }} - -
-
- - -
- - -
-
-
- -
-
-
- -
-
-
-
-
- - -
- -
-
-
\ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/groups/groupListWithContacts/groupListWithContacts.js b/entry/src/main/js/default/pages/contacts/groups/groupListWithContacts/groupListWithContacts.js deleted file mode 100644 index 729eecf..0000000 --- a/entry/src/main/js/default/pages/contacts/groups/groupListWithContacts/groupListWithContacts.js +++ /dev/null @@ -1,284 +0,0 @@ -/** - * @file Contact Group List - */ - -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import router from '@system.router'; -import groupReq from '../../../../../default/model/GroupsModel.js'; -import LOG from '../../../../utils/ContactsLog.js'; -import Constants from '../../../../../default/common/constants/Constants.js'; - -var TAG = 'groupListWithContacts...:'; - -export default { - props: ['titleShow', 'checkItemState', 'checkedNumberMap'], - data: { - page: 0, // Initial load current page - limit: 20, - groupList: [], - favoritesItem: { - contactBeans: [], - checked: false, - expand: false, - contactCount: 0, - }, - phoneNumberLabelNames: [], - title: '', // Page title - layoutState: true, // Introduction layout - checkedNum: 0 // Selected quantity - }, - onInit() { - LOG.info(TAG + 'onInit success'); - this.title = this.$t('value.contacts.groupsPage.noSelect'); - - this.phoneNumberLabelNames = [this.$t('accountants.house'), this.$t('accountants.phone'), - this.$t('accountants.unit'), this.$t('accountants.unit fax'), this.$t('accountants.home fax'), - this.$t('accountants.pager'), this.$t('accountants.others'), '', '', '', '', - this.$t('accountants.switchboard')]; - - this.conciseLayoutInit(); - var requestData = { - page: this.page, - limit: this.limit, - phoneNumberLabelNames: this.phoneNumberLabelNames, - filterItem: 'phone' - }; - this.getGroupList(requestData); - this.$app.$def.globalData.batchSelectContactsRefreshFunction.push(()=> { - this.groupList.forEach((groupItem) => { - this.refreshContactCheckState(groupItem); - }); - this.refreshContactCheckState(this.favoritesItem); - }); - }, - - conciseLayoutInit: function () { - LOG.info(TAG + 'conciseLayoutInit success'); - let data = this.$app.$def.globalData.storage.getSync('contacts_settings_concise_layout_switch', 'false'); - this.layoutState = data == 'true' ? false : true; - }, - - refreshCheckState: function () { - this.groupList.forEach((groupItem) => { - LOG.info(TAG + 'refreshCheckState groupItem' + groupItem); - this.refreshContactCheckState(groupItem); - }); - this.refreshContactCheckState(this.favoritesItem); - }, - refreshContactCheckState: function (groupItem) { - LOG.info(TAG + 'refreshContactCheckState groupItem' + groupItem); - groupItem.checked = false; - var expandChecked = true; // Do you want to select a group; - var tempContactBeans = []; - groupItem.contactBeans.forEach((contactItem) => { - if (contactItem.phoneNumbers && contactItem.phoneNumbers.length != 0) { - for (var i = 0; i < contactItem.phoneNumbers.length; i++) { - var phoneNumber = contactItem.phoneNumbers[i]; - if (this.checkedNumberMap.has(phoneNumber.phoneNumber.replace(/\s+/g, ''))) { // Selected - phoneNumber.checked = true; - } else { - if (phoneNumber.checked) { - phoneNumber.checked = false; - } - if (i == 0) { // When the first contact in the group is not selected, the group is not selected - expandChecked = false; - } - } - } - tempContactBeans.push(contactItem); - } - }); - groupItem.contactBeans = tempContactBeans; - if (expandChecked) { - groupItem.checked = true; - } - }, - - // Cache paging load - requestItem: function () { - this.page++; - var requestData = { - page: this.page, - limit: this.limit, - phoneNumberLabelNames: this.phoneNumberLabelNames, - filterItem: 'phone' - }; - LOG.info(TAG + 'requestItem requestData' + requestData); - this.getGroupList(requestData); - }, - - // Get group list - getGroupList: function (actionData) { - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.getGroupListAndContacts(DAHelper, actionData, result=>{ - if (result.code == 0) { - LOG.info(TAG + 'get group list come code'); - if (result.resultList.length > 0) { - // Traverse the default values for the check boxes - result.resultList.forEach((groupItem) => { - groupItem.checked = false; - groupItem.expand = false; - var tempContactBeans = []; - if (groupItem.contactBeans && groupItem.contactBeans.length > 0) { - groupItem.contactBeans.forEach((contactItem) => { - if (contactItem.phoneNumbers && contactItem.phoneNumbers.length != 0) { - contactItem.phoneNumbers.forEach((phoneNumber) => { - phoneNumber.checked = false; - }); - tempContactBeans.push(contactItem); - } - LOG.info(TAG + 'logMessage contactItem ' + contactItem); - }); - groupItem.contactBeans = tempContactBeans; - if (groupItem.contactCount != 0 && tempContactBeans.length != 0) { - this.groupList = this.groupList.concat(groupItem); - } - } - }); - } - } else { - LOG.error(TAG + 'query groups code is ' + result.code); - } - }); - }, - - groupExpand: function (groupItem) { - LOG.info(TAG + 'groupExpand groupItem' + groupItem); - groupItem.expand = !groupItem.expand; - }, - - groupItemChecked: function (groupItem) { - LOG.info(TAG + 'groupItemChecked groupItem' + groupItem); - groupItem.checked = !groupItem.checked; - let temNum = 0; - var checkedList = []; - var keyNumber = ''; - if (groupItem.checked) { - groupItem.contactBeans.forEach((contact) => { - if (!contact.phoneNumbers[0].checked) { - temNum++; - } - contact.phoneNumbers[0].checked = true; - keyNumber = contact.phoneNumbers[0].phoneNumber.replace(/\s+/g, ''); - if (!this.checkedNumberMap.has(keyNumber)) { - checkedList.push({ - name: contact.emptyNameData, - number: keyNumber - }); - } - this.initOtherGroupCheckbox(0, contact); - }); - this.checkedNum = this.checkedNum + temNum; - if (checkedList.length > 0) { - this.$emit('addCheckedContact', { - checkedList: checkedList // Selected number to add - }); - } - } else { - groupItem.contactBeans.forEach((contact) => { - LOG.info(TAG + 'groupItemChecked contact' + contact); - contact.phoneNumbers.forEach((phoneNum, phoneNumIndex) => { - if (phoneNum.checked) { - temNum++; - checkedList.push({ - name: contact.emptyNameData, - number: phoneNum.phoneNumber.replace(/\s+/g, '') - }); - } - phoneNum.checked = false; - this.initOtherGroupCheckbox(phoneNumIndex, contact); - }); - }); - if (checkedList.length > 0) { - this.$emit('deleteCheckedContact', { - checkedList: checkedList // Selected number to delete - }); - } - this.checkedNum = this.checkedNum - temNum; - } - this.initTitle(); - }, - - contactItemClick: function (phoneNumIndex, contactItem, groupItem) { - LOG.info(TAG + 'contactItemClick contactItem' + contactItem); - contactItem.phoneNumbers[phoneNumIndex].checked = !contactItem.phoneNumbers[phoneNumIndex].checked; - if (contactItem.phoneNumbers[phoneNumIndex].checked) { - this.checkedNum++; - this.initOtherGroupCheckbox(phoneNumIndex, contactItem); - this.$emit('addCheckedContact', { - checkedList: [{ - name: contactItem.emptyNameData, - number: contactItem.phoneNumbers[phoneNumIndex].phoneNumber.replace(/\s+/g, '') - }] // Selected number to add - }); - } else { - this.checkedNum--; - this.initOtherGroupCheckbox(phoneNumIndex, contactItem); - this.$emit('deleteCheckedContact', { - checkedList: [{ - name: contactItem.emptyNameData, - number: contactItem.phoneNumbers[phoneNumIndex].phoneNumber.replace(/\s+/g, '') - }] // Selected number to cancel - }); - } - this.initTitle(); - }, - - initOtherGroupCheckbox: function (phoneNumIndex, contactItem) { - LOG.info(TAG + 'initOtherGroupCheckbox contactItem' + contactItem); - // Traverse other groups. If the same contact is selected, other groups also need to be selected - this.groupList.forEach((group) => { - this.initGroupContactsCheckBox(group, phoneNumIndex, contactItem); - }); - this.initGroupContactsCheckBox(this.favoritesItem, phoneNumIndex, contactItem); - }, - - initGroupContactsCheckBox: function (group, phoneNumIndex, contactItem) { - LOG.info(TAG + 'initGroupContactsCheckBox contactItem' + contactItem); - var checkedNum = 0; - group.contactBeans.forEach((contact) => { - // The same number under the same contact has the same selected status - if (contact.contactId == contactItem.contactId) { - contact.phoneNumbers[phoneNumIndex].checked = contactItem.phoneNumbers[phoneNumIndex].checked; - } - - if (contact.phoneNumbers[0].checked) { - checkedNum++; - } - }); - if (group.contactBeans.length == checkedNum) { - group.checked = true; - } else { - group.checked = false; - } - }, - - initTitle: function () { - if (this.checkedNum != 0) { - this.title = this.$t('value.contacts.groupsPage.alreadySelect').replace('num', this.checkedNum + ''); - } else { - this.title = this.$t('value.contacts.groupsPage.noSelect'); - } - }, - - back: function () { - router.back(); - }, - - onDestroy() { - this.$app.$def.globalData.batchSelectContactsRefreshFunction.pop(); - }, -}; diff --git a/entry/src/main/js/default/pages/contacts/groups/groupMembersList/groupMembersList.css b/entry/src/main/js/default/pages/contacts/groups/groupMembersList/groupMembersList.css deleted file mode 100644 index 5b36554..0000000 --- a/entry/src/main/js/default/pages/contacts/groups/groupMembersList/groupMembersList.css +++ /dev/null @@ -1,379 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - flex-direction: column; - justify-content: flex-start; - align-items: center; - background-color: #FFF; - width: 100%; - height: 100%; -} - -.title-div { - flex-direction: row; - align-items: center; - justify-content: flex-start; - width: 100%; - height: 18%; - margin-left: 24px; - margin-top: 10px; - position: relative; -} - -.back-but-div { - width: 100px; - height: 100px; - border-radius: 15px; - align-items: center; -} - -.back-but-div:active { - width: 93px; - height: 93px; - border-radius: 15px; - align-items: center; - background-color: #f3f3f3; -} - -.back-image { - margin-left: 21px; - width: 50px; - height: 50px; - border-radius: 10px; -} - -.title-text { - align-items: center; - justify-content: center; - margin-left: 15px; - font-size: 40px; - font-weight: 500; -} - -.title-text-little { - text-overflow: ellipsis; - max-lines: 2; - align-items: center; - justify-content: center; - margin-left: 15px; - font-size: 30px; - font-weight: 500; -} - -.free-space { - align-content: center; - justify-content: center; - align-items: center; - flex-direction: column; - width: 100%; - height: 84%; -} - -.contacts-image-icon { - width: 210px; - height: 210px; -} - -.free-space-text { - font-size: 28px; - margin-top: -22px; - font-weight: 400; - color: #999; -} - -.list { - margin-top: 30px; -} - -.list-item { - position: relative; - flex-direction: column; - align-items: center; - height: 120px; - width: 100%; - justify-content: flex-start; -} - -.contact-phone-groups-div { - width: 100%; - align-items: center; - align-content: center; - margin-top: 5px; - height: 90px; - justify-content: flex-start; -} - -.contact-smart-groups-text { - margin-left: 45px; - font-size: 24px; - font-weight: 500; - color: #646464; -} - -.list-content-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: flex-start; - padding-left: 45px; -} - -.list-item-div { - position: relative; - flex-direction: column; - align-items: flex-start; - justify-content: space-around; - padding-top: 10px; - padding-bottom: 10px; -} - -.list-item-line { - width: 100%; - margin-right: 40px; - margin-left: 45px; - height: 1px; - border-bottom: 1px; - border-color: #D3D3D3; -} - -.name-text { - text-overflow: ellipsis; - max-lines: 2; - width: 560px; - font-size: 30px; -} - -.todo-item { - width: 454px; - height: 123px; - flex-direction: row; - columns: 1; - align-items: stretch; - padding-left: 20px; - padding-right: 20px; -} - -.todo-content-div { - flex-direction: row; - justify-content: flex-start; - align-items: center; - width: 100%; - height: 100%; -} - -.first { - width: 20%; - margin-left: 25px; -} - -.todo-name-suffix-div { - flex-direction: column; - align-items: center; - justify-content: center; - width: 80px; - height: 80px; - border-radius: 60px; - background-color: #D5BAC1; -} - -.todo-content-name-last { - width: 90%; - height: 65%; - text-align: center; - font-size: 38px; - allow-scale: true; - font-weight: 600; - color: #FFF; -} - -.todo-item-content-div { - width: 90%; - height: 76%; - align-items: center; - justify-content: center; -} - -.todo-item-content-image { - width: 80px; - height: 80px; - border-radius: 60px; -} - -.todo-content-div-div { - flex-direction: column; - justify-content: center; - align-items: flex-start; - margin-start: 20px; - width: 88%; -} - -.todo-content-name { - width: 100%; - text-align: left; - font-size: 30px; - font-weight: 600; - max-lines: 1; - text-overflow: ellipsis; -} - -.todo-content { - margin-top: 9px; - width: 100%; - text-align: left; - max-lines: 1; - text-overflow: ellipsis; - color: #636363; - font-size: 28px; -} - -.todo-divider-div { - margin-start: 20px; - flex-direction: column; - justify-content: flex-start; - align-items: flex-start; - position: absolute; - bottom: 0; - width: 100%; -} - -.todo-divider { - line-cap: round; - stroke-width: 1px; - color: #ccc; -} - -.batch-delete-operation { - width: 580px; - height: 160px; - justify-content: center; -} - -.batch-delete-operation-button { - width: 20px; - height: 20px; - border-radius: 15px; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.batch-delete-image-icon { - width: 45px; - height: 45px; -} - -.batch-delete-text { - font-size: 21px; -} - -.batch-delete-operation-button { - width: 30%; - height: 100%; - border-radius: 15px; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.batch-delete-operation-button:active { - background-color: #D3D3D3; -} - -.batch-delete-operation-button:disabled { - opacity: .5; -} - -.menu-contactName { - font-size: 45px; - font-weight: 600; -} - -.dialog-main { - width: 90%; - align-items: center; -} - -.dialog-input { - border-left: -30px; - width: 85%; - background-color: transparent; - border-bottom: 1px solid #D3D3D3; -} - -.dialog-input-active { - border-left: -30px; - width: 85%; - background-color: transparent; - border-bottom: 1px solid #4e4e4e; -} - -.inner-txt { - width: 400px; - height: 160px; - flex-direction: column; - align-items: flex-start; - justify-content: space-around; - margin-right: 150px; -} - -.txt { - font-size: 30px; -} - -.dialog-div { - flex-direction: column; - align-items: center; - border-style: dotted; - border-radius: 50px; -} - -.inner-btn { - width: 90%; - height: 120px; - justify-content: space-around; - align-items: center; -} - -.btn-txt { - width: 40%; - height: 70%; - border-radius: 30px; - background-color: transparent; - text-color: #175cfe; - font-size: 30px; -} - -.cancel-btn-txt { - width: 40%; - height: 70%; - border-radius: 50px; - background-color: transparent; - text-color: #175cfe; - font-size: 30px; -} - -.delete-btn-txt { - width: 40%; - height: 70%; - border-radius: 30px; - background-color: transparent; - text-color: #FE1745; - font-size: 30px; -} - -.deleteGroupText { - width: 85%; - background-color: transparent; -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/groups/groupMembersList/groupMembersList.hml b/entry/src/main/js/default/pages/contacts/groups/groupMembersList/groupMembersList.hml deleted file mode 100644 index 41ed4c6..0000000 --- a/entry/src/main/js/default/pages/contacts/groups/groupMembersList/groupMembersList.hml +++ /dev/null @@ -1,179 +0,0 @@ - -
-
-
- -
- - {{ groupItem.title }} - - - {{ groupItem.title }} - -
-
- - - {{ $t('value.contacts.groupsPage.noContacts') }} - -
- - - -
- - {{ $t('value.contacts.groupsPage.hasNumContactsFrom').replace("num", contactCount + "") }} - -
-
- -
-
- -
-
-
- {{ item.nameSuffix }} - -
-
-
-
- - -
-
-
-
-
- - {{ item.emptyNameData ? item.emptyNameData : $t('value.contacts.page.item.noName') }} - -
-
- -
-
-
-
- - - - - - - - - - - -
-
- - {{ $t('value.contacts.groupsPage.addMember') }} - -
-
- - {{ $t('value.contacts.groupsPage.rename') }} - -
-
- - {{ $t('value.contacts.groupsPage.groupRing') }} - -
-
- - {{ $t('value.contacts.groupsPage.deleteGroup') }} - -
-
- - {{ $t('value.contacts.groupsPage.sendMessage') }} - -
-
- - {{ $t('value.contacts.groupsPage.sendEmail') }} - -
-
- - {{ $t('value.contacts.groupsPage.more') }} - -
-
- - - -
-
- {{ - $t('value.contacts.groupsPage.renameGroup') }} -
- -
- - | - -
-
-
- - - -
-
- {{ - $t('value.contacts.groupsPage.deleteThisGroup') }} -
- - {{ $t('value.contacts.groupsPage.deleteGroupTip') }} -
- - | - -
-
-
-
\ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/groups/groupMembersList/groupMembersList.js b/entry/src/main/js/default/pages/contacts/groups/groupMembersList/groupMembersList.js deleted file mode 100644 index 043cc71..0000000 --- a/entry/src/main/js/default/pages/contacts/groups/groupMembersList/groupMembersList.js +++ /dev/null @@ -1,280 +0,0 @@ -/** - * @file Group membership list - */ - -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import router from '@system.router'; -import prompt from '@system.prompt'; -import groupReq from '../../../../../default/model/GroupsModel.js'; -import LOG from '../../../../utils/ContactsLog.js'; -import Constants from '../../../../../default/common/constants/Constants.js'; -import backgroundColor from '../../../../common/constants/color.js'; - -var TAG = 'groupMembersList...:'; - -export default { - data: { - groupItem: { - title: '' - }, // Group object - contactCount: 0, - layoutState: true, - dialogInputActive: false, // The input box of dialog is not activated by default - contactsList: [], // Data list - operateItem: {}, // Long press and hold the contact item - newGroupName: '', - showEmptyPage: false, - menuContactName: '', // Long press the title of the menu - page: 0, - limit: 20, // Number of entries per page - backgroundColor: backgroundColor.Color - }, - onInit() { - LOG.info(TAG + 'onInit success'); - this.conciseLayoutInit(); - }, - onShow() { - LOG.info(TAG + 'onShow success'); - this.page = 0; - this.getContactsList(); - }, - - conciseLayoutInit: function () { - LOG.info(TAG + 'conciseLayoutInit success'); - let data = this.$app.$def.globalData.storage.getSync('contacts_settings_concise_layout_switch', 'false'); - this.layoutState = data == 'true' ? false : true; - }, - - requestItem: function () { - this.page++; - }, - - getContactsList: function () { - var actionData = { - page: this.page, - limit: this.limit, - groupId: this.groupItem.groupId - }; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.queryGroupMembers(DAHelper, actionData, result => { - setInterval(() => { - LOG.info(TAG + 'delay 1 s'); - }, 1000); - if (result.code == 0) { - if (result.resultList) { - this.contactCount = result.totalCount; - if (this.page == 0) { - this.contactsList = result.resultList; - } else { - this.contactsList = this.contactsList.concat(result.resultList); - } - } else { - this.contactsList = []; - } - } else { - prompt.showToast({ - message: 'Failed to init data.' - }); - } - if (this.contactsList.length == 0) { - this.showEmptyPage = true; - } else { - this.showEmptyPage = false; - } - }); - }, - - jumpToContactDetail: function (item) { - LOG.info(TAG + 'jumpToContactDetail item' + item); - router.push({ - uri: 'pages/contacts/contactDetail/contactDetail', - params: { - contactId: item.contactId, - isNewSource: true - } - }); - }, - - listItemTouchStart: function (event) { - this.position = {}; - this.position.X = Math.round(event.touches[0].globalX); - this.position.Y = Math.round(event.touches[0].globalY); - }, - - itemLongPress: function (item) { - LOG.info(TAG + 'itemLongPress item' + item); - this.operateItem = item; - let name = item.emptyNameData ? item.emptyNameData : this.$t('value.contacts.page.item.noName'); - if (item.emptyNameData && name && name.length > 4) { - this.menuContactName = name.substring(0, 4) + '..'; - } else { - this.menuContactName = name; - } - var tempX = this.position.X > 360 ? 360 : this.position.X; - var tempY = this.position.Y > 1100 ? 1100 : this.position.Y; - clearTimeout(this.menuTimeOutId); - this.menuTimeOutId = setTimeout(() => { - this.$element('contactItemMenu').show({ - x: tempX, - y: tempY - }); - }, 1); - }, - menuSelected: function (event) { - if (event.value == 'deleteFromGroup') { - let contactBeans = {}; - contactBeans.contactId = this.operateItem.contactId; - var actionData = { - groupId: this.groupItem.groupId, - contactBeans: [contactBeans], - isOperationAll: false - }; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.deleteGroupMembers(DAHelper, actionData, result => { - this.onShow(); - }); - } - }, - moreMenuSelected: function (event) { - if (event.value == 'deleteMember') { - router.push({ - uri: 'pages/contacts/selectContactsList/selectContactsList', - params: { - groupId: this.groupItem.groupId, - type: 'removeMemberFromGroups' - }, - }); - } - if (event.value == 'deleteGroup') { - this.$element('deleteGroupDialog').show(); - } - if (event.value == 'rename') { - this.dialogInputActive = false; - this.$element('renameGroupDialog').show(); - } - }, - - changeStyle: function () { - this.dialogInputActive = true; - }, - - back: function () { - router.back(); - }, - - clickAddMember: function () { - router.push({ - uri: 'pages/contacts/selectContactsList/selectContactsList', - params: { - groupId: this.groupItem.groupId, - type: 'addMemberFromGroups' - }, - }); - }, - - clickSendMsg: function () { - router.push({ - uri: 'pages/contacts/groups/selectGroupMembers/selectGroupMembers', - params: { - groupId: this.groupItem.groupId, - type: 'sendMsg' - }, - }); - }, - - clickSendEmail: function () { - router.push({ - uri: 'pages/contacts/groups/selectGroupMembers/selectGroupMembers', - params: { - groupId: this.groupItem.groupId, - type: 'sendEmail' - }, - }); - }, - - renameGroup: function () { - this.dialogInputActive = false; - this.$element('renameGroupDialog').show(); - }, - - doDeleteGroup: function () { - this.$element('deleteGroupDialog').show(); - }, - - doClickMore: function () { - clearTimeout(this.menuTimeOutId); - this.menuTimeOutId = setTimeout(() => { - this.$element('moreMenu').show({ - x: this.touchMoveStartX, - y: this.touchMoveStartY - }); - }, 1); - }, - - moreTouchStart: function (e) { - LOG.info(TAG + 'moreTouchStart e' + e); - this.touchMoveStartX = e.touches[0].globalX; - this.touchMoveStartY = e.touches[0].globalY; - }, - - renameGroupNameChanged: function (e) { - LOG.info(TAG + 'renameGroupNameChanged e' + e); - this.newGroupName = e.value; - }, - - confirmUpdateGroup: function () { - this.$element('renameGroupDialog').close(); - if (this.newGroupName == this.groupItem.title) { - return; - } - var actionData = {}; - actionData.title = this.newGroupName; - actionData.groupId = this.groupItem.groupId; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.updateGroup(DAHelper, actionData, data =>{ - if (data == 0) { - this.groupItem.title = this.newGroupName; - } else if (data == -2) { - prompt.showToast({ - message: this.$t('value.contacts.groupsPage.alreadyExists') - }); - } else { - LOG.error(TAG + 'add group error. code is ' + data); - } - }); - - }, - - cancelUpdateGroup: function () { - this.$element('renameGroupDialog').close(); - }, - - confirmDeleteGroup: function () { - this.$element('deleteGroupDialog').close(); - var actionData = { - ids: [this.groupItem.groupId] - }; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.deleteGroups(DAHelper, actionData.ids, result => { - router.back(); - }); - }, - - cancelDeleteGroup: function () { - this.$element('deleteGroupDialog').close(); - }, - -}; diff --git a/entry/src/main/js/default/pages/contacts/groups/groups.css b/entry/src/main/js/default/pages/contacts/groups/groups.css deleted file mode 100644 index 2dc3e5c..0000000 --- a/entry/src/main/js/default/pages/contacts/groups/groups.css +++ /dev/null @@ -1,320 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - flex-direction: column; - justify-content: flex-start; - align-items: center; - width: 100%; - height: 100%; - background-color: #FFF; -} - -.groups-title-div { - flex-direction: row; - align-items: center; - justify-content: flex-start; - margin-left: 24px; - width: 100%; - height: 110px; - margin-top: 10px; - position: relative; - margin-bottom: 10px; -} - -.free-space { - align-content: flex-start; - justify-content: flex-start; - align-items: center; - flex-direction: column; - width: 100%; - height: 84%; -} - -.contacts-image-icon { - margin-top: 42%; - width: 210px; - height: 210px; -} - -.free-space-text { - font-size: 28px; - margin-top: -22px; - font-weight: 400; - color: #999; -} - -.groups-back-but-div { - width: 70px; - height: 70px; - border-radius: 15px; - align-items: center; -} - -.groups-back-but-div:active { - width: 93px; - height: 93px; - border-radius: 15px; - align-items: center; - background-color: #f3f3f3; -} - -.groups-back-image { - margin-left: 21px; - width: 50px; - height: 50px; - border-radius: 10px; -} - -.groups-title-text { - align-items: center; - justify-content: center; - margin-left: 15px; - font-size: 33px; - font-weight: 500; -} - -.divider { - line-cap: round; - stroke-width: 1px; - color: #ccc; - width: 87%; -} - -.blank-article-div { - height: 14px; - width: 100%; - background-color: #ececec; -} - -.group-list { - height: 84%; -} - -.list-item { - position: relative; - flex-direction: column; - height: 100px; - width: 100%; - align-items: center; - justify-content: flex-start; - margin-bottom: 10px; -} - -.contact-smart-groups-div { - height: 120px; - align-items: center; - flex-direction: column; - justify-content: flex-start; -} - -.contact-phone-groups-div { - margin-top: 5px; - height: 90px; - margin-left: 10px; - width: 100%; - align-items: center; - justify-content: flex-start; -} - -.contact-smart-groups-text { - margin-left: 45px; - font-size: 26px; - font-weight: 500; - color: #646464; -} - -.groups-content-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: flex-start; - padding-left: 45px; - height: 130px; -} - -.groups-content-text { - width: 560px; - font-size: 31px; -} - -.flex-manage-image { - right: -20px; - width: 30px; - height: 30px; - border-radius: 60px; -} - -.mobile-groups-content-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: flex-start; - height: 100%; -} - -.mobile-groups-div { - position: relative; - flex-direction: column; - align-items: flex-start; - justify-content: space-around; - padding-top: 10px; - padding-bottom: 5px; -} - -.mobile-groups-name-text { - text-overflow: ellipsis; - max-lines: 2; - width: 560px; - font-size: 28px; -} - -.mobile-groups-count-text { - margin-top: 8px; - width: 560px; - font-size: 26px; - color: #646464; -} - -.mobile-groups-image { - right: -20px; - width: 30px; - height: 30px; - border-radius: 60px; -} - -.batch-delete-operation { - width: 300px; - height: 85px; - display: flex; - justify-content: space-between; -} - -.batch-delete-operation-button { - width: 80px; - height: 85px; - border-radius: 15px; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.batch-delete-image-icon { - width: 50px; - height: 50px; -} - -.batch-delete-text { - font-size: 22px; -} - -.batch-delete-operation-button:active { - background-color: #D3D3D3; -} - -.batch-delete-operation-button:disabled { - opacity: .5; -} - -.dialog-main { - width: 90%; - align-items: center; -} - -.dialog-input { - border-left: -30px; - width: 85%; - background-color: transparent; - border-bottom: 1px solid #D3D3D3; -} - -.dialog-input-active { - width: 85%; - border-left: -30px; - background-color: transparent; - border-bottom: 1px solid #4e4e4e; -} - -.inner-txt { - width: 400px; - height: 160px; - flex-direction: column; - align-items: flex-start; - justify-content: space-around; - margin-right: 150px; -} - -.txt { - font-size: 30px; -} - -.dialog-div { - flex-direction: column; - align-items: center; - border-style: dotted; - border-radius: 50px; -} - -.inner-btn { - width: 90%; - height: 120px; - justify-content: space-around; - align-items: center; -} - -.btn-txt { - width: 40%; - height: 70%; - border-radius: 30px; - background-color: transparent; - text-color: #175cfe; - font-size: 30px; -} - -.list-item-line { - width: 100%; - margin-right: 40px; - margin-left: 45px; - height: 1px; - border-bottom: 1px; - border-color: #D3D3D3; -} - -.cancel-btn-txt { - width: 40%; - height: 70%; - border-radius: 50px; - background-color: transparent; - text-color: #175cfe; - font-size: 30px; -} - -.delete-btn-txt { - width: 40%; - height: 70%; - border-radius: 30px; - background-color: transparent; - text-color: #FE1745; - font-size: 30px; -} - -.deleteGroupText { - width: 85%; - background-color: transparent; -} - -.menu-groupName { - font-size: 45px; - font-weight: 600; -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/groups/groups.hml b/entry/src/main/js/default/pages/contacts/groups/groups.hml deleted file mode 100644 index 4dbb794..0000000 --- a/entry/src/main/js/default/pages/contacts/groups/groups.hml +++ /dev/null @@ -1,161 +0,0 @@ - -
-
- -
- -
- - {{ $t('value.contacts.groupsPage.title') }} - -
- - - - -
- - {{ $t('value.contacts.groupsPage.smartGroups') }} - -
-
- - -
-
- - {{ $t('value.contacts.groupsPage.RecentContacts') }} - -
- -
-
-
- -
- - {{ $t('value.contacts.groupsPage.mobilePhone') }} - -
-
- - - - -
-
- - {{ item.title }} - - - {{ item.contactCount }} {{ $t('value.contacts.groupsPage.people') }} - -
- -
- -
-
- -
- - - - - -
-
- - {{ $t('value.contacts.groupsPage.new') }} - -
-
- - {{ $t('value.contacts.groupsPage.delete') }} - -
-
- - - -
-
- {{ - $t('value.contacts.groupsPage.addGroup') }} -
- -
- - | - -
-
-
- - - -
-
- {{ - $t('value.contacts.groupsPage.renameGroup') }} -
- -
- - | - -
-
-
- - - -
-
- {{ - $t('value.contacts.groupsPage.deleteThisGroup') }} -
- {{ - $t('value.contacts.groupsPage.deleteGroupTip') }} -
- - | - -
-
-
-
\ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/groups/groups.js b/entry/src/main/js/default/pages/contacts/groups/groups.js deleted file mode 100644 index 03103f7..0000000 --- a/entry/src/main/js/default/pages/contacts/groups/groups.js +++ /dev/null @@ -1,261 +0,0 @@ -/** - * @file group - */ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import router from '@system.router'; -import groupReq from '../../../../default/model/GroupsModel.js'; -import prompt from '@system.prompt'; -import LOG from '../../../utils/ContactsLog.js'; -import Constants from '../../../../default/common/constants/Constants.js'; - -var TAG = 'Groups...:'; - -export default { - data: { - page: 0, // Initial load current page - limit: 20, - groupList: [], - newGroupName: '', // Group name of the new group - updateGroupName: '', // Update the group name of the group - menuGroupName: '', - dialogInputActive: false, - showEmptyPage: false, - operateItem: { - title: '', - groupId: 0 - } - }, - - onInit() { - LOG.info(TAG + 'onInit success'); - }, - onShow() { - LOG.info(TAG + 'onShow success'); - this.page = 0; - var requestData = { - page: this.page, - limit: this.limit - }; - this.getGroupList(requestData); - }, - - getGroupList: function (actionData) { - LOG.info(TAG + 'getGroupList actionData' + actionData); - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.queryGroups(DAHelper, actionData, result => { - setInterval(() => { - LOG.info(TAG + 'delay 1 s'); - }, 1000); - if (this.page == 0) { - this.groupList = result; - } else { - this.groupList = this.groupList.concat(result); - } - if (this.groupList.length == 0) { - this.showEmptyPage = true; - } else { - this.showEmptyPage = false; - } - }); - }, - - requestItem: function () { - this.page++; - var requestData = { - page: this.page, - limit: this.limit - }; - this.getGroupList(requestData); - }, - - back: function () { - router.back(); - }, - - recentContactsClicked: function () { - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.queryRecentContactsCount(DAHelper, result => { - router.push({ - uri: 'pages/contacts/groups/recentContacts/recentContacts', - params: { - count1: result.count1, - count2: result.count2, - count3: result.count3, - count4: result.count4 - }, - }); - }); - }, - - groupItemClick: function (item) { - LOG.info(TAG + 'groupItemClick item' + item); - router.push({ - uri: 'pages/contacts/groups/groupMembersList/groupMembersList', - params: { - groupItem: item - }, - }); - }, - - listItemTouchStart: function (event) { - this.position = {}; - this.position.X = Math.round(event.touches[0].globalX); - this.position.Y = Math.round(event.touches[0].globalY); - }, - - groupLongPress: function (item) { - this.operateItem.title = item.title; - this.operateItem.groupId = item.groupId; - if (item.title.length > 4) { - this.menuGroupName = item.title.substring(0, 4) + '..'; - } else { - this.menuGroupName = item.title; - } - var tempX = this.position.X > 360 ? 360 : this.position.X; - var tempY = this.position.Y > 1100 ? 1100 : this.position.Y; - clearTimeout(this.menuTimeOutId); - this.menuTimeOutId = setTimeout(() => { - this.$element('groupItemMenu').show({ - x: tempX, - y: tempY - }); - }, 1); - }, - - todoSelected: function (event) { - if (event.value == 'delete') { - this.$element('deleteGroupDialog').show(); - } - if (event.value == 'rename') { - this.$element('renameGroupDialog').show(); - } - }, - - confirmDeleteGroup: function () { - this.$element('deleteGroupDialog').close(); - var actionData = { - ids: [this.operateItem.groupId] - }; - LOG.info(TAG + 'start deleteGroups'); - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.deleteGroups(DAHelper, actionData.ids, result => { - this.onShow(); - }); - }, - - changeStyle: function () { - this.dialogInputActive = true; - }, - - cancelDeleteGroup: function () { - this.$element('deleteGroupDialog').close(); - }, - - groupNameChanged: function (e) { - LOG.info(TAG + 'groupNameChanged e' + e); - this.newGroupName = e.value; - }, - - renameGroupNameChanged: function (e) { - LOG.info(TAG + 'renameGroupNameChanged e' + e); - this.updateGroupName = e.value; - }, - - confirmUpdateGroup: function () { - this.$element('renameGroupDialog').close(); - if (this.updateGroupName == this.operateItem.title) { - return; - } - var actionData = {}; - actionData.title = this.updateGroupName; - actionData.groupId = this.operateItem.groupId; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.updateGroup(DAHelper, actionData, data => { - if (data == 0) { - this.groupList.forEach((item) => { - if (item.groupId == this.operateItem.groupId) { - item.title = actionData.title; - } - }); - } else if (data == -2) { - prompt.showToast({ - message: this.$t('value.contacts.groupsPage.alreadyExists') - }); - } else { - LOG.error(TAG + 'add group error. code is ' + data); - } - }); - }, - - confirmAddGroup() { - var actionData = {}; - actionData.title = this.newGroupName; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - - groupReq.addGroup(DAHelper, this.newGroupName, (result) => { - LOG.error(TAG + 'confirmAddGroup result' + result); - if (result == -2) { - prompt.showToast({ - message: this.$t('value.contacts.groupsPage.alreadyExists') - }); - } else if (result != 0) { - let newGroup = { - 'groupId': result, - 'contactCount': 0, - 'contactBeans': [], - 'title': this.newGroupName - }; - this.groupList.push(newGroup); - LOG.info(TAG + 'newgroup' + newGroup); - router.push({ - uri: 'pages/contacts/groups/groupMembersList/groupMembersList', - params: { - groupItem: newGroup - }, - }); - } else { - LOG.error(TAG + 'add group error. result is ' + result); - } - this.$element('addGroupDialog').close(); - }); - }, - - cancelAddGroup() { - this.$element('addGroupDialog').close(); - }, - - clickAddGroup(e) { - LOG.info(TAG + 'clickAddGroup e' + e); - this.newGroupName = ''; - this.$element('addGroupDialog').show(); - }, - - cancelUpdateGroup() { - this.$element('renameGroupDialog').close(); - }, - - clickUpdateGroup(e) { - LOG.info(TAG + 'clickUpdateGroup e' + e); - this.$element('renameGroupDialog').show(); - }, - - deleteGroup: function () { - router.push({ - uri: 'pages/contacts/groups/deleteGroup/deleteGroup', - params: {}, - }); - } -}; \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/groups/recentContacts/recentContacts.css b/entry/src/main/js/default/pages/contacts/groups/recentContacts/recentContacts.css deleted file mode 100644 index ba7e533..0000000 --- a/entry/src/main/js/default/pages/contacts/groups/recentContacts/recentContacts.css +++ /dev/null @@ -1,120 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - flex-direction: column; - justify-content: flex-start; - align-items: center; - width: 100%; - background-color: #FFF; -} - -.title-div { - flex-direction: row; - align-items: center; - width: 100%; - justify-content: flex-start; - margin-left: 24px; - margin-top: 10px; - position: relative; -} - -.back-but-div { - width: 93px; - height: 93px; - border-radius: 15px; - align-items: center; -} - -.back-but-div:active { - width: 93px; - height: 93px; - border-radius: 15px; - align-items: center; - background-color: #f3f3f3; -} - -.back-image { - margin-left: 21px; - width: 50px; - height: 50px; - border-radius: 10px; -} - -.title-text { - align-items: center; - justify-content: center; - margin-left: 15px; - font-size: 40px; - font-weight: 500; -} - -.list { - margin-top: 30px; -} - -.list-item { - position: relative; - flex-direction: column; - align-items: center; - height: 120px; - justify-content: flex-start; -} - -.list-content-div { - position: relative; - flex-direction: row; - align-items: center; - height: 99%; - justify-content: flex-start; -} - -.list-item-div { - position: relative; - flex-direction: column; - align-items: flex-start; - justify-content: space-around; - padding-top: 10px; - padding-bottom: 10px; -} - -.list-item-line { - width: 100%; - margin-right: 40px; - margin-left: 45px; - height: 1px; - border-bottom: 1px; - border-color: #D3D3D3; -} - -.name-text { - text-overflow: ellipsis; - max-lines: 2; - width: 560px; - font-size: 30px; -} - -.count-text { - margin-top: 8px; - width: 560px; - font-size: 28px; - color: #646464; -} - -.more-image { - right: -20px; - width: 30px; - height: 30px; - border-radius: 60px; -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/groups/recentContacts/recentContacts.hml b/entry/src/main/js/default/pages/contacts/groups/recentContacts/recentContacts.hml deleted file mode 100644 index 2ec7371..0000000 --- a/entry/src/main/js/default/pages/contacts/groups/recentContacts/recentContacts.hml +++ /dev/null @@ -1,40 +0,0 @@ - -
-
-
- -
- - {{ $t('value.contacts.groupsPage.RecentContacts') }} - -
- - -
-
- - {{ item.name }} - - - {{ item.count }} {{ $t('value.contacts.groupsPage.people') }} - -
- -
-
-
-
-
\ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/groups/recentContacts/recentContacts.js b/entry/src/main/js/default/pages/contacts/groups/recentContacts/recentContacts.js deleted file mode 100644 index 443e563..0000000 --- a/entry/src/main/js/default/pages/contacts/groups/recentContacts/recentContacts.js +++ /dev/null @@ -1,101 +0,0 @@ -/** - * @file recent contacts - */ - -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import router from '@system.router'; -import LOG from '../../../../utils/ContactsLog.js'; - -var TAG = 'recentContacts...:'; - -/** - * @file recent contacts - */ -export default { - data: { - title: 'World', - recentContactsList: [], - count1: 0, - count2: 0, - count3: 0, - count4: 0 - }, - onInit() { - LOG.info(TAG + 'onInit success'); - this.recentContactsList = [ - { - name: this.$t('value.contacts.groupsPage.oneWeekContacts'), - count: this.count1, - id: 1 - }, - { - name: this.$t('value.contacts.groupsPage.oneMonthContacts'), - count: this.count2, - id: 2 - }, - { - name: this.$t('value.contacts.groupsPage.threeMonthContacts'), - count: this.count3, - id: 3 - }, - { - name: this.$t('value.contacts.groupsPage.moreThreeMonthContacts'), - count: this.count4, - id: 4 - }]; - }, - - itemClick: function (item) { - LOG.info(TAG + 'itemClick item' + item); - var params = { - title: item.name - }; - switch (item.id) { - case 1: // 7 days - params.startDate = 0; - params.endDate = 7; - break; - case 2: // one month - params.startDate = 7; - params.endDate = 30; - break; - case 3: // three months - params.startDate = 30; - params.endDate = 90; - break; - case 4: // More than three months - params.startDate = -1; - params.endDate = 90; - break; - default: - LOG.error(TAG + 'ERROR: item id is ' + item); - break; - } - router.push({ - uri: 'pages/contacts/groups/recentContacts/recentContactsList/recentContactsList', - params: { - groupItem: params - }, - }); - }, - - back: function () { - router.back(); - }, - onDestroy() { - }, -}; diff --git a/entry/src/main/js/default/pages/contacts/groups/recentContacts/recentContactsList/recentContactsList.css b/entry/src/main/js/default/pages/contacts/groups/recentContacts/recentContactsList/recentContactsList.css deleted file mode 100644 index 5f9ec12..0000000 --- a/entry/src/main/js/default/pages/contacts/groups/recentContacts/recentContactsList/recentContactsList.css +++ /dev/null @@ -1,380 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - flex-direction: column; - justify-content: flex-start; - align-items: center; - background-color: #FFF; - width: 100%; - height: 100%; -} - -.title-div { - flex-direction: row; - align-items: center; - justify-content: flex-start; - width: 100%; - height: 11%; - margin-left: 24px; - margin-top: 10px; - position: relative; -} - -.back-but-div { - width: 93px; - height: 93px; - border-radius: 15px; - align-items: center; -} - -.back-but-div:active { - width: 93px; - height: 93px; - border-radius: 15px; - align-items: center; - background-color: #f3f3f3; -} - -.back-image { - margin-left: 21px; - width: 50px; - height: 50px; - border-radius: 10px; -} - -.title-text { - align-items: center; - justify-content: center; - margin-left: 15px; - font-size: 40px; - font-weight: 500; -} - -.title-text-little { - text-overflow: ellipsis; - max-lines: 2; - align-items: center; - justify-content: center; - margin-left: 15px; - font-size: 30px; - font-weight: 500; -} - -.free-space { - align-content: center; - justify-content: center; - align-items: center; - flex-direction: column; - width: 100%; - height: 84%; -} - -.contacts-image-icon { - width: 210px; - height: 210px; -} - -.free-space-text { - font-size: 28px; - margin-top: -22px; - font-weight: 400; - color: #999; -} - -.list { - margin-top: 30px; -} - -.list-item { - position: relative; - flex-direction: column; - align-items: center; - height: 120px; - width: 100%; - justify-content: flex-start; -} - -.contact-pho -ne-groups-div { - width: 100%; - align-items: center; - align-content: center; - margin-top: 5px; - height: 90px; - justify-content: flex-start; -} - -.contact-smart-groups-text { - margin-left: 45px; - font-size: 26px; - font-weight: 500; - color: #646464; -} - -.list-content-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: flex-start; - padding-left: 45px; -} - -.list-item-div { - position: relative; - flex-direction: column; - align-items: flex-start; - justify-content: space-around; - padding-top: 10px; - padding-bottom: 10px; -} - -.list-item-line { - width: 100%; - margin-right: 40px; - margin-left: 45px; - height: 1px; - border-bottom: 1px; - border-color: #D3D3D3; -} - -.name-text { - text-overflow: ellipsis; - max-lines: 2; - width: 560px; - font-size: 30px; -} - -.todo-item { - width: 454px; - height: 123px; - flex-direction: row; - columns: 1; - align-items: stretch; - padding-left: 20px; - padding-right: 20px; -} - -.todo-content-div { - flex-direction: row; - justify-content: flex-start; - align-items: center; - width: 100%; - height: 100%; -} - -.first { - width: 20%; - margin-left: 25px; -} - -.todo-name-suffix-div { - flex-direction: column; - align-items: center; - justify-content: center; - width: 80px; - height: 80px; - border-radius: 60px; - background-color: #D5BAC1; -} - -.todo-content-name-last { - width: 90%; - height: 65%; - text-align: center; - font-size: 38px; - allow-scale: true; - font-weight: 600; - color: #FFF; -} - -.todo-item-content-div { - width: 90%; - height: 76%; - align-items: center; - justify-content: center; -} - -.todo-item-content-image { - width: 80px; - height: 80px; - border-radius: 60px; -} - -.todo-content-div-div { - flex-direction: column; - justify-content: center; - align-items: flex-start; - margin-start: 20px; - width: 88%; -} - -.todo-content-name { - width: 100%; - text-align: left; - font-size: 30px; - font-weight: 600; - max-lines: 1; - text-overflow: ellipsis; -} - -.todo-content { - margin-top: 9px; - width: 100%; - text-align: left; - max-lines: 1; - text-overflow: ellipsis; - color: #636363; - font-size: 28px; -} - -.todo-divider-div { - margin-start: 20px; - flex-direction: column; - justify-content: flex-start; - align-items: flex-start; - position: absolute; - bottom: 0; - width: 100%; -} - -.todo-divider { - line-cap: round; - stroke-width: 1px; - color: #ccc; -} - -.batch-delete-operation { - width: 85%; - height: 8%; - justify-content: center; -} - -.batch-delete-operation-button { - width: 30%; - height: 100%; - border-radius: 15px; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.batch-delete-image-icon { - width: 50px; - height: 50px; -} - -.batch-delete-text { - font-size: 22px; -} - -.batch-delete-operation-button { - width: 30%; - height: 100%; - border-radius: 15px; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.batch-delete-operation-button:active { - background-color: #D3D3D3; -} - -.batch-delete-operation-button:disabled { - opacity: .5; -} - -.menu-contactName { - font-size: 45px; - font-weight: 600; -} - -.dialog-main { - width: 90%; - align-items: center; -} - -.dialog-input { - border-left: -30px; - width: 85%; - background-color: transparent; - border-bottom: 1px solid #D3D3D3; -} - -.dialog-input-active { - border-left: -30px; - width: 85%; - background-color: transparent; - border-bottom: 1px solid #4e4e4e; -} - -.inner-txt { - width: 400px; - height: 160px; - flex-direction: column; - align-items: flex-start; - justify-content: space-around; - margin-right: 150px; -} - -.txt { - font-size: 30px; -} - -.dialog-div { - flex-direction: column; - align-items: center; - border-style: dotted; - border-radius: 50px; -} - -.inner-btn { - width: 90%; - height: 120px; - justify-content: space-around; - align-items: center; -} - -.btn-txt { - width: 40%; - height: 70%; - border-radius: 30px; - background-color: transparent; - text-color: #175cfe; - font-size: 30px; -} - -.cancel-btn-txt { - width: 40%; - height: 70%; - border-radius: 50px; - background-color: transparent; - text-color: #175cfe; - font-size: 30px; -} - -.delete-btn-txt { - width: 40%; - height: 70%; - border-radius: 30px; - background-color: transparent; - text-color: #FE1745; - font-size: 30px; -} - -.deleteGroupText { - width: 85%; - background-color: transparent; -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/groups/recentContacts/recentContactsList/recentContactsList.hml b/entry/src/main/js/default/pages/contacts/groups/recentContacts/recentContactsList/recentContactsList.hml deleted file mode 100644 index 8710c25..0000000 --- a/entry/src/main/js/default/pages/contacts/groups/recentContacts/recentContactsList/recentContactsList.hml +++ /dev/null @@ -1,78 +0,0 @@ - -
-
-
- -
- - {{ groupItem.title }} - - - {{ groupItem.title }} - -
-
- - - {{ $t('value.contacts.groupsPage.noContacts') }} - -
- - -
-
- -
-
-
- {{ item.nameSuffix }} - -
-
-
-
- - -
-
-
-
-
- - {{ item.emptyNameData ? item.emptyNameData : $t('value.contacts.page.item.noName') }} - -
-
- -
-
-
-
-
-
- - {{ $t('value.contacts.groupsPage.sendMessage') }} - -
-
- - {{ $t('value.contacts.groupsPage.sendEmail') }} - -
-
- -
\ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/groups/recentContacts/recentContactsList/recentContactsList.js b/entry/src/main/js/default/pages/contacts/groups/recentContacts/recentContactsList/recentContactsList.js deleted file mode 100644 index 09c6dd2..0000000 --- a/entry/src/main/js/default/pages/contacts/groups/recentContacts/recentContactsList/recentContactsList.js +++ /dev/null @@ -1,144 +0,0 @@ -/** - * @file Recent Contact list - */ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import router from '@system.router'; -import prompt from '@system.prompt'; -import groupReq from '../../../../../../default/model/GroupsModel.js'; -import LOG from '../../../../../utils/ContactsLog.js'; -import Constants from '../../../../../../default/common/constants/Constants.js'; -import backgroundColor from '../../../../../common/constants/color.js'; - -var TAG = 'recentContactsList...:'; - -export default { - data: { - groupItem: { - title: '', - endDate: 0, - startDate: 0 - }, // Group object - contactCount: 0, - layoutState: true, - dialogInputActive: false, // The input box of dialog is not activated by default - contactsList: [], // Data list - operateItem: {}, // Long press and hold the contact item - newGroupName: '', - showEmptyPage: false, - menuContactName: '', // Long press the title of the menu - page: 0, - limit: 20, // Number of entries per page - backgroundColor: backgroundColor.Color - }, - onInit() { - LOG.info(TAG + 'onInit success'); - this.conciseLayoutInit(); - this.getContactsList(); - }, - onShow() { - LOG.info(TAG + 'onShow success'); - this.page = 0; - }, - - conciseLayoutInit: function () { - let data = this.$app.$def.globalData.storage.getSync('contacts_settings_concise_layout_switch', 'false'); - this.layoutState = data == 'true' ? false : true; - }, - - requestItem: function () { - this.page++; - }, - getContactsList: function () { - LOG.info(TAG + 'start getContactsList'); - var actionData = { - page: this.page, - limit: this.limit, - endDate: this.groupItem.endDate, - startDate: this.groupItem.startDate - }; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.queryRecentContacts(DAHelper, actionData, result => { - if (result.code == 0) { - if (result.resultList) { - this.contactCount = result.totalCount; - if (this.page == 0) { - this.contactsList = result.resultList; - } else { - this.contactsList = this.contactsList.concat(result.resultList); - } - } else { - this.contactsList = []; - } - } else { - prompt.showToast({ - message: 'Failed to init data.' - }); - } - if (this.contactsList.length == 0) { - this.showEmptyPage = true; - } else { - this.showEmptyPage = false; - } - }); - if (this.contactsList.length == 0) { - this.showEmptyPage = true; - } else { - this.showEmptyPage = false; - } - }, - - jumpToContactDetail: function (item) { - LOG.info(TAG + 'jumpToContactDetail item' + item); - router.push({ - uri: 'pages/contacts/contactDetail/contactDetail', - params: { - contactId: item.contactId, - isNewSource: true - } - }); - }, - - back: function () { - router.back(); - }, - - clickSendMsg: function () { - router.push({ - uri: 'pages/contacts/groups/selectGroupMembers/selectGroupMembers', - params: { - groupId: 1, - type: 'sendMsg', - pageParams: 'recentContacts', - endDate: this.groupItem.endDate, - startDate: this.groupItem.startDate - }, - }); - }, - - clickSendEmail: function () { - router.push({ - uri: 'pages/contacts/groups/selectGroupMembers/selectGroupMembers', - params: { - groupId: 1, - type: 'sendEmail', - pageParams: 'recentContacts', - endDate: this.groupItem.endDate, - startDate: this.groupItem.startDate - }, - }); - } -}; diff --git a/entry/src/main/js/default/pages/contacts/groups/selectGroupMembers/selectGroupMembers.css b/entry/src/main/js/default/pages/contacts/groups/selectGroupMembers/selectGroupMembers.css deleted file mode 100644 index 615eaf6..0000000 --- a/entry/src/main/js/default/pages/contacts/groups/selectGroupMembers/selectGroupMembers.css +++ /dev/null @@ -1,356 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - flex-direction: column; - justify-content: flex-start; - align-items: center; - width: 100%; - height: 100%; - background-color: #FFF; -} - -.title-div { - flex-direction: row; - align-items: center; - justify-content: flex-start; - margin-left: 24px; - width: 100%; - margin-top: 10px; - position: relative; -} - -.back-but-div { - width: 93px; - height: 93px; - border-radius: 15px; - align-items: center; -} - -.back-but-div:active { - width: 93px; - height: 93px; - border-radius: 15px; - align-items: center; - background-color: #f3f3f3; -} - -.back-image { - margin-left: 21px; - width: 50px; - height: 50px; - border-radius: 10px; -} - -.title-text { - align-items: center; - justify-content: center; - margin-left: 15px; - font-size: 40px; - font-weight: 500; -} - -.title-text-little { - align-items: center; - justify-content: center; - margin-left: 15px; - font-size: 30px; - font-weight: 500; -} - -.todo-search-div { - flex-direction: row; - justify-content: flex-start; - align-items: flex-start; - width: 85%; - height: 140px; - margin-top: 30px; - margin-bottom: -40px; -} - -.free-space { - align-content: flex-start; - justify-content: flex-start; - align-items: center; - flex-direction: column; - width: 100%; - height: 80%; -} - -.free-space-no-result { - align-content: flex-start; - justify-content: flex-start; - align-items: center; - flex-direction: column; - width: 100%; - height: 75%; -} - -.contacts-image-icon { - margin-top: 42%; - width: 210px; - height: 210px; -} - -.free-space-text { - font-size: 28px; - margin-top: -22px; - font-weight: 400; - color: #999; -} - -.list { - margin-top: 30px; - width: 100%; -} - -.list-item { - align-items: center; - margin-left: 20px; - width: 100%; - justify-content: center; - flex-direction: column; -} - -.contact-smart-groups-div { - height: 58px; - align-items: center; - justify-content: flex-start; -} - -.contact-smart-groups-text { - margin-left: 45px; - font-size: 26px; - font-weight: 500; - color: #646464; -} - -.phoneNum-item { - align-items: center; - height: 100px; - width: 100%; - margin-left: 20px; - justify-content: flex-start; -} - -.phoneNum-item-div { - align-items: center; - height: 130px; - width: 100%; - margin-left: 20px; - justify-content: flex-start; -} - -.contact-item { - align-items: center; - margin-left: 20px; - width: 100%; - flex-direction: column; - justify-content: flex-start; -} - -.list-content-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: flex-start; - padding-left: 45px; -} - -.todo-content-div { - flex-direction: row; - justify-content: flex-start; - align-items: center; - width: 400px; -} - -.todo-content-div1 { - flex-direction: row; - justify-content: flex-start; - align-items: center; - width: 520px; -} - -.phoneNumber-content-div { - flex-direction: row; - height: 130px; - justify-content: flex-start; - align-items: center; - margin-left: 20%; - width: 400px; -} - -.phoneNumber-content-div1 { - flex-direction: row; - height: 130px; - justify-content: flex-start; - align-items: center; - width: 520px; -} - -.first { - width: 20%; -} - -.todo-content-button { - width: 90%; - height: 65%; - background-color: #DACEB5; -} - -.todo-content-name-last { - width: 90%; - height: 65%; - text-align: center; - font-size: 38px; - allow-scale: true; - font-weight: 600; - color: #FFF; -} - -.todo-item-content-div { - width: 90%; - height: 76%; - align-items: center; - justify-content: center; -} - -.todo-name-suffix-div { - flex-direction: column; - align-items: center; - justify-content: center; - width: 80px; - height: 80px; - border-radius: 60px; - background-color: #D5BAC1; -} - -.todo-item-content-image { - width: 80px; - height: 80px; - border-radius: 60px; -} - -.todo-content-div-div { - flex-direction: column; - justify-content: center; - align-items: flex-start; -} - -.todo-content-name { - width: 100%; - text-align: left; - align-items: center; - font-size: 32px; - font-weight: 600; - max-lines: 1; - text-overflow: ellipsis; -} - -.todo-content { - margin-top: 9px; - width: 100%; - text-align: left; - max-lines: 2; - background-color: transparent; - text-overflow: ellipsis; - color: #636363; - font-size: 28px; -} - -.todo-divider { - line-cap: round; - stroke-width: 1px; - color: #ccc; -} - -.todo-divider-div { - flex-direction: column; - justify-content: flex-start; - align-items: flex-start; - position: absolute; - bottom: 0; - margin-left: 22%; - width: 100%; - margin-right: 60px; -} - -.todo-divider-div1 { - flex-direction: column; - justify-content: flex-start; - align-items: flex-start; - position: absolute; - bottom: 0; - width: 100%; - margin-left: 20px; - margin-right: 60px; -} - -.phoneNum-divider-div { - flex-direction: column; - justify-content: flex-start; - align-items: flex-start; - position: absolute; - bottom: 0; - width: 100%; - margin-left: -37px; - margin-right: 60px; -} - -.contact-checkbox-div { - justify-content: center; - align-items: center; - border-radius: 10px; -} - -.batch-delete-operation { - width: 85%; - height: 8%; - justify-content: center; -} - -.batch-delete-operation-button { - width: 30%; - height: 100%; - border-radius: 15px; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.batch-delete-image-icon { - width: 50px; - height: 50px; -} - -.batch-delete-text { - font-size: 22px; -} - -.batch-delete-operation-button { - width: 30%; - height: 100%; - border-radius: 15px; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.batch-delete-operation-button:active { - background-color: #FFD3D3D3; -} - -.batch-delete-operation-button:disabled { - opacity: .5; -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/groups/selectGroupMembers/selectGroupMembers.hml b/entry/src/main/js/default/pages/contacts/groups/selectGroupMembers/selectGroupMembers.hml deleted file mode 100644 index 4d8802b..0000000 --- a/entry/src/main/js/default/pages/contacts/groups/selectGroupMembers/selectGroupMembers.hml +++ /dev/null @@ -1,356 +0,0 @@ - -
-
-
- -
- - {{ title }} - - - {{ title }} - -
-
- -
-
- - - {{ - $t('value.contacts.groupsPage.noContactsWithPhoneNum') }} - - {{ - $t('value.contacts.groupsPage.noContactsWithEmail') }} - -
-
- - - {{ $t('value.contacts.groupsPage.noMatchingResults') }} - -
- - -
-
-
-
-
- -
-
-
- {{ contactItem.nameSuffix }} - -
-
-
-
- - -
-
-
-
-
- - {{ - contactItem.emptyNameData ? contactItem.emptyNameData : - $t('value.contacts.page.item.noName') - }} - - {{ phoneNumber.labelName + ' ' + phoneNumber.phoneNumber }} - -
-
-
- - -
-
-
-
-
- {{ phoneNumber.labelName + ' ' + phoneNumber.phoneNumber }} - -
-
- - -
- - -
-
-
-
- -
-
-
-
-
-
-
- -
-
-
- {{ contactItem.nameSuffix }} - -
-
-
-
- - -
-
-
-
-
- - {{ - contactItem.emptyNameData == '' ? $t('value.contacts.page.item.noName') : contactItem.emptyNameData - }} - - {{ email.labelName + ' ' + email.email }} - -
-
-
- - -
-
-
-
-
- {{ email.labelName + ' ' + email.email }} - -
-
- - -
- - -
-
-
-
- -
-
-
- -
-
-
- - -
- - {{ $t('value.contacts.groupsPage.matchingResultNumber').replace("num", matchingResults.length + "") }} - -
-
- -
-
-
-
-
- -
-
-
- {{ contactItem.nameSuffix }} - -
-
-
-
- - -
-
-
-
-
- - {{ contactItem.name.searchTextStart }} - {{ contactItem.name.searchTextMiddle }} - {{ contactItem.name.searchTextEnd }} - - - {{ phoneNumber.labelName }}  {{ phoneNumber.startPhone }} - {{ phoneNumber.middlePhone }} - {{ - phoneNumber.endPhone + ' ' + (contactItem.organization ? contactItem.organization.name : '') - }} - -
-
-
- - -
-
-
-
-
- - {{ phoneNumber.labelName }}  {{ phoneNumber.startPhone }} - {{ phoneNumber.middlePhone }} - {{ - phoneNumber.endPhone + ' ' + (contactItem.organization ? contactItem.organization.name : '') - }} - -
-
- - -
- - -
-
-
-
- -
-
-
-
-
-
-
- -
-
-
- {{ contactItem.nameSuffix }} - -
-
-
-
- - -
-
-
-
-
- - {{ contactItem.name.searchTextStart }} - {{ contactItem.name.searchTextMiddle }} - {{ contactItem.name.searchTextEnd }} - - - {{ email.labelName }}  {{ email.startEmail }} - {{ email.middleEmail }} - {{ - email.endEmail + ' ' + (contactItem.organization ? contactItem.organization.name : '') - }} - -
-
-
- - -
-
-
-
-
- - {{ email.labelName }}  {{ email.startEmail }} - {{ email.middleEmail }} - {{ - email.endEmail + ' ' + (contactItem.organization ? contactItem.organization.name : '') - }} - -
-
- - -
- - -
-
-
-
- -
-
-
- -
-
-
-
-
- - {{ $t('value.contacts.groupsPage.select') }} - -
-
- - {{ $t('value.contacts.groupsPage.selectAll') }} - -
-
- - {{ $t('value.contacts.groupsPage.cancelSelectAll') }} - -
-
-
\ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/groups/selectGroupMembers/selectGroupMembers.js b/entry/src/main/js/default/pages/contacts/groups/selectGroupMembers/selectGroupMembers.js deleted file mode 100644 index a3379b1..0000000 --- a/entry/src/main/js/default/pages/contacts/groups/selectGroupMembers/selectGroupMembers.js +++ /dev/null @@ -1,742 +0,0 @@ -/** - * @file Select group members - */ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import router from '@system.router'; -import utils from '../../../../../default/utils/utils.js'; -import prompt from '@system.prompt'; -import groupReq from '../../../../../default/model/GroupsModel.js'; -import LOG from '../../../../utils/ContactsLog.js'; -import Constants from '../../../../../default/common/constants/Constants.js'; - -var TAG = 'selectGroupMembers...:'; - -const PHONE_ITEM_TYPE = 'phone'; -const EMAIL_ITEM_TYPE = 'email'; -const NAME_ITEM_TYPE = 'name'; -const SEARCH_TYPE_IN_GROUP = 2; // Intra group search - -/** - * @file Select group members - */ -export default { - data: { - page: 0, - limit: 100, // Number of entries per page - title: '', // title - type: '', // Operation type - groupId: 0, // Group ID - checkedNum: 0, // Number of contacts selected - contactsList: [], // contact list - matchingResults: [], // search result - checkedList: [], // Selected data - phoneNumberLabelNames: [], // Phone number label collection - emailsLabelNames: [], // Mailbox label collection - showEmptyPage: false, // Show empty page - noMatchingResults: false, // The displayed search results are empty - showSelectAll: true, // Select all - layoutState: true, // Concise layout - showContactList: true, // Show contact list - showMatchContactsList: false, // Display search results - addMemberDisabled: true, - showPhoneNumber: true, // Show phone number - showEmail: false, // Is it a display mailbox - pageParams: '', // Recent contact parameters - startDate: '', // Last contact parameter start time - endDate: '', // Last contact parameter end time - index: ['#', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', - 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '…'] - }, - onInit() { - LOG.info(TAG + 'onInit success'); - this.phoneNumberLabelNames = [this.$t('accountants.house'), this.$t('accountants.phone'), - this.$t('accountants.unit'), this.$t('accountants.unit fax'), this.$t('accountants.home fax'), - this.$t('accountants.pager'), this.$t('accountants.others'), '', '', '', '', - this.$t('accountants.switchboard')]; - - this.emailsLabelNames = [this.$t('accountants.private'), this.$t('accountants.unit'), - this.$t('accountants.others')]; - - this.title = this.$t('value.contacts.groupsPage.noSelect'); - if (this.type == 'sendMsg') { - this.showPhoneNumber = true; - this.showEmail = false; - } - - if (this.type == 'sendEmail') { - this.showPhoneNumber = false; - this.showEmail = true; - } - this.conciseLayoutInit(); - - if (this.type == 'recentContacts') { - this.getRecentContacts(); - } else { - this.getGroupMemberList(); - } - }, - - conciseLayoutInit: function () { - let data = this.$app.$def.globalData.storage.getSync('contacts_settings_concise_layout_switch', 'false'); - this.layoutState = data == 'true' ? false : true; - }, - - getGroupMemberList: function () { - let filterItem = ''; - if (this.showPhoneNumber) { - filterItem = PHONE_ITEM_TYPE; - } - if (this.showEmail) { - filterItem = EMAIL_ITEM_TYPE; - } - var actionData = { - page: this.page, - limit: this.limit, - groupId: this.groupId, - filterItem: filterItem, - phoneNumberLabelNames: this.phoneNumberLabelNames, - emailsLabelNames: this.emailsLabelNames - }; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.getGroupMemberList(DAHelper, actionData, result => { - LOG.info(TAG + 'getGroupMemberList result' + result); - if (result.code == 0 && result.resultList.length > 0) { - LOG.info(TAG + 'members count is :' + result.resultList.length); - result.resultList.forEach((item) => { - this.conditionOne(item); - this.conditionTwo(item); - }); - LOG.info(TAG + 'this.contactsList length is :' + this.contactsList.length); - this.showSelectAll = false; - this.addMemberDisabled = false; - this.updateTitle(); - } else if (result.code != 0) { - prompt.showToast({ - message: 'Failed to init data.' - }); - } else { - LOG.info(TAG + 'contactsList is null.'); - } - if (this.contactsList.length == 0) { - this.showEmptyPage = true; - } else { - this.showEmptyPage = false; - } - }); - }, - - conditionOne: function (item) { - LOG.info(TAG + 'conditionOne item' + item); - if (this.showPhoneNumber && item.phoneNumbers && item.phoneNumbers.length != 0) { - let tempContacts = utils.copy(item); - tempContacts.phoneNumbers.length = 0; // Leave the phone array empty - item.phoneNumbers.forEach((phoneNumber, index) => { - phoneNumber.backGroundColor = '#FFFFFF'; - if (index == 0) { - this.checkedNum++; - phoneNumber.checked = true; - } else { - phoneNumber.checked = false; - } - if (this.indexOf(tempContacts.phoneNumbers, phoneNumber.phoneNumber) == -1) { - tempContacts.phoneNumbers.push(phoneNumber); - } - }); - this.contactsList.push(tempContacts); - } - }, - - conditionTwo: function (item) { - LOG.info(TAG + 'conditionTwo item' + item); - if (this.showEmail && item.emails && item.emails.length != 0) { - let tempContacts = utils.copy(item); - tempContacts.emails.length = 0; // Leave the phone array empty - item.emails.forEach((email, index) => { - if (index == 0) { - this.checkedNum++; - email.checked = true; - } else { - email.checked = false; - } - if (this.indexOf(tempContacts.emails, email.email) == -1) { - tempContacts.emails.push(email); - } - }); - this.contactsList.push(tempContacts); - } - }, - - getRecentContacts: function () { - let filterItem = ''; - if (this.showPhoneNumber) { - filterItem = PHONE_ITEM_TYPE; - } - if (this.showEmail) { - filterItem = EMAIL_ITEM_TYPE; - } - var actionData = { - page: this.page, - limit: this.limit, - filterItem: filterItem, - endDate: this.endDate, - startDate: this.startDate, - phoneNumberLabelNames: this.phoneNumberLabelNames, - emailsLabelNames: this.emailsLabelNames - }; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.getRecentContacts(DAHelper, actionData, result => { - if (result.code == 0 && result.resultList.length > 0) { - LOG.info(TAG + 'getGroupMemberList members count is :' + result.resultList.length); - this.setContacts(result); - this.showSelectAll = false; - this.addMemberDisabled = false; - this.updateTitle(); - } else if (result.code != 0) { - prompt.showToast({ - message: 'Failed to init data.' - }); - } else { - LOG.info(TAG + 'contactsList is null.'); - } - if (this.contactsList.length == 0) { - this.showEmptyPage = true; - } else { - this.showEmptyPage = false; - } - }); - }, - setContacts(result) { - result.resultList.forEach((item) => { - if (this.showPhoneNumber && item.phoneNumbers && item.phoneNumbers.length != 0) { - let tempContacts = utils.copy(item); - tempContacts.phoneNumbers.length = 0; // Leave the phone array empty - item.phoneNumbers.forEach((phoneNumber, index) => { - phoneNumber.backGroundColor = '#FFFFFF'; - if (index == 0) { - this.checkedNum++; - phoneNumber.checked = true; - } else { - phoneNumber.checked = false; - } - if (this.indexOf(tempContacts.phoneNumbers, phoneNumber.phoneNumber) == -1) { - tempContacts.phoneNumbers.push(phoneNumber); - } - }); - this.contactsList.push(tempContacts); - } - if (this.showEmail && item.emails && item.emails.length != 0) { - let tempContacts = utils.copy(item); - tempContacts.emails.length = 0; // Leave the phone array empty - item.emails.forEach((email, index) => { - if (index == 0) { - this.checkedNum++; - email.checked = true; - } else { - email.checked = false; - } - if (this.indexOf(tempContacts.emails, email.email) == -1) { - tempContacts.emails.push(email); - } - }); - this.contactsList.push(tempContacts); - } - }); - }, - - clickSearch: function (e) { - LOG.info(TAG + 'clickSearch e' + e); - if (e.text) { - this.showContactList = false; - this.showMatchContactsList = true; - this.searchRequest(e.text); - } else { - this.matchingResults = []; - this.updateOperateButton(this.contactsList); - this.showContactList = true; - this.showMatchContactsList = false; - this.noMatchingResults = false; - } - }, - - /** - * Search request background - * - * @param {string} keyText Input box text content - */ - searchRequest: function (keyText) { - let searchProperty = [NAME_ITEM_TYPE]; - if (this.showEmail) { - searchProperty.push(EMAIL_ITEM_TYPE); - } - if (this.showPhoneNumber) { - searchProperty.push(PHONE_ITEM_TYPE); - } - var requestData = { - likeValue: keyText, - searchType: SEARCH_TYPE_IN_GROUP, - groupId: this.groupId, - searchProperty: searchProperty - }; - - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.searchContacts(DAHelper, requestData, result => { - this.matchingResults = []; - if (result.code == 0 && result.contactCount > 0) { - // Judge that if it is already selected, it will be initialized to the selected status - result.data.forEach((item) => { - this.conditionThree(item); - this.conditionFour(item); - }); - this.updateOperateButton(this.matchingResults); - } else { - this.matchingResults.length = 0; - this.showSelectAll = true; - LOG.error(TAG + 'select contact request error'); - } - if (this.matchingResults && this.matchingResults.length == 0) { - this.noMatchingResults = true; - } else { - this.noMatchingResults = false; - } - LOG.info(TAG + 'select search request result'); - }); - }, - - conditionThree: function (item, keyText) { - LOG.info(TAG + 'conditionThree item' + item); - if (this.showPhoneNumber && item.phoneNumbers && item.phoneNumbers.length != 0) { - let tempContacts = utils.copy(item); - tempContacts.phoneNumbers = []; // Leave the phone array empty - item.phoneNumbers.forEach((phoneNumber) => { - if (this.indexOf(tempContacts.phoneNumbers, phoneNumber.phoneNumber) == -1) { - tempContacts.phoneNumbers.push(phoneNumber); - phoneNumber.checked = false; - phoneNumber.backGroundColor = '#FFFFFF'; - - // Initialize variable name - this.variableName(item, keyText); - - // Initialize variable phone number - this.variablePhoneNumber(item, keyText); - this.contactsList.forEach((checkedContact) => { - // If the contact ID is the same, the selected status will be initialized - if (checkedContact.contactId == item.contactId) { - checkedContact.phoneNumbers.forEach((checkedPhoneNumber) => { - if (checkedPhoneNumber.phoneNumber == phoneNumber.phoneNumber - && checkedPhoneNumber.checked) { - phoneNumber.checked = true; - } - }); - } - }); - } - }); - this.matchingResults.push(item); - } - }, - - conditionFour: function (item, keyText) { - LOG.info(TAG + 'conditionFour item' + item); - if (this.showEmail && item.emails && item.emails.length != 0) { - let tempContacts = utils.copy(item); - tempContacts.emails = []; // Leave the phone array empty - item.emails.forEach((email) => { - if (this.indexOf(tempContacts.emails, email.email) == -1) { - tempContacts.emails.push(email); - email.checked = false; - - // Initialize variable name - this.variableName(item, keyText); - // Initialize variable mailbox number - this.variableEmail(item, keyText); - - this.contactsList.forEach((checkedContact) => { - // If the contact ID is the same, the selected status will be initialized - if (checkedContact.contactId == item.contactId) { - checkedContact.emails.forEach((checkedEmail) => { - if (checkedEmail.email == email.email && checkedEmail.checked) { - email.checked = true; - } - }); - } - }); - } - }); - this.matchingResults.push(item); - } - }, - - contactItemClick: function (phoneNumIndex, contactItem) { - LOG.info(TAG + 'contactItemClick contactItem' + contactItem); - contactItem.phoneNumbers[phoneNumIndex].checked = !contactItem.phoneNumbers[phoneNumIndex].checked; - if (contactItem.phoneNumbers[phoneNumIndex].checked) { - this.checkedNum++; - } else { - this.checkedNum--; - } - this.updateOperateButton(this.contactsList); - this.updateTitle(); - }, - searchContactItemClick: function (phoneNumIndex, contactItem) { - LOG.info(TAG + 'searchContactItemClick contactItem' + contactItem); - contactItem.phoneNumbers[phoneNumIndex].checked = !contactItem.phoneNumbers[phoneNumIndex].checked; - if (contactItem.phoneNumbers[phoneNumIndex].checked) { - this.checkedNum++; - } else { - this.checkedNum--; - } - // Modify the selected status of contactlist data - this.contactsList.forEach((checkedContact) => { - // If the contact ID is the same, the selected status will be initialized - if (checkedContact.contactId == contactItem.contactId) { - checkedContact.phoneNumbers.forEach((checkedPhoneNumber) => { - if (checkedPhoneNumber.phoneNumber == contactItem.phoneNumbers[phoneNumIndex].phoneNumber) { - checkedPhoneNumber.checked = contactItem.phoneNumbers[phoneNumIndex].checked; - } - }); - } - }); - this.updateOperateButton(this.matchingResults); - this.updateTitle(); - }, - - /** - * Email selected event - * - * @param {number} emailIndex Mail index - * @param {Object} emailItem Mail object - */ - emailItemClick: function (emailIndex, emailItem) { - LOG.info(TAG + 'emailItemClick emailIndex' + emailIndex + 'emailItem' + emailItem); - emailItem.emails[emailIndex].checked = !emailItem.emails[emailIndex].checked; - if (emailItem.emails[emailIndex].checked) { - this.checkedNum++; - } else { - this.checkedNum--; - } - this.updateOperateButton(this.contactsList); - this.updateTitle(); - }, - searchEmailItemClick: function (emailNumIndex, contactItem) { - LOG.info(TAG + 'searchEmailItemClick emailNumIndex' + emailNumIndex); - contactItem.emails[emailNumIndex].checked = !contactItem.emails[emailNumIndex].checked; - if (contactItem.emails[emailNumIndex].checked) { - this.checkedNum++; - } else { - this.checkedNum--; - } - // Modify the selected status of contactlist data - this.contactsList.forEach((checkedContact) => { - // If the contact ID is the same, the selected status will be initialized - if (checkedContact.contactId == contactItem.contactId) { - checkedContact.emails.forEach((checkedEmail) => { - if (checkedEmail.email == contactItem.emails[emailNumIndex].email) { - checkedEmail.checked = contactItem.emails[emailNumIndex].checked; - } - }); - } - }); - this.updateOperateButton(this.matchingResults); - this.updateTitle(); - }, - - /** - * Jump to send SMS or email interface - */ - clickAddMember: function () { - if (this.showPhoneNumber) { - let checkedList = []; - this.contactsList.forEach((item) => { - item.phoneNumbers.forEach((phoneNumber) => { - if (phoneNumber.checked) { - let obj = { - contactsName: item.emptyNameData, - telephone: phoneNumber.phoneNumber, - telephoneFormat: phoneNumber.phoneNumber, - id: item.contactId - }; - checkedList.push(obj); - } - }); - }); - this.$app.$def.sendMessage(checkedList); - } - - if (this.showEmail) { - let params = ''; - this.contactsList.forEach((item) => { - item.emails.forEach((email) => { - if (email.checked) { - params = email.email + ';'; - } - }); - }); - this.sendEmails(params); - } - }, - sendEmails: function (emails) { - var actionData = {}; - actionData.openContent = emails; - }, - onTouchStart: function (phoneNumber) { - phoneNumber.backGroundColor = '#FFDDDCDC'; - }, - onTouchMove: function (phoneNumber) { - phoneNumber.backGroundColor = '#FFFFFF'; - }, - - updateOperateButton: function (contactList) { - LOG.info(TAG + 'updateOperateButton contactList' + contactList); - var checkedList = []; - contactList.forEach((contact) => { - if (this.showPhoneNumber) { - for (var i = 0; i < contact.phoneNumbers.length; i++) { - if (contact.phoneNumbers[i].checked) { - checkedList.push(contact); - break; - } - } - } - if (this.showEmail) { - for (var i = 0; i < contact.emails.length; i++) { - if (contact.emails[i].checked) { - checkedList.push(contact); - break; - } - } - - } - }); - if (checkedList.length == contactList.length) { - this.showSelectAll = false; - } else { - this.showSelectAll = true; - } - if (this.checkedNum == 0) { - this.addMemberDisabled = true; - } else { - this.addMemberDisabled = false; - } - }, - - clickSelectAll: function () { - var temNum = 0; - if (this.showMatchContactsList) { - this.matchingResults.forEach((item) => { - if (this.showPhoneNumber && !item.phoneNumbers[0].checked) { - temNum++; - item.phoneNumbers[0].checked = true; - } - if (this.showEmail && !item.emails[0].checked) { - temNum++; - item.emails[0].checked = true; - } - }); - this.syncCheckedState(); - } - if (this.showContactList) { - this.contactsList.forEach((item) => { - if (this.showPhoneNumber && !item.phoneNumbers[0].checked) { - temNum++; - item.phoneNumbers[0].checked = true; - } - if (this.showEmail && !item.emails[0].checked) { - temNum++; - item.emails[0].checked = true; - } - }); - } - - this.checkedNum = this.checkedNum + temNum; - if (this.showMatchContactsList) { - this.updateOperateButton(this.matchingResults); - } else { - this.updateOperateButton(this.contactsList); - } - this.updateTitle(); - }, - - syncCheckedState: function () { - if (this.showPhoneNumber) { - for (let i = 0; i < this.contactsList.length; i++) { - for (let j = 0; j < this.contactsList[i].phoneNumbers.length; j++) { - for (let m = 0; m < this.matchingResults.length; m++) { - if (this.matchingResults[m].contactId == this.contactsList[i].contactId) { - for (let n = 0; n < this.matchingResults[m].phoneNumbers.length; n++) { - if (this.matchingResults[m].phoneNumbers[n].phoneNumber - == this.contactsList[i].phoneNumbers[j].phoneNumber) { - this.contactsList[i].phoneNumbers[j].checked - = this.matchingResults[m].phoneNumbers[n].checked; - break; - } - } - break; - } - } - } - } - } - if (this.showEmail) { - for (let i = 0; i < this.contactsList.length; i++) { - for (let j = 0; j < this.contactsList[i].emails.length; j++) { - for (let m = 0; m < this.matchingResults.length; m++) { - if (this.matchingResults[m].contactId == this.contactsList[i].contactId) { - for (let n = 0; n < this.matchingResults[m].emails.length; n++) { - if (this.matchingResults[m].emails[n].email == this.contactsList[i].emails[j].email) { - this.contactsList[i].emails[j].checked = this.matchingResults[m].emails[n].checked; - break; - } - } - break; - } - } - } - } - } - }, - - clickCancelSelectAll: function () { - var temNum = 0; - if (this.showContactList) { - this.contactsList.forEach((item) => { - if (this.showPhoneNumber) { - item.phoneNumbers.forEach((phoneNumber) => { - if (phoneNumber.checked) { - temNum++; - phoneNumber.checked = false; - } - }); - } - if (this.showEmail) { - item.emails.forEach((email) => { - if (email.checked) { - temNum++; - email.checked = false; - } - }); - } - }); - } - - if (this.showMatchContactsList) { - this.matchingResults.forEach((item) => { - if (this.showPhoneNumber) { - item.phoneNumbers.forEach((phoneNumber) => { - if (phoneNumber.checked) { - temNum++; - phoneNumber.checked = false; - } - }); - } - if (this.showEmail) { - item.emails.forEach((email) => { - if (email.checked) { - temNum++; - email.checked = false; - } - }); - } - }); - this.syncCheckedState(); - } - - this.checkedNum = this.checkedNum - temNum; - if (this.showMatchContactsList) { - this.updateOperateButton(this.matchingResults); - } else { - this.updateOperateButton(this.contactsList); - } - this.updateTitle(); - }, - - updateTitle: function () { - if (this.checkedNum != 0) { - this.title = this.$t('value.contacts.groupsPage.alreadySelect').replace('num', this.checkedNum + ''); - } else { - this.title = this.$t('value.contacts.groupsPage.noSelect'); - } - }, - - back: function () { - router.back(); - }, - - indexOf: function (arr, val) { - LOG.info(TAG + 'indexOf arr' + arr); - LOG.info(TAG + 'indexOf val' + val); - for (var i = 0; i < arr.length; i++) { - if (this.showPhoneNumber && arr[i].phoneNumber == val) { - return i; - } - if (this.showEmail && arr[i].email == val) { - return i; - } - } - return -1; - }, - - variableEmail(item, keyText) { - LOG.info(TAG + 'variableEmail item' + item); - for (var i = 0; i < item.emails.length; i++) { - var email = item.emails[i].email; - var matchStringEmail = utils.getMatchedString(email, keyText); - if (utils.isEmpty(matchStringEmail) || utils.isEmpty(keyText.trim())) { - item.emails[i].startEmail = ''; - item.emails[i].middleEmail = ''; - item.emails[i].endEmail = email; - } else { - var emailIndex = email.indexOf(matchStringEmail); - item.emails[i].startEmail = email.substr(0, emailIndex); - item.emails[i].middleEmail = email.substr(emailIndex, matchStringEmail.length); - item.emails[i].endEmail = email.substr(emailIndex + matchStringEmail.length); - } - } - }, - - variableName(item, keyText) { - LOG.info(TAG + 'variableName item' + item); - var matchString = utils.getMatchedString(item.emptyNameData, keyText); - if (utils.isEmpty(matchString) || utils.isEmpty(keyText.trim())) { - item.name.searchTextStart = ''; - item.name.searchTextMiddle = ''; - item.name.searchTextEnd = item.emptyNameData; - } else { - var name = item.emptyNameData; - var index = name.indexOf(matchString); - item.name.searchTextStart = name.substr(0, index); - item.name.searchTextMiddle = name.substr(index, matchString.length); - item.name.searchTextEnd = name.substr(index + matchString.length); - } - }, - - variablePhoneNumber(item, keyText) { - LOG.info(TAG + 'variablePhoneNumber item' + item); - for (var i = 0; i < item.phoneNumbers.length; i++) { - var phoneNumber = item.phoneNumbers[i].phoneNumber; - var matchStringPhone = utils.getMatchedString(phoneNumber, keyText); - if (utils.isEmpty(matchStringPhone) || utils.isEmpty(keyText.trim())) { - item.phoneNumbers[i].startPhone = ''; - item.phoneNumbers[i].middlePhone = ''; - item.phoneNumbers[i].endPhone = phoneNumber; - } else { - var phoneIndex = phoneNumber.indexOf(matchStringPhone); - item.phoneNumbers[i].startPhone = phoneNumber.substr(0, phoneIndex); - item.phoneNumbers[i].middlePhone = phoneNumber.substr(phoneIndex, matchStringPhone.length); - item.phoneNumbers[i].endPhone = phoneNumber.substr(phoneIndex + matchStringPhone.length); - } - } - } -}; diff --git a/entry/src/main/js/default/pages/contacts/selectContactsList/selectContactsList.css b/entry/src/main/js/default/pages/contacts/selectContactsList/selectContactsList.css deleted file mode 100644 index 0b8af9d..0000000 --- a/entry/src/main/js/default/pages/contacts/selectContactsList/selectContactsList.css +++ /dev/null @@ -1,589 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - flex-direction: column; - justify-content: flex-start; - align-items: center; - background-color: #FFF; - height: 100%; - width: 100%; -} - -.title-div { - flex-direction: row; - align-items: center; - width: 100%; - justify-content: flex-start; - margin-left: 24px; - margin-top: 10px; - position: relative; -} - -.back-but-div { - width: 73px; - height: 73px; - border-radius: 15px; - align-items: center; -} - -.back-but-div:active { - width: 73px; - height: 73px; - border-radius: 15px; - align-items: center; - background-color: #f3f3f3; -} - -.back-image { - margin-left: 21px; - width: 40px; - height: 40px; - border-radius: 10px; -} - -.select-contacts-title-image-button-right { - width: 65px; - height: 65px; - justify-content: center; - align-items: center; - position: absolute; - right: 30px; - top: 30px; -} - -.select-contacts-title-image-button-right:active { - background-color: #D3D3D3; -} - -.select-contacts-title-image-button-right:disabled { - opacity: .5; -} - -.select-contacts-title-image-right { - width: 45px; - height: 45px; -} - -.title-text { - align-items: center; - justify-content: center; - margin-left: 15px; - font-size: 30px; - font-weight: 500; -} - -.todo-search-div { - position: relative; - flex-direction: row; - justify-content: flex-start; - align-items: flex-start; - width: 85%; - height: 140px; - margin-top: 30px; - margin-bottom: -40px; -} - -.todo-search-div-favorite { - flex-direction: column; - justify-content: flex-start; - align-items: flex-start; - align-content: flex-start; - width: 100%; - margin-left: 45px; - margin-right: 40px; - margin-top: 15px; - display: flex; -} - -.title-text-unselect { - align-items: flex-start; - justify-content: flex-start; - margin-left: 15px; - font-weight: 500; - font-size: 60px; - max-lines: 1; - text-overflow: ellipsis; -} - -.title-text-unselect-favorite-size { - align-items: center; - justify-content: center; - margin-left: 33px; - font-weight: 500; - font-size: 26px; - max-lines: 1; - text-overflow: ellipsis; -} - -.free-space { - align-content: flex-start; - justify-content: flex-start; - align-items: center; - flex-direction: column; - width: 100%; - height: 80%; -} - -.free-space-no-result { - align-content: flex-start; - justify-content: flex-start; - align-items: center; - flex-direction: column; - width: 100%; - height: 75%; -} - -.contacts-image-icon { - margin-top: 42%; - width: 210px; - height: 210px; -} - -.free-space-text { - font-size: 28px; - margin-top: -22px; - font-weight: 400; - color: #999; -} - -.list { - height: 76%; - columns: 1; -} - -.list-favorite { - columns: 1; -} - -.list-item { - position: relative; - flex-direction: column; - align-items: center; - height: 120px; - justify-content: flex-start; -} - -.contact-smart-groups-div { - height: 58px; - align-items: center; - justify-content: flex-start; -} - -.contact-smart-groups-text { - margin-left: 45px; - font-size: 26px; - font-weight: 500; - color: #646464; -} - -.list-content-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: flex-start; - padding-left: 45px; -} - -.list-item-div { - width: 100%; - height: 100%; - flex-direction: row; - columns: 1; - align-items: stretch; - padding-left: 20px; - padding-right: 20px; -} - -.list-item-line { - width: 100%; - margin-right: 40px; - margin-left: 45px; - height: 1px; - border-bottom: 1px; - border-color: #D3D3D3; -} - -.name-text { - text-overflow: ellipsis; - max-lines: 2; - width: 560px; - font-size: 30px; -} - -.todo-item { - width: 454px; - height: 100px; - flex-direction: row; - columns: 1; - align-items: stretch; - padding-left: 20px; - padding-right: 20px; -} - -.todo-item-favorite { - width: 454px; - align-items: stretch; - padding-left: 20px; - padding-right: 20px; - margin-bottom: 25px; - margin-top: 60px; -} - -.todo-item-frequently { - width: 454px; - align-items: stretch; - padding-left: 20px; - padding-right: 20px; - margin-bottom: 25px; - margin-top: 10px; -} - -.todo-user-title-div { - flex-direction: column; - justify-content: flex-start; - align-items: flex-start; - width: 100%; - margin-right: 40px; - margin-top: 15px; - display: flex; -} - -.todo-title-name-frequent { - height: 133px; - text-align: left; - font-size: 30px; -} - - -.todo-content-div { - flex-direction: row; - justify-content: flex-start; - align-items: center; -} - -.first { - width: 20%; - margin-left: 25px; -} - -.todo-content-button { - width: 90%; - height: 65%; - background-color: #DACEB5; -} - -.todo-content-name-last { - width: 90%; - height: 65%; - text-align: center; - font-size: 25px; - allow-scale: true; - font-weight: 600; - color: #FFF; -} - -.todo-item-content-div { - width: 80%; - height: 80%; - align-items: center; - justify-content: center; -} - -.todo-name-suffix-div { - flex-direction: column; - align-items: center; - justify-content: center; - width: 80px; - height: 80px; - border-radius: 60px; - background-color: #D5BAC1; -} - -.todo-item-content-image { - width: 60px; - height: 60px; - border-radius: 60px; -} - -.todo-content-div-div { - flex-direction: column; - justify-content: center; - align-items: flex-start; - margin-start: 32px; - width: 88%; -} - -.todo-content-name { - width: 100%; - text-align: left; - font-size: 32px; - font-weight: 600; - max-lines: 1; - text-overflow: ellipsis; -} - -.todo-content { - margin-top: 9px; - width: 100%; - text-align: left; - max-lines: 1; - text-overflow: ellipsis; - color: #636363; - font-size: 28px; -} - -.allrecords-item-right-checkbox { - justify-content: center; - align-items: center; - width: 160px; - height: 160px; - border-radius: 10px; -} - -.todo-divider-div { - flex-direction: column; - justify-content: flex-start; - align-items: flex-start; - position: absolute; - bottom: 0; - width: 100%; - margin-right: 30px; - margin-left: 32px; -} - -.todo-divider { - line-cap: round; - stroke-width: 1px; - color: #ccc; - margin-right: 25px; -} - -.batch-delete-operation { - width: 85%; - height: 8%; - justify-content: center; -} - -.batch-delete-operation-favorite { - position: absolute; - width: 100%; - height: 110px; - justify-content: center; - bottom: 0; - background-color: #FFF; - padding-top: 10px; - padding-bottom: 20px; -} - -.batch-delete-operation-button { - width: 30%; - height: 100%; - border-radius: 15px; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.batch-delete-image-icon { - width: 50px; - height: 50px; -} - -.batch-delete-text { - font-size: 22px; - font-weight: 500; -} - -.batch-delete-operation-button { - width: 30%; - height: 100%; - border-radius: 15px; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.batch-delete-operation-button:active { - background-color: #D3D3D3; -} - -.batch-delete-operation-button:disabled { - opacity: .5; -} - -.setting-parent-div { - flex-direction: row; - justify-content: flex-start; - align-content: flex-start; - align-items: flex-start; - width: 10%; -} - -.todo-setting-div { - position: absolute; - right: -15px; - width: 90px; - height: 90px; -} - -.setting-parent-div-text { - width: 90%; - margin-left: 60px; - align-items: flex-end; - margin-bottom: 25px; - height: 60px; -} - -.todo-title-name-text { - width: 50%; - height: 90px; - text-align: left; - font-size: 60px; - font-weight: 500; -} - -.back-but-div-favorite { - position: absolute; - width: 60px; - height: 60px; - border-radius: 15px; - align-items: flex-end; - margin-bottom: 25px; -} - -.back-but-div-favorite:active { - position: absolute; - width: 60px; - height: 60px; - border-radius: 15px; - align-items: center; - background-color: #f3f3f3; -} - -.title-text-unselect-favorite { - width: 100%; - text-align: left; - padding-bottom: -5px; - margin-left: 0; - font-size: 40px; - font-weight: 500; - max-lines: 1; - text-overflow: ellipsis; -} - -.back-image-favorite { - width: 55px; - height: 55px; - border-radius: 10px; -} - -.records-detail-contacts-operate-blank { - height: 9%; - width: 100%; - position: absolute; -} - -.dialog-main { - position: relative; - width: 658px; - margin-left: 25px; - margin-right: 25px; - margin-bottom: 35px; -} - -.dialog-div { - flex-direction: column; - align-items: center; - height: 100%; -} - -.title-inner-div { - width: 85%; - flex-direction: column; - align-items: flex-start; - justify-content: flex-start; - height: 80px; -} - -.inner-div { - width: 85%; - flex-direction: column; - align-items: flex-start; - justify-content: center; - padding-top: 35px; -} - -.notice-inner-div { - width: 90%; - flex-direction: row; - align-items: center; - justify-content: flex-start; -} - -.notice-input { - margin-left: -10px; -} - -.inner-btn { - width: 590px; - height: 122px; - justify-content: space-between; - align-items: center; -} - -.btn-div { - width: 285px; - height: 80px; - border-radius: 50px; - justify-content: center; - align-items: center; -} - -.btn-div:active { - background-color: #E7E6E6; -} - - -.delete-btn-div { - width: 285px; - height: 80px; - border-radius: 50px; - justify-content: center; - align-items: center; -} - -.delete-btn-div:disabled { - opacity: .3; -} - -.btn-cancel-txt { - font-size: 32px; - font-weight: 500; - color: #007DFE; -} - -.dialog-inner-divider { - align-items: center; - line-cap: round; - stroke-width: 1px; - height: 45px; - color: #7e7e7e; -} - -.btn-delete-txt { - font-size: 32px; - font-weight: 500; - color: #F00; -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/selectContactsList/selectContactsList.hml b/entry/src/main/js/default/pages/contacts/selectContactsList/selectContactsList.hml deleted file mode 100644 index 8b6c1ea..0000000 --- a/entry/src/main/js/default/pages/contacts/selectContactsList/selectContactsList.hml +++ /dev/null @@ -1,400 +0,0 @@ - -
- -
-
-
- -
-
-
- - {{ title }} - -
-
- -
-
- - -
- - {{ type == 'saveContacts' ? $t('value.selectContact.title') : title }} - -
- -
-
- -
- -
-
- - - {{ $t('value.contacts.groupsPage.noContacts') }} - -
-
- - - {{ $t('value.contacts.groupsPage.noMatchingResults') }} - -
- - - - {{ $t('value.favorites.page.title') }} {{ contactsList.length }} - - - -
-
-
- -
-
-
- {{ item.nameSuffix }} - -
-
-
-
- - -
-
-
-
-
- - {{ - (item.emptyNameData && item.emptyNameData.length > 0) ? item.emptyNameData : $t('value.contacts.page.item.noName') - }} - -
- - -
-
- - -
-
-
- -
-
- - -
-
-
-
- - - -
- - {{$t('group.frequent')}} {{ frequentlyCount }} - -
-
- - - -
-
-
- -
-
-
- {{ $item.nameSuffix }} - -
-
-
-
- - -
-
-
-
-
- {{ $item.name }} - {{ $item.numberTypeLabel }} {{ $item.numbers }} - {{ $t('accountants.house') }} {{ $item.numbers }} - {{ $t('accountants.phone') }} {{ $item.numbers }} - {{ $t('accountants.unit') }} {{ $item.numbers }} - {{ $t('accountants.unit fax') }} {{ $item.numbers }} - {{ $t('accountants.home fax') }} {{ $item.numbers }} - {{ $t('accountants.pager') }} {{ $item.numbers }} - {{ $t('accountants.others') }} {{ $item.numbers }} - {{ $t('accountants.switchboard') }} {{ $item.numbers }} -
- - -
-
- - -
-
-
- -
-
-
-
- - -
- - -
- - {{ $t('value.contacts.groupsPage.matchingResultNumber').replace("num", matchingResults.length + "") - }} - -
-
- -
-
-
- -
-
-
- {{ item.name.nameSuffix }} - -
-
-
-
- - -
-
-
-
-
- - - {{ item.emptyNamePre }} - {{ item.emptyNameMatch }} - {{ item.emptyNameSuf }} - - - - - {{ item.emptyNameData }} - - - - {{ item.organization ? item.organization.name : '' }} - - - {{ item.organization.organizationTitlePre }} - {{ item.organization.organizationTitleMatch }} - {{ item.organization.organizationTitleSuf }} - {{ (item.organization.title && item.organization.name) ? '.' : '' }} - {{ item.organization.organizationNamePre }} - {{ item.organization.organizationNameMatch }} - {{ item.organization.organizationNameSuf }} - - - {{ - (item.phoneNumbers && item.phoneNumbers.length > 0) ? item.phoneNumbers[0].phoneNumberPre : '' - }} - {{ - (item.phoneNumbers && item.phoneNumbers.length > 0) ? item.phoneNumbers[0].phoneNumberMatch : '' - }} - {{ - (item.phoneNumbers && item.phoneNumbers.length > 0) ? item.phoneNumbers[0].phoneNumberSuf : '' - }} - {{ - (item.phoneNumbers && item.phoneNumbers.length > 0 && item.phoneNumbers[0].phoneNumber) ? ' ' : '' - }} - {{ (item.organization && item.organization.name) ? item.organization.name : '' }} - - - {{ - (item.emails && item.emails.length > 0 && item.emails[0].emailPre) ? item.emails[0].emailPre : '' - }} - {{ - (item.emails && item.emails.length > 0 && item.emails[0].emailMatch) ? item.emails[0].emailMatch : '' - }} - {{ - (item.emails && item.emails.length > 0 && item.emails[0].emailSuf) ? item.emails[0].emailSuf : '' - }} - {{ (item.emails && item.emails.length > 0 && item.emails[0].email) ? ' ' : '' }} - - {{ (item.organization && item.organization.name) ? item.organization.name : '' }} - - - {{ - (item.imAddresses && item.imAddresses.length > 0 && item.imAddresses[0].imAddressPre) ? item.imAddresses[0].imAddressPre : '' - }} - {{ - (item.imAddresses && item.imAddresses.length > 0 && item.imAddresses[0].imAddressMatch) ? item.imAddresses[0].imAddressMatch : '' - }} - {{ - (item.imAddresses && item.imAddresses.length > 0 && item.imAddresses[0].imAddressSuf) ? item.imAddresses[0].imAddressSuf : '' - }} - {{ - (item.imAddresses && item.imAddresses.length > 0 && item.imAddresses[0].imAddress) ? ' ' : '' - }} - {{ (item.organization && item.organization.name) ? item.organization.name : '' }} - - - {{ (item.note && item.note.notePre) ? item.note.notePre : '' }} - {{ item.note.noteMatch }} - {{ (item.note && item.note.noteSuf) ? item.note.noteSuf : '' }} - {{ (item.note && item.note.noteContent) ? ' ' : '' }} - {{ (item.organization && item.organization.name) ? item.organization.name : '' }} - - - {{ (item.nickName && item.nickName.nickNamePre) ? item.nickName.nickNamePre : '' }} - {{ item.nickName.nickNameMatch }} - {{ (item.nickName && item.nickName.nickNameSuf) ? item.nickName.nickNameSuf : '' }} - {{ (item.nickName && item.nickName.nickName) ? ' ' : '' }} - {{ (item.organization && item.organization.name) ? item.organization.name : '' }} - -
- - -
-
- - -
-
-
- - -
-
-
-
-
-
-
- - {{ $t('value.contacts.groupsPage.add') }} - -
-
- - {{ $t('value.contacts.groupsPage.remove') }} - -
-
- - {{ $t('value.contacts.groupsPage.add') }} - -
-
- - {{ $t('value.contacts.groupsPage.remove') }} - -
-
- - {{ $t('value.contacts.groupsPage.delete') }} - -
-
- - {{ $t('value.contacts.groupsPage.selectAll') }} - -
-
- - {{ $t('value.contacts.groupsPage.cancelSelectAll') - }} - -
-
- -
-
- {{ - $t('value.contacts.groupsPage.deleteOneContact') }} - {{ - $t('value.contacts.groupsPage.deleteAllContacts') }} - {{ - $t('value.contacts.groupsPage.deleteOthersContacts').replace('num', checkedList.length) }} -
-
- {{ - language == 'zh' ? $t('value.contacts.groupsPage.deleteWarnInfo') : - $tc('value.contacts.groupsPage.deleteWarnInfo', checkedList.length) - }} -
-
- - {{ $t('value.contacts.groupsPage.signNotice') }} -
-
-
- {{ $t('value.contacts.groupsPage.cancelBtnText') }} - -
- -
- {{ $t('value.contacts.groupsPage.deleteBtnText') }} - -
-
- {{ $t('value.contacts.groupsPage.deleteBtnText') }} - -
-
-
-
-
\ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/selectContactsList/selectContactsList.js b/entry/src/main/js/default/pages/contacts/selectContactsList/selectContactsList.js deleted file mode 100644 index 56cd624..0000000 --- a/entry/src/main/js/default/pages/contacts/selectContactsList/selectContactsList.js +++ /dev/null @@ -1,1261 +0,0 @@ -/** - * @file Selecting a Contact list - */ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import router from '@system.router'; -import prompt from '@system.prompt'; -import ohosDataAbility from '@ohos.data.dataability'; -import featureAbility from '@ohos.ability.featureAbility'; -import groupReq from '../../../../default/model/GroupsModel.js'; -import contactsDataBase from '../../../../default/model/SelectContactsListModel.js'; -import favoritesModel from '../../../../default/model/FavoritesModel.js'; -import LOG from '../../../utils/ContactsLog.js'; -import Constants from '../../../../default/common/constants/Constants.js'; - -var TAG = 'selectContactsList...:'; - -const SEARCH_TYPE_FAVORITE = 1; // Search collection -const SEARCH_TYPE_IN_GROUP = 2; // Intra group search -const SEARCH_TYPE_OUTSIDE_GROUP = 3; // Out of group search -// 数字解释 -const NUMBERS_MEANING = { - HEADER_MIN_HEIGHT: 60, - HEADER_MAX_HEIGHT: 180, - HEADER_MIN_FONT_SIZE: 50, - HEADER_MAX_FONT_SIZE: 60, - HEADER_MIN_MAGIN_LENGTH: 0, - HEADER_MAX_MAGIN_LENGTH: 75, - HEADER_MIN_TO_MAX_FONT_SIZE: 10, - HEADER_MIN_TO_MAX_HEIGHT_SIZE: 120, -}; -const IS_FAVORITE = 1; -const IS_NOT_FAVORITE = 0; - - -export default { - data: { - title: '', // title - type: '', - groupId: 0, - page: 0, - limit: 20, // Number of entries per page - showEmptyPage: false, // The list page is empty - noMatchingResults: false, // The displayed search results are empty - checkedNum: 0, // Number of contacts selected - contactsList: [], // contact list - todoList: [], // Favorite contacts - matchingResults: [], // search result - showSelectAll: true, // SelectAll - addMemberDisabled: true, - layoutState: true, - showContactList: true, - showMatchContactsList: false, - contactId: '', - pressIndex: 0, - index: ['#', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '…'], - globalX: 0, - globalY: 0, - pYMove: 0, - headerFavoriteHeight: NUMBERS_MEANING.HEADER_MAX_HEIGHT, - headerFavoriteMaginLeft: NUMBERS_MEANING.HEADER_MIN_MAGIN_LENGTH, - headerFavoriteFontSize: NUMBERS_MEANING.HEADER_MAX_FONT_SIZE, - checkedList: [], - contactCount: 0, // Total contacts - frequentlyCount: 0, // Total number of favorites - language: '', - dialog: { - dialogHeight: '', - titleMarginTop: '', - waringHeight: '', - diaButPadTop: '', - warningChecked: false, - buttonDisable: false, - }, - isClickSelectAll: false, // whether clicked select all - checkedContactIds: [], // Selected contact collection - unCheckedContactIds: [] // Unselect contact collection - }, - onInit() { - LOG.info(TAG + 'onInit success'); - this.title = this.$t('value.contacts.groupsPage.noSelect'); - this.language = 'zh'; - this.conciseLayoutInit(); - if (this.type == 'editFavorites') { - this.getFavoritesContacts(this.contactId); - return; - } - if (this.type == 'addMemberFromGroups') { - this.getMembersOutSideGroup(); - return; - } - if (this.type == 'removeMemberFromGroups') { - this.getGroupMemberList(); - return; - } - if (this.type == 'deleteBatchContacts' || this.type == 'saveContacts' || this.type - == 'mmsChooseContacts') { - this.getContactsList(); - return; - } - if (this.type == 'getContactsListFavorites') { - this.getNotFavoritesContacts(); - } - }, - - requestItem: function () { - this.page++; - if (this.type == 'editFavorites') { - return; - } - if (this.type == 'addMemberFromGroups') { - this.getMembersOutSideGroup(); - } - if (this.type == 'removeMemberFromGroups') { - this.getGroupMemberList(); - } - if (this.type == 'deleteBatchContacts' || this.type == 'saveContacts' || this.type - == 'mmsChooseContacts') { - this.getContactsList(); - } - if (this.type == 'getContactsListFavorites') { - this.getNotFavoritesContacts(); - } - }, - getNotFavoritesContacts: function () { - var actionData = { - page: this.page, - limit: this.limit, - star: 0, - }; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - favoritesModel.queryUnFavoritesContacts(DAHelper, actionData, result => { - if (result.code == 0 && result.resultList.length > 0) { - if (this.page == 0) { - result.resultList.forEach((item) => { - item.checked = false; - }); - this.contactsList = result.resultList; - } else { - result.resultList.forEach((item) => { - this.updateItemCheckedState(item); - }); - this.contactsList = this.contactsList.concat(result.resultList); - } - this.contactCount = this.contactsList.length; - } - if (this.contactsList.length == 0) { - this.showEmptyPage = true; - } - }); - }, - getMembersOutSideGroup: function () { - var actionData = { - page: this.page, - limit: this.limit, - groupId: this.groupId - }; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.getOutOfGroupMembers(DAHelper, actionData, result => { - LOG.info(TAG + 'getMembersOutSideGroup result'); - if (result.code == 0 && result.totalCount > 0) { - if (this.page == 0) { - result.resultList.forEach((item) => { - item.checked = false; - }); - this.contactsList = result.resultList; - } else { - result.resultList.forEach((item) => { - this.updateItemCheckedState(item); - }); - this.contactsList = this.contactsList.concat(result.resultList); - } - this.contactCount = this.contactsList.length; - } - if (this.contactsList.length == 0) { - this.showEmptyPage = true; - } - }); - }, - getGroupMemberList: function () { - var actionData = { - page: this.page, - limit: this.limit, - groupId: this.groupId - }; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.queryGroupMembers(DAHelper, actionData, result => { - LOG.info(TAG + 'getGroupMemberList result'); - if (result.code == 0 && result.totalCount > 0) { - if (this.page == 0) { - this.contactsList = result.resultList; - } else { - result.resultList.forEach((item) => { - this.updateItemCheckedState(item); - }); - this.contactsList = this.contactsList.concat(result.resultList); - } - this.contactCount = this.contactsList.length; - } else if (result.code != 0) { - prompt.showToast({ - message: 'Failed to init data.' - }); - } else { - LOG.info(TAG + 'result.totalCount is 0'); - } - if (this.contactsList.length == 0) { - this.showEmptyPage = true; - } - }); - }, - getContactsList: function () { - var actionData = { - page: this.page, - limit: this.limit - }; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - contactsDataBase.queryContactList(DAHelper, actionData, (result) => { - LOG.info(TAG + 'getContactsList result' + result); - result.contactCount = result.resultList.length; - if (result.code == 0) { - if (this.page == 0) { - result.resultList.forEach((item) => { - item.checked = false; - }); - this.contactsList = result.resultList; - } else { - result.resultList.forEach((item) => { - this.updateItemCheckedState(item); - }); - this.contactsList = this.contactsList.concat(result.resultList); - } - this.contactCount = this.contactsList.length; - } else { - prompt.showToast({ - message: 'Failed to init data.' - }); - } - if (this.contactsList.length == 0) { - this.showEmptyPage = true; - } - }); - }, - clickSearch: function (e) { - LOG.info(TAG + 'clickSearch e' + e); - // Search input box - if (e.text) { - this.showContactList = false; - this.showMatchContactsList = true; - this.searchRequest(e.text); - } else { - if (this.checkedNum == this.contactCount) { - this.showSelectAll = false; - } else { - this.showSelectAll = true; - } - this.showContactList = true; - this.showMatchContactsList = false; - this.noMatchingResults = false; - } - }, - touchStartSearch: function () { - this.$element('search').focus({ - focus: true - }) - }, - doSelect() { - let checkedList = []; - let contactIds = []; - this.contactsList.forEach(item => { - if (item.checked) { - let contact = { - id : item.contactId, - name : item.emptyNameData, - telePhone : '' - }; - contactIds.push(item.contactId); - checkedList.push(contact); - } - }); - if(contactIds.length > 0) { - let actionData = { - contactIds: contactIds, - }; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - contactsDataBase.getTypeId(DAHelper,actionData, result => { - if (result.resultList.length > 0) { - let telePhoneMap = new Map(); - for(let element of result.resultList) { - if(!telePhoneMap.has(element.contactId)) { - telePhoneMap.set(element.contactId, element); - } - } - for(let item of checkedList) { - if(telePhoneMap.has(item.id)) { - item.telePhone = telePhoneMap.get(item.id).detailInfo; - } - } - this.saveSelectedContacts(checkedList); - } - }); - } - }, - - saveSelectedContacts(selectedContacts) { - let contacts = this.dealContactName(selectedContacts); - let parameters = { - contactObjects: JSON.stringify(contacts) - }; - var result = { - resultCode: 0, - want: { - parameters: parameters - } - }; - LOG.info('selectedContacts result' + result); - featureAbility.finishWithResult(result); - featureAbility.terminateSelf(); - router.back(); - }, - - dealContactName(checkedList) { - let contacts = []; - for (let item of checkedList) { - let contact = { - contactName: item.name, - telephone: item.telePhone - }; - contacts.push(contact); - } - return contacts; - }, - - /** - * Search request background - * - * @param {string} keyText Input box text content - */ - searchRequest: function (keyText) { - LOG.info(TAG + 'searchRequest keyText'); - var requestData = { - likeValue: keyText - }; - if (this.type == 'addMemberFromGroups') { - requestData.searchType = SEARCH_TYPE_OUTSIDE_GROUP; - requestData.groupId = this.groupId; - } - if (this.type == 'removeMemberFromGroups') { - requestData.searchType = SEARCH_TYPE_IN_GROUP; - requestData.groupId = this.groupId; - } - // No favorite list page search - if (this.type == 'getContactsListFavorites') { - requestData.searchType = SEARCH_TYPE_FAVORITE; - requestData.starred = IS_NOT_FAVORITE; - } - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.searchContacts(DAHelper, requestData, result => { - if (result.code == 0 && result.contactCount > 0) { - let matchCheckedNum = 0; - // Judge that if it is already selected, it will be initialized to the selected status - result.data.forEach((item) => { - if (this.isClickSelectAll) { - if (this.indexOfArray(this.unCheckedContactIds, item.contactId) == -1) { - item.checked = true; - matchCheckedNum++; - } else { - item.checked = false; - } - } else if (this.indexOfArray(this.checkedContactIds, item.contactId) != -1) { - item.checked = true; - matchCheckedNum++; - } else { - item.checked = false; - } - }); - this.processHighLight(result.data, keyText); - this.matchingResults = []; - this.matchingResults = result.data; - // If all the search results are selected, select all will be on - if (matchCheckedNum == this.matchingResults.length) { - this.showSelectAll = false; - } else { - this.showSelectAll = true; - } - } else { - this.matchingResults = []; - this.showSelectAll = true; - if (result.code != 0) { - prompt.showToast({ - message: 'select contact request error.' - }); - } - } - if (this.matchingResults && this.matchingResults.length == 0) { - this.noMatchingResults = true; - } else { - this.noMatchingResults = false; - } - LOG.info(TAG + 'select search request result'); - }); - }, - updateItemCheckedState: function (item) { - LOG.info(TAG + 'updateItemCheckedState item'); - if (this.isClickSelectAll) { - if (this.indexOfArray(this.unCheckedContactIds, item.contactId) == -1) { - item.checked = true; - } else { - item.checked = false; - } - } else if (this.indexOfArray(this.checkedContactIds, item.contactId) != -1) { - item.checked = true; - } else { - item.checked = false; - } - }, - - processHighLight: function (searchList, likeValue) { - searchList.forEach((element) => { - if (element.searchMimetype[0].search('/name') != -1) { - - this.conditionOne(element, likeValue); - - } else if (element.searchMimetype[0].search('/organization') != -1) { - - this.conditionTwo(element, likeValue); - - this.conditionThree(element, likeValue); - - } else if (element.searchMimetype[0].search('/phone') != -1) { - - this.conditionFour(element, likeValue); - - } else if (element.searchMimetype[0].search('/email') != -1) { - - this.conditionFive(element, likeValue); - - } else if (element.searchMimetype[0].search('/im') != -1) { - - this.conditionSix(element, likeValue); - - } else if (element.searchMimetype[0].search('/postal-address_v2') != -1) { - - this.conditionSeven(element, likeValue); - } - else if (element.searchMimetype[0].search('/note') != -1) { - - this.conditionEight(element, likeValue); - - } else if (element.searchMimetype[0].search('/nickname') != -1) { - - this.conditionNine(element, likeValue); - - } - }); - }, - - conditionOne: function (element, likeValue) { - var emptyName = element.emptyNameData; - var emptyNameMatch = this.highLightChars(emptyName, likeValue); - var emptyNamePre = ''; - var emptyNameSuf = ''; - if (this.isEmpty(emptyNameMatch)) { - emptyNamePre = ''; - emptyNameMatch = ''; - emptyNameSuf = emptyName; - } else { - emptyNamePre = emptyName.substring(0, emptyName.indexOf(emptyNameMatch)); - emptyNameSuf = emptyName.substring(emptyName.indexOf(emptyNameMatch) + emptyNameMatch.length); - } - - element.emptyNamePre = emptyNamePre; - element.emptyNameMatch = emptyNameMatch; - element.emptyNameSuf = emptyNameSuf; - }, - conditionTwo: function (element, likeValue) { - var organizationTitle = element.organization.title; - if (this.isEmpty(organizationTitle)) { - organizationTitlePre = ''; - organizationTitleMatch = ''; - organizationTitleSuf = ''; - } else { - var organizationTitleMatch = this.highLightChars(organizationTitle, likeValue); - var organizationTitlePre = ''; - var organizationTitleSuf = ''; - if (this.isEmpty(organizationTitleMatch)) { - organizationTitlePre = ''; - organizationTitleMatch = ''; - organizationTitleSuf = organizationTitle; - } else { - organizationTitlePre = organizationTitle.substring(0, - organizationTitle.indexOf(organizationTitleMatch)); - - organizationTitleSuf = organizationTitle.substring(organizationTitle.indexOf(organizationTitleMatch) - + organizationTitleMatch.length); - } - } - element.organization.organizationTitlePre = organizationTitlePre; - element.organization.organizationTitleMatch = organizationTitleMatch; - element.organization.organizationTitleSuf = organizationTitleSuf; - }, - - conditionThree: function (element, likeValue) { - var organizationName = element.organization.name; - if (this.isEmpty(organizationName)) { - organizationNamePre = ''; - organizationNameMatch = ''; - organizationNameSuf = ''; - } else { - var organizationNameMatch = this.highLightChars(organizationName, likeValue); - var organizationNamePre = ''; - var organizationNameSuf = ''; - if (this.isEmpty(organizationNameMatch)) { - organizationNamePre = ''; - organizationNameMatch = ''; - organizationNameSuf = organizationName; - } else { - organizationNamePre = organizationName.substring(0, organizationName.indexOf(organizationNameMatch)); - - organizationNameSuf = organizationName.substring(organizationName.indexOf(organizationNameMatch) - + organizationNameMatch.length); - } - } - element.organization.organizationNamePre = organizationNamePre; - element.organization.organizationNameMatch = organizationNameMatch; - element.organization.organizationNameSuf = organizationNameSuf; - }, - - conditionFour: function (element, likeValue) { - var phoneNumber = element.phoneNumbers[0].phoneNumber; - var phoneNumberMatch = this.highLightChars(phoneNumber, likeValue); - var phoneNumberPre = ''; - var phoneNumberSuf = ''; - if (this.isEmpty(phoneNumberMatch)) { - phoneNumberPre = ''; - phoneNumberMatch = ''; - phoneNumberSuf = phoneNumber; - } else { - phoneNumberPre = phoneNumber.substring(0, phoneNumber.indexOf(phoneNumberMatch)); - phoneNumberSuf = phoneNumber.substring(phoneNumber.indexOf(phoneNumberMatch) + phoneNumberMatch.length); - } - element.phoneNumbers[0].phoneNumberPre = phoneNumberPre; - element.phoneNumbers[0].phoneNumberMatch = phoneNumberMatch; - element.phoneNumbers[0].phoneNumberSuf = phoneNumberSuf; - }, - - conditionFive: function (element, likeValue) { - var email = element.emails[0].email; - var emailMatch = this.highLightChars(email, likeValue); - var emailPre = ''; - var emailSuf = ''; - if (this.isEmpty(emailMatch)) { - emailPre = ''; - emailMatch = ''; - emailSuf = email; - } else { - emailPre = email.substring(0, email.indexOf(emailMatch)); - emailSuf = email.substring(email.indexOf(emailMatch) + emailMatch.length); - } - element.emails[0].emailPre = emailPre; - element.emails[0].emailMatch = emailMatch; - element.emails[0].emailSuf = emailSuf; - }, - - conditionSix: function (element, likeValue) { - var imAddress = element.imAddresses[0].imAddress; - var imAddressMatch = this.highLightChars(imAddress, likeValue); - var imAddressPre = ''; - var imAddressSuf = ''; - if (this.isEmpty(imAddressMatch)) { - imAddressPre = ''; - imAddressMatch = ''; - imAddressSuf = imAddress; - } else { - imAddressPre = imAddress.substring(0, imAddress.indexOf(imAddressMatch)); - imAddressSuf = imAddress.substring(imAddress.indexOf(imAddressMatch) + imAddressMatch.length); - } - element.imAddresses[0].imAddressPre = imAddressPre; - element.imAddresses[0].imAddressMatch = imAddressMatch; - element.imAddresses[0].imAddressSuf = imAddressSuf; - }, - - conditionSeven: function (element, likeValue) { - var postalAddress = element.postalAddresses[0].postalAddress; - var postalAddressMatch = this.highLightChars(postalAddress, likeValue); - var postalAddressPre = ''; - var postalAddressSuf = ''; - if (this.isEmpty(postalAddressMatch)) { - postalAddressPre = ''; - postalAddressMatch = ''; - postalAddressSuf = postalAddress; - } else { - postalAddressPre = postalAddress.substring(0, postalAddress.indexOf(postalAddressMatch)); - - postalAddressSuf = postalAddress.substring(postalAddress.indexOf(postalAddressMatch) - + postalAddressMatch.length); - } - element.postalAddresses[0].postalAddressPre = postalAddressPre; - element.postalAddresses[0].postalAddressMatch = postalAddressMatch; - element.postalAddresses[0].postalAddressSuf = postalAddressSuf; - }, - - conditionEight: function (element, likeValue) { - var note = element.note.noteContent; - var noteMatch = this.highLightChars(note, likeValue); - var notePre = ''; - var noteSuf = ''; - if (this.isEmpty(noteMatch)) { - notePre = ''; - noteMatch = ''; - noteSuf = note; - } else { - notePre = note.substring(0, note.indexOf(noteMatch)); - noteSuf = note.substring(note.indexOf(noteMatch) + noteMatch.length); - } - element.note.notePre = notePre; - element.note.noteMatch = noteMatch; - element.note.noteSuf = noteSuf; - }, - - conditionNine: function (element, likeValue) { - var nickName = element.nickName.nickName; - var nickNameMatch = this.highLightChars(nickName, likeValue); - var nickNamePre = ''; - var nickNameSuf = ''; - if (this.isEmpty(nickNameMatch)) { - nickNamePre = ''; - nickNameMatch = ''; - nickNameSuf = nickName; - } else { - nickNamePre = nickName.substring(0, nickName.indexOf(nickNameMatch)); - nickNameSuf = nickName.substring(nickName.indexOf(nickNameMatch) + nickNameMatch.length); - } - element.nickName.nickNamePre = nickNamePre; - element.nickName.nickNameMatch = nickNameMatch; - element.nickName.nickNameSuf = nickNameSuf; - }, - - highLightChars: function (targetStr, matchStr) { - if (this.isEmpty(targetStr) || this.isEmpty(matchStr)) { - return ''; - } - var noSpaceMatch = matchStr.replace(/\s/g, ''); - var result = ''; - var spaceNum = 0; - for (var i = 0; i < targetStr.length; i++) { - if (targetStr.charAt(i) == noSpaceMatch.charAt(0)) { - for (var r = 0; r < noSpaceMatch.length; r++) { - if (targetStr.charAt(i + r + spaceNum) == ' ') { - result = result + targetStr.charAt(i + r + spaceNum); - spaceNum++; - r--; - continue; - } - if (targetStr.charAt(i + r + spaceNum) == noSpaceMatch.charAt(r)) { - result = result + targetStr.charAt(i + r + spaceNum); - if (r == noSpaceMatch.length - 1) { - return result; - } - } else { - result = ''; - spaceNum = 0; - break; - } - } - } - } - return result; - }, - - isEmpty: function (str) { - LOG.info(TAG + 'isEmpty str'); - return str == undefined || str == null || str == ''; - }, - - itemClick: function (item) { - LOG.info(TAG + 'itemClick item'); - if (this.type == 'saveContacts') { - if (!this.isEmpty(this.number)) { // Save new number to contact - router.push( - { - uri: 'pages/contacts/accountants/accountants', - params: { - addShow: false, - updataShow: true, - showWork: true, - upHouseShow: true, - upPinShow: true, - saveContact: true, - contactId: item.contactId, - phoneNumber: this.number - } - }); - } - return; - } - item.checked = !item.checked; - if (item.checked) { - if (!this.isClickSelectAll) { - this.checkedContactIds.push(item.contactId); - } else { - this.removeFromArray(this.unCheckedContactIds, item.contactId); - } - } else if (this.isClickSelectAll) { - this.unCheckedContactIds.push(item.contactId); - } else { - this.removeFromArray(this.checkedContactIds, item.contactId); - } - this.updateCheckedNumAndButtonState(); - this.initTitle(); - }, - - toSaveContactsInfo(contacts) { - LOG.info(TAG + 'toSaveContactsInfo contacts'); - if (!contacts.isPushed) { // Prevent the same contact from adding numbers more than once - if (contacts.phoneNumbers && contacts.phoneNumbers.length == 0) { - contacts.phoneNumbers = []; - } - contacts.phoneNumbers.push({ - 'labelId': 2, - 'labelName': this.$t('accountants.phone'), - 'phoneNumber': this.number, - 'phoneAddress': 'N', - 'showP': false, - 'blueStyle': true - }); - contacts.isPushed = true; - } - router.push( - { - uri: 'pages/contacts/accountants/accountants', - params: { - addShow: false, - updataShow: true, - showWork: true, - upHouseShow: true, - upPinShow: true, - saveContact: true, - contactForm: contacts - } - }); - }, - searchItemClick: function (item) { - LOG.info(TAG + 'searchItemClick item'); - item.checked = !item.checked; - var checkedList = []; - this.matchingResults.forEach((contact) => { - if (contact.checked) { - checkedList.push(contact); - } - }); - - if (item.checked) { - if (!this.isClickSelectAll) { - this.checkedContactIds.push(item.contactId); - } else { - this.removeFromArray(this.unCheckedContactIds, item.contactId); - } - // If the search result is selected, the contact list follows the selection - this.contactsList.forEach((contact) => { - if (item.contactId == Number(contact.contactId)) { - contact.checked = true; - } - }); - this.checkedNum++; - if (checkedList.length == this.matchingResults.length) { - this.showSelectAll = false; - } - } else { - if (this.isClickSelectAll) { - this.unCheckedContactIds.push(item.contactId); - } else { - this.removeFromArray(this.checkedContactIds, item.contactId); - } - this.contactsList.forEach((contact) => { - if (item.contactId == Number(contact.contactId)) { - contact.checked = false; - } - }); - this.checkedNum--; - this.showSelectAll = true; - } - - if (this.checkedNum == 0) { - this.addMemberDisabled = true; - } else { - this.addMemberDisabled = false; - } - this.initTitle(); - }, - clickAddMember: function () { - var actionData = {}; - actionData.groupId = this.groupId.toString(); - actionData.contactBeans = []; - if (this.isClickSelectAll) { - actionData.isOperationAll = true; - this.unCheckedContactIds.forEach((contactId) => { - var checkItem = {}; - checkItem.contactId = contactId; - actionData.contactBeans.push(checkItem); - }); - } else { - actionData.isOperationAll = false; - this.checkedContactIds.forEach((contactId) => { - var checkItem = {}; - checkItem.contactId = contactId; - actionData.contactBeans.push(checkItem); - }); - } - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.addGroupMembers(DAHelper, actionData, result => { - router.back(); - }); - }, - clickDeleteMember: function () { - var actionData = {}; - actionData.groupId = this.groupId; - actionData.contactBeans = []; - if (this.isClickSelectAll) { - actionData.isOperationAll = true; - this.unCheckedContactIds.forEach((contactId) => { - var checkItem = {}; - checkItem.contactId = contactId; - actionData.contactBeans.push(checkItem); - }); - } else { - actionData.isOperationAll = false; - this.checkedContactIds.forEach((contactId) => { - var checkItem = {}; - checkItem.contactId = contactId; - actionData.contactBeans.push(checkItem); - }); - } - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.deleteGroupMembers(DAHelper, actionData, result => { - router.back(); - }); - }, - cancelClick: function () { - this.$element('deleteWarning').close(); - this.dialog.warningChecked = false; - this.dialog.buttonDisable = false; - }, - deleteClick: function () { - var actionData = {}; - actionData.contactIds = []; - if (this.isClickSelectAll) { - actionData.isOperationAll = true; - this.unCheckedContactIds.forEach((contactId) => { - var checkItem = {}; - checkItem.contactId = contactId; - actionData.contactIds.push(checkItem); - }); - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - contactsDataBase.checkedDelete(DAHelper, actionData.isOperationAll, this.unCheckedContactIds, (result) => { - if (result == 0) { - router.back(); - } else { - LOG.error(TAG + 'delete contacts code is '); - } - }); - } else { - actionData.isOperationAll = false; - this.checkedContactIds.forEach((contactId) => { - var checkItem = {}; - checkItem.contactId = contactId; - actionData.contactIds.push(checkItem); - }); - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - contactsDataBase.checkedDelete(DAHelper, actionData.isOperationAll, this.checkedContactIds, (result) => { - if (result == 0) { - router.back(); - } else { - LOG.error(TAG + 'delete contacts code is '); - } - }); - } - }, - dialogChecked: function () { - this.dialog.warningChecked = !this.dialog.warningChecked; - this.dialog.buttonDisable = this.dialog.warningChecked ? true : false; - }, - checkedChange: function (e) { - this.dialog.warningChecked = e.checked; - this.dialog.buttonDisable = this.dialog.warningChecked ? true : false; - }, - clickDeleteContacts: function () { - this.checkedList = []; - this.contactsList.forEach(item => { - if (item.checked) { - this.checkedList.push(item.contactId); - } - }); - switch (this.language) { - case 'zh': - this.dialog.dialogHeight = '378px'; - this.dialog.titleMarginTop = '30px'; - this.dialog.waringHeight = '76px'; - this.dialog.diaButPadTop = '15px'; - break; - case 'en': - this.dialog.dialogHeight = '415px'; - this.dialog.titleMarginTop = '32px'; - this.dialog.waringHeight = '110px'; - this.dialog.diaButPadTop = '15px'; - break; - default: - this.dialog.dialogHeight = '378px'; - this.dialog.titleMarginTop = '30px'; - this.dialog.diaButPadTop = '15px'; - break; - } - this.$element('deleteWarning').show(); - }, - clickSelectAll: function () { - if (this.showContactList) { - this.isClickSelectAll = true; - this.contactsList.forEach((item) => { - item.checked = true; - }); - this.todoList.forEach(item => { - item.checked = true; - }); - this.unCheckedContactIds = []; - this.checkedContactIds = []; - this.updateCheckedNumAndButtonState(); - } - if (this.showMatchContactsList) { - this.matchingResults.forEach((item) => { - if (!item.checked) { - if (this.isClickSelectAll) { - this.removeFromArray(this.unCheckedContactIds, item.contactId); - } else { - this.checkedContactIds.push(item.contactId); - } - this.checkedNum++; - } - item.checked = true; - }); - this.contactsList.forEach((item) => { - this.updateItemCheckedState(item); - }); - - this.showSelectAll = false; - this.addMemberDisabled = false; - } - this.initTitle(); - }, - clickCancelSelectAll: function () { - if (this.showContactList) { - this.isClickSelectAll = false; - this.contactsList.forEach((item) => { - item.checked = false; - }); - this.todoList.forEach(item => { - item.checked = false; - }); - this.unCheckedContactIds = []; - this.checkedContactIds = []; - this.updateCheckedNumAndButtonState(); - } - if (this.showMatchContactsList) { - this.matchingResults.forEach((item) => { - if (item.checked) { - if (this.isClickSelectAll) { - this.unCheckedContactIds.push(item.contactId); - } else { - this.removeFromArray(this.checkedContactIds, item.contactId); - } - this.checkedNum--; - } - item.checked = false; - }); - this.contactsList.forEach((item) => { - this.updateItemCheckedState(item); - }); - - this.showSelectAll = true; - if (this.checkedNum == 0) { - this.addMemberDisabled = true; - } else { - this.addMemberDisabled = false; - } - } - this.initTitle(); - }, - initTitle: function () { - if (this.checkedNum != 0) { - if (!this.showSelectAll && this.isClickSelectAll) { - this.title = this.$t('value.contacts.groupsPage.alreadySelect').replace('num', (this.contactCount - + this.frequentlyCount) + ''); - } else { - this.title = this.$t('value.contacts.groupsPage.alreadySelect').replace('num', this.checkedNum + ''); - } - } else { - this.title = this.$t('value.contacts.groupsPage.noSelect'); - } - }, - updateCheckedNumAndButtonState: function () { - if (this.isClickSelectAll) { - if (this.unCheckedContactIds.length == 0) { - this.showSelectAll = false; - } else { - this.showSelectAll = true; - } - this.checkedNum = (this.contactCount + this.frequentlyCount) - this.unCheckedContactIds.length; - } else { - if (this.checkedContactIds.length == this.contactCount + this.frequentlyCount) { - this.showSelectAll = false; - } else { - this.showSelectAll = true; - } - this.checkedNum = this.checkedContactIds.length; - } - if (this.checkedNum == 0) { - this.addMemberDisabled = true; - } else { - this.addMemberDisabled = false; - } - }, - - back: function () { - router.back(); - }, - clickAddFavorites: function () { - let timestamp = (new Date()).valueOf(); - var actionData = { - favorite: '1', - favorite_order: timestamp - }; - actionData.ids = []; - if (this.isClickSelectAll) { - actionData.isOperationAll = true; - this.unCheckedContactIds.forEach((contactId) => { - actionData.ids.push(contactId); - }); - } else { - actionData.isOperationAll = false; - this.checkedContactIds.forEach((contactId) => { - actionData.ids.push(contactId); - }); - } - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - favoritesModel.updateFavoriteState(DAHelper, actionData, result => { - if (result == 0) { - this.$app.$def.setRefreshFavorite(); - router.back(); - } else { - LOG.info(TAG + 'plus result is error:'); - } - }); - }, - clickDeleteFavorites: function () { - var actionData = { - favorite: '0' - }; - actionData.ids = []; - this.checkedContactIds.forEach((contactId) => { - actionData.ids.push(contactId); - }); - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - favoritesModel.removeFavoriteState(DAHelper, actionData, result => { - if (result == 0) { - this.$app.$def.setRefreshFavorite(); - router.back(); - } else { - LOG.info(TAG + 'plus result is error:'); - } - }); - }, - getFavoritesContacts(contactId) { - var actionData = { - page: this.page, - limit: this.limit, - star: 1 - }; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - favoritesModel.queryFavoritesContacts(DAHelper, actionData, result => { - LOG.info(TAG + 'query delete star list =' + result); - if (result.code == 0) { - LOG.error(TAG + 'result favorites list: '); - result.resultList.forEach(item => { - if (item.contactId == contactId) { - item.checked = true; - this.checkedContactIds.push(contactId); - this.checkedNum++; - this.addMemberDisabled = false; - } else { - item.checked = false; - } - }); - result.todoList.forEach(element => { - if (element.contactId == contactId) { - element.checked = true; - this.checkedContactIds.push(contactId); - this.checkedNum++; - this.addMemberDisabled = false; - } else { - element.checked = false; - } - }); - for (var index in result.resultList) { - if (result.resultList[index].contactId == contactId) { - this.pressIndex = index; - break; - } - } - for (var idx in result.todoList) { - if (result.todoList[idx].contactId == contactId) { - this.pressIndex = idx; - break; - } - } - this.contactsList = result.resultList; - this.todoList = result.todoList; - this.contactCount = result.contactCount; - this.frequentlyCount = result.frequentlyCount; - if ((this.contactCount + this.frequentlyCount) == this.checkedNum) { - this.showSelectAll = !this.showSelectAll; - } - } else { - this.contactsList = []; - this.todoList = []; - this.showEmptyPage = true; - LOG.info(TAG + 'plus result is error:'); - } - this.initTitle(); - }); - }, - - onTouchStartList: function (e) { - if (this.type == 'editFavorites') { - this.globalX = e.touches[0].globalX; - this.globalY = e.touches[0].globalY; - this.pYStart = e.touches[0].globalY; - } - }, - onTouchListMove: function (e) { - if (this.type == 'editFavorites') { - this.pYMove = this.pYStart - e.touches[0].globalY; - if (this.pYMove != 0 && this.pYMove > 0) { - // Move up, hidden, no processing required; To move the display status upward, you need to set the hide - if (this.headerFavoriteHeight <= NUMBERS_MEANING.HEADER_MIN_HEIGHT) { - this.isScrollTopPosition = true; - this.headerFavoriteFontSize = NUMBERS_MEANING.HEADER_MIN_FONT_SIZE; - this.headerFavoriteMaginLeft = NUMBERS_MEANING.HEADER_MAX_MAGIN_LENGTH; - this.headerFavoriteHeight = NUMBERS_MEANING.HEADER_MIN_HEIGHT; - } else { - this.headerFavoriteHeight = this.headerFavoriteHeight - this.pYMove; - - this.headerFavoriteFontSize = NUMBERS_MEANING.HEADER_MIN_FONT_SIZE - + NUMBERS_MEANING.HEADER_MIN_TO_MAX_FONT_SIZE * ((this.headerFavoriteHeight - - NUMBERS_MEANING.HEADER_MAX_FONT_SIZE) / NUMBERS_MEANING.HEADER_MIN_TO_MAX_HEIGHT_SIZE); - - this.headerFavoriteMaginLeft = NUMBERS_MEANING.HEADER_MAX_MAGIN_LENGTH - - NUMBERS_MEANING.HEADER_MAX_MAGIN_LENGTH * ((this.headerFavoriteHeight - - NUMBERS_MEANING.HEADER_MAX_FONT_SIZE) / NUMBERS_MEANING.HEADER_MIN_TO_MAX_HEIGHT_SIZE); - } - } else if (this.pYMove != 0 && this.pYMove < 0) { - // Whether the combination is the top. If it is the top, the top should be displayed - if (this.headerFavoriteHeight >= NUMBERS_MEANING.HEADER_MAX_HEIGHT) { - this.headerFavoriteFontSize = NUMBERS_MEANING.HEADER_MAX_FONT_SIZE; - this.isScrollTopPosition = false; - this.headerFavoriteMaginLeft = NUMBERS_MEANING.HEADER_MIN_MAGIN_LENGTH; - } else { - this.headerFavoriteHeight = this.headerFavoriteHeight - this.pYMove; - - this.headerFavoriteFontSize = NUMBERS_MEANING.HEADER_MIN_FONT_SIZE - + NUMBERS_MEANING.HEADER_MIN_TO_MAX_FONT_SIZE * ((this.headerFavoriteHeight - - NUMBERS_MEANING.HEADER_MAX_FONT_SIZE) / NUMBERS_MEANING.HEADER_MIN_TO_MAX_HEIGHT_SIZE); - - let fontSize = this.headerFavoriteHeight - NUMBERS_MEANING.HEADER_MAX_FONT_SIZE; - - let favHeight = fontSize / NUMBERS_MEANING.HEADER_MIN_TO_MAX_HEIGHT_SIZE; - this.headerFavoriteMaginLeft = NUMBERS_MEANING.HEADER_MAX_MAGIN_LENGTH - - (NUMBERS_MEANING.HEADER_MAX_MAGIN_LENGTH * favHeight); - } - } - } - }, - onTouchFavoriteEnd: function (e) { - if (this.type == 'editFavorites') { - if (this.pYMove != 0 && this.pYMove > 0 && this.headerFavoriteHeight <= NUMBERS_MEANING.HEADER_MIN_HEIGHT) { - // Move up, hidden, no processing required; To move the display status upward, you need to set the hide - this.headerFavoriteHeight = NUMBERS_MEANING.HEADER_MIN_HEIGHT; - this.headerFavoriteFontSize = NUMBERS_MEANING.HEADER_MIN_FONT_SIZE; - this.headerFavoriteMaginLeft = NUMBERS_MEANING.HEADER_MAX_MAGIN_LENGTH; - } else if (this.pYMove != 0 && this.pYMove < 0 && this.headerFavoriteHeight - >= NUMBERS_MEANING.HEADER_MAX_HEIGHT && this.isScrollTopPosition == true) { - // Whether the combination is the top. If it is the top, the top should be displayed - this.headerFavoriteHeight = NUMBERS_MEANING.HEADER_MAX_HEIGHT; - this.headerFavoriteFontSize = NUMBERS_MEANING.HEADER_MAX_FONT_SIZE; - this.headerFavoriteMaginLeft = NUMBERS_MEANING.HEADER_MIN_MAGIN_LENGTH; - } else if (this.pYMove != 0 && this.pYMove < 0 && this.onScrollTopNum == 0) { - this.headerFavoriteHeight = NUMBERS_MEANING.HEADER_MAX_HEIGHT; - this.headerFavoriteFontSize = NUMBERS_MEANING.HEADER_MAX_FONT_SIZE; - this.headerFavoriteMaginLeft = NUMBERS_MEANING.HEADER_MIN_MAGIN_LENGTH; - } else { - this.headerFavoriteFontSize = NUMBERS_MEANING.HEADER_MIN_FONT_SIZE - + NUMBERS_MEANING.HEADER_MIN_TO_MAX_FONT_SIZE * ((this.headerFavoriteHeight - - NUMBERS_MEANING.HEADER_MIN_HEIGHT) / NUMBERS_MEANING.HEADER_MIN_TO_MAX_HEIGHT_SIZE); - - this.headerFavoriteMaginLeft = NUMBERS_MEANING.HEADER_MAX_MAGIN_LENGTH - - NUMBERS_MEANING.HEADER_MAX_MAGIN_LENGTH * ((this.headerFavoriteHeight - - NUMBERS_MEANING.HEADER_MIN_HEIGHT) / NUMBERS_MEANING.HEADER_MIN_TO_MAX_HEIGHT_SIZE); - } - if (this.headerFavoriteHeight > NUMBERS_MEANING.HEADER_MAX_HEIGHT) { - this.headerFavoriteHeight = NUMBERS_MEANING.HEADER_MAX_HEIGHT; - } - if (this.headerFavoriteFontSize > NUMBERS_MEANING.HEADER_MIN_HEIGHT) { - this.headerFavoriteFontSize = NUMBERS_MEANING.HEADER_MAX_FONT_SIZE; - } - if (this.headerFavoriteMaginLeft > NUMBERS_MEANING.HEADER_MAX_MAGIN_LENGTH) { - this.headerFavoriteMaginLeft = NUMBERS_MEANING.HEADER_MAX_MAGIN_LENGTH; - } - if (this.headerFavoriteMaginLeft < 0) { - this.headerFavoriteMaginLeft = NUMBERS_MEANING.HEADER_MIN_MAGIN_LENGTH; - } - this.pYMove = 0; - this.pYStart = 0; - } - }, - onScrollFavoriteTop: function (e) { - if (this.type == 'editFavorites') { - // If it is judged to be the top, mark it - this.isScrollTopPosition = true; - this.onScrollTopNum = this.onScrollTopNum + 1; - } - }, - - conciseLayoutInit: function () { - let data = this.$app.$def.globalData.storage.getSync('contacts_settings_concise_layout_switch', 'false'); - this.layoutState = data == 'true' ? false : true; - }, - indexOfArray: function (arr, val) { - for (var i = 0; i < arr.length; i++) { - if (arr[i] == val) { - return i; - } - } - return -1; - }, - removeFromArray: function (arr, val) { - var index = arr.indexOf(val); - if (index > -1) { - arr.splice(index, 1); - } - } -}; \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/about/about.css b/entry/src/main/js/default/pages/contacts/settings/about/about.css deleted file mode 100644 index ea27771..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/about/about.css +++ /dev/null @@ -1,115 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - flex-direction: column; - justify-content: flex-start; - align-items: center; - align-content: center; - background-color: #FFF; - width: 100%; - height: 100%; -} - -.about-title-div { - flex-direction: row; - align-items: center; - justify-content: flex-start; - margin-left: 24px; - margin-top: 10px; - width: 100%; -} - -.about-back-but-div { - width: 93px; - height: 93px; - border-radius: 15px; - align-items: center; -} - -.about-back-but-div:active { - width: 93px; - height: 93px; - border-radius: 15px; - align-items: center; - background-color: #f3f3f3; -} - -.about-back-image { - margin-left: 21px; - width: 50px; - height: 50px; - border-radius: 10px; -} - -.about-title-text { - align-items: center; - justify-content: center; - margin-left: 15px; - font-size: 40px; - font-weight: 500; -} - -.about-content-div { - flex-direction: column; - align-items: center; - justify-content: center; - width: 100%; -} - -.about-content-image { - margin-top: 128px; - width: 128px; - height: 128px; - border-radius: 30px; -} - -.about-content-text { - margin-top: 25px; - font-weight: 500; -} - -.about-content-version-text { - margin-top: 6px; - font-size: 28px; - color: #646464; -} - -.about-footer-div { - flex-direction: column; - align-items: center; - justify-content: center; - align-content: center; - position: absolute; - bottom: 50px; - width: 100%; -} - -.about-footer-open-text { - font-size: 24px; - font-weight: 500; - color: #097af0; -} - -.about-footer-open-text:active { - font-size: 24px; - font-weight: 500; - color: #097af0; - background-color: #f0f0f0; -} - -.about-footer-copyright-text { - font-size: 24px; - color: #646464; -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/about/about.hml b/entry/src/main/js/default/pages/contacts/settings/about/about.hml deleted file mode 100644 index e55f6e9..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/about/about.hml +++ /dev/null @@ -1,41 +0,0 @@ - -
-
-
- -
- - {{ $t('value.contacts.aboutPage.title') }} - -
-
- - - {{ $t('value.contacts.aboutPage.contact') }} - - - {{ $t('value.contacts.aboutPage.version') }}{{ appVersion }} - -
- -
\ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/about/about.js b/entry/src/main/js/default/pages/contacts/settings/about/about.js deleted file mode 100644 index c9b1495..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/about/about.js +++ /dev/null @@ -1,40 +0,0 @@ -/** - * @file about - */ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import router from '@system.router'; -import app from '@system.app'; - -export default { - data: { - appVersion: '1.0' - }, - - onInit() { - this.appVersion = app.getInfo().versionName; - }, - - back: function () { - router.back(); - }, - - openSourceClick: function () { - router.push({ - uri: 'pages/contacts/settings/about/license/license', - params: {}, - }); - } -}; \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/about/license/license.css b/entry/src/main/js/default/pages/contacts/settings/about/license/license.css deleted file mode 100644 index c3adb5b..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/about/license/license.css +++ /dev/null @@ -1,121 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - flex-direction: column; - justify-content: flex-start; - align-items: center; - align-content: center; - background-color: #FFF; - width: 100%; - height: 100%; -} - -.about-title-div { - flex-direction: row; - align-items: center; - justify-content: flex-start; - margin-left: 24px; - margin-top: 10px; - width: 100%; -} - -.about-back-but-div { - width: 93px; - height: 93px; - border-radius: 15px; - align-items: center; -} - -.about-back-but-div:active { - width: 93px; - height: 93px; - border-radius: 15px; - align-items: center; - background-color: #f3f3f3; -} - -.about-back-image { - margin-left: 21px; - width: 50px; - height: 50px; - border-radius: 10px; -} - -.about-title-text { - align-items: center; - justify-content: center; - margin-left: 15px; - font-size: 40px; - font-weight: 500; -} - -.about-content-div { - flex-direction: column; - align-items: flex-start; - justify-content: flex-start; - width: 100%; -} - -.about-content-one-text { - margin-top: 10px; - line-height: 39.45px; - font-size: 33px; -} - -.about-content-tow-text { - margin-top: 30px; - font-size: 45px; - font-weight: bold; -} - -.about-content-three-text { - margin-top: 30px; - font-weight: bold; - font-size: 33px; -} - -.about-content-four-text { - margin-top: 30px; - font-size: 45px; - font-weight: bold; -} - -.about-content-five-text { - margin-top: 32px; - margin-left: 50px; - font-size: 31px; - text-decoration: underline; - color: #00F; -} - -.about-content-six-div { - flex-direction: column; - align-items: flex-start; - justify-content: flex-start; - margin-top: 60px; - padding-top: 20px; - padding-left: 20px; - background-color: #ececec; -} - -.about-content-six-one-text { - font-weight: bold; -} - -.about-content-six-two-text { - text-decoration: underline; - color: #00F; -} - diff --git a/entry/src/main/js/default/pages/contacts/settings/about/license/license.hml b/entry/src/main/js/default/pages/contacts/settings/about/license/license.hml deleted file mode 100644 index 5dcae99..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/about/license/license.hml +++ /dev/null @@ -1,517 +0,0 @@ - -
-
-
- -
- - {{ $t('value.contacts.settingPage.license.openSource') }} - -
-
- - Please note we provide an open source software notice along with this product and/or this product firmware - (in the following just "this product"). The open source software licenses are granted by the respective - right holders. And the open source licenses prevail all other license information with regard to the - respective open source software contained in the product, including but not limited to End User Software - Licensing Agreement. This notice is provided on behalf of XXXXX Device Co., Ltd. and any of its local - subsidiaries which may have provided this product to you in your local country. - - - - Warranty Disclaimer - - - THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT WITHOUT ANY - WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE - APPLICABLE LICENSES FOR MORE DETAILS. - - - Copyright Notice and License Texts - - - /kotlin - /zxing - /XXXXXxx - /guava - -
- - Notices for Software(s): - - - /kotlin - - - Software:kotlin 1.3.41 - Copyright notice: - License: Apache License V2.0 - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -
-
- - Notices for Software(s): - - - /zxing - - - Software:zxing 3.4.0 - - Copyright notice: - Copyright (C) 2014 ZXing authors - Copyright (C) 2008 ZXing authors - Copyright (C) 2010 ZXing authors - Copyright 2016 ZXing authors - Copyright 2018 ZXing authors - Copyright 2013 ZXing authors - Copyright 2012 ZXing authors - Copyright 2008 ZXing authors - Copyright 2007 ZXing authors - Copyright 2011 ZXing authors - Copyright (C) 2012 ZXing authors - Copyright (C) 2013 ZXing authors - Copyright (C) 2011 ZXing authors - Copyright (C) 2009 ZXing authors - Copyright 2009 ZXing authors - Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors - Copyright 2014 ZXing authors - Copyright 2010 ZXing authors - Copyright 2006 Jeremias Maerki in part, and ZXing Authors in part - Copyright 2017 ZXing authors - Copyright 2015 ZXing authors - Copyright (C) 2015 ZXing authors - Copyright 2006 Jeremias Maerki - Copyright 2006 Jeremias Maerki. - Copyright 2006-2007 Jeremias Maerki. - Copyright 2007 Jeremias Maerki. - Copyright 2013 Twitter, Inc - Copyright (c) 2005 Sun Microsystems, Inc. - Copyright © 2010-2014 University of Manchester - Copyright © 2010-2015 Stian Soiland-Reyes - Copyright © 2015 Peter Hull - Copyright 2002-2010 Jeremias Märki - Copyright 2005-2006 Dietmar Bürkle - Copyright 2010 Cedric Beust cedric@beust.com - Copyright (C) 2019 ZXing authors - Copyright 2019 ZXing authors - - License: Apache License V2.0 - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -
-
-
\ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/display/customize/customize.css b/entry/src/main/js/default/pages/contacts/settings/display/customize/customize.css deleted file mode 100644 index 55c85a3..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/display/customize/customize.css +++ /dev/null @@ -1,220 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - flex-direction: column; - justify-content: flex-start; - align-items: center; - width: 100%; - height: 100%; - background-color: #FFF; -} - -.page-title-div { - flex-direction: row; - align-items: center; - justify-content: space-between; - width: 100%; - margin-left: 15px; - margin-top: 10px; - position: relative; -} - -.customize-title-div { - flex-direction: row; - align-items: center; - justify-content: flex-start; - position: relative; -} - -.customize-back-but-div { - width: 73px; - height: 73px; - border-radius: 15px; - align-items: center; -} - -.customize-back-but-div:active { - background-color: #f3f3f3; -} - - -.customize-back-image { - margin-left: 21px; - width: 50px; - height: 50px; - border-radius: 10px; -} - -.customize-title-text { - align-items: center; - justify-content: center; - margin-left: 15px; - font-size: 30px; - font-weight: 500; -} - -.customize-save-but-div { - align-items: center; - justify-content: center; - right: 10px; - width: 73px; - height: 73px; - border-radius: 15px; -} - -.customize-save-but-div:active { - background-color: #f3f3f3; -} - - -.customize-save-image { - width: 45px; - height: 45px; - border-radius: 10px; -} - -.customize-phone-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: space-between; - height: 80px; - width: 100%; - margin-top: 10px; - padding-left: 35px; -} - -.customize-phone-div:active { - background-color: #e4e4e4; -} - - -.customize-image-div { - flex-direction: row; - align-items: center; - justify-content: flex-start; - position: relative; - width: 82%; -} - -.customize-arrow-image { - width: 30px; - height: 30px; -} - -.phone-parent-div { - position: relative; - flex-direction: column; - align-items: flex-start; - justify-content: flex-start; - margin-left: 30px; - margin-top: 25px; - width: 520px; -} - - -.customize-phone-text { - font-size: 25px; -} - -.concise-layout-instruction-text { - margin-top: 5px; - font-size: 28px; - color: #7e7e7e; -} - -.customize-view-input { - right: 25px; -} - -.empty-group-item { - flex-direction: column; - justify-content: flex-start; - align-items: center; -} - - -.divider { - line-cap: round; - stroke-width: 1px; - color: #ccc; - width: 87%; -} - -.phone-all-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: space-between; - padding-left: 45px; - height: 155px; -} - - -.phone-all-div:active { - background-color: #e4e4e4; -} - - -.custom-all-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: space-between; - padding-left: 115px; - height: 80px; - width: 100%; -} - - -.custom-all-div:active { - background-color: #e4e4e4; -} - - -.all-parent-div { - position: relative; - flex-direction: column; - align-items: flex-start; - justify-content: center; - width: 500px; -} - -.display-contacts-text { - font-size: 27px; -} - -.display-contacts-instruction-text { - margin-top: 3px; - font-size: 28px; - color: #7e7e7e; - width: 100%; -} - - -.display-contacts-radio { - right: 25px; -} - - -.short-divider { - align-items: flex-end; - justify-content: center; - line-cap: round; - stroke-width: 1px; - color: #ccc; - width: 78%; - right: -36px; -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/display/customize/customize.hml b/entry/src/main/js/default/pages/contacts/settings/display/customize/customize.hml deleted file mode 100644 index 7253491..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/display/customize/customize.hml +++ /dev/null @@ -1,90 +0,0 @@ - -
-
-
-
- -
- - {{ $t('value.contacts.displayPage.customizePage.title') }} - -
-
- -
-
- - - -
-
- -
- - {{ $t('value.contacts.displayPage.customizePage.phone') }} - -
-
- -
-
- - - -
-
- - {{ $t('value.contacts.displayPage.customizePage.allContacts') }} - -
- -
-
-
- - - -
- -
- - {{ $t('value.contacts.displayPage.customizePage.unGrouped') }} - -
- -
-
- - - - -
-
- {{ $item.title }} -
-
- -
-
-
-
-
-
-
\ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/display/customize/customize.js b/entry/src/main/js/default/pages/contacts/settings/display/customize/customize.js deleted file mode 100644 index 3e5644c..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/display/customize/customize.js +++ /dev/null @@ -1,162 +0,0 @@ -/** - * @file Custom view - */ - -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import router from '@system.router'; -import prompt from '@system.prompt'; -import contactsService from '../../../../../../default/model/CustomizeModel.js'; -import LOG from '../../../../../utils/ContactsLog.js'; -import Constants from '../../../../../../default/common/constants/Constants.js'; - -var TAG = 'Customize...:'; - -export default { - data: { - isUnfold: false, - arrowFoldImage: { - fold: '/res/image/ic_contacts_arrow_unfold_s.svg', - unFold: '/res/image/ic_contacts_arrow_unfold.svg' - }, - customizeArrowImage: '', - isCheckedCustomize: false, - isCheckedOtherCustomize: false, - storageValue: '', - customizeId: '', - timeoutId: '', - groupList: [] - }, - - onInit() { - this.customizeArrowImage = this.arrowFoldImage.fold; - var defaultData = { - 'isCheckedCustomize': false, - 'isCheckedOtherCustomize': false - }; - let ret = this.$app.$def.globalData.storage.getSync('contacts_settings_customize_view_input', 'false'); - this.storageValue = ret == 'false' ? defaultData : JSON.parse(ret); - this.isCheckedCustomize = this.storageValue.isCheckedCustomize; - this.isCheckedOtherCustomize = this.storageValue.isCheckedOtherCustomize; - LOG.info(TAG + 'Customize onInit --------------end'); - }, - onShow() { - this.initGroupData(); - LOG.info(TAG + 'Customize onShow --------------end'); - }, - - checkboxOnChange: function (event) { - LOG.info(TAG + 'checkboxOnChange event'); - this.isCheckedCustomize = !this.isCheckedCustomize; - if (this.isCheckedCustomize) { - this.isCheckedOtherCustomize = true; - this.groupList.forEach(element => { - element.checked = true; - }); - } else { - this.isCheckedOtherCustomize = false; - this.groupList.forEach(element => { - element.checked = false; - }); - } - }, - - onClickChange: function () { - this.isCheckedCustomize = !this.isCheckedCustomize; - }, - - onClickGroupChange: function (index) { - LOG.info(TAG + 'onClickGroupChange index' + index); - switch (index) { - case -1: - this.isCheckedOtherCustomize = !this.isCheckedOtherCustomize; - break; - default: - this.groupList[index].checked = !this.groupList[index].checked; - break; - } - var isCheckedGroup = true; - this.groupList.forEach(element => { - if (!element.checked) { - isCheckedGroup = false; - } - }); - this.isCheckedCustomize = isCheckedGroup ? this.isCheckedOtherCustomize ? true : false : false; - }, - - unfoldClicked: function () { - this.isUnfold = !this.isUnfold; - this.customizeArrowImage = this.customizeArrowImage == this.arrowFoldImage.fold - ? this.arrowFoldImage.unFold : this.arrowFoldImage.fold; - }, - - back: function () { - router.back(); - }, - - saveCustomize: function () { - var checkedList = []; - this.groupList.forEach(element => { - if (element.checked) { - checkedList.push(element.id); - } - }); - var value = { - 'isCheckedCustomize': this.isCheckedCustomize, - 'isCheckedOtherCustomize': this.isCheckedOtherCustomize, - 'checkedList': checkedList - }; - clearTimeout(this.customizeId); - this.customizeId = setTimeout(() => { - this.$app.$def.globalData.storage.putSync('contacts_settings_customize_view_input', JSON.stringify(value)); - this.$app.$def.globalData.storage.flushSync(); - }, 0); - clearTimeout(this.timeoutId); - this.timeoutId = setTimeout(() => { - this.$app.$def.globalData.storage.putSync('contacts_settings_display_account_radio', 'customize'); - this.$app.$def.globalData.storage.flushSync(); - }, 0); - router.back({ - path: 'pages/contacts/settings/settings' - }); - }, - - /** - * Get group list data - * - * @param {number} code 2005 FA and PA access protocol code - * @param {number} data contactId The contact ID - */ - initGroupData: function () { - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - contactsService.queryGroups(DAHelper, (result) => { - LOG.info(TAG + 'initGroupData result'); - if (result.code == 0) { - this.groupList = result.resultList; - if (this.storageValue.hasOwnProperty('checkedList')) { - this.groupList.forEach(element => { - if (this.storageValue.checkedList.indexOf(element.id) != -1) { - element.checked = true; - } - }); - } - } else { - prompt.showToast({ - message: 'Failed to init customize view data.' - }); - } - }); - } -}; \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/display/display.css b/entry/src/main/js/default/pages/contacts/settings/display/display.css deleted file mode 100644 index e39aa77..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/display/display.css +++ /dev/null @@ -1,188 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - flex-direction: column; - justify-content: flex-start; - align-items: center; - width: 100%; - height: 100%; - background-color: #FFF; -} - -.display-title-div { - flex-direction: row; - align-items: center; - justify-content: flex-start; - width: 100%; - margin-left: 24px; - margin-top: 10px; - position: relative; -} - -.display-back-but-div { - width: 73px; - height: 73px; - border-radius: 15px; - align-items: center; -} - -.display-back-but-div:active { - width: 73px; - height: 73px; - border-radius: 15px; - align-items: center; - background-color: #f3f3f3; -} - -.display-back-image { - margin-left: 21px; - width: 40px; - height: 40px; - border-radius: 10px; -} - -.display-title-text { - align-items: center; - justify-content: center; - margin-left: 15px; - font-size: 30px; - font-weight: 500; -} - -.concise-layout-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: space-between; - width: 100%; - height: 85px; -} - -.layout-parent-div { - position: relative; - flex-direction: column; - align-items: flex-start; - justify-content: flex-start; - margin-left: 45px; - width: 570px; -} - -.concise-layout-text { - font-size: 27px; -} - -.concise-layout-instruction-text { - margin-top: 5px; - font-size: 25px; - color: #7e7e7e; -} - -.concise-layout-switch { - right: 20px; -} - -.divider { - line-cap: round; - stroke-width: 1px; - color: #ccc; - width: 94%; - padding-left: 45px; -} - -.phone-all-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: space-between; - padding-left: 45px; - height: 85px; - width: 100%; -} - -.phone-all-div:active { - background-color: #e4e4e4; -} - -.custom-all-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: space-between; - padding-left: 45px; - height: 85px; - width: 100%; -} - -.custom-all-div:active { - background-color: #e4e4e4; -} - -.blank-article-div { - margin-top: 2px; - height: 6px; - width: 100%; - background-color: #f5f5f5; - display: grid; -} - -.display-account-div { - height: 45px; - align-items: center; - justify-content: flex-start; - width: 100%; -} - -.display-account-text { - margin-left: 45px; - font-size: 25px; - color: #7e7e7e; -} - -.display-all-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: space-between; - padding-left: 45px; - width: 100%; - height: 85px; -} - -.display-all-div:active { - background-color: #e4e4e4; -} - -.all-parent-div { - position: relative; - flex-direction: column; - align-items: flex-start; - justify-content: center; - width: 550px; -} - -.display-contacts-text { - font-size: 27px; -} - -.display-contacts-instruction-text { - margin-top: 1px; - font-size: 25px; - color: #7e7e7e; - width: 100%; -} - -.display-contacts-radio { - right: 25px; -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/display/display.hml b/entry/src/main/js/default/pages/contacts/settings/display/display.hml deleted file mode 100644 index 08d8e6f..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/display/display.hml +++ /dev/null @@ -1,84 +0,0 @@ - -
-
-
- -
- - {{ $t('value.contacts.displayPage.title') }} - -
- -
-
- - {{ $t('value.contacts.displayPage.conciseLayout') }} - - {{ $t('value.contacts.displayPage.layoutInstruction') }} - -
- -
-
- - -
-
- - {{ $t('value.contacts.displayPage.displayContacts') }} - - {{ displayContactsInstruction }} -
-
- -
-
- - -
-
- - {{ $t('value.contacts.displayPage.phoneContacts') }} - - {{ phoneAllInstruction }} -
-
- -
-
- - -
-
- - {{ $t('value.contacts.displayPage.customContacts') }} - -
-
- -
-
-
\ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/display/display.js b/entry/src/main/js/default/pages/contacts/settings/display/display.js deleted file mode 100644 index dc6b93d..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/display/display.js +++ /dev/null @@ -1,203 +0,0 @@ -/** - * @file Show Contacts -*/ - -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import router from '@system.router'; -import contactsService from '../../../../../default/model/ContactModel.js'; -import LOG from '../../../../utils/ContactsLog.js'; -import Constants from '../../../../../default/common/constants/Constants.js'; - -var TAG = 'Display...:'; - -export default { - data: { - contactsCount: 0, - mergeCount: 0, - phoneCount: 0, - mergePhoneCount: 0, - language: '', - phoneAllInstruction: '', - displayContactsInstruction: '', - layoutState: false, - timeoutId: '', - radio: { - allContactsState: false, - phoneContactsState: false, - customizeState: false - } - }, - - onInit() { - LOG.info(TAG + 'Display onInit --------------start'); - }, - - radioInit: function () { - let data = this.$app.$def.globalData.storage.getSync('contacts_settings_display_account_radio', 'allContacts'); - LOG.info(TAG + 'radioInit data'); - switch (data) { - case 'allContacts': - this.radio.allContactsState = true; - this.radio.phoneContactsState = false; - this.radio.customizeState = false; - this.displayContactsInstruction = 'zh' == this.language - ? this.$t('value.contacts.displayPage.total') + this.contactsCount + this.$t('value.contacts' - + '.displayPage.number') - + this.$t('value.contacts.displayPage.displayContactsInstruction') + this.mergeCount - + this.$t('value.contacts.displayPage.number') : this.$t('value.contacts.displayPage.all') - + this.contactsCount + this.$t('value.contacts.displayPage.prefixSign') - + this.$t('value.contacts.displayPage' + '.displayContactsInstruction') - + this.mergeCount + this.$t('value.contacts.displayPage.suffixSign'); - this.phoneAllInstruction = this.$t('value.contacts.displayPage.all') + this.phoneCount; - break; - case 'phoneContacts': - this.radio.allContactsState = false; - this.radio.phoneContactsState = true; - this.radio.customizeState = false; - this.displayContactsInstruction = this.$t('value.contacts.displayPage.all') + this.contactsCount; - this.phoneAllInstruction = 'zh' == this.language - ? this.$t('value.contacts.displayPage.total') + this.phoneCount + this.$t('value.contacts' - + '.displayPage.number') - + this.$t('value.contacts.displayPage.displayContactsInstruction') - + this.mergePhoneCount + this.$t('value.contacts.displayPage.number') - : this.$t('value.contacts.displayPage.all') + this.phoneCount - + this.$t('value.contacts.displayPage' + '.prefixSign') - + this.$t('value.contacts.displayPage.displayContactsInstruction') + this.mergePhoneCount - + this.$t('value.contacts.displayPage.suffixSign'); - break; - case 'customize': - this.radio.allContactsState = false; - this.radio.phoneContactsState = false; - this.radio.customizeState = true; - this.displayContactsInstruction = this.$t('value.contacts.displayPage.all') + this.contactsCount; - this.phoneAllInstruction = this.$t('value.contacts.displayPage.all') + this.phoneCount; - break; - default: - break; - } - }, - - conciseLayoutInit: function () { - let data = this.$app.$def.globalData.storage.getSync('contacts_settings_concise_layout_switch', 'false'); - this.layoutState = data == 'true' ? true : false; - }, - - getDisplayCount: function () { - var resultSet = {}; - var data = {}; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - contactsService.queryContactsCount(DAHelper, data, resultSet, (result) => { - result.contactsCount = result.contactCount; - result.contactsCountMerge = result.contactCount; - this.contactsCount = result.contactsCount; - this.mergeCount = result.contactsCountMerge; - this.mergePhoneCount = result.contactsCountMerge; - this.phoneCount = result.contactsCount; - this.radioInit(); - this.conciseLayoutInit(); - }); - }, - onReady() { - LOG.info(TAG + 'Display onReady --------------end'); - }, - onShow() { - this.language = 'zh'; - this.getDisplayCount(); - LOG.info(TAG + 'Display onShow --------------end'); - }, - onHide() { - LOG.info(TAG + 'Display onHide --------------end'); - }, - onDestroy() { - LOG.info(TAG + 'Display onDestroy --------------end'); - }, - - /** - * Simple layout button - * - * @param {Object} event event - */ - isCheckedConciseLayout: function (event) { - LOG.info(TAG + 'isCheckedConciseLayout event'); - clearTimeout(conciseLayoutId); - var conciseLayoutId = setTimeout(() => { - this.$app.$def.globalData.storage.putSync('contacts_settings_concise_layout_switch', - event.checked.toString()); - this.$app.$def.globalData.storage.flushSync(); - }, 0); - }, - - radioChange: function (inputValue, e) { - LOG.info(TAG + 'radioChange inputValue...:'); - switch (inputValue) { - case 'allContacts': - clearTimeout(this.timeoutId); - this.timeoutId = setTimeout(() => { - this.$app.$def.globalData.storage.putSync('contacts_settings_display_account_radio', inputValue); - this.$app.$def.globalData.storage.flushSync(); - }, 0); - this.radio.phoneContactsState = false; - this.radio.customizeState = false; - this.back(); - break; - case 'phoneContacts': - clearTimeout(this.timeoutId); - this.timeoutId = setTimeout(() => { - this.$app.$def.globalData.storage.putSync('contacts_settings_display_account_radio', inputValue); - this.$app.$def.globalData.storage.flushSync(); - }, 0); - this.radio.allContactsState = false; - this.radio.customizeState = false; - this.back(); - break; - case 'customize': - router.push({ - uri: 'pages/contacts/settings/display/customize/customize', - params: {}, - }); - break; - default: - break; - } - }, - - onRadioChange: function (inputValue) { - LOG.info(TAG + 'onRadioChange inputValue'); - switch (inputValue) { - case 'allContacts': - case 'phoneContacts': - clearTimeout(this.timeoutId); - this.timeoutId = setTimeout(() => { - this.$app.$def.globalData.storage.putSync('contacts_settings_display_account_radio', inputValue); - this.$app.$def.globalData.storage.flushSync(); - }, 0); - this.back(); - break; - case 'customize': - router.replace({ - uri: 'pages/contacts/settings/display/customize/customize', - params: {}, - }); - break; - default: - break; - } - }, - - back: function () { - router.back(); - } -}; \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/imorexport/imorexport.css b/entry/src/main/js/default/pages/contacts/settings/imorexport/imorexport.css deleted file mode 100644 index f41e56d..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/imorexport/imorexport.css +++ /dev/null @@ -1,436 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - flex-direction: column; - justify-content: flex-start; - align-items: center; - background-color: #FFF; - width: 100%; - height: 100%; -} - -.imorexport-title-div { - flex-direction: row; - align-items: center; - justify-content: flex-start; - margin-left: 24px; - margin-top: 10px; - position: relative; - width: 100%; -} - -.imorexport-back-but-div { - width: 73px; - height: 73px; - border-radius: 15px; - align-items: center; -} - -.imorexport-back-but-div:active { - width: 73px; - height: 73px; - border-radius: 15px; - align-items: center; - background-color: #f3f3f3; -} - -.imorexport-back-image { - margin-left: 21px; - width: 40px; - height: 40px; - border-radius: 10px; -} - -.imorexport-title-text { - align-items: center; - justify-content: center; - margin-left: 15px; - font-size: 30px; - font-weight: 500; -} - -.import-manage-div { - margin-top: 35px; - height: 50px; - align-items: center; - justify-content: flex-start; - width: 100%; -} - -.import-manage-text { - margin-left: 45px; - font-size: 20px; - font-weight: 500; - color: #7e7e7e; -} - -.bluetooth-import-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: space-between; - height: 100px; - width: 100%; -} - -.bluetooth-import-div:active { - background-color: #e4e4e4; -} - -.bluetooth-import-text { - margin-left: 45px; - font-size: 30px; -} - -.flex-image { - right: 45px; - width: 30px; - height: 30px; - border-radius: 60px; -} - -.wlan-connected-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: space-between; - height: 126px; - width: 100%; -} - -.wlan-connected-div:active { - background-color: #e4e4e4; -} - -.wlan-parent-div { - position: relative; - flex-direction: column; - align-items: flex-start; - justify-content: flex-start; - margin-left: 45px; - margin-top: 25px; - width: 520px; -} - -.wlan-connected-text { - font-size: 32px; -} - -.wlan-connected-instruction-text { - margin-top: 5px; - font-size: 28px; - color: #7e7e7e; -} - -.sim-import-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: space-between; - height: 100px; - width: 100%; -} - -.sim-import-div:active { - background-color: #e4e4e4; -} - -.sim-import-text { - margin-left: 45px; - font-size: 30px; -} - -.divider { - line-cap: round; - stroke-width: 1px; - color: #ccc; - width: 87%; -} - -.storage-device-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: space-between; - height: 100px; - width: 100%; -} - -.storage-device-div:active { - background-color: #e4e4e4; -} - -.storage-parent-div { - position: relative; - flex-direction: column; - align-items: flex-start; - justify-content: flex-start; - margin-left: 45px; - width: 520px; -} - -.storage-device-text { - font-size: 25px; -} - -.storage-device-instruction-text { - margin-top: 5px; - font-size: 20px; - color: #7e7e7e; -} - -.blank-article-div { - height: 5px; - background-color: #f5f5f5; - display: grid; -} - -.export-manage-div { - margin-top: 5px; - height: 50px; - align-items: center; - justify-content: flex-start; - width: 100%; -} - -.export-manage-text { - margin-left: 45px; - font-size: 20px; - font-weight: 500; - color: #7e7e7e; -} - -.export-storage-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: space-between; - height: 100px; - width: 100%; -} - -.export-storage-div:active { - background-color: #e4e4e4; -} - -.export-parent-div { - position: relative; - flex-direction: column; - align-items: flex-start; - justify-content: flex-start; - margin-left: 45px; - width: 520px; -} - -.export-storage-text { - font-size: 25px; -} - -.export-storage-instruction-text { - margin-top: 5px; - font-size: 20px; - color: #7e7e7e; -} - -.share-contacts-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: space-between; - height: 100px; - width: 100%; -} - -.share-contacts-div:active { - background-color: #e4e4e4; -} - -.share-contacts-text { - margin-left: 45px; - font-size: 25px; -} - -.share-contacts-text:disabled { - color: #A9A9A9; -} - -.dialog-main { - width: 90%; - align-items: center; -} - -.dialog-export-div { - width: 600px; - height: 350px; - flex-direction: column; - align-content: center; -} - -.inner-export-content { - width: 500px; - height: 200px; - flex-direction: column; - justify-content: space-around; - align-items: center; -} - -.dialog-div { - width: 95%; - flex-direction: column; -} - -.inner-txt { - width: 600px; - height: 100px; - flex-direction: column; - align-items: flex-start; - justify-content: space-around; - margin-top: 15px; -} - -.inner-content { - width: 600px; - height: 100px; - flex-direction: column; - align-items: flex-start; - justify-content: space-around; -} - -.share-dialog-wraper { - width: 100%; - height: 70%; - columns: 1; -} - -.select-dialog-Item { - align-content: center; - flex-direction: column; - height: 101px; -} - -.share-dialog-item { - height: 101px; - flex-direction: column; - columns: 1; - align-items: stretch; -} - -.share-dialog-content-div { - margin-left: 49px; - margin-right: 49px; - width: 100%; - height: 100%; - flex-direction: row; - justify-content: flex-start; - align-items: center; -} - -.share-dialog-content-name { - width: 100%; - text-align: left; - font-size: 32px; -} - -.allrecords-item-right-checkbox { - justify-content: center; - align-items: center; - width: 160px; - height: 160px; - border-radius: 10px; -} - -.share-todo-divider { - margin-left: 49px; - margin-right: 49px; - line-cap: round; - stroke-width: 1px; - color: #bababa; -} - -.inner-message { - width: 600px; - height: 100px; - flex-direction: column; - align-items: center; -} - -.txt { - font-size: 30px; -} - -.inner-btn { - height: 120px; - justify-content: space-around; - align-items: center; -} - -.sim-dialog-main { - position: relative; - width: 658px; - height: 215px; - margin-left: 25px; - margin-right: 25px; - margin-bottom: 35px; -} - -.sim-dialog-div { - flex-direction: column; - align-items: center; - margin-left: 25px; - margin-right: 25px; -} - -.sim-inner-div { - width: 85%; - flex-direction: column; - align-items: center; - justify-content: center; - height: 150px; -} - -.sim-inner-btn { - margin-top: -60px; - width: 560px; - height: 120px; - justify-content: space-around; - align-items: center; -} - -.sim-btn-div { - width: 265px; - height: 60px; - border-radius: 50px; - justify-content: center; - align-items: center; -} - -.sim-btn-div:active { - background-color: #E7E6E6; -} - -.sim-btn-cancel-txt { - color: #007DFE; -} - -.sim-dialog-inner-divider { - line-cap: round; - stroke-width: 1px; - height: 60px; - color: #a7a7a7; -} - -.sim-btn-delete-txt { - color: #007DFE; -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/imorexport/imorexport.hml b/entry/src/main/js/default/pages/contacts/settings/imorexport/imorexport.hml deleted file mode 100644 index 5dfe1a2..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/imorexport/imorexport.hml +++ /dev/null @@ -1,203 +0,0 @@ - -
-
-
- -
- - {{ $t('value.contacts.imorexportPage.title') }} - -
- -
- - {{ $t('value.contacts.imorexportPage.import') }} - -
- - -
- - {{ $t('value.contacts.imorexportPage.simImport') }} - - -
- -
- - -
-
- - {{ $t('value.contacts.imorexportPage.storageDevice') }} - - - {{ $t('value.contacts.imorexportPage.storageDeviceInstruction') }} - -
- -
-
- -
- - {{ $t('value.contacts.imorexportPage.export') }} - -
- -
-
- - {{ $t('value.contacts.imorexportPage.exportStorage') }} - - {{ - $t('value.contacts.imorexportPage.exportStorageInstruction') }} - -
- -
- - - - - - -
-
- {{ - $t('value.contacts.imorexportPage.unimportStorage') }} -
-
- {{ - $t('value.contacts.imorexportPage.StorageSource') }} -
-
- {{ - $t('value.contacts.imorexportPage.message') }} -
-
-
- - - -
-
- - {{ $t('value.contacts.imorexportPage.choose') }} - -
- -
- - | - -
-
-
- - - -
-
- {{ - $t('value.contacts.imorexportPage.importContact') }} -
-
- - {{ $t('value.contacts.imorexportPage.isExport') }} - {{ fileName }}{{ $t('value.contacts.imorexportPage.safekeeping') }} -
-
- - | - -
-
-
- - - -
-
- - {{ $t('value.contacts.imorexportPage.warningInfo') }} - -
-
-
- {{ $t('value.contacts.imorexportPage.cancelTxt') }} - -
- -
- {{ $t('value.contacts.imorexportPage.importTxt') }} - -
-
-
-
-
\ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/imorexport/imorexport.js b/entry/src/main/js/default/pages/contacts/settings/imorexport/imorexport.js deleted file mode 100644 index dc6b76f..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/imorexport/imorexport.js +++ /dev/null @@ -1,263 +0,0 @@ -/** - * @file Import or export contacts - */ - -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import router from '@system.router'; -import prompt from '@system.prompt'; -import LOG from '../../../../utils/ContactsLog.js'; -import contactDetailReq from '../../../../../default/model/ContactDetailModel.js'; -import contactsService from '../../../../../default/model/ContactModel.js'; -import Constants from '../../../../../default/common/constants/Constants.js'; -import SIM from '@ohos.telephony.sim'; -import contactReq from '../../../../../default/model/AccountantsModel.js'; - -var TAG = 'imorExport...:'; - -const INT_4 = 4; -const INT_300 = 300; -const INT_100 = 200; -const INT_1000 = 1000; - - -export default { - data: { - height: 800, - vcardParams: [], - fileName: '00001.cvf', - checkedNum: 0, // Number of files selected - showSelectAll: false, - SimState: false, - isDisabled: false - }, - - onInit() { - }, - onReady() { - LOG.log(TAG + '--------------onReady'); - }, - onShow() { - this.getSimState(); - LOG.log(TAG + '--------------onShow'); - }, - onHide() { - LOG.log(TAG + '--------------onHide'); - }, - - - back: function () { - router.back(); - }, - - getSimState: async function () { - const simState = await SIM.getSimState(0); - LOG.info(TAG + 'SIM state is=' + simState); - if (simState == 4) { - this.SimState = true; - } - }, - - - SIMClicked: function () { - this.$element('SIMDialog').show(); - }, - - cancelClick: function () { - this.$element('SIMDialog').close(); - }, - - discardClick: function () { - this.$element('SIMDialog').close(); - this.getSlotIdContacts(); - }, - - - getSlotIdContacts: async function () { - var defaultSlotId = await SIM.getDefaultVoiceSlotId(); - LOG.info(TAG + 'defaultSlotId is=' + defaultSlotId); - var result = await SIM.queryIccDiallingNumbers(defaultSlotId, 1); - LOG.info(TAG + 'query SIM contacts length = ' + result.length); - var i = 0; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - result.forEach(value => { - var addParams = {}; - var phoneNumbers = []; - var contactInfo = {}; - var name = {}; - name.fullName = value.alphaTag; - addParams.name = name; - contactInfo.labelId = 2; - contactInfo.phoneNumber = value.number; - phoneNumbers.push(contactInfo); - addParams.phoneNumbers = phoneNumbers; - contactReq.addContact(DAHelper, addParams, (contactId) => { - LOG.info(TAG + 'Import SIM contactId = ' + contactId); - i++; - if (i == result.length) { - prompt.showToast({ - message: this.$t('value.contacts.imorexportPage.prompt').replace('num', result.length) - }); - } - }); - }); - - }, - - timestampToTime: function (timestamp) { - LOG.info(TAG + 'timestampToTime timestamp = '); - var date = new Date(timestamp * INT_1000); - var Y = date.getFullYear() + '-'; - var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'; - var D = date.getDate() + ' '; - var h = date.getHours() + ':'; - var m = date.getMinutes() + ':'; - var s = date.getSeconds(); - return Y + M + D + h + m + s; - }, - - uriToFileName: function (fileName) { - LOG.info(TAG + 'uriToFileName fileName = '); - fileName = fileName.replace('internal:// app/', ''); - return fileName; - }, - - itemClick: function (item) { - LOG.info(TAG + 'itemClick item = '); - LOG.info(TAG + 'select vcardParams'); - var checkedList = []; - LOG.info(TAG + 'select vcardParams item'); - item.checked = !item.checked; - this.vcardParams.forEach((element) => { - if (element.checked) { - checkedList.push(element); - } - }); - LOG.info(TAG + 'select vcardParams ' + this.vcardParams); - if (item.checked) { - this.checkedNum++; - if (checkedList.length == this.vcardParams.length) { - this.showSelectAll = true; - } - } else { - this.checkedNum--; - this.showSelectAll = false; - } - - }, - itemClickAll: function () { - if (this.showSelectAll) { - this.vcardParams.forEach((item) => { - item.checked = false; - }); - this.showSelectAll = false; - } else { - this.vcardParams.forEach((item) => { - item.checked = true; - }); - this.showSelectAll = true; - } - - LOG.info(TAG + 'select all vcardParams' + this.vcardParams); - LOG.info(TAG + 'select status vcardParams' + this.showSelectAll); - - }, - - showImportDialog: function () { - LOG.info(TAG + 'showImportDialog success'); - this.$app.$def.globalData.file.list({ - uri: 'internal:// app/', - success: (data) => { - this.vcardParams = data.fileList; - if (this.vcardParams.length > 0) { - this.height = INT_300; - var len = this.vcardParams.length; - this.vcardParams.forEach((element) => { - element.fileModifiedTime = this.timestampToTime(element.lastModifiedTime); - element.fileName = this.uriToFileName((element.uri).replace('internal:// app/', '')); - element.checked = false; - }); - if (len > INT_4) { - len = INT_4; - } - this.height = this.height + INT_100 * (len - 1); - len = len + 1; - this.fileName = '0000'.concat(len).concat('.cvf'); - this.$element('ImportDateDialog').show(); - } else { - this.$element('ImportDialog').show(); - } - }, - }); - - }, - - showExportDialog: function () { - this.getName(); - }, - - getName() { - this.$element('ExportDialog').show(); - - }, - closeExportDialog: function () { - this.$element('ExportDialog').close(); - }, - - exportContacts() { - LOG.info(TAG + 'start export contacts'); - var requestData = { - page: 0, - limit: 200 - }; - var contactResults = contactsService.queryContacts(requestData); - let contactDatas = []; - if (contactResults.resultList.length > 0) { - contactResults.resultList.forEach((element) => { - var param = {}; - param.contactId = element.contactId; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - contactDetailReq.getContactById(DAHelper, param, result => { - contactDatas.push(result.data); - }); - }); - } - let result = {}; - result.code = 0; - result.data = contactDatas; - - this.$app.$def.globalData.file.writeText({ - uri: 'internal:// app/'.concat(this.fileName), - text: JSON.stringify(result), - success: function () { - prompt.showToast({ - message: this.fileName.concat(this.$t('value.contacts.waitExport')) - }); - }, - fail: function (data, code) { - prompt.showToast({ - message: 'call fail callback fail, code: ' + code + ', data: ' + data - }); - }, - }); - this.$element('ExportDialog').close(); - }, - - shareContactsList: function () { - router.push({ - uri: 'pages/contacts/settings/shareContactsList/shareContactsList' - }); - } -}; \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/manage/manage.css b/entry/src/main/js/default/pages/contacts/settings/manage/manage.css deleted file mode 100644 index ab139ec..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/manage/manage.css +++ /dev/null @@ -1,185 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - flex-direction: column; - justify-content: flex-start; - align-items: center; - background-color: #FFF; - width: 100%; - height: 100%; -} - -.manage-title-div { - flex-direction: row; - align-items: center; - justify-content: flex-start; - margin-left: 24px; - margin-top: 10px; - position: relative; - width: 100%; -} - -.manage-back-but-div { - width: 73px; - height: 73px; - border-radius: 15px; - align-items: center; -} - -.manage-back-but-div:active { - width: 73px; - height: 73px; - border-radius: 15px; - align-items: center; - background-color: #f3f3f3; -} - - -.manage-back-image { - margin-left: 21px; - width: 40px; - height: 40px; - border-radius: 10px; -} - -.manage-title-text { - align-items: center; - justify-content: center; - margin-left: 15px; - font-size: 30px; - font-weight: 500; -} - -.merge-content-div { - margin-top: 20px; - position: relative; - flex-direction: row; - align-items: center; - justify-content: space-between; - height: 80px; - width: 100%; -} - -.merge-content-div:active { - position: relative; - flex-direction: row; - align-items: center; - height: 80px; - justify-content: space-between; - background-color: #e4e4e4; -} - -.merge-content-text { - margin-left: 45px; - font-size: 25px; - -} - -.flex-image { - right: 45px; - width: 30px; - height: 30px; - border-radius: 60px; -} - -.copy-content-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: space-between; - height: 80px; - width: 100%; -} - -.copy-content-div:active { - position: relative; - flex-direction: row; - align-items: center; - height: 97px; - justify-content: space-between; - background-color: #e4e4e4; -} - -.copy-content-text { - margin-left: 45px; - font-size: 25px; - color: #ababab; -} - - -.delete-content-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: space-between; - height: 80px; - width: 100%; -} - -.delete-content-div:active { - position: relative; - flex-direction: row; - align-items: center; - height: 80px; - justify-content: space-between; - background-color: #e4e4e4; -} - -.delete-content-text { - margin-left: 45px; - font-size: 25px; -} - - -.recently-deleted-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: space-between; - height: 90px; - width: 100%; -} - -.recently-deleted-div:active { - background-color: #e4e4e4; -} - -.recently-parent-div { - position: relative; - flex-direction: column; - align-items: flex-start; - justify-content: flex-start; - margin-left: 45px; - margin-top: 5px; - width: 520px; -} - - -.recently-deleted-text { - font-size: 25px; -} - -.recently-deleted-instruction-text { - margin-top: 5px; - font-size: 20px; - color: #7e7e7e; -} - -.divider { - line-cap: round; - stroke-width: 1px; - color: #ccc; - width: 87%; -} diff --git a/entry/src/main/js/default/pages/contacts/settings/manage/manage.hml b/entry/src/main/js/default/pages/contacts/settings/manage/manage.hml deleted file mode 100644 index 4f00e76..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/manage/manage.hml +++ /dev/null @@ -1,60 +0,0 @@ - -
-
-
- -
- - {{ $t('value.contacts.managePage.title') }} - -
- -
- - {{ $t('value.contacts.managePage.mergeContacts') }} - - -
- - -
- - {{ $t('value.contacts.managePage.copyContacts') }} - - -
- - -
- - {{ $t('value.contacts.managePage.deleteContacts') }} - - -
- - -
-
- - {{ $t('value.contacts.managePage.recentlyDeleted') }} - - {{ - $t('value.contacts.managePage.recentlyDeletedInstruction') }} - -
- -
-
\ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/manage/manage.js b/entry/src/main/js/default/pages/contacts/settings/manage/manage.js deleted file mode 100644 index b09be97..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/manage/manage.js +++ /dev/null @@ -1,62 +0,0 @@ -/** - * @file Sorting out Contacts - */ - -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import router from '@system.router'; -import LOG from '../../../../utils/ContactsLog.js'; - -var TAG = 'Manage...:'; - -export default { - data: {}, - -// Initialization page - onReady() { - LOG.log(TAG + 'onReady'); - }, - onShow() { - LOG.log(TAG + 'onShow'); - }, - onHide() { - LOG.log(TAG + 'onHide'); - }, - mergeContactsClicked: function () { - router.push({ - uri: 'pages/contacts/settings/manage/merge/merge', - params: {}, - }); - }, - deleteBatchClicked: function () { - router.push({ - uri: 'pages/contacts/selectContactsList/selectContactsList', - params: { - type: 'deleteBatchContacts' - }, - }); - }, - recentlyDeleteClicked: function () { - router.push({ - uri: 'pages/contacts/settings/manage/recentlydel/recentlydel', - params: {}, - }); - }, - -// Return to the upper page - back: function () { - router.back(); - } -}; \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/manage/merge/merge.css b/entry/src/main/js/default/pages/contacts/settings/manage/merge/merge.css deleted file mode 100644 index 0b954cc..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/manage/merge/merge.css +++ /dev/null @@ -1,281 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - width: 100%; - height: 100%; - flex-direction: column; - justify-content: flex-start; - align-items: center; - background-color: #FFF; -} - -.page-title-div { - flex-direction: row; - align-items: center; - justify-content: space-between; - margin-left: 24px; - margin-top: 10px; - position: relative; - width: 100%; -} - -.merge-title-div { - flex-direction: row; - align-items: center; - justify-content: flex-start; - position: relative; -} - -.merge-back-but-div { - width: 73px; - height: 73px; - border-radius: 15px; - align-items: center; -} - -.merge-back-but-div:active { - background-color: #f3f3f3; -} - - -.merge-back-image { - margin-left: 21px; - width: 50px; - height: 50px; - border-radius: 10px; -} - -.merge-title-text { - align-items: center; - justify-content: center; - margin-left: 15px; - font-size: 30px; - font-weight: 500; -} - -.free-space { - align-content: center; - justify-content: center; - align-items: center; - flex-direction: column; - width: 100%; - height: 100%; -} - -.free-image-icon { - margin-top: -30px; - width: 210px; - height: 210px; -} - -.free-space-text { - font-size: 28px; - margin-top: -30px; - color: #636363; -} - -.merge-list { - position: relative; - flex-direction: column; - align-items: center; - justify-content: space-between; - width: 100%; -} - -.merge-list-item { - padding-left: 35px; - width: 100%; - flex-direction: row; - align-items: center; - justify-content: space-between; - height: 160px; -} - -.merge-item-parent-div { - width: 83%; - flex-direction: column; - align-items: center; - justify-content: space-between; -} - -.merge-name-parent-div { - width: 100%; - flex-direction: row; - align-items: center; - justify-content: flex-start; -} - -.merge-name-stack { - flex-direction: column; - align-items: center; - justify-content: center; -} - -.merge-name-suffix-div { - width: 60px; - height: 60px; - border-radius: 60px; - background-color: #d3b8bf; -} - -.merge-name-suffix-text { - font-size: 25px; - font-weight: 500; - color: #F0F8FF; -} - -.merge-full-name-div { - height: 100px; - width: 80%; - margin-left: 40px; - flex-direction: column; - align-items: flex-start; - justify-content: center; -} - -.merge-full-name-text { - text-overflow: ellipsis; - max-lines: 1; - line-height: 40px; - font-weight: 500; - font-size: 25px; -} - -.merge-phone-numbers-text { - text-overflow: ellipsis; - max-lines: 1; - line-height: 43px; - font-size: 25px; - color: #626262; -} - -.divider { - line-cap: round; - stroke-width: 1px; - color: #ccc; - width: 91%; - right: -100px; -} - -.merge-item-check { - height: 75px; - width: 75px; - right: 25px; -} - -.batch-merge-div { - width: 100%; - height: 8%; - bottom: 0; - justify-content: center; -} - -.batch-merge-button { - width: 30%; - height: 100%; - border-radius: 15px; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.batch-merge-button:active { - background-color: lightgray; -} - -.batch-merge-button:disabled { - opacity: .5; -} - -.batch-merge-image-icon { - width: 45px; - height: 45px; -} - -.batch-merge-text { - margin-top: 5px; - font-size: 20px; - font-weight: 500; -} - -.dialog-main { - position: relative; - width: 658px; - height: 215px; - margin-left: 25px; - margin-right: 25px; - margin-bottom: 35px; -} - -.dialog-div { - flex-direction: column; - align-items: center; - margin-left: 25px; - margin-right: 25px; -} - -.inner-div { - width: 85%; - flex-direction: column; - align-items: center; - justify-content: center; - height: 150px; -} - -.inner-btn { - margin-top: -60px; - width: 560px; - height: 120px; - justify-content: space-around; - align-items: center; -} - -.btn-div { - width: 265px; - height: 60px; - border-radius: 50px; - justify-content: center; - align-items: center; -} - -.btn-div:active { - background-color: #E7E6E6; -} - -.btn-cancel-txt { - color: #007DFE; -} - -.dialog-inner-divider { - line-cap: round; - stroke-width: 1px; - height: 60px; - color: #a7a7a7; -} - -.btn-delete-txt { - color: #007DFE; -} - -.text-dialog-div { - flex-direction: row; - align-items: center; - justify-content: space-between; - margin-bottom: 30px; -} - -.min-progress { - color: #00F; -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/manage/merge/merge.hml b/entry/src/main/js/default/pages/contacts/settings/manage/merge/merge.hml deleted file mode 100644 index 3ffd12c..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/manage/merge/merge.hml +++ /dev/null @@ -1,96 +0,0 @@ - -
-
-
-
- -
- - {{ mergeTitle }} - -
-
- -
- - {{ $t('value.contacts.managePage.mergePage.noMerge') }} - -
-
- - - -
-
- -
-
- {{ $item.nameSuffix }} -
-
- {{ $item.emptyNameData }} - {{ $item.phoneNumber }} -
-
- -
- -
-
-
-
- - {{ $t('value.contacts.managePage.mergePage.merge') }} - -
-
- - {{ allSelectMessage }} - -
-
- -
-
- {{ $t('value.contacts.managePage.mergePage.mergeInfo') }} - {{ $t('value.contacts.managePage.mergePage.percent') }} -
- -
-
- -
-
- - {{$t('value.contacts.managePage.mergePage.warningInfo')}} - -
-
-
- {{$t('value.contacts.managePage.mergePage.cancelTxt')}} - -
- -
- {{$t('value.contacts.managePage.mergePage.discardTxt')}} - -
-
-
-
-
-
\ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/manage/merge/merge.js b/entry/src/main/js/default/pages/contacts/settings/manage/merge/merge.js deleted file mode 100644 index a6d24a7..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/manage/merge/merge.js +++ /dev/null @@ -1,235 +0,0 @@ -/** - * @file Merge contacts - */ - -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import router from '@system.router'; -import prompt from '@system.prompt'; -import LOG from '../../../../../utils/ContactsLog.js'; -import Constants from '../../../../../common/constants/Constants.js'; -import mergeService from '../../../../../../default/model/mergeModel.js'; - -var TAG = 'Merge...:'; - -export default { - data: { - mergeList: [], - mergeTitle: '', - checkedCount: 0, - icMergeM: '/res/image/ic_delete_m.svg', - icSelectAll: '/res/image/ic_select all_m.svg', - icFreeSpace: '/res/image/ic_contacts_favorite_me_36.svg', - allSelectMessage: '', - isSelectAll: false, - language: '', - mergeDisabled: true, - isFree: false, - timeOutId: '' - }, - - onInit: function () { - LOG.info(TAG + 'merge onInit --------------end'); - }, - onDestroy: function () { - }, - onReady: function () { - LOG.info(TAG + 'merge onReady --------------end'); - }, - - onShow: function () { - this.checkedCount = this.mergeList.length; - this.language = 'zh'; - this.mergeInitContact(2013, null); - LOG.info(TAG + 'merge onShow --------------end'); - }, - - doMerge: function () { - LOG.info(TAG + 'merge contacts--------------'); - this.$element('progressDialog').show(); - var checkedList = []; - var unCheckedList = []; - var contactIds = []; - if (this.isSelectAll) { // Select all merge - checkedList = this.mergeList; - this.mergeList.forEach(element => { - element.contactBeans.forEach(item => { - contactIds.push(item.contactId); - }); - }); - this.mergeList = []; - } else { // Not all selected - this.mergeList.forEach(element => { - if (element.checked) { - checkedList.push(element); - element.contactBeans.forEach(item => { - contactIds.push(item.contactId); - }); - } else { - unCheckedList.push(element); - } - }); - this.mergeList = unCheckedList; - } - this.checkedCount = 0; - var data = {}; - data.contactIds = contactIds; - clearTimeout(this.timeOutId); - this.timeOutId = setTimeout(() => { - this.mergeContactData(2014, data); - }, 1); - this.$element('progressDialog').close(); - }, - - clickCheckedAll: function () { - LOG.log(TAG + 'select all contacts'); - if (!this.isSelectAll) { - // Select all - this.selectAll(); - } else { - // Deselect all - this.unSelectAll(); - } - this.refreshPageTabs(); - }, - - selectAll: function () { - this.checkedCount = 0; // Clear the selected count and increase it again - this.mergeList.forEach(element => { - element.checked = true; - this.checkedCount++; - }); - }, - - unSelectAll: function () { - this.mergeList.forEach(element => { - element.checked = false; - if (this.checkedCount > 0) { - this.checkedCount--; - } - }); - }, - - changeCheckState: function (index, e) { - LOG.info(TAG + 'index is=' + index); - this.mergeList[index].checked = e.checked; - e.checked ? this.checkedCount++ : this.checkedCount--; - this.refreshPageTabs(); - }, - - refreshPageTabs: function () { - LOG.info(TAG + 'refreshPageTabs checkedCount' + this.checkedCount); - if (this.checkedCount > 0) { - switch (this.language) { - case 'zh': - this.mergeTitle = this.$t('value.contacts.managePage.mergePage.select') - + this.checkedCount + this.$t('value.contacts.managePage.mergePage.count'); - break; - case 'en': - this.mergeTitle = this.checkedCount + this.$tc('value.contacts.managePage.mergePage' - + '.titleMessageSelect', this.checkedCount); - break; - default: - this.mergeTitle = ''; - break; - } - this.mergeDisabled = false; - if (this.checkedCount == this.mergeList.length) { // Select all button status refresh - this.icSelectAll = '/res/image/ic_select all_filled_m.svg'; - this.allSelectMessage = this.$t('value.contacts.managePage.mergePage.unSelectAll'); - this.isSelectAll = true; - } else { - this.icSelectAll = '/res/image/ic_select all_m.svg'; - this.allSelectMessage = this.$t('value.contacts.managePage.mergePage.selectAll'); - this.isSelectAll = false; - } - } else { - this.checkedCount = 0; - this.icSelectAll = '/res/image/ic_select all_m.svg'; - this.allSelectMessage = this.$t('value.contacts.managePage.mergePage.selectAll'); - this.mergeTitle = this.$t('value.contacts.managePage.mergePage.noSelect'); - this.mergeDisabled = true; - this.isSelectAll = false; - } - }, - - onBackPress() { - LOG.info(TAG + 'onBackPress mergeList.length' + this.mergeList.length); - if (this.mergeList.length == 0) { - return false; - } - this.$element('saveDialog').show(); - return true; - }, - - back: function () { - router.back(); - }, - - discardClick: function () { - router.back(); - }, - cancelClick: function () { - this.$element('saveDialog').close(); - }, - - /** - * Query and merge contact list data - * - * @param {number} code 2005 FA and PA access protocol code - * @param {string} data contactId The contact ID - */ - mergeInitContact: function (code, data) { - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - mergeService.autoMergeContacts(DAHelper, data, result => { - if (result.code == 0 && result.mergeList.length > 0) { - this.mergeList = result.mergeList; - this.mergeList.forEach(element => { - if (element.checked) { - this.checkedCount++; - } - }); - } else if (result.code == 0 && result.mergeList.length == 0) { - this.isFree = true; - } else { - prompt.showToast({ - message: 'Failed to init data.' - }); - } - this.refreshPageTabs(); - }); - }, - - /** - * Merge contact list data - * - * @param {number} code 2005 FA and PA access protocol code - * @param {number} data contactId The contact ID - */ - mergeContactData: function (code, data) { - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - mergeService.mergeContacts(DAHelper, data, result => { - if (result == 0) { - this.refreshPageTabs(); - this.isFree = this.mergeList.length == 0 ? true : false; - this.$element('progressDialog').close(); - } else { - prompt.showToast({ - message: 'Failed to merge data.' - }); - } - }); - } -}; \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/manage/recentlydel/recentlydel.css b/entry/src/main/js/default/pages/contacts/settings/manage/recentlydel/recentlydel.css deleted file mode 100644 index 5d1f576..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/manage/recentlydel/recentlydel.css +++ /dev/null @@ -1,266 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - flex-direction: column; - justify-content: flex-start; - align-items: center; - background-color: #FFF; - width: 100%; - height: 100%; -} - -.recently-title-div { - flex-direction: row; - align-items: center; - justify-content: flex-start; - margin-left: 24px; - margin-top: 10px; - position: relative; - width: 100%; -} - -.recently-back-but-div { - width: 73px; - height: 73px; - border-radius: 15px; - align-items: center; -} - -.recently-back-but-div:active { - width: 73px; - height: 73px; - border-radius: 15px; - align-items: center; - background-color: #f3f3f3; -} - - -.recently-back-image { - margin-left: 21px; - width: 50px; - height: 50px; - border-radius: 10px; -} - -.recently-title-text { - align-items: center; - justify-content: center; - margin-left: 15px; - font-size: 30px; - font-weight: 500; -} - -.recently-instruction-div { - margin-top: 7px; - height: 70px; - align-items: center; - justify-content: flex-start; - width: 100%; -} - - -.recently-instruction-text { - margin-left: 45px; - font-size: 25px; - color: #7e7e7e; -} - -.free-space { - align-content: center; - justify-content: center; - align-items: center; - flex-direction: column; - width: 100%; - height: 80%; -} - -.free-image-icon { - margin-top: 55px; - width: 210px; - height: 210px; -} - -.free-space-text { - font-size: 28px; - margin-top: -25px; - color: #7e7e7e; -} - - -.recently-list { - position: relative; - flex-direction: column; - align-items: center; - justify-content: space-between; - width: 100%; -} - - -.recently-list-item { - width: 100%; - flex-direction: column; - align-items: center; - justify-content: space-between; - height: 110px; -} - -.merge-name-parent-div { - padding-left: 45px; - width: 100%; - flex-direction: row; - align-items: center; - justify-content: space-between; -} - - -.recently-full-name-div { - height: 100px; - width: 70%; - flex-direction: column; - align-items: flex-start; - justify-content: center; -} - - -.recently-full-name-text { - text-overflow: ellipsis; - max-lines: 1; - line-height: 40px; - font-size: 27px; -} - -.recently-phone-numbers-text { - text-overflow: ellipsis; - max-lines: 1; - line-height: 49px; - font-size: 24px; - color: #7e7e7e; -} - -.recently-delete-date-text { - text-overflow: ellipsis; - max-lines: 1; - font-size: 24px; - color: #7e7e7e; - right: 45px; -} - - -.divider { - margin-top: 12px; - line-cap: round; - stroke-width: 1px; - color: #ccc; - width: 88%; -} - - -.batch-empty-div { - width: 100%; - height: 8%; - bottom: 0; - justify-content: center; -} - -.batch-empty-button { - width: 30%; - height: 100%; - border-radius: 15px; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.batch-empty-button:active { - background-color: lightgray; -} - -.batch-empty-button:disabled { - opacity: .5; -} - -.batch-empty-image-icon { - width: 45px; - height: 45px; -} - -.batch-empty-text { - margin-top: 5px; - font-size: 20px; - font-weight: 500; -} - - -.dialog-main { - position: relative; - width: 658px; - margin-left: 25px; - margin-right: 25px; - margin-bottom: 35px; -} - -.dialog-div { - flex-direction: column; - align-items: center; -} - -.inner-div { - width: 85%; - flex-direction: column; - align-items: flex-start; - justify-content: center; - height: 150px; -} - -.inner-btn { - width: 560px; - height: 70px; - justify-content: space-around; - align-items: center; -} - - -.btn-div { - width: 265px; - height: 60px; - border-radius: 50px; - justify-content: center; - align-items: center; -} - -.btn-div:active { - background-color: #E7E6E6; -} - -.btn-cancel-txt { - font-size: 32px; - font-weight: 500; - color: #007DFE; -} - -.dialog-inner-divider { - align-items: center; - line-cap: round; - stroke-width: 1px; - height: 45px; - color: #7e7e7e; -} - - -.btn-delete-txt { - font-size: 32px; - font-weight: 500; - color: #F00; -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/manage/recentlydel/recentlydel.hml b/entry/src/main/js/default/pages/contacts/settings/manage/recentlydel/recentlydel.hml deleted file mode 100644 index 31ef771..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/manage/recentlydel/recentlydel.hml +++ /dev/null @@ -1,93 +0,0 @@ - - -
- - -
-
- -
- - {{ $t('value.contacts.managePage.recentlyPage.title') }} - -
- -
- - {{ $t('value.contacts.managePage.recentlyPage.instruction') }} - -
- -
- - {{ $t('value.contacts.managePage.recentlyPage.noContacts') }} - -
-
- - - - -
-
- - {{ $item.name == '' ? $t('value.contacts.page.item.noName') : $item.name }} - - {{ - $t('value.contacts.managePage.recentlyPage.deleteSource') }} - -
- {{ $t('value.contacts.managePage.recentlyPage.surplus') - }}{{ $item.days }}{{ $t('value.contacts.managePage.recentlyPage.days') }} -
- -
-
-
-
- - {{ $t('value.contacts.managePage.recentlyPage.batchEmpty') }} - -
-
- - -
-
- {{ $t('value.contacts.managePage.recentlyPage.clearInfo') }} - -
-
-
- {{ $t('value.contacts.managePage.recentlyPage.cancelButton') }} - -
- -
- {{ $t('value.contacts.managePage.recentlyPage.clearButton') }} - -
-
-
-
-
-
- - - - - -
\ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/manage/recentlydel/recentlydel.js b/entry/src/main/js/default/pages/contacts/settings/manage/recentlydel/recentlydel.js deleted file mode 100644 index a775b02..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/manage/recentlydel/recentlydel.js +++ /dev/null @@ -1,170 +0,0 @@ -/** - * @file Recently deleted - */ - -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import router from '@system.router'; -import prompt from '@system.prompt'; -import LOG from '../../../../../utils/ContactsLog.js'; -import recentlyDelService from '../../../../../model/recentlydelModel.js'; -import Utils from '../../../../../utils/Utils.js'; -import Constants from '../../../../../../default/common/constants/Constants.js'; - -var TAG = 'Recentlydel...:'; - -export default { - data: { - icDeleteM: '/res/image/ic_delete_m.svg', - icFreeSpace: '/res/image/ic_contacts_favorite_me_36.svg', - isFree: false, - isRecover: true, - defaultIndex: 0, - timeOutId: '', - language: '', - dialogHeight: '', - bottom: '', - marginTop: '0px', - recentlyList: [], - page: 0, - limit: 200 - }, - - onInit() { - LOG.info(TAG + 'onInit success'); - this.language = 'zh'; - switch (this.language) { - case 'zh': - this.dialogHeight = '215px'; - this.bottom = '33px'; - this.marginTop = '-2px'; - break; - case 'en': - this.dialogHeight = '255px'; - this.bottom = '5px'; - this.marginTop = '15px'; - break; - default: - break; - } - }, - onReady() { - LOG.log(TAG + 'onReady'); - }, - onShow() { - this.queryRecentlyDel(); - LOG.log(TAG + 'onShow'); - }, - onHide() { - LOG.log(TAG + 'onHide'); - }, - - queryRecentlyDel: function () { - var requestData = { - page: this.page, - limit: this.limit - }; - this.requestInit(requestData); - }, - - requestInit: function (data) { - LOG.info(TAG + 'requestInit data' ); - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - LOG.info(TAG + ' requestInit get DAHelper --------------'); - recentlyDelService.queryRecentlyDelContacts(DAHelper, data, (result) => { - if (result.code == 0) { - this.recentlyList = result.recentlyList; - this.isFree = Utils.isEmptyList(this.recentlyList) ? true : false; - } else { - prompt.showToast({ - message: 'Failed to init data.' - }); - } - }); - }, - - doDelete: function () { - this.$element('clearDialog').show(); - }, - - cancelClick: function () { - this.$element('clearDialog').close(); - }, - - clearClick: function () { - var data = { - contactIds: [] - }; - this.recentlyList.forEach((element) => { - data.contactIds.push(element.contactId); - }); - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - recentlyDelService.clearRecentlyDelContacts(DAHelper, data, (result) => { - if (result == 0) { - this.recentlyList = []; - this.isFree = true; - LOG.info(TAG + 'delete recently ok'); - this.$element('clearDialog').close(); - } - }); - }, - - doLongPress: function (index) { - LOG.log(TAG + 'doLongPress index =' + index); - this.defaultIndex = index; - this.isRecover = false; - }, - - changePage: function (e) { - LOG.info(TAG + 'changePage e'); - switch (e.detail.type) { - case 'recover': - this.isRecover = e.detail.isRecover; - this.recentlyList = e.detail.recentlyList; - this.isFree = Utils.isEmptyList(this.recentlyList) ? true : false; - clearTimeout(this.timeOutId); - this.timeOutId = setTimeout(() => { - switch (this.language) { - case 'zh': - prompt.showToast({ - message: this.$t('value.contacts.managePage.recentlyPage.restored') - + e.detail.checkedCount + this.$t('value.contacts.managePage.recentlyPage.numbers') - }); - break; - case 'en': - prompt.showToast({ - message: this.$t('value.contacts.managePage.recentlyPage.restored') - + e.detail.checkedCount + this.$tc('value.contacts.managePage.recentlyPage' - + '.numbers', e.detail.checkedCount) - }); - break; - } - }, 1000); - break; - case 'delete': - this.isRecover = e.detail.isRecover; - this.recentlyList = e.detail.recentlyList; - this.isFree = Utils.isEmptyList(this.recentlyList) ? true : false; - break; - default: - break; - } - - }, - - back: function () { - router.back(); - } -}; \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/manage/recentlydel/recover/recover.css b/entry/src/main/js/default/pages/contacts/settings/manage/recentlydel/recover/recover.css deleted file mode 100644 index 021a1c4..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/manage/recentlydel/recover/recover.css +++ /dev/null @@ -1,280 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - flex-direction: column; - justify-content: flex-start; - align-items: center; - background-color: #FFF; - width: 100%; - height: 100%; -} - -.recently-title-div { - flex-direction: row; - align-items: center; - justify-content: flex-start; - margin-left: 24px; - margin-top: 10px; - position: relative; - width: 100%; -} - -.recently-back-but-div { - width: 73px; - height: 73px; - border-radius: 15px; - align-items: center; -} - -.recently-back-but-div:active { - width: 73px; - height: 73px; - border-radius: 15px; - align-items: center; - background-color: #f3f3f3; -} - -.recently-back-image { - margin-left: 21px; - width: 50px; - height: 50px; - border-radius: 10px; -} - -.recently-title-text { - align-items: center; - justify-content: center; - margin-left: 15px; - font-size: 30px; - font-weight: 500; -} - -.recently-instruction-div { - margin-top: 7px; - height: 70px; - align-items: center; - justify-content: flex-start; - width: 100%; -} - -.recently-instruction-text { - margin-left: 45px; - font-size: 25px; - color: #7e7e7e; -} - -.free-space { - align-content: center; - justify-content: center; - align-items: center; - flex-direction: column; - width: 100%; - height: 80%; -} - -.free-image-icon { - margin-top: 55px; - width: 210px; - height: 210px; -} - -.free-space-text { - font-size: 28px; - margin-top: -25px; - color: #7e7e7e; -} - -.recently-list { - position: relative; - flex-direction: column; - align-items: center; - justify-content: space-between; - width: 100%; -} - -.recently-list-item { - width: 100%; - flex-direction: column; - align-items: center; - justify-content: space-between; -} - -.recently-name-parent-div { - padding-left: 45px; - width: 100%; - flex-direction: row; - align-items: center; - justify-content: space-between; -} - -.recently-full-name-div { - height: 100px; - width: 58%; - flex-direction: column; - align-items: flex-start; - justify-content: center; -} - -.recently-full-name-text { - text-overflow: ellipsis; - max-lines: 1; - line-height: 40px; - font-size: 27px; -} - -.recently-phone-numbers-text { - text-overflow: ellipsis; - max-lines: 1; - font-size: 24px; - line-height: 49px; - color: #7e7e7e; -} - -.recently-right-parent-div { - flex-direction: row; - align-items: center; - justify-content: flex-end; -} - -.recently-delete-date-text { - text-overflow: ellipsis; - max-lines: 1; - font-size: 24px; - color: #7e7e7e; - right: 27px; -} - -.recently-item-check { - height: 80px; - width: 80px; - right: 25px; -} - -.divider { - margin-top: 12px; - line-cap: round; - stroke-width: 1px; - color: #ccc; - width: 88%; -} - -.batch-empty-div { - width: 100%; - height: 8%; - bottom: 10px; - justify-content: center; -} - -.batch-empty-button { - width: 30%; - height: 100%; - border-radius: 15px; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.batch-empty-button:active { - background-color: lightgray; -} - -.batch-empty-button:disabled { - opacity: .5; -} - -.batch-empty-image-icon { - width: 45px; - height: 45px; -} - -.batch-empty-text { - margin-top: 5px; - font-size: 20px; - font-weight: 500; -} - -.dialog-main { - position: relative; - width: 658px; - margin-left: 25px; - margin-right: 25px; - margin-bottom: 35px; -} - -.dialog-div { - flex-direction: column; - align-items: center; -} - -.inner-div { - margin-top: 10px; - width: 85%; - flex-direction: column; - align-items: center; - justify-content: center; - height: 150px; -} - -.inner-btn { - bottom: 0; - width: 560px; - height: 70px; - justify-content: space-around; - align-items: center; -} - - -.btn-div { - width: 265px; - height: 60px; - border-radius: 50px; - justify-content: center; - align-items: center; -} - -.btn-cancel-txt { - font-size: 32px; - font-weight: 500; - color: #007DFE; -} - -.dialog-inner-divider { - align-items: center; - line-cap: round; - stroke-width: 1px; - height: 50px; - color: #7e7e7e; -} - -.btn-delete-txt { - font-size: 32px; - font-weight: 500; - color: #F00; -} - -.recover-div { - flex-direction: column; - align-items: flex-start; -} - -.recover-inner-div { - margin-top: 10px; - margin-left: 50px; - width: 85%; - flex-direction: column; - align-items: flex-start; - justify-content: center; - height: 150px; -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/manage/recentlydel/recover/recover.hml b/entry/src/main/js/default/pages/contacts/settings/manage/recentlydel/recover/recover.hml deleted file mode 100644 index 4354d6e..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/manage/recentlydel/recover/recover.hml +++ /dev/null @@ -1,99 +0,0 @@ - -
-
-
- -
- - {{ recentlyTitle }} - -
-
- - {{ $t('value.contacts.managePage.recentlyPage.instruction') }} - -
- -
- - {{ $t('value.contacts.managePage.recentlyPage.noContacts') }} - -
-
- - - -
-
- {{ $item.name == '' ? $t('value.contacts.page.item.noName') : $item.name }} - {{ - $t('value.contacts.managePage.recentlyPage.deleteSource') }} - -
-
- {{ $t('value.contacts.managePage.recentlyPage.surplus') - }}{{ $item.days }}{{ $t('value.contacts.managePage.recentlyPage.days') }} - -
-
- -
-
-
-
- - {{ $t('value.contacts.managePage.recentlyPage.batchDelete') }} - -
-
- - {{ $t('value.contacts.managePage.recentlyPage.batchRecover') }} - -
-
- - {{ allSelectMessage }} - -
-
- -
-
- {{ warningInfo }} -
-
-
- {{ $t('value.contacts.page.menu.deleteInfo.cancelTxt') }} - -
- -
- {{ $t('value.contacts.page.menu.deleteInfo.deleteTxt') }} - -
-
-
-
- -
-
- {{ $t('value.contacts.managePage.recentlyPage.recovering') }} -
-
-
-
-
\ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/manage/recentlydel/recover/recover.js b/entry/src/main/js/default/pages/contacts/settings/manage/recentlydel/recover/recover.js deleted file mode 100644 index dfd1a08..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/manage/recentlydel/recover/recover.js +++ /dev/null @@ -1,251 +0,0 @@ -/** - * @file Resume Deleting contacts - */ - -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import router from '@system.router'; -import LOG from '../../../../../../utils/ContactsLog.js'; -import recoverService from '../../../../../../model/recoverModel.js'; -import recentlyDelService from '../../../../../../model/recentlydelModel.js'; -import Constants from '../../../../../../common/constants/Constants.js'; -import prompt from '@system.prompt'; - -var TAG = 'Recover...:'; - -export default { - data: { - props: ['defaultRecentlyList'], - icDeleteM: '/res/image/ic_delete_m.svg', - icFreeSpace: '/res/image/ic_contacts_favorite_me_36.svg', - icSelectAll: '/res/image/ic_select all_m.svg', - icRecoverM: '/res/image/ic_delete_m.svg', - allSelectMessage: '', - isFree: false, - recentlyTitle: '', - checkedCount: 0, - language: '', - deleteDisabled: true, - recoverDisabled: true, - isSelectAll: false, - warningInfo: '', - dialogHeight: '', - bottom: '', - recentlyList: [] - }, - - onInit() { - LOG.info(TAG + 'onInit success'); - this.language = 'zh'; - switch (this.language) { - case 'zh': - this.dialogHeight = '255px'; - this.bottom = '0px'; - break; - case 'en': - this.dialogHeight = '215px'; - this.bottom = '30px'; - break; - default: - break; - } - this.recentlyList = this.defaultRecentlyList; - this.recentlyList[this.index].checked = true; - this.checkedCount++; - this.refreshPageTabs(); - }, - onReady() { - LOG.log(TAG + 'onReady'); - }, - onShow() { - LOG.log(TAG + 'onShow'); - }, - onHide() { - LOG.log(TAG + 'onHide'); - }, - onDestroy() { - }, - doRecover: function () { - this.$element('recoverDialog').show(); - this.$element('recoverDialog').close(); - var data = { - contactIds: [] - }; - var unCheckList = []; - this.recentlyList.forEach((element) => { - if (element.checked) { - data.contactIds.push(element.contactId); - } else { - unCheckList.push(element); - } - }); - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - recoverService.recoverRlyDelContacts(DAHelper, data, result => { - LOG.info(TAG + 'doRecover result'); - if (result == 0) { - this.recentlyList = unCheckList; - this.$emit('eventType', { - type: 'recover', - isRecover: true, - checkedCount: this.checkedCount, - recentlyList: this.recentlyList - }); - } else { - prompt.showToast({ - message: 'Failed to recover contact.' - }); - } - }); - }, - - doDelete: function () { - LOG.info(TAG + 'doDelete isSelectAll'); - if (this.isSelectAll) { - this.warningInfo = this.$t('value.contacts.managePage.recentlyPage.deleteAllWarningInfo'); - } else { - switch (this.checkedCount) { - case 1: - this.warningInfo = this.$t('value.contacts.managePage.recentlyPage.deleteOneWarningInfo'); - break; - default: - this.warningInfo = this.language == 'zh' ? this.checkedCount + this.$t('value.contacts.managePage' - + '.recentlyPage.deleteOthersWarningInfo') : this.$t('value.contacts.managePage.recentlyPage' - + '.deleteOthersPrefix') + this.checkedCount + this.$t('value.contacts.managePage' - + '.recentlyPage.deleteOthersSuffix'); - break; - } - } - this.$element('deleteDialog').show(); - }, - deleteClick: function () { - this.$element('deleteDialog').close(); - var data = { - contactIds: [] - }; - var unCheckList = []; - this.recentlyList.forEach((element) => { - LOG.info(TAG + 'deleteClick element' + element); - if (element.checked) { - data.contactIds.push(element.contactId); - } else { - unCheckList.push(element); - } - }); - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - recentlyDelService.clearRecentlyDelContacts(DAHelper, data, result => { - if (result == 0) { - this.recentlyList = unCheckList; - this.isFree = true; - this.$emit('eventType', { - type: 'delete', - isRecover: true, - recentlyList: this.recentlyList - }); - } else { - prompt.showToast({ - message: 'Failed to completely delete contact.' - }); - } - }); - }, - cancelClick: function () { - this.$element('deleteDialog').close(); - }, - onClickChange: function (index) { - LOG.info(TAG + 'onClickChange index' + index); - this.recentlyList[index].checked = !this.recentlyList[index].checked; - this.recentlyList[index].checked ? this.checkedCount++ : this.checkedCount--; - this.refreshPageTabs(); - }, - - clickCheckedAll: function () { - if (!this.isSelectAll) { - // Select all - this.selectAll(); - } else { - // Deselect all - this.unSelectAll(); - } - this.refreshPageTabs(); - }, - - selectAll: function () { - this.checkedCount = 0; // Clear the selected count and increase it again - LOG.info(TAG + 'select All this'); - this.recentlyList.forEach(element => { - element.checked = true; - this.checkedCount++; - }); - }, - - unSelectAll: function () { - LOG.info(TAG + 'unselect All this'); - this.recentlyList.forEach(element => { - element.checked = false; - if (this.checkedCount > 0) { - this.checkedCount--; - } - }); - }, - - changeCheckState: function (index, e) { - LOG.info(TAG + 'changeCheckState index' + index); - this.recentlyList[index].checked = e.checked; - e.checked ? this.checkedCount++ : this.checkedCount--; - this.refreshPageTabs(); - }, - - refreshPageTabs: function () { - LOG.info(TAG + 'refreshPageTabs checkedCount' + this.checkedCount); - if (this.checkedCount > 0) { - switch (this.language) { - case 'zh': - this.recentlyTitle = this.$t('value.contacts.managePage.recentlyPage.select') - + this.checkedCount + this.$t('value.contacts.managePage.recentlyPage.count'); - break; - case 'en': - this.recentlyTitle = this.checkedCount + this.$tc('value.contacts.managePage' - + '.recentlyPage.titleMessageSelect', this.checkedCount); - break; - default: - this.recentlyTitle = ''; - break; - } - this.deleteDisabled = false; - this.recoverDisabled = false; - if (this.checkedCount == this.recentlyList.length) { // Select all button status refresh - this.icSelectAll = '/res/image/ic_select all_filled_m.svg'; - this.allSelectMessage = this.$t('value.contacts.managePage.recentlyPage.unSelectAll'); - this.isSelectAll = true; - } else { - this.icSelectAll = '/res/image/ic_select all_m.svg'; - this.allSelectMessage = this.$t('value.contacts.managePage.recentlyPage.selectAll'); - this.isSelectAll = false; - } - } else { - this.checkedCount = 0; - this.icSelectAll = '/res/image/ic_select all_m.svg'; - this.allSelectMessage = this.$t('value.contacts.managePage.recentlyPage.selectAll'); - this.recentlyTitle = this.$t('value.contacts.managePage.recentlyPage.noSelect'); - this.deleteDisabled = true; - this.recoverDisabled = true; - this.isSelectAll = false; - } - }, - - back: function () { - router.back(); - } -}; \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/settings.css b/entry/src/main/js/default/pages/contacts/settings/settings.css deleted file mode 100644 index 7e1fc69..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/settings.css +++ /dev/null @@ -1,163 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - flex-direction: column; - justify-content: flex-start; - align-items: center; - width: 100%; - height: 100%; - background-color: #FFF; -} - -.settings-title-div { - flex-direction: row; - align-items: center; - justify-content: flex-start; - margin-left: 24px; - margin-top: 10px; - position: relative; - width: 100%; -} - -.settings-back-but-div { - width: 73px; - height: 73px; - border-radius: 15px; - align-items: center; -} - -.settings-back-but-div:active { - width: 73px; - height: 73px; - border-radius: 15px; - align-items: center; - background-color: #f3f3f3; -} - - -.settings-back-image { - margin-left: 21px; - width: 40px; - height: 40px; - border-radius: 10px; -} - -.settings-title-text { - align-items: center; - justify-content: center; - margin-left: 15px; - font-size: 30px; - font-weight: 500; -} - -.account-content-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: space-between; - padding-left: 45px; - width: 100%; -} - -.content-parent-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: flex-start; -} - -.account-content-div:active { - background-color: #e4e4e4; -} - -.account-profile-image { - margin-top: 28px; - margin-bottom: 28px; - width: 80px; - height: 80px; - border-radius: 60px; -} - -.account-content-text { - margin-left: 45px; - font-size: 31px; - -} - -.flex-image { - right: 60px; - width: 30px; - height: 30px; - border-radius: 60px; -} - -.divider { - line-cap: round; - stroke-width: 1px; - color: #ccc; - width: 87%; -} - -.blank-article-div { - height: 15px; - background-color: #f5f5f5; - display: grid; -} - -.contact-manage-div { - height: 70px; - align-items: center; - justify-content: flex-start; - width: 100%; -} - -.contact-manage-text { - margin-left: 45px; - font-size: 25px; - font-weight: 500; - color: #7e7e7e; -} - -.display-content-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: space-between; - padding-left: 45px; - height: 100px; - width: 100%; -} - -.display-content-div:active { - position: relative; - flex-direction: row; - align-items: center; - justify-content: space-between; - padding-left: 45px; - height: 100px; - background-color: #e4e4e4; -} - -.display-content-text { - width: 100%; - font-size: 25px; -} - -.flex-manage-image { - right: 60px; - width: 25px; - height: 25px; - border-radius: 60px; -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/settings.hml b/entry/src/main/js/default/pages/contacts/settings/settings.hml deleted file mode 100644 index b9c66ce..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/settings.hml +++ /dev/null @@ -1,71 +0,0 @@ - -
-
-
- -
- - {{ $t('value.contacts.settingPage.title') }} - -
- - -
-
- - {{ $t('value.contacts.settingPage.manager') }} - -
- -
- - {{ $t('value.contacts.settingPage.displayContact') }} - - -
- - -
- - {{ $t('value.contacts.settingPage.organizeContacts') }} - - -
- - -
- - {{ $t('value.contacts.settingPage.importExport') }} - - -
- -
-
- - {{ $t('value.contacts.settingPage.about') }} - - -
-
\ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/settings.js b/entry/src/main/js/default/pages/contacts/settings/settings.js deleted file mode 100644 index 5c2c85b..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/settings.js +++ /dev/null @@ -1,59 +0,0 @@ -/** - * @file Set up the - */ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import router from '@system.router'; -import LOG from '../../../utils/ContactsLog.js'; - -var TAG = 'Settings...: '; - -export default { - data: {}, - - onInit() { - LOG.info(TAG + ' onInit --------------end'); - }, - onDestroy() { - LOG.info(TAG + ' onDestroy --------------end'); - }, - - accountClicked: function () { - LOG.info(TAG + 'accountClicked'); - }, - - displayContactClicked: function () { - router.push({ - uri: 'pages/contacts/settings/display/display', - params: {}, - }); - }, - manageContactsClicked: function () { - router.push({ - uri: 'pages/contacts/settings/manage/manage', - params: {}, - }); - }, - importExportClicked: function () { - router.push({ - uri: 'pages/contacts/settings/imorexport/imorexport', - params: {}, - }); - }, - - back: function () { - router.back(); - } -}; \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/shareContactsList/shareContactsList.css b/entry/src/main/js/default/pages/contacts/settings/shareContactsList/shareContactsList.css deleted file mode 100644 index 11f7bfe..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/shareContactsList/shareContactsList.css +++ /dev/null @@ -1,358 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - flex-direction: column; - justify-content: flex-start; - align-items: center; - height: 100%; - width: 100%; - background-color: #FFF; -} - -.title-div { - flex-direction: row; - align-items: center; - justify-content: flex-start; - margin-left: 24px; - margin-top: 10px; - width: 100%; - position: relative; -} - -.back-but-div { - width: 73px; - height: 73px; - border-radius: 15px; - align-items: center; -} - -.back-but-div:active { - width: 73px; - height: 73px; - border-radius: 15px; - align-items: center; - background-color: #f3f3f3; -} - -.back-image { - margin-left: 21px; - width: 40px; - height: 40px; - border-radius: 10px; -} - -.title-text { - align-items: center; - justify-content: center; - margin-left: 15px; - font-size: 30px; - font-weight: 500; -} - -.title-text-little { - align-items: center; - justify-content: center; - margin-left: 15px; - font-size: 30px; - font-weight: 500; -} - -.todo-search-div { - position: relative; - flex-direction: row; - justify-content: flex-start; - align-items: flex-start; - width: 85%; - height: 140px; - margin-top: 30px; - margin-bottom: -40px; -} - -.todo-search-div-favorite { - flex-direction: column; - justify-content: flex-start; - align-items: flex-start; - width: 85%; - height: 140px; - margin-top: 30px; - margin-bottom: 40px; -} - -.title-text-unselect { - align-items: center; - justify-content: center; - margin-left: 15px; - font-weight: 500; - font-size: 60px; - max-lines: 1; - text-overflow: ellipsis; -} - -.title-text-unselect-favorite-size { - align-items: center; - justify-content: center; - margin-top: 55px; - margin-left: 15px; - font-weight: 500; - font-size: 25px; - max-lines: 1; - text-overflow: ellipsis; -} - -.free-space { - align-content: flex-start; - justify-content: flex-start; - align-items: center; - flex-direction: column; - width: 100%; - height: 80%; -} - -.free-space-no-result { - align-content: flex-start; - justify-content: flex-start; - align-items: center; - flex-direction: column; - width: 100%; - height: 75%; -} - -.contacts-image-icon { - margin-top: 42%; - width: 210px; - height: 210px; -} - -.free-space-text { - font-size: 28px; - margin-top: -22px; - font-weight: 400; - color: #999; -} - -.list { - height: 76%; - columns: 1; -} - -.list-favorite { - height: 71%; - columns: 1; -} - -.list-item { - position: relative; - flex-direction: column; - align-items: center; - height: 120px; - justify-content: flex-start; -} - -.contact-smart-groups-div { - height: 58px; - align-items: center; - justify-content: flex-start; -} - -.contact-smart-groups-text { - margin-left: 45px; - font-size: 26px; - font-weight: 500; - color: #646464; -} - -.list-content-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: flex-start; - padding-left: 45px; -} - -.list-item-div { - position: relative; - flex-direction: column; - align-items: flex-start; - justify-content: space-around; - padding-top: 10px; - padding-bottom: 10px; -} - -.list-item-line { - width: 100%; - margin-right: 40px; - margin-left: 45px; - height: 1px; - border-bottom: 1px; - border-color: #d3d3d3; -} - -.name-text { - text-overflow: ellipsis; - max-lines: 2; - width: 560px; - font-size: 30px; -} - -.todo-item { - width: 454px; - height: 100px; - flex-direction: row; - columns: 1; - align-items: stretch; - padding-left: 20px; - padding-right: 20px; -} - -.todo-content-div { - flex-direction: row; - justify-content: flex-start; - align-items: center; -} - -.first { - width: 20%; - margin-left: 25px; -} - -.todo-content-button { - width: 90%; - height: 65%; - background-color: #DACEB5; -} - -.todo-content-name-last { - width: 90%; - height: 65%; - text-align: center; - font-size: 25px; - allow-scale: true; - font-weight: 600; - color: #FFF; -} - -.todo-item-content-div { - width: 80%; - height: 80%; -} - -.todo-item-content-image { - width: 60px; - height: 60px; - border-radius: 60px; -} - -.todo-content-div-div { - flex-direction: column; - justify-content: center; - align-items: flex-start; - margin-start: 32px; - width: 88%; -} - -.todo-content-name { - width: 100%; - text-align: left; - font-size: 32px; - font-weight: 600; - max-lines: 1; - text-overflow: ellipsis; -} - -.todo-content { - margin-top: 9px; - width: 100%; - text-align: left; - max-lines: 1; - text-overflow: ellipsis; - color: #636363; - font-size: 28px; -} - -.checkbox { - margin-right: 50px; -} - -.allrecords-item-right-checkbox { - justify-content: center; - align-items: center; - width: 160px; - height: 160px; - border-radius: 10px; -} - -.todo-divider-div { - flex-direction: column; - justify-content: flex-start; - align-items: flex-start; - position: absolute; - bottom: 0; - width: 100%; - margin-right: 50px; -} - -.todo-divider { - line-cap: round; - stroke-width: 1px; - color: #ccc; - margin-right: 25px; -} - -.batch-delete-operation { - width: 85%; - height: 8%; - justify-content: center; -} - -.batch-delete-operation-favorite { - width: 85%; - height: 8%; - justify-content: center; -} - -.batch-delete-operation-button { - width: 30%; - height: 100%; - border-radius: 15px; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.batch-delete-image-icon { - width: 50px; - height: 50px; -} - -.batch-delete-text { - font-size: 22px; -} - -.batch-delete-operation-button { - width: 30%; - height: 100%; - border-radius: 15px; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.batch-delete-operation-button:active { - background-color: #ccc; -} - -.batch-delete-operation-button:disabled { - opacity: .5; -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/shareContactsList/shareContactsList.hml b/entry/src/main/js/default/pages/contacts/settings/shareContactsList/shareContactsList.hml deleted file mode 100644 index 0d1cf22..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/shareContactsList/shareContactsList.hml +++ /dev/null @@ -1,158 +0,0 @@ - -
-
-
- -
- - {{ title }} - - - {{ title }} - -
- -
- -
-
- - - {{ $t('value.contacts.groupsPage.noContacts') }} - -
-
- - - {{ $t('value.contacts.groupsPage.noMatchingResults') }} - -
-
- - {{ title }} - - - {{ $t('value.favorites.page.title') }} {{ contactsList.length }} - -
- - -
- - - {{ item.nameSuffix }} - - -
- -
-
-
-
- - {{ - (item.emptyNameData && item.emptyNameData.length > 0) ? item.emptyNameData : item.fullName - }} - -
- - -
-
- - -
-
-
- -
-
- - -
-
-
-
- - -
- - {{ $t('value.contacts.groupsPage.matchingResultNumber').replace("num", matchingResults.length + "") - }} - -
-
- -
- - - {{ item.nameSuffix }} - - -
- -
-
-
-
- - {{ item.emptyNameData }} - - - {{ - (item.phoneNumbers ? item.phoneNumbers[0].phoneNumber : '') + ' ' + (item.organization ? item.organization.name : '') - }} - -
- - -
-
- - -
-
-
- - -
-
-
-
-
-
- - {{ $t('accountants.share') }} - -
-
- - {{ $t('value.contacts.groupsPage.selectAll') }} - -
-
- - {{ $t('value.contacts.groupsPage.cancelSelectAll') }} - -
-
-
\ No newline at end of file diff --git a/entry/src/main/js/default/pages/contacts/settings/shareContactsList/shareContactsList.js b/entry/src/main/js/default/pages/contacts/settings/shareContactsList/shareContactsList.js deleted file mode 100644 index 0f054f4..0000000 --- a/entry/src/main/js/default/pages/contacts/settings/shareContactsList/shareContactsList.js +++ /dev/null @@ -1,191 +0,0 @@ -/** - * @file Sharing a Contact List - */ - -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import router from '@system.router'; -import prompt from '@system.prompt'; -import LOG from '../../../../utils/ContactsLog.js'; -import contactsService from '../../../../../default/model/ContactModel.js'; -import groupReq from '../../../../../default/model/GroupsModel.js'; -import Constants from '../../../../../default/common/constants/Constants.js'; - -var TAG = 'shareContactsList...:'; - -export default { - data: { - icShare: '/res/image/ic_share_m.svg', - title: '', // title - groupId: 0, - showEmptyPage: false, // The list page is empty - noMatchingResults: false, // The displayed search results are empty - checkedNum: 0, // Number of contacts selected - contactsList: [], // contact list - matchingResults: [], // search result - showSelectAll: true, // Select all, - addMemberDisabled: true, - showContactList: true, - showMatchContactsList: false, - contactId: '', - pressIndex: 0, - index: ['#', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', - 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '…'] - }, - onInit() { - LOG.info(TAG + 'onInit success'); - this.getContactsList(); - this.initTitle(); - }, - onShow() { - LOG.info(TAG + 'onShow success'); - if (!this.contactsList || this.contactsList.length == 0) { - this.showEmptyPage = true; - } - }, - onDestroy() { - }, - getContactsList: function () { - this.page = 0; - var actionData = { - page: this.page, - limit: 200, - queryContactsType: 'all' - }; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - contactsService.queryContacts(DAHelper, actionData, (result) => { - LOG.info(TAG + 'queryContacts success. result.resultList = ' + result.resultList.length); - if (result.code == 0) { - result.resultList.forEach((item) => { - item.checked = false; - }); - this.contactsList = result.resultList; - } else { - prompt.showToast({ - message: 'Failed to init data.' - }); - } - }); - - }, - clickSearch: function (e) { - LOG.info(TAG + 'clickSearch e'); - // Search input box - if (e.text) { - this.showContactList = false; - this.showMatchContactsList = true; - this.searchRequest(e.text); - } else { - this.showContactList = true; - this.showMatchContactsList = false; - this.noMatchingResults = false; - } - }, - - /** - * Search request background - * - * @param {string} keyText Input box content - */ - searchRequest: function (keyText) { - var requestData = { - page: 0, - limit: 0, - likeValue: keyText - }; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.searchContacts(DAHelper, requestData, result => { - if (result.code == 0 && result.contactCount > 0) { - this.matchingResults = result.data; - } else { - this.matchingResults = []; - LOG.error(TAG + 'select contact request error'); - } - if (this.matchingResults && this.matchingResults.length == 0) { - this.noMatchingResults = true; - } else { - this.noMatchingResults = false; - } - LOG.info(TAG + 'select search request result'); - }); - }, - itemClick: function (item) { - LOG.info(TAG + 'itemClick item'); - item.checked = !item.checked; - var checkedList = []; - this.contactsList.forEach((contact) => { - if (contact.checked) { - checkedList.push(contact); - } - }); - if (item.checked) { - this.checkedNum++; - if (checkedList.length == this.contactsList.length) { - this.showSelectAll = false; - } - } else { - this.checkedNum--; - this.showSelectAll = true; - } - if (checkedList.length == 0) { - this.addMemberDisabled = true; - } else { - this.addMemberDisabled = false; - } - this.initTitle(); - }, - // Share contacts - shareContacts: function () { - var checkedList = []; - this.contactsList.forEach((item) => { - if (item.checked) { - checkedList.push(item); - } - }); - LOG.info(TAG + 'shareContacts contactsList' + this.contactsList); - prompt.showToast({ - message: 'Call share vCard three parties' - }); - }, - clickSelectAll: function () { - this.contactsList.forEach((item) => { - item.checked = true; - }); - this.checkedNum = this.contactsList.length; - this.showSelectAll = false; - this.addMemberDisabled = false; - this.initTitle(); - }, - clickCancelSelectAll: function () { - this.contactsList.forEach((item) => { - item.checked = false; - }); - this.checkedNum = 0; - this.showSelectAll = true; - this.addMemberDisabled = true; - this.initTitle(); - }, - initTitle: function () { - if (this.checkedNum != 0) { - this.title = this.$t('value.contacts.groupsPage.alreadySelect').replace('num', this.checkedNum + ''); - } else { - this.title = this.$t('value.contacts.groupsPage.noSelect'); - } - }, - - back: function () { - router.back(); - }, -}; diff --git a/entry/src/main/js/default/pages/dialer/calllogdelete/calllogdelete.css b/entry/src/main/js/default/pages/dialer/calllogdelete/calllogdelete.css deleted file mode 100644 index e706b43..0000000 --- a/entry/src/main/js/default/pages/dialer/calllogdelete/calllogdelete.css +++ /dev/null @@ -1,141 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - justify-content: center; - align-items: center; - width: 100%; - height: 100%; - flex-direction: column; -} - -.batch-delete-title { - width: 100%; - height: 8%; - align-items: center; - -} - -.batch-delete-title-image-button { - width: 65px; - height: 65px; - justify-content: center; - align-items: center; - margin-left: 35px; -} - -.batch-delete-title-image-button:active { - background-color: #d3d3d3; -} - -.batch-delete-title-image { - width: 55px; - height: 55px; -} - -.batch-delete-title-text { - font-size: 40px; - margin-left: 20px; -} - -.batch-delete-operation { - width: 100%; - height: 8%; - justify-content: center; -} - -.batch-delete-operation-button { - width: 30%; - height: 100%; - border-radius: 15px; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.batch-delete-operation-button:active { - background-color: #d3d3d3; -} - -.batch-delete-operation-button:disabled { - opacity: .5; -} - -.batch-delete-image-icon { - width: 50px; - height: 50px; -} - -.batch-delete-text { - font-size: 22px; - color: #e5000000; -} - -.batch-delete-text-selected { - font-size: 22px; - color: #007cfe; -} - -.batch-delete-list-container { - width: 100%; - height: 84%; -} - -.dialog-main { - width: 92%; - height: 15%; -} - -.dialog-div { - flex-direction: column; - align-items: center; - justify-content: flex-end; -} - -.inner-txt { - height: 40%; - width: 100%; - flex-direction: column; - align-items: center; - justify-content: space-around; -} - -.txt { - font-size: 30px; -} - -.inner-btn { - width: 100%; - height: 50%; - justify-content: space-around; - align-items: center; -} - -.btn-txt { - width: 40%; - height: 70%; - border-radius: 30px; - background-color: transparent; - text-color: #175cfe; - font-size: 30px; -} - -.btn-txt-delete { - width: 40%; - height: 70%; - border-radius: 30px; - background-color: transparent; - text-color: #F00; - font-size: 30px; -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/dialer/calllogdelete/calllogdelete.hml b/entry/src/main/js/default/pages/dialer/calllogdelete/calllogdelete.hml deleted file mode 100644 index bdff81e..0000000 --- a/entry/src/main/js/default/pages/dialer/calllogdelete/calllogdelete.hml +++ /dev/null @@ -1,51 +0,0 @@ - - -
-
-
- -
- {{ titleMessage }} -
-
- -
-
-
- - {{ $t('value.callRecords.delete') }} -
-
- - {{ allSelectMessage }} -
-
- -
-
- {{ deleteMessage }} -
-
- - -
-
-
-
diff --git a/entry/src/main/js/default/pages/dialer/calllogdelete/calllogdelete.js b/entry/src/main/js/default/pages/dialer/calllogdelete/calllogdelete.js deleted file mode 100644 index 9417d4b..0000000 --- a/entry/src/main/js/default/pages/dialer/calllogdelete/calllogdelete.js +++ /dev/null @@ -1,286 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import callLogService from '../../../../default/model/CalllogModel.js'; -import router from '@system.router'; -import LOG from '../../../utils/ContactsLog.js'; -import Constants from '../../../../default/common/constants/Constants.js'; -import Utils from '../../../../default/utils/utils.js'; - -var TAG = 'callLogDelete...:'; - -export default { - data: { - callLogTemp: [], - callLogMergeRule: '', - ic_cancle_m: '/res/image/ic_cancel_m.svg', - ic_delete_m: '/res/image/ic_delete_m.svg', - ic_select_all: '/res/image/ic_select all_m.svg', - titleMessage: '', - totalCount: 0, - selectCount: 0, - allSelectMessage: '', - allSelectTextStyle: 'batch-delete-text', - deleteMessage: '', - isSelectAll: false, - selectAllClicked: false, - deleteDisabled: true, - refreshBatchDeleteLogId: 0, - from_contact: ' from_contact', - pageInfo: { - pageIndex: 0, - pageSize: 20, - } - }, - onInit() { - LOG.info(TAG + 'onInit success') - if (this.logIndex == 2) {// Voice mail - this.totalCount = this.$app.$def.globalData.voicemailTotalData.voicemailCount; - } else if (this.logIndex == 1) { - this.totalCount = this.$app.$def.globalData.callLogTotalData.missedCount; - } else { - this.totalCount = this.$app.$def.globalData.callLogTotalData.totalCount; - } - this.callLogMergeRule = this.$app.$def.globalData.storage.getSync('call_log_merge_rule', 'from_time'); - this.getCallLog(this.pageInfo.pageIndex, this.pageInfo.pageSize); - this.titleMessage = this.$t('value.callRecords.titleMessageNoSelect'); - this.allSelectMessage = this.$t('value.callRecords.selectAll'); - this.allSelectTextStyle = 'batch-delete-text'; - }, - onDestroy() { - LOG.info(TAG + 'logMessage onDestroy calllogDelete'); - }, - - clickSelectAll(e) { - LOG.info(TAG + 'clickSelectAll e' + e.target); - if (!this.isSelectAll) { // Select all - this.selectAllClicked = true; - this.selectAll(); - } else { // Click the deselect all button, - this.selectAllClicked = false; - this.unSelectAll(); - } - this.refreshPageMessage(); - }, - - checkStateChange(e) { - LOG.info(TAG + 'checkStateChange e' + e.target); - this.callLogTemp[e.detail.index].checked = e.detail.checked; - this.selectCount = e.detail.checked ? this.selectCount + e.detail.num : this.selectCount - e.detail.num; // 若复选框选中,则计数加1,未选中则计数-1 - this.refreshPageMessage(); - }, - - selectAll() { - LOG.info('logMessage selectAll!!!'); - this.callLogTemp.forEach(element => { - element.checked = true; - }); - this.selectCount = this.totalCount; - }, - - - unSelectAll() { - this.callLogTemp.forEach(element => { - element.checked = false; - }); - this.selectCount = 0; // selectCount Clear - }, - - - refreshPageMessage() { - if (this.selectCount > 0) { - this.titleMessage = this.$t('value.callRecords.titleMessageSelect') + this.selectCount + - this.$t('value.callRecords.titleMessageUnit'); - this.deleteDisabled = false; - if (this.selectCount == this.totalCount) { // Select all button status refresh - this.ic_select_all = '/res/image/ic_select all_filled_m.svg'; - this.allSelectMessage = this.$t('value.callRecords.unSelectAll'); - this.allSelectTextStyle = 'batch-delete-text-selected'; - this.isSelectAll = true; - - this.deleteMessage = this.$t('value.callRecords.deleteMessageAsk') + - this.$t('value.callRecords.deleteMessageAll') + this.$t('value.callRecords.deleteMessageCalls'); - } else { - this.ic_select_all = '/res/image/ic_select all_m.svg'; - this.allSelectMessage = this.$t('value.callRecords.selectAll'); - this.allSelectTextStyle = 'batch-delete-text'; - this.isSelectAll = false; - if (this.selectCount == 1) { - - this.deleteMessage = this.$t('value.callRecords.deleteMessageAsk') + - this.$t('value.callRecords.deleteMessageThis') + this.$t('value.callRecords.deleteMessageCalls'); - } else { - - this.deleteMessage = this.$t('value.callRecords.deleteMessageAsk') + this.selectCount + - this.$t('value.callRecords.deleteMessageUnit') + this.$t('value.callRecords.deleteMessageCalls'); - } - } - } else { - this.selectCount = 0; - this.ic_select_all = '/res/image/ic_select all_m.svg'; - this.allSelectMessage = this.$t('value.callRecords.selectAll'); - this.allSelectTextStyle = 'batch-delete-text'; - this.titleMessage = this.$t('value.callRecords.titleMessageNoSelect'); - this.deleteDisabled = true; - this.isSelectAll = false; - } - }, - - deleteCheckedCalls() { - LOG.info('logMessage click delete !!!'); - this.$element('deleteCheckDialog').show(); // Show delete prompt box - }, - doDelete() { - if (this.isSelectAll && this.logIndex == 0) { // Select all to delete all call records - this.callLogTemp = []; - - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CALLLOG_DB_URI); - callLogService.clearCallLog(DAHelper, () => { - this.$app.$def.globalData.callLogTotalData.callLogList = []; - this.$app.$def.globalData.callLogTotalData.missedList = []; - this.$app.$def.globalData.callLogTotalData.totalCount = 0; - this.$app.$def.globalData.callLogTotalData.missedCount = 0; - router.back(); - }); - } else { - if (this.logIndex == 2) { // Voice mail - if (this.isSelectAll) { // Full deletion of voice mailbox - this.callLogTemp = []; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.VOICEMAIL_DB_URI); - callLogService.clearVoicemailList(DAHelper, () => { - this.$app.$def.globalData.voicemailTotalData.voicemailList = []; - this.$app.$def.globalData.voicemailTotalData.voicemailCount = 0; - router.back(); - }); - } else { // Partial deletion of voice mailbox - this.doDeleteVoicemail(); - } - } else { - if (this.callLogMergeRule == this.from_contact) { - this.doDeleteByContactMerge(); - } else { - this.doDeleteByTimeMerge(); - } - } - } - this.$element('deleteCheckDialog').close(); - }, - doDeleteVoicemail() { - var unCheckedList = []; - var voicemailIds = []; - this.callLogTemp.forEach(element => { - if (element.checked) { // Selected element - voicemailIds.push(element.id); - } else { - unCheckedList.push(element); - } - }); - this.callLogTemp = unCheckedList; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.VOICEMAIL_DB_URI); - callLogService.deleteVoicemailByIds(DAHelper, voicemailIds, ()=>{ - this.back(); - }); - }, - doDeleteByContactMerge() { - var unCheckedList = []; - var numberList = []; // Phone number used to store call records without contacts - var contactIds = []; // QuickSearch for storing contact call records_ key(The contact ID) - this.callLogTemp.forEach(element => { - if (element.checked) { // Selected element - if (Utils.isEmpty(element.contactKey)) {// Number has no associated contact - numberList.push(element.phone); - } else { // The number is already associated with a contact - contactIds.push(element.contactKey); - } - } else { - unCheckedList.push(element); - } - }); - this.callLogTemp = unCheckedList; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CALLLOG_DB_URI); - callLogService.deleteCallLogByNumbersOrContacts(DAHelper, numberList, contactIds, ()=>{ - LOG.info('logMessage delete call log by contacts or number callBack success!'); - this.back(); - }); - - }, - doDeleteByTimeMerge() { - var unCheckedList = []; - var checkedList = []; - var removeIds = []; - this.callLogTemp.forEach(element => { - if (element.checked) { // Selected element - checkedList.push(element); - if (!this.selectAllClicked || this.logIndex == 1) { - element.ids.forEach(elementId => { - removeIds.push(elementId); - }); - } - } else { - unCheckedList.push(element); - if (this.selectAllClicked && this.logIndex != 1) { - element.ids.forEach(elementId => { - removeIds.push(elementId); - }); - } - } - }); - this.callLogTemp = unCheckedList; - if (!this.selectAllClicked || this.logIndex == 1) { - LOG.info('logMessage delete by ids:' + removeIds); - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CALLLOG_DB_URI); - callLogService.deleteCallLogByIds(DAHelper, removeIds, () => { - LOG.info('logMessage delete call log callBack success!!!'); - this.back(); - }); - } else { - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CALLLOG_DB_URI); - callLogService.deleteOtherCallLog(DAHelper, removeIds, ()=>{ - LOG.info('logMessage delete other call log callBack success!!!'); - this.back(); - }); - } - }, - cancelDialog() { - this.$element('deleteCheckDialog').close(); - }, - back() { - router.back(); - }, - requestLogByPage() { - if (this.logIndex != 2) { - this.pageInfo.pageIndex++; - } - this.getCallLog(this.pageInfo.pageIndex, this.pageInfo.pageSize); - }, - getCallLog(pageIndex, pageSize) { - var pageList = []; - if (this.logIndex == 2) {// voiceMail - pageList = this.callLogList; - } else { - pageList = callLogService.getCallLog(pageIndex, pageSize, this.callLogList); - } - if (this.selectAllClicked) { // Click Select all - pageList.forEach((element) => { - element.checked = true; - }); - } - LOG.info('logMessage batchDelete selectAllClicked = '); - if (pageIndex == 0) { - this.callLogTemp = pageList; - } else { - this.callLogTemp = this.callLogTemp.concat(pageList); - } - } -}; diff --git a/entry/src/main/js/default/pages/dialer/dialer.hml b/entry/src/main/js/default/pages/dialer/dialer.hml deleted file mode 100644 index abcc807..0000000 --- a/entry/src/main/js/default/pages/dialer/dialer.hml +++ /dev/null @@ -1,474 +0,0 @@ - - - -
- - - - - - - - - - - - - - -
- -
- - - -
- -
-
-
- {{ $item.firstPart - }} - {{ $item.matchedPart }} - {{ $item.endPart }} - -
-
- {{ $item.name }} - -
-
-
-
- {{ $item.firstPart }} - - {{ $item.matchedPart }} - {{ $item.endPart }} -
-
- {{ $item.name }} - -
-
-
-
- {{ - ($item.callTag && $item.callTag.length > 0) ? $item.callTag : $t('value.callRecords.unKnowLocation') - }} -
-
- {{ $item.firstPart }} - - {{ $item.matchedPart }} - {{ $item.endPart }} - -
-
-
- -
-
- -
-
-
-
-
-
-
- -
- - -
- -
- - -
-
- - {{ $t('phone.addContacts') }} -
-
- - {{ $t('phone.saveContacts') }} -
-
- - {{ $t('phone.sendMessage') }} -
-
-
- - -
-
-
-
- 1 - -
-
-
-
- 2 - ABC -
-
-
-
- 3 - DEF -
-
-
-
-
-
- 4 - GHI -
-
-
-
- 5 - JKL -
-
-
-
- 6 - MNO -
-
-
-
-
-
- 7 - PQRS -
-
-
-
- 8 - TUV -
-
-
-
- 9 - WXYZ -
-
-
-
-
-
- * - (P) -
-
-
-
- 0 - + -
-
-
-
- # - (W) -
-
-
-
-
-
- -
-
-
- - -
-
-
- -
-
-
-
-
-
- -
-
-
-
- - - - {{ simMessage.sim1SpnMessage }} -
-
-
-
- - - - {{ simMessage.sim2SpnMessage }} -
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - - - - - - - - - - - - - - - - - -
-
- {{ $t('phone.fastConfigAttention') }} -
-
- - -
-
-
- -
- MEID_IMEI -
- {{ $t('phone.meid') + ':' + secreteCodeMessage.meid }} - - {{ $t('phone.pesn') + ':' + secreteCodeMessage.pesn }} - - {{ $t('phone.imei1') + ':' + secreteCodeMessage.imei1 }} - - {{ $t('phone.imei2') + ':' + secreteCodeMessage.imei2 }} - - {{ $t('phone.sn') + ':' + secreteCodeMessage.sn }} -
- -
-
- -
- {{ $t('phone.callLogMergeRule') }} -
-
- {{ $t('phone.byTime') }} -
-
-
-
-
-
-
-
-
- {{ $t('phone.byContacts') }} -
-
-
-
-
-
-
-
- -
-
- -
-
- {{ - $t('value.callRecords.serviceProvider') }} -
-
-
- {{$t('value.callRecords.simCard')+1}} -
-
-
- {{$t('value.callRecords.simCard')+2}} -
-
-
- -
-
-
- - -
-
- {{ - $t('value.callRecords.voiceMails') }} -
-
-
- {{$t('value.callRecords.noSim')}} -
-
-
- -
-
-
- -
-
- {{ $t('phone.clickPaste') }} - {{ tipData }} -
-
-
diff --git a/entry/src/main/js/default/pages/dialer/dialer.js b/entry/src/main/js/default/pages/dialer/dialer.js deleted file mode 100644 index 741697f..0000000 --- a/entry/src/main/js/default/pages/dialer/dialer.js +++ /dev/null @@ -1,1564 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import callLogService from '../../../default/model/CalllogModel.js'; -import searchContactModel from '../../../default/model/GroupsModel.js'; -import Utils from '../../../default/utils/utils.js'; -import router from '@system.router'; -import pasteboard from '@ohos.pasteboard'; -import LOG from '../../utils/ContactsLog.js'; -import Constants from '../../../default/common/constants/Constants.js'; -import sim from '@ohos.telephony.sim'; -import radio from '@ohos.telephony.radio'; - -const DEFAULT_INT_VALUE = 0; -const NUM_TEXT_FONT_SIZE_MAX = 70; -const NUM_TEXT_PADDING_LEFT_MAX = 364; -const NUM_TEXT_MAXSIZE_LENGTH = 16; -const NUM_TEXT_OFFSET_UNIT = 20; -const NUM_TEXT_MAX_LENGTH = 25; -const NUM_TEXT_SPACE_OFFSET_UNIT = 10; -const DIALER_BUTTON_MARGIN_HIDE = 260; -const DIALER_BUTTON_MARGIN_SHOW = 0; -const DIALER_BUTTON_OPACITY_HIDE = 0.0; -const DIALER_BUTTON_OPACITY_SHOW = 1.0; -const DIALER_MARGIN_BOTTOM_HIDE = -690; -const DIALER_MARGIN_BOTTOM_OPTION_HIDE = -820; -const DIALER_MARGIN_BOTTOM_SHOW = 0; -const DIALER_ANIMATION_DISTANCE_DEFAULT = 690; -const DIALER_ANIMATION_DISTANCE_OPTION = 820; -const LOG_ITEM_ANIMATION_MAX_DISTANCE = 180; -const LOG_ITEM_ANIMATION_INIT_DISTANCE = 0; -const BOTTOM_MENU_HEIGHT = 130; -const VOICE_MAIL_INDEX = 2; -const MISSED_CALLS_INDEX = 1; -const ALL_CALLS_INDEX = 0; -const SECRETE_CODE_1 = '*#06#'; -const SECRETE_CODE_2 = '*#0000#'; -const SECRETE_CODE_3 = '*#*#2846579#*#*'; - -var TAG = ' dialer....: '; - -export default { - props: ['recordList', 'missedList', 'voicemailList', 'batchDelete', 'numTextValue', 'ifShow', 'pasteDisabled', - 'showTips', 'tipData'], - data: { - showDialer: true, - isFirstInit: true, - showVoiceMail: false, - numText: '', - numTextPaddingLeft: DEFAULT_INT_VALUE, - viewText: '', - numTextSize: NUM_TEXT_FONT_SIZE_MAX, - areaInfo: '', - deleteButtonDisabled: true, - dialButtonDisabled: true, - isTouchActive: false, - dialerStyle: 'board-contacts-operate', - boardThumbnailStyle: 'board-thumbnail-button-thumbnail', - hideDialerTimeOutId: '', - showDialerTimeOutId: '', - showDialButton: 'visible', - - bordButtonMarginRight: 260, - bordButtonWidth: 100, - showBoardThumbnail: false, - thumbnailOpacity: 1, - - isHDMode: false, - - isLongPressEvent: false, - - markFlag: false, - - isCallState: false, - - isShowDetailState: false, - - callLogIndex: 0, - - matchedRecordsList: [], - - titleType: 0, - - dialerTouchData: { - touchStartX: 0, - touchStartY: 0, - isTouchMove: false - }, - - isSingleCard: true, - simMessage: { - simCount: 0, - sim1State: 0, - sim2State: 0, - sim1SpnMessage: '', - sim2SpnMessage: '', - voicemailNumberSim1: '', - voicemailNumberSim2: '', - telephoneNumberSim1: '', - telephoneNumberSim2: '', - defaultSimSlot: 0, - }, - - optionMenu: { - copyDisabled: true, - batchDeleteDisabled: true - }, - - - ifShowConfig: { - showAeraInfo: false, - showContactsOperates: false, - - showPhoneTitle: true, - - showNumTextAera: false, - showAttentionInfo: false, - - showCallRecords: false, - - showMatchedList: false, - }, - - - dynamicStyle: { - boardThumbnailButtonClass: 'board-thumbnail-button', - boardThumbnailIconClass: 'board-thumbnail-button-icon', - boardThumbnailBoxClass: 'board-thumbnail-box', - numTextAeraClass: 'num-text-area-num', - - numTextAttention: 'num-text-attention', - }, - - - iconResource: { - ic_contacts_add: '/res/image/ic_contacts_add_m2.svg', - ic_contacts_call_dial: '/res/image/ic_contacts_call_dial_56.svg.svg', - ic_contacts_call_dial_HD: '/res/image/ic_contacts_call HD dial_56.svg.svg', - ic_contacts_delete: '/res/image/ic_contacts_Delete_m.svg', - ic_contacts_name: '/res/image/ic_contacts_name_m.svg', - ic_contacts_voicemail: '/res/image/ic_contacts_voicemail_mini.svg', - ic_contacts_dialer: '/res/image/ic_contacts_dialer.svg', - ic_video_m: '/res/image/ic_video_m.svg', - ic_message: '/res/image/ic_meetime_24x24_message.svg', - ic_more: '/res/image/ic_more_24x24.svg', - ic_contacts_dial_HD_1: '/res/image/ic_contacts_dial call HD_1_m.svg', - ic_contacts_dial_HD_2: '/res/image/ic_contacts_dial call_HD_2_m.svg', - ic_contacts_dial_1: '/res/image/ic_contacts_dial call_1_m.svg', - ic_contacts_dial_2: '/res/image/ic_contacts_dial call_2_m.svg', - ic_detail_public: '/res/image/ic_public_about_m.svg', - }, - - clipboardData: { - showClipboard: false, - number: '', - showClipboardInit: false, - bottomDst: DIALER_ANIMATION_DISTANCE_OPTION, - }, - - pageInfo: { - pageIndex: 0, - pageSize: 20, - pageIndexMissedCalls: 0, - pageSizeMissedCalls: 20, - pageIndexMatchedList: 0, - pageSizeMatchedList: 200, - totalCount: 0, - }, - - matchedMenuData: { - index: '', - itemId: [], - name: '', - number: '', - showMatchedMenuTimeOutId: 0, - }, - - speedDetailsDataKey: 'speedDetailsDataKey', - - routerIndex: -1, - speedIndex: -1, - speedNum: 9, - - speedTempList: [], - speedTempItem: null, - callLogTouchData: { - touchStartX: 0, - touchStartY: 0, - firstLeftDst: 0, - currentIndex: 0, - leftItemIndex: null, - touchEventTaskId: 0, - }, - secreteCodeMessage: { - meid: '', - pesn: '', - imei1: '', - imei2: '', - sn: '', - }, - - callLogMergeRule: '', - pinYinArr: [] - }, - - onInit() { - LOG.info(TAG + 'onInit......'); - this.numText = this.$app.$def.dialerStateData.numTextDialer; - - this.deleteButtonDisabled = true; - - this.initSimCardMessage(); - this.numText = this.$app.$def.dialerStateData.numTextDialer; - - this.$app.$def.globalData.refreshFunctions.push(() => { - LOG.info(TAG + 'onInit' + ' editNumber = '); - if (this.$app.$def.dialerStateData.isEditNumber) { - this.numText = this.$app.$def.dialerStateData.numTextDialer; - this.$app.$def.dialerStateData.isEditNumber = false; - this.$app.$def.dialerStateData.numTextDialer = ''; - } - this.initSimCardMessage(); - this.checkIfShow(); - }); - - this.$app.$def.globalData.navigationBackPressFunctions.push(() => { - LOG.info(TAG + 'onInit' + ' onBackPress Dialer!'); - if (this.numText.length > 0) { - this.numText = ''; - this.checkIfShow(); - return true; - } - return false; - }); - this.isFirstInit = this.$app.$def.globalData.storage.getSync('showAttention', true); - this.checkIfShow(); - }, - onReady() { - LOG.info(TAG + 'onReady......'); - }, - onShow() { - LOG.info(TAG + 'onShow......'); - }, - onHide() { - LOG.info(TAG + 'onHide......'); - }, - onDestroy() { - LOG.info(TAG + 'onDestroy......'); - this.$app.$def.globalData.refreshFunctions.pop(); - this.$app.$def.globalData.navigationBackPressFunctions.pop(); - }, - - onRefreshDialerState() { - LOG.info(TAG + 'onRefreshDialerState' + ' this.onRefreshDialerState: ' + this.onRefreshDialerState); - this.refreshCallLog(); - this.resetItemState(); - this.checkIfShow(); - }, - sendMessage(number, name) { - var params = []; - params.push({ - contactsName: name, - telephone: number, - telephoneFormat: number, - }); - - this.$app.$def.sendMessage(params); - this.$app.$def.dialerStateData.isNeedShowDialer = false; - }, - - changeTitle(e) { - LOG.info(TAG + 'changeTitle' + 'logMessage changeTitle type = '); - this.titleType = e.detail.type; - }, - touchStartDialer(e) { - - this.dialerTouchData.touchStartX = e.touches[0].globalX; - this.dialerTouchData.touchStartY = e.touches[0].globalY; - }, - touchMoveDialer(e) { - - var offsetY = e.touches[0].globalY - this.dialerTouchData.touchStartY; - if ((offsetY > 100) && offsetY > Math.abs(e.touches[0].globalX - this.dialerTouchData.touchStartX) - && !this.dialerTouchData.isTouchMove) { - - this.dialerTouchData.isTouchMove = true; - this.hideDialer(); - } - }, - buttonTouchStart() { - if (!Utils.isEmpty(this.numText)) { - this.vibrateByConfig(); - } - }, - - dialButtonTouchStart() { - - this.iconResource.ic_contacts_call_dial = '/res/image/ic_contacts_call_dial_56_clicked.svg.svg'; - this.iconResource.ic_contacts_call_dial_HD = '/res/image/ic_contacts_call HD dial_56_clicked.svg.svg'; - if (!Utils.isEmpty(this.numText)) { - this.vibrateByConfig(); - } - }, - - dialButtonTouchEnd() { - - this.iconResource.ic_contacts_call_dial = '/res/image/ic_contacts_call_dial_56.svg.svg'; - this.iconResource.ic_contacts_call_dial_HD = '/res/image/ic_contacts_call HD dial_56.svg.svg'; - }, - buttonTouchEnd(keyValue) { - if (Utils.isEmpty(this.numText) && !this.isLongPressEvent) { - this.vibrateByConfig(); - } - if (!this.isLongPressEvent && !this.dialerTouchData.isTouchMove) { - this.appendNumText(keyValue); - this.markFlag = false; - } - this.isLongPressEvent = false; - this.dialerTouchData.isTouchMove = false; - }, - - buttonLongPress(keyValue) { - - this.vibrateByConfig(); - this.isLongPressEvent = true; - switch (keyValue) { - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - - if (Utils.isEmpty(this.numText)) { - this.speedCall(keyValue); - } else { - this.appendNumText(keyValue); - } - break; - - case 0: - this.appendNumText('+') - break; - - case '*': - if (this.numText.length == 0) { - this.appendNumText('*'); - } else { - this.appendNumText(','); - } - this.markFlag = false; - break; - - case '#': - if (this.numText.length == 0) { - this.appendNumText('#'); - this.markFlag = false; - } else if (this.markFlag) { - this.appendNumText('#'); - this.markFlag = false; - } else { - this.appendNumText(';'); - this.markFlag = true; - } - break; - default: - break; - } - }, - appendNumText(keyValue) { - this.numText = this.numText + keyValue; - this.numberPressCheck(); - }, - - comb(arr) { - let temp = [] - for (let i in arr[0]) { - for (let j in arr[1]) { - temp.push(`${arr[0][i]}${arr[1][j]}`) - } - } - arr.splice(0, 2, temp) - if (arr.length > 1) { - this.comb(arr) - } else { - return temp - } - return arr[0]; - }, - - - buttonTouchStartX() { - if (this.numText.length == 0) { - LOG.info(TAG + 'buttonTouchStartX' + 'numText length is empty.'); - } - }, - buttonTouchEndX() { - if (!this.isLongPressEvent) { - this.vibrateByConfig(); - } else { - this.isLongPressEvent = false; - } - if (this.numText.length > 0) { - this.numText = this.numText.trim(); - this.numText = this.numText.substr(0, this.numText.length - 1).trim(); - } - if (this.numText.length >= 6) { - this.showAeraInfo = true; - } else { - this.showAeraInfo = false; - } - this.numberPressCheck(); - }, - clearNumText() { - this.isLongPressEvent = true; - this.vibrateByConfig(); - this.numText = ''; - this.checkIfShow(); - }, - - vibrateByConfig: function () { - if (this.isTouchActive) { - } - }, - numberPressCheck() { - this.ifNeedSpace(); - this.checkIfSecretCode(); - this.checkIfShow(); - }, - ifNeedSpace() { - if (this.numText.length >= 6) { - this.showAeraInfo = true; - } else { - this.showAeraInfo = false; - } - switch (this.numText.length) { - case 3: - if (this.checkNeedNumberSpace(this.numText)) { - this.numText = this.numText + ' '; - } - break; - case 8: - this.numText = this.numText + ' '; - break; - default: - break; - } - }, - checkNeedNumberSpace(numText) { - let isSpace = /[\+;,#\*]/g; - let isRule = /^\+.*/; - if (isSpace.test(numText)) { - if (isRule.test(numText)) { - return true; - } else { - return false; - } - } - return true; - }, - getMatchedList() { - if (!this.numText.startsWith('1') && !this.numText.startsWith('0') - && !this.numText.startsWith('*') && !this.numText.startsWith('#') - && !this.numText.startsWith('+') && !this.numText.startsWith(',') - && !this.numText.startsWith(';')) { - var a = { - 2: 'abc', - 3: 'def', - 4: 'ghi', - 5: 'jkl', - 6: 'mno', - 7: 'pqr', - 8: 'stu', - 9: 'vwxyz' - } - var number = Utils.removeSpace(this.numText); - let code = number.split('').map(ee => a[ee]); - if (code.length == 1) { - this.pinYinArr = code[0].split(''); - } else { - this.pinYinArr = this.comb(code); - } - } - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - var searchText = Utils.removeSpace(this.numText); - var data = { - likeValue: searchText, - pinYinArr: this.pinYinArr - } - searchContactModel.searchContacts(DAHelper, data, result => { - var matchedList = []; - var contactMap = new Map(); - var phoneNumberMap = new Map(); - if (result.code == 0 && !Utils.isEmptyList(result.data)) { - result.data.forEach(contactElement => { - if (!contactMap.has(contactElement.contactId) && !Utils.isEmptyList(contactElement.phoneNumbers)) { - var matchedElement = {}; - matchedElement.phone = contactElement.phoneNumbers[0].phoneNumber; - matchedElement.name = contactElement.emptyNameData; - for (var i = 0; i < contactElement.phoneNumbers.length; i++) { - var number = contactElement.phoneNumbers[i].phoneNumber; - if (Utils.removeSpace(number).indexOf(Utils.removeSpace(this.numText)) > -1) { - matchedElement.phone = number; - try { - matchedElement.formatNumber = number; // await telephony.formatPhoneNumber(number); - } catch { - matchedElement.formatNumber = number; - } - break; - } - - } - matchedElement.callTag = ''; - this.fillMatchedElementProperty(matchedElement); - matchedList.push(matchedElement); - contactMap.set(contactElement.contactId); - phoneNumberMap.set(contactElement.phone); - } - }); - } - if (this.numText.length >= 3) { - this.getMatchedCallLog(matchedList, contactMap, phoneNumberMap); - } else { - this.matchedRecordsList = matchedList; - this.ifShowConfig.showContactsOperates = false; - this.ifShowConfig.showMatchedList = true; - } - this.viewNumberTextProc(); - this.checkMoreMenuState(); - }); - }, - - getMatchedCallLog(matchedList, contactMap, phoneNumberMap) { - this.matchedRecordsList = []; - if (!Utils.isEmpty(this.$app.$def.globalData.callLogTotalData.callLogList)) { - for (var i = 0; i < this.$app.$def.globalData.callLogTotalData.callLogList.length; i++) { - var element = this.$app.$def.globalData.callLogTotalData.callLogList[i]; - if (!Utils.isEmpty(element.contactKey) && contactMap.has(element.contactKey)) { - continue; - } - if (!Utils.isEmpty(element.phone) && phoneNumberMap.has(element.phone)) { - continue; - } - if (Utils.removeSpace(element.phone).indexOf(Utils.removeSpace(this.numText)) > -1) { - this.fillMatchedElementProperty(element); - matchedList.push(element); - phoneNumberMap.set(element.phone); - } - } - } else { - LOG.info(TAG + 'getMatchedCallLog' + 'logMessage callLogList is empty!'); - } - if (matchedList.length > 0) { - setTimeout(() => { - this.matchedRecordsList = matchedList; - this.ifShowConfig.showContactsOperates = false; - this.ifShowConfig.showMatchedList = true; - }, 0); - } else { - if (this.showDialer) { - this.ifShowConfig.showContactsOperates = true; - } - this.ifShowConfig.showMatchedList = false; - } - - }, - - fillMatchedElementProperty(element) { - var matchedString = Utils.getMatchedString(element.formatNumber, this.numText); - if (!Utils.isEmpty(element.formatNumber)) { - var startIndex = element.formatNumber.indexOf(matchedString); - element.firstPart = element.formatNumber.substring(0, startIndex); - element.matchedPart = element.formatNumber.substr(startIndex, matchedString.length); - LOG.info(TAG + 'fillMatchedElementProperty' + 'logMessage element.matchedPart = ' - + ' startIndex = ' + startIndex); - element.endPart = element.formatNumber.substr(startIndex + matchedString.length); - } else { - element.firstPart = element.phone; - element.matchedPart = ''; - element.endPart = ''; - } - }, - - getMatchedRecordList() { - var matchedList = []; - if (!Utils.isEmpty(this.$app.$def.globalData.callLogTotalData.callLogList)) { - this.$app.$def.globalData.callLogTotalData.callLogList.forEach((element) => { - if (Utils.removeSpace(element.phone).indexOf(Utils.removeSpace(this.numText)) > -1) { - this.fillMatchedElementProperty(element) - matchedList.push(element); - } - }); - } else { - LOG.info(TAG + 'getMatchedRecordList' + 'logMessage callLogList is empty! callLogList = '); - } - if (matchedList.length > 0) { - this.matchedRecordsList = matchedList; - this.ifShowConfig.showContactsOperates = false; - this.ifShowConfig.showMatchedList = true; - } else { - if (this.showDialer) { - this.ifShowConfig.showContactsOperates = true; - } - this.ifShowConfig.showMatchedList = false; - } - }, - - hideDialer(e) { - clearTimeout(this.hideDialerTimeOutId); - var delay = 0; - - LOG.info(TAG + 'hideDialer' + 'logMessage showDialer = '); - if (this.$app.$def.dialerStateData.showDialer) { - this.dialerAnimationProc(false); - this.$app.$def.dialerStateData.showDialer = false; - } - if (this.ifShowConfig.showAttentionInfo) { - this.hideDialerTimeOutId = setTimeout(() => { - this.dynamicStyle.numTextAttention = 'num-text-attention-all' - this.$app.$def.dialerStateData.showDialer = false; - }, delay); - } - }, - - boardThunmbnailTouchStart() { - this.dynamicStyle.boardThumbnailButtonClass = 'board-thumbnail-button-onpress'; - this.dynamicStyle.boardThumbnailBoxClass = 'board-thumbnail-box-onpress'; - this.dynamicStyle.boardThumbnailIconClass = 'board-thumbnail-button-icon-onpress'; - - }, - - showNumBoard() { - this.dynamicStyle.boardThumbnailBoxClass = 'board-thumbnail-box'; - this.dynamicStyle.boardThumbnailIconClass = 'board-thumbnail-button-icon'; - this.dialerAnimationProc(true); - this.$app.$def.dialerStateData.showDialer = true; - clearTimeout(this.showDialerTimeOutId); - this.showDialerTimeOutId = setTimeout(() => { - this.dynamicStyle.numTextAttention = 'num-text-attention' - }, 300); - if (this.numText.length > 0) { - this.showContactsOperates = true; - } - }, - - dialerStateShow() { - this.dialerMarginBottom = DIALER_MARGIN_BOTTOM_SHOW; - this.bordButtonMarginRight = DIALER_BUTTON_MARGIN_HIDE; - this.thumbnailOpacity = DIALER_BUTTON_OPACITY_HIDE; - this.showBoardThumbnail = false; - this.showDialer = true; - this.showDialButton = 'visible'; - this.$app.$def.dialerStateData.showDialer = true; - }, - - dialerStateHide() { - this.dialerMarginBottom = this.ifShowConfig.showContactsOperates ? - DIALER_MARGIN_BOTTOM_OPTION_HIDE : DIALER_MARGIN_BOTTOM_HIDE; - this.bordButtonMarginRight = DIALER_BUTTON_MARGIN_SHOW; - this.thumbnailOpacity = DIALER_BUTTON_OPACITY_SHOW; - this.showBoardThumbnail = true; - this.showDialer = false; - this.showDialButton = 'hidden'; - this.$app.$def.dialerStateData.showDialer = false; - }, - - callOutByDialer(simIndex) { - LOG.info(TAG + 'onInit' + 'logMessage this.numText:' + 'this.simIndex:' + simIndex); - this.callOut(this.numText, simIndex); - }, - - callOutByLog(e) { - if (this.isSingleCard) { - this.callOut(e.detail.number, this.simMessage.defaultSimSlot); - } else { - this.editNumberBefore(e.detail.number); - } - }, - - callOutByMatchedList: function (index) { - if (this.isSingleCard) { - this.callOut(this.matchedRecordsList[index].phone); - } else { - this.editNumberBefore(this.matchedRecordsList[index].formatNumber) - } - }, - - singleCardMode() { - this.isSingleCard = true; - }, - - doubleCardMode() { - this.isSingleCard = false; - }, - getNumTextCursorPosition() { - var numTextObj = this.$element('numTextId'); - var cursorPosition = -1; - if (numTextObj.selectionStart) { - cursorPosition = numTextObj.selectionStart; - } - }, - - cancelSchedule(e) { - this.$element('simpledialog').close(); - }, - - showRecordDetailsByMatchedList(index) { - LOG.info(TAG + 'showRecordDetailsByMatchedList' + 'logMessage:index=' + index); - this.$app.$def.dialerStateData.isNeedShowDialer = false; - var newNumberContactDetail = this.matchedRecordsList[index]; - this.showDetails(newNumberContactDetail); - }, - - showRecordDetailsByLog: function (e) { - this.$app.$def.dialerStateData.isNeedShowDialer = false; - var newNumberContactDetail = {}; - if (this.callLogIndex == 2) { - newNumberContactDetail = this.voicemailList[e.detail.logIndex]; - } else if (this.callLogIndex == 1) { - newNumberContactDetail = this.missedList[e.detail.logIndex]; - } else { - newNumberContactDetail = this.recordList[e.detail.logIndex]; - } - this.showDetails(newNumberContactDetail); - }, - - showDetails(newNumberContactDetail) { - LOG.info(TAG + 'showDetails' + ' newNumberContactDetail = ' + newNumberContactDetail); - router.push({ - uri: 'pages/contacts/contactDetail/contactDetail', - params: { - sourceFromCallRecord: true, - isNewNumber: true, - phoneNumberShow: newNumberContactDetail.formatNumber, - newNumberContactDetail: newNumberContactDetail - } - }); - }, - copyObj(obj) { - return JSON.parse(JSON.stringify(obj)); - }, - - getContactDetailByPhoneNum: function (code, phoneNumberShow, newNumberContactDetail) { - var requestData = {}; - requestData.phoneNumber = phoneNumberShow.replace(/\s+/g, ''); - }, - - async getSimCardMessage() { - }, - - getTouchActiveConfig: function () { - }, - getCorrectMessage(simMessage) { - switch (simMessage) { - case 'CHINA MOBILE': - return this.$t('phone.simMsgYiDong'); - case 'CHINA UNICOM': - return this.$t('phone.simMsgLianTong'); - case 'CHINA TELECOM': - return this.$t('phone.simMsgDianXin'); - default: - return simMessage; - } - }, - - copy(data) { - var systemPasteBoard = pasteboard.getSystemPasteboard(); - - var pasteData = pasteboard.createPlainTextData(data); - - systemPasteBoard.setPasteData(pasteData, (error, msg) => { - if (error) { - LOG.error('logMessage Failed to set PasteData. Cause: '); - return; - } - - this.$app.$def.globalData.storage.putSync('clipboardTempKey', data); - LOG.info(TAG + 'systemPasteBoard' + ' PasteData set successfully. data = '); - }); - }, - - paste() { - - var systemPasteBoard = pasteboard.getSystemPasteboard(); - systemPasteBoard.getPasteData((error, pasteData) => { - if (error) { - LOG.error('logMessage Failed to obtain PasteData. Cause: '); - return; - } - var text = pasteData.getPrimaryText(); - LOG.info(TAG + 'paste' + 'logMessage paste text = '); - var numTemp = Utils.getNumberString(text); - this.editNumberBefore(numTemp); - }); - }, - - addContacts(number) { - var phoneNumber = number.replace(/[^0123456789+]*/g, ''); - var show = false; - if (phoneNumber.length > 0) { - show = true; - } - this.$app.$def.dialerStateData.isNeedShowDialer = false; - router.push({ - uri: 'pages/contacts/accountants/accountants', - params: { - phoneNumbers: [ - { - 'labelId': 2, - 'labelName': this.$t('accountants.phone'), - 'phoneNumber': phoneNumber, - 'phoneAddress': 'N', - 'showP': show, - 'blueStyle': true - } - ] - }, - }); - }, - - async formatPhoneNumber(number) { - }, - - callOut(phoneNumber, simIndex) { - this.$app.$def.dialerStateData.isCallState = true; - var dailNumber = ''; - if (phoneNumber.length == 0 && this.recordList.length > 0) { // If no phone number is entered, the first call record is dialed by default - dailNumber = this.recordList[0].phone; - } else if (phoneNumber.length > 0) { - dailNumber = phoneNumber; // Pass in the phone number to format - } - this.$app.$def.call(dailNumber); - this.numText = ''; - this.checkIfShow(); - }, - requestLogByPage() { - this.pageInfo.pageIndex++; - LOG.info(TAG + 'requestLogByPage' + ' onRequestItem index=' + this.pageInfo.pageIndex); - this.$emit('getLogPage', { - pageIndex: this.pageInfo.pageIndex, - logIndex: ALL_CALLS_INDEX - }); - }, - requestMissedCallsByPage() { - this.pageInfo.pageIndexMissedCalls++; - this.$emit('getLogPage', { - pageIndex: this.pageInfo.pageIndexMissedCalls, - logIndex: MISSED_CALLS_INDEX - }); - }, - checkMoreMenuState() { - if (this.recordList.length > 0 && this.callLogIndex == ALL_CALLS_INDEX) { - this.optionMenu.batchDeleteDisabled = false; - } else if (this.missedList.length > 0 && this.callLogIndex == MISSED_CALLS_INDEX) { - this.optionMenu.batchDeleteDisabled = false; - } else if (this.voicemailList.length > 0 && this.callLogIndex == VOICE_MAIL_INDEX) { - this.optionMenu.batchDeleteDisabled = false; - } - else { - this.optionMenu.batchDeleteDisabled = true; - } - }, - - changeCallLogIndex(e) { - this.callLogIndex = e.detail.logIndex; - LOG.info(TAG + 'changeCallLogIndex' + ' changeCallLogIndex this.callLogIndex = ' + this.callLogIndex); - this.resetItemState(); - this.checkMoreMenuState(); - }, - getSimMessage: function (simCardState, simCardMessage) { - if (Utils.isEmpty(simCardMessage)) { // If no carrier information exists, judge - switch (parseInt(simCardState)) { - case 0: - case 1: - return this.$t('phone.notInService'); - case 2: - case 3: - return this.$t('phone.emergencyCall'); - case 4: - case 5: - return this.getCorrectMessage(simCardMessage); - default: - break; - } - } - return this.getCorrectMessage(simCardMessage); - }, - - onMoreMenuSelected(e) { - this.$app.$def.dialerStateData.isNeedShowDialer = false; - switch (parseInt(e.value)) { - case 0: - this.paste(); - break; - case 1: - this.$emit('batchDelete', {}); - var tempList = []; - if (this.callLogIndex == VOICE_MAIL_INDEX) { - tempList = this.$app.$def.globalData.voicemailTotalData.voicemailList; - } else if (this.callLogIndex == MISSED_CALLS_INDEX) { - tempList = this.$app.$def.globalData.callLogTotalData.missedList; - } else { - tempList = this.$app.$def.globalData.callLogTotalData.callLogList; - } - router.push({ - uri: 'pages/dialer/calllogdelete/calllogdelete', - params: { - batchDelete: 1, - logIndex: this.callLogIndex, - callLogList: tempList, - singleCardMode: this.isSingleCard, - } - }); - break; - case 2: - break; - case 3: // Settings (Skip to speed dial Settings page for now) - router.push({ - uri: 'pages/dialer/speeddial/speeddial' - }); - break; - case 4: // Settings (Jump to About page) - router.push({ - uri: 'pages/contacts/settings/about/about', - params: {} - }) - break; - case 5: - router.push({ - uri: 'pages/contacts/batchselectcontacts/batchselectcontacts', - params: { - selectType: 0, - } - }) - break; - case 6: - this.callLogSettings(); - break; - case 7: - router.push({ - uri: 'pages/dialer/greeting/greeting' - }); - break; - case 8: - router.push({ - uri: 'pages/index_demo/index' - }); - break; - default: - break; - } - }, - callLogSettings: function () { - this.getCallLogMergeRule(); - }, - closeCallLogDialog: function () { - this.$element('logSettingDialog').close(); - }, - - checkIfShow() { - if (this.numText.trim().length > 0) { - this.ifShowConfig.showPhoneTitle = false; - this.ifShowConfig.showAttentionInfo = false; - this.ifShowConfig.showNumTextAera = true; - this.ifShowConfig.showCallRecords = false; - this.deleteButtonDisabled = false; - this.dialButtonDisabled = false; - if (this.numText.trim().length < 3) { - if (this.showDialer) { - this.ifShowConfig.showContactsOperates = true; - this.clipboardData.bottomDst = BOTTOM_MENU_HEIGHT + DIALER_ANIMATION_DISTANCE_OPTION; - } - this.ifShowConfig.showMatchedList = false; - if (!this.numText.startsWith('1')) { - this.getMatchedList(); - } - } else { - this.getMatchedList() - } - this.viewNumberTextProc(); - } else { - this.numTextPaddingLeft = DEFAULT_INT_VALUE; - this.numTextSize = NUM_TEXT_FONT_SIZE_MAX; - this.ifShowConfig.showNumTextAera = false; - this.dynamicStyle.numTextAttention = 'num-text-attention'; - this.deleteButtonDisabled = true; - this.ifShowConfig.showPhoneTitle = true; - this.ifShowConfig.showMatchedList = false; - this.ifShowConfig.showContactsOperates = false; - this.clipboardData.bottomDst = BOTTOM_MENU_HEIGHT + DIALER_ANIMATION_DISTANCE_DEFAULT; - if (this.recordList.length > 0) { - this.ifShowConfig.showAttentionInfo = false; - this.ifShowConfig.showCallRecords = true; - this.dialButtonDisabled = false; - if (this.isFirstInit) { - this.isFirstInit = false; - this.$app.$def.globalData.storage.putSync('showAttention', false); - this.$app.$def.globalData.storage.flushSync(); - } - } else if (this.voicemailList.length > 0) { - this.ifShowConfig.showAttentionInfo = false; - this.ifShowConfig.showCallRecords = true; - this.dialButtonDisabled = true; - } else { - this.dialButtonDisabled = true; - if (!this.isFirstInit) { - this.ifShowConfig.showAttentionInfo = false; - this.ifShowConfig.showCallRecords = true; - } else { - this.ifShowConfig.showCallRecords = false; - this.ifShowConfig.showAttentionInfo = true; - } - } - - } - this.checkMoreMenuState(); - }, - checkIfSecretCode: function () { - switch (Utils.removeSpace(this.numText)) { - case SECRETE_CODE_1: - this.numText = ''; - this.secretCode1Proc(); - break; - case SECRETE_CODE_2: - this.numText = ''; - break; - case SECRETE_CODE_3: - this.numText = ''; - break; - default: - break; - } - }, - secretCode1Proc: async function () { - var meIdString = ''; - var pesnString = ''; - var imei1String = ''; - var imei2String = ''; - var snString = ''; - try { - } catch { - LOG.info(TAG + 'secretCode1Proc' + 'logMessage get meid error'); - } - this.secreteCodeMessage.meid = meIdString; - try { - } catch { - LOG.info(TAG + 'secretCode1Proc' + 'logMessage get pesn error'); - } - this.secreteCodeMessage.pesn = pesnString; - try { - imei1String = await radio.getIMEI(0); - } catch { - LOG.info(TAG + 'secretCode1Proc' + 'logMessage get imei1 error'); - } - this.secreteCodeMessage.imei1 = imei1String; - try { - imei2String = await radio.getIMEI(1); - } catch { - LOG.info(TAG + 'secretCode1Proc' + 'logMessage get imei2 error'); - } - this.secreteCodeMessage.imei2 = imei2String; - try { - } catch { - LOG.info(TAG + 'secretCode1Proc' + 'logMessage get sn error'); - } - this.secreteCodeMessage.pesn = pesnString; - this.$element('codeDialog').show(); - }, - closeCodeDialog: function () { - this.$element('codeDialog').close(); - }, - clickOut: function () { - this.$element('codeDialog').focus(); - }, - viewNumberTextProc() { - var numStringNoSpace = Utils.removeSpace(this.numText); - this.viewText = numStringNoSpace.length > NUM_TEXT_MAX_LENGTH ? - numStringNoSpace.substr(numStringNoSpace.length - NUM_TEXT_MAX_LENGTH) : this.numText; - var spaceCount = 0; - if (/[\s]/g.test(this.viewText)) { - spaceCount = this.viewText.match(/[\s]/g).length; - } - if (this.viewText.trim().length > NUM_TEXT_MAXSIZE_LENGTH) { - this.viewText = Utils.removeSpace(this.viewText); - if (this.viewText.trim().length <= NUM_TEXT_MAXSIZE_LENGTH) { - this.numTextPaddingLeft = NUM_TEXT_PADDING_LEFT_MAX - NUM_TEXT_OFFSET_UNIT * this.viewText.trim().length; - } else { - this.numTextSize = NUM_TEXT_FONT_SIZE_MAX * NUM_TEXT_MAXSIZE_LENGTH / (this.viewText.trim().length); - } - } else { - this.numTextPaddingLeft = NUM_TEXT_PADDING_LEFT_MAX - NUM_TEXT_OFFSET_UNIT * this.viewText.trim().length - + spaceCount * NUM_TEXT_SPACE_OFFSET_UNIT; - } - }, - editNumberBeforeByLog(e) { - this.editNumberBefore(e.detail.number); - }, - editNumberBefore(number) { - this.numText = number; - this.showNumBoard() - this.checkIfShow(); - }, - copyNumber(e) { - LOG.info(TAG + 'copyNumber' + 'logMessage copy Number 1'); - var number = ''; - number = e.detail.number.replace(/[^0123456789+;,#*-]*/g, ''); - this.copy(number); - }, - pasteNumber() { - this.paste(); - this.$emit('hideTips', {}); - }, - removeCall(e) { - var tempList = []; - var missedTempList = []; - var voicemailTempList = []; - for (let i = 0; i < this.recordList.length; i++) { - if (this.recordList[i].ids != e.detail.id) { - tempList.push(this.recordList[i]); - } - } - for (let j = 0; j < this.missedList.length; j++) { - if (this.missedList[j].ids != e.detail.id) { - missedTempList.push(this.missedList[j]); - } - } - for (let k = 0; k < this.voicemailList.length; k++) { - if (this.voicemailList[k].ids != e.detail.id) { - voicemailTempList.push(this.voicemailList[k]); - } - } - this.$emit('updateLogList', { - recordList: tempList, - missedList: missedTempList, - voicemailList: voicemailTempList - }); - if (this.callLogIndex == 2) { - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.VOICEMAIL_DB_URI); - callLogService.deleteVoicemailByIds(DAHelper, e.detail.id, () => { - this.refreshVoicemailList(); - }) - } else { - var mergeRule = this.$app.$def.globalData.storage.getSync('call_log_merge_rule', 'from_time'); - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CALLLOG_DB_URI); - if (mergeRule == 'from_contact') { - callLogService.deleteCallLogByNumbersOrContacts(DAHelper, e.detail.phoneNumber, e.detail.contactKey, () => { - this.refreshCallLogData(); - }); - } else { - callLogService.deleteCallLogByIds(DAHelper, e.detail.id, () => { - this.refreshCallLogData(); - }); - } - } - }, - refreshCallLogData() { - var mergeRule = this.$app.$def.globalData.storage.getSync('call_log_merge_rule', 'from_time'); - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CALLLOG_DB_URI); - callLogService.getAllCalls(DAHelper, mergeRule, data => { - this.$app.$def.globalData.callLogTotalData = data; - this.checkIfShow(); - }); - }, - refreshVoicemailList() { - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.VOICEMAIL_DB_URI); - callLogService.getVoicemailList(DAHelper, (voicemailList) => { - this.$app.$def.globalData.voicemailTotalData.voicemailList = voicemailList; - this.$app.$def.globalData.voicemailTotalData.voicemailCount = voicemailList.length; - }); - }, - hideClipBoard(e) { - this.$emit('hideTips', {}); - }, - speedCall: function (keyValue) { - if (keyValue == 1) { - var value = this.$app.$def.globalData.voicemailNumber; - if (value !== '') { - this.$app.$def.call(value); - } else { - if (this.simMessage.simCount == 0) { - this.$element('NotvoicemalDialog').show(); - } else { - var simIndex = 0; - if (this.simMessage.sim2State > 3) { - simIndex = 1; - } - this.goToVoicemailSettings(simIndex); - } - } - } else { - this.speedIndex = keyValue - 1; - var speedItemString = this.$app.$def.globalData.storage.getSync('speedDial' + this.speedIndex, ''); - if (!Utils.isEmpty(speedItemString)) { - this.callOut(JSON.parse(speedItemString).speedNumber); - } else { - this.$element('simpledialog').show(); - } - } - }, - - cancelNotVoicemailDialog: function () { - this.$element('NotvoicemalDialog').close(); - }, - - cancelVoicemailDialog: function () { - this.$element('voicemailDialog').close(); - }, - goToVoicemailSettings(simIndex) { - var voicemailNumber = this.$app.$def.globalData.storage.getSync('voicemailNumber', ''); - if (Utils.isEmpty(voicemailNumber)) { - if (simIndex == 0) { - voicemailNumber = this.simMessage.voicemailNumberSim1; - } else { - voicemailNumber = this.simMessage.voicemailNumberSim2; - } - } - router.push({ - uri: 'pages/dialer/voicemailsettings/voicemailsettings', - params: { - voiceMailNumber: voicemailNumber - } - }); - }, - setSchedule: function () { - if (this.speedIndex > 0) { - this.$element('simpledialog').close(); - router.push({ - uri: 'pages/dialer/speeddial/selectcontact/selectcontact', - params: { - type: 'saveSpeedDial', - speedDialIndex: this.speedIndex, - } - }); - } - }, - showMatchedListMenu(index) { - LOG.info(TAG + 'showMatchedListMenu...: ' + this.matchedRecordsList[index]); - this.matchedMenuData.index = index; - this.matchedMenuData.itemId = this.matchedRecordsList[index].ids; - this.matchedMenuData.name = this.matchedRecordsList[index].name; - this.matchedMenuData.number = this.matchedRecordsList[index].formatNumber; - var tempX = this.dialerTouchData.touchStartX; - var tempY = this.dialerTouchData.touchStartY; - - if (this.dialerTouchData.touchStartX > 360) { - tempX = 360; - } - clearTimeout(this.matchedMenuData.showMatchedMenuTimeOutId); - - this.matchedMenuData.showMatchedMenuTimeOutId = setTimeout(() => { - this.vibrateByConfig(); - this.$element('matchedListMenu').show({ - x: tempX, - y: tempY - }); - }, 100); - LOG.info(TAG + 'showMatchedListMenu' + 'logMessage showMatchedListMenu!'); - }, - saveToContacts(numText) { - this.$app.$def.dialerStateData.isNeedShowDialer = false; - router.push({ - uri: 'pages/contacts/selectContactsList/selectContactsList', - params: { - type: 'saveContacts', - number: numText, - } - }); - }, - onMatchedListSelected(e) { - switch (parseInt(e.value)) { - case 1: - this.addContacts(this.matchedMenuData.number); - break; - case 2: - this.saveToContacts(this.matchedMenuData.number); - break; - case 3: - this.sendMessage(this.matchedMenuData.number, this.matchedMenuData.name); - break; - case 4: - this.editNumberBefore(this.matchedMenuData.number); - break; - case 5: - break; - default: - break; - } - }, - - subStringWithEllipsis(str) { - let len = 7; - let newLength = 0; - let newStr = ''; - let chineseRegex = /[^\x00-\xff]/g; - let singleChar = ''; - let strLength = str.replace(chineseRegex, '**').length; - for (var i = 0; i < strLength; i++) { - singleChar = str.charAt(i).toString(); - if (singleChar.match(chineseRegex) != null) { - newLength += 2; - } else { - newLength++; - } - - if (newLength > len) { - break; - } - newStr += singleChar; - } - newStr += '..' - return newStr; - }, - touchStartMatchedItem: function () { - }, - phoneNumberIndexOf: function (phoneNumbers, phoneNumber) { - var indexOf = -1; - for (var i = 0; i < phoneNumbers.length; i++) { - if (phoneNumber == phoneNumbers[i].phoneNumber) { - indexOf = i; - break; - } - } - return indexOf; - }, - dialerAnimationProc(show) { - if (show) { - setTimeout(() => { - this.showBoardThumbnail = false; - }, 500); - this.dialerStyle = 'dialer-display'; - this.boardThumbnailStyle = 'board-thumbnail-button-hide'; - } else { - this.showBoardThumbnail = true; - this.dialerStyle = 'dialer-hide'; - this.boardThumbnailStyle = 'board-thumbnail-button-display'; - } - }, - touchStartItem(e) { - LOG.info(TAG + 'touchStartItem' + 'logMessage touchStartItem !!!!!'); - this.callLogTouchData.touchStartX = e.detail.positionX; - this.callLogTouchData.touchStartY = e.detail.positionY; - var firstLeftDst = 0; - if (this.callLogIndex == VOICE_MAIL_INDEX) { - firstLeftDst = this.voicemailList[e.detail.index].leftDst; - } else if (this.callLogIndex == MISSED_CALLS_INDEX) { - firstLeftDst = this.missedList[e.detail.index].leftDst; - } else { - firstLeftDst = this.recordList[e.detail.index].leftDst; - } - this.callLogTouchData.firstLeftDst = firstLeftDst; - this.callLogTouchData.currentIndex = e.detail.index; - LOG.info(TAG + 'touchStartItem' + 'logMessage firstLeftDst = '); - if (this.callLogTouchData.leftItemIndex != null && this.callLogTouchData.leftItemIndex - != this.callLogTouchData.currentIndex) { - if (this.callLogIndex == VOICE_MAIL_INDEX) { - this.voicemailList[this.callLogTouchData.leftItemIndex].leftDst = 0; - } else if (this.callLogIndex == MISSED_CALLS_INDEX) { - this.missedList[this.callLogTouchData.leftItemIndex].leftDst = 0; - } else { - this.recordList[this.callLogTouchData.leftItemIndex].leftDst = 0; - } - this.callLogTouchData.leftItemIndex = null; - } - }, - touchMoveItem(e) { - var offsetX = e.detail.positionX - this.callLogTouchData.touchStartX; - var offsetY = e.detail.positionY - this.callLogTouchData.touchStartY; - if (Math.abs(offsetX) > Math.abs(offsetY) && Math.abs(offsetX) < LOG_ITEM_ANIMATION_MAX_DISTANCE) { // 横向偏移大于竖向偏移时,才会触发左滑 - this.setItemMoveState(offsetX); - } - }, - touchEndItem(e) { - var offsetX = e.detail.positionX - this.callLogTouchData.touchStartX; - var offsetY = e.detail.positionY - this.callLogTouchData.touchStartY; - if (Math.abs(offsetX) > Math.abs(offsetY) && Math.abs(offsetX) >= 50) { - this.setItemEndState(offsetX); - } else if (Math.abs(offsetX) > Math.abs(offsetY) && Math.abs(offsetX) < 50) { - if (this.callLogIndex == VOICE_MAIL_INDEX) { - this.voicemailList[this.callLogTouchData.currentIndex].leftDst = this.callLogTouchData.firstLeftDst - } else if (this.callLogIndex == MISSED_CALLS_INDEX) { - this.missedList[this.callLogTouchData.currentIndex].leftDst = this.callLogTouchData.firstLeftDst - } else { - this.recordList[this.callLogTouchData.currentIndex].leftDst = this.callLogTouchData.firstLeftDst; - } - } - }, - setItemMoveState(offsetX) { - if (this.callLogIndex == VOICE_MAIL_INDEX) { - if (offsetX < 0) { - this.voicemailList[this.callLogTouchData.currentIndex].leftDst = - this.callLogTouchData.firstLeftDst == LOG_ITEM_ANIMATION_INIT_DISTANCE ? - offsetX : this.callLogTouchData.firstLeftDst; - } else { - this.voicemailList[this.callLogTouchData.currentIndex].leftDst = - this.callLogTouchData.firstLeftDst == LOG_ITEM_ANIMATION_INIT_DISTANCE ? - 0 : this.callLogTouchData.firstLeftDst + offsetX; - } - } else if (this.callLogIndex == MISSED_CALLS_INDEX) { - if (offsetX < 0) { - this.missedList[this.callLogTouchData.currentIndex].leftDst = - this.callLogTouchData.firstLeftDst == LOG_ITEM_ANIMATION_INIT_DISTANCE ? - offsetX : this.callLogTouchData.firstLeftDst; - } else { - this.missedList[this.callLogTouchData.currentIndex].leftDst = - this.callLogTouchData.firstLeftDst == LOG_ITEM_ANIMATION_INIT_DISTANCE ? - 0 : this.callLogTouchData.firstLeftDst + offsetX; - } - } else if (offsetX < 0) { - this.recordList[this.callLogTouchData.currentIndex].leftDst = - this.callLogTouchData.firstLeftDst == LOG_ITEM_ANIMATION_INIT_DISTANCE ? - offsetX : this.callLogTouchData.firstLeftDst; - } else { - this.recordList[this.callLogTouchData.currentIndex].leftDst = - this.callLogTouchData.firstLeftDst == LOG_ITEM_ANIMATION_INIT_DISTANCE ? - 0 : this.callLogTouchData.firstLeftDst + offsetX; - } - }, - - setItemEndState(offsetX) { - if (offsetX < 0) { - if (this.callLogTouchData.firstLeftDst == LOG_ITEM_ANIMATION_INIT_DISTANCE) { - if (this.callLogIndex == VOICE_MAIL_INDEX) { - this.voicemailList[this.callLogTouchData.currentIndex].leftDst = -LOG_ITEM_ANIMATION_MAX_DISTANCE; - } else if (this.callLogIndex == MISSED_CALLS_INDEX) { - this.missedList[this.callLogTouchData.currentIndex].leftDst = -LOG_ITEM_ANIMATION_MAX_DISTANCE; - } else { - this.recordList[this.callLogTouchData.currentIndex].leftDst = -LOG_ITEM_ANIMATION_MAX_DISTANCE; - } - } - this.callLogTouchData.leftItemIndex = this.callLogTouchData.currentIndex; - this.callLogTouchData.firstLeftDst = LOG_ITEM_ANIMATION_MAX_DISTANCE; - } else { - if (this.callLogTouchData.firstLeftDst != LOG_ITEM_ANIMATION_INIT_DISTANCE) { - if (this.callLogIndex == VOICE_MAIL_INDEX) { - this.voicemailList[this.callLogTouchData.currentIndex].leftDst = LOG_ITEM_ANIMATION_INIT_DISTANCE; - } else if (this.callLogIndex == MISSED_CALLS_INDEX) { - this.missedList[this.callLogTouchData.currentIndex].leftDst = LOG_ITEM_ANIMATION_INIT_DISTANCE; - } else { - this.recordList[this.callLogTouchData.currentIndex].leftDst = LOG_ITEM_ANIMATION_INIT_DISTANCE; - } - } - this.callLogTouchData.leftItemIndex = null; - this.callLogTouchData.firstLeftDst = LOG_ITEM_ANIMATION_INIT_DISTANCE; - } - }, - resetItemState() { - if (this.callLogTouchData.leftItemIndex != null) { - if (this.callLogIndex == VOICE_MAIL_INDEX) { - this.voicemailList[this.callLogTouchData.leftItemIndex].leftDst = LOG_ITEM_ANIMATION_INIT_DISTANCE; - } else if (this.callLogIndex == MISSED_CALLS_INDEX) { - this.missedList[this.callLogTouchData.leftItemIndex].leftDst = LOG_ITEM_ANIMATION_INIT_DISTANCE; - } else { - this.recordList[this.callLogTouchData.leftItemIndex].leftDst = LOG_ITEM_ANIMATION_INIT_DISTANCE - } - this.callLogTouchData.leftItemIndex = null; - this.callLogTouchData.firstLeftDst = LOG_ITEM_ANIMATION_INIT_DISTANCE; - } - }, - deleteSingleLog: function (e) { - LOG.info(TAG + 'deleteSingleLog' + 'logMessage deleteSingleLog e = ' + JSON.stringify(e)) - this.callLogTouchData.leftItemIndex = null; - this.callLogTouchData.firstLeftDst = LOG_ITEM_ANIMATION_INIT_DISTANCE; - this.removeCall(e); - }, - checkMergeRule: function (type) { - this.setCallLogMergeRule(type); - this.pageInfo.pageIndex = 0; - this.$emit('refreshCallLog', {}); - this.closeCallLogDialog(); - }, - setCallLogMergeRule(merge_rule) { - this.callLogMergeRule = merge_rule; - this.$app.$def.globalData.storage.putSync('call_log_merge_rule', merge_rule); - this.$app.$def.globalData.storage.flushSync(); - }, - getCallLogMergeRule() { - var mergeRule = this.$app.$def.globalData.storage.getSync('call_log_merge_rule', 'from_time'); - this.callLogMergeRule = mergeRule; - this.$element('logSettingDialog').show(); - }, - async initSimCardMessage() { - var hasCard1 = false; - try { - hasCard1 = await sim.hasSimCard(0); - } catch { - LOG.info(TAG + 'initSimCardMessage' + 'check sim1 error!'); - } - if (hasCard1) { - try { - this.simMessage.sim1State = await sim.getSimState(0); - var simSpn1 = await radio.getNetworkState(0); - var spnMsg1 = Utils.isEmpty(simSpn1.longOperatorName) ? '' : simSpn1.longOperatorName.toUpperCase(); - if ('CHINA MOBILE' == spnMsg1) { - this.showVoiceMail = true; - } - this.simMessage.sim1SpnMessage = this.getSimMessage(this.simMessage.sim1State, spnMsg1); - this.simMessage.voicemailNumberSim1 = await sim.getVoiceMailNumber(0) - this.simMessage.telephoneNumberSim1 = await sim.getSimTelephoneNumber(0) - } catch { - this.simMessage.sim1State = 0; - this.simMessage.sim1SpnMessage = ''; - this.simMessage.voicemailNumberSim1 = ''; - this.simMessage.telephoneNumberSim1 = ''; - LOG.error('logMessage get sim1 message has error!'); - } - } - var hasCard2 = false - try { - hasCard2 = await sim.hasSimCard(1); - } catch { - LOG.info(TAG + 'initSimCardMessage' + 'check sim2 error!'); - } - if (hasCard2) { - try { - this.simMessage.sim2State = await sim.getSimState(1); - var simSpn2 = await radio.getNetworkState(1); - var spnMsg2 = Utils.isEmpty(simSpn2.longOperatorName) ? '' : simSpn2.longOperatorName.toUpperCase(); - if ('CHINA MOBILE' == spnMsg2) { - this.showVoiceMail = true; - } - this.simMessage.sim2SpnMessage = this.getSimMessage(this.simMessage.sim2State, spnMsg2); - this.simMessage.voicemailNumberSim2 = await sim.getVoiceMailNumber(1); - this.simMessage.telephoneNumberSim2 = await sim.getSimTelephoneNumber(1); - } catch { - this.simMessage.sim2State = 0; - this.simMessage.sim2SpnMessage = ''; - this.simMessage.voicemailNumberSim2 = ''; - this.simMessage.telephoneNumberSim2 = ''; - LOG.error('logMessage get sim2 message has error!!'); - } - } - try { - this.simMessage.defaultSimSlot = await sim.getDefaultVoiceSlotId(); - } catch { - this.simMessage.defaultSimSlot = 0; - LOG.error('get default sim slot error!'); - } - if (hasCard1 && hasCard2) { - this.simMessage.simCount = 2; - this.doubleCardMode(); - } else if (hasCard1 || hasCard2) { - this.simMessage.simCount = 1; - this.singleCardMode(); - } else { - this.simMessage.simCount = 0; - LOG.info(TAG + 'initSimCardMessage' + 'no sim card!'); - } - } - -} diff --git a/entry/src/main/js/default/pages/dialer/dialer.scss b/entry/src/main/js/default/pages/dialer/dialer.scss deleted file mode 100644 index 21edfd7..0000000 --- a/entry/src/main/js/default/pages/dialer/dialer.scss +++ /dev/null @@ -1,858 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -@import '../../base/base_color.scss'; -@import '../../base/base_style.css'; -.container { - position: relative; - flex-direction: column; - justify-content: flex-end; - align-items: center; - width: 100%; - height: 100%; -} -.title-font { - font-size: 50px; - font-weight: 600; -} -.board-space{ - width: 100%; - height:20px; - border-top:1px; - border-top-color: lightgray; -} -.board-space-bottom{ - width: 100%; - height:20px; -} -.board-num { - flex-direction: column; - justify-content: center; - width: 100%; - height: 650px; - bottom: 0px; -} -.board-num-button { - height: 100%; - width: 100%; - position: absolute; -} -.board-numline { - flex-direction: row; - justify-content: space-around; - width: 100%; - height: 125px; - padding-left:30px; - padding-right:30px; -} -.board-numline-last { - flex-direction: row; - justify-content: space-around; - width: 100%; - height: 150px; - padding-left:30px; - padding-right:30px; - padding-bottom: 10px; -} -.board-button { - flex-direction: column; - justify-content: center; - align-items: center; - width: 200px; - height: 100%; -} -.board-button-circle { - width: 120px; - height: 120px; - padding-top: 8px; - padding-bottom: 8px; - flex-direction: column; - justify-content: center; - align-items: center; - border-radius: 60px; -} -.dialer-hide { - flex-direction: column; - justify-content: center; - background-color: $backgroundColorDialer; - animation-name: hideDialer; - animation-delay: 0ms; - animation-duration: 500ms; - animation-fill-mode: forwards; -} -.dialer-hide-init { - flex-direction: column; - justify-content: center; - background-color: $backgroundColorDialer; - animation-name: hideDialer; - animation-delay: 0ms; - animation-duration: 0ms; - animation-fill-mode: forwards; -} -.dialer-display { - flex-direction: column; - justify-content: center; - background-color: $backgroundColorDialer; - animation-name: displayDialer; - animation-delay: 0ms; - animation-duration: 500ms; - animation-fill-mode: forwards; -} -.board-contacts-operate { - flex-direction: column; - justify-content: flex-end; - background-color: $backgroundColorDialer; -} -.board-thumbnail-image { - position: absolute; - height: 120px; - width: 120px; - right: 50px; - bottom: 50px; -} -.board-thumbnail-image-hide { - position: absolute; - height: 120px; - width: 120px; - right: 50px; - bottom: 50px; - display: none; -} -.num-text-area { - position: absolute; - top: 0px; - flex-direction: column; - justify-content: center; - align-items: center; - width: 100%; - height: 20%; - allow-scale: true; -} -.num-text-area-text-input { - height: 60%; - background-color: transparent; -} -.phone-page-title-box{ - position: absolute; - top: 0px; - flex-direction: column; - width: 100%; - height: 15%; -} -.phone-page-title-operation{ - flex-direction: row; - justify-content: flex-end; - align-items: center; - width: 100%; - height: 50%; - padding-right: 20px; -} -.page-title-more-image { - justify-content: center; - align-items: center; - width: 65px; - height: 65px; -} -.page-title-more-image:active { - background-color: $backgroundColorOnClick; -} -.phone-page-title-text{ - flex-direction: row; - align-items: center; - width: 100%; - height: 50%; - padding-left: 30px; -} -.call-records-container { - position: absolute; - flex-direction: column; - justify-content: center; - align-items: center; - width: 100%; - height: 83%; - bottom: 0px; -} -.call-records-container-small-title { - position: absolute; - flex-direction: column; - justify-content: center; - align-items: center; - width: 100%; - height: 91%; - bottom: 0px; -} -.board-attention { - flex-direction: column; - justify-content:center; -} -.num-text-attention { - flex-direction: column; - justify-content: center; - width: 100%; - height: 35%; - position: absolute; - bottom: 650px; -} -.num-text-attention-box { - flex-direction: column; - justify-content: center; - width: 100%; - height: 400px; - allow-scale: true; -} -.num-text-attention-all { - flex-direction: column; - justify-content: center; - align-items: center; - width: 100%; - height: 100%; - position: absolute; - bottom: 0; -} -.num-text-attention-info1 { - text-align: center; - font-size: 30px; - color: gray; - width: 100%; - height: 20%; -} -.num-text-attention-info2 { - text-align: center; - font-size: 25px; - color: gray; - width: 100%; - height: 15%; -} -.num-text-attention-info3 { - text-align: center; - font-size: 40px; - color: gray; - width: 100%; - height: 15%; -} -.num-text-attention-info4 { - text-align: center; - font-size: 25px; - color: gray; - width: 100%; - height: 10%; -} -.num-text-area-num { - text-align: center; - font-size: 70px; - height: 60%; - width: 20%; - background-color: transparent; -} - -.board-button:disabled { - opacity:.5; -} -.board-button div:active { - background-color: $backgroundColorOnClick; -} - -.board-button-two-card-side { - justify-content: center; - align-items: center; - height: 100%; - width: 144; -} -.board-button-two-card-side:disabled{ - opacity:.4; -} -.board-button-two-card-middle-left { - justify-content: flex-start; - align-items: center; - height: 100%; - width: 216px; -} -.board-button-two-card-middle-right { - justify-content: flex-end; - align-items: center; - height: 100%; - width: 216px; -} -.board-button-two-card-middle-left:disabled{ - opacity:.4; -} -.board-button-two-card-middle-right:disabled{ - opacity:.4; -} -.board-button-middle-box { - justify-content: center; - align-items: center; - height: 80px; - width: 190px; - background-color: $baseColorGreen; - border-radius: 40px; - opacity: 1; - padding-right:10px; -} -.board-button-middle-box:active { - background-color: $baseColorGreenClicked; -} -.card-message-text { - font-size: 22px; - text-align: center; - width: 100px; - color: white; -} -.board-button-square { - width: 100px; - height: 100px; - border-radius: 10px; - justify-content: center; - align-items: center; -} -.board-button-square:active { - background-color: $backgroundColorOnClick; -} - -.board-button-square-onpress2 { - width: 80px; - height: 80px; - border-radius: 8px; - justify-content: center; - align-items: center; - background-color: $backgroundColorOnClick; -} -.board-button-num-text { - width: 100%; - height: 60%; - font-size: 50px; - font-weight: 600; - text-align: center; - padding-top: 10px; -} -.board-button-letter-text { - width: 100%; - color: gray; - height: 40px; - font-size: 22px; - text-align: center; -} -.board-button-voice-image { - width: 35px; - height: 35px; - opacity: .4; -} -.contacts-operate { - height: 130px; - width: 100%; - justify-content: center; - border-top:1px; - border-top-color: lightgray; -} -.contacts-operate-box { - flex-direction: column; - justify-content: center; - align-items: center; - border-radius: 10px; - height: 100%; -} -.contacts-operate-box:active { - background-color: $backgroundColorOnClick; -} -.text-area { - height: 10%; - width: 100%; - align-items: center; -} -.board-image { - height: 50px; - width: 50px; -} -.delete-button-normal { - height: 50px; - width: 50px; - opacity: 1; -} -.dial-button-normal { - height:120px; - width:120px; -} -.delete-button-disabled { - height: 50px; - width: 50px; - opacity: .5; -} -.delete-button-normal-two-card { - height: 50px; - width: 50px; - opacity: 1; -} -.delete-button-disabled-two-card { - height: 50px; - width: 50px; - opacity: .5; -} -.contacts-image { - height: 55px; - width: 55px; -} -.contacts-text { - width: 100%; - height: 40px; - font-size: 20px; - text-align: center; -} -.image-boardicon { - width: 15%; - height: 10%; -} - -.board-thumbnail-button { - position: absolute; - background-color: $baseColorGreen; - height: 0px; - width: 0px; - border-radius: 50px; - right: 50px; - bottom: 50px; - justify-content: center; - align-items: center; -} -.board-thumbnail-button-hide { - position: absolute; - background-color: $baseColorGreen; - height: 100px; - width: 100px; - border-radius: 50px; - right: 50px; - bottom: 50px; - justify-content: center; - align-items: center; - animation-name: hideDialerButton; - animation-delay: 0ms; - animation-duration: 500ms; - animation-fill-mode: forwards; -} -.board-thumbnail-button-display { - position: absolute; - background-color: $baseColorGreen; - height: 100px; - width: 100px; - border-radius: 50px; - right: 50px; - bottom: 50px; - justify-content: center; - align-items: center; - animation-name: displayDialerButton; - animation-delay: 0ms; - animation-duration: 500ms; - animation-fill-mode: forwards; -} -.board-thumbnail-button-thumbnail { - position: absolute; - background-color: $baseColorGreen; - height: 100px; - width: 100px; - border-radius: 50px; - right: 50px; - bottom: 50px; - justify-content: center; - box-shadow:-5px 5px 10px lightgray; - align-items: center; -} -.board-thumbnail-button-onpress { - position: absolute; - background-color: $baseColorGreen; - height: 95px; - width: 95px; - border-radius: 52.5px; - right: 52.5px; - bottom: 52.5px; - justify-content: center; - align-items: center; -} -.board-thumbnail-box { - flex-direction: column; - height: 40px; - width: 30px; - justify-content: center; - align-items: center; -} -.board-thumbnail-box-onpress { - flex-direction: column; - height: 50px; - width: 40px; - justify-content: center; - align-items: center; -} -.board-thumbnail-line { - height: 25%; - width: 100%; - justify-content: space-around; - align-items: center; -} -.board-thumbnail-button-icon { - height: 8px; - width: 8px; - border-radius: 4px; - background-color: white; -} -.board-thumbnail-button-icon-onpress { - height: 10px; - width: 10px; - border-radius: 5px; - background-color: white; -} - -.dialog-main { - width: 92%; - height: 16%; - justify-content: center; - align-items: center; -} - -.dialog-secret-code { - width: 92%; - justify-content: center; - align-items: center; -} -.dialog-secret-code-content { - flex-direction: column; - justify-content: space-around; - align-items: center; -} -.dialog-secret-code-title-text { - width: 100%; - margin-top: 30px; - margin-right: 40px; - margin-left: 40px; - font-weight: 600; - font-size: 40px; -} -.dialog-secret-code-content-text { - width: 100%; - margin-right: 40px; - margin-left: 40px; - margin-top: 40px; - margin-bottom: 25px; - flex-direction: column; - align-items: flex-start; -} -.call-log-config-content-text { - width: 100%; - height:200px; - margin-right: 40px; - margin-left: 40px; - margin-top: 40px; - margin-bottom: 25px; - flex-direction: column; - justify-content: space-around; - align-items: flex-start; -} -.call-log-config-content { - height: 100px; - align-items:center; - border-radius:10px; -} -.call-log-config-content:active { - background-color: #F2F2F2; -} -.call-log-setting-text { - font-size: 30px; - width: 90%; -} -.call-log-setting-div { - height: 40px; - width: 40px; - border-radius: 20px; - flex-shrink:0; - background-color: #175cfe; - justify-content:center; - align-items:center; - margin-right: 20px; - margin-bottom: 5px; -} -.call-log-setting-inner-div { - height: 30px; - width: 30px; - border-radius: 15px; - flex-shrink:0; - background-color: white; -} -.call-log-setting-div-checked { - height: 40px; - width: 40px; - border-radius: 20px; - flex-shrink:0; - background-color: blue; - justify-content:center; - align-items:center; - margin-right: 20px; - margin-bottom: 5px; -} -.call-log-setting-inner-div-checked { - height: 24px; - width: 24px; - border-radius: 12px; - flex-shrink:0; - background-color: white; -} -.dialog-secret-code-button { - background-color: transparent; - width: 90%; - height: 80px; - text-color: #175cfe; - font-size: 30px; - margin-bottom:40px; -} -.dialog-div { - height: 80%; - width:86%; - flex-direction: column; - align-items: center; - justify-content: center; -} -.inner-txt { - height: 50%; - width: 100%; - flex-direction: column; - align-items: center; - justify-content: space-around; -} -.txt { - font-size: 30px; -} -.inner-btn { - width: 100%; - height: 50%; - justify-content: space-around; - align-items: center; -} -.btn-txt { - width: 40%; - height: 70%; - border-radius: 30px; - background-color: transparent; - text-color: #175cfe; - font-size: 30px; -} - -.matched-call-records-list { - flex-direction: column; - columns: 1; - align-items: center; - height: 80%; - width: 100%; - position: absolute; - bottom: 0px; -} -.matched-item-driver { - width: 100%; - margin-right: 50px; - margin-left: 50px; - height: 1px; - border-bottom: 1px; - border-color: lightgray; -} -.call-log-setting-divider { - width: 100%; - height: 1px; - border-bottom: 1px; - border-color: lightgray; -} -.matched-list-item { - flex-direction: column; - justify-content: center; - align-items: center; - width: 100%; - height: 130px; -} -.matched-list-item-left { - flex-direction: column; - justify-content: center; - align-items: flex-start; - height: 100%; - width: 80%; - padding-left: 50px; -} -.matched-list-item-right { - flex-direction: column; - justify-content: center; - align-items: center; - height: 100%; - width: 20%; -} -.matched-list-item-right-image { - justify-content: center; - align-items: center; - width: 90px; - height: 90px; - border-radius: 10px; -} -.matched-list-item-right-image:active { - background-color: lightgray; -} -.matched-item-right-image-icon { - height: 50px; - width: 50px; -} -.matched-item-left-top-text { - align-items:center; - height: 36%; - width: 100%; -} -.matched-item-main-text { - font-size: 30px; - font-weight: bold; - max-lines: 1; - text-overflow: ellipsis; -} -.matched-item-left-top-text-red { - align-items:center; - height: 36%; - width: 100%; -} -.matched-item-main-text-red { - font-size: 30px; - font-weight: bold; - max-lines: 1; - color:red; - text-overflow: ellipsis; -} -.matched-item-left-bottom-text { - align-items:center; - height: 36%; - width: 100%; -} -.matched-item-bottom-text { - font-size: 28px; - color: gray; -} - -.dialog-main-voicemail { - width: 90%; - align-items: center; -} -.dialog-div-voicemail { - flex-direction: column; - align-items: center; - border-style: dotted; - border-radius:50px; -} -.inner-txt-voicemail { - width: 400px; - height: 160px; - flex-direction: column; - align-items: flex-start; - justify-content: space-around; - margin-right: 150px; -} -.txt-voicemail { - font-size: 30px; -} -.content-edit-voicemail { - width: 100%; - flex-direction: column; - justify-content: flex-start; - align-items: center; -} -.content-item-voicemail { - width: 85%; - align-items: center; - height:100px; - border-radius: 10px; -} -.content-item-voicemail:active { - background-color: lightgray; -} -.content-provider-voicemail{ - width: 100%; -} -.inner-btn-voicemail { - width: 90%; - height: 120px; - justify-content: space-around; - align-items: center; -} -.btn-txt-voicemail { - width: 80%; - height: 70%; - border-radius: 30px; - background-color: transparent; - text-color: #175cfe; - font-size: 30px; -} -.dialog-voicemail-card-divider{ - width: 100%; - margin-right: 40px; - margin-left: 40px; - height: 1px; - border-bottom: 1px; - border-color: lightgray; -} - - -.clip-board { - position:fixed; - width: 100%; - justify-content:center; - align-items:center; -} -.clipboard-content { - height:100px; - min-width:240px; - background-color: #d4e7fa; - flex-direction:column; - justify-content:center; - align-items:center; - border-radius:10px; -} -.clipboard-content-text { - color: dodgerblue; - max-lines: 1; - text-overflow: ellipsis; - max-width: 680px; -} -@keyframes hideDialer { - from{ - background-color: $backgroundColorDialer; - transform: translateY(0%); - } - to{ - background-color: $backgroundColorDialer; - transform: translateY(100%); - } -} - -@keyframes displayDialer { - from{ - background-color: $backgroundColorDialer; - transform: translateY(100%); - } - to{ - background-color: $backgroundColorDialer; - transform: translateY(0%); - } -} -@keyframes hideDialerButton { - from{ - transform: translateX(250px); - } - to{ - transform: translateX(0px); - } -} -@keyframes displayDialerButton { - from{ - transform: translateX(0px); - } - to{ - transform: translateX(250px); - } -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/dialer/greeting/delete/delete.css b/entry/src/main/js/default/pages/dialer/greeting/delete/delete.css deleted file mode 100644 index 40bae1e..0000000 --- a/entry/src/main/js/default/pages/dialer/greeting/delete/delete.css +++ /dev/null @@ -1,208 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - flex-direction: column; - justify-content: flex-start; - align-items: center; - background-color: #FFF; - width: 100%; - height: 100%; -} - -.page-title-div { - flex-direction: row; - align-items: center; - justify-content: space-between; - margin-left: 15px; - margin-top: 10px; - position: relative; - width: 100%; -} - -.greeting-title-div { - flex-direction: row; - align-items: center; - justify-content: flex-start; - position: relative; -} - -.greeting-back-but-div { - width: 93px; - height: 93px; - border-radius: 15px; - align-items: center; -} - -.greeting-back-but-div:active { - background-color: #f3f3f3; -} - - -.greeting-back-image { - margin-left: 21px; - width: 50px; - height: 50px; - border-radius: 10px; -} - -.greeting-title-text { - align-items: center; - justify-content: center; - margin-left: 15px; - font-size: 40px; - font-weight: 500; -} - -.greeting-save-but-div { - align-items: center; - justify-content: center; - right: 20px; - width: 93px; - height: 93px; - border-radius: 15px; -} - -.greeting-save-but-div:active { - background-color: #f3f3f3; -} - - -.greeting-save-image { - width: 45px; - height: 45px; - border-radius: 10px; -} - -.greeting-default-list { - margin-top: 14px; - height: 85%; - width: 100%; -} - - -.greeting-default-item { - position: relative; - flex-direction: column; - align-items: center; - justify-content: space-between; - height: 90px; - width: 100%; - padding-left: 40px; -} - -.greeting-default-item:active { - background-color: #e4e4e4; -} - - -.greeting-default-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: space-between; - width: 100%; - height: 90px; -} - -.greeting-default-zero-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: space-between; - width: 100%; - height: 90px; - color: #a9a9a9; -} - - -.greeting-parent-div { - position: relative; - flex-direction: column; - align-items: flex-start; - justify-content: center; - width: 500px; -} - -.greeting-default-text { - font-size: 31px; - font-weight: 500; -} - -.greeting-default-check { - right: 25px; -} - -.divider { - line-cap: round; - stroke-width: 1px; - color: #ccc; - width: 93%; - margin-left: -25px; -} - -.batch-operation-div { - width: 100%; - height: 7%; - justify-content: center; -} - -.batch-add-operation-button { - width: 30%; - height: 100%; - border-radius: 15px; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.batch-add-operation-button:active { - background-color: #d3d3d3; -} - -.batch-add-image-icon { - width: 50px; - height: 50px; -} - -.batch-add-text { - margin-top: 5px; - font-size: 21px; - font-weight: 500; -} - - -.batch-delete-operation-button { - width: 30%; - height: 100%; - border-radius: 15px; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.batch-delete-operation-button:active { - background-color: #d3d3d3; -} - -.batch-delete-image-icon { - width: 50px; - height: 50px; -} - -.batch-delete-text { - margin-top: 5px; - font-size: 21px; - font-weight: 500; -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/dialer/greeting/delete/delete.hml b/entry/src/main/js/default/pages/dialer/greeting/delete/delete.hml deleted file mode 100644 index 3dccda6..0000000 --- a/entry/src/main/js/default/pages/dialer/greeting/delete/delete.hml +++ /dev/null @@ -1,60 +0,0 @@ - -
-
-
-
- -
- - {{ greetingTitle }} - -
-
- - -
-
- {{ - $idx == 0 ? $t('value.callRecords.greeting.default') : $item.name }} -
-
- -
-
- -
-
-
-
- - {{ $t('value.callRecords.greeting.delete') }} - -
-
- - {{ $t('value.contacts.groupsPage.selectAll') }} - -
-
- - {{ $t('value.contacts.groupsPage.cancelSelectAll') }} - -
-
-
\ No newline at end of file diff --git a/entry/src/main/js/default/pages/dialer/greeting/delete/delete.js b/entry/src/main/js/default/pages/dialer/greeting/delete/delete.js deleted file mode 100644 index 26a9701..0000000 --- a/entry/src/main/js/default/pages/dialer/greeting/delete/delete.js +++ /dev/null @@ -1,140 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import LOG from '../../../../utils/ContactsLog.js'; -import Constants from '../../../../common/constants/Constants.js'; -import greetingService from '../../../../../default/model/GreetingModel.js'; -import prompt from '@system.prompt'; - -var TAG = 'delete'; - -export default { - data: { - props: ['defaultGreetingList'], - greetingList: [], - isSelectAll: false, - deleteDisabled: true, - checkedCount: 0, - language: 'zh', - greetingTitle: '', - }, - - onInit() { - this.greetingList = this.defaultGreetingList; - this.refreshPageTabs(); - }, - - onCheckedChange: function (index) { - this.greetingList[index].checked = !this.greetingList[index].checked; - this.greetingList[index].checked == true ? this.checkedCount++ : this.checkedCount--; - this.refreshPageTabs(); - }, - - back: function () { - this.$emit('eventType', { - isDelete: true, - greetingList: this.greetingList - }); - }, - - clickCheckedAll: function () { - if (!this.isSelectAll) { - this.selectAll(); - } else { - this.unSelectAll(); - } - this.refreshPageTabs(); - }, - - selectAll: function () { - this.checkedCount = 0; //Clear the selected count and increase it again - this.greetingList.forEach((element, index) => { - if (index == 0) { - return; - } - element.checked = true; - this.checkedCount++; - }); - }, - - unSelectAll: function () { - this.greetingList.forEach((element, index) => { - if (index == 0) { - return; - } - element.checked = false; - if (this.checkedCount > 0) { - this.checkedCount--; - } - }); - }, - - refreshPageTabs: function () { - if (this.checkedCount > 0) { - switch (this.language) { - case 'zh': - this.greetingTitle = this.$t('value.contacts.managePage.recentlyPage.select') + this.checkedCount + this.$t('value.contacts.managePage.recentlyPage.count'); - break; - case 'en': - this.greetingTitle = this.checkedCount + this.$tc('value.contacts.managePage.recentlyPage.titleMessageSelect', this.checkedCount); - break; - default: - this.greetingTitle = ''; - break; - } - this.deleteDisabled = false; - this.isSelectAll = this.checkedCount == this.greetingList.length - 1 ? true : false; - } else { - this.checkedCount = 0; - this.greetingTitle = this.$t('value.contacts.managePage.recentlyPage.noSelect'); - this.deleteDisabled = true; - this.isSelectAll = false; - } - }, - deleteGreeting: function () { - var uncheckedList = []; - var checkedIds = []; - this.greetingList.forEach((element, index) => { - if (index == 0) { - element.radio = true; - uncheckedList.push(element); - return; - } - LOG.info(TAG + 'deleteGreeting---------'); - if (element.checked) { - checkedIds.push(element.id); - } else { - uncheckedList.push(element); - } - }); - var data = { - ids: checkedIds - } - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.VOICEMAIL_DB_URI); - greetingService.deleteGreeting(DAHelper, data, result => { - if (result == 0) { - this.greetingList = uncheckedList; - this.greetingId = setTimeout(() => { - this.$app.$def.globalData.storage.putSync('phone_setting_greeting_data', JSON.stringify(this.greetingList)); - this.$app.$def.globalData.storage.flushSync(); - }, 0); - this.back(); - } else { - prompt.showToast({ - message: 'Failed to delete greeting data.' - }); - } - }); - } -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/dialer/greeting/greeting.css b/entry/src/main/js/default/pages/dialer/greeting/greeting.css deleted file mode 100644 index a8e6052..0000000 --- a/entry/src/main/js/default/pages/dialer/greeting/greeting.css +++ /dev/null @@ -1,263 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - flex-direction: column; - justify-content: flex-start; - align-items: center; - background-color: #FFF; - width: 100%; - height: 100%; -} - -.page-title-div { - flex-direction: row; - align-items: center; - justify-content: space-between; - margin-left: 15px; - margin-top: 10px; - position: relative; - width: 100%; -} - -.greeting-title-div { - flex-direction: row; - align-items: center; - justify-content: flex-start; - position: relative; -} - -.greeting-back-but-div { - width: 93px; - height: 93px; - border-radius: 15px; - align-items: center; -} - -.greeting-back-but-div:active { - background-color: #f3f3f3; -} - - -.greeting-back-image { - margin-left: 21px; - width: 50px; - height: 50px; - border-radius: 10px; -} - -.greeting-title-text { - align-items: center; - justify-content: center; - margin-left: 15px; - font-size: 40px; - font-weight: 500; -} - -.greeting-save-but-div { - align-items: center; - justify-content: center; - right: 15px; - width: 93px; - height: 93px; - border-radius: 15px; -} - -.greeting-save-but-div:active { - background-color: #f3f3f3; -} - - -.greeting-save-image { - width: 45px; - height: 45px; - border-radius: 10px; -} - -.greeting-default-list { - margin-top: 14px; - width: 100%; -} - - -.greeting-default-item { - position: relative; - flex-direction: column; - align-items: center; - justify-content: space-between; - height: 90px; - width: 100%; - padding-left: 40px; -} - -.greeting-default-item:active { - background-color: #e4e4e4; -} - - -.greeting-default-div { - position: relative; - flex-direction: row; - align-items: center; - justify-content: space-between; - width: 100%; - height: 90px; -} - - -.greeting-parent-div { - position: relative; - flex-direction: column; - align-items: flex-start; - justify-content: center; - width: 500px; -} - -.greeting-default-text { - font-size: 31px; - font-weight: 500; -} - -.greeting-default-radio { - right: 25px; -} - -.divider { - line-cap: round; - stroke-width: 1px; - color: #ccc; - width: 93%; - margin-left: -25px; -} - -.batch-operation-div { - width: 100%; - height: 7%; - justify-content: center; -} - -.batch-add-operation-button { - width: 30%; - height: 100%; - border-radius: 15px; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.batch-add-operation-button:active { - background-color: #d3d3d3; -} - -.batch-add-image-icon { - width: 50px; - height: 50px; -} - -.batch-add-text { - margin-top: 5px; - font-size: 21px; - font-weight: 500; -} - -.batch-add-text:disabled { - color: #a9a9a9; -} - - -.batch-delete-operation-button { - width: 30%; - height: 100%; - border-radius: 15px; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.batch-delete-operation-button:active { - background-color: #d3d3d3; -} - -.batch-delete-image-icon { - width: 50px; - height: 50px; -} - -.batch-delete-text { - margin-top: 5px; - font-size: 21px; - font-weight: 500; -} - - -.dialog-main { - width: 90%; - align-items: center; -} - -.dialog-div { - flex-direction: column; - align-items: center; - border-style: dotted; - border-radius: 50px; -} - -.inner-txt { - width: 400px; - height: 160px; - flex-direction: column; - align-items: flex-start; - justify-content: space-around; - margin-right: 150px; -} - -.txt { - font-size: 30px; -} - -.min-progress { - width: 360px; - height: 50px; - secondary-color: transparent -} - -.inner-btn { - width: 90%; - height: 120px; - justify-content: space-around; - align-items: center; -} - -.btn-txt { - width: 40%; - height: 70%; - border-radius: 30px; - background-color: transparent; - text-color: #175cfe; - font-size: 30px; -} - -.dialog-input-active { - width: 85%; - border-left: -20px; - background-color: transparent; - border-bottom: 1px solid #4e4e4e; -} - -.dialog-input { - border-left: -20px; - width: 85%; - background-color: transparent; - border-bottom: 1px solid #d3d3d3; -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/dialer/greeting/greeting.hml b/entry/src/main/js/default/pages/dialer/greeting/greeting.hml deleted file mode 100644 index fc51bdc..0000000 --- a/entry/src/main/js/default/pages/dialer/greeting/greeting.hml +++ /dev/null @@ -1,107 +0,0 @@ - - -
- -
-
-
- -
- - {{ $t('value.callRecords.greeting.title') }} - -
-
- -
-
- - -
-
- {{ - $idx == 0 ? $t('value.callRecords.greeting.default') : $item.name }} -
-
- -
-
- -
-
- -
-
- - {{ $t('value.callRecords.greeting.new') }} - -
-
- - {{ $t('value.callRecords.greeting.delete') }} - -
-
- -
-
- {{ $t('value.callRecords.greeting.new')}} -
-
- {{ progressStart }} - - 00:15 -
- -
- - | - - -
-
-
- -
-
- {{ $t('value.callRecords.greeting.new')}} -
- -
- - | - -
-
-
-
- - - -
\ No newline at end of file diff --git a/entry/src/main/js/default/pages/dialer/greeting/greeting.js b/entry/src/main/js/default/pages/dialer/greeting/greeting.js deleted file mode 100644 index e50c9bd..0000000 --- a/entry/src/main/js/default/pages/dialer/greeting/greeting.js +++ /dev/null @@ -1,239 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import router from '@system.router'; -import prompt from '@system.prompt'; -import featureAbility from '@ohos.ability.featureAbility'; -import LOG from '../../../utils/ContactsLog.js'; -import Constants from '../../../common/constants/Constants.js'; -import greetingService from '../../../../default/model/GreetingModel.js'; - -var TAG = 'greeting'; - -export default { - data: { - greetingList: [], - isDelete: true, - progressStart: '00:00', - progressNum: 0, - showStartRecordBtn: true, - timeOutId: '', - greetingName: '', - randomId: '', - greetingId: '', - isMaxGreeting: false, - }, - - onShow() { - var requestData = { - page: 0, - limit: 20000, - }; - this.initGreeting(22004, requestData); - }, - - onDestroy() { - }, - onRadioChange: function (index) { - this.greetingList.forEach(element => { - element.radio = false; - }); - this.greetingList[index].radio = true; - }, - deleteGreeting: function () { - this.isDelete = false; - }, - closeAddGreetingDialog() { - this.$element('addGreetingDialog').close(); - clearInterval(this.timeOutId); - this.progressStart = '00:00'; - this.progressNum = 0; - this.showStartRecordBtn = true; - }, - startRecord() { - this.showStartRecordBtn = false; - this.progressNum = 0; - this.progressStart = '00:00'; - var index = 0; - this.timeOutId = setInterval(() => { - index++; - if (index < 10) { - this.progressStart = '00:0' + index; - } else { - this.progressStart = '00:' + index; - } - - //The maximum time is 15 seconds, and the progress bar is calculated according to the current time - this.progressNum = index / 15 * 100; - if (index > 14) { - clearInterval(this.timeOutId); - this.$element('addGreetingDialog').close(); - this.$element('confirmAddGreeting').show(); - } - }, 1000); - }, - addGreetingDialog: function () { - this.showStartRecordBtn = false; - this.progressNum = 0; - this.progressStart = '00:00'; - clearInterval(this.timeOutId); - this.$element('addGreetingDialog').close(); - this.$element('confirmAddGreeting').show(); - }, - cancelAddGreeting() { - this.$element('confirmAddGreeting').close(); - this.progressStart = '00:00'; - this.progressNum = 0; - this.showStartRecordBtn = true; - }, - - groupNameChanged: function (e) { - this.greetingName = e.value; - }, - - async saveGreetingFile() { - this.$element('confirmAddGreeting').close(); - let context = featureAbility.getContext(); - let path = await context.getFilesDir(); - var voiceMailUri = path + '/audioRecord.mp4'; - var data = { - 'name': this.greetingName, - 'voiceMailUri': voiceMailUri - }; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.VOICEMAIL_DB_URI); - greetingService.insertGreeting(DAHelper, data, resultId => { - if (resultId > 0) { - var addList = [{ - id: resultId.toString(), - name: this.greetingName, - radio: false, - checked: false - }]; - this.greetingList = this.greetingList.concat(addList); - if (this.greetingList.length == 11) { - this.isMaxGreeting = true; - } - clearTimeout(this.greetingId); - this.greetingId = setTimeout(() => { - this.$app.$def.globalData.storage.putSync('phone_setting_greeting_data', JSON.stringify(this.greetingList)); - this.$app.$def.globalData.storage.flushSync(); - }, 0); - } else { - prompt.showToast({ - message: 'Failed to insert greeting data.' - }); - } - }); - }, - sleep: function (milliSeconds) { - var startTime = new Date().getTime(); - while (new Date().getTime() < startTime + milliSeconds) { - LOG.info(TAG + 'sleep wait...'); - } - }, - - back: function () { - router.back(); - }, - saveGreeting: function () { - var checkedId = ''; - var uncheckedIds = []; - LOG.info(TAG + 'saveGreeting result is ---------' + this.greetingLis); - this.greetingList.forEach(element => { - if (element.checked) { - checkedId = element.id; - } else { - uncheckedIds.push(element.id); - } - }); - clearTimeout(this.greetingId); - this.greetingId = setTimeout(() => { - this.$app.$def.globalData.storage.putSync('phone_setting_greeting_data', JSON.stringify(this.greetingList)); - this.$app.$def.globalData.storage.flushSync(); - }, 0); - var data = { - 'checkedId': checkedId, - 'uncheckedIds': uncheckedIds - } - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.VOICEMAIL_DB_URI); - greetingService.saveCheckedGreeting(DAHelper, data, result => { - if (result == 0) { - router.back(); - } else { - prompt.showToast({ - message: 'Failed to update checked greeting data.' - }); - } - }); - }, - - - changePage: function (e) { - this.isDelete = e.detail.isDelete; - this.greetingList = e.detail.greetingList; - this.isMaxGreeting = this.greetingList.length < 11 ? false : true; - }, - clickAddGreeting: function () { - this.showStartRecordBtn = true; - this.$element('addGreetingDialog').show(); - }, - /** - * Get response list data - * - * @param code 2005 FA and PA access protocol code - * @param data contactId The contact ID - */ - initGreeting: function (code, data) { - var defaultList = [{ - id: '-1', - name: '', - radio: true, - checked: false - }]; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.VOICEMAIL_DB_URI); - greetingService.queryGreeting(DAHelper, data, result => { - if (result.code == 0) { - this.greetingList = defaultList.concat(result.greetingList); - this.initGreetingConfig(); - } else { - prompt.showToast({ - message: 'Failed to init greeting data.' - }); - } - }); - - }, - - initGreetingConfig: function () { - var defaultData = [{ - id: '-1', - name: '', - radio: true, - checked: false - }]; - let ret = this.$app.$def.globalData.storage.getSync('phone_setting_greeting_data', 'false'); - this.storageValue = ret == 'false' ? defaultData : JSON.parse(ret); - this.greetingList.forEach(element => { - this.storageValue.some(function (item) { - if (element.id == item.id) { - element.radio = item.radio; - return true; - } - }); - }); - if (this.greetingList.length == 11) { - this.isMaxGreeting = true; - } - } -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/dialer/speeddial/selectContact/selectcontact.css b/entry/src/main/js/default/pages/dialer/speeddial/selectContact/selectcontact.css deleted file mode 100644 index c48e1ce..0000000 --- a/entry/src/main/js/default/pages/dialer/speeddial/selectContact/selectcontact.css +++ /dev/null @@ -1,103 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - width: 100%; - height: 100%; - flex-direction: column; - align-items: flex-start; -} - - -.todo-title-div { - align-items: center; - justify-content: flex-start; - flex-direction: row; - position: relative; - height: 200px; - width: 100%; -} - -.title-image-box { - justify-content: center; - align-items: center; - margin-right: 25px; - margin-left: 25px; - width: 80px; - height: 80px; - border-radius: 8px; - flex-shrink: 0; -} - -.title-image-box:active { - background-color: #d3d3d3; -} - -.title-image { - width: 50px; - height: 50px; -} - -.todo-title-name { - text-align: left; - font-size: 50px; -} - -.empty-group { - width: 100%; - height: 100%; - flex-direction: column; - align-items: center; - justify-content: center; -} - -.empty-image { - width: 200px; - height: 200px; -} - -.empty-text { - margin-top: 10px; - color: #a9a9a9; - font-size: 25px; -} - - -.body-group { - width: 100%; - height: 100%; - flex-direction: column; -} - - -.search-div { - flex-direction: row; - justify-content: flex-start; - align-items: flex-start; - width: 100%; - height: 100px; - margin-left: 25px; - margin-right: 25px; -} - -.list-div-group { - width: 100%; - justify-content: center; - flex-direction: column; - align-items: center; -} - -.list-div-group { - margin-top: 20px; -} diff --git a/entry/src/main/js/default/pages/dialer/speeddial/selectContact/selectcontact.hml b/entry/src/main/js/default/pages/dialer/speeddial/selectContact/selectcontact.hml deleted file mode 100644 index bcd7019..0000000 --- a/entry/src/main/js/default/pages/dialer/speeddial/selectContact/selectcontact.hml +++ /dev/null @@ -1,58 +0,0 @@ - - -
- -
-
- -
- {{ $t('value.selectContact.title') }} - -
- -
- -
- -
-
- - {{ emptyText }} - -
-
-
- - -
-
-
- -
diff --git a/entry/src/main/js/default/pages/dialer/speeddial/selectContact/selectcontact.js b/entry/src/main/js/default/pages/dialer/speeddial/selectContact/selectcontact.js deleted file mode 100644 index 7e9f588..0000000 --- a/entry/src/main/js/default/pages/dialer/speeddial/selectContact/selectcontact.js +++ /dev/null @@ -1,422 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import router from '@system.router'; -import Utils from '../../../../../default/utils/utils.js' -import selectContactsAbility from '../../../../../default/model/SelectcontactsModel.js'; -import Constants from '../../../../../default/common/constants/Constants.js'; -import httpcontact from '../../../../../default/model/ContactModel.js'; -import LOG from '../../../../utils/ContactsLog.js'; -import groupReq from '../../../../model/GroupsModel.js'; - -var TAG = 'selectContact'; - -export default { - data: { - searchText: '', - contactList: [], - emptyText: '', - searchContactList: [], - showEmpty: false, - //Show content layout - contentShow: false, - //Show search title - searchTitleLayout: true, - //Show search list - searchLayoutShow: false, - searchPhoneNum: 0, - searchDefaultName: '', - phoneCheckShow: false, - childPhoneCheckShow: false, - showNumberList: true, - showDefaultNumber: true, - page: 0, - contactCount: 0, - limit: 200, - routerParamsSpeedDialIndex: -1, - defaultHead: '', - searchRequestCode: 2012 - }, - onInit() { - this.emptyText = this.$t('value.selectContact.page.empty'); - if (Utils.isEmpty(this.searchDefaultName)) { - //Initialize contact data - this.initData(); - } else { - this.searchText = this.searchDefaultName; - this.onSearchTextChange(this.searchText); - } - }, - initData() { - this.page = 0; - var requestData = { - page: this.page, - limit: this.limit - }; - this.requestInit(requestData); - }, - back() { - router.back(); - }, - onTextChange(text) { - if (Utils.isEmpty(text.text)) { - this.emptyText = this.$t('value.selectContact.page.empty'); - this.refreshLayout(); - } else { - this.searchText = text.text; - this.onSearchTextChange(this.searchText); - } - }, - touchStartSearch: function () { - this.$element('search').focus({ - focus: true - }) - }, - editContactsInfo(e) { - if (!e.detail.contacts.isPushed) { - e.detail.contacts.phoneNumbers.push({ - 'labelId': 2, - 'labelName': this.$t('accountants.phone'), - 'phoneNumber': this.number, - 'phoneAddress': 'N', - 'showP': false, - 'blueStyle': true - }); - e.detail.contacts.isPushed = true; - } - LOG.info(TAG + 'editContactsInfo' + 'logMessage phoneNumbers = ' + e.detail.contacts.phoneNumbers); - router.push( - { - uri: 'pages/contacts/accountants/accountants', - params: { - addShow: false, - updataShow: true, - showWork: true, - upHouseShow: true, - upPinShow: true, - saveContact: true, - contactForm: e.detail.contacts - } - }); - }, - - requestItem: function () { - this.page++; - var requestData = { - page: this.page, - limit: this.limit - }; - this.requestInit(requestData); - }, - - requestInit: function (data) { - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - selectContactsAbility.queryContacts(DAHelper, resultList=>{ - if(Utils.isEmptyList(resultList)) { - LOG.info(TAG + 'requestInit' + 'logMessage select contact list is empty!!'); - } else { - var listTemp = []; - var speedNumberMap = new Map(); - if (this.type == 'saveSpeedDial') { - for(let i = 1; i <=9; i++) { - var speedItemString = this.$app.$def.globalData.storage.getSync('speedDial'+i,''); - if (!Utils.isEmpty(speedItemString)) { - var speedItem = JSON.parse(speedItemString); - speedNumberMap.set(speedItem.speedNumber,null); - } - } - } - if (resultList.length > 0) { - resultList.forEach(element => { - element.name = {}; - element.name.fullName = element.emptyNameData; - element.name.namePrefix = element.namePrefix; - element.name.nameSuffix = element.nameSuffix; - element.portraitPath = false; - if (!Utils.isEmpty(element.phoneNumbers) && element.phoneNumbers.length > 0) { - var phoneNumbersTemp = []; //Create filtered phone number container - element.phoneNumbers.forEach(childEle => { - childEle.checked = false; - childEle.labelName = this.getPhoneLabelNameById(childEle.labelId); - this.initVariableSpan(element); - // When speed dialing jumps to this page, if speed dialing has been set, no container will be added - if (!speedNumberMap.has(Utils.removeSpace(childEle.phoneNumber))) { - phoneNumbersTemp.push(childEle); - } - }) - if (phoneNumbersTemp.length > 0) { - // Displayed in the contact list only if there are phone numbers that are not set to speed dial. - element.phoneNumbers = phoneNumbersTemp; - listTemp.push(element); - } - } - }); - this.contactList = listTemp; - } - } - this.refreshLayout(); - }); - }, - - getPhoneLabelNameById: function(phoneLabelId) { - var labelName = ''; - switch (parseInt(phoneLabelId)) { - case 1: - labelName = this.$t('accountants.house'); - break; - case 2: - labelName = this.$t('accountants.phone'); - break; - case 3: - labelName = this.$t('accountants.unit'); - break; - case 4: - labelName = this.$t('accountants.unit fax'); - break; - case 5: - labelName = this.$t('accountants.home fax'); - break; - case 6: - labelName = this.$t('accountants.pager'); - break; - case 7: - labelName = this.$t('accountants.others'); - break; - case 12: - labelName = this.$t('accountants.switchboard'); - break; - case 99: - labelName = this.$t('accountants.customize'); - break; - default: - break; - } - return labelName; - }, - - - initVariableSpan: function (item) { - //Initialize variable name - var matchString = Utils.getMatchedString(item.emptyNameData, this.searchText); - if (Utils.isEmpty(matchString) || Utils.isEmpty(this.searchText.trim())) { - item.name.searchTextStart = ''; - item.name.searchTextMiddle = ''; - item.name.searchTextEnd = item.emptyNameData - } else { - var name = item.emptyNameData; - var index = name.indexOf(matchString); - item.name.searchTextStart = name.substr(0, index); - item.name.searchTextMiddle = name.substr(index, matchString.length); - item.name.searchTextEnd = name.substr(index + matchString.length); - } - //Initialize variable phone number - for (var i = 0; i < item.phoneNumbers.length; i++) { - var phoneNumber = item.phoneNumbers[i].phoneNumber; - var matchStringPhone = Utils.getMatchedString(phoneNumber, this.searchText); - if (Utils.isEmpty(matchStringPhone) || Utils.isEmpty(this.searchText.trim())) { - item.phoneNumbers[i].startPhone = '' - item.phoneNumbers[i].middlePhone = '' - item.phoneNumbers[i].endPhone = phoneNumber; - } else { - var phoneIndex = phoneNumber.indexOf(matchStringPhone); - item.phoneNumbers[i].startPhone = phoneNumber.substr(0, phoneIndex); - item.phoneNumbers[i].middlePhone = phoneNumber.substr(phoneIndex, matchStringPhone.length); - item.phoneNumbers[i].endPhone = phoneNumber.substr(phoneIndex + matchStringPhone.length); - } - } - }, - - - duplicateRemoval: function (result) { - if (Utils.isEmptyList(result.data)) { - return result; - } - var resultList = result.data; - for (var i = 0; i < resultList.length; i++) { - var item = resultList[i]; - var phoneNumbersList = []; - //Sort in reverse order to repeat the last addition - for (var j = item.phoneNumbers.length - 1; j >= 0; j--) { - var indexOf = this.indexOf(item.phoneNumbers[j], phoneNumbersList); - //Add if it does not exist - if (indexOf == -1) { - phoneNumbersList.push(item.phoneNumbers[j]); - } - } - this.initVariableSpan(item); - item.phoneNumbers = phoneNumbersList; - } - return result; - }, - - indexOf: function (item, phoneNumbersList) { - var index = -1; - if (Utils.isEmptyList(phoneNumbersList)) { - return index; - } - for (var i = 0; i < phoneNumbersList.length; i++) { - LOG.info(TAG + 'indexOf' + 'select contact indexOf==>success'); - if (item.phoneNumber == phoneNumbersList[i].phoneNumber) { - index = i; - break; - } - } - return index; - }, - - - filterContact: function (contactData, result) { - if (Utils.isEmptyList(contactData)) { - return result; - } - var resultList = []; - var resultDataList = result.data; - for (var i = 0; i < resultDataList.length; i++) { - var resultItem = resultDataList[i]; - for (var index = 0; index < contactData.length; index++) { - var routerItem = contactData[index]; - var tempNumber; - if (routerItem.contactId == resultItem.contactId) { - var phoneNumbers = resultItem.phoneNumbers; - tempNumber = []; - for (var j = 0; j < phoneNumbers.length; j++) { - //Filter by phone number and phone type - if (!((phoneNumbers[j].phoneNumber == routerItem.selectNumber) - && (phoneNumbers[j].labelId == routerItem.selectLabelId))) { - tempNumber.push(phoneNumbers[j]); - } - } - resultItem.phoneNumbers = tempNumber; - } - } - //If there is no element in the phone list - if (resultItem.phoneNumbers.length <= 0) { - continue; - } - resultList.push(resultItem); - } - result.data = resultList; - return result; - }, - - - refreshLayout() { - if (Utils.isEmptyList(this.contactList)) { - //Contact data is empty - this.searchTitleLayout = false; - this.showEmpty = true; - this.contentShow = false; - } else { - //Contact data is not empty - this.searchTitleLayout = true; - this.showEmpty = false; - this.contentShow = true; - this.searchLayoutShow = false; - } - }, - - - selectClick: function (params) { - if (Utils.isEmpty(this.searchDefaultName)) { - LOG.info(TAG + 'selectClick' + 'logMessage select=====>selectClick index:' + params.detail.index + ' indexChild:'); - var item = {}; - if (this.searchLayoutShow) { - item = this.searchContactList[params.detail.index]; - } else { - item = this.contactList[params.detail.index]; - } - LOG.info(TAG + 'selectClick' + 'logMessage item = '+item); - var indexChild = params.detail.indexChild; - if (this.type == 'saveVoicemail') { //Voice mailbox select contact number - var voicemailNumber = item.phoneNumbers[indexChild].phoneNumber; - this.$app.$def.globalData.voicemailNumber = voicemailNumber; - } else if (this.type == 'saveSpeedDial') {//Speed dial select contact - var speedNumber = item.phoneNumbers[indexChild].phoneNumber - var speedItem = {}; //Generate speed dial data based on the selected contact - speedItem.emptyNameData = item.emptyNameData; - speedItem.routerIndex = this.speedDialIndex + 1; - speedItem.contactId = item.contactId; - speedItem.nameSuffix = item.nameSuffix; - speedItem.portraitColor = item.portraitColor; - speedItem.portraitPath = Utils.isEmpty(item.portraitPath)? '': item.portraitPath; - speedItem.speedNumber = Utils.removeSpace(speedNumber); - this.$app.$def.globalData.storage.putSync('speedDial'+this.speedDialIndex,JSON.stringify(speedItem)); - this.$app.$def.globalData.storage.flushSync(); - } - this.$app.$def.globalData.dialogShow = true; - router.back(); - } else { - var contactId = this.searchContactList[params.detail.index].contactId; - router.push({ - uri: 'pages/contacts/contactDetail/contactDetail', - params: { - contactId: contactId, - isNewSource: true, - } - }); - } - }, - onSearchTextChange: function (text) { - this.searchRequest(this.searchRequestCode, text); - }, - - - searchRequest: function (code, keyText) { - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - var data = {}; - data.likeValue = keyText; - groupReq.searchContacts(DAHelper, data, result => { - if (result.code == 0 && result.contactCount > 0) { - var resultData = this.duplicateRemoval(this.filterContact(this.contactData, result)); - this.searchContactList = resultData.data; - this.searchPhoneNum = this.searchContactList.length; - } else { - this.searchContactList = []; - LOG.error(TAG + 'searchRequest' + 'select contact request error'); - } - this.searchPhoneNum = this.searchContactList.length; - LOG.info(TAG + 'searchRequest' + 'select search request result'); - this.refreshSearchList(keyText, this.searchContactList); - }); - }, - - - refreshSearchList: function (keyText, searchContactList) { - if (Utils.isEmpty(keyText)) { - this.searchLayoutShow = false; - this.emptyText = this.$t('value.selectContact.page.empty'); - this.showEmpty = true; - this.contentShow = false; - this.searchLayoutShow = false; - } else { - if (Utils.isEmptyList(searchContactList)) { - //The search list is empty. Update the search text description - this.emptyText = this.$t('value.selectContact.page.emptyText'); - this.showEmpty = true; - this.contentShow = false; - this.searchLayoutShow = false; - } else { - this.searchLayoutShow = true; - this.contentShow = true; - this.showEmpty = false; - this.emptyText = this.$t('value.selectContact.page.empty'); - } - } - }, - - - searchIndexOf: function (keyText, source) { - return source.indexOf(keyText); - } -} diff --git a/entry/src/main/js/default/pages/dialer/speeddial/speeddial.css b/entry/src/main/js/default/pages/dialer/speeddial/speeddial.css deleted file mode 100644 index 66989dd..0000000 --- a/entry/src/main/js/default/pages/dialer/speeddial/speeddial.css +++ /dev/null @@ -1,227 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - width: 100%; - height: 100%; - flex-direction: column; - align-items: center; -} - -.todo-title-div { - justify-content: flex-start; - flex-direction: row; - position: relative; - align-items: center; - height: 200px; - width: 100%; -} - -.title-image-box{ - justify-content: center; - align-items: center; - margin-right: 25px; - margin-left: 25px; - width: 80px; - height: 80px; - border-radius: 8px; - flex-shrink: 0; -} -.title-image-box:active{ - background-color: lightgray; -} -.title-image { - width: 50px; - height: 50px; -} - -.todo-title-name { - text-align: left; - font-size: 50px; -} - -.group { - justify-content: center; - align-items: center; - width: 100%; - height: 100%; -} - -.grid-parent { - width: 100%; - height: 720px; - display: grid; - grid-template-columns: 33.333333% 33.333333% 33.333333%; - grid-template-rows: 33.333333% 33.333333% 33.333333%; -} - -.grid-child { - flex-direction: column; - align-items: center; - justify-content: center; - width: 100%; - height: 100%; -} - -.speed-circle-group { - align-items: center; - justify-content: center; - width: 100px; - height: 100px; -} - - -.speed-circle { - align-items: center; - justify-content: center; - width: 100%; - height: 100%; - border-color: #000; - border-radius: 50px; - border: 1px; -} - - -.speed-circle-text { - align-items: center; - justify-content: center; - width: 100%; - background-color: antiquewhite; - height: 100%; - border-radius: 50px; -} - -.speed-text { - justify-content: center; - margin-top: 15px; - font-size: 25px; - text-overflow: ellipsis; -} - -.subscript-index { - left: -60px; - top: -150px; - align-content: center; - position: relative; - justify-content: center; - font-size: 25px; -} - -.child-image { - position: absolute; - top: 25px; - left: 25px; - width: 50px; - height: 50px; -} - -.child-image-default { - position: absolute; - border-radius: 50px; - border-color: #000; - border: 1px; - width: 100%; - height: 100%; - -} - -.child-text-div { - align-items: center; - justify-content: center; - width: 100%; - height: 100%; -} - -.child-text { - align-content: center; - justify-content: center; - position: relative; - color: white; - text-overflow: ellipsis; - font-size: 40px; - allow-scale: true; - font-weight: 600; -} - - -.dialog-main { - width: 92%; -} - -.dialog-div { - flex-direction: column; - align-items: center; - justify-content: flex-end; -} - -.inner-txt { - width: 100%; - flex-direction: column; - align-items: flex-start; - justify-content: flex-start; -} - -.title { - padding-left: 40px; - padding-right: 40px; - padding-top: 20px; - padding-bottom: 25px; - font-size: 35px; - font-weight: bold; -} - -.txt { - background-color: transparent; - text-color: #000; - width: 100%; - align-items: flex-start; - justify-content: flex-start; - border-radius: 0px; - padding-left: 40px; - padding-right: 40px; - padding-bottom: 25px; - padding-top: 25px; - padding-bottom: 25px; - font-size: 30px; -} - -.txt:active { - background-color: #d3d3d3; -} - -.inner-btn { - margin-top: 30px; - margin-bottom: 30px; - width: 100%; -} - -.btn-txt { - width: 100%; - margin-left: 40px; - margin-right: 40px; - padding-top: 20px; - padding-bottom: 20px; - border-radius: 30px; - background-color: transparent; - text-color: #175cfe; - font-size: 30px; -} - -.dialog-line { - margin-left: 40px; - margin-right: 40px; - stroke-width: 1px; - width: 100%; - color: #999; -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/dialer/speeddial/speeddial.hml b/entry/src/main/js/default/pages/dialer/speeddial/speeddial.hml deleted file mode 100644 index 329e261..0000000 --- a/entry/src/main/js/default/pages/dialer/speeddial/speeddial.hml +++ /dev/null @@ -1,74 +0,0 @@ - -
- -
-
- -
- {{ $t('value.speedDial.title') }} - -
- -
-
-
-
-
- -
-
- - -
- - {{ item.nameSuffix }} -
-
- -
-
-
-
- - {{ item.emptyNameData }} - - - {{ item.routerIndex }} - -
-
-
- -
-
- {{ $t('value.selectContact.dialog.title') }} - {{ $t('value.selectContact.dialog.one') }} - - - {{ $t('value.selectContact.dialog.two') }} - -
-
- -
-
-
-
diff --git a/entry/src/main/js/default/pages/dialer/speeddial/speeddial.js b/entry/src/main/js/default/pages/dialer/speeddial/speeddial.js deleted file mode 100644 index 5dde798..0000000 --- a/entry/src/main/js/default/pages/dialer/speeddial/speeddial.js +++ /dev/null @@ -1,123 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import router from '@system.router'; -import Utils from '../../../../default/utils/utils.js' -import LOG from '../../../utils/ContactsLog.js'; - -var TAG = 'speedDial'; - -export default { - data: { - num: 9, - speedList: [], - searchContactList: [], - isClick: true, - routerIndex: -1, - currentIndex: -1, - ic_contacts_voicemail: '/res/image/ic_contacts_voicemail_s.svg', - }, - onInit() { - this.initData(); - }, - back() { - router.back(); - }, - onShow() { - this.initData(); - }, - initData: function () { - this.speedList = []; - for (let index = 0; index < this.num; index++) { - var speedItemString = this.$app.$def.globalData.storage.getSync('speedDial'+index,''); - if (index == 0) { - let item = {}; - item.emptyNameData = this.$t('value.callRecords.voiceMails'); - item.image = this.ic_contacts_voicemail; - item.routerIndex = index + 1; - this.speedList.push(item); - } else if (!Utils.isEmpty(speedItemString)) { - this.speedList.push(JSON.parse(speedItemString)); - } else { - let item = {}; - item.emptyNameData = this.$t('value.speedDial.page.add'); - item.image = this.$t('svg.speedDial.add'); - item.routerIndex = index + 1; - this.speedList.push(item) - } - } - LOG.info(TAG + 'initData' + 'logMessage speedDail 4 speedList = ' + this.speedList); - }, - - itemClick(index) { - this.currentIndex = index; - if (index == 0) { - router.push({ - uri: 'pages/dialer/voicemailsettings/voicemailsettings' - }); - } else if (this.isAdd(index)) { - this.$element('simpledialog').show(); - } else { - this.noAddData(index); - } - }, - noAddData: function (index) { - var that = this; - if (this.isClick) { - this.isClick = false; - LOG.info(TAG + 'noAddData speedDial itemClick===>' + index); - that.routerPage(index); - setTimeout(function () { - that.isClick = true; - }, 1000); - } - }, - routerPage: function (index) { - router.push({ - uri: 'pages/dialer/speeddial/selectcontact/selectcontact', - params: { - type: 'saveSpeedDial', - speedDialIndex: index, - } - }); - }, - isAdd: function (index) { - return!Utils.isEmpty(this.speedList[index].contactId); - }, - - deleteSpeed: function () { - if (this.currentIndex > 0) { - this.$app.$def.globalData.storage.deleteSync('speedDial'+this.currentIndex); - this.$app.$def.globalData.storage.flushSync(); - this.initData(); - this.$element('simpledialog').close(); - } - }, - - updateSpeed: function () { - if (this.currentIndex > 0) { - this.$element('simpledialog').close(); - router.push({ - uri: 'pages/dialer/speeddial/selectcontact/selectcontact', - params: { - type: 'saveSpeedDial', - speedDialIndex: this.currentIndex, - } - }); - } - }, - cancelSchedule: function () { - this.$element('simpledialog').close(); - }, -} diff --git a/entry/src/main/js/default/pages/dialer/voicemailsettings/voicemailsettings.css b/entry/src/main/js/default/pages/dialer/voicemailsettings/voicemailsettings.css deleted file mode 100644 index 93a90cc..0000000 --- a/entry/src/main/js/default/pages/dialer/voicemailsettings/voicemailsettings.css +++ /dev/null @@ -1,200 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - flex-direction: column; - justify-content: flex-start; - align-items: center; - background-color: #FFF; -} - -.settings-title-div { - flex-direction: row; - align-items: center; - justify-content: flex-start; - margin-left: 24px; - margin-top: 10px; - width: 100%; -} - -.settings-back-but-div { - width: 93px; - height: 93px; - border-radius: 15px; - align-items: center; -} - -.settings-back-but-div:active { - width: 93px; - height: 93px; - border-radius: 15px; - align-items: center; - background-color: #f3f3f3; -} - - -.settings-back-image { - margin-left: 21px; - width: 50px; - height: 50px; - border-radius: 10px; -} - -.settings-title-text { - align-items: center; - justify-content: center; - margin-left: 15px; - font-size: 40px; - font-weight: 500; -} - -.flex-image { - width: 30px; - height: 30px; -} - -.divider { - line-cap: round; - stroke-width: 1px; - color: #cccccc; - width: 87%; -} - -.contact-manage-text { - margin-left: 45px; - font-size: 27px; - font-weight: 500; - color: #7e7e7e; -} - -.display-content-div { - align-items: center; - height: 100px; - width: 100%; - margin-left: 45px; - margin-right: 45px; - border-radius: 5px; -} - -.display-content-div:active { - background-color: #e4e4e4; -} - -.display-content-text { - width: 100%; - font-weight: 500; - font-size: 31px; -} - -.display-content-text-right { - width: 100%; - font-size: 25px; - font-weight: 400; - text-align: right; -} - -.flex-manage-image { - width: 30px; - height: 30px; - flex-shrink: 0; -} - -.dialog-main { - width: 90%; - align-items: center; -} - -.dialog-div { - flex-direction: column; - align-items: center; - border-style: dotted; - border-radius: 50px; -} - -.inner-txt { - width: 400px; - height: 160px; - flex-direction: column; - align-items: flex-start; - justify-content: space-around; - margin-right: 150px; -} - -.txt { - font-size: 30px; -} - -.content-edit { - width: 100%; - flex-direction: column; - justify-content: flex-start; - align-items: center; -} - -.content-edit-image { - width: 60px; - height: 60px; -} - -.content-edit-image-box { - position: absolute; - right: 50px; - bottom: 10px; - width: 80px; - height: 80px; - border-radius: 8px; - justify-content: center; - align-items: center; -} - -.content-edit-image-box:active { - background-color: #FFD3D3D3; -} - -.dialog-input-active { - width: 85%; - background-color: transparent; - border-bottom: 1px solid #4e4e4e; -} - -.dialog-input { - width: 85%; - background-color: transparent; - border-bottom: 1px solid #FFD3D3D3; -} - -.content-item { - width: 85%; - align-items: center; -} - -.content-text { - width: 100%; -} - -.inner-btn { - width: 90%; - height: 120px; - justify-content: space-around; - align-items: center; -} - -.btn-txt { - width: 40%; - height: 70%; - border-radius: 30px; - background-color: transparent; - text-color: #175cfe; - font-size: 30px; -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/dialer/voicemailsettings/voicemailsettings.hml b/entry/src/main/js/default/pages/dialer/voicemailsettings/voicemailsettings.hml deleted file mode 100644 index 7a45769..0000000 --- a/entry/src/main/js/default/pages/dialer/voicemailsettings/voicemailsettings.hml +++ /dev/null @@ -1,89 +0,0 @@ - -
-
-
- -
- - {{ $t('value.callRecords.voiceMails') }} - -
-
- - {{ $t('value.callRecords.serviceProvider') }} - - - {{ $t('value.callRecords.myProvider') }} - - -
- -
- - {{ $t('value.callRecords.voicemailNumber') }} - - - {{ voiceMailNumber }} - - -
- -
-
- {{ - $t('value.callRecords.voicemailNumber') }} -
-
- -
- -
-
-
- - | - -
-
-
- -
-
- {{ - $t('value.callRecords.serviceProvider') }} -
-
-
- {{$t('value.callRecords.myProvider')}} - -
-
-
- - | - -
-
-
-
\ No newline at end of file diff --git a/entry/src/main/js/default/pages/dialer/voicemailsettings/voicemailsettings.js b/entry/src/main/js/default/pages/dialer/voicemailsettings/voicemailsettings.js deleted file mode 100644 index c67de82..0000000 --- a/entry/src/main/js/default/pages/dialer/voicemailsettings/voicemailsettings.js +++ /dev/null @@ -1,95 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import router from '@system.router'; -var TAG = 'voicemailSettings'; -export default { - data: { - voiceMailNumber: '', - newNumberTemp:'', - dialogInputActive: false, - }, - - onInit() { - this.voiceMailNumber = this.$app.$def.globalData.storage.getSync('voicemailNumber',this.$t('value.callRecords.noSettings')); - if (this.$t('value.callRecords.noSettings') != this.voiceMailNumber) { - this.$app.$def.globalData.voicemailNumber = this.voiceMailNumber; - } - }, - onShow() { - if (this.$app.$def.globalData.dialogShow == true) { - setTimeout(() => { - this.newNumberTemp = this.$app.$def.globalData.voicemailNumber; - }, 200); - setTimeout(() => { - this.$element('editVoiceMailNumber').show(); - }, 500); - } - }, - onDestroy() { - - }, - copy(value){ - var newValue = value; - return newValue; - }, - back: function () { - this.$app.$def.globalData.dialogShow = false; - router.back(); - }, - selectContacts: function () { - router.push({ - uri: 'pages/dialer/speeddial/selectcontact/selectcontact', - params: { - type: 'saveVoicemail', - } - }); - }, - changeStyle: function () { - this.dialogInputActive = true; - }, - - editProvider:function() { - this.$element('myProvider').show(); - }, - - editVoiceNumber:function() { - - this.$element('editVoiceMailNumber').show(); - if (this.voiceMailNumber != this.$t('value.callRecords.noSettings')) { - this.newNumberTemp = this.voiceMailNumber; - } - }, - cancelEdit: function () { - this.$element('editVoiceMailNumber').close(); - this.newNumberTemp = this.voiceMailNumber; - this.$app.$def.globalData.voicemailNumber = this.voiceMailNumber; - }, - changeVoicemailNumber: function (e) { - this.newNumberTemp = e.value; - }, - confirmVoiceNumber:function() { - this.voiceMailNumber = this.newNumberTemp; // Set number to new value - this.$app.$def.globalData.storage.putSync('voicemailNumber',this.newNumberTemp); - this.$app.$def.globalData.storage.flushSync();// Persistent storage of new numbers - this.$element('editVoiceMailNumber').close(); - }, - cancelProvider:function() { - this.$element('myProvider').close(); - }, - confirmProvider:function() { - this.$element('myProvider').close(); - } - -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/favorites/delete/delete.css b/entry/src/main/js/default/pages/favorites/delete/delete.css deleted file mode 100644 index 9eaa7b9..0000000 --- a/entry/src/main/js/default/pages/favorites/delete/delete.css +++ /dev/null @@ -1,203 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - width: 100%; - height: 100%; - flex-direction: column; - justify-content: flex-start; - align-items: center; -} - -.batch-delete-title { - width: 100%; - height: 8%; - align-items: center; -} - -.batch-delete-title-image-button { - width: 65px; - height: 65px; - justify-content: center; - align-items: center; - margin-left: 35px; -} - -.batch-delete-title-image-button:active { - background-color: #F0EEEE; -} - -.batch-delete-title-image { - width: 50px; - height: 50px; -} - -.batch-delete-title-text { - font-size: 40px; - margin-left: 20px; -} - -.content { - width: 100%; - height: 100%; - flex-direction: column; - justify-content: flex-start; - align-items: center; -} - -.todo-wraper { - width: 100%; - height: 100%; - columns: 1; -} - -.todo-item { - width: 454px; - height: 133px; - flex-direction: row; - columns: 1; - align-items: stretch; - margin-left: 25px; - margin-right: 25px; -} - -.todo-title-div { - flex-direction: row; - justify-content: flex-start; - align-items: flex-start; - width: 100%; - margin-left: 25px; - margin-right: 25px; - margin-top: 20px; -} - -.todo-title-name-frequent { - height: 133px; - text-align: left; - font-size: 30px; -} - -.todo-content-div { - flex-direction: row; - justify-content: flex-start; - align-items: center; - margin-right: 10px; -} - -.first { - width: 25%; - margin-left: 25px; -} - -.todo-content-div-third { - flex-direction: row; - justify-content: flex-start; - align-items: center; - width: 30%; - justify-content: flex-end; - right: 0px; -} - -.flex-item-check { - right: -25px; -} - -.todo-content-div-div { - flex-direction: column; - justify-content: center; - align-items: flex-start; - margin-start: 32px; -} - -.todo-content-name { - width: 100%; - text-align: left; - font-size: 32px; - font-weight: 600; -} - -.todo-content { - width: 100%; - margin-top: 20px; - text-align: left; - max-lines: 1; - text-overflow: ellipsis; -} - -.todo-divider-div { - flex-direction: column; - justify-content: flex-end; - align-items: flex-end; - position: absolute; - bottom: 0px; - width: 100%; -} - -.todo-divider { - stroke-width: 1px; - color: #ccc; -} - -.todo-content-button { - width: 100%; - height: 100%; - background-color: #DACEB5; -} - -.todo-content-name-last { - width: 100%; - height: 100%; - text-align: center; - font-size: 40px; - allow-scale: true; - font-weight: 600; -} - -.flex-item-image { - width: 50px; - height: 50px; - margin-right: 0px; -} - -.batch-delete-operation { - width: 100%; - height: 8%; - justify-content: center; -} - -.batch-delete-operation-button { - width: 30%; - height: 100%; - border-radius: 15px; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.batch-delete-operation-button:active { - background-color: #d3d3d3; -} - -.batch-delete-operation-button:disabled { - opacity: 0.5; -} - -.batch-delete-image-icon { - width: 50px; - height: 50px; -} - -.batch-delete-text { - font-size: 22px; -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/favorites/delete/delete.hml b/entry/src/main/js/default/pages/favorites/delete/delete.hml deleted file mode 100644 index 70ef673..0000000 --- a/entry/src/main/js/default/pages/favorites/delete/delete.hml +++ /dev/null @@ -1,109 +0,0 @@ - -
-
-
- -
- {{ titleMessage }} - -
- - - -
- {{ $t('group.favorites') }} - - {{ favoriteslist.length }} - -
-
- - -
- -
-
- - - {{ $item.lastName }} - - -
-
-
- {{ $item.name }} - -
-
- -
-
- -
-
-
- - -
- {{ $t('group.frequent') }} - - {{ todolist.length }} - -
-
- - -
- - - {{ $item.lastName }} - - -
-
-
- {{ $item.name }} - - {{ $item.numberType }} {{ $item.numbers }} - -
-
- -
-
- -
-
-
-
-
-
- - {{ $t('value.favorites.page.delete.remove') }} - -
-
- - {{ allSelectMessage }} - -
-
-
diff --git a/entry/src/main/js/default/pages/favorites/delete/delete.js b/entry/src/main/js/default/pages/favorites/delete/delete.js deleted file mode 100644 index 2acd6f6..0000000 --- a/entry/src/main/js/default/pages/favorites/delete/delete.js +++ /dev/null @@ -1,236 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import httpcontact from '../../../../default/model/FavoritesModel.js' -import configuration from '@system.configuration'; -import LOG from '../../../utils/ContactsLog.js'; - -var TAG = 'favoritesdelete'; - -export default { - data: { - favoriteslist: [], - todolist: [], - svgFavoritesDeleteMove: '/res/image/star_moves.png', - ic_cancle_m: '/res/image/ic_cancel_m.svg', - ic_delete_m: '/res/image/ic_delete_m.svg', - ic_select_all: '/res/image/ic_select all_m.svg', - titleMessage: '', - allSelectMessage: '', - isSelectAll: false, - deleteDisabled: true, - selectCount: 0, - favoritesTitle: true, - todoTitle: true, - localeInfo: '', - props: { - favoritesIndex: { - default: '' - }, - todoIndex: { - default: '' - } - } - }, - onInit() { - this.titleMessage = this.$t('value.favorites.page.delete.titleMessageNoSelect'); - this.allSelectMessage = this.$t('value.favorites.page.delete.selectAll'); - this.localeInfo = configuration.getLocale(); - if (this.favoriteslist.length == 0) { - this.favoritesTitle = false; - } - if (this.todolist.length == 0) { - this.todoTitle = false; - } - this.favoritesIndex; - if (this.favoritesIndex !== '') { - this.favoriteslist[this.favoritesIndex].checked = true; - this.selectCount++; - this.refreshPageTabs(); - } - if (this.todoIndex !== '') { - this.todolist[this.todoIndex].checked = true; - this.selectCount++; - this.refreshPageTabs(); - } - }, - defaultChecked: function () { - }, - clickSelectAll: function (e) { - LOG.info(TAG + 'clickSelectAll' + 'logMessage selectAll:' + e.target); - if (!this.isSelectAll) { - this.selectAll(); - } else { - this.unSelectAll(); - } - this.refreshPageTabs(); - }, - - selectAll: function () { - this.selectCount = 0; - this.favoriteslist.forEach(element => { - element.checked = true; - this.selectCount++; - }); - this.todolist.forEach(element => { - element.checked = true; - this.selectCount++; - }); - }, - - - unSelectAll: function () { - this.favoriteslist.forEach(element => { - element.checked = false; - if (this.selectCount > 0) { - this.selectCount--; - } - }); - this.todolist.forEach(element => { - element.checked = false; - if (this.selectCount > 0) { - this.selectCount--; - } - }); - }, - collectChecked: function (index) { - this.favoriteslist[index].checked = !this.favoriteslist[index].checked; - this.favoriteslist[index].checked ? this.selectCount++ : this.selectCount--; - this.refreshPageTabs(); - }, - frequentChecked: function (index) { - this.todolist[index].checked = !this.todolist[index].checked; - this.todolist[index].checked ? this.selectCount++ : this.selectCount--; - this.refreshPageTabs(); - }, - collectChangeChecked: function (index, e) { - this.favoriteslist[index].checked = e.checked; - e.checked ? this.selectCount++ : this.selectCount--; - this.refreshPageTabs(); - }, - changeCheckState: function (index, e) { - this.todolist[index].checked = e.checked; - e.checked ? this.selectCount++ : this.selectCount--; - this.refreshPageTabs(); - }, - - - refreshPageTabs: function () { - if (this.selectCount > 0) { - switch (this.localeInfo.language) { - case 'zh': - this.titleMessage = this.$t('value.favorites.page.delete.titleMessageSelect') + this.selectCount + this.$t('value.favorites.page.delete.titleMessageUnit'); - break; - case 'en': - this.titleMessage = this.selectCount + this.$tc('value.favorites.page.delete.titleMessageSelect', this.selectCount); - break; - default: - this.titleMessage = ''; - break; - } - this.deleteDisabled = false; - if (this.selectCount == this.favoriteslist.length + this.todolist.length) { - this.ic_select_all = '/res/image/ic_select all_filled_m.svg'; - this.allSelectMessage = this.$t('value.favorites.page.delete.unSelectAll'); - this.isSelectAll = true; - } else { - this.ic_select_all = '/res/image/ic_select all_m.svg'; - this.allSelectMessage = this.$t('value.favorites.page.delete.selectAll'); - this.isSelectAll = false; - } - } else { - this.selectCount = 0; - this.ic_select_all = '/res/image/ic_select all_m.svg'; - this.allSelectMessage = this.$t('value.favorites.page.delete.selectAll'); - this.titleMessage = this.$t('value.favorites.page.delete.titleMessageNoSelect'); - this.deleteDisabled = true; - this.isSelectAll = false; - } - }, - backFavorites: function () { - this.$emit('eventType', { - isShow: true, - collection: this.favoriteslist, - frequent: this.todolist - }); - }, - doDelete: function () { - if (this.isSelectAll) { - this.favoriteslist = []; - this.todolist = []; - } else { - var unCheckedStarList = []; - var checkedStarList = []; - this.favoriteslist.forEach(element => { - if (element.checked) { - checkedStarList.push(element); - } else { - unCheckedStarList.push(element); - } - }); - this.favoriteslist = unCheckedStarList; - var unCheckedList = []; - var checkedList = []; - this.todolist.forEach(element => { - if (element.checked) { - checkedList.push(element); - } else { - unCheckedList.push(element); - } - }); - this.todolist = unCheckedList; - } - if (this.favoriteslist.length == 0) { - this.favoritesTitle = false; - } - if (this.todolist.length == 0) { - this.todoTitle = false; - } - this.selectCount = 0; - this.refreshPageTabs(); - this.backFavorites(); - }, - itemMove: function () { - LOG.info(TAG + 'itemMove' + 'IT ok'); - }, - async getFavoritesContacts() { - var internal = 1; - var sync = 0; - var messageCode = 3001; - var actionData = {}; - httpcontact.contactHttp(internal, sync, messageCode, actionData, (result) => { - if (result.code == 0) { - LOG.error(TAG + 'getFavoritesContacts' + 'result.favoriteslist: '); - this.favoriteslist = result.favoriteslist; - } else { - LOG.info(TAG + 'getFavoritesContacts' + 'plus result is erro:'); - } - }); - }, - async getToDoContacts() { - var internal = 1; - var sync = 0; - var messageCode = 3002; - var actionData = {}; - httpcontact.contactHttp(internal, sync, messageCode, actionData, (result) => { - if (result.code == 0) { - LOG.error(TAG + 'getToDoContacts' + 'result.oftenContacts: '); - this.todolist = result.oftenContacts; - } else { - LOG.info(TAG + 'getToDoContacts' + 'plus result is erro:'); - } - }); - }, -} - diff --git a/entry/src/main/js/default/pages/favorites/favorites.css b/entry/src/main/js/default/pages/favorites/favorites.css deleted file mode 100644 index 61ba0e5..0000000 --- a/entry/src/main/js/default/pages/favorites/favorites.css +++ /dev/null @@ -1,696 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - width: 100%; - height: 100%; - flex-direction: column; - justify-content: flex-start; - align-items: center; -} - -.content { - width: 100%; - height: 120%; - flex-direction: column; - justify-content: flex-start; - align-items: center; - display: flex; -} - -.todo-wraper { - width: 100%; - height: 100%; - margin-top: 15px; - columns: 1; -} - -.todo-item { - width: 100%; - height: 123px; - padding-left: 45px; - padding-right: 45px; - flex-direction: row; - columns: 1; - align-items: stretch; -} - -.todoFavorites { - width: 100%; - height: 123px; - flex-direction: row; - columns: 1; - align-items: stretch; -} - -.todo-title-div { - flex-direction: column; - justify-content: flex-start; - align-items: flex-start; - width: 100%; - margin-left: 40px; - margin-right: 40px; - margin-top: 15px; - display: flex; -} - -.todo-user-title-div { - flex-direction: column; - justify-content: flex-start; - align-items: flex-start; - width: 100%; - margin-right: 40px; - margin-top: 15px; - display: flex; -} - - -.setting-parent-div { - flex-direction: row; - justify-content: center; - align-content: center; - align-items: center; - width: 100%; -} - -.setting-parent-div-text { - width: 100%; - height: 220px; - align-items: flex-end; - margin-bottom: 15px; - margin-top: 15px; -} - -.todo-setting-div { - position: absolute; - right: -15px; - width: 90px; - height: 90px; -} - -.todo-setting-div:active { - background-color: #F2F2F2; -} - -.favorites-title-image { - width: 90px; - height: 90px; -} - -.free-space { - align-content: center; - justify-content: center; - align-items: center; - flex-direction: column; - width: 100%; - height: 100%; -} - -.favorites-image-icon { - margin-top: -180px; - width: 210px; - height: 210px; -} - -.free-space-text { - font-size: 28px; - margin-top: -30px; - color: #999; -} - -.favorites-free-div { - align-content: flex-end; - justify-content: flex-end; - align-items: flex-end; - position: absolute; - width: 96px; - height: 96px; - right: 50px; - bottom: 48px; - border-radius: 60px; - opacity: 1; -} - -.free-favorites-image { - align-content: center; - justify-content: center; - align-items: center; - border-radius: 60px; - width: 96px; - height: 96px; - opacity: 1; - background-color: #007DFE; -} - -.todo-title-div-div { - flex-direction: column; - justify-content: center; - align-items: flex-start; -} - -.todo-title { - width: 200px; - height: 100%; - text-align: left; -} - -.todo-title-name-text { - width: 100%; - height: 90px; - text-align: left; - font-size: 60px; - font-weight: 500; -} - -.todo-title-name-text-change { - width: 50%; - height: 70px; - text-align: left; - font-size: 50px; - font-weight: 500; -} - -.todo-title-name-frequent { - height: 133px; - text-align: left; - font-size: 30px; -} - -.todo-content-div { - flex-direction: row; - justify-content: flex-start; - align-items: center; - width: 100%; - height: 100%; -} - -.first { - width: 15%; -} - - -.todo-name-suffix-div { - width: 80px; - height: 80px; - border-radius: 60px; -} - -.todo-content-div-third { - flex-direction: row; - justify-content: flex-start; - align-items: center; - width: 30%; - height: 100px; - justify-content: flex-end; - right: 0px; - -} - -.todo-content-div-third:active { - background-color: #d3d3d3; -} - -.flex-item-check { - right: -25px; -} - -.todo-content-div-div { - flex-direction: column; - justify-content: center; - align-items: flex-start; - margin-start: 32px; -} - -.todo-content-name { - width: 100%; - text-align: left; - font-size: 32px; - font-weight: 600; - max-lines: 1; - text-overflow: ellipsis; -} - -.todo-content { - width: 100%; - margin-top: 20px; - text-align: left; - max-lines: 1; - text-overflow: ellipsis; -} - -.todo-divider-favorite-div { - width: 100%; -} - -.todo-divider-div { - flex-direction: column; - justify-content: flex-start; - align-items: flex-start; - margin-left: 32px; - position: absolute; - bottom: 0px; - width: 98%; -} - -.todo-divider { - line-cap: round; - stroke-width: 1px; - color: #ccc; -} - -.todo-divider-favorite { - stroke-width: 1px; - color: #ccc; - width: 95%; - margin-left: 0px; - margin-top: 3px; -} - -.todo-name-stack { - flex-direction: column; - align-items: center; - justify-content: center; -} - -.todo-content-name-last { - width: 100%; - height: 100%; - color: white; - text-align: center; - font-size: 40px; - allow-scale: true; - font-weight: 600; -} - -.flex-item-image { - width: 50px; - height: 50px; - margin-right: 10px; -} - -.dialog-main { - width: 900px; - margin-left: 25px; - margin-right: 25px; - margin-bottom: 25px; -} - -.dialog-main-simple { - width: 900px; - margin-left: 25px; - margin-right: 25px; - margin-bottom: 25px; -} - -.dialog-div { - flex-direction: column; - align-items: center; - height: 550px; -} - -.dialog-div-simple { - width: 85%; - flex-direction: column; - align-items: center; -} - -.inner-div { - width: 85%; - flex-direction: column; - align-items: flex-start; - justify-content: center; - height: 150px; -} - -.inner-div-simple { - margin-top: 40px; - margin-bottom: 25px; - height: 80px; -} - -.dialog-inner-txt { - font-size: 40px; - font-weight: 600; - text-align: left; - margin-left: 15px; -} - -.dialog-todo-wraper { - width: 92%; - columns: 1; -} - -.dialog-todo-wraper-simple { - columns: 1; -} - -.dialog-todo-item { - width: 100%; - height: 120px; - flex-direction: row; - columns: 1; - align-items: stretch; -} - -.dialog-todo-content-div { - flex-direction: row; - justify-content: flex-start; - align-items: center; - height: 100px; - width: 80%; - margin-top: 8px; - margin-bottom: 8px; -} - -.dialog-todo-content-img-div { - flex-direction: row; - justify-content: center; - align-items: center; - margin-top: 15px; - margin-bottom: 10px; - width: 20%; - height: 50px; -} - -.one { - width: 20%; - justify-content: center; - align-items: center; -} - -.dialog-todo-content-img { - width: 65px; - height: 65px; -} - -.dialog-todo-content-div-div { - flex-direction: column; - justify-content: center; - align-items: flex-start; - height: 100px; - width: 100%; -} - -.dialog-todo-content-name { - width: 100%; - text-align: left; - font-size: 32px; - font-weight: 600; - margin-bottom: 10px; -} - -.dialog-todo-content { - width: 100%; - text-align: left; - max-lines: 1; - text-overflow: ellipsis; -} - -.inner-btn { - width: 100%; - height: 80px; - justify-content: space-around; - align-items: center; - margin-top: 15px; - margin-bottom: 15px; -} - -.inner-btn-simple { - height: 100px; - margin-top: 20px; -} - -.inner-btn-simple-set-default { - height: 100px; - margin-top: 10px; - margin-bottom: 5px; -} - -.favorites-button-div { - align-content: center; - justify-content: center; - align-items: center; - width: 96px; - height: 96px; - right: 50px; - bottom: 48px; - border-radius: 60px; - position: absolute; - opacity: 1; -} - -.favorites-image { - align-content: center; - justify-content: center; - align-items: center; - border-radius: 60px; - width: 96px; - height: 96px; - opacity: 1; - background-color: #254ff7; -} - -.favorites-image:active { - align-content: center; - justify-content: center; - align-items: center; - border-radius: 60px; - width: 92px; - height: 92px; - opacity: 1; - background-color: #254ff7; -} - -.first-dialog-main { - width: 900px; - margin-left: 25px; - margin-right: 25px; - margin-bottom: 25px; -} - -.first-dialog-div { - flex-direction: column; - align-items: center; - height: 580px; -} - -.first-inner-div { - width: 85%; - flex-direction: column; - align-items: flex-start; - justify-content: center; - height: 120px; -} - -.first-dialog-inner-txt { - font-size: 40px; - font-weight: 600; -} - -.first-dialog-todo-wraper { - width: 92%; - height: 55%; - columns: 1; -} - -.first-dialog-todo-item { - width: 85%; - height: 101px; - flex-direction: row; - columns: 1; - align-items: stretch; - margin-left: 25px; - margin-right: 25px; - margin-top: 5px; - margin-bottom: 5px; -} - -.first-dialog-todo-content-div { - flex-direction: row; - justify-content: flex-start; - align-items: center; -} - -.three { - width: 20%; - justify-content: center; - align-items: center; -} - -.first-dialog-todo-content-div-div { - flex-direction: column; - justify-content: center; - align-items: flex-start; -} - -.first-dialog-todo-content-name { - width: 100%; - text-align: left; - font-size: 32px; - font-weight: 600; - margin-top: 8px; -} - -.first-dialog-todo-content { - width: 100%; - text-align: left; - max-lines: 1; - text-overflow: ellipsis; - font-size: 28px; - color: #808080; -} - -.first-dialog-todo-content-img { - width: 50px; - height: 50px; -} - -.first-dialog-content-div { - width: 85%; - height: 100px; - columns: 1; - margin-left: 25px; - margin-right: 25px; - flex-direction: row; - justify-content: flex-start; - align-items: center; -} - -.fist-dialog-todo-content { - width: 100%; - text-align: left; - max-lines: 1; - text-overflow: ellipsis; -} - -.fist-dialog-checkbox { - width: 20%; -} - -.todo-item-content-image { - width: 80px; - height: 80px; - border-radius: 80px; -} - -.todo-item-content-div { - flex-direction: row; - align-items: center; - justify-content: center; - width: 100%; -} - -.todo-divider-share { - stroke-width: 1px; - color: #d3d3d3; -} - -.todo-title-div-favorite { - flex-direction: row; - justify-content: space-between; - align-items: flex-start; - width: 100%; - height: 120px; - margin-left: 55px; - margin-right: 25px; - margin-top: 15px; -} - -.contacts-back-but-div-favorite { - width: 93px; - height: 93px; - border-radius: 15px; - align-items: center; -} - -.contacts-back-image-favorite { - margin-left: 21px; - width: 50px; - height: 50px; - border-radius: 10px; -} - -.todo-setting-div-favorite { - border-radius: 10px; - margin-right: 0px; - width: 90px; - height: 90px; - align-content: center; - justify-content: center; - align-items: center; - background-color: #FFFFFF; -} - -.todo-setting-div-favorite:active { - background-color: #F2F2F2; -} - -.contacts-title-operation-favorite { - width: 90px; - height: 90px; -} - -.hidden-setting-favorite { - animation-name: setting-hidden-animation; - animation-duration: 100ms; - animation-fill-mode: forwards; -} - -.show-setting-favorite { - animation-name: setting-show-animation; - animation-duration: 700ms; - animation-fill-mode: forwards; -} - -.hidden-back-favorite { - animation-name: back-hidden-animation; - animation-duration: 700ms; - animation-fill-mode: forwards; -} - -.show-back-init-favorite { - animation-name: back-show-animation; - animation-duration: 0ms; - animation-fill-mode: forwards; -} - -.show-back-favorite { - animation-name: back-show-animation; - animation-duration: 100ms; - animation-fill-mode: forwards; -} - -.input-radio { - margin-left: 0px; - height: 120px; -} - -.input-radio-text { - flex-direction: row; - align-content: center; - align-items: center; - height: 120px; -} - -.btn-txt-favorite { - width: 100%; - text-align: center; - color: #0000ff; -} - -.records-detail-contacts-operate-blank { - height: 200px; - width: 100%; - position: absolute; -} \ No newline at end of file diff --git a/entry/src/main/js/default/pages/favorites/favorites.hml b/entry/src/main/js/default/pages/favorites/favorites.hml deleted file mode 100644 index a367b4d..0000000 --- a/entry/src/main/js/default/pages/favorites/favorites.hml +++ /dev/null @@ -1,143 +0,0 @@ - - -
-
-
-
-
- -
-
-
- - {{$t('value.favorites.page.title') }} - -
-
-
- - {{ $t('value.favorites.page.noFavorites') }} - -
- -
-
- - - -
- {{$t('group.favorites')}} - -
-
- -
- -
- -
- -
- {{ $item.nameSuffix }} -
-
- -
-
-
-
- {{ - ($item.emptyNameData && $item.emptyNameData.length > 0) ? $item.emptyNameData - : $t('value.contacts.page.item.noName') - }} - -
-
- -
-
- -
-
-
- - -
-
- -
-
-
-
- -
- -
-
- - {{ favorites_dialog_title }} - -
- - -
- -
-
-
- {{ $item.phoneNumber }} - {{ - (($item.labelName == undefined || $item.labelName == '') ? '' : ($item.labelName)) }} - - - -
-
-
-
-
- - {{ $t('value.favorites.page.dialog.setDefaultPhoneNumber') }} -
-
- {{ $t('value.contacts.page.menu.shareInfo.cancelTxt') }} -
-
-
- - - -
diff --git a/entry/src/main/js/default/pages/favorites/favorites.js b/entry/src/main/js/default/pages/favorites/favorites.js deleted file mode 100644 index d1eb911..0000000 --- a/entry/src/main/js/default/pages/favorites/favorites.js +++ /dev/null @@ -1,338 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import prompt from '@system.prompt'; -import router from '@system.router'; -import favoritesModel from '../../../default/model/FavoritesModel.js'; -import LOG from '../../utils/ContactsLog.js'; -import Constants from '../../../default/common/constants/Constants.js'; -var TAG = 'favorite'; - - -const GET_OFTEN_CONTACT = 3002 // Get a list of common uses - -const NUMBERS_MEANING = { - HEADER_MIN_HEIGHT: 70, - HEADER_MAX_HEIGHT: 220, - HEADER_MIN_FONT_SIZE: 50, - HEADER_MAX_FONT_SIZE: 60, - HEADER_MIN_TO_MAX_FONT_SIZE: 10, - HEADER_MIN_TO_MAX_HEIGHT_SIZE: 150, -}; -// On behalf of the synchronization -const ACTION_SYNC = 0; -// 1 represents InternalAbility without interface jump -const ABILITY_TYPE_INTERNAL = 1; -const SET_DEFAULT = 1; - -export default { - data: { - props: ['isInitFavorite', 'favoritesList'], - favoritesList: [], - todoList: [], - numRecords: [], - simCardInfo: '', - dialoglist: '', - layoutState: true, - favorites_dialog_title: '', - dialogEditNumbers: [], - showEditNumbers: '', - isChecked: false, - settingDivClass: 'todo-setting-div', - isShow: true, - defaultPhoneNumberChecked: false, - favoritesIndex: '', - todoIndex: '', - ic_free_space: '/res/image/ic_contacts_favorite_me_36.svg', - ic_avatar_normal_light: '/res/image/ic_contacts_name_m.svg', - ic_phonecall_m_block: '/res/image/ic_phonecall_m_block.svg', - simpleDialogContactId: '', - globalX: 0, - globalY: 0, - pYMove: 0, - headerFavoriteHeight: NUMBERS_MEANING.HEADER_MAX_HEIGHT, - headerFavoriteFontSize: NUMBERS_MEANING.HEADER_MAX_FONT_SIZE, - isScrollTopPosition: false, - onScrollTopNum: 0, - dialogheight: 0, - }, - onInit() { - this.favorites_dialog_title = this.$t('value.favorites.page.dialog.title'); - this.settingDivClass = 'todo-setting-div'; - }, - onShow() { - }, - onRefreshFavorite: function () { - this.conciseLayoutInit(); - this.getFavoritesContacts(); - }, - - conciseLayoutInit: function () { - let data = this.$app.$def.globalData.storage.getSync('contacts_settings_concise_layout_switch', 'false'); - this.layoutState = data == 'true' ? false : true; - }, - showRecordDetails: function (contactId) { - this.$app.$def.setRefreshFavorite(); - router.push({ - uri: 'pages/contacts/contactDetail/contactDetail', - params: { - contactId: contactId, - isNewSource: true, - } - }); - }, - showFavoriteDialog: function (contactId) { - var phoneNumberLabelNames = [this.$t('accountants.house'), this.$t('accountants.phone'), this.$t('accountants.unit'), this.$t('accountants.unit fax'), this.$t('accountants.home fax'), this.$t('accountants.pager'), this.$t('accountants.others'), '', '', '', '', this.$t('accountants.switchboard')]; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - favoritesModel.queryPhoneNumByContactId(DAHelper, contactId, phoneNumberLabelNames, result => { - if (result.code == 0 && result.data) { - if (result.data.phoneNumbers == undefined || result.data.phoneNumbers.length == 0) { - prompt.showToast({ - message: this.$t('value.favorites.page.dialog.noAvailablePhoneNumber') - }); - } else if (result.data.phoneNumbers.length == 1) { - - this.showEditNumbers = result.data.phoneNumbers[0].phoneNumber; - - this.callOut(this.showEditNumbers); - } else { - var setDefaultNum = false; - for (var i = 0; i < result.data.phoneNumbers.length; i++) { - if (SET_DEFAULT == result.data.phoneNumbers[i].isPrimary) { - this.showEditNumbers = result.data.phoneNumbers[i].phoneNumber; - setDefaultNum = true; - break; - } - } - if (setDefaultNum) { - this.$element('simpledialog').close(); - this.callOut(this.showEditNumbers); - } else { - this.dialogEditNumbers = result.data.phoneNumbers; - if (this.dialogEditNumbers.length >= 6) { - this.dialogheight = 720; - } else { - this.dialogheight = this.dialogEditNumbers.length * 120 - } - this.simpleDialogContactId = contactId; - this.$element('simpledialog').show(); - } - } - } else { - prompt.showToast({ - message: 'No data available!' - }); - } - }); - }, - cancelSimpleSchedule: function (event) { - this.$element('simpledialog').close(); - }, - - dialogFavoriteClick: function (phoneNumber) { - this.showEditNumbers = phoneNumber; - this.$element('simpledialog').close(); - if (this.defaultPhoneNumberChecked) { - this.defaultPhoneNumberChecked = false; - var actionData = {}; - actionData.contactId = this.simpleDialogContactId; - actionData.phoneNumber = this.showEditNumbers.replace(/\s+/g, ''); - actionData.isPrimary = SET_DEFAULT; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - favoritesModel.setOrCancelDefaultPhoneNumber(DAHelper, actionData, result => { - }); - } - - this.callOut(this.showEditNumbers); - }, - - checkboxClick: function (event) { - this.isChecked = !this.isChecked; - }, - settingSelected: function (event) { - if ('editor' == event.value) { - this.isShow = false; - this.$emit('eventType', { - menuShow: false - }); - } - }, - longFavoritesPress: function (contactId, pressIndex) { - var title = this.$t('value.contacts.groupsPage.alreadySelect').replace('num', '1'); - router.push({ - uri: 'pages/contacts/selectContactsList/selectContactsList', - params: { - type: 'editFavorites', - contactId: contactId, - pressIndex: pressIndex, - title: title - }, - }) - }, - longTodoPress: function (index) { - this.$emit('eventType', { - menuShow: false - }); - this.isShow = false; - this.favoritesIndex = ''; - this.todoIndex = index; - }, - - favoritesDeleteBack: function (e) { - this.isShow = e.detail.isShow; - this.favoritesList = e.detail.collection; - this.todoList = e.detail.frequent; - this.$emit('eventType', { - menuShow: true - }); - }, - - - addTouchEnd: function (event) { - router.push({ - uri: 'pages/contacts/selectContactsList/selectContactsList', - params: { - type: 'getContactsListFavorites' - }, - }) - }, - - getFavoritesContacts() { - var actionData = { - limit: 2000, - page: 0, - star: 1 - } - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - favoritesModel.queryFavoritesContacts(DAHelper, actionData, result => { - if (result.code == 0) { - if (result.resultList.length > 0) { - this.favoritesList = result.resultList; - } else { - this.favoritesList = []; - } - if (result.todoList.length > 0) { - this.todoList = result.todoList; - } else { - this.todoList = []; - } - } else { - this.favoritesList = []; - this.todoList = []; - LOG.info(TAG + 'getFavoritesContacts' + 'plus result is error:'); - } - }); - - - }, - getToDoContacts() { - var actionData = { - limit: 2000, - page: 0, - star: 1 - } - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - favoritesModel.queryFrequentlyContact(DAHelper, actionData, result => { - if (result.code == 0 && result.todoList.length > 0) { - LOG.error(TAG + 'getToDoContacts' + 'result.todoList: '); - this.todoList = result.todoList; - } else { - this.todoList = []; - LOG.info(TAG + 'getToDoContacts' + 'plus result is erro:'); - } - }); - }, - - editOnSelected: function (event) { - var title = this.$t('value.contacts.groupsPage.noSelect'); - if (event.value == 'edit') { - router.push({ - uri: 'pages/contacts/selectContactsList/selectContactsList', - params: { - type: 'editFavorites', - title: title - }, - }) - } - }, - - callOut(phoneNumber) { - this.$app.$def.call(phoneNumber); - }, - - simpleDialogItemClick: function (status) { - this.defaultPhoneNumberChecked = !status; - }, - - onTouchStartList: function (e) { - this.globalX = e.touches[0].globalX; - this.globalY = e.touches[0].globalY; - this.pYStart = e.touches[0].globalY; - }, - - onTouchListMove: function (e) { - this.pYMove = this.pYStart - e.touches[0].globalY; - if (this.pYMove != 0 && this.pYMove > 0) { - if (this.headerFavoriteHeight <= NUMBERS_MEANING.HEADER_MIN_HEIGHT) { - this.isScrollTopPosition = true; - this.headerFavoriteFontSize = NUMBERS_MEANING.HEADER_MIN_FONT_SIZE; - this.headerFavoriteHeight = NUMBERS_MEANING.HEADER_MIN_HEIGHT; - } else { - this.headerFavoriteHeight = this.headerFavoriteHeight - this.pYMove; - this.headerFavoriteFontSize = NUMBERS_MEANING.HEADER_MIN_FONT_SIZE + NUMBERS_MEANING.HEADER_MIN_TO_MAX_FONT_SIZE * ((this.headerFavoriteHeight - NUMBERS_MEANING.HEADER_MIN_HEIGHT) / NUMBERS_MEANING.HEADER_MIN_TO_MAX_HEIGHT_SIZE); - } - } else if (this.pYMove != 0 && this.pYMove < 0) { - if (this.headerFavoriteHeight >= NUMBERS_MEANING.HEADER_MAX_HEIGHT) { - this.headerFavoriteFontSize = NUMBERS_MEANING.HEADER_MAX_FONT_SIZE; - this.isScrollTopPosition = false; - } else { - this.headerFavoriteHeight = this.headerFavoriteHeight - this.pYMove; - this.headerFavoriteFontSize = NUMBERS_MEANING.HEADER_MIN_FONT_SIZE + NUMBERS_MEANING.HEADER_MIN_TO_MAX_FONT_SIZE * ((this.headerFavoriteHeight - NUMBERS_MEANING.HEADER_MIN_HEIGHT) / NUMBERS_MEANING.HEADER_MIN_TO_MAX_HEIGHT_SIZE); - } - } else { - } - }, - - onTouchFavoriteEnd: function (e) { - if (this.pYMove != 0 && this.pYMove > 0 && this.headerFavoriteHeight <= NUMBERS_MEANING.HEADER_MIN_HEIGHT) { - - this.headerFavoriteHeight = NUMBERS_MEANING.HEADER_MIN_HEIGHT; - this.headerFavoriteFontSize = NUMBERS_MEANING.HEADER_MIN_FONT_SIZE; - } else if (this.pYMove != 0 && this.pYMove < 0 && this.headerFavoriteHeight >= NUMBERS_MEANING.HEADER_MAX_HEIGHT && this.isScrollTopPosition == true) { - - this.headerFavoriteHeight = NUMBERS_MEANING.HEADER_MAX_HEIGHT; - this.headerFavoriteFontSize = NUMBERS_MEANING.HEADER_MAX_FONT_SIZE; - } else if (this.pYMove != 0 && this.pYMove < 0 && this.onScrollTopNum == 0) { - - this.headerFavoriteHeight = NUMBERS_MEANING.HEADER_MAX_HEIGHT; - this.headerFavoriteFontSize = NUMBERS_MEANING.HEADER_MAX_FONT_SIZE; - } else { - this.headerFavoriteFontSize = NUMBERS_MEANING.HEADER_MIN_FONT_SIZE + NUMBERS_MEANING.HEADER_MIN_TO_MAX_FONT_SIZE * ((this.headerFavoriteHeight - NUMBERS_MEANING.HEADER_MIN_HEIGHT) / NUMBERS_MEANING.HEADER_MIN_TO_MAX_HEIGHT_SIZE); - } - if (this.headerFavoriteHeight > NUMBERS_MEANING.HEADER_MAX_HEIGHT) { - this.headerFavoriteHeight = NUMBERS_MEANING.HEADER_MAX_HEIGHT; - } - if (this.headerFavoriteFontSize > NUMBERS_MEANING.HEADER_MAX_FONT_SIZE) { - this.headerFavoriteFontSize = NUMBERS_MEANING.HEADER_MAX_FONT_SIZE; - } - this.pYMove = 0; - this.pYStart = 0; - }, - - onScrollFavoriteTop: function (e) { - this.isScrollTopPosition = true; - this.onScrollTopNum = this.onScrollTopNum + 1; - }, -} - diff --git a/entry/src/main/js/default/pages/index/index.hml b/entry/src/main/js/default/pages/index/index.hml deleted file mode 100644 index 4b40e2e..0000000 --- a/entry/src/main/js/default/pages/index/index.hml +++ /dev/null @@ -1,16 +0,0 @@ - -
-
diff --git a/entry/src/main/js/default/pages/index/index.js b/entry/src/main/js/default/pages/index/index.js deleted file mode 100644 index fa6fce8..0000000 --- a/entry/src/main/js/default/pages/index/index.js +++ /dev/null @@ -1,205 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import router from '@system.router'; -import Utils from '../../../default/utils/utils.js'; -import LOG from '../../utils/ContactsLog.js' -import cardModel from '../../../default/model/AccountantsModel.js' -import Constants from '../../../default/common/constants/Constants.js'; -var TAG = 'index'; - -export default { - data: { - params: {}, - uri: '', - newNumberContactDetail: {} - }, - onInit() { - LOG.info("logMessage onInit index.js"); - }, - onShow() { - let featureAbility = this.$app.$def.featureAbility; - featureAbility.getWant() - .then((Want) => { - LOG.info(TAG + 'onShow' + 'logMessage Operation successful. Data: ' + Want); - if (Utils.isEmpty(Want.uri) && Utils.isEmpty(Want.parameters.pageFlag)) { - this.goToContacts(); - } else if (!Utils.isEmpty(Want.uri)) { - this.pageRouteHandler({ - pageFlag: Want.uri - }); - } else { - this.pageRouteHandler(Want.parameters); - } - - }).catch((error) => { - LOG.error(TAG + 'onShow' + 'logMessage Operation failed. Cause: ' + error); - }) - }, - - pageRouteHandler: function (routeMessage) { - if (Utils.isEmpty(routeMessage.pageFlag)) { - this.goToContacts(); - return; - } - switch (routeMessage.pageFlag) { - case 'page_flag_contacts': - this.uri = 'pages/navigation/navigation'; - this.params = { - 'navigationType': 'contacts' - } - break; - case 'page_flag_edit_before_calling': - this.editBeforeCall(routeMessage.phoneNumber); - break; - case 'page_flag_save_contact': - this.addContacts(routeMessage.phoneNumber); - break; - case 'page_flag_save_exist_contact': - this.saveToContacts(routeMessage.phoneNumber); - break; - case 'page_flag_sms_forward': - this.uri = 'pages/contacts/batchselectcontacts/batchselectcontacts'; - this.params = { - selectType: 1 - } - break; - case 'page_flag_mult_choose': - this.uri = 'pages/contacts/batchselectcontacts/batchselectcontacts'; - this.params = { - selectType: 0 - } - break; - case 'page_flag_choose_contacts': - this.uri = 'pages/contacts/selectContactsList/selectContactsList'; - this.params = { - type: 'mmsChooseContacts' - } - break; - case 'page_flag_contact_details': - this.uri = 'pages/contacts/contactDetail/contactDetail'; - if (routeMessage.contactId) { - this.params = { - 'contactId': routeMessage.contactId, - } - } else { - this.params = { - 'sourceFromCallRecord': true, - 'isNewNumber': true, - 'phoneNumberShow': routeMessage.phoneNumber, - } - } - break; - case 'page_flag_dialer': - this.uri = 'pages/navigation/navigation'; - this.params = { - 'navigationType': 0 - } - break; - case 'page_flag_call_logs': - this.uri = 'pages/navigation/navigation'; - this.$app.$def.dialerStateData.isNeedHideDialer = true; - this.params = { - 'navigationType': 0 - } - break; - case 'page_flag_missed_calls': - this.goToMissedCalls(); - break; - case 'page_flag_card_details': - this.goToMyCard(); - break; - default: - LOG.error(TAG + 'pageRouteHandler' + 'This page is not open.'); - break; - } - router.replace({ - uri: this.uri, - params: this.params - }); - }, - - goToMyCard() { - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - cardModel.getCardDetails(DAHelper, '', (result) => { - var contactForm = result.data; - router.replace({ - uri: 'pages/contacts/card/card', - params: { - contactForm: contactForm, - }, - }); - }); - }, - /* 呼叫前编辑 */ - editBeforeCall(phoneNumber) { - this.$app.$def.dialerStateData.isEditNumber = true; - this.$app.$def.dialerStateData.numTextDialer = phoneNumber; - this.goToDialer(); - }, - - goToMissedCalls() { - this.$app.$def.dialerStateData.isGoToMissedCalls = true; - this.goToDialer(); - }, - - goToContacts() { - router.replace({ - uri: 'pages/navigation/navigation', - params: { - 'navigationType': 'contacts' - } - }) - }, - - goToDialer() { - router.replace({ - uri: 'pages/navigation/navigation', - params: { - 'navigationType': 0, - } - }); - }, - - saveToContacts(phoneNumber) { - router.replace({ - uri: 'pages/contacts/selectContactsList/selectContactsList', - params: { - type: 'saveContacts', - number: phoneNumber, - } - }); - }, - - addContacts(phoneNumber) { - var number = phoneNumber.replace(/[^0123456789+]*/g, ''); - var show = false; - this.uri = 'pages/contacts/accountants/accountants'; - router.replace({ - uri: 'pages/contacts/accountants/accountants', - params: { - phoneNumbers: [ - { - 'labelId': 2, - 'labelName': this.$t('accountants.phone'), - 'phoneNumber': number, - 'phoneAddress': 'N', - 'showP': show, - 'blueStyle': true - } - ] - } - }); - }, -} diff --git a/entry/src/main/js/default/pages/index_demo/index.hml b/entry/src/main/js/default/pages/index_demo/index.hml deleted file mode 100644 index be6757e..0000000 --- a/entry/src/main/js/default/pages/index_demo/index.hml +++ /dev/null @@ -1,43 +0,0 @@ - -
- HelloWorld - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/entry/src/main/js/default/pages/index_demo/index.js b/entry/src/main/js/default/pages/index_demo/index.js deleted file mode 100644 index 5865bbb..0000000 --- a/entry/src/main/js/default/pages/index_demo/index.js +++ /dev/null @@ -1,277 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import commonEvent from '@ohos.commonEvent'; -import wantAgent from '@ohos.wantAgent'; -import notify from '@ohos.notification'; -import sim from '@ohos.telephony.sim'; -import radio from '@ohos.telephony.radio'; -import CONSTANTS from '../../common/constants/Constants.js' - -const EventConstants = { - EVENTPACKAGEADDED: 'usual.event.PACKAGEADDED', - EVENTPACKAGECHANGED: 'usual.event.PACKAGECHANGED', - EVENTPACKAGEREMOVED: 'usual.event.PACKAGEREMOVED', - EVENTSMSRECEIVE: 'usual.event.SMSRECEIVECOMPLETED', - EVENTINCOMINGCALLMISSED: 'usual.event.INCOMINGCALLMISSED' - -} - -let mCommonEventSubscriber = null; -let mCommonEventSubscribeInfo = { - events: [EventConstants.EVENTPACKAGEADDED, - EventConstants.EVENTPACKAGECHANGED, - EventConstants.EVENTPACKAGEREMOVED, - EventConstants.EVENTSMSRECEIVE, - EventConstants.EVENTINCOMINGCALLMISSED - ] -}; - -let id = 1; -const notificationRequest = { - content: { - contentType: notify.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, - normal: { - title: 'voice call', - text: '', - }, - }, - id, - slotType: notify.SlotType.OTHER_TYPES, - deliveryTime: new Date().getTime() -}; - -var TAG = 'indexDemo'; - -export default { - testGetIMEI() { - console.info(TAG + 'testGetIMEI' + 'logMessage testGetIMEI start!!') - radio.getIMEI(0).then(data => { - console.info(TAG + 'testGetIMEI' + 'logMessage testGetIMEI :' + data); - }).catch(err => { - console.info(TAG + 'testGetIMEI' + 'logMessage testGetIMEI error:' + err); - }); - }, - data: {}, - onCreate() { - console.info(TAG + 'onCreate' + 'logMessage onCreate index_demo'); - - }, - onInit() { - console.info(TAG + 'onInit' + 'logMessage onInit index_demo'); - }, - onShow() { - console.info(TAG + 'onShow' + 'logMessage onShow index_demo'); - }, - onDestroy() { - - }, - - subscribeMissedCallsEvent() { - console.info(TAG + 'subscribeMissedCallsEvent' + 'logMessage subscribeMissedCallsEvent!!') - console.info(TAG + 'subscribeMissedCallsEvent' + 'logMessage commonEvent = ' + commonEvent); - commonEvent.createSubscriber(mCommonEventSubscribeInfo, this.createSubscriberCallBack.bind(this)); - console.info(TAG + 'subscribeMissedCallsEvent' + 'logMessage createSubscriber success!!!'); - }, - - unSubscribeMissedCallsEvent() { - console.info(TAG + 'logMessage unSubscribeMissedCallsEvent start!!!'); - commonEvent.unsubscribe(mCommonEventSubscriber, () => { - console.info(TAG + 'logMessage unSubscribe MissedCalls Event success!!!'); - }); - }, - - createSubscriberCallBack(err, data) { - console.info(TAG + 'logMessage createSubscriberCallBack success!!! commonEventSubscriber = ' + data); - mCommonEventSubscriber = data; - commonEvent.subscribe(mCommonEventSubscriber, this.subscriberCallBack.bind(this)); - console.info(TAG + 'createSubscriberCallBack' + 'logMessage subscribe MissedCallsEvent success!!!'); - }, - subscriberCallBack(err, data) { - console.info(TAG + 'subscriberCallBack' + 'logMessage eventData callBackSuccess!!!' + JSON.stringify(data)); - this.sendNotification(data.data); - console.info(TAG + 'subscriberCallBack' + 'logMessage sendNotification success!!!!!'); - }, - sendNotification: async function (text) { - console.info(TAG + 'sendNotification' + 'logMessage send notification start!!!'); - const res = await wantAgent.getWantAgent({ - wants: [{ - bundleName: 'com.ohos.contacts_l2', - abilityName: 'com.ohos.contacts.MainAbility', - }], - operationType: wantAgent.OperationType.START_ABILITY, - requestCode: 0, - wantAgentFlags: [wantAgent.Flags.ONETIMEFLAG], - }); - console.info(TAG + 'sendNotification' + 'logMessage send notification start!!! res = ' + res); - Object.assign(notificationRequest, { - wantAgent: res - }); - console.info(TAG + 'sendNotification' + 'logMessage send notification start!!! Object = ' + Object); - notificationRequest.content.normal.title = text; - notificationRequest.content.normal.text = 'Ring 7 seconds' - console.info(TAG + 'sendNotification' + 'logMessage send notification start!!! text = ' + text); - notify.publish(notificationRequest); - }, - testGetSimSpn() { - console.info(TAG + 'testGetSimSpn' + 'logMessage getSpn start!!') - sim.getSimSpn(0).then(data => { - console.info(TAG + 'testGetSimSpn' + 'logMessage getSPN :' + data); - }).catch(err => { - console.info(TAG + 'testGetSimSpn' + 'logMessage getSpnMessage error:' + err); - }) - }, - testGetSimState() { - console.info(TAG + 'testGetSimState' + 'logMessage getSimState start!!') - sim.getSimState(0).then(data => { - console.info(TAG + 'testGetSimState' + 'logMessage getSimState :' + data); - }).catch(err => { - console.info(TAG + 'testGetSimState' + 'logMessage getSimState error:' + err); - }); - }, - testGetSimMessage() { - console.info(TAG + 'testGetSimMessage' + 'logMessage testGetSimMessage start!!') - radio.getNetworkState(0).then(data => { - console.info(TAG + 'testGetSimMessage' + 'logMessage testGetSimMessage :' + JSON.stringify(data)); - }).catch(err => { - console.info(TAG + 'testGetSimMessage' + 'logMessage testGetSimMessage error:' + err); - }); - }, - testHasSimCard1() { - console.info(TAG + 'testHasSimCard1' + 'logMessage testHasSimCard1 start!!') - sim.hasSimCard(0).then(data => { - console.info(TAG + 'testHasSimCard1' + 'logMessage testHasSimCard1 :' + data); - }).catch(err => { - console.info(TAG + 'testHasSimCard1' + 'logMessage testHasSimCard1 error:' + err); - }); - }, - testHasSimCard2() { - console.info(TAG + 'testHasSimCard2' + 'logMessage testHasSimCard2 start!!') - sim.hasSimCard(1).then(data => { - console.info(TAG + 'testHasSimCard2' + 'logMessage testHasSimCard2 :' + data); - }).catch(err => { - console.info(TAG + 'testHasSimCard2' + 'logMessage testHasSimCard2 error:' + err); - }); - }, - testGetSimCount() { - console.info(TAG + 'testGetSimCount' + 'logMessage testGetSimCount start!'); - this.testGetSimCardCount((count) => { - console.info(TAG + 'testGetSimCount' + 'logMessage simCard count = ' + count); - }); - }, - async testGetSimCardCount(callBack) { - var hasCard1 = false; - try { - hasCard1 = await sim.hasSimCard(0); - } catch { - - } - console.info(TAG + 'testGetSimCardCount' + 'logMessage hasCard1 :' + hasCard1); - var hasCard2 = false - try { - hasCard2 = await sim.hasSimCard(1); - } catch { - - } - console.info(TAG + 'testGetSimCardCount' + 'logMessage hasCard2 :' + hasCard2); - var count = 0; - if (hasCard1 && hasCard2) { - count = 2; - } else if (hasCard1 || hasCard2) { - count = 1; - } else { - count = 0; - } - callBack(count); - }, - testInsertCallLog: async function () { - var DAHelper = this.$app.$def.getDAHelper(CONSTANTS.uri.CALLLOG_DB_URI); - var phoneNumbers = ['18792404709', '19991445854', '19891445853', '18161845409']; - var formatPhoneNumbers = ['187 9240 4709', '199 9144 5854', '198 9144 5853', '181 6184 5409']; - var callTypes = ['1', '2', '3', '5']; - var numIndex = Math.floor(Math.random() * 4); - var typeIndex = Math.floor(Math.random() * 4); - var now = new Date(); - var timestamp = now.getTime(); - var insertValues = { - 'phone_number': phoneNumbers[numIndex], - 'display_name': '', - 'call_direction': callTypes[typeIndex], - 'voicemail_uri': '', - 'sim_type': '', - 'is_hd': '0', - 'is_read': '', - 'ring_duration': '123456', - 'talk_duration': '123456', - 'format_number': formatPhoneNumbers[numIndex], - 'quicksearch_key': '', - 'number_type': '', - 'begin_time': '', - 'end_time': '', - 'answer_state': '', - 'create_time': timestamp + '', - 'number_location': 'Xi an', - 'photo_id': '', - 'photo_uri': '', - 'country_iso_code': '', - }; - console.info(TAG + 'testInsertCallLog' + 'logMessage Insert calllog uri = ' + CONSTANTS.uri.CALL_LOG_URI); - DAHelper.insert( - CONSTANTS.uri.CALL_LOG_URI, - insertValues, - ).then(data => { - this.contactId = data; - console.info(TAG + 'testInsertCallLog logMessage Insert calllog result success! data = ' + data.length); - }).catch(error => { - console.info(TAG + 'testInsertCallLog' + 'logMessage insert error:' + error); - }); - }, - - testInsertVoiceMail: async function () { - var DAHelper = this.$app.$def.getDAHelper(CONSTANTS.uri.VOICEMAIL_DB_URI); - var phoneNumbers = ['12599', '12596']; - var numIndex = Math.floor(Math.random() * 2); - var duration = 10 + Math.floor(Math.random() * 10); - var now = new Date(); - var timestamp = now.getTime(); - var insertValues = { - 'phone_number': phoneNumbers[numIndex], - 'display_name': '', - 'voicemail_type': 'China Mobile', - 'voicemail_uri': '', - 'voice_file_size': '0', - 'voice_duration': duration, - 'voice_status': '', - 'origin_type': '', - 'create_time': timestamp + '' - }; - console.info(TAG + 'testInsertVoiceMail' + 'logMessage Insert voicemail uri = ' + CONSTANTS.uri.VOICEMAIL_URI); - DAHelper.insert( - CONSTANTS.uri.VOICEMAIL_URI, - insertValues, - ).then(data => { - console.info(TAG + 'testInsertVoiceMail' + 'logMessage Insert voicemail result success! data = ' + data); - }).catch(error => { - console.info(TAG + 'testInsertVoiceMail' + 'logMessage insert error:' + error); - }); - }, - testGetDefaultSimSlot() { - console.info(TAG + 'testGetDefaultSimSlot' + 'logMessage testGetDefaultSimSlot start'); - sim.getDefaultVoiceSlotId().then(data => { - console.info(TAG + 'testGetDefaultSimSlot' + 'logMessage getDefaultVoiceSlotId :' + data); - }).catch(err => { - console.info(TAG + 'testGetDefaultSimSlot' + 'logMessage getDefaultVoiceSlotId error:' + err); - }); - } -} diff --git a/entry/src/main/js/default/pages/navigation/navigation.css b/entry/src/main/js/default/pages/navigation/navigation.css deleted file mode 100644 index 2e2ac29..0000000 --- a/entry/src/main/js/default/pages/navigation/navigation.css +++ /dev/null @@ -1,124 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -.container { - width: 100%; - height: 100%; - flex-direction: column; - justify-content: flex-start; - align-items: center; -} - -.content-div { - width: 100%; - align-items: center; - flex-direction: column; - justify-content: flex-start; -} - -.container-stack { - height: 100%; - width: 100%; -} - -.contacts-image { - align-content: center; - justify-content: center; - align-items: center; - border-radius: 60px; - width: 96px; - height: 96px; - opacity: 1; - background-color: #254ff7; -} - -.flex-box { - position: absolute; - bottom: 0px; - justify-content: space-around; - align-items: center; - width: 100%; - height: 120px; - background-color: #F9F9F9; -} - -.flex-box-box { - flex-direction: column; - justify-content: space-around; - align-items: center; - width: 100%; - height: 100%; - background-color: #fff; - border-radius: 12px; -} - -.flex-box-box:active { - flex-direction: column; - justify-content: space-around; - align-items: center; - width: 100%; - height: 100%; - background-color: #d3d3d3; - border-radius: 12px; -} - -.flex-item { - width: 160px; - height: 55px; - border-radius: 16px; - justify-content: center; -} - -.color-primary { - background-repeat: no-repeat; - background-position: top; -} - -.color-warning { - background-repeat: no-repeat; - background-position: top; -} - -.color-success { - background-repeat: no-repeat; - background-position: top; -} - -.flex-item-image { - margin-top: 10px; - width: 50px; - height: 50px; -} - -.flex-item-text { - text-align: center; - font-size: 25px; - color: #686868; -} - -.flex-item-text-focus { - text-align: center; - font-size: 25px; - color: #254ff7; -} - - -.contacts-mask-layer { - position: absolute; - opacity: 0.5; - background-color: #797979; - height: 92%; - width: 100%; - bottom: 0px; -} diff --git a/entry/src/main/js/default/pages/navigation/navigation.hml b/entry/src/main/js/default/pages/navigation/navigation.hml deleted file mode 100644 index 549ed1c..0000000 --- a/entry/src/main/js/default/pages/navigation/navigation.hml +++ /dev/null @@ -1,58 +0,0 @@ - - - - -
- -
-
- - -
-
- - -
-
- -
-
-
- -
- -
- - {{ $item.text }} - -
-
-
-
-
-
-
-
diff --git a/entry/src/main/js/default/pages/navigation/navigation.js b/entry/src/main/js/default/pages/navigation/navigation.js deleted file mode 100644 index 3fd665d..0000000 --- a/entry/src/main/js/default/pages/navigation/navigation.js +++ /dev/null @@ -1,286 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import Utils from '../../../default/utils/utils.js'; -import favoritesModel from '../../../default/model/FavoritesModel.js'; -import callLogService from '../../../default/model/CalllogModel.js'; -import LOG from '../../utils/ContactsLog.js'; -import Constants from '../../common/constants/Constants.js'; -var TAG = 'navigation'; - -export default { - data: { - phoneShow: true, - contactsShow: false, - menus: '', - cindex: 0, - menuShow: true, - isEndCall: false, - refreshCallLog: false, - refreshDialerState: false, - dialerRefreshTimeOut: 0, - navigationType: '', - isInitIndex: true, - isInit: false, - isInitFavorite: false, - clipboardDelayId: 0, - dialer: { - numTextValue: '', - copyDisabled: true, - clipBoardData: '', - showClipBoard: false, - recordList: [], - missedList: [], - voicemailList: [], - logPageIndex: 0, - logPageSize: 10 - }, - isMaskLayer: false, - cancelMaskLayer: false, - contentHeight: '92%', - favoritesList: [] - }, - onInit() { - this.menus = [{ - 'text': this.$t('value.phone'), - 'cimg': this.$t('svg.phone.selected'), - 'ucimg': this.$t('svg.phone.unselected') - }, - { - 'text': this.$t('value.contacts.tab'), - 'cimg': this.$t('svg.contacts.selected'), - 'ucimg': this.$t('svg.contacts.unselected') - }, - { - 'text': this.$t('value.favorites.tab'), - 'cimg': this.$t('svg.favorites.selected'), - 'ucimg': this.$t('svg.favorites.unselected') - } - ]; - if (this.sourceFavorites && this.sourceFavorites == 'favorites') { - this.changeMenu(2, false); - } else if (this.navigationType && this.navigationType == 'contacts') { - this.changeMenu(1, false); - } else { - this.changeMenu(0, false); - } - }, - changeMenu: function (index, isRefresh) { - switch (index) { - case 0: - this.phoneShow = true; - this.contactsShow = false; - if (isRefresh) { - this.callLogRefresh(); - } - break; - case 1: - this.phoneShow = false; - this.contactsShow = true; - if (isRefresh) { - this.refreshContacts(); - } - break; - case 2: - this.phoneShow = false; - this.contactsShow = false; - this.$child('selfDefineFavorites').onRefreshFavorite(); - break; - default: - break; - } - - this.cindex = index; - this.$app.$def.globalData.menuType = this.cindex; - }, - onReady() { - LOG.info(TAG + 'onReady' + 'logMessage: onReady index'); - }, - callLogRefresh() { - var mergeRule = this.$app.$def.globalData.storage.getSync('call_log_merge_rule', 'from_time'); - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CALLLOG_DB_URI); - callLogService.getAllCalls(DAHelper, mergeRule, data => { - this.$app.$def.globalData.callLogTotalData = data; - this.getCallLog(this.dialer.logPageIndex, this.dialer.logPageSize); - this.getMissedCalls(this.dialer.logPageIndex, this.dialer.logPageSize); - this.getVoicemailList(); - for (let i = 0; i < this.$app.$def.globalData.refreshFunctions.length; i++) { - this.$app.$def.globalData.refreshFunctions[i](); - } - }); - }, - getVoicemailList() { - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.VOICEMAIL_DB_URI); - callLogService.getVoicemailList(DAHelper, (voicemailList) => { - this.$app.$def.globalData.voicemailTotalData.voicemailList = voicemailList; - this.$app.$def.globalData.voicemailTotalData.voicemailCount = voicemailList.length; - this.dialer.voicemailList = voicemailList; - }); - }, - onShow() { - switch (this.$app.$def.globalData.menuType) { - case 0: - this.changeMenu(0); - this.callLogRefresh(); - LOG.info(TAG + 'onShow' + 'logMessage navigationType = ' + this.$app.$def.globalData.navigationType); - this.$app.$def.showClipBoardInit = true; - break; - case 1: - this.changeMenu(1); - LOG.info(TAG + 'onShow' + 'navigationType refresh contacts.'); - this.refreshContacts(); - break; - case 2: - this.changeMenu(2); - if (this.$app.$def.globalData.refreshFavorites) { - this.isInitFavorite = !this.isInitFavorite; - this.$app.$def.clearRefreshFavorite(); - this.$child('selfDefineFavorites').onRefreshFavorite(); - } - break; - default: - break; - } - }, - onHide() { - LOG.info(TAG + 'onHide' + 'logMessage: onHide index'); - }, - onDestroy() { - LOG.info(TAG + 'onDestroy' + 'logMessage: onDestroy index'); - }, - hiddenMenu: function (e) { - this.menuShow = e.detail.menuShow; - this.isMaskLayer = e.detail.isMaskLayer; - this.contentHeight = e.detail.contentHeight; - }, - favoritesLongPressed: function (e) { - this.menuShow = e.detail.menuShow; - }, - onBackPress() { - LOG.info(TAG + 'onBackPress' + 'logMessage onBackPress navigation'); - var isCustom = false; - if (this.$app.$def.globalData.navigationBackPressFunctions.length > 0) { - this.$app.$def.globalData.navigationBackPressFunctions.forEach((backPressFunction) => { - isCustom = backPressFunction() - LOG.info(TAG + 'onBackPress' + 'logMessage onBackPress navigation b =' + isCustom); - }); - } - return isCustom; - }, - updateContacts: function (e) { - this.isExist = e.detail.isExist; - this.dataStatus = e.detail.dataStatus; - this.contactsList = e.detail.contactsList; - this.contactCount = e.detail.contactCount; - }, - updateFavorites: function (e) { - this.favoritesList = e.detail.favoritesList; - }, - - sleep: function (milliSeconds) { - var startTime = new Date().getTime(); - while (new Date().getTime() < startTime + milliSeconds) { - } - }, - maskLayerChange: function () { - this.cancelMaskLayer = !this.cancelMaskLayer; - }, - goToContacts: function () { - LOG.error(TAG + 'goToContacts' + 'eventData is:+goToContacts'); - this.phoneShow = false; - this.contactsShow = true; - this.touchContactsStart(); - this.touchContactsEnd(); - this.clickContacts(); - }, - - batchDeleteStart: function () { - this.$app.$def.dialerStateData.batchDelete = true; - }, - refreshContacts: async function () { - this.$child('selfDefineContacts').onRefresh(); - }, - refreshFavorites: async function () { - this.sleep(600); - var actionData = { - limit: 2000, - page: 0, - star: 1 - } - var DAHelper = await this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - favoritesModel.queryFavoritesContacts(DAHelper, actionData, result => { - if (result.code == 0 && result.resultList && result.resultList.length > 0) { - this.favoritesList = result.resultList; - } else { - this.favoritesList = []; - } - }); - }, - - pasteCheck() { - let result = { - 'abilityResult': '115 6', - 'code': 0 - }; - if (result != null && result.code == 0) { - if (Utils.checkDialerNumberString(result.abilityResult)) { - this.dialer.copyDisabled = false; - } else { - this.dialer.copyDisabled = true; - this.dialer.showClipboard = false; - this.dialer.clipBoardData = ''; - } - } else { - this.dialer.copyDisabled = true; - this.dialer.showClipboard = false; - this.dialer.clipBoardData = ''; - } - }, - hideClipBoard() { - this.dialer.showClipBoard = false; - }, - - getCallLog: function (pageIndex, pageSize) { - LOG.info(TAG + 'getCallLog' + 'logMessage getCallLog callLogTotalData length = ' + this.$app.$def.globalData.callLogTotalData.callLogList.length); - if (pageIndex == 0) { - this.dialer.recordList = callLogService.getCallLog(pageIndex, pageSize, this.$app.$def.globalData.callLogTotalData.callLogList); - } else { - this.dialer.recordList = this.dialer.recordList.concat(callLogService.getCallLog(pageIndex, pageSize, this.$app.$def.globalData.callLogTotalData.callLogList)); - } - }, - - getMissedCalls(pageIndex, pageSize) { - LOG.info(TAG + 'getMissedCalls' + 'logMessage getMissedCalls callLogTotalData length = ' + this.$app.$def.globalData.callLogTotalData.missedList.length); - if (pageIndex == 0) { - this.dialer.missedList = callLogService.getCallLog(pageIndex, pageSize, this.$app.$def.globalData.callLogTotalData.missedList); - } else { - this.dialer.missedList = this.dialer.missedList.concat(callLogService.getCallLog(pageIndex, pageSize, this.$app.$def.globalData.callLogTotalData.missedList)); - } - }, - - queryCallLogByPage(e) { - LOG.info(TAG + 'queryCallLogByPage' + 'logMessage queryCallLogByPage e = ' + e); - if (e.detail.logIndex == 1) { - this.getMissedCalls(e.detail.pageIndex, this.dialer.logPageSize); - } else { - this.getCallLog(e.detail.pageIndex, this.dialer.logPageSize); - } - }, - updateLogList(e) { - LOG.info(TAG + 'updateLogList' + 'logMessage updateLogList e = ' + e); - this.dialer.recordList = e.detail.recordList; - this.dialer.missedList = e.detail.missedList; - this.dialer.voicemailList = e.detail.voicemailList; - } -} diff --git a/entry/src/main/js/default/res/image/assistant.svg b/entry/src/main/js/default/res/image/assistant.svg deleted file mode 100644 index 654c5d0..0000000 --- a/entry/src/main/js/default/res/image/assistant.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - 助理1 - - - - - - - - - - - - \ No newline at end of file diff --git a/entry/src/main/js/default/res/image/birth.svg b/entry/src/main/js/default/res/image/birth.svg deleted file mode 100644 index 5699827..0000000 --- a/entry/src/main/js/default/res/image/birth.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - 生日1 - - - - - - - - - - - - \ No newline at end of file diff --git a/entry/src/main/js/default/res/image/boardmin.jpg b/entry/src/main/js/default/res/image/boardmin.jpg deleted file mode 100644 index f7b68010e0f29deb525f9e9bf7141f091f469460..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16638 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 C)Z|M`6Dq&Jevy%p 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 OGR{u!IKD$L^?v|j1;oGr diff --git a/entry/src/main/js/default/res/image/contacts.png b/entry/src/main/js/default/res/image/contacts.png deleted file mode 100644 index 8d974489a4262d44866f1a964577829ab9bdfc9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20091 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 - - 住宅1 - - - - - - - - - - - - \ No newline at end of file diff --git a/entry/src/main/js/default/res/image/ic_avatar_default.svg b/entry/src/main/js/default/res/image/ic_avatar_default.svg deleted file mode 100644 index 17974a9..0000000 --- a/entry/src/main/js/default/res/image/ic_avatar_default.svg +++ /dev/null @@ -1,68 +0,0 @@ - -image/svg+xml - - - - diff --git a/entry/src/main/js/default/res/image/ic_back.svg b/entry/src/main/js/default/res/image/ic_back.svg deleted file mode 100644 index 6dac7f3..0000000 --- a/entry/src/main/js/default/res/image/ic_back.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/entry/src/main/js/default/res/image/ic_camera_back.svg b/entry/src/main/js/default/res/image/ic_camera_back.svg deleted file mode 100644 index 8e8d380..0000000 --- a/entry/src/main/js/default/res/image/ic_camera_back.svg +++ /dev/null @@ -1,46 +0,0 @@ - -image/svg+xml - - diff --git a/entry/src/main/js/default/res/image/ic_camera_filled.svg b/entry/src/main/js/default/res/image/ic_camera_filled.svg deleted file mode 100644 index 20c1bca..0000000 --- a/entry/src/main/js/default/res/image/ic_camera_filled.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_cancel_m.svg b/entry/src/main/js/default/res/image/ic_cancel_m.svg deleted file mode 100644 index 438d574..0000000 --- a/entry/src/main/js/default/res/image/ic_cancel_m.svg +++ /dev/null @@ -1,76 +0,0 @@ - -image/svg+xml - - - - - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_close_m.svg b/entry/src/main/js/default/res/image/ic_close_m.svg deleted file mode 100644 index 82c1ecf..0000000 --- a/entry/src/main/js/default/res/image/ic_close_m.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_Earpiece_m.svg b/entry/src/main/js/default/res/image/ic_contacts_Earpiece_m.svg deleted file mode 100644 index fbfe142..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_Earpiece_m.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_HD_mini.svg b/entry/src/main/js/default/res/image/ic_contacts_HD_mini.svg deleted file mode 100644 index 397a438..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_HD_mini.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_account_40.svg b/entry/src/main/js/default/res/image/ic_contacts_account_40.svg deleted file mode 100644 index 2661df1..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_account_40.svg +++ /dev/null @@ -1,59 +0,0 @@ - -image/svg+xml - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_add_favourites.svg b/entry/src/main/js/default/res/image/ic_contacts_add_favourites.svg deleted file mode 100644 index 5949230..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_add_favourites.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_add_m_1.svg b/entry/src/main/js/default/res/image/ic_contacts_add_m_1.svg deleted file mode 100644 index 996c3e1..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_add_m_1.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_allergies_m.svg b/entry/src/main/js/default/res/image/ic_contacts_allergies_m.svg deleted file mode 100644 index 5580516..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_allergies_m.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_arrow_down.svg b/entry/src/main/js/default/res/image/ic_contacts_arrow_down.svg deleted file mode 100644 index 4ec2de1..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_arrow_down.svg +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_arrow_unfold.svg b/entry/src/main/js/default/res/image/ic_contacts_arrow_unfold.svg deleted file mode 100644 index 4617afe..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_arrow_unfold.svg +++ /dev/null @@ -1,71 +0,0 @@ - -image/svg+xml - - - - - - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_arrow_up_s.svg b/entry/src/main/js/default/res/image/ic_contacts_arrow_up_s.svg deleted file mode 100644 index a940daa..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_arrow_up_s.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_call 1 dial_m.svg b/entry/src/main/js/default/res/image/ic_contacts_call 1 dial_m.svg deleted file mode 100644 index cc25df6..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_call 1 dial_m.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_call 2 dial_m.svg b/entry/src/main/js/default/res/image/ic_contacts_call 2 dial_m.svg deleted file mode 100644 index ff0a4a5..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_call 2 dial_m.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_call HD dial_56.svg b/entry/src/main/js/default/res/image/ic_contacts_call HD dial_56.svg deleted file mode 100644 index a1f830f..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_call HD dial_56.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_call HD dial_56.svg.svg b/entry/src/main/js/default/res/image/ic_contacts_call HD dial_56.svg.svg deleted file mode 100644 index 7550299..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_call HD dial_56.svg.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - ic_contacts_call HD dial_60 - - - - - - - - \ No newline at end of file diff --git a/entry/src/main/js/default/res/image/ic_contacts_call HD dial_56_clicked.svg.svg b/entry/src/main/js/default/res/image/ic_contacts_call HD dial_56_clicked.svg.svg deleted file mode 100644 index a19603f..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_call HD dial_56_clicked.svg.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - ic_contacts_call HD dial_60 - - - - - - - - \ No newline at end of file diff --git a/entry/src/main/js/default/res/image/ic_contacts_call.png b/entry/src/main/js/default/res/image/ic_contacts_call.png deleted file mode 100644 index 1e81c9a6be7e5f4a006d07a5f677e186382e653d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21968 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 - - - - - - - - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_company_m.svg b/entry/src/main/js/default/res/image/ic_contacts_company_m.svg deleted file mode 100644 index e1d376a..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_company_m.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_detail_qrcode.svg b/entry/src/main/js/default/res/image/ic_contacts_detail_qrcode.svg deleted file mode 100644 index bdf229d..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_detail_qrcode.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_dial call HD_1_m.svg b/entry/src/main/js/default/res/image/ic_contacts_dial call HD_1_m.svg deleted file mode 100644 index c8fdc96..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_dial call HD_1_m.svg +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_dial call_1_m.svg b/entry/src/main/js/default/res/image/ic_contacts_dial call_1_m.svg deleted file mode 100644 index 5e9ed1a..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_dial call_1_m.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - ic_contacts_dial call_1_m备份 2 - - - - - - - \ No newline at end of file diff --git a/entry/src/main/js/default/res/image/ic_contacts_dial call_2_m.svg b/entry/src/main/js/default/res/image/ic_contacts_dial call_2_m.svg deleted file mode 100644 index 51988df..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_dial call_2_m.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - ic_contacts_dial call_2_m备份 2 - - - - - - - \ No newline at end of file diff --git a/entry/src/main/js/default/res/image/ic_contacts_dial call_HD_2_m.svg b/entry/src/main/js/default/res/image/ic_contacts_dial call_HD_2_m.svg deleted file mode 100644 index 97779c5..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_dial call_HD_2_m.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - ic_contacts_dial call_HD_2_m备份 2 - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/entry/src/main/js/default/res/image/ic_contacts_edit address_m.svg b/entry/src/main/js/default/res/image/ic_contacts_edit address_m.svg deleted file mode 100644 index 9cd1f7b..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_edit address_m.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_edit assistant_m.svg.svg b/entry/src/main/js/default/res/image/ic_contacts_edit assistant_m.svg.svg deleted file mode 100644 index 0518a84..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_edit assistant_m.svg.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - Edit Relationship - - - - - - - - - - - - - \ No newline at end of file diff --git a/entry/src/main/js/default/res/image/ic_contacts_edit nickname_m.svg b/entry/src/main/js/default/res/image/ic_contacts_edit nickname_m.svg deleted file mode 100644 index 2483571..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_edit nickname_m.svg +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_edit remark_m.svg.svg b/entry/src/main/js/default/res/image/ic_contacts_edit remark_m.svg.svg deleted file mode 100644 index ea63e37..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_edit remark_m.svg.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - ic/Edit Remark - - - - - - \ No newline at end of file diff --git a/entry/src/main/js/default/res/image/ic_contacts_edit.svg b/entry/src/main/js/default/res/image/ic_contacts_edit.svg deleted file mode 100644 index 4ac5a15..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_edit.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - -ic_contacts_edit -Created with Sketch. - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_edit_group_m.svg.svg b/entry/src/main/js/default/res/image/ic_contacts_edit_group_m.svg.svg deleted file mode 100644 index 7892020..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_edit_group_m.svg.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - ic_contacts_edit group_m - - - - - - - - - \ No newline at end of file diff --git a/entry/src/main/js/default/res/image/ic_contacts_email_m.svg b/entry/src/main/js/default/res/image/ic_contacts_email_m.svg deleted file mode 100644 index 16b075c..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_email_m.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_empty_calllog_72.svg b/entry/src/main/js/default/res/image/ic_contacts_empty_calllog_72.svg deleted file mode 100644 index 63043e2..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_empty_calllog_72.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_empty_contact_72.svg b/entry/src/main/js/default/res/image/ic_contacts_empty_contact_72.svg deleted file mode 100644 index 5a4712c..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_empty_contact_72.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_empty_voicemaile_72.svg b/entry/src/main/js/default/res/image/ic_contacts_empty_voicemaile_72.svg deleted file mode 100644 index 14a64db..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_empty_voicemaile_72.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_favorite_add.svg b/entry/src/main/js/default/res/image/ic_contacts_favorite_add.svg deleted file mode 100644 index fbbb7e6..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_favorite_add.svg +++ /dev/null @@ -1,88 +0,0 @@ - -image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_filled_m.svg b/entry/src/main/js/default/res/image/ic_contacts_filled_m.svg deleted file mode 100644 index fe5d8a2..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_filled_m.svg +++ /dev/null @@ -1,82 +0,0 @@ - -image/svg+xml - - - - - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_group.svg b/entry/src/main/js/default/res/image/ic_contacts_group.svg deleted file mode 100644 index 43713ce..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_group.svg +++ /dev/null @@ -1,65 +0,0 @@ - -image/svg+xml - - - - - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_groups_add.svg b/entry/src/main/js/default/res/image/ic_contacts_groups_add.svg deleted file mode 100644 index 996c3e1..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_groups_add.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_groups_disabled.svg b/entry/src/main/js/default/res/image/ic_contacts_groups_disabled.svg deleted file mode 100644 index c5b7956..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_groups_disabled.svg +++ /dev/null @@ -1,46 +0,0 @@ - -image/svg+xml - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_m.svg b/entry/src/main/js/default/res/image/ic_contacts_m.svg deleted file mode 100644 index c720903..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_m.svg +++ /dev/null @@ -1,82 +0,0 @@ - -image/svg+xml - - - - - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_pause voicemail_m.svg b/entry/src/main/js/default/res/image/ic_contacts_pause voicemail_m.svg deleted file mode 100644 index 36bfd7c..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_pause voicemail_m.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_play voicemail_m.svg b/entry/src/main/js/default/res/image/ic_contacts_play voicemail_m.svg deleted file mode 100644 index 42bb7a9..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_play voicemail_m.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_shortcut_me_36.svg b/entry/src/main/js/default/res/image/ic_contacts_shortcut_me_36.svg deleted file mode 100644 index 02da945..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_shortcut_me_36.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_shortcut_new_36.svg b/entry/src/main/js/default/res/image/ic_contacts_shortcut_new_36.svg deleted file mode 100644 index 1341360..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_shortcut_new_36.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_sim_1_mini.svg b/entry/src/main/js/default/res/image/ic_contacts_sim_1_mini.svg deleted file mode 100644 index 9815a0b..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_sim_1_mini.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_sim_2_mini.svg b/entry/src/main/js/default/res/image/ic_contacts_sim_2_mini.svg deleted file mode 100644 index 327e32b..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_sim_2_mini.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_speeddial_voice_40.svg b/entry/src/main/js/default/res/image/ic_contacts_speeddial_voice_40.svg deleted file mode 100644 index 9e21306..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_speeddial_voice_40.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_speeddial_voice_72.svg b/entry/src/main/js/default/res/image/ic_contacts_speeddial_voice_72.svg deleted file mode 100644 index 103ff54..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_speeddial_voice_72.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_contacts_voicemail_s.svg b/entry/src/main/js/default/res/image/ic_contacts_voicemail_s.svg deleted file mode 100644 index c4c880f..0000000 --- a/entry/src/main/js/default/res/image/ic_contacts_voicemail_s.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_delete_white.svg b/entry/src/main/js/default/res/image/ic_delete_white.svg deleted file mode 100644 index 049de76..0000000 --- a/entry/src/main/js/default/res/image/ic_delete_white.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - mark as read copy - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/entry/src/main/js/default/res/image/ic_massage_m.svg b/entry/src/main/js/default/res/image/ic_massage_m.svg deleted file mode 100644 index 8c1a2a5..0000000 --- a/entry/src/main/js/default/res/image/ic_massage_m.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - diff --git a/entry/src/main/js/default/res/image/ic_meetime_24x24_message.svg b/entry/src/main/js/default/res/image/ic_meetime_24x24_message.svg deleted file mode 100644 index ac327c2..0000000 --- a/entry/src/main/js/default/res/image/ic_meetime_24x24_message.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - diff --git a/entry/src/main/js/default/res/image/ic_meetime_24x24_video_s.svg b/entry/src/main/js/default/res/image/ic_meetime_24x24_video_s.svg deleted file mode 100644 index 5d35e4f..0000000 --- a/entry/src/main/js/default/res/image/ic_meetime_24x24_video_s.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_more_24x12.svg b/entry/src/main/js/default/res/image/ic_more_24x12.svg deleted file mode 100644 index fee2b1e..0000000 --- a/entry/src/main/js/default/res/image/ic_more_24x12.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_more_24x24.svg b/entry/src/main/js/default/res/image/ic_more_24x24.svg deleted file mode 100644 index 5a9907f..0000000 --- a/entry/src/main/js/default/res/image/ic_more_24x24.svg +++ /dev/null @@ -1,64 +0,0 @@ - -image/svg+xml - - diff --git a/entry/src/main/js/default/res/image/ic_more_24x24_favorite.svg b/entry/src/main/js/default/res/image/ic_more_24x24_favorite.svg deleted file mode 100644 index ba09657..0000000 --- a/entry/src/main/js/default/res/image/ic_more_24x24_favorite.svg +++ /dev/null @@ -1,64 +0,0 @@ - -image/svg+xml - - diff --git a/entry/src/main/js/default/res/image/ic_phonecall_filled_m.svg b/entry/src/main/js/default/res/image/ic_phonecall_filled_m.svg deleted file mode 100644 index faa776d..0000000 --- a/entry/src/main/js/default/res/image/ic_phonecall_filled_m.svg +++ /dev/null @@ -1,72 +0,0 @@ - -image/svg+xml - - - - - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_phonecall_m.svg b/entry/src/main/js/default/res/image/ic_phonecall_m.svg deleted file mode 100644 index 62ba953..0000000 --- a/entry/src/main/js/default/res/image/ic_phonecall_m.svg +++ /dev/null @@ -1,82 +0,0 @@ - -image/svg+xml - - - - - - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_select all_filled_m.svg b/entry/src/main/js/default/res/image/ic_select all_filled_m.svg deleted file mode 100644 index 7d2f7c9..0000000 --- a/entry/src/main/js/default/res/image/ic_select all_filled_m.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/entry/src/main/js/default/res/image/ic_select all_m.svg b/entry/src/main/js/default/res/image/ic_select all_m.svg deleted file mode 100644 index f891fec..0000000 --- a/entry/src/main/js/default/res/image/ic_select all_m.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/entry/src/main/js/default/res/image/ic_select_contacts_empty_36.svg b/entry/src/main/js/default/res/image/ic_select_contacts_empty_36.svg deleted file mode 100644 index 99a31ac..0000000 --- a/entry/src/main/js/default/res/image/ic_select_contacts_empty_36.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_share_m.svg b/entry/src/main/js/default/res/image/ic_share_m.svg deleted file mode 100644 index 8b1d159..0000000 --- a/entry/src/main/js/default/res/image/ic_share_m.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - diff --git a/entry/src/main/js/default/res/image/ic_speed_dial_add.svg b/entry/src/main/js/default/res/image/ic_speed_dial_add.svg deleted file mode 100644 index 18b8e77..0000000 --- a/entry/src/main/js/default/res/image/ic_speed_dial_add.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_speed_select_contact_empty.svg b/entry/src/main/js/default/res/image/ic_speed_select_contact_empty.svg deleted file mode 100644 index 09ad0ed..0000000 --- a/entry/src/main/js/default/res/image/ic_speed_select_contact_empty.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/entry/src/main/js/default/res/image/ic_video_m.svg b/entry/src/main/js/default/res/image/ic_video_m.svg deleted file mode 100644 index 1d742b5..0000000 --- a/entry/src/main/js/default/res/image/ic_video_m.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - diff --git a/entry/src/main/js/default/res/image/ic_volume_m.svg b/entry/src/main/js/default/res/image/ic_volume_m.svg deleted file mode 100644 index cb5ca07..0000000 --- a/entry/src/main/js/default/res/image/ic_volume_m.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - diff --git a/entry/src/main/js/default/res/image/massage.svg b/entry/src/main/js/default/res/image/massage.svg deleted file mode 100644 index 0fbbef1..0000000 --- a/entry/src/main/js/default/res/image/massage.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - 即时消息1 - - - - - - - - - - - - \ No newline at end of file diff --git a/entry/src/main/js/default/res/image/nick.svg b/entry/src/main/js/default/res/image/nick.svg deleted file mode 100644 index aaeae34..0000000 --- a/entry/src/main/js/default/res/image/nick.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - 昵称1 - - - - - - - - - - - - \ No newline at end of file diff --git a/entry/src/main/js/default/res/image/phonnume.png b/entry/src/main/js/default/res/image/phonnume.png deleted file mode 100644 index 35d0ad8435740c935d79b738ee6e89e2812d7a11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1912 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 JPDHLkV1j5gGqC^w diff --git a/entry/src/main/js/default/res/image/star_moves.png b/entry/src/main/js/default/res/image/star_moves.png deleted file mode 100644 index 71bc6432a41e722f942a576736c2dc342da41c87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1174 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_1SCE0cewy5#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!8f{M($B>G+x3}(V=VZ$q|M)rGBBP+OV5jP&DXZfv!BP={&ix6d?&q$EwAluZI=eEOfmZT^yq&5 zHE-vn&s{SiSM$S<9~!1DUW@(L?TlE-I`kc>EdenUbpJ%YSq0pd#t9# zeBZZk0;9ksM>Yiso>f-AzP!4B=T1pU$qDw=iw$Pi{MFXdVrpzywfOwGGna4NhzJT= z#CI?uZ~N}GYjs7qR)W-@{u}$wIBtFTyIohWUe%kv`crF8#G2TJ--<&*LqmOieXFZ~ z-??+=<;%=z&uS|lO<7r=pPye=7ACjTZgy5d!G-6ab@lX4F`xhYcQ4qxPrrTp_TxuI zadGfEX5+Q%*S8;j=%KQx>qhGGeK8qDf+zI%vNxZ6x%_fw=n*~ZuP+yGuoHT%yb(d{ zo0q?SQ{0NbXEyAUyZX<3&HupTDSX%5HwD|z^|QCJ*;98se?f}TOs}OOg1g^b=|BG1 z-Q9g*Kt^Td&-vy5KF_yID=jTePk;XAjgRO?Z(!(u`}(!iLT28)d2(`c@7});_txQg z{ITNLv18AkKUbc3;_ltKAZOPpO`Nd)+kpcPv9Ynhc!^(DWHlEU7E70=rlmc5^5n=j zUSLd~v3&gaF)uIg(W6ISJ$v9z_d&Cbpi7Z+dEXSes)Cu?o7ZdnUk0?f$#@$$#S${?0l2%VSOd5t - - 网址1 - - - - - - - - - - - - \ No newline at end of file diff --git a/entry/src/main/js/default/utils/Pasteboard.js b/entry/src/main/js/default/utils/Pasteboard.js deleted file mode 100644 index 0c05409..0000000 --- a/entry/src/main/js/default/utils/Pasteboard.js +++ /dev/null @@ -1,35 +0,0 @@ -/* -* Copyright (c) 2021 Huawei Device Co., Ltd. -* Licensed under the Apache License, Version 2.0 (the 'License'); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an 'AS IS' BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -import pasteboard from '@ohos.pasteboard'; -import LOG from '../utils/ContactsLog.js'; -var TAG = 'pasteBoard'; - -let commonPasteboard = { - - getPasteboard() { - let sysPasteboard = pasteboard.getSystemPasteboard(); - return sysPasteboard.getPasteData(); - }, - setPasteboard(text) { - let sysPasteboard = pasteboard.getSystemPasteboard(); - let textData = pasteboard.createPlainTextData(text); - sysPasteboard.setPasteData(textData, () => { - LOG.info(TAG + 'setPasteboard' + 'pasteboard setPasteData done'); - }); - } -}; - -export {commonPasteboard}; \ No newline at end of file diff --git a/entry/src/main/resources/base/element/color.json b/entry/src/main/resources/base/element/color.json new file mode 100644 index 0000000..6f835b5 --- /dev/null +++ b/entry/src/main/resources/base/element/color.json @@ -0,0 +1,104 @@ +{ + "color": [ + { + "name": "red", + "value": "#ff0000" + }, + { + "name": "black", + "value": "#000" + }, + { + "name": "gray", + "value": "#777777" + }, + { + "name": "cancel", + "value": "#0f76ec" + }, + { + "name": "white", + "value": "#ffffff" + }, + { + "name": "gray_line", + "value": "#cccccc" + }, + { + "name": "font_color_more", + "value": "#555555" + }, + { + "name": "gray_divider", + "value": "#dddddd" + }, + { + "name": "avatar_bg", + "value": "#bbbbbb" + }, + { + "name": "font_hasFavorited", + "value": "#0A59F7" + }, + { + "name": "basic_background", + "value": "#fafafa" + }, + { + "name": "light_grey", + "value": "#f6f6f6" + }, + { + "name": "textColorPrimary", + "value": "#182431" + }, + { + "name": "textColorTertiary", + "value": "#66182431" + }, + { + "name": "colorConnected", + "value": "#00CB87" + }, + { + "name": "colorPrimaryDark", + "value": "#FFFFFF" + }, + { + "name": "colorPrimary", + "value": "#182431" + }, + { + "name": "colorControlNormal", + "value": "#19000000" + }, + { + "name": "indexter_selected_bg", + "value": "#1000CB87" + }, + { + "name": "textColorPrimary_bg", + "value": "#20182431" + }, + { + "name": "error", + "value": "#E84026" + }, + { + "name": "light_colorPrimary", + "value": "#99182431" + }, + { + "name": "more_light_colorPrimary", + "value": "#66182431" + }, + { + "name": "dialer_char_button_color", + "value": "#8a8a8a" + }, + { + "name": "dialer_shadow_color", + "value": "#D8D8D8" + } + ] +} \ No newline at end of file diff --git a/entry/src/main/resources/base/element/float.json b/entry/src/main/resources/base/element/float.json new file mode 100644 index 0000000..f0619ed --- /dev/null +++ b/entry/src/main/resources/base/element/float.json @@ -0,0 +1,280 @@ +{ + "float": [ + { + "name": "contact_titleguide_height", + "value": "56vp" + }, + { + "name": "contact_title_height", + "value": "41vp" + }, + { + "name": "contact_emptypage_button_item_height", + "value": "40vp" + }, + { + "name": "contact_listitem_height", + "value": "64vp" + }, + { + "name": "contact_listitem_index_height", + "value": "48vp" + }, + { + "name": "contact_samll_image_width_height", + "value": "24vp" + }, + { + "name": "contact_emptyview_image_width_height", + "value": "120vp" + }, + { + "name": "contact_listpage_icon_width_height", + "value": "40vp" + }, + { + "name": "common_margin", + "value": "24vp" + }, + { + "name": "common_margin_16", + "value": "16vp" + }, + { + "name": "contact_emptypage_button_radius", + "value": "20vp" + }, + { + "name": "contact_longpress_dialog_radius", + "value": "24vp" + }, + { + "name": "contact_longpress_dialog_width", + "value": "156vp" + }, + { + "name": "contact_list_groups_radius", + "value": "24vp" + }, + { + "name": "contact_emptypage_bottom", + "value": "16vp" + }, + { + "name": "contact_text_size_headline8", + "value": "20fp" + }, + { + "name": "contact_text_size_body1", + "value": "16fp" + }, + { + "name": "contact_text_size_body2", + "value": "14fp" + }, + { + "name": "contact_text_size_body3", + "value": "10fp" + }, + { + "name": "contact_text_size_dialer_button", + "value": "30fp" + }, + { + "name": "contact_text_size_dialer_char", + "value": "12fp" + }, + { + "name": "contact_text_size_contact_title", + "value": "30fp" + }, + { + "name": "contact_navigation_width", + "value": "96vp" + }, + { + "name": "contact_navigation_element_height", + "value": "130vp" + }, + { + "name": "contact_empty_list_all_bottom_height", + "value": "238vp" + }, + { + "name": "dialer_keypad_height", + "value": "40vp" + }, + { + "name": "dialer_keypad_width", + "value": "40vp" + }, + { + "name": "dialer_keypad_font", + "value": "40vp" + }, + { + "name": "dialer_keypad_margin1", + "value": "12vp" + }, + { + "name": "dialer_keypad_margin2", + "value": "15vp" + }, + { + "name": "dialer_keypad_button_width", + "value": "148vp" + }, + { + "name": "dialer_keypad_button_height", + "value": "96vp" + }, + { + "name": "contact_batchselect_title_height", + "value": "28vp" + }, + { + "name": "dialer_common_margin", + "value": "24vp" + }, + { + "name": "dialer_telephone_number_height", + "value": "112vp" + }, + { + "name": "dialer_common_little_margin", + "value": "10vp" + }, + { + "name": "dialer_common_small_margin", + "value": "16vp" + }, + { + "name": "dialer_common_big_margin", + "value": "32vp" + }, + { + "name": "dialer_common_middle_margin", + "value": "20vp" + }, + { + "name": "dialer_button_height", + "value": "56vp" + }, + { + "name": "dialer_divider_width", + "value": "387vp" + }, + { + "name": "dialer_text_size_body1", + "value": "12fp" + }, + { + "name": "dialer_big_button_width", + "value": "68vp" + }, + { + "name": "dialer_middle_button_width", + "value": "48vp" + }, + { + "name": "dialer_small_button_width", + "value": "28vp" + }, + { + "name": "dialer_calllog_item_height", + "value": "60vp" + }, + { + "name": "dialer_calllog_list_margin_bottom", + "value": "110vp" + }, + { + "name": "dialer_calllog_bindmenu_width1", + "value": "156vp" + }, + { + "name": "dialer_calllog_bindmenu_width2", + "value": "130vp" + }, + { + "name": "dialer_calllog_bindmenu_divider_width", + "value": "100vp" + }, + { + "name": "dialer_common_very_small_margin1", + "value": "5vp" + }, + { + "name": "dialer_common_very_small_margin2", + "value": "6vp" + }, + { + "name": "dialer_calllog_bindmenu_height", + "value": "280vp" + }, + { + "name": "dialer_menu_width", + "value": "35vp" + }, + { + "name": "dialer_menu_height", + "value": "35vp" + }, + { + "name": "dialer_call_button_width", + "value": "39vp" + }, + { + "name": "dialer_call_button_height", + "value": "39vp" + }, + { + "name": "dialer_button_number_fontSize", + "value": "29.84fp" + }, + { + "name": "dialer_button_char_fontSize", + "value": "11.79fp" + }, + { + "name": "dialer_phone_number_fontSize", + "value": "30fp" + }, + { + "name": "dialer_block_height", + "value": "200vp" + }, + { + "name": "dialer_dialpad_height", + "value": "384vp" + }, + { + "name": "dialer_dial_icon_width", + "value": "39vp" + }, + { + "name": "dialer_listitem_height", + "value": "64vp" + }, + { + "name": "dialer_divider_width1", + "value": "124vp" + }, + { + "name": "dialer_line_height", + "value": "21vp" + }, + { + "name": "dialer_big_margin", + "value": "72vp" + }, + { + "name": "dialer_font_size", + "value": "20fp" + }, + { + "name": "dialer_time_width", + "value": "80vp" + } + ] +} \ No newline at end of file diff --git a/entry/src/main/resources/base/element/string.json b/entry/src/main/resources/base/element/string.json index 0af881a..1c6194f 100644 --- a/entry/src/main/resources/base/element/string.json +++ b/entry/src/main/resources/base/element/string.json @@ -5,12 +5,872 @@ "value": "联系人" }, { - "name": "dials_name", + "name": "mainability_description", + "value": "ETS_Empty Ability" + }, + { + "name": "dialer", "value": "电话" }, { - "name": "mainability_description", - "value": "JS_Phone_Empty Feature Ability" + "name": "dialer_calllog", + "value": "通话记录" + }, + { + "name": "dialer_description", + "value": "显示拨号盘和联系人" + }, + { + "name": "contact_num", + "value": "%d个联系人" + }, + { + "name": "contact", + "value": "联系人" + }, + { + "name": "contact_login_in", + "value": "登录账户" + }, + { + "name": "contact_import_contacts", + "value": "导入联系人" + }, + { + "name": "create_contact", + "value": "新建联系人" + }, + { + "name": "edit_contact", + "value": "编辑联系人" + }, + { + "name": "contact_scan_card", + "value": "扫名片" + }, + { + "name": "no_contacts", + "value": "没有联系人" + }, + { + "name": "contact_list_search", + "value": "搜索联系人" + }, + { + "name": "contact_list_search_empty", + "value": "没有匹配的结果" + }, + { + "name": "noName", + "value": "(无姓名)" + }, + { + "name": "phone_type_mobile", + "value": "电话" + }, + { + "name": "phone_type_home", + "value": "住宅" + }, + { + "name": "phone_type_work", + "value": "单位" + }, + { + "name": "phone_type_main", + "value": "总机" + }, + { + "name": "phone_type_fax_work", + "value": "单位传真" + }, + { + "name": "phone_type_fax_home", + "value": "住宅传真" + }, + { + "name": "phone_type_pager", + "value": "寻呼机" + }, + { + "name": "phone_type_other", + "value": "其他" + }, + { + "name": "phone_type_custom", + "value": "自定义" + }, + { + "name": "email_type_home", + "value": "私人" + }, + { + "name": "email_type_work", + "value": "单位" + }, + { + "name": "email_type_other", + "value": "其他" + }, + { + "name": "email_type_custom", + "value": "自定义" + }, + { + "name": "text", + "value": "文本" + }, + { + "name": "qr_code", + "value": "二维码" + }, + { + "name": "v_card", + "value": "vCard" + }, + { + "name": "call_setting_type_paste", + "value": "粘贴" + }, + { + "name": "call_setting_type_batch_delete", + "value": "批量删除" + }, + { + "name": "call_setting_type_harassment_interception", + "value": "骚扰拦截" + }, + { + "name": "call_setting_type_setting", + "value": "设置" + }, + { + "name": "contact_setting_type_scancard", + "value": "扫名片" + }, + { + "name": "send_message", + "value": "发送消息" + }, + { + "name": "copy_phoneNumber", + "value": "复制号码" + }, + { + "name": "edit_beforeCall", + "value": "呼叫前编辑" + }, + { + "name": "add_to_blockList", + "value": "加入黑名单" + }, + { + "name": "delete_call_logs", + "value": "删除通话记录" + }, + { + "name": "all_call_logs", + "value": "全部通话" + }, + { + "name": "missed_call", + "value": "未接来电" + }, + { + "name": "voicemail", + "value": "语音信箱" + }, + { + "name": "dialing", + "value": "正在拨号..." + }, + { + "name": "recording", + "value": "录音" + }, + { + "name": "wait", + "value": "等待" + }, + { + "name": "add_call_logs", + "value": "添加通话" + }, + { + "name": "memorandum", + "value": "备忘录" + }, + { + "name": "mute", + "value": "静音" + }, + { + "name": "groups", + "value": "群组" + }, + { + "name": "card_holder", + "value": "名片夹" + }, + { + "name": "my_card", + "value": "我的名片" + }, + { + "name": "dialog_cancel", + "value": "取消" + }, + { + "name": "dialog_share", + "value": "分享" + }, + { + "name": "dialog_delete", + "value": "删除" + }, + { + "name": "delete_dialog_title", + "value": "是否删除此联系人" + }, + { + "name": "cancel", + "value": "取消" + }, + { + "name": "save", + "value": "保存" + }, + { + "name": "telep_group", + "value": "手机群组" + }, + { + "name": "new_build", + "value": "新建" + }, + { + "name": "no_group", + "value": "没有群组" + }, + { + "name": "no_select", + "value": "未选择" + }, + { + "name": "select_num", + "value": "已选择%d个" + }, + { + "name": "concal_favorite", + "value": "取消收藏" + }, + { + "name": "favorite", + "value": "收藏" + }, + { + "name": "edit", + "value": "编辑" + }, + { + "name": "more", + "value": "更多选项" + }, + { + "name": "save_to_existing_contacts", + "value": "保存至已有联系人" + }, + { + "name": "share_contact", + "value": "分享联系人" + }, + { + "name": "delete_contact", + "value": "删除联系人" + }, + { + "name": "add_to_blocklist", + "value": "加入黑名单" + }, + { + "name": "name_pinyin", + "value": "姓名拼音" + }, + { + "name": "delete_contact_sure", + "value": "是否删除此联系人?" + }, + { + "name": "delete", + "value": "删除" + }, + { + "name": "phone", + "value": "手机" + }, + { + "name": "nickname", + "value": "昵称" + }, + { + "name": "group", + "value": "群组" + }, + { + "name": "website", + "value": "网站" + }, + { + "name": "clear", + "value": "清空" + }, + { + "name": "ringtone", + "value": "电话铃声" + }, + { + "name": "remarks", + "value": "备注" + }, + { + "name": "qrcode_tips", + "value": "扫一扫二维码,可添加联系人" + }, + { + "name": "share", + "value": "分享" + }, + { + "name": "noAnswer", + "value": "响铃%s" + }, + { + "name": "reject", + "value": "拒接" + }, + { + "name": "blockCall", + "value": "未接通" + }, + { + "name": "years", + "value": "年" + }, + { + "name": "months", + "value": "月" + }, + { + "name": "day", + "value": "日" + }, + { + "name": "hour", + "value": "时" + }, + { + "name": "minute", + "value": "分" + }, + { + "name": "seconds", + "value": "秒" + }, + { + "name": "middleNight", + "value": "半夜" + }, + { + "name": "evening", + "value": "晚上" + }, + { + "name": "AM", + "value": "上午" + }, + { + "name": "PM", + "value": "下午" + }, + { + "name": "earlyMorning", + "value": "清晨" + }, + { + "name": "justNow", + "value": "刚刚" + }, + { + "name": "minutesAgo", + "value": "分钟前" + }, + { + "name": "yesterday", + "value": "昨天" + }, + { + "name": "nightfall", + "value": "傍晚" + }, + { + "name": "noon", + "value": "中午" + }, + { + "name": "morning", + "value": "早上" + }, + { + "name": "beforeDawn", + "value": "凌晨" + }, + { + "name": "unknown", + "value": "未知" + }, + { + "name": "timeHour", + "value": "小时" + }, + { + "name": "AIM", + "value": "AIM" + }, + { + "name": "WindowsLive", + "value": "Windows Live" + }, + { + "name": "Yahoo", + "value": "雅虎" + }, + { + "name": "Skype", + "value": "Skype" + }, + { + "name": "QQ", + "value": "QQ" + }, + { + "name": "Hangout", + "value": "环聊" + }, + { + "name": "ICQ", + "value": "ICQ" + }, + { + "name": "Jabber", + "value": "Jabber" + }, + { + "name": "add_more", + "value": "添加更多" + }, + { + "name": "LunarBirthday", + "value": "农历生日" + }, + { + "name": "Anniversary", + "value": "周年纪念日" + }, + { + "name": "birth", + "value": "生日" + }, + { + "name": "importDay", + "value": "其他重要日期" + }, + { + "name": "brothers", + "value": "兄弟" + }, + { + "name": "assistant", + "value": "助理" + }, + { + "name": "child", + "value": "子女" + }, + { + "name": "companion", + "value": "伴侣" + }, + { + "name": "father", + "value": "父亲" + }, + { + "name": "friend", + "value": "朋友" + }, + { + "name": "boss", + "value": "上司" + }, + { + "name": "mother", + "value": "母亲" + }, + { + "name": "parents", + "value": "父母" + }, + { + "name": "Partner", + "value": "合作伙伴" + }, + { + "name": "introducer", + "value": "介绍人" + }, + { + "name": "relatives", + "value": "亲属" + }, + { + "name": "sisters", + "value": "姐妹" + }, + { + "name": "spouse", + "value": "配偶" + }, + { + "name": "hourMinutes", + "value": "%d:%d" + }, + { + "name": "monthDay", + "value": "%d月%d日 " + }, + { + "name": "yearMonthDay", + "value": "%d年%d月%d日 " + }, + { + "name": "secondsFormat", + "value": "%d秒" + }, + { + "name": "minutesSecondsFormat", + "value": "%d分%d秒" + }, + { + "name": "hourMinutesSecondsFormat", + "value": "%d时%d分%d秒" + }, + { + "name": "name", + "value": "姓名" + }, + { + "name": "name_hock", + "value": " 姓名" + }, + { + "name": "new_group", + "value": "新建群组" + }, + { + "name": "nickname_hock", + "value": " 昵称" + }, + { + "name": "website_hock", + "value": " 网站" + }, + { + "name": "remarks_hock", + "value": " 备注" + }, + { + "name": "position", + "value": "职位" + }, + { + "name": "position_hock", + "value": " 职位" + }, + { + "name": "email", + "value": "电子邮箱" + }, + { + "name": "email_hock", + "value": " 电子邮箱" + }, + { + "name": "phone_number", + "value": "电话号码" + }, + { + "name": "phone_number_hock", + "value": " 电话号码" + }, + { + "name": "address_add", + "value": "地址" + }, + { + "name": "addmore", + "value": " 添加更多项" + }, + { + "name": "join_group", + "value": " 加入群组" + }, + { + "name": "instant_messaging", + "value": "即时消息" + }, + { + "name": "instant_messaging_hock", + "value": " 即时消息" + }, + { + "name": "address_add_hock", + "value": " 地址" + }, + { + "name": "assistant_hock", + "value": " 助理" + }, + { + "name": "birth_hock", + "value": " 生日" + }, + { + "name": "instant_type_aim", + "value": "AIM" + }, + { + "name": "instant_type_windowslive", + "value": "WindowsLive" + }, + { + "name": "instant_type_yahoo", + "value": "雅虎" + }, + { + "name": "instant_type_skype", + "value": "Skype" + }, + { + "name": "instant_type_qq", + "value": "QQ" + }, + { + "name": "instant_type_hangouts", + "value": "环聊" + }, + { + "name": "instant_type_icq", + "value": "ICQ" + }, + { + "name": "instant_type_jabber", + "value": "Jabber" + }, + { + "name": "instant_type_custom", + "value": "自定义" + }, + { + "name": "birthday_type_grebirthday", + "value": "生日" + }, + { + "name": "birthday_type_lunarbirthday", + "value": "农历生日" + }, + { + "name": "birthday_type_anniversaries", + "value": "周年纪念" + }, + { + "name": "birthday_type_other", + "value": "其他重要日期" + }, + { + "name": "relationship_type_assistant", + "value": "助理" + }, + { + "name": "relationship_type_brother", + "value": "兄弟" + }, + { + "name": "relationship_type_children", + "value": "子女" + }, + { + "name": "relationship_type_mates", + "value": "伴侣" + }, + { + "name": "relationship_type_father", + "value": "父亲" + }, + { + "name": "relationship_type_friend", + "value": "朋友" + }, + { + "name": "relationship_type_bosses", + "value": "上司" + }, + { + "name": "relationship_type_mother", + "value": "母亲" + }, + { + "name": "relationship_type_parents", + "value": "父母" + }, + { + "name": "relationship_type_partner", + "value": "合作伙伴" + }, + { + "name": "relationship_type_introducer", + "value": "介绍人" + }, + { + "name": "relationship_type_kinship", + "value": "亲属" + }, + { + "name": "relationship_type_sisters", + "value": "姐妹" + }, + { + "name": "relationship_type_spouses", + "value": "配偶" + }, + { + "name": "relationship_type_custom", + "value": "自定义" + }, + { + "name": "house_type_dwelling", + "value": "住宅" + }, + { + "name": "house_type_position", + "value": "单位" + }, + { + "name": "house_type_position_hock", + "value": " 单位" + }, + { + "name": "house_type_other", + "value": "其他" + }, + { + "name": "house_type_custom", + "value": "自定义" + }, + { + "name": "relation_background", + "value": "联系人" + }, + { + "name": "intelligent_group", + "value": "智能群组" + }, + { + "name": "company", + "value": "公司" + }, + { + "name": "city", + "value": "城市" + }, + { + "name": "recent_contacts", + "value": "最近联系人" + }, + { + "name": "mobile_group", + "value": "手机群组" + }, + { + "name": "number_of_people", + "value": "%d人数" + }, + { + "name": "number_of_people_from_cell_phone", + "value": "有%d人数来自手机" + }, + { + "name": "favorite_frequent", + "value": "常用" + }, + { + "name": "save_to_phone", + "value": "保存至: 手机" + }, + { + "name": "save_to_phone_only", + "value": "仅保存在手机,开启云端服务可同步" + }, + { + "name": "clear_calllog_sure", + "value": "是否清空通话记录" + }, + { + "name": "new_contact", + "value": "新建联系人" + }, + { + "name": "send_messages", + "value": "发送消息" + }, + { + "name": "select_all", + "value": "全选" + }, + { + "name": "recent", + "value": "最近" + }, + { + "name": "no_recent_contacts", + "value": "没有带号码的常用联系人" + }, + { + "name": "no_select_contacts", + "value": "没有带号码的联系人" + }, + { + "name": "no_group_contacts", + "value": "没有可用的群组联系人" + }, + { + "name": "unknow_location", + "value": "未知" + }, + { + "name": "no_dialer_calllog", + "value": "没有通话记录" + }, + { + "name": "no_dialer_missed_calllog", + "value": "没有未接来电" + }, + { + "name": "from_the_accounts", + "value": "来自以下账号" + }, + { + "name": "More", + "value": "更多" } ] } \ No newline at end of file diff --git a/entry/src/main/resources/base/media/Recording.png b/entry/src/main/resources/base/media/Recording.png new file mode 100644 index 0000000000000000000000000000000000000000..27bcc568b354689a69af1cacf3b15a6ef7e2eada GIT binary patch literal 386 zcmV-|0e$|7P)5#RBH>2F)Jc^2C!%5n_K{?UN1nbv^jAFpeRrj7@7kulgatzhD=Ku zM8RfX0IZog+(qMwh5E7WU-fzwkY;ymvr)W20yvFR@BKk*J?TOZPPTf zs;V|hsbE4~=Ydw-C;+kBGSp0ZA9Wz<09XKc1@Ohp)0E~RCmA3l2d`I3ZBv_P1LQP5 gGFv0ib!~g&Q07*qoM6N<$f?~&}4gdfE literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/base/media/add.png b/entry/src/main/resources/base/media/add.png new file mode 100644 index 0000000000000000000000000000000000000000..1ee3a0dfdba1ffb61bb95bd4f72694b8144820f7 GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJE1oWnArbCxryb-yWWeM4Hl?vI zz-+}-)>A5L7=#&w4{-S~al523OEj|13UL!`U!)c4uu9AFy2ZE4)-~*j&zgk=sIn*PhYoLFQ}UvRQB5rbX{B-TgMR|Jd5=JN|1l2u@h; zAb*3AIe}}A(Y8sItj`YodiRAZVw;+S#h!qM*-UN?;RnnQxL?@cu>T+ntC6tcX9i(K zW5?jcY{qWIZpGD(rxPn199)!CgoHagkL+qbvMAVi^#L_Chn@|8Yp2AOG0%w?|H9{PRp1a}8CUJ$TN&dgZ7(Y6GdFvJ3^56M|^HS{%e{&9L`mnp vS<|*ont0}1fUbP~y2T80E!vLwn#ePT+h~_K>Q_2|f|SA2)z4*}Q$iB}aeImA literal 0 HcmV?d00001 diff --git a/entry/src/main/js/default/res/image/addmore.svg b/entry/src/main/resources/base/media/addmore.svg similarity index 100% rename from entry/src/main/js/default/res/image/addmore.svg rename to entry/src/main/resources/base/media/addmore.svg diff --git a/entry/src/main/resources/base/media/app_icon.png b/entry/src/main/resources/base/media/app_icon.png deleted file mode 100644 index b5e5628b041e05d4b3a32a385df4903b4332af00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25079 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 G?Ee9;eUr5S literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/base/media/call_reject.png b/entry/src/main/resources/base/media/call_reject.png new file mode 100644 index 0000000000000000000000000000000000000000..70c51fb7367a72eba935f178630894d4f68ebb60 GIT binary patch literal 8075 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 DSayN5 literal 0 HcmV?d00001 diff --git a/entry/src/main/js/default/res/image/camera.png b/entry/src/main/resources/base/media/camera.png similarity index 100% rename from entry/src/main/js/default/res/image/camera.png rename to entry/src/main/resources/base/media/camera.png diff --git a/entry/src/main/js/default/res/image/cleantext.svg b/entry/src/main/resources/base/media/cleantext.svg similarity index 100% rename from entry/src/main/js/default/res/image/cleantext.svg rename to entry/src/main/resources/base/media/cleantext.svg diff --git a/entry/src/main/js/default/res/image/company.svg b/entry/src/main/resources/base/media/company.svg similarity index 100% rename from entry/src/main/js/default/res/image/company.svg rename to entry/src/main/resources/base/media/company.svg diff --git a/entry/src/main/resources/base/media/contactPerson.png b/entry/src/main/resources/base/media/contactPerson.png new file mode 100644 index 0000000000000000000000000000000000000000..5b74fdfef3bfe5ecd81bd97138f208d177dbcedd GIT binary patch literal 750 zcmVOf}TG+eBW_KJSwH8BJ!uI zs);cM;3usJ05_nrp#UI|4h$b6+O=X487rkw?ISoxTP}Su#Q<>Ry}t?}z%kO%WoxbV z)EKh^E3sk#JS`EqiIMi+Eg~qo<=GU7`M*DKye1+zYG*&jGg9zR8Guw(b(^b$lM2L+ zhUvD;ty1biYhCwA98(0P=54Kr$n2CFy#Ro)(h#dP!vC@ zF3_kZ78=}l)S8a~+WG%K(jS7fsp#4djsTo + + 默认头像_light + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/delete.png b/entry/src/main/resources/base/media/delete.png new file mode 100644 index 0000000000000000000000000000000000000000..4547d245060a344c361cd3224fe10e2778b828c0 GIT binary patch literal 496 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 diff --git a/entry/src/main/js/default/res/image/email.svg b/entry/src/main/resources/base/media/email.svg similarity index 100% rename from entry/src/main/js/default/res/image/email.svg rename to entry/src/main/resources/base/media/email.svg diff --git a/entry/src/main/resources/base/media/exclamation.png b/entry/src/main/resources/base/media/exclamation.png new file mode 100644 index 0000000000000000000000000000000000000000..a75a417448cad4524fa787a6bb8be7d59e808d8c GIT binary patch literal 6964 zcmd6M_g53&7wrUtBnp_&K}rZU0@8ak7zCn(k3mE_igXClL1_ko&`~12C>jwlpcLtf zfYM7WAR=9g^dg|tH@@%x@YeewnZ2@R-8s2)?%DgC9seJ}i0y>H2><}tOpI|v@Y?b3 z13M0W)322kfES2A(Z~QO>l6G100Ju}IP8@W`(-&yONKo`pO7w+?Nhc0_pxvJEb7I{@?KXK zEr~bYAPr@&Dr9D>Um{rszZ=@I2(}C#-(zwpG`E=3KNw#r(+XrK`v^l)&zV67oTia$ zu-_M&IormCgzrM3I@tZ?N#q)IeJ9EYCBk$Fe{f2@+=3JQ-DAql$3+hW82HCYKmBcmc&14%Ki(2&bZv67jUKml&Wu)y0Qoe{@&WOR>d}RK9x+_ zc9}ij%qcEHvM-f{g^<6rF~)krK=8A**YhhBVwRSp@jW;D6bQmD1s~8tfFS7#LkY+Vp6&&zNqEyDaO}ifDYD*TW0&6PhGSQ;qhNA;6 zV4odn`O>C_^kIH}{z6>DwoZfZ@xQ4~a zAl3^A#r{SOqlbpigd1ORL(C8|xFAS`R!@$qr#>!B7g#z5$iMP5ZGs|oV<|P93~x$E zDRE)FM1*Fqdz<|8_s+lo;+>?>Nx+9WYSb^tyh=d-@>|cOx-$ty`aHVVxc7FTofBUt zCnx7V_=ZU%g_r>*lN(niEUKwK%sa3$`QqB%oA2r8x)~c|WrNPG#220Tt2S`-rR;vlFN&xxy zPSjCI|8%*|Sv2VcPziD59Fxa5#)m}DA{kA%-z(Ay8NXW(m69gmOh9XEt2|};4;lzD zf)J*2kKV5I2A@KYHIPQ@?_|o^Y#V314#9-Z_GC9OV_(T2mt!gWt1=-^6ff$lS)tLu zpEJmO4nv0WJ-UCXF7_V62t5^JUK{+H9Y6!Mt$hA>xD54K0P_J;9%Iaoc+n69IATLj z^dm)3v};nj{&dbkwW(<^4Uw`l=<5@oyTRlDb?Z>>V_O}OBK-3UuDDL-Z4d;PEs8A zuD0&p*fxJ8td?tPUoe~86OCM_g|?&7DSKL1Jar$`q*g3^O+bNraQcJqz9A4|X&;AV zsN#OdNGGgxjkE{Mv$3(MCM!yzr$p2FjwRJ1nnh}!i$HTV zC1iW*L!wCEi=_uT(*WR#K*~F_Sj}C)IepBEwxJLDR4im%e#-;BPZT}|IQ0K|)Saw2 zcj5Byk-S~P3pRH4m2Yk;eb}~Eze{PBvtwn{dWkqv$(1u^2+WKoaO*aEx$J6y)~Z|0 z$j;9Jxnw+FEE-0Zsa!d@6~_DSg$I4}aE;3JcYUJdr81Q*{w7R17leq_;J5mHB!b$NHs@k zhUI4}Mu*PY?+W+b;6&OzuI_7EyYKumqWfwJ%7D^~T$ch~p-yJu0vZQ*J*@&>oROjZ zeE7o5wQAKU`NH(X{rkuip0Z1&T-cx=zU@{vK26nK2JGni)4O*JeMlI%8V~oRx zJssecckBx3Dqg6geL;C%L(W=)eCyi>I?&v1PfvDAL99Pe^&HI8QBzYRSv-H-+!(s4 zmaXjC_mJ}EP1UUBa$u~31_k*M!Fz~I)Kr|8AMmPz;kKltq_mOA zRnbSGrl5#jJcUhfM2&F{gVz2P>T|h>sT;WcwYGQ;M)I*^$J#R{V;>O5AV7IF#O|YM z8xe_v`O2cLhXysnZaO+T_Jc`rs1aNb7wt1>W4qAG!H}?C>C9=Y#9ACvgwjY8Vn+iPqp zZg!U2WtDrgyPqdg=5h4E@7xL_uVU=wnXx&&v*Zg;UVn*&A`cP=cbn8SEz3@d#%eCs z&&1aTXII3-L@yxLzw#sXbe(^a4-O}Zc z-2@AT-vZ(A`Qk9e4d>a*&wTOg3w+uN{|*bn_fF#Y+h^5!W6s5zrfCYS4!lsv&?{q) z#gFan4)z(RhT~(eJVbdp35)=bDub54dsj$qtVli1lcXRF#BO9kDT=fE(g_-;jec3@ zbyJ@9FcZuc)-r!i77J36HjLah5P-IR7jdx5D{oi-8*T|9T3%x;vcj+K2x7-jN&kY3hkGl{i;FZzKh8 zX_!6j)3`oO(Rjk^HVR`b+d43t`0cK(t-1IL>Sv38c2iN4Kd*CD{`6Do-m&IWa{2+M z-08tXxh&&_^@5& z61gjQEA{A;IXC)A`C(+3C>J_GTwzLMHbjO!O(rm%=qFsV>eE4~cxSKcnU0u}#{Il4 zt9v?=3KD7|#f4XJQ4l=bHpiMp4|%y`*#ckURP6Vob9;sh3_~6o)h>G> z+y)akf0J!z_rT~J{x1UX%2e18!($>o1U=I<1mAxujEquz&xBkqu0DLN4BL%=df^;w z9ge&7V--|Kc6jlXe{1bOz8%0cwMZrIKW;Ax3zOkzijI!H!^+BfYt6m?0*(;wpk;^< zZF@qgb!LjF!O*tlhQlX|_uj!CA*ReI8a2Gqwr&=l;jd&KX`WAe|NedEDOOe;N673n zzNEjFsi4p(2nrTOl}0HDWxjuO#$L)JN#lH)O2b?}Va{SXXpeVzbV}70dk)`eRP@dx zwD-H6XK%ym=dnCdkhxC+XSr-z=YkV{qiLmSLSNL_ACch-Z5gUYwOF?rJ!9dKLy4m* zF-5t^CsF3L=vzp4MOk7WoV>E0>=wu?_(OYt`samPwCG|n!|*HJeLArt9vv$U_)iv`1ypHq~%{Rp6X=@4Oq_*xen zX3t({z+ML&OuatCHZ$?4b${BI{r{~ZgXJ?4#pO}q1(cLqk5igtpnnC?5h|0%y)ZP6 zO()Z>-jUS9g-eJLdy350_qL)PnaK46xcW>!z9f9t_w%-Yk`^Zp_L>P9j1Qsf*?ETB z>mN)m8Py}E@VHA_CP9hBg{c2MNfY~>QY#JloJb{#WP9{fZqK!Gf}7#1Zc+^O`48Wu zTIyTYJ(LYHjSVo74A=9U`a_q2PMY5{dCaVip%t7i{kePKlkdp1}S=d}-&%tGa@zel<>zz1^s# z4~o@b(Hs4=JLp~NV9rkav+6p7w9gO}rtvR?_T}v7ge#Efp*&Q4={4Y14)Mj@tS@Bc zn`0&cA#V7*bCpVr9GCxZSCx{6SObyT})4DH$2n}T*J6Inqi|YLhp*OBhQT|%5Bm_}tgYr`R4wZLM&ApIQZ=wA`fDD3 zzIfv9f^iz@?w}O%^<0x{k|rjhDDh;hzQs--cq;z#0JV&b$8RISt^x0C1-}R0s{#j= ze0gfod=RhgJS+It@~%>qBU#`gKD-|Ebb@ewl>36_7b+?fJ+*G)bHa1*W$59zZ{Kph zoa2!O@Bj9Z3*r^*Ne`Asq`nQZGbig%D7v0SocBLjpW6D0gh$t1NHY_g>NJ@^Fl^~t z>1BXMcIcO6)cN!0M-U7jxh&1!@r0IQ_qHkFuQo}y)bqaQ<7 zxJB&JhD@lMsM`y++f-Z2*{J^L{Lv83pmT!%aYSsYT()`aC3WiSCD)up=xe>$cu=Hl zN%TF+@<*$Rb!1aQGMLZI*%#)E8P_~wZFlaSXMT3^*Sf#oG=H@gQrs~4ceRXV*^j07 zEFza=qZRoZH|MpC(pEfqeE1~wJix+}S|t6NYAJkfx5S(mEDAj6sR!a-@$&-ot;+{( z`n}f(9OAtsnSaVZ!csuY?qLZM>-9b!(Z2qcesxi8C~QU?8ygqL0#a*J%A5o+sQ7US zVR+x$ZdA4B$W<>8^-px_^Es_tOlU$EwO0??)Xz&x!9RuTzhgpJ(64sCxtqm1WwNMgig-i7|8)Ys4c&0Z zoLst+g<=zhMrN&gg&GDu6TV#@s%4huQmF|xZ5pvsuaOL2>qQw*QQMWD!Fo9t472Rhx4#rOu$h+B4 z*G+XKF^UXF`mz+KC&hC?A^1Om>mAf^%MRZeH>&5Io2WSZMLI#xIo*HqwmVEoM`yoL zBPEpf!u7)1O2cxFMvB8QsYWCK;y5Dslxi!V*MH9I6$TX8PZU^pmddOp@@FP}Qn^QS zcKY)E8gE?2G)E3bDX@+UL*LhUsS6=TcRIvUdxGVZ0?u#p805uJTuJi+NV}qHJ%-C_ zfWzvujY*5r%x|+dlK7KA%DcrFG}156OhAoV$}O_o*)j3U9^BPEfGV$EGoU0Q*IWA; z?@AbMg33xtEoOYhV5e~vcger&b9{ZYRkN%Rw!Tz+NBnC>7SO!+kZ5}}@OKa-U>_BM zhSN@JVnz2WZdULb*hW!`zX6g(`ehF9BE~+^E*8G(tPf}kfL>p_hhRZXo$@-jLDWVH zAq*LGHLFNnZ6*UsFnWp`qoVm;^ozArMy)Z!Y}^oUl6KZaFOD)O?uTnL4BkHb#D6zJ z{U+aku=k37>XH(>xdWp{R3fkQ{1`vu69*I!AmW`nAFQ(uG{(CnSxxMg(UpT^oYB25 z{#XPwFFDdBL36x_s)dTlOGi6P!rI-vO>udcurf9~!ZjY~d%Z+n`9m|XpBp=UcV*ow zC3U1HmJ@m42X;`09UZV@zcbD%*JJsRgLf)%&umt!C?S4THDEW73<9c_E^0laxPf5!I%UE^DVGkhIFUDhP>J z$SAu9Pwg&G`aJMOYbhlZ`DiZ-8A(dfbhv>&GtK;Oe3gYVGbf3Cb;Z}5VJ$p(Og|7+ z`8ld(auB#R`PocAd;zSxAp-gJoww>{`ITL4V<|q}j(gYf7|*Knv4_trs)*2EdM0O$ z+NM7h;c>yonz7c4ai12xV9WLt`>GdfIvrQr9}){YQLBw^Gq6t*COJvcocXQJqk501 z^ zjg-U_JK5K$oI<&t!H;CXtry!Wj$7^eo4l!jUQcUP(9wo59ZK|kx(aD7!Ixb88>g6f z!^*jCsqLzbci?e!ge*pC!+&}DKVd)v?B49GylZ+JKK*-8I3H5k^3n`+_+yq6INfPd zLv)AfvbHuwqb4f%M_j6+m2HFt4H>=sTX+fkP;!8YpDcP7Ki{m{05+ffB0@q3;Uzkr z*|JizVnzPQ^+zv*kPHu}9?`S2pL#tKO~FCYuZZ-X#R#Y0vZ&#cvSaFys8Y&&qtYCc z%U*rm$3AqCy2MPkY4eTFKY#v+TI{`_clPmywE#W2>OSe3{t^C zo{v6r!OX_>`--zcXI<&lvyCk=XSp{ymNRTf{Kv7)bFAT zbeIFV4R&7&P@EJ$0W{$kK|$n;L7N)V*S<84GJoBP_2|GOARr(xW8}tUON@=GK=N`l z>Ki+59H364=;fwMkur=-7JXyJmBy-Rp-!!bD9 z)+4572ju-$Z8gy%Q^fjkq4VYwFo6Qp>1KL^(V7WPM?vJ} z3}Z@Si8K}CzaVfU{ihr_;SC7sf5dRh)6b?|jw@-&W-C|xm}j-!l#f>2hML?x%Nvbt zOIIpLG-hm8QTCH5Wy#Zj{GCnuwdAA&S+<~^QF_JS^1#{WBrbppeYWe7)@YFsFu~D1 z^wPF&W6#;RQ)@IzSNpA$F~JNb8iX!-f?V&V)Oz-jPFRSc`|jR30JEg}$&)9kJX+Tb zwRfP|OzkH`)uhn;(7WPj2(VdsFWKxp*PrH34iHB;dO;&a6CFK;3741} z#lI@BW=ogD$WiBYH2gA7i8-@Ve>C%X#?NDMwpiRL0GRt*-(ReB=HvYW)Q5@hm6l~f zW4{94VB2_)V-+$fv*;-vTop5*lMb9hhE}ea0nL$-l4!!8{cD2lr!r|-gu?4`UK(a; zEswT@EFqv-aVCT@@*f{)b;Mv7wab`5V6j$I^H>3NOin}(2HP@&;KhWY&-v?Mgj~nz ztF>%=0y`4Vu&;DSRzkT`y=$SlKa0_p@ zI0u3g_P^D*VnOTW`oL~VX%q;!8|S^HS;08|KMm;a5tEQ7jMOz^_z<+g024z3uFSxZ G{C@!3_0J^$ literal 0 HcmV?d00001 diff --git a/entry/src/main/js/default/res/image/group.svg b/entry/src/main/resources/base/media/group.svg similarity index 100% rename from entry/src/main/js/default/res/image/group.svg rename to entry/src/main/resources/base/media/group.svg diff --git a/entry/src/main/js/default/res/image/ic_avatar_normal_light.svg b/entry/src/main/resources/base/media/ic_avatar_normal_light.svg similarity index 100% rename from entry/src/main/js/default/res/image/ic_avatar_normal_light.svg rename to entry/src/main/resources/base/media/ic_avatar_normal_light.svg diff --git a/entry/src/main/resources/base/media/ic_contact_icon.png b/entry/src/main/resources/base/media/ic_contact_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cc0745c8f9480679ee3a02202f15b148f0f2e90c GIT binary patch literal 31907 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 + + ic_contacts_Dialled + + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/ic_contacts_Reject.svg b/entry/src/main/resources/base/media/ic_contacts_Reject.svg new file mode 100644 index 0000000..13107c3 --- /dev/null +++ b/entry/src/main/resources/base/media/ic_contacts_Reject.svg @@ -0,0 +1,14 @@ + + + ic_contacts_Reject + + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/js/default/res/image/ic_contacts_add_m.svg b/entry/src/main/resources/base/media/ic_contacts_add_m.svg similarity index 100% rename from entry/src/main/js/default/res/image/ic_contacts_add_m.svg rename to entry/src/main/resources/base/media/ic_contacts_add_m.svg diff --git a/entry/src/main/js/default/res/image/ic_contacts_add_m2.svg b/entry/src/main/resources/base/media/ic_contacts_add_m2.svg similarity index 100% rename from entry/src/main/js/default/res/image/ic_contacts_add_m2.svg rename to entry/src/main/resources/base/media/ic_contacts_add_m2.svg diff --git a/entry/src/main/js/default/res/image/ic_contacts_arrow_unfold_s.svg b/entry/src/main/resources/base/media/ic_contacts_arrow_unfold_s.svg similarity index 100% rename from entry/src/main/js/default/res/image/ic_contacts_arrow_unfold_s.svg rename to entry/src/main/resources/base/media/ic_contacts_arrow_unfold_s.svg diff --git a/entry/src/main/js/default/res/image/ic_contacts_arrow_up.svg b/entry/src/main/resources/base/media/ic_contacts_arrow_up.svg similarity index 100% rename from entry/src/main/js/default/res/image/ic_contacts_arrow_up.svg rename to entry/src/main/resources/base/media/ic_contacts_arrow_up.svg diff --git a/entry/src/main/resources/base/media/ic_contacts_assistant.svg b/entry/src/main/resources/base/media/ic_contacts_assistant.svg new file mode 100644 index 0000000..03d1297 --- /dev/null +++ b/entry/src/main/resources/base/media/ic_contacts_assistant.svg @@ -0,0 +1,31 @@ + + + ic_Edit Relationship + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/ic_contacts_birthday.svg b/entry/src/main/resources/base/media/ic_contacts_birthday.svg new file mode 100644 index 0000000..327d44d --- /dev/null +++ b/entry/src/main/resources/base/media/ic_contacts_birthday.svg @@ -0,0 +1,31 @@ + + + ic_Edit Birthday + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/js/default/res/image/ic_contacts_call_dial_56.svg.svg b/entry/src/main/resources/base/media/ic_contacts_call_dial_56.svg similarity index 100% rename from entry/src/main/js/default/res/image/ic_contacts_call_dial_56.svg.svg rename to entry/src/main/resources/base/media/ic_contacts_call_dial_56.svg diff --git a/entry/src/main/js/default/res/image/ic_contacts_call_dial_56_clicked.svg.svg b/entry/src/main/resources/base/media/ic_contacts_call_dial_56_clicked.svg similarity index 100% rename from entry/src/main/js/default/res/image/ic_contacts_call_dial_56_clicked.svg.svg rename to entry/src/main/resources/base/media/ic_contacts_call_dial_56_clicked.svg diff --git a/entry/src/main/js/default/res/image/ic_contacts_call_in_mini.svg b/entry/src/main/resources/base/media/ic_contacts_call_in_mini.svg similarity index 93% rename from entry/src/main/js/default/res/image/ic_contacts_call_in_mini.svg rename to entry/src/main/resources/base/media/ic_contacts_call_in_mini.svg index db22021..c0d4d91 100644 --- a/entry/src/main/js/default/res/image/ic_contacts_call_in_mini.svg +++ b/entry/src/main/resources/base/media/ic_contacts_call_in_mini.svg @@ -1,6 +1,6 @@ + + ic_edit company + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/js/default/res/image/ic_contacts_details_arrow_down.svg b/entry/src/main/resources/base/media/ic_contacts_details_arrow_down.svg similarity index 100% rename from entry/src/main/js/default/res/image/ic_contacts_details_arrow_down.svg rename to entry/src/main/resources/base/media/ic_contacts_details_arrow_down.svg diff --git a/entry/src/main/js/default/res/image/ic_contacts_dialer.svg b/entry/src/main/resources/base/media/ic_contacts_dialer.svg similarity index 100% rename from entry/src/main/js/default/res/image/ic_contacts_dialer.svg rename to entry/src/main/resources/base/media/ic_contacts_dialer.svg diff --git a/entry/src/main/js/default/res/image/ic_contacts_empty_group.svg b/entry/src/main/resources/base/media/ic_contacts_empty_group.svg similarity index 100% rename from entry/src/main/js/default/res/image/ic_contacts_empty_group.svg rename to entry/src/main/resources/base/media/ic_contacts_empty_group.svg diff --git a/entry/src/main/js/default/res/image/ic_contacts_favorite_filled_m.svg b/entry/src/main/resources/base/media/ic_contacts_favorite_filled_m.svg similarity index 100% rename from entry/src/main/js/default/res/image/ic_contacts_favorite_filled_m.svg rename to entry/src/main/resources/base/media/ic_contacts_favorite_filled_m.svg diff --git a/entry/src/main/js/default/res/image/ic_contacts_favorite_filled_m_black.svg b/entry/src/main/resources/base/media/ic_contacts_favorite_filled_m_black.svg similarity index 100% rename from entry/src/main/js/default/res/image/ic_contacts_favorite_filled_m_black.svg rename to entry/src/main/resources/base/media/ic_contacts_favorite_filled_m_black.svg diff --git a/entry/src/main/js/default/res/image/ic_contacts_favorite_m.svg b/entry/src/main/resources/base/media/ic_contacts_favorite_m.svg similarity index 100% rename from entry/src/main/js/default/res/image/ic_contacts_favorite_m.svg rename to entry/src/main/resources/base/media/ic_contacts_favorite_m.svg diff --git a/entry/src/main/js/default/res/image/ic_contacts_favorite_me_36.svg b/entry/src/main/resources/base/media/ic_contacts_favorite_me_36.svg similarity index 100% rename from entry/src/main/js/default/res/image/ic_contacts_favorite_me_36.svg rename to entry/src/main/resources/base/media/ic_contacts_favorite_me_36.svg diff --git a/entry/src/main/resources/base/media/ic_contacts_join.svg b/entry/src/main/resources/base/media/ic_contacts_join.svg new file mode 100644 index 0000000..8c8bf59 --- /dev/null +++ b/entry/src/main/resources/base/media/ic_contacts_join.svg @@ -0,0 +1,31 @@ + + + ic_Edit Group + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/ic_contacts_m.svg b/entry/src/main/resources/base/media/ic_contacts_m.svg new file mode 100644 index 0000000..35349de --- /dev/null +++ b/entry/src/main/resources/base/media/ic_contacts_m.svg @@ -0,0 +1,13 @@ + + + Public/ic_public_contacts_group_filled + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/js/default/res/image/ic_contacts_name_m.svg b/entry/src/main/resources/base/media/ic_contacts_name_m.svg similarity index 100% rename from entry/src/main/js/default/res/image/ic_contacts_name_m.svg rename to entry/src/main/resources/base/media/ic_contacts_name_m.svg diff --git a/entry/src/main/resources/base/media/ic_contacts_nickname.svg b/entry/src/main/resources/base/media/ic_contacts_nickname.svg new file mode 100644 index 0000000..ab75c2f --- /dev/null +++ b/entry/src/main/resources/base/media/ic_contacts_nickname.svg @@ -0,0 +1,31 @@ + + + ic_Edit Nickname + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/js/default/res/image/ic_contacts_voicemail_mini.svg b/entry/src/main/resources/base/media/ic_contacts_voicemail_mini.svg similarity index 100% rename from entry/src/main/js/default/res/image/ic_contacts_voicemail_mini.svg rename to entry/src/main/resources/base/media/ic_contacts_voicemail_mini.svg diff --git a/entry/src/main/js/default/res/image/ic_delete_m.svg b/entry/src/main/resources/base/media/ic_delete_m.svg similarity index 100% rename from entry/src/main/js/default/res/image/ic_delete_m.svg rename to entry/src/main/resources/base/media/ic_delete_m.svg diff --git a/entry/src/main/resources/base/media/ic_dial_icon.png b/entry/src/main/resources/base/media/ic_dial_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4ff86a4ecdd558c70adbf103ebf134aca8e7dc45 GIT binary patch literal 34967 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 + + Public/ic_public_phone_filled + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/js/default/res/image/ic_phonecall_m_block.svg b/entry/src/main/resources/base/media/ic_phonecall_m_block.svg similarity index 100% rename from entry/src/main/js/default/res/image/ic_phonecall_m_block.svg rename to entry/src/main/resources/base/media/ic_phonecall_m_block.svg diff --git a/entry/src/main/js/default/res/image/ic_play_filled_m.svg b/entry/src/main/resources/base/media/ic_play_filled_m.svg similarity index 100% rename from entry/src/main/js/default/res/image/ic_play_filled_m.svg rename to entry/src/main/resources/base/media/ic_play_filled_m.svg diff --git a/entry/src/main/js/default/res/image/ic_public_about_m.svg b/entry/src/main/resources/base/media/ic_public_about_m.svg similarity index 100% rename from entry/src/main/js/default/res/image/ic_public_about_m.svg rename to entry/src/main/resources/base/media/ic_public_about_m.svg diff --git a/entry/src/main/resources/base/media/ic_public_add.svg b/entry/src/main/resources/base/media/ic_public_add.svg new file mode 100644 index 0000000..3036f44 --- /dev/null +++ b/entry/src/main/resources/base/media/ic_public_add.svg @@ -0,0 +1,13 @@ + + + Public/ic_public_add + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/ic_public_add_norm.svg b/entry/src/main/resources/base/media/ic_public_add_norm.svg new file mode 100644 index 0000000..6ef7c92 --- /dev/null +++ b/entry/src/main/resources/base/media/ic_public_add_norm.svg @@ -0,0 +1,31 @@ + + + Public/ic_public_add_norm + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/ic_public_add_norm_filled.svg b/entry/src/main/resources/base/media/ic_public_add_norm_filled.svg new file mode 100644 index 0000000..4b6467b --- /dev/null +++ b/entry/src/main/resources/base/media/ic_public_add_norm_filled.svg @@ -0,0 +1,30 @@ + + + Public/ic_public_add_norm_filled + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/ic_public_back.svg b/entry/src/main/resources/base/media/ic_public_back.svg new file mode 100644 index 0000000..50e4ecd --- /dev/null +++ b/entry/src/main/resources/base/media/ic_public_back.svg @@ -0,0 +1,13 @@ + + + Public/ic_public_back + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/ic_public_cancel.svg b/entry/src/main/resources/base/media/ic_public_cancel.svg new file mode 100644 index 0000000..bdec70b --- /dev/null +++ b/entry/src/main/resources/base/media/ic_public_cancel.svg @@ -0,0 +1,30 @@ + + + Public/ic_public_cancel + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/ic_public_close_filled.svg b/entry/src/main/resources/base/media/ic_public_close_filled.svg new file mode 100644 index 0000000..4874b1a --- /dev/null +++ b/entry/src/main/resources/base/media/ic_public_close_filled.svg @@ -0,0 +1,31 @@ + + + Public/ic_public_close_filled + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/ic_public_code.svg b/entry/src/main/resources/base/media/ic_public_code.svg new file mode 100644 index 0000000..f529eb9 --- /dev/null +++ b/entry/src/main/resources/base/media/ic_public_code.svg @@ -0,0 +1,13 @@ + + + Public/ic_public_code + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/ic_public_contacts.svg b/entry/src/main/resources/base/media/ic_public_contacts.svg new file mode 100644 index 0000000..ae140ee --- /dev/null +++ b/entry/src/main/resources/base/media/ic_public_contacts.svg @@ -0,0 +1,31 @@ + + + Public/ic_public_contacts + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/ic_public_contacts_group_filled.png b/entry/src/main/resources/base/media/ic_public_contacts_group_filled.png new file mode 100644 index 0000000000000000000000000000000000000000..b34da450d4f688d0353ae6170eb03dfbfb1e695e GIT binary patch literal 1056 zcmV+*1mF9KP)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#000Ab zNklA$m%J5Hf~lMASp1OQJ>O zG!2u2APbcUivkIxmn?no!R90%6b$wt;e&)vIb;6W{dMl$4aLpv?(R+~Jn(Zr&-M4a zpPk>i-*c|Ow*6zqG_U;Tb3n`~hA3JgU=}6bkn9h(G=lT%03U{6=tN1wXm)|dTPq0S zKFyBNFs{22qTO1tu+#&)MY`5U!wJT`C~a&}yS*VTn1H{AzWFrUKds}9iXN0VP0(ywNmsXi zKukEO;rXqIMFt_o@kDe4V)JPOafD-^%&vHX`T=qAs|FxN5VC_;eIqpPFG7@i zsGX3?NYN&FM0&*sY1@}n@rRLTcYv?lC4W7QQKc0b$qXp)Fdr=1Em!RHB1$>MF3A96 zektEx(I_C`H?S?&V!tn(KG2w7g6NmZtM;ChwPPXTMNUpW4C0Uy-AOQ0B}#A3tM7*b zE!Bi8b$zxB^Yk#x#y$8Qc?*-Jj~)PO@=!?Xe-syv^rClIOf8I3Gsbv#QoTvfs!5mH z6g{ev1y>)9DHb1gpb1}(%brxT{3aI<6k0mo7P<%BqWI`Yj7d4Be`Y3sn zKB-q}PaMcI7bXT`a3lNXlC@0~Cf9l=;Xpi)95&|KlJ{jnEK*8|(pB;VN0w`IWdFG0 zWH}~`24OlLNY)7cehV + + ic_public_detail + + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/ic_public_dial_delete.svg b/entry/src/main/resources/base/media/ic_public_dial_delete.svg new file mode 100644 index 0000000..9f3e5a9 --- /dev/null +++ b/entry/src/main/resources/base/media/ic_public_dial_delete.svg @@ -0,0 +1,14 @@ + + + ic_public_dial_delete + + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/ic_public_drawer.svg b/entry/src/main/resources/base/media/ic_public_drawer.svg new file mode 100644 index 0000000..e93082c --- /dev/null +++ b/entry/src/main/resources/base/media/ic_public_drawer.svg @@ -0,0 +1,31 @@ + + + Public/ic_public_drawer + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/ic_public_edit.svg b/entry/src/main/resources/base/media/ic_public_edit.svg new file mode 100644 index 0000000..6a89c9a --- /dev/null +++ b/entry/src/main/resources/base/media/ic_public_edit.svg @@ -0,0 +1,13 @@ + + + Public/ic_public_edit + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/ic_public_email.svg b/entry/src/main/resources/base/media/ic_public_email.svg new file mode 100644 index 0000000..95f18e7 --- /dev/null +++ b/entry/src/main/resources/base/media/ic_public_email.svg @@ -0,0 +1,31 @@ + + + Public/ic_public_email + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/ic_public_home.svg b/entry/src/main/resources/base/media/ic_public_home.svg new file mode 100644 index 0000000..6c4aa91 --- /dev/null +++ b/entry/src/main/resources/base/media/ic_public_home.svg @@ -0,0 +1,31 @@ + + + Public/ic_public_home + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/ic_public_message.svg b/entry/src/main/resources/base/media/ic_public_message.svg new file mode 100644 index 0000000..1268b5d --- /dev/null +++ b/entry/src/main/resources/base/media/ic_public_message.svg @@ -0,0 +1,31 @@ + + + Public/ic_public_message + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/ic_public_message_filled.svg b/entry/src/main/resources/base/media/ic_public_message_filled.svg new file mode 100644 index 0000000..47989e2 --- /dev/null +++ b/entry/src/main/resources/base/media/ic_public_message_filled.svg @@ -0,0 +1,20 @@ + + + message + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/ic_public_more.svg b/entry/src/main/resources/base/media/ic_public_more.svg new file mode 100644 index 0000000..908c0cf --- /dev/null +++ b/entry/src/main/resources/base/media/ic_public_more.svg @@ -0,0 +1,13 @@ + + + Public/ic_public_more + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/js/default/res/image/ic_comfirm.svg b/entry/src/main/resources/base/media/ic_public_ok.svg similarity index 100% rename from entry/src/main/js/default/res/image/ic_comfirm.svg rename to entry/src/main/resources/base/media/ic_public_ok.svg diff --git a/entry/src/main/resources/base/media/ic_public_phone.svg b/entry/src/main/resources/base/media/ic_public_phone.svg new file mode 100644 index 0000000..c3cc746 --- /dev/null +++ b/entry/src/main/resources/base/media/ic_public_phone.svg @@ -0,0 +1,31 @@ + + + Public/ic_public_phone + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/ic_public_phone_filled.svg b/entry/src/main/resources/base/media/ic_public_phone_filled.svg new file mode 100644 index 0000000..12d06a1 --- /dev/null +++ b/entry/src/main/resources/base/media/ic_public_phone_filled.svg @@ -0,0 +1,20 @@ + + + call2 + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/ic_public_phone_filled_white.svg b/entry/src/main/resources/base/media/ic_public_phone_filled_white.svg new file mode 100644 index 0000000..cef6163 --- /dev/null +++ b/entry/src/main/resources/base/media/ic_public_phone_filled_white.svg @@ -0,0 +1,14 @@ + + + ic_public_phone_filled + + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/ic_public_ring.svg b/entry/src/main/resources/base/media/ic_public_ring.svg new file mode 100644 index 0000000..b2101d7 --- /dev/null +++ b/entry/src/main/resources/base/media/ic_public_ring.svg @@ -0,0 +1,13 @@ + + + Public/ic_public_ring + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/ic_public_select_all.svg b/entry/src/main/resources/base/media/ic_public_select_all.svg new file mode 100644 index 0000000..a2e916e --- /dev/null +++ b/entry/src/main/resources/base/media/ic_public_select_all.svg @@ -0,0 +1,14 @@ + + + ic_public_select all + + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/ic_public_spinner.svg b/entry/src/main/resources/base/media/ic_public_spinner.svg new file mode 100644 index 0000000..577fa77 --- /dev/null +++ b/entry/src/main/resources/base/media/ic_public_spinner.svg @@ -0,0 +1,30 @@ + + + Public/ic_public_spinner + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/ic_public_worldclock.svg b/entry/src/main/resources/base/media/ic_public_worldclock.svg new file mode 100644 index 0000000..e7d7d40 --- /dev/null +++ b/entry/src/main/resources/base/media/ic_public_worldclock.svg @@ -0,0 +1,30 @@ + + + Public/ic_public_worldclock + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/ic_rename.svg b/entry/src/main/resources/base/media/ic_rename.svg new file mode 100644 index 0000000..c530546 --- /dev/null +++ b/entry/src/main/resources/base/media/ic_rename.svg @@ -0,0 +1,13 @@ + + + ic_gallery_rename + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/ic_user_portrait.svg b/entry/src/main/resources/base/media/ic_user_portrait.svg new file mode 100644 index 0000000..a31f0ec --- /dev/null +++ b/entry/src/main/resources/base/media/ic_user_portrait.svg @@ -0,0 +1,28 @@ + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/keypad.png b/entry/src/main/resources/base/media/keypad.png new file mode 100644 index 0000000000000000000000000000000000000000..ec7ccd04bb0aa94a96c754c12febe29aa95b3e72 GIT binary patch literal 361 zcmV-v0ha!WP)1nIQ_^^ zok*T2^F+e@^M_b`5&1C2903gDI9`TfxG(o>@!)HdfQVcH92Wua&bjBV>#kuMs4ezypG0eD}#p0;fvA}X8`sO!2h#(b`1;AX8oX>m%REXzYt z6ydI)mYb((dh7fCTZ>ZyVMA3_CjbqA7w`SeIoE{Xv#}PB{)CT|hO7fw2Uatnt#f8i z%TQbA%$^d+Ixwe5``$DA+z)JKK>OY^ds+pojFT#y<(s)Xe9(YauE0!#;XC%|-IcLFIokxJqhMX5wTuJ7yW00000NkvXX Hu0mjfot>Og literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/base/media/keypad_white.png b/entry/src/main/resources/base/media/keypad_white.png new file mode 100644 index 0000000000000000000000000000000000000000..7bbb976357ab2f943b96abf569e137a0692df2b8 GIT binary patch literal 312 zcmV-80muG{P)>y&#fZd?qv56F>{ez1I-l3rX2v4*19^|SZilQ zG;6-Q_V4V1)EbcB&bb|cIT1bIQXvW;CIw|#9swLf2nPTwrIglM9|kE9lY$!dt0rVE z?X0!l4+4m}53&Q?yB*u=A0Fwff0@)M*&@}-sIuyXC zOuuXZvHed(-}irW9Xksa-ut(N;Nnuq=&cnf02CpFeH1`q;0w3w(f#WHeGifJ$J=-F fK6Vqp=n9+wC7FjXub@>q00000NkvXXu0mjfG+?AX literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/base/media/menu.png b/entry/src/main/resources/base/media/menu.png new file mode 100644 index 0000000000000000000000000000000000000000..b141df0ce278183a0b62d824cc6479bca45550e3 GIT binary patch literal 3894 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 P00000NkvXXu0mjfJee_i literal 0 HcmV?d00001 diff --git a/entry/src/main/js/default/res/image/name.svg b/entry/src/main/resources/base/media/name.svg similarity index 100% rename from entry/src/main/js/default/res/image/name.svg rename to entry/src/main/resources/base/media/name.svg diff --git a/entry/src/main/resources/base/media/no_call_records.svg b/entry/src/main/resources/base/media/no_call_records.svg new file mode 100644 index 0000000..f963655 --- /dev/null +++ b/entry/src/main/resources/base/media/no_call_records.svg @@ -0,0 +1,30 @@ + + + EmptyPage/15 NoCallRecords + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/no_contacts_illustration.svg b/entry/src/main/resources/base/media/no_contacts_illustration.svg new file mode 100644 index 0000000..ebd87d6 --- /dev/null +++ b/entry/src/main/resources/base/media/no_contacts_illustration.svg @@ -0,0 +1,29 @@ + + + 画板 + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/js/default/res/image/note.svg b/entry/src/main/resources/base/media/note.svg similarity index 100% rename from entry/src/main/js/default/res/image/note.svg rename to entry/src/main/resources/base/media/note.svg diff --git a/entry/src/main/resources/base/media/people_black.png b/entry/src/main/resources/base/media/people_black.png new file mode 100644 index 0000000000000000000000000000000000000000..b74ff6d77d24e60291bd76f5f79f700be1d04f4d GIT binary patch literal 1689 zcmV;K24?w*P)M(_8J* zxMaCCYK_NKSeU9j1nZ~!)2IHG6wmyV&s=};0>BFco;d<9SKwD9!13|%ft2!tlyXl9 zvFl}=0>D%VF_Th`l~UivD(0Nz=p)R!)$Q_7@hjB7ScGrPOHo3wNNJ_i7BngD24*Y#mICkNt2 z0QeLCB&9saZIt^R0Ir>L7rAjE7*fg`0*IMX>Mi#=^ajA6#-BonR~@JOBl_)?l=5AN zl1Sr2uJGPqUJD`KM{7>3wfh_}djX)eMhYV3sqZTQjGc31>PHlMKA)qFz%_m+#!TzF zJ}IHGG3JH<;mTTjnFFC10Dtn|TUAx(B}T~m`)h&~MNB|hwAN!O;LJIPr%?QPM&Mlzg%{{4oO6fV1^snEkFs>T0C3@)!z+^fiU81Be~%3w z0Gy=g&J`ZVQ8X?ER%?AOrTi4^o3#aO04VC03YY^#YmMHXwF?j{$&> z3wp867=yJ0tR%JU>AbF4DnBIvs8~fQ^|~v$`d}L=3|0e$W7gri(;jAt1JG0SRGY{-Z(ceyObmyt}f03iL5kU_EIVJc`FRSoje7xY7>{Xi;I}8h)W6xPQ20!fIy+O zayIAmJH`~%|JrprIz-uCVQ&E1%^8M?g~<@*^+d<2v$EV9fXp3cDIE=3*pN~y9&bc} z(B-as0bq>5s%y6I)&~V4#I$LeGfo_zTAzv+Qju#B0N(myQ#6^HVn8BLYppyZKc6jf%06FEu zz-B(5ujL$^$c}J}adl}${v-g2prTi###KBVmtX=0HCTgSKa9+Eibwz`>OWRPBm^Om zcopRey#OF4Jt(F2N|5h!>eL*fU5;@CK7(VifG~tB0Fn$a#^77s(C|GP^%Ee(FGtxd zi2E9`9a#f_xchkeyFCMa31e3Db||&?3IId{gl%j#QI0#; z7=tx~Mbb2sTc)l6=K1FUF!N0Ymb>99vB|i=C1MhGI>ZCbY%;Woz)xZB3jj~yl(s43 j3j?-^?o(L%*)!lj7dAV6!~95o00000NkvXXu0mjfb0iM8 literal 0 HcmV?d00001 diff --git a/entry/src/main/js/default/res/image/phone.png b/entry/src/main/resources/base/media/phone.png similarity index 100% rename from entry/src/main/js/default/res/image/phone.png rename to entry/src/main/resources/base/media/phone.png diff --git a/entry/src/main/resources/base/media/phone_small.png b/entry/src/main/resources/base/media/phone_small.png new file mode 100644 index 0000000000000000000000000000000000000000..1c79bb27dec55741dbb9648132914b76578bb9bf GIT binary patch literal 499 zcmVIJoQu+*N!a z&%675IoBne_|S>@I18L3@c$zaLTJVq$IRR!qNy=vQfKEBMnK@3&1OzS?JZO()zw-r z>XIlF@ZJmPIt5!9V=jMPAcWA4F@`J01Hv|@~J>1mkM!@6oZ zN(BVqy&nM>@4}dQ*=RImFI18^NI<~Oxfv1Nlu0BD>=8f{z{FZREsD~?0!drSa=OY$ zM_<}AYkLA%DW!&a8}wiSffh)BnMXv_0wC$iI+@*blt7t8SwR|O_IO7NY$53(RR)(G zVy%_B_;!9QkQAouiw6J~WdZ=|NkJNv)P?*T$p6Ehh}@irMtRe-QUo$&WOR1`beMTf pL^Gw-tY}u$DsVs=_8vJ4d;%MA%OP(^GerOZ002ovPDHLkV1lTB(^CKd literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/base/media/phone_white.png b/entry/src/main/resources/base/media/phone_white.png new file mode 100644 index 0000000000000000000000000000000000000000..b80cfb4e4ed7722521dfab77655d4746638fc26b GIT binary patch literal 447 zcmV;w0YLtVP)R%_4oE5>R6tSzp#stYq=H2wIg;_6?fWq~9?nvf zhg>|L$Gfvf47@n7K1P7if&cG-nH>Ol1aJgkPI6YVbCM1?@izdcp6G<+vJ^xPKtkt% z*oNfsp97egPW>Jcx+b|O0TFe;%pL&TM?_vpUJVKGLDH{_&MaLV*aEoS#}&xpm*8kC zC%)-?G$T1r zS=0tV8>${oYOX`GVI7&C$_y25?F4NM;9Q77=x1G%>P6pmtG0Vu0W^R}79`1vUTc7z zf|-ROmFtErNjdmybp~*5XkI)4ILxWLI;gzP^#bs&L?C*9r~}dToW|0#H-LX~GgEZ$ pKFSBR?jn^HMFARIL*0004CNkl|033h=KmnitssJ2-gi0t5r~-llzyWp8DgXyV-er%J(7W!o2PtGH+4Rq3 z=Jk6sH)2OaJF1H+tkjuGtP(3FP@4ZgW-KC(fj!_1I83h(#vJf_1s0P0n-#spBErot zk`Rm8&#Ky;^bS0y_bADtSH?GC5#i<*a|@WzPlgFj0E@Kf&-fxNBCddOhDAe*HMy~* zXgMO1yps_MC5}k4`$)q-ph%h;i&D!|;!XyoHzH%KhG23&x zhV6?a+pu+H_M2JQCE#yZSIoRoC3mh*eY&^a?4zE%QTu^44R74?Eo^SuwgcbQJS~Fz zE<53~G;z;C=4NYuR}`qiN~u<2l~^f(()>DOrNlk}=2LjZ?kSD300000NkvXXu0mjf D`>?dj literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/base/media/phonebook.png b/entry/src/main/resources/base/media/phonebook.png new file mode 100644 index 0000000000000000000000000000000000000000..e326dc8928471bc9f3a66c7cf28ebb3f5bd81952 GIT binary patch literal 1014 zcmV5^T z3st=x1VBXS^p7KSzQKbaoVoybXG8zU7XL4Iwk`meE6Dlz_S^G&lv%id*tsLz^e%+Mu(|AZd8>br8Xmm@}8kbzhp-yaNPDX8?o$C<*?s1 zz&@0@?J^?I(5JBmM6X`w;diR)8*gwf8KWS)2(ltqRdr^JVMS)IFvY&8Dr?Uui%na{ zAd3+pc4b*dMp>pB#IXwiOEJO!J_Q(lr_JF+OdeQv$aZ}WTPy`Q`I=P4dXbq7Eeb$= zFyW%WeQ+|b{-Q;&@$EZ+H>%42ohBmW4J1G*{G&fcv>N2#xdjO$VWX<#`Fm}%*<2Z8 z$XIh*I1y?_&P+x5*hc_#PWPpQRf4P){P!d?0<{*P8lxHvIRU0#zYr0I>{;SuoR06w zf6gyA5bsmF) z3hPY)%GboLD2wx*dc^ci0l~QotgEW(7oC+ch9V|*D`LK1s%j&r6Bq8!?TL{v8xb1S z{0K!U0fboq*r{r2|GGf7$~W1JL#Syz8#6if;LUqsBl?fIf4az~g{4bD>h_GpHfqq~*~p0MTZ zLf06>Ly>#?`s`QFN<6Bnms$E&bL`(m#01{ks=-h?8L9@8nx27^AG|Dr6HKNClluM{ z00=$1oJprk-afdK?c z4aoC0=4d0jA{8Fi2N?=l}o!07*qoM6N<$f{BUFwg3PC literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/base/media/symbol.svg b/entry/src/main/resources/base/media/symbol.svg new file mode 100644 index 0000000..b56c3c4 --- /dev/null +++ b/entry/src/main/resources/base/media/symbol.svg @@ -0,0 +1,8 @@ + + + 星号 + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/media/symbols.svg b/entry/src/main/resources/base/media/symbols.svg new file mode 100644 index 0000000..f413f7c --- /dev/null +++ b/entry/src/main/resources/base/media/symbols.svg @@ -0,0 +1,8 @@ + + + 井号 + + + + + \ No newline at end of file diff --git a/entry/src/main/js/default/res/image/uncomfirm.png b/entry/src/main/resources/base/media/uncomfirm.png similarity index 100% rename from entry/src/main/js/default/res/image/uncomfirm.png rename to entry/src/main/resources/base/media/uncomfirm.png diff --git a/entry/src/main/resources/base/media/voice.png b/entry/src/main/resources/base/media/voice.png new file mode 100644 index 0000000000000000000000000000000000000000..e4c7573a5aa45ce552f82470bfb2e236a7a64301 GIT binary patch literal 726 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 Wogo%>Em~4>EaP<1%^qtTn*AR-8KOY| literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/dark/element/color.json b/entry/src/main/resources/dark/element/color.json new file mode 100644 index 0000000..56d4a70 --- /dev/null +++ b/entry/src/main/resources/dark/element/color.json @@ -0,0 +1,20 @@ +{ + "color": [ + { + "name": "textColorPrimary", + "value": "#DBFFFFFF" + }, + { + "name": "textColorTertiary", + "value": "#66FFFFFF" + }, + { + "name": "colorConnected", + "value": "#00B377" + }, + { + "name": "colorControlNormal", + "value": "#19FFFFFF" + } + ] +} \ No newline at end of file diff --git a/entry/src/main/resources/en_US/element/string.json b/entry/src/main/resources/en_US/element/string.json new file mode 100644 index 0000000..dabd567 --- /dev/null +++ b/entry/src/main/resources/en_US/element/string.json @@ -0,0 +1,876 @@ +{ + "string": [ + { + "name": "app_name", + "value": "Contacts" + }, + { + "name": "mainability_description", + "value": "ETS_Empty Ability" + }, + { + "name": "dialer", + "value": "Telephone" + }, + { + "name": "dialer_calllog", + "value": "Call log" + }, + { + "name": "dialer_description", + "value": "display dialpad and contacts" + }, + { + "name": "contact_num", + "value": " %d contacts" + }, + { + "name": "contact", + "value": "Contact" + }, + { + "name": "contact_login_in", + "value": "login" + }, + { + "name": "contact_import_contacts", + "value": "import contact" + }, + { + "name": "create_contact", + "value": "new contact" + }, + { + "name": "edit_contact", + "value": "编辑联系人" + }, + { + "name": "contact_scan_card", + "value": "scan the business card." + }, + { + "name": "no_contacts", + "value": "no contact" + }, + { + "name": "contact_list_search", + "value": "searching for contacts" + }, + { + "name": "contact_list_search_empty", + "value": "no matching results" + }, + { + "name": "noName", + "value": "(no name)" + }, + { + "name": "phone_type_mobile", + "value": "phone" + }, + { + "name": "phone_type_home", + "value": "dwellings" + }, + { + "name": "phone_type_work", + "value": "unit" + }, + { + "name": "phone_type_main", + "value": "Switchboard" + }, + { + "name": "phone_type_fax_work", + "value": "Company Fax" + }, + { + "name": "phone_type_fax_home", + "value": "Residential Fax" + }, + { + "name": "phone_type_pager", + "value": "pager" + }, + { + "name": "phone_type_other", + "value": "other" + }, + { + "name": "phone_type_custom", + "value": "custom" + }, + { + "name": "email_type_home", + "value": "Private" + }, + { + "name": "email_type_work", + "value": "unit" + }, + { + "name": "email_type_other", + "value": "other" + }, + { + "name": "email_type_custom", + "value": "custom" + }, + { + "name": "text", + "value": "文本" + }, + { + "name": "qr_code", + "value": "qrCode" + }, + { + "name": "v_card", + "value": "vCard" + }, + { + "name": "call_setting_type_paste", + "value": "Paste" + }, + { + "name": "call_setting_type_batch_delete", + "value": "Batch Delete" + }, + { + "name": "call_setting_type_harassment_interception", + "value": "Harassment Interception" + }, + { + "name": "call_setting_type_setting", + "value": "Setting" + }, + { + "name": "contact_setting_type_scancard", + "value": "Scan vCard" + }, + { + "name": "send_message", + "value": "Send message" + }, + { + "name": "copy_phoneNumber", + "value": "Copy number" + }, + { + "name": "edit_beforeCall", + "value": "Edit before call" + }, + { + "name": "add_to_blockList", + "value": "Block contact" + }, + { + "name": "delete_call_logs", + "value": "Delete entry" + }, + { + "name": "all_call_logs", + "value": "All" + }, + { + "name": "missed_call", + "value": "Missed" + }, + { + "name": "voicemail", + "value": "Voicemail" + }, + { + "name": "dialing", + "value": "Dialing" + }, + { + "name": "recording", + "value": "Record" + }, + { + "name": "wait", + "value": "Hold" + }, + { + "name": "add_call_logs", + "value": "Add call" + }, + { + "name": "memorandum", + "value": "Notepad" + }, + { + "name": "mute", + "value": "Mute" + }, + { + "name": "groups", + "value": "Groups" + }, + { + "name": "card_holder", + "value": "CardHolder" + }, + { + "name": "my_card", + "value": "My Card" + }, + { + "name": "dialog_cancel", + "value": "Cancel" + }, + { + "name": "dialog_share", + "value": "Share" + }, + { + "name": "dialog_delete", + "value": "Delete" + }, + { + "name": "delete_dialog_title", + "value": "Do you want to delete this contact" + }, + { + "name": "cancel", + "value": "CANCEL" + }, + { + "name": "save", + "value": "SAVE" + }, + { + "name": "telep_group", + "value": "GROUPS IN PHONE" + }, + { + "name": "new_build", + "value": "New" + }, + { + "name": "no_group", + "value": "No groups" + }, + { + "name": "no_select", + "value": "None selected" + }, + { + "name": "select_num", + "value": "%d item selected" + }, + { + "name": "concal_favorite", + "value": "Unfavorites" + }, + { + "name": "favorite", + "value": "Favorites" + }, + { + "name": "edit", + "value": "edits" + }, + { + "name": "more", + "value": "More options" + }, + { + "name": "save_to_existing_contacts", + "value": "Save to Existing Contacts" + }, + { + "name": "share_contact", + "value": "Share Contacts" + }, + { + "name": "delete_contact", + "value": "Delete a contact" + }, + { + "name": "add_to_blocklist", + "value": "Add to Blocklist" + }, + { + "name": "name_pinyin", + "value": "Name Pinyin" + }, + { + "name": "delete_contact_sure", + "value": "Do you want to delete this contact?" + }, + { + "name": "delete", + "value": "Delete" + }, + { + "name": "phone", + "value": "Mobile Phone" + }, + { + "name": "nickname", + "value": "Nickname" + }, + { + "name": "group", + "value": "Group" + }, + { + "name": "website", + "value": "Web site" + }, + { + "name": "clear", + "value": "Clear" + }, + { + "name": "ringtone", + "value": "Phone ringing" + }, + { + "name": "remarks", + "value": "Remarks" + }, + { + "name": "qrcode_tips", + "value": "Scan the QR code to add a contact." + }, + { + "name": "share", + "value": "Share" + }, + { + "name": "noAnswer", + "value": "Ringing" + }, + { + "name": "reject", + "value": "Reject" + }, + { + "name": "blockCall", + "value": "Not connected" + }, + { + "name": "years", + "value": "Year" + }, + { + "name": "months", + "value": "Month" + }, + { + "name": "day", + "value": "Day" + }, + { + "name": "hour", + "value": "Hour" + }, + { + "name": "minute", + "value": "Minute" + }, + { + "name": "seconds", + "value": "Seconds" + }, + { + "name": "middleNight", + "value": "midnight" + }, + { + "name": "evening", + "value": "night" + }, + { + "name": "AM", + "value": "AM" + }, + { + "name": "PM", + "value": "PM" + }, + { + "name": "earlyMorning", + "value": "Early morning" + }, + { + "name": "justNow", + "value": "Just now" + }, + { + "name": "minutesAgo", + "value": "minutes Ago" + }, + { + "name": "yesterday", + "value": "yesterday" + }, + { + "name": "nightfall", + "value": "nightfall" + }, + { + "name": "noon", + "value": "Noon" + }, + { + "name": "morning", + "value": "Morning" + }, + { + "name": "beforeDawn", + "value": "Early morning" + }, + { + "name": "unknown", + "value": "unknown" + }, + { + "name": "timeHour", + "value": "Hour" + }, + { + "name": "AIM", + "value": "AIM" + }, + { + "name": "WindowsLive", + "value": "Windows Live" + }, + { + "name": "Yahoo", + "value": "Yahoo" + }, + { + "name": "Skype", + "value": "Skype" + }, + { + "name": "QQ", + "value": "QQ" + }, + { + "name": "Hangout", + "value": "Hangout" + }, + { + "name": "ICQ", + "value": "ICQ" + }, + { + "name": "Jabber", + "value": "Jabber" + }, + { + "name": "add_more", + "value": "Add_More" + }, + { + "name": "LunarBirthday", + "value": "Lunar Birthday" + }, + { + "name": "Anniversary", + "value": "Anniversaries" + }, + { + "name": "birth", + "value": "Birthday" + }, + { + "name": "importDay", + "value": "Other Important Dates" + }, + { + "name": "brothers", + "value": "Brother" + }, + { + "name": "assistant", + "value": "assistant" + }, + { + "name": "child", + "value": "children" + }, + { + "name": "companion", + "value": "mates" + }, + { + "name": "father", + "value": "father" + }, + { + "name": "friend", + "value": "friend" + }, + { + "name": "boss", + "value": "bosses" + }, + { + "name": "mother", + "value": "mother" + }, + { + "name": "parents", + "value": "parents" + }, + { + "name": "Partner", + "value": "Partner" + }, + { + "name": "introducer", + "value": "introducer" + }, + { + "name": "relatives", + "value": "kinship" + }, + { + "name": "sisters", + "value": "sisters" + }, + { + "name": "spouse", + "value": "spouses" + }, + { + "name": "hourMinutes", + "value": "%d:%d" + }, + { + "name": "monthDay", + "value": "%d month %d day " + }, + { + "name": "yearMonthDay", + "value": "%d year %d month %d day " + }, + { + "name": "secondsFormat", + "value": "%d seconds" + }, + { + "name": "minutesSecondsFormat", + "value": "%d minutes %d seconds" + }, + { + "name": "hourMinutesSecondsFormat", + "value": "%d hour %d minutes %d seconds" + }, + { + "name": "name", + "value": "Name" + }, + { + "name": "name_hock", + "value": " Name" + }, + { + "name": "new_group", + "value": "Create new group" + }, + { + "name": "nickname_hock", + "value": " Nickname" + }, + { + "name": "join_group", + "value": " Joining a Group" + }, + { + "name": "address_add", + "value": "Address" + }, + { + "name": "addmore", + "value": " Add More" + }, + { + "name": "instant_messaging", + "value": "Instant Messaging" + }, + { + "name": "instant_messaging_hock", + "value": " Instant Messaging" + }, + { + "name": "address_add_hock", + "value": " Address" + }, + { + "name": "website_hock", + "value": " Web site" + }, + { + "name": "remarks_hock", + "value": " Remarks" + }, + { + "name": "position", + "value": "Position" + }, + { + "name": "position_hock", + "value": " Position" + }, + { + "name": "phone_number", + "value": "Phone number" + }, + { + "name": "phone_number_hock", + "value": " Phone number" + }, + { + "name": "email", + "value": "E-mail" + }, + { + "name": "email_hock", + "value": " E-mail" + }, + { + "name": "birth_hock", + "value": " Birthday" + }, + { + "name": "assistant_hock", + "value": " assistant" + }, + { + "name": "instant_type_aim", + "value": "AIM" + }, + { + "name": "instant_type_windowslive", + "value": "WindowsLive" + }, + { + "name": "instant_type_yahoo", + "value": "Yahoo" + }, + { + "name": "instant_type_skype", + "value": "Skype" + }, + { + "name": "instant_type_qq", + "value": "QQ" + }, + { + "name": "instant_type_hangouts", + "value": "Hangouts" + }, + { + "name": "instant_type_icq", + "value": "ICQ" + }, + { + "name": "instant_type_jabber", + "value": "Jabber" + }, + { + "name": "instant_type_custom", + "value": "Custom" + }, + { + "name": "birthday_type_grebirthday", + "value": "Birthday" + }, + { + "name": "birthday_type_lunarbirthday", + "value": "Lunar Birthday" + }, + { + "name": "birthday_type_anniversaries", + "value": "anniversaries" + }, + { + "name": "birthday_type_other", + "value": "Other Important Dates" + }, + { + "name": "relationship_type_assistant", + "value": "Assistant" + }, + { + "name": "relationship_type_brother", + "value": "Brother" + }, + { + "name": "relationship_type_children", + "value": "Children" + }, + { + "name": "relationship_type_mates", + "value": "Mates" + }, + { + "name": "relationship_type_father", + "value": "Father" + }, + { + "name": "relationship_type_friend", + "value": "Friend" + }, + { + "name": "relationship_type_bosses", + "value": "Bosses" + }, + { + "name": "relationship_type_mother", + "value": "Mother" + }, + { + "name": "relationship_type_parents", + "value": "Parents" + }, + { + "name": "relationship_type_partner", + "value": "Partner" + }, + { + "name": "relationship_type_introducer", + "value": "Introducer" + }, + { + "name": "relationship_type_kinship", + "value": "Kinship" + }, + { + "name": "relationship_type_sisters", + "value": "Sisters" + }, + { + "name": "relationship_type_spouses", + "value": "Spouses" + }, + { + "name": "relationship_type_custom", + "value": "Custom" + }, + { + "name": "house_type_dwelling", + "value": "Dwelling" + }, + { + "name": "house_type_position", + "value": "Position" + }, + { + "name": "house_type_position_hock", + "value": " Unit" + }, + { + "name": "house_type_other", + "value": "Other" + }, + { + "name": "house_type_custom", + "value": "Custom" + }, + { + "name": "relation_background", + "value": "Associated Person" + }, + { + "name": "intelligent_group", + "value": "Intelligent Group" + }, + { + "name": "company", + "value": "Company" + }, + { + "name": "city", + "value": "City" + }, + { + "name": "recent_contacts", + "value": "Recent Contacts" + }, + { + "name": "mobile_group", + "value": "Mobile Group" + }, + { + "name": "number_of_people", + "value": "%d people" + }, + { + "name": "number_of_people_from_cell_phone", + "value": "there are %d people from the cell phone." + }, + { + "name": "favorite_frequent", + "value": "Frequent" + }, + { + "name": "save_to_phone", + "value": "Save to: Phone" + }, + { + "name": "save_to_phone_only", + "value": "Saved only on mobile phones. Enable cloud services to synchronize data" + }, + { + "name": "clear_calllog_sure", + "value": "Whether to clear call records?" + }, + { + "name": "new_contact", + "value": "New Contact" + }, + { + "name": "send_messages", + "value": "Send Messages" + }, + { + "name": "select_all", + "value": "Select All" + }, + { + "name": "recent", + "value": "Recent" + }, + { + "name": "no_recent_contacts", + "value": "No favorite contacts with numbers" + }, + { + "name": "no_select_contacts", + "value": "No contact with number" + }, + { + "name": "no_group_contacts", + "value": "No group contacts are available." + }, + { + "name": "unknow_location", + "value": "unKnown Location" + }, + { + "name": "no_dialer_calllog", + "value": "No Dialer Calllog" + }, + { + "name": "no_dialer_missed_calllog", + "value": "No Dialer Missed Calllog" + }, + { + "name": "from_the_accounts", + "value": "From the following accounts" + }, + { + "name": "More", + "value": "more" + } + ] +} \ No newline at end of file diff --git a/entry/src/main/resources/light/element/color.json b/entry/src/main/resources/light/element/color.json new file mode 100644 index 0000000..f891b90 --- /dev/null +++ b/entry/src/main/resources/light/element/color.json @@ -0,0 +1,28 @@ +{ + "color": [ + { + "name": "textColorPrimary", + "value": "#182431" + }, + { + "name": "textColorTertiary", + "value": "#66182431" + }, + { + "name": "colorConnected", + "value": "#00CB87" + }, + { + "name": "colorPrimaryDark", + "value": "#FFFFFF" + }, + { + "name": "colorPrimary", + "value": "#182431" + }, + { + "name": "colorControlNormal", + "value": "#19000000" + } + ] +} \ No newline at end of file diff --git a/entry/src/main/resources/rawfile/0.ogg b/entry/src/main/resources/rawfile/0.ogg new file mode 100644 index 0000000000000000000000000000000000000000..b4eca164a7a4b725965efa1257275baea696661c GIT binary patch literal 5980 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 literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/rawfile/1.ogg b/entry/src/main/resources/rawfile/1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..0b75a6c02a6cb7324db6e2e51801778726344c2e GIT binary patch literal 6073 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 literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/rawfile/11.ogg b/entry/src/main/resources/rawfile/11.ogg new file mode 100644 index 0000000000000000000000000000000000000000..bfbd2379063b08dbfaf1149594b6e7219f612989 GIT binary patch literal 6159 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 P1)-WsX*U#8J;6T#ma$Y_ literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/rawfile/2.ogg b/entry/src/main/resources/rawfile/2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..f5310b37a228538a1833daf29dee73f677c8ae32 GIT binary patch literal 5726 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 JDv9{${1a=&LtX#? literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/rawfile/3.ogg b/entry/src/main/resources/rawfile/3.ogg new file mode 100644 index 0000000000000000000000000000000000000000..7ed40a39f7e58a7f96ad7fbb8dee9eaea7d39be8 GIT binary patch literal 6114 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 Cpcg>^ literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/rawfile/4.ogg b/entry/src/main/resources/rawfile/4.ogg new file mode 100644 index 0000000000000000000000000000000000000000..4acfa62c111c03ffcecb9cc21aee0439ff43043b GIT binary patch literal 5982 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 literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/rawfile/5.ogg b/entry/src/main/resources/rawfile/5.ogg new file mode 100644 index 0000000000000000000000000000000000000000..668938a68ac3dd7b3a1490120be08926ae6cc8ac GIT binary patch literal 6029 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

D7IRef(wt&4XQ#@f8*X z2o`-;GEcek-K zCE<5xhePj=n+akM1uyz|)BLle{Q9lHH5XQ{u+e*-xD+ZddP%lCcKKJ;@M=o`Ygq8Z2dR<({RDgjF?O9 zhn5E|Up17p=}QCMAg1@BjdJFf#@FGYV}2`a{oaxzpaX>(M&!qlw*R;~11R0V>3w4x zx6|wPtrgnLb9ICFrY6S+@5xmmQuSkSUvdQVuB3jbh??Lu-7NCT+4v;#lKCv#@ha6u zsB-A()YHMI+w2`jIG&Wx-bSjsVy;oX1VU{dS3Hd}k{B`x$KHeYEvt*o3IjYq!jNlUD$Z-6oB$bzVJblRXo+ z7^E}pAy59SRS-20n(r>ywv<`1^6>tf$cip{1Z7d(!m7ukPK9zmFP2G73iR-GHi*8&W3-7w_dnf9>jy6_8m)Q2~ zd1mS7;x;9=(Ol4heu&Z}i9=HRI&Zyb#qy zl-8QD09USCcbJmw8CCz%O(k??Z$ZcHLzC&**~1><^&x8~rz-#J{G-sL_j;1P)>?h~ z@at4*2uI{KbpGPSC2n(WKHY7)Zt{$d-N>2o_095$pz!@+LW{HQ&-*tv>$H%*vTZG1 zo^-o;_v3}ZBXXO4)q$<~ZJrNy-K>4~ZG3dF_g>7@OP})G5IH3GO%;cSmO~G+`yg%~O-3_oluL#*7Z06o6yC_}k%VS+qn++;HXV*SCK> I6IDR}4JI-Gr2qf` literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/rawfile/6.ogg b/entry/src/main/resources/rawfile/6.ogg new file mode 100644 index 0000000000000000000000000000000000000000..6e3cb784e9ddf3113855b1d74b23dd183d0b3bfb GIT binary patch literal 6007 zcmb_gdpy)z*WWG~N}7a*#3(W&Q$}0(l(at=COJo`7J^Yotg{XEY<@BVDt-g~XR_Fk9o+WR+~gMwUu zESM?FX8w`0nwn5eO-xNz5lNeOg$C~l3*ZHWhLbVjGP7ou z($~7n07W=M-AHVV?#yrl01v=+eX`2&Kn5A*7nAnq@Ex&Uqe*fOKe>^>Nu@S@Ylvq4 z>Hx@tXp&O;nIT3<2Q7$Tm>yO{3*KZ=M#QCTc}i2d_2)89XlYF;H?)Inpg7lS7J!Da zb<|5xV`2?ENiUHAn_slUTJ*{a!e$$tEsC9O+Cq%mXgXYSe3Rwy*)!>uuSqqX^f{E8 zE@UIM*PT;&UBTxNuY)Eom}!(GdJy4R=n9(tc)B7cK8akK69z>|)gppus3vg8RAW@B zwN`1j-`C&#!FbC8^ZTppU0j{qVA<#65fRWAv9B*8(kmxn>y=2aD+ycs6MQBU{0NCN zbt-aT5~~u`i87#QDJ}as`ScR4)6Zz9<>C{|Wr06t5~9+vCFEmg7^Q(BmBIP7JI>ec zYQ1FKdP!Nr0-Y+4ody&I=av4i8t9cB@ZYQLjusd;U_UmG!#oHR$Qwr-3c-z6~7?nb>@w?(^T?a775hy zyKg4D<{Q=ta`Gh}+}WY|9Qu-cH@C4Uw=<8|!BEaarM>;C`M3%}7o5`+7pOF8`a!y&(8@1uXg+jb>v z?w{df3;pKTPiQ(BON>lcV5{ks>K)e!KdN%Ph}uFf(Md~Rj|k$NnVN=Zc&tQoA^`Dt zNfdu;B%v&g;*w)2Mt4coZKkcpSX186Vfp4_1AeVC6-KeKIgH{o;m|2wCC!nG3Pr5t zD4&UtQ7NLJQ;Gf=b_$vjkR;}W-6fYnRDAEacl!6{FTVd>z4u;wi>d*v_f07-tE}Bz z-8>?8d7aqz@N$Ar|Gt5~$br7JZ3`3s8CZWK2SCuoOEAf2r&5~>;x^Hhqz?XuoV{wz znc8ZpF6ut_)%SI41h}mB={67Ob_?i@2zXE%u=R4J zSM3a7q_7$2+xH!EFo-Onr9XE(CjW2b6p_-OS)?yz9MktYwrqcPP;#Ci_tdc9^z45i zXGcm|PD)u)ia05ql$;%$oOiD7^v=7LZ+`u+^>5@jgz3Wykz*gG{~dDbsoHBHnl2eT zjZ1a3z7Gu=Zolw*2LMo?p}awoN4792y-f37CdJLw`adHEQhUvuy3L?rvjETp;8i2E zI{w(1Y!?1EkGnLI`J^v3Q0?}UgJ_Ojdf2;MHbNr_%Q~oNQl|IT<(W%v`>9yEZ6cqw z6N?y%6dX)@@?Z;u8$F47o4`)BYay;nr7CL1Cs7sj;yUdV4HEdKih5ZY%-aMwyhDuV z(;1rl45lLrKs3O?zd6O78R{~&1pvfm@RF#C>KweKq97d4JV%JjpcxwQR1lH@iboJg zFcs_jcQBL;O4JaBATEPRLQ!WVgp3kg5K07|IU9w9V6sqcD?({Xp(^I`n5N>AcqR)H zvT24WT!Aa*A7gUS5)mYXcQS^Fd?qtk!0%y^41|zikR@Vqsih*evP4uxNe?@OTq|Og zOExdTHpd7I3U3pF)643xBf}N&ECC&us4hDaTGGX0ph9P4g8?d{lPiQG_C|qF3t>P} zEQUbX!>Xtd608)-3D~J>vRNrqRD(l8C7Yvgb73vEd5tSG7+Voi(F8XaKn1zfT2V+E zwMm=PPD9l=A>^hWRw|`dn^SK7lSFe3cq$0*JHW<*cCBRIo~s+(?LT zBBF#iJh?H4hhKsccq;TJ*hB7MJ@VpsRm?AVgiMClvh!1Tmv4_Nz5NU%B$mqqx-1~X z^Vw}QF%kM8K7*M`6KlsanJIW?3RPSX=Zqj(%#G9`Y%WB=M5s-YIYB@wHiw6jh4AVx zh{My#WT6PI4Trm-Xul;~3%7*!WFP@1o4A5-$5i0CKK0fOR zHQSYm2q52)swO4^^PULKHRZv5p~F(EnpiFfW-d6#;==b2P6a+$)^{@2XW94fxRrn_ zl7y@pw3ISinVML@!<#B*@|5W~y)YOECH_o$upYV*aWp8=pusp}nv#oAXXY}45?2;{ z{)|BLj?~jhX8r~s0|#%f5;gd!N#sK_G-o4ety1?t#|R z=Cna`@zS9!;9N6C5EpQyw}}z}Mtk7pdvS|DFE+CX!c!Iq;4MK#BzDzGAV6+K)Xb4O z1P_e}q(eSaIwTulR6Xb&j7o>F!-mjk$VqHi%;(b;;WYs*mjDfp@?BX*C}f7Fa+lgQ zqym6<@;Fc=yU5+af~+;iSfZm0sE1g#Q_$mJFQa(az;hC?bD9(@t7%Na7o^IoV>&8ASEu?(!aoB!!o*OAmSw{&R%KlME2Tw2o(#+7+H+S(FsK0$*O0?Ww=;w= zW^r?3o$0SiO1hApRpy8tW-KOziOBTTS^hBusc6*Tq~^vknMN>!!h9%Fp(7Nb#?~WM zLo6F1C*S{tu)6K^6;f-e@L3SxZoh(a;k@wRyU**-f1V+2}dg6E!bg=(>wI8PUy*P zHy1yNn`fyw5ON*{Hh0W=@>E3On+ zo%8cE^-eIU#~0Wg?QuSmwfz_OJ#h=8B^Mg}%E2c=i}2F%d=Y!J&K04BREha|u>~~+ z8}2CEZDMgL{w*X!YOR`SyjsogtYMhW+2^amQ>hF=V>Tj&?{^RjfZTl31&V66F)_-( z!qzcE7R;Wbytu*M)^>&7nfjtV8!Ze^t_Hv^sSTf;)JUWjYmtmf<)RyBB_0ATo&Ani zuSBnq^X_c)!O<1z_*hSETNxz_i@`+0C-34H6%@I+zQ*>!zN?=?D?9*8PUq%6fAww( zD9zW@BU5R1j4d!7!$Jg8FbTRxC+!FvvanoZV@qGR-Vxcj$(iZ;_fHAY(a{oKTi8ZN zOMWbnuUR0O0@#lQ7~|Tcoe$^v{5VY=`(xUKzShRZj>CC0zrErVjyIyDe9x?Du=UYT zr=M`gY@KwK%hD-julz4tM?4%I_3vw1Eoi@Vm%aFcLI0`~tIM~IUY%fv-MIY6&)1@U zjr!~7Uv2K2zN;+xYx|zgSq2Zn$@fE?SdWdY$YRC6PpwsB`xdsk5dcUJ<}(A2=@;3%O0?Q5qrdSk;CUd zx4u-f*BUmx_^EC8l+%sj>K{K<>mL66zF8LsJcj^K+kPl0v_Ei<^EQ*HouA%6Nmyy5 z35YwYj|bHqm^1xz%J{GTQ$f!+FECM-OI&zj7Vz!)h;PYk_&Q!aqGbJ8zxdLdANKBk zn0kv6octND#$vp$&~J50d-BIG&WG#&dOWu=Y;=t%o3nsD&Zo2>+*^h zaigQvPfqHNjXmFgHB`ZL1ieZLa&ZZ~Q?%^1+PLw(55|pGU4AJ)XC(X7TO&Fp)}Y8Y zH!zHA)ttvXG2UgX^wn6^;iit473*Bl5uQ&_`qepq$XSV+7yKYFU$6PrVgJiJ>VFcL z`{sIjjRYFG5+*nr%Y7JwX%;melWAQ6o<~!1D>j#QeE4~>QE=_@1Uxw9rayV)M`!9` z-)(L_v!Ch5yoY74EXZz#-cQX?SVQqp$nIP-?m#76r77q_;a(ZcIc3S_=>;2)AH!W zRnZHNT16aq%jKMM-EZ^u?MtUaL*_qCz0C5+cOaM$IjeeNHHUF4yFQJqSx6uCetqTC zvjgjq1*ri*I(S52rHb1KVJ2&Xq+~?aN^$6B_vGE*t>N{CUTd+Cpav7ZU%Tn zOzyhS?#JppiX6Eg((PYiW4ELt>1o2@?t)v_G77);MY5RW8%GCej?Qm)=f;f=Zxwyc zBI$NJ{T{)SpL@Y}qLuvRxX04++pV(qyV-sWxxp3tTfEa{9%o+DLXCD#^it6uO}{Q& z7-9cnL@$6h4!YmThBUqN4@)DI{U`U-5&>aqdtvZ9*BA<1IFN~qTet67#bSd zI(>E|hPQHS>AgnxO?ulwRLIEeuBOh3jG*$;EJoXOg~$?InJ(C`U>p3#qV&;S!-2}Z z&wGv6#qY}Wrkw2Q*_@p<8Pz?|^CY4YadXh|SpSeS-0OSmji>dt%MEOc9Vy05Ic|^H z)em+?Tzx$Ffrb9|KzZd2@t@ZQDo>1mJY?g<8MwSJx2)cV>%OeEmXm?UuUq)qJI3C8 zw5;FR-`20Ds_I>GkHb{rb^RY+kBmJX+K`f0=o|C)>*PJN6^|Vkre5oDPkM=F)lDAv ze(`Y+n0+APMEh{WE{m|XgX?-842)%DCSD*dI@P(rq12c5>QwIAU43Jb4+?%O^uGw& z)O*qS>-YN|#)T@&eBB@M-q!+{j8Ej9FMOJkW_7+}G{f*xgD&sfjmy;&1g*o26>33~ zA=%R&53Q^ZU#qQ^E0&d{u!O3Mhi_>=Ev#NzHYWrG&T9)iZT?EduXkwKl^f&lPkE&r zt$3_+T;uJ-%+y(-;lTrgBEseYi^k4E@s@P}{Gr}}%J}*A517bLiLY8sRx7D>oL+tY zr}4ze<*Y9xR92>U>%>1g0NR zLv@zRni#%LrfL52g}!|I-hH80e;_SMR-*C6`*wc5wrj&Bh5UBKX4zelc^p#)XVDAw z$2PC_8;=xXdtW%X?eK0e)Z!e6Rxf&PR4-TPxjTQ`0BKj`wrxKT418VBWU0(SrbI8& z3kDY-Uio3F2LsG>4}bcw z+UxL`h}2xRoRVs!Vmx2avy+sVhezkZx%j^gs~ zMIF38-rl}W4wQds*6*y5b=AXBeY*}e8C9QjzrGU{oG|$``|P|a%Z^v09aQDQg{8u%&mw)n^^2D~ L#%x@~Oa%N3Vr$oX literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/rawfile/7.ogg b/entry/src/main/resources/rawfile/7.ogg new file mode 100644 index 0000000000000000000000000000000000000000..21a4e0af33459f87a8d19640a5fa1e324e95fe4b GIT binary patch literal 5971 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 literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/rawfile/8.ogg b/entry/src/main/resources/rawfile/8.ogg new file mode 100644 index 0000000000000000000000000000000000000000..a2ed2121a6bf04533c1be7aeed5aa07a553f4ff7 GIT binary patch literal 6018 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 literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/rawfile/9.ogg b/entry/src/main/resources/rawfile/9.ogg new file mode 100644 index 0000000000000000000000000000000000000000..df1acca1ce86416a44930906b3d2d3d45a690560 GIT binary patch literal 6002 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 literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/tablet/element/float.json b/entry/src/main/resources/tablet/element/float.json new file mode 100644 index 0000000..ae02563 --- /dev/null +++ b/entry/src/main/resources/tablet/element/float.json @@ -0,0 +1,128 @@ +{ + "float": [ + { + "name": "common_margin", + "value": "36vp" + }, + { + "name": "common_margin_16", + "value": "24vp" + }, + { + "name": "contact_emptypage_button_radius", + "value": "30vp" + }, + { + "name": "contact_longpress_dialog_radius", + "value": "36vp" + }, + { + "name": "contact_longpress_dialog_width", + "value": "234vp" + }, + { + "name": "contact_list_groups_radius", + "value": "36vp" + }, + { + "name": "contact_emptypage_bottom", + "value": "24vp" + }, + { + "name": "contact_titleguide_height", + "value": "84vp" + }, + { + "name": "contact_title_height", + "value": "61.5vp" + }, + { + "name": "contact_emptypage_button_item_height", + "value": "60vp" + }, + { + "name": "contact_listitem_height", + "value": "96vp" + }, + { + "name": "contact_listitem_index_height", + "value": "72vp" + }, + { + "name": "contact_samll_image_width_height", + "value": "36vp" + }, + { + "name": "contact_emptyview_image_width_height", + "value": "180vp" + }, + { + "name": "contact_listpage_icon_width_height", + "value": "60vp" + }, + { + "name": "contact_text_size_headline8", + "value": "30fp" + }, + { + "name": "contact_text_size_body1", + "value": "24fp" + }, + { + "name": "contact_text_size_body2", + "value": "21fp" + }, + { + "name": "contact_text_size_body3", + "value": "15fp" + }, + { + "name": "contact_text_size_dialer_button", + "value": "45fp" + }, + { + "name": "contact_text_size_dialer_char", + "value": "18fp" + }, + { + "name": "contact_text_size_contact_title", + "value": "45fp" + }, + { + "name": "contact_navigation_width", + "value": "144vp" + }, + { + "name": "contact_navigation_element_height", + "value": "195vp" + }, + { + "name": "contact_empty_list_all_bottom_height", + "value": "357vp" + }, + { + "name": "contact_batchselect_title_height", + "value": "42vp" + }, + { + "name": "dialer_font_size", + "value": "20fp" + }, + { + "name": "dialer_menu_width", + "value": "52.5vp" + }, + { + "name": "dialer_menu_height", + "value": "52.5vp" + }, + { + "name": "dialer_call_button_width", + "value": "58.5vp" + }, + { + "name": "dialer_call_button_height", + "value": "58.5vp" + } + ] +} \ No newline at end of file diff --git a/entry/src/main/resources/zh_CN/element/string.json b/entry/src/main/resources/zh_CN/element/string.json new file mode 100644 index 0000000..abdaf0f --- /dev/null +++ b/entry/src/main/resources/zh_CN/element/string.json @@ -0,0 +1,876 @@ +{ + "string": [ + { + "name": "app_name", + "value": "联系人" + }, + { + "name": "mainability_description", + "value": "ETS_Empty Ability" + }, + { + "name": "dialer", + "value": "电话" + }, + { + "name": "dialer_calllog", + "value": "通话记录" + }, + { + "name": "dialer_description", + "value": "显示拨号盘和联系人" + }, + { + "name": "contact_num", + "value": "%d个联系人" + }, + { + "name": "contact", + "value": "联系人" + }, + { + "name": "contact_login_in", + "value": "登录账户" + }, + { + "name": "contact_import_contacts", + "value": "导入联系人" + }, + { + "name": "create_contact", + "value": "新建联系人" + }, + { + "name": "edit_contact", + "value": "编辑联系人" + }, + { + "name": "contact_scan_card", + "value": "扫名片" + }, + { + "name": "no_contacts", + "value": "没有联系人" + }, + { + "name": "contact_list_search", + "value": "搜索联系人" + }, + { + "name": "contact_list_search_empty", + "value": "没有匹配的结果" + }, + { + "name": "noName", + "value": "(无姓名)" + }, + { + "name": "phone_type_mobile", + "value": "电话" + }, + { + "name": "phone_type_home", + "value": "住宅" + }, + { + "name": "phone_type_work", + "value": "单位" + }, + { + "name": "phone_type_main", + "value": "总机" + }, + { + "name": "phone_type_fax_work", + "value": "单位传真" + }, + { + "name": "phone_type_fax_home", + "value": "住宅传真" + }, + { + "name": "phone_type_pager", + "value": "寻呼机" + }, + { + "name": "phone_type_other", + "value": "其他" + }, + { + "name": "phone_type_custom", + "value": "自定义" + }, + { + "name": "email_type_home", + "value": "私人" + }, + { + "name": "email_type_work", + "value": "单位" + }, + { + "name": "email_type_other", + "value": "其他" + }, + { + "name": "email_type_custom", + "value": "自定义" + }, + { + "name": "text", + "value": "文本" + }, + { + "name": "qr_code", + "value": "二维码" + }, + { + "name": "v_card", + "value": "vCard" + }, + { + "name": "call_setting_type_paste", + "value": "粘贴" + }, + { + "name": "call_setting_type_batch_delete", + "value": "批量删除" + }, + { + "name": "call_setting_type_harassment_interception", + "value": "骚扰拦截" + }, + { + "name": "call_setting_type_setting", + "value": "设置" + }, + { + "name": "contact_setting_type_scancard", + "value": "扫名片" + }, + { + "name": "send_message", + "value": "发送消息" + }, + { + "name": "copy_phoneNumber", + "value": "复制号码" + }, + { + "name": "edit_beforeCall", + "value": "呼叫前编辑" + }, + { + "name": "add_to_blockList", + "value": "加入黑名单" + }, + { + "name": "delete_call_logs", + "value": "删除通话记录" + }, + { + "name": "all_call_logs", + "value": "全部通话" + }, + { + "name": "missed_call", + "value": "未接来电" + }, + { + "name": "voicemail", + "value": "语音信箱" + }, + { + "name": "dialing", + "value": "正在拨号..." + }, + { + "name": "recording", + "value": "录音" + }, + { + "name": "wait", + "value": "等待" + }, + { + "name": "add_call_logs", + "value": "添加通话" + }, + { + "name": "memorandum", + "value": "备忘录" + }, + { + "name": "mute", + "value": "静音" + }, + { + "name": "groups", + "value": "群组" + }, + { + "name": "card_holder", + "value": "名片夹" + }, + { + "name": "my_card", + "value": "我的名片" + }, + { + "name": "dialog_cancel", + "value": "取消" + }, + { + "name": "dialog_share", + "value": "分享" + }, + { + "name": "dialog_delete", + "value": "删除" + }, + { + "name": "delete_dialog_title", + "value": "是否删除此联系人" + }, + { + "name": "cancel", + "value": "取消" + }, + { + "name": "save", + "value": "保存" + }, + { + "name": "telep_group", + "value": "手机群组" + }, + { + "name": "new_build", + "value": "新建" + }, + { + "name": "no_group", + "value": "没有群组" + }, + { + "name": "no_select", + "value": "未选择" + }, + { + "name": "select_num", + "value": "已选择%d个" + }, + { + "name": "concal_favorite", + "value": "取消收藏" + }, + { + "name": "favorite", + "value": "收藏" + }, + { + "name": "edit", + "value": "编辑" + }, + { + "name": "more", + "value": "更多选项" + }, + { + "name": "save_to_existing_contacts", + "value": "保存至已有联系人" + }, + { + "name": "share_contact", + "value": "分享联系人" + }, + { + "name": "delete_contact", + "value": "删除联系人" + }, + { + "name": "add_to_blocklist", + "value": "加入黑名单" + }, + { + "name": "name_pinyin", + "value": "姓名拼音" + }, + { + "name": "delete_contact_sure", + "value": "是否删除此联系人?" + }, + { + "name": "delete", + "value": "删除" + }, + { + "name": "phone", + "value": "手机" + }, + { + "name": "nickname", + "value": "昵称" + }, + { + "name": "group", + "value": "群组" + }, + { + "name": "website", + "value": "网站" + }, + { + "name": "clear", + "value": "清空" + }, + { + "name": "ringtone", + "value": "电话铃声" + }, + { + "name": "remarks", + "value": "备注" + }, + { + "name": "qrcode_tips", + "value": "扫一扫二维码,可添加联系人" + }, + { + "name": "share", + "value": "分享" + }, + { + "name": "noAnswer", + "value": "响铃" + }, + { + "name": "reject", + "value": "拒接" + }, + { + "name": "blockCall", + "value": "未接通" + }, + { + "name": "years", + "value": "年" + }, + { + "name": "months", + "value": "月" + }, + { + "name": "day", + "value": "日" + }, + { + "name": "hour", + "value": "时" + }, + { + "name": "minute", + "value": "分" + }, + { + "name": "seconds", + "value": "秒" + }, + { + "name": "middleNight", + "value": "半夜" + }, + { + "name": "evening", + "value": "晚上" + }, + { + "name": "AM", + "value": "上午" + }, + { + "name": "PM", + "value": "下午" + }, + { + "name": "earlyMorning", + "value": "清晨" + }, + { + "name": "justNow", + "value": "刚刚" + }, + { + "name": "minutesAgo", + "value": "分钟前" + }, + { + "name": "yesterday", + "value": "昨天" + }, + { + "name": "nightfall", + "value": "傍晚" + }, + { + "name": "noon", + "value": "中午" + }, + { + "name": "morning", + "value": "早上" + }, + { + "name": "beforeDawn", + "value": "凌晨" + }, + { + "name": "unknown", + "value": "未知" + }, + { + "name": "timeHour", + "value": "小时" + }, + { + "name": "AIM", + "value": "AIM" + }, + { + "name": "WindowsLive", + "value": "Windows Live" + }, + { + "name": "Yahoo", + "value": "雅虎" + }, + { + "name": "Skype", + "value": "Skype" + }, + { + "name": "QQ", + "value": "QQ" + }, + { + "name": "Hangout", + "value": "环聊" + }, + { + "name": "ICQ", + "value": "ICQ" + }, + { + "name": "Jabber", + "value": "Jabber" + }, + { + "name": "add_more", + "value": "添加更多" + }, + { + "name": "LunarBirthday", + "value": "农历生日" + }, + { + "name": "Anniversary", + "value": "周年纪念日" + }, + { + "name": "birth", + "value": "生日" + }, + { + "name": "importDay", + "value": "其他重要日期" + }, + { + "name": "brothers", + "value": "兄弟" + }, + { + "name": "assistant", + "value": "助理" + }, + { + "name": "child", + "value": "子女" + }, + { + "name": "companion", + "value": "伴侣" + }, + { + "name": "father", + "value": "父亲" + }, + { + "name": "friend", + "value": "朋友" + }, + { + "name": "boss", + "value": "上司" + }, + { + "name": "mother", + "value": "母亲" + }, + { + "name": "parents", + "value": "父母" + }, + { + "name": "Partner", + "value": "合作伙伴" + }, + { + "name": "introducer", + "value": "介绍人" + }, + { + "name": "relatives", + "value": "亲属" + }, + { + "name": "sisters", + "value": "姐妹" + }, + { + "name": "spouse", + "value": "配偶" + }, + { + "name": "hourMinutes", + "value": "%d:%d" + }, + { + "name": "monthDay", + "value": "%d月%d日 " + }, + { + "name": "yearMonthDay", + "value": "%d年%d月%d日 " + }, + { + "name": "secondsFormat", + "value": "%d秒" + }, + { + "name": "minutesSecondsFormat", + "value": "%d分%d秒" + }, + { + "name": "hourMinutesSecondsFormat", + "value": "%d时%d分%d秒" + }, + { + "name": "name", + "value": "姓名" + }, + { + "name": "name_hock", + "value": " 姓名" + }, + { + "name": "new_group", + "value": "新建群组" + }, + { + "name": "nickname_hock", + "value": " 昵称" + }, + { + "name": "website_hock", + "value": " 网站" + }, + { + "name": "position", + "value": "职位" + }, + { + "name": "position_hock", + "value": " 职位" + }, + { + "name": "remarks_hock", + "value": " 备注" + }, + { + "name": "email", + "value": "电子邮箱" + }, + { + "name": "phone_number", + "value": "电话号码" + }, + { + "name": "phone_number_hock", + "value": " 电话号码" + }, + { + "name": "email_hock", + "value": " 电子邮箱" + }, + { + "name": "address_add", + "value": "地址" + }, + { + "name": "address_add_hock", + "value": " 地址" + }, + { + "name": "instant_messaging", + "value": "即时消息" + }, + { + "name": "join_group", + "value": " 加入群组" + }, + { + "name": "addmore", + "value": " 添加更多项" + }, + { + "name": "instant_messaging_hock", + "value": " 即时消息" + }, + { + "name": "birth_hock", + "value": " 生日" + }, + { + "name": "assistant_hock", + "value": " 助理" + }, + { + "name": "instant_type_aim", + "value": "AIM" + }, + { + "name": "instant_type_windowslive", + "value": "WindowsLive" + }, + { + "name": "instant_type_yahoo", + "value": "雅虎" + }, + { + "name": "instant_type_skype", + "value": "Skype" + }, + { + "name": "instant_type_qq", + "value": "QQ" + }, + { + "name": "instant_type_hangouts", + "value": "环聊" + }, + { + "name": "instant_type_icq", + "value": "ICQ" + }, + { + "name": "instant_type_jabber", + "value": "Jabber" + }, + { + "name": "instant_type_custom", + "value": "自定义" + }, + { + "name": "birthday_type_grebirthday", + "value": "生日" + }, + { + "name": "birthday_type_lunarbirthday", + "value": "农历生日" + }, + { + "name": "birthday_type_anniversaries", + "value": "周年纪念" + }, + { + "name": "birthday_type_other", + "value": "其他重要日期" + }, + { + "name": "relationship_type_assistant", + "value": "助理" + }, + { + "name": "relationship_type_brother", + "value": "兄弟" + }, + { + "name": "relationship_type_children", + "value": "子女" + }, + { + "name": "relationship_type_mates", + "value": "伴侣" + }, + { + "name": "relationship_type_father", + "value": "父亲" + }, + { + "name": "relationship_type_friend", + "value": "朋友" + }, + { + "name": "relationship_type_bosses", + "value": "上司" + }, + { + "name": "relationship_type_mother", + "value": "母亲" + }, + { + "name": "relationship_type_parents", + "value": "父母" + }, + { + "name": "relationship_type_partner", + "value": "合作伙伴" + }, + { + "name": "relationship_type_introducer", + "value": "介绍人" + }, + { + "name": "relationship_type_kinship", + "value": "亲属" + }, + { + "name": "relationship_type_sisters", + "value": "姐妹" + }, + { + "name": "relationship_type_spouses", + "value": "配偶" + }, + { + "name": "relationship_type_custom", + "value": "自定义" + }, + { + "name": "house_type_dwelling", + "value": "住宅" + }, + { + "name": "house_type_position", + "value": "单位" + }, + { + "name": "house_type_position_hock", + "value": " 单位" + }, + { + "name": "house_type_other", + "value": "其他" + }, + { + "name": "house_type_custom", + "value": "自定义" + }, + { + "name": "relation_background", + "value": "联系人" + }, + { + "name": "intelligent_group", + "value": "智能群组" + }, + { + "name": "company", + "value": "公司" + }, + { + "name": "city", + "value": "城市" + }, + { + "name": "recent_contacts", + "value": "最近联系人" + }, + { + "name": "mobile_group", + "value": "手机群组" + }, + { + "name": "number_of_people", + "value": "%d人数" + }, + { + "name": "number_of_people_from_cell_phone", + "value": "有%d人数来自手机" + }, + { + "name": "favorite_frequent", + "value": "常用" + }, + { + "name": "save_to_phone", + "value": "保存至: 手机" + }, + { + "name": "save_to_phone_only", + "value": "仅保存在手机,开启云端服务可同步" + }, + { + "name": "clear_calllog_sure", + "value": "是否清空通话记录" + }, + { + "name": "new_contact", + "value": "新建联系人" + }, + { + "name": "send_messages", + "value": "发送消息" + }, + { + "name": "select_all", + "value": "全选" + }, + { + "name": "recent", + "value": "最近" + }, + { + "name": "no_recent_contacts", + "value": "没有带号码的常用联系人" + }, + { + "name": "no_select_contacts", + "value": "没有带号码的联系人" + }, + { + "name": "no_group_contacts", + "value": "没有可用的群组联系人" + }, + { + "name": "unknow_location", + "value": "未知" + }, + { + "name": "no_dialer_calllog", + "value": "没有通话记录" + }, + { + "name": "no_dialer_missed_calllog", + "value": "没有未接来电" + }, + { + "name": "from_the_accounts", + "value": "来自以下账号" + }, + { + "name": "More", + "value": "更多" + } + ] +} \ No newline at end of file diff --git a/entry/src/ohosTest/config.json b/entry/src/ohosTest/config.json deleted file mode 100644 index 33b2008..0000000 --- a/entry/src/ohosTest/config.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "app": { - "bundleName": "com.ohos.contacts", - "vendor": "ohos", - "version": { - "code": 1000000, - "name": "1.0.0" - }, - "apiVersion": { - "compatible": 4, - "target": 5, - "releaseType": "Release" - } - }, - "deviceConfig": {}, - "module": { - "package": "com.ohos.contacts", - "name": "testModule", - "deviceType": [ - "phone" - ], - "distro": { - "deliveryWithInstall": true, - "moduleName": "entry_test", - "moduleType": "feature", - "installationFree": true - }, - "abilities": [ - { - "name": "decc.testkit.runner.JsEntryAbility", - "description": "Test Entry Ability", - "icon": "$media:icon", - "label": "$string:app_name", - "launchType": "standard", - "orientation": "landscape", - "visible": true, - "type": "page" - } - ], - "js": [ - { - "pages": [ - "pages/index/index" - ], - "name": "default", - "window": { - "designWidth": 750, - "autoDesignWidth": false - } - } - ] - } -} \ No newline at end of file diff --git a/entry/src/ohosTest/js/default/app.js b/entry/src/ohosTest/js/default/app.js deleted file mode 100644 index 56c585d..0000000 --- a/entry/src/ohosTest/js/default/app.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -export default { - onCreate() { - console.info('TestApplication onCreate'); - }, - onDestroy() { - console.info('TestApplication onDestroy'); - } -}; diff --git a/entry/src/ohosTest/js/default/i18n/en-US.json b/entry/src/ohosTest/js/default/i18n/en-US.json deleted file mode 100644 index 55561b8..0000000 --- a/entry/src/ohosTest/js/default/i18n/en-US.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "strings": { - "hello": "Hello", - "world": "World" - }, - "Files": { - } -} \ No newline at end of file diff --git a/entry/src/ohosTest/js/default/i18n/zh-CN.json b/entry/src/ohosTest/js/default/i18n/zh-CN.json deleted file mode 100644 index cce1af0..0000000 --- a/entry/src/ohosTest/js/default/i18n/zh-CN.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "strings": { - "hello": "您好", - "world": "世界" - }, - "Files": { - } -} \ No newline at end of file diff --git a/entry/src/ohosTest/js/default/pages/index/index.hml b/entry/src/ohosTest/js/default/pages/index/index.hml deleted file mode 100644 index 32ffd85..0000000 --- a/entry/src/ohosTest/js/default/pages/index/index.hml +++ /dev/null @@ -1,19 +0,0 @@ - -

- - {{ $t('strings.hello') }} {{ title }} - -
diff --git a/entry/src/ohosTest/js/default/pages/index/index.js b/entry/src/ohosTest/js/default/pages/index/index.js deleted file mode 100644 index 7de490d..0000000 --- a/entry/src/ohosTest/js/default/pages/index/index.js +++ /dev/null @@ -1,53 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import file from '@system.file' -import app from '@system.app' -import device from '@system.device' -import router from '@system.router' -import {Core, ExpectExtend, ReportExtend, InstrumentLog} from 'deccjsunit/index' - -export default { - data: { - title: "" - }, - onInit() { - this.title = this.$t('strings.world'); - }, - onShow() { - const core = Core.getInstance() - const expectExtend = new ExpectExtend({ - 'id': 'extend' - }) - const reportExtend = new ReportExtend(file) - const instrumentLog = new InstrumentLog({ - 'id': 'report' - }) - core.addService('expect', expectExtend) - core.addService('report', reportExtend) - core.addService('report', instrumentLog) - core.init() - core.subscribeEvent('spec', instrumentLog) - core.subscribeEvent('suite', instrumentLog) - core.subscribeEvent('task', instrumentLog) - - const configService = core.getDefaultService('config') - configService.setConfig(this) - - require('../../../test/List.test') - core.execute() - }, - onReady() { - }, -} \ No newline at end of file diff --git a/entry/src/ohosTest/js/test/AccountantsModel.test.js b/entry/src/ohosTest/js/test/AccountantsModel.test.js deleted file mode 100644 index 2b34a50..0000000 --- a/entry/src/ohosTest/js/test/AccountantsModel.test.js +++ /dev/null @@ -1,65 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index' -import accountantsModel from './../../../main/js/default/model/AccountantsModel.js' -import Constants from '../../../main/js/default/common/constants/Constants.js' - -describe('AccountantsModelTest', function () { - it('addContact', 0, function () { - var addParams = { - 'name': { - 'fullName': 'A The test user name is added' + Math.floor(Math.random() * 100), - }, - 'phoneNumbers': [ - { - 'id': 0, - 'isPrimary': 0, - 'labelId': 2, - 'phoneAddress': 'N', - 'phoneNumber': '19991445854', - 'showP': true, - 'blueStyle': false - } - ] - }; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - accountantsModel.addContact(DAHelper, addParams, (contactId) => { - expect(contactId).notAssertEqual('0'); - }); - }) - - it('updateContact', 0, function () { - var addParams = { - 'name': { - 'fullName': 'A The test user name is added' + Math.floor(Math.random() * 100), - }, - 'phoneNumbers': [ - { - 'id': 0, - 'isPrimary': 0, - 'labelId': 2, - 'phoneAddress': 'N', - 'phoneNumber': '19991445854', - 'showP': true, - 'blueStyle': false - } - ] - }; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - accountantsModel.updateContact(DAHelper, addParams, (contactId) => { - expect(contactId).notAssertEqual('0'); - }); - }) -}) \ No newline at end of file diff --git a/entry/src/ohosTest/js/test/CalllogModel.test.js b/entry/src/ohosTest/js/test/CalllogModel.test.js deleted file mode 100644 index c1c928e..0000000 --- a/entry/src/ohosTest/js/test/CalllogModel.test.js +++ /dev/null @@ -1,62 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import {describe, beforeAll,beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index' -import callLogService from '../../../main/js/default/model/CalllogModel.js' -import Constants from '../../../main/js/default/common/constants/Constants.js' - - -describe('CalllogModelTest',function(){ - - it('getAllCalls',0,function(){ - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CALLLOG_DB_URI); - callLogService.getAllCalls(DAHelper, data => { - expect(data.length).notAssertEqual('0'); - }) - }) - - it('getCallLogListByPhoneNumber',0,function(){ - var numbers = '18823681567' - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CALLLOG_DB_URI); - callLogService.getCallLogListByPhoneNumber(DAHelper, numbers, (resultList) => { - expect(resultList.length).notAssertEqual('0'); - }) - }) - - it('clearCallLog',0,function(){ - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CALLLOG_DB_URI); - callLogService.clearCallLog(DAHelper,()=>{ - var resultData ={} - expect(resultData.totalCount).assertEqual('0'); - }) - }) - - it('deleteCallLogByIds',0,function(){ - var removeIds = ['1'] - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CALLLOG_DB_URI); - callLogService.deleteCallLogByIds(DAHelper, removeIds, (result) => { - expect(result.code).assertEqual('0'); - }); - }) - - it('deleteOtherCallLog',0,function(){ - var removeIds = ['1','2'] - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CALLLOG_DB_URI); - callLogService.deleteOtherCallLog(DAHelper, removeIds, (result)=>{ - expect(result.code).assertEqual('0') - }); - }) - -// -}) diff --git a/entry/src/ohosTest/js/test/ContactDetailModel.test.js b/entry/src/ohosTest/js/test/ContactDetailModel.test.js deleted file mode 100644 index 65dcd38..0000000 --- a/entry/src/ohosTest/js/test/ContactDetailModel.test.js +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import {describe, beforeAll, beforeEach, afterAll, it, expect} from 'deccjsunit/index' -import contactDetailModel from '../../../main/js/default/model/ContactDetailModel.js' -import Constants from '../../../main/js/default/common/constants/Constants.js' - -describe('ContactDetailModelTest',function(){ - - it('getContactById',0,function(){ - var requestData = { - contactId: '1' - }; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - contactDetailModel.getContactById(DAHelper, requestData, result => { - expect(result.data.length).notAssertEqual('0') - }) - }) - - it('getContactIdByNumber',0,function(){ - var phoneNumberShow = '15611452568' - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - contactDetailModel.getContactIdByNumber(DAHelper, phoneNumberShow, (contactId) => { - expect(contactId).notAssertEqual('0') - }) - }) -}) diff --git a/entry/src/ohosTest/js/test/ContactModel.test.js b/entry/src/ohosTest/js/test/ContactModel.test.js deleted file mode 100644 index e43ba9b..0000000 --- a/entry/src/ohosTest/js/test/ContactModel.test.js +++ /dev/null @@ -1,62 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import {describe, beforeAll,beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index' -import Constants from '../../../main/js/default/common/constants/Constants.js' -import contactsService from '../../../main/js/default/model/ContactModel.js' - -describe('ContactModelTest',function(){ - - it('queryCustomizeGroups',0,function(){ - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - var data = { - page: '0', - limit: '20', - queryContactsType: 'all' - }; - contactsService.queryCustomizeGroups(DAHelper, data, (result) => { - expect(result.code).assertEqual('0') - }); - }) - - - it('queryContacts',0,function(){ - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - var data = { - page: '0', - limit: '20', - queryContactsType: 'all' - }; - contactsService.queryContacts(DAHelper, data, (result) => { - expect(result.code).assertEqual('0') - }); - }) - - it('queryContactsCount',0,function(){ - var data = {} - var resultSet = {} - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - contactsService.queryContactsCount(DAHelper, data, resultSet, (result) => { - expect(result.contactsCount).notAssertEqual('0') - }) - }) - - it('deleteContacts',0,function(){ - var data = {'contactId':'14'} - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - contactsService.deleteContacts(DAHelper, data, (result) => { - expect(result).assertEqual('0') - }) - }) -}) \ No newline at end of file diff --git a/entry/src/ohosTest/js/test/CustomizeModel.test.js b/entry/src/ohosTest/js/test/CustomizeModel.test.js deleted file mode 100644 index 0bc741c..0000000 --- a/entry/src/ohosTest/js/test/CustomizeModel.test.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import {describe, beforeAll,beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index' -import CustomizeModel from '../../../main/js/default/model/CustomizeModel.js' -import Constants from '../../../main/js/default/common/constants/Constants.js' -import groupReq from '../../../main/js/default/model/GroupsModel.js' - -describe('CustomizeModelTest',function(){ - it('queryGroups',0,function(){ - var actionData ={'page':0,'limit':20} - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.queryGroups(DAHelper, actionData, result => { - expect(result.length).notAssertEqual('0') - }) - }) -}) \ No newline at end of file diff --git a/entry/src/ohosTest/js/test/FavoritesModel.test.js b/entry/src/ohosTest/js/test/FavoritesModel.test.js deleted file mode 100644 index c9b19a6..0000000 --- a/entry/src/ohosTest/js/test/FavoritesModel.test.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import {describe, beforeAll, beforeEach, afterAll, afterEach, it, expect} from 'deccjsunit/index' -import FavoritesModel from '../../../main/js/default/model/FavoritesModel.js' -import Constants from '../../../main/js/default/common/constants/Constants.js' - -describe('FavoritesModelTest',function(){ - it('queryFavoritesContacts',0,function(){ - var actionData = { - page: '0', - limit: '20', - star: '0' - }; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - FavoritesModel.queryFavoritesContacts(DAHelper, actionData, result => { - expect(result.code).assertEqual('0') - }) - }) - - it('queryPhoneNumByContactId',0,function(){ - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - var contactId = '1'; - var phoneNumberLabelNames = ['residential', 'Mobile phone','unit', 'Unit fax','Residential fax', 'pagers', 'other', '', '', '', '', 'The switchboard']; - FavoritesModel.queryPhoneNumByContactId(DAHelper,contactId, phoneNumberLabelNames,result=>{ - expect(result.code).assertEqual('0') - }) - }) - - it('updateFavoriteState',0,function(){ - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - var actionData = {'favorite':'0','ids':['14'],'isOperationAll':false} - FavoritesModel.updateFavoriteState(DAHelper, actionData, result => { - expect(result).assertEqual('0') - }); - }) - - it('setOrCancelDefaultPhoneNumber',0,function(){ - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - var actionData = {'contactId':'18','phoneNumber':'8','isPrimary':1} - FavoritesModel.setOrCancelDefaultPhoneNumber(DAHelper, actionData, result => { - expect(result.code).assertEqual('0') - }) - }) - -}) \ No newline at end of file diff --git a/entry/src/ohosTest/js/test/GreetingModel.test.js b/entry/src/ohosTest/js/test/GreetingModel.test.js deleted file mode 100644 index 5a0fa6c..0000000 --- a/entry/src/ohosTest/js/test/GreetingModel.test.js +++ /dev/null @@ -1,60 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index' -import Constants from '../../../main/js/default/common/constants/Constants.js'; -import greetingService from '../../../main/js/default/model/GreetingModel.js'; - - -describe('GreetingModelTest', function () { - it('queryGreeting', 0, function () { - - var data = {} - - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.VOICEMAIL_DB_URI); - greetingService.queryGreeting(DAHelper, data, result => { - expect(result.code).assertEqual('0'); - }) - }) - - it('insertGreeting', 0, function () { - - var data = {} - - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.VOICEMAIL_DB_URI); - greetingService.insertGreeting(DAHelper, data, resultId => { - expect(resultId).notAssertEqual('0'); - }) - }) - - it('deleteGreeting', 0, function () { - var data = {} - - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.VOICEMAIL_DB_URI); - greetingService.deleteGreeting(DAHelper, data, result => { - expect(result).assertEqual('0'); - }) - }) - - it('saveCheckedGreeting', 0, function () { - - var data = {} - - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.VOICEMAIL_DB_URI); - greetingService.saveCheckedGreeting(DAHelper, data, result => { - expect(result).assertEqual('0'); - }) - }) - -}) diff --git a/entry/src/ohosTest/js/test/GroupsModel.test.js b/entry/src/ohosTest/js/test/GroupsModel.test.js deleted file mode 100644 index 7f57fd9..0000000 --- a/entry/src/ohosTest/js/test/GroupsModel.test.js +++ /dev/null @@ -1,176 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index' -import Constants from '../../../main/js/default/common/constants/Constants.js'; -import groupReq from '../../../main/js/default/model/GroupsModel.js'; -import contactsService from '../../../main/js/default/model/ContactModel.js'; - -describe('mergeModelTest', function () { - it('addGroup', 0, function () { - var newGroupName = 'asd' - - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.addGroup(DAHelper, newGroupName, result => { - expect(result).notAssertEqual('0'); - }) - }) - - it('queryGroups', 0, function () { - var actionData = { - 'page':0, - 'limit':20 - } - - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.queryGroups(DAHelper, actionData, result => { - expect(result.length).notAssertEqual('0'); - }) - }) - - it('updateGroup', 0, function () { - var actionData = { - 'title':'jo', - 'groupId':'4' - } - - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.updateGroup(DAHelper, actionData, data => { - expect(data).assertEqual('0'); - }) - }) - - it('deleteGroups', 0, function () { - var ids = ['1'] - - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.deleteGroups(DAHelper,ids,result=>{ - expect(result).notAssertEqual('0'); - }) - }) - - it('queryGroupMembers', 0, function () { - var actionData = { - 'page':0, - 'limit':20, - 'groupId':'4' - } - - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.queryGroupMembers(DAHelper, actionData, result => { - expect(result.code).assertEqual('0'); - }) - }) - - it('addGroupMembers', 0, function () { - var actionData = { - 'groupId':'8', - 'contactBeans':[ - { - 'contactId':'14' - } - ], - 'isOperationAll':false - } - - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.addGroupMembers(DAHelper, actionData, result => { - expect(result).notAssertEqual('0'); - }) - }) - - it('getOutOfGroupMembers', 0, function () { - var actionData = { - 'page':0, - 'limit':20, - 'groupId':'4' - } - - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.getOutOfGroupMembers(DAHelper, actionData, result => { - expect(result.code).notAssertEqual('0'); - }) - }) - - it('deleteGroupMembers', 0, function () { - var actionData = { - 'groupId':'8', - 'contactBeans':[ - { - 'contactId':'17' - } - ], - 'isOperationAll':false - } - - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.deleteGroupMembers(DAHelper, actionData, result => { - expect(result).notAssertEqual('0'); - }) - }) - - it('getGroupMemberList', 0, function () { - var actionData = { - 'page': 0, - 'limit': 20, - 'groupId': 4, - filterItem: 'phone', - phoneNumberLabelNames: 'residential', - emailsLabelNames: 'private' - }; - - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.getGroupMemberList(DAHelper, actionData, result => { - expect(result.code).notAssertEqual('0'); - }) - }) - - it('getGroupMemberList', 0, function () { - var actionData = { - 'page':0, - 'limit':20, - 'endDate':30, - 'startDate':7 - } - - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.queryRecentContacts(DAHelper, actionData, result => { - expect(result.code).notAssertEqual('0'); - }) - }) - - it('queryRecentContactsCount', 0, function () { - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.queryRecentContactsCount(DAHelper, result => { - expect(result.length).notAssertEqual('0'); - }) - }) - - it('queryContactsCount', 0, function () { - var resultSet = {}; - var data = {}; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - contactsService.queryContactsCount(DAHelper, data, resultSet, (result) => { - expect(result.length).notAssertEqual('0'); - }) - }) - - it('searchContacts', 0, function () { - var requestData = {}; - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - groupReq.searchContacts(DAHelper, requestData, result => { - expect(result.code).notAssertEqual('0'); - }) - }) -}) \ No newline at end of file diff --git a/entry/src/ohosTest/js/test/List.test.js b/entry/src/ohosTest/js/test/List.test.js deleted file mode 100644 index 0878803..0000000 --- a/entry/src/ohosTest/js/test/List.test.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -require('./ExampleJsunit.test.js') -require('./AccountantsModel.test.js') -require('./SelectcontactsModel.test.js') -require('./recentlydelModel.test.js') -require('./recoverModel.test.js') -require('./GreetingModel.test.js') -require('./SelectContactsListModel.test.js') -require('./mergeModel.test.js') -require('./GroupsModel.test.js') - -require('./CalllogModel.test.js') -require('./ContactModel.test.js') -require('./ContactDetailModel.test.js') -require('./CustomizeModel.test.js') -require('./FavoritesModel.test.js') - diff --git a/entry/src/ohosTest/js/test/SelectContactsListModel.test.js b/entry/src/ohosTest/js/test/SelectContactsListModel.test.js deleted file mode 100644 index 9e25d87..0000000 --- a/entry/src/ohosTest/js/test/SelectContactsListModel.test.js +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index' -import Constants from '../../../main/js/default/common/constants/Constants.js'; -import contactsDataBase from '../../../main/js/default/model/SelectContactsListModel.js'; - -describe('SelectContactsListModelTest', function (){ - it('checkedDelete', 0, function (){ - var isOperationAll = true; - var unCheckedContactIds = ['1']; - - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - contactsDataBase.checkedDelete(DAHelper, isOperationAll, unCheckedContactIds, (result) =>{ - expect(result).assertEqual('0'); - }) - }) - - it('queryContactList', 0, function (){ - var actionData = { - 'page':0, - 'limit':20 - } - - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - contactsDataBase.queryContactList(DAHelper, actionData, (result) => { - expect(result.code).assertEqual('0'); - }) - }) - -}) \ No newline at end of file diff --git a/entry/src/ohosTest/js/test/SelectcontactsModel.test.js b/entry/src/ohosTest/js/test/SelectcontactsModel.test.js deleted file mode 100644 index 87da48e..0000000 --- a/entry/src/ohosTest/js/test/SelectcontactsModel.test.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index' -import Constants from '../../../main/js/default/common/constants/Constants.js'; -import contactsService from '../../../main/js/default/model/ContactModel.js'; - -describe('SelectcontactsModelTest', function () { - it('queryContacts', 0, function () { - var data = { - 'page':0, - 'limit':20, - 'queryContactsType':'all' - } - - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - contactsService.queryContacts(DAHelper, data, (result) => { - expect(result.code).assertEqual('0'); - }) - }) -}) diff --git a/entry/src/ohosTest/js/test/mergeModel.test.js b/entry/src/ohosTest/js/test/mergeModel.test.js deleted file mode 100644 index 1a85728..0000000 --- a/entry/src/ohosTest/js/test/mergeModel.test.js +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index' -import Constants from '../../../main/js/default/common/constants/Constants.js'; -import mergeService from '../../../main/js/default/model/mergeModel.js'; - -describe('mergeModelTest', function () { - it('queryMergeContactsList', 0, function () { - var contactId = ['1'] - - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - mergeService.queryMergeContactsList(DAHelper, contactId, result => { - expect(result.code).notAssertEqual('0'); - }) - }) - - it('mergeContacts', 0, function () { - var contactId = ['1','2'] - - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - mergeService.mergeContacts(DAHelper, contactId, result => { - expect(result).assertEqual('0'); - }) - }) -}) \ No newline at end of file diff --git a/entry/src/ohosTest/js/test/recentlydelModel.test.js b/entry/src/ohosTest/js/test/recentlydelModel.test.js deleted file mode 100644 index 7b689be..0000000 --- a/entry/src/ohosTest/js/test/recentlydelModel.test.js +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index' -import Constants from '../../../main/js/default/common/constants/Constants.js'; -import recentlyDelService from '../../../main/js/default/model/recentlydelModel.js'; - -describe('recentlydelModelTest', function (){ - it('queryRecentlyDelContacts', 0, function (){ - var data = { - 'page':0, - 'limit':200 - }; - - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - recentlyDelService.queryRecentlyDelContacts(DAHelper, data, (result) => { - expect(result.code).assertEqual('0'); - }) - }) - - it('clearRecentlyDelContacts', 0, function (){ - var data = { - 'contactIds':['2'] - }; - - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - recentlyDelService.clearRecentlyDelContacts(DAHelper, data, (result) => { - expect(result).assertEqual('0'); - }) - }) - -}) \ No newline at end of file diff --git a/entry/src/ohosTest/js/test/recoverModel.test.js b/entry/src/ohosTest/js/test/recoverModel.test.js deleted file mode 100644 index db39ba0..0000000 --- a/entry/src/ohosTest/js/test/recoverModel.test.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http:// www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index' -import Constants from '../../../main/js/default/common/constants/Constants.js'; -import recoverService from '../../../main/js/default/model/recoverModel.js'; - -describe('recoverModelTest', function (){ - it('recoverRlyDelContacts', 0, function (){ - var data = { - 'contactIds':['2'] - }; - - var DAHelper = this.$app.$def.getDAHelper(Constants.uri.CONTACT_DB_URI); - recoverService.recoverRlyDelContacts(DAHelper, data, result => { - expect(result).assertEqual('0'); - }) - }) -}) \ No newline at end of file diff --git a/entry/src/ohosTest/resources/base/element/string.json b/entry/src/ohosTest/resources/base/element/string.json deleted file mode 100644 index 3d458a8..0000000 --- a/entry/src/ohosTest/resources/base/element/string.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "string": [ - { - "name": "app_name", - "value": "Contacts" - }, - { - "name": "mainability_description", - "value": "hap sample empty page" - } - ] -} diff --git a/entry/src/ohosTest/resources/base/media/icon.png b/entry/src/ohosTest/resources/base/media/icon.png deleted file mode 100644 index ce307a8827bd75456441ceb57d530e4c8d45d36c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6790 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index f59159e..0000000 --- a/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://repo.huaweicloud.com/gradle/gradle-6.3-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 2fe81a7..a465dac 100644 --- a/gradlew +++ b/gradlew @@ -1,13 +1,12 @@ #!/usr/bin/env sh # -# Copyright 2015 the original author or authors. -# +# Copyright (c) 2022 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # -# https://www.apache.org/licenses/LICENSE-2.0 +# http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/gradlew.bat b/gradlew.bat index 62bd9b9..26f7aac 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,11 +1,10 @@ @rem -@rem Copyright 2015 the original author or authors. -@rem +@rem Copyright (c) 2022 Huawei Device Co., Ltd. @rem Licensed under the Apache License, Version 2.0 (the "License"); @rem you may not use this file except in compliance with the License. @rem You may obtain a copy of the License at @rem -@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem http://www.apache.org/licenses/LICENSE-2.0 @rem @rem Unless required by applicable law or agreed to in writing, software @rem distributed under the License is distributed on an "AS IS" BASIS, diff --git a/entry/package.json b/package.json similarity index 100% rename from entry/package.json rename to package.json diff --git a/sign/IDE.cer b/sign/IDE.cer new file mode 100644 index 0000000..8e21a4a --- /dev/null +++ b/sign/IDE.cer @@ -0,0 +1,29 @@ +-----BEGIN CERTIFICATE----- +MIICKzCCAa6gAwIBAgIENl1/mzAMBggqhkjOPQQDAwUAMGMxCzAJBgNVBAYTAkNO +MRQwEgYDVQQKEwtPcGVuSGFybW9ueTEZMBcGA1UECxMQT3Blbkhhcm1vbnkgVGVh +bTEjMCEGA1UEAxMaT3Blbkhhcm1vbnkgQXBwbGljYXRpb24gQ0EwHhcNMjEwNTIx +MDQwNjM2WhcNMzEwNTE5MDQwNjM2WjBjMQswCQYDVQQGEwJDTjEUMBIGA1UEChML +T3Blbkhhcm1vbnkxGTAXBgNVBAsTEE9wZW5IYXJtb255IFRlYW0xIzAhBgNVBAMT +Gk9wZW5IYXJtb255IEFwcGxpY2F0aW9uIENBMHYwEAYHKoZIzj0CAQYFK4EEACID +YgAEIZ7ux52vFzWtisqkX+fpQSUnBOMan/PTdINDrqgG9q3vJxrL1pMNurg3pH5w +WInHfhtwsnamtsxSMFe02pcoNlC1t6/CmxqcpfOJiRDz0Zghifh/YLQrH/jqyeGO ++i1VozEwLzAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFNuGtyIW1QuhS7fdJXu5 +8QV9oi1HMAwGCCqGSM49BAMDBQADaQAwZgIxAMHuApZ0AIBK/07QTew1ilSi8p7o +Hpb8ZHR4s/B0pyDzVEDFNWsuGkdhOGGgl/IrPgIxAOi2yis9O+tsvbjOoCImpEBN +DUwS34gEojZRwUVRWLLHz0q5XtrjdCSM78RKQKDmtw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICYTCCAeWgAwIBAgIEHmXAPTAMBggqhkjOPQQDAwUAMGgxCzAJBgNVBAYTAkNO +MRQwEgYDVQQKEwtPcGVuSGFybW9ueTEZMBcGA1UECxMQT3Blbkhhcm1vbnkgVGVh +bTEoMCYGA1UEAxMfT3Blbkhhcm1vbnkgQXBwbGljYXRpb24gUm9vdCBDQTAeFw0y +MTAyMDIxMjE1MzJaFw00OTEyMzExMjE1MzJaMGMxCzAJBgNVBAYTAkNOMRQwEgYD +VQQKEwtPcGVuSGFybW9ueTEZMBcGA1UECxMQT3Blbkhhcm1vbnkgVGVhbTEjMCEG +A1UEAxMaT3Blbkhhcm1vbnkgQXBwbGljYXRpb24gQ0EwdjAQBgcqhkjOPQIBBgUr +gQQAIgNiAAQhnu7Hna8XNa2KyqRf5+lBJScE4xqf89N0g0OuqAb2re8nGsvWkw26 +uDekfnBYicd+G3Cydqa2zFIwV7Talyg2ULW3r8KbGpyl84mJEPPRmCGJ+H9gtCsf ++OrJ4Y76LVWjYzBhMB8GA1UdIwQYMBaAFBc6EKGrGXzlAE+s0Zgnsphadw7NMA8G +A1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTbhrciFtUL +oUu33SV7ufEFfaItRzAMBggqhkjOPQQDAwUAA2gAMGUCMG3cXjiDmXTvf7D4Omhf +qcc2nuO+EMfWE+N9ZhBP5UhV34mAGWi3SfLU6rcV0urWEQIxAMYIb3epOnKhUrcm +Lfu1WKzFlpYQwmw73RaCHP2I3k6NcuWOYeNwWXSNZ8o0nzvaLg== +-----END CERTIFICATE----- diff --git a/sign/OpenHarmony.p12 b/sign/OpenHarmony.p12 new file mode 100644 index 0000000000000000000000000000000000000000..60f9bb48e677960e9dd7257e9f55c80915417ecf GIT binary patch literal 8252 zcmb`IbyOT(y6zijAV?rM1cJLZ?ykWlKm);o)4?UUI|OLl-QA%HPLSYEAh^2+4RDz6 z&OI};?mcJCS@*8`qpF@=dsjWb{XTDj0?7H`;SfLpWamgIj3II%H?QH4;c^1VHh=+S zD=+dQC;&<1Uxtv_fB{HMFESm-{}u`D?~~9`;ox(=fLuTfNT~l?dRdnki2HQ!wGS)A z1!wvr>9+Kjt9Zg2w7??(dR2jP9KB{2vZVV7fhAxho!;2-9e%>)M5!MSry+xXS~yhO z1Vw2UhZuH?f`Ot)611Pz!~u6FWu}f#R_2YGHU#yy1YDV2BP@K zVtDMhK2a(Zy=$)cv5;W|a$rorBR-nib*OEUfj;ctofcX4q2tswq}1L@zuu{pr{v|5j*#utow zlY}$2-QVYQ@pl|1yF(>rr`ju@0Z+O*kX|ot)jhX;iUfdUJ1OGcfl)T;okR&P#j?bs zVh<9J7hCswm%CiU$N_;9a>Z#}Smv$W#?t5ve(k(6i z+up#%%g)Zu1qvWa_|NwvBjp4T1;0rC@Nj^algB?s;Qpn1BK_^(aciN{B*Ds$Vib!% zA;y{Fm=Nqg`4=6(03tC1{ByKpE@KZpGeMa*Cm4Yy1o({3=cEF@gkF%eUPosX{@NiF zcBAY8LKU2t1Ppubiv)<*`jmZV^;&Z=E^flgsovV{dAOI>)QT2)`@4pMfnWYTc=gtZ zr|Xc1Pq!prZ{mQ!OG^|jtxYaC=Hd?tMeP{Waq=f~7~=F`$Z%GH%=%n4k;F})4t&4n zNV`pmDZ61LL*{Ij5e1621o=u<3wQ*<6{~`34~1zsk&_`iax={dv}>~G?fS7NiOU+j zZ-}s%l9;`u1*b?LbI`2lOkaoAv35M=n6|+gaDE_5uWtZ53PtHmWeHgQGJD=Dd_2 zaO^l$sp)4?pW#&qsM2fAA%EP{YPq=((9&!?Jl)MD&)Jrqu$w9PNHH!q@Eoa@kMZEu z*-J|mY<5gw_|t1VfJlKCXy=0&`Eyklx6e|bO$efYjItwF7Jwbw1iqGFO)>d}d4F~8FJwclY8ZA7``Vd- zrX;2K#ezgF?zq7Vk*l7Nv-oqV_nytaY%Boglf1m*&3OFwO}no9B@^{D7I{7bA)M z9EFx6sW7efOOvF+R%u(5in!c&by?I*#nqD0gdh<5u8QoNFN~i!<&Mkcyq@bb8iVqm zy%~`l68E`!3zfEF>xLj!+KJ2!Wteg$Rcm0snvXaIOp$?lo~`}|*D^Dh_ z(`%+t5IXIzZ~XHb$Y9~Z+3SK#w?Gvw^jQaAL{+1(bLh_&!(9w4KzV`qwhD^&7_EZI|o!G55AJRCS}Q zWY!eTQ6Kzsep*)UUBBkhL_$xc4l~_kZxTT)n&yhF|LLtIq~Gq4v#~ak&cdKT-lRnwOn1wTxNJk$m|lt zZjv!pU9jV)vKOB)Lx9yoaiE69c#B?bwBUSTJKs{B$r>v_SYoJJj6w1Vr*d@Hb}rS7 z|L$l`=rW7M_c8cHChc%j@4^=`@rtd8d~q;rJ%5ObJ}@7&`c)$3-q;g?uVH)#&g^=C z;F;roBuZ;!ZU~i3T)$;M>xrylaKy4LKtg<*aJB!3BT(>WKlHwxcKkTa+f?U()SzuN z1?(hONkPYaWa--%YV~y9j>Ltuow3*vAjP8u)+h8c21}r8hO}~v`Q0gZ+hm_ z7~E;VFc;;V6f^$BU}w6?Z^*{AKqQaSOY8>h8Bv%^lNVoi^I?i?n+}EL+(6gH*)ij_ zRp~1A;uBNqrD`Uds>0-+LhZ4r&&ktvy-Q%Htm&))k4+ZE$$tLnBbs^Rr}`mfpXic9 z(=+lqF$OnX(T2{LDzMYkrBTxlF@G|nH+UOUsHrSZ%{fk+eb?rdr=4XF!egT>pqavy z#Tu;`4A{^XOGBGqI?{;s0HQE#LAZ)!MC(g$NJ|pd2&4Y+Vz-oKfDGcl)#a&T|;uVCuc0fWt-6FO7ZKL7a`*m9CB zCo%Avq!fcFGj7mu+P?nNAnA(kvAvqG^}%$CMzd{)mty~%S{t!`d0u2^TEd4cHt@D^ z;rm^xD3-E{aE>i$>#aWUc2ReL6NA02Qjgm#&zd&0i%wKr<1a7kpUKuwk)ah@SeLSA*`we95si@Z#jxan$o z1m{2oeCD>zUHe4>fC;ny^<$7jfl`r#)KL<$u1hR zlGyAXCATnOS-N3(SUs;VUc+5;u{uz2{dn~UlMs`7#I&-Ol8bEA%G^5aNt(>c>B#AH zRzN6iHlm3JU2qpyx2U5^taRy&znVMPkn`dDTf&B0wMThte#w)QST zO|1lV>-RIHzCSE#;3+Juwyt{pLqZTaQZ_E)2#8iK-htQ61HUbd%4ritd7XK$_9dJXUW zG-E8#aQ#OM#W$ZnqEvnMao;~Xc^xv+S=djg4A5v-HsYSc5r-|oIW#QGKk#=qlpOgr z?~P}R2U0TjY!(nqZ@`f$@eUNk*Hak+W)mhmejvSBN@2EbnS=+N_*467kt>LxZNxoe<& zo~VuPDsS^6#;VownToR_9?R-o(Hi1x@U?hw@!jrf&-{QXDOBfLEBn4F&D-eaJ#nuh z0=d*GbFbJ8TM|8CF@hk0wc7G}Q8c5__QONI)usz!{$&owDC?3&Z=fgC^n0JJuK|)w z)T_RQ!tn5tpgwN@xa_eKY9p}4J?S=xs>EHL`qkV%$9+AFRcUB&0`x;8Yi={gz z`M}@Ykzca3MJ$H{#>=sF+_H5RS(DHy>%L#BN2Tb*S6Dy_AVtKOqLBb z=CM0Un?Bm=-q6*9%9J);V%)!;aBU^)ZQ8b_#--pCpFS}o(to7S2H;`7xxO{h-!U6N zuSe`TFp_?)hwxm0SfI~MlWy;oMMq&{PxIJKC~i?~JBLi-^F~UdBSEHB*3nw+s#F(o zd+t(fkyf|1~ZuVy8_XU2v!9&(!n#gL(pHf!=^ zjXHyCAL2}97s%cayNkDbOhTqZvx>zh#sBP%J-NvFnun)gpO~d|JI<7BVAO7Ubz7?J z-h7ZVIKQxaYv|{J{hI-yum^t{ny<@8=Br=4gE;kbn&XvzMO=n45x>~0s8&cJ@DP^048L2${AgloPjC_+%)*5IgoHH zI)O0xmNhX@$s4}23ePKz2~C7HPF6BV?Z{{ z6<3_TrHd8AU`U0Mt{A>@HndK&D?_Ar^DGl>G%3psKP+KC;!lKDCPF}ft`DEQuF6_o zU+1LieDN6@6F@pHMIr77R{A}MH9KFe?Rgx=z#XBkz%wLcCH`3ua9{42oT2dHqIJ40 zDh(z=VA^7DFxu3xJ}savi|Ae5M}!w*3sZzoWac(Otl{Yq-lbLcEf&jT5D^)wVzBB% zUEm$op|1S+91G>)TSP$h(>3EFxGU0Nq|Fr|mJD;pcenP}5z$G+?!w$QRz|$|2F!{W zn8w4V2b-$RcSJA3I*!bnD9|XOc3sjXD(W(MZVBVpxyN0iWv(PNXKdBCxMcTg^fVeW zLb_j9=EpS(9^>;dM|O~KiOjngrKM92frXHVu$k#^z*3`j$&|3%anrgUq|GIGHd>n5 zxTN^@oj`2xkI(jH$JKB1LyM!rY6l)aN^S(4u7s^l>nNsaYDL^5w3=TuKV|hi*hZ6# z$otp}(oGwfWbt8c}2SqUU%Rr{(4sX)GrROdq*;<0P6!ZGkOP-Jd)1 z4ibjiOZyo^nI4FlDFzV5X~o`~49jk=TC)40v^uNW{lcRR`ljemnfh@V-bnKM*Bl$jJG)~Y}NnW0TOcC{1?k0!#%_m1W z;$wj5toq|!=UPQL+fY2@6|&xK_5Ew-W^{4?w?S)7Y{rw1T;NXaY8M%lja!<9PH(>!Wm;pIp~?*scE>@uo!ydNJi?;4^$X<`-eUW~c> zn)z!a!oeu)Dx;9akXYHDj354#QQ(Q%izxjZi#Ad^#HlL8i;7&e5@Vny7J0onpV$}h zY~s}8a?{Wqkx#>1?azzoSgzjo2?gNO#>oE3DZF=NFy4}Arev=RHMZRpD1x!ZvRwhx z;10+}5I3VSfyVY&h@sLaI7msKf!~niFAk?I4GFw&q)exUnv2CXWC@n(xz$u<1|!Zi zPLA6!9W(P??hfA9mRNh!4j0@P5#iH=ezYZ(7>g~65588<%cP~3HseXi4G;}tL-irD z)YtIl7~DJNK&1Qw18V9l6T)SD@J_>W{dN*6gKkqVSgY9weZzqIQukKs~wd5HUW2YM<)kkvAxfdkLFBQZ;k>*Le?qGCOrG zG~5CqtB&H`vTo>+B+FLZ)*@B@83DJ%9BT&lg z{rd$aC?sQt_Y&SU$Xb5l$pnjg=s;p8_R)Otk_EjN91SHA9acJi+DV#^QCyRKx6qiO zKf+M+#GF34QB@BWn|@g(mIxH3LD`CqVrX z7IA|0CDVeMnwt|E*|2Z+&Wi`Q5TE?o%v|8IR;^@xs^o-Nk$M;T4h?AVWeFj6Q2ZU! zLP2vQ)*IAqe+7jv+K-<&ljy%S((2|wB==+Q@V3{V=VP@~Nh-%Jz=L@ji|*DJa&A;B z$=PiESoMbfiixwbc2yo^Img^ZQe%wbTV8MpZBfsT0c_j(spf(nI%Nia1^7Q4o6^vg z2s7XSgY2-)hhoP_?zvp(r}jZlI+kkLD^F>dg5jw8BV-@Iu|LqK zD`tSuT-~jRRX#xByd@532rpUYU0?dj@7vE5PnwivU59c9lAM*UXF(_Z$O6n^gSj2m zreZU~^`YV*e6`dw4~m#>{ndERP|S1`>~*Puq7jH{Qowr}p~Pm0hT#diETIXx{MR3o;l*n!}@3W^gVfejVCnsZ3`2^7Kk>iiq*770r_*%AoJn>{XIWoxR zd*bYtHLb;raDI&rfbQ)XvCA(C!N98NNKbkzS@hWy) zYqM*(o{wOlZZiFe7Necm=Yw(q7y_~fVlT#rKh+DJqR9VpfD(q#N;rNVY|T?P9uf`k zuex_u1DZ+u$n z0@t+q)Q36Ftlu|Kyxp_XBg9?MER5%t2$$Zdf3+0-+j=ZUPFV7*4PVqz9eg8-9G6rS!p9Bu>Qat&(94zCLY_#;%qL#!S5_9_w7Cc+WRRu?LR2Ezx(G@ zy89VDSNcqGYrPw64>Z-Kd7`{PiQzWGsCG+@G&kC#HaUu($ATaTR-cbnxjG>m?vqRA zcL!xf8Eup1SSSs8e5710#rM`Snc0ct^oe`rWS>{>XSu(?ZjT5jMFi{P<-_ZI<%MwD zH{&~V%xCxK!sa$ISg3b*8;;r)?=x8eoL27gcFQrV;cZ3GMN1tl2du8}E4qVW#3E!@ z;}zUj!@v!^g^O#HtjF)=rX`dEmA2frP+2}2^kcp&{2!n>nuqfvs>D!MA4HU8txNU+ zY6y_{?GlUSMqOb~^Au*J#4Zn=slpp6tTsIG&ouV22T!@@9V9Mje(&`!!w+L&5lz4t zy%w)kW9eVlyDof%S9tURd}xW{W{j0m7EZ!ghvjI+EiJuK78CP8mm}~iwR;murgUc` zu|GEt`gX5uEP!|O$Z>QvWZ(KL_Lt;4%vDMyJ4t!N8a_t26mPp~AbmQpq=P>43$0{^2rYxQIa`%YCb3Ev+=w2>h>f}aYh~l zvzjlR9T6QjJwz8;s~tJRI?lycETL~Rd1!XT@n%3J2lD7#^kL*;L6fQfNnlUP9-e^ z!8TtV%)*0Ek2{#{7Xy&{&XtFS&PzJ?qV1E<>IC`r`=%OuGo!H-MPxND%pb}fDYUkH zvm-`6N?LiQOGwU0F<+5iEqw>D57*4?)kecHUnxCcjPMjcRmh)%$ zS2v6Y@1tD1Fktn4iwm1;fF;9`O9)lq%IG5cqFC-<}3yN^;ahjw0 znXcKqf><4aJ(Be8Qxmw>4-<~B6FAc+l@uB}uK=cGaTe#&^0q8Rbfus^r<@VRT||Xx z3?lIJblqWlkP;d!+9S+t5Yn?I(2^Z>MJXDv(Jl!Q4iAep6mmhZepM;$o25=S6n%ja z9VzV$o+Z}`KCKWVs;D$an#|FxNR42;9<&Op5bwycQ_eOCS=I{rcrb9n@%Eb|X)Wa%31>R1KW+JN5Zw=qZwz?eA%S2u z8T1(L9dp)iQpu_$ysr7CH#|3X4ETFvsp1D~>aSPQQtqy8BJ#&|qx7MHnTh2@xq_6? z#?a_}sU+eF>Jc?Ut!*>`P%f*P!#YITkMMH@*J`Bh+9Y5n%%VvshkrAqepd*^Ld&=d znKM#M4{U^C|NG#)G+6N+JjvPoPDJSIZXxgJ1o7Nq>(Q7oIZ21X`@ra!l+f?n z2Af)v)0#!ULzqq8h4E`7d=1QZA}z{zFG_Y-`CU>*BshQEcg))SanBBqLiaP)I;Y9` zdbh)j!E~}n;sOhGsSv}D*B64QKOJ34zMKx;5rmzw!13fXR!@+Dv`ZKbcKd>#y0;T1|C?!FG%lgwTq6P2fapkc)9wy2L=n)N zDyjpX)~iKA4@*qw7*Y_?O@**r`#XXAI$et$0xY3poQ<;b38$t)W60E5+t)j;ReSBlwx88y*nhmEAwrHiICuy# zSJl||tUW$fEl+kg54*Gsmj5{SD$9zS-=+4Bb3#&C-@Xdgb1;YD(cK+GMP4$G->)sEF1EeB$FmH(`3>~ z!h+qfvI3&(dKOrDSl+li+y%9E_lW2!tm0!;#62zrk?rn^EUqg)RuuDgRSV6(qF}r+QK5n=Km}0ES0$5lKooUA zQ{yujD77vq{%Naq0kuH~^lGnx0#KDU7^EP*i00FrbU02$DQ|)j6<&^02j~PJr+rCY zdfyO&O?YUAr$TYBq!odk-Y6ZQ`LwEbv5H}NwT}w2aVavLL94IUX>|Je1A1?er{bcz zT5r(SREg>(^Hshi6Npl3nhCPf@c`9HMOluDs|P~2aTH_r#$zm#7T+@>7(W%~=^*X* z@>0}l>4#uAVV!|u4kuwEP}qqLXxkW)Akg{@io)LN5G)V~93n7l6snA6U=j(1I>PM{ zTZ7$hgoP%U#K{zzf$NZvwHbk3PPpA_6FoTW0v2)^o9*^`OyC>*cyqE5H>G_oh9u?0 z+$7@1VW5Klg+zVr;jljjb^4h0P&3{fZex5-EJC8#018f#-fL0zRz&dO(TJWAQ9#4_S!)!9`07eDmg?|xL0cW|FlK-|6sCjWN|(hRH&;eF(iARMvz&&S zSuul_3~ZCW&1}~ra8QpSFo_~sSTIXjbO0NIxGF2WQUXLr8)-dP!?rPI z&Zl>q9oj@C0=Tp>(~KES)|NyPZx4iRI39{t67dGfi;dQ#>4d>n&L=v35gUsVF%Cnl zZH%!=XsptPFgD_L2u;n77K_E40Uf$lJ{}36jbx49QE#s|#&}`Df;MKL6)>xDl=cui zYp4r{=7*n+Rj^?;QQ>D9-s|TRBEri>#WrKuc+49e5IJ>_^72Wk&s8GUlSn6cD&`S~ zhDvN}uRofQ`q>+evH}%Q56btc2HcA69itP{2&-r&5Qo^PqQ`43By5Fo%+qWmP>h5L z%P0^B1{*!7&FX|vXX7aL76;+P{uf}-0c^2&EH-=;2Mrb&6&;9xQH(g|^dL=EqXqL2 zR+G)s;2@d_3x;Dx)j}}?S3hzf5phZyq<&t^#R$uN5>`w`Qksk^uALs3t#L-o@{;as z-akNAeiz8fUg%cHWpcT)W@qdm7?*dGxIW%opj0SwbATTj3kvcSP0G9yIckL_fLkPC zOv%_`!xOp{OqR4`ONxhSXE-Tu44MUIN+v}~>2MRwaZzcwiba}%!eH9uLJb5oKm%#S zr_MdOP-}oRRnU+KxbGPR02PBllwB`~hBzCfqtpz?;C=!wP?DEFkOsMIC?5)0z5>Zn zw!9_(q<6>ukKm4j6JP!L+{gEtYL*qQn=bqN-gz%Sbn?XMY2>b&FBI>5c9@ZuJMWqP z!XLWrj}}b&{bSlU70jx`Qy$;y01aTe7|zsL$|+z{*MvVW?@>*9Z|vs!p1#``_kNbU zWQ!UHMG|1VO!lo(sgUP)fvJ*Qq@1LjaMb(p^E)%vV{iT9z)#NQUi#8gD07UgnS#y% zK{=GO=iz+?SzmgedG^i7xt~$J;k^B~Y%CT`cV9ZUWnIrl$RmLh!7onlyl{GTUiG5O zzuG7s>0TbmoVq-&7Ctw7p(S_b$`^NZ*}w_ohb!mwIZ6-7&|M$TKCo3+oO<$dVrlJWd%pVqG$84C!1&(h5Wa|TN{{d%Qyuq=NKi6AYcA4Z}9@difH35u_h zC%62^${dx#m!l-B`_hlL7cSfIX<^;r%X8WDemGXYxK}-PL+A5nU9Pw9TfgPr>^IN8 z>r&#YNPHc)2HC!+`$DhhqI1W%qCWqFkNgS0dFum(C!gEC<)UZe#W~Yg#rtO5G1Z=M z5ld_G@qcbbz`bC+M3fSVIJrO}K1MQ0mN$$^lWU7N@4od%{W-QhZ?7xczs@Zby)m+S zick&+$bsM%%AhyC5_a9acH{BZryto@wqwldx5hnJ+dJ)nu6epl+xE@3sW%;ag;ma? zU1j`wIhehB_D|V`duHW3CTv@Mq5C0FcTd{*?>zD~>Gv0k^+%$Fr|HK+Dq~ ztesok@J!EBFRd@#u>JEDD~dmVd)>?xU*Esz>GJ7cpMCZ8!{4Zzw)%m0#BdswBmW1- zMjdV=HjE;i11LF&o%o@C*)RD|@Bj7JwPDYbN2)iSIaqw;c*&V1!D3s#x#`r3u3N)B z#J`T6?V0$_+2c2h!|L!&tng%Qe6yoxj{4#=t$SWsv!?i^=$(C&vbSA&@T7Hhy#HbE z8P3J84!x#*;?55$psWlLNp`n*7Xs}!q>Muwb@;Wbn+8*^T)PSskZAkvvL*w!T@ea$ zq4DBU)Bte_LK-ck)w@CERjU$GDQ8gO_dkI{Th6!6BA@;Cj(MfC-^;Na>g|7h`+M6C z-g%dMDj0KRlgpK6V3Nk~8x0B_Tc30gIr#bBEo7*- GogS%?t`dm= literal 0 HcmV?d00001 diff --git a/sign/material/fd/0/9d6b543ba2624abf89877179453f62ae b/sign/material/fd/0/9d6b543ba2624abf89877179453f62ae new file mode 100644 index 0000000..36b8d84 --- /dev/null +++ b/sign/material/fd/0/9d6b543ba2624abf89877179453f62ae @@ -0,0 +1,2 @@ +azj +]); \ No newline at end of file diff --git a/sign/material/fd/1/c0a0efae61d44233b1709e444c2e9748 b/sign/material/fd/1/c0a0efae61d44233b1709e444c2e9748 new file mode 100644 index 0000000..792fb0f --- /dev/null +++ b/sign/material/fd/1/c0a0efae61d44233b1709e444c2e9748 @@ -0,0 +1 @@ +*¾ X \ No newline at end of file diff --git a/sign/material/fd/2/02846094e97640a9b76a316e6e439640 b/sign/material/fd/2/02846094e97640a9b76a316e6e439640 new file mode 100644 index 0000000..af9e7a9 --- /dev/null +++ b/sign/material/fd/2/02846094e97640a9b76a316e6e439640 @@ -0,0 +1 @@ +tvXu \ No newline at end of file diff --git a/signature/contacts.p7b b/signature/contacts.p7b deleted file mode 100644 index e013b0b50f877a67871eee8afec8da81b6b24e3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3421 zcmcgvdsGuw8Yd5+h!GSOb$wu@V%5N%kN}~r?MyOx!6YOkKxkZ?B$EduGa;EUA*@zo zODh&#w`Z00RTM?7uU)l8_N?0NZgp+9dVJKgrxjbZoUN{_TeWKI(cKx~Ab9kTJw3<# zkvZRYzkBcRe&6r=-E%=)WJ^k!-K=fCE8->d+v6fVh>O&G9uGBLAR4~v2JLt7!L*|E?<}q z`5Y0Nn?N@Pxd~Lb#z)eGCxmlec4j2vbFqFokQO==3PK`xvwyMzxl5vugCYs8AOMsv zbGr$sh}#GE`&>S{QC!?4CMjCtAly`l+p!=Y6iTIq(!#lYe%wtHA=a&s6@Vhny>PC0 z06~cG6L^?l7jr~Nm!FXMNH@i;=OP*iKNTcGl0HO~mkJNM*yv%WaS|cg=k_^qnmd$) z`yr@CXUI~bW{Xa(Q^FRs&ub?!olc3xluFn^cwk0{z#bin8vjT zsbIzmV;U@~jKO-uW2iu2n+2{j7}*ufCIvl zRt(Ygg1w|E1b){TqtJ2dBsa&p8oBg&*5G_%`f&LiGVkfoW zu_#o{I5p9rO{xYsn+u&p z1uNxlSDj63kjWcBRX(i6qmZ<=3~`|$O@H04?(C zfThY-O&S6o3<^^X5eH$ahbaAW?)1R8>%j&qoIh`Zzr8*#1z)M7-w~T zX+%L8tQ8&{gBgudS+6O_WD0h+3NgVd9EO={lP(JDX&jW9q(PZV7s(5T?PMwDDpjgH zCb?A$`2iv;(|8d-=5hI?F?SJJrw9k}7;4hxfhq$Nbkjv9SjT9~Be1lR@K^ZqC_5R0 z{c2F8A|3jW(MTIfQ@xzg8q54D8zM8()|k@mJ)ZP$5a+)H;=Cj60zQw=7Zz>{ z90ntko@1r+#LGf~fYnDQlnPRk1Xf{E2487_#)2`NF(MUFbO;Ux{hX+<__LHSn3^e)LO=?nkd*z(t20G11tiUf222qA znIHhj?FW(bG!SJW%I)(LS>}Gx1U8V7l-!pFK5rl&0$#EJNf1_^{x_X{(>i#});bw^jjN$^)c)b4#g#v!^ zVlaiXM+wIZ$9{%iIkYWiID7K9``@^h_~1^Bh-V&NGl4GwxcN}Rt`&Py;*Q2W+U(KD zwO)taP1s|8Q~J?Tf8R1q&X&zk!|7-dr2|`r*i8_*(Y- z(!}X4f9_mt1m{)Xw9M==Px^?b+hy{)WAy&}SxT;RH zbo~vH{^-M5)O9BuC~4}Jq^@r`bk$}%_1e14uf~7+@Qh8US&nJif~%3OyV`Ge*W9;s zjvUqFe0$|TG^0D-6kRyDb@Tn2arb9VTOR7kdSQwwY|||&OxFCT0|BpsG>#}49B~qX zfc*?-5-({8lQN6bH|?DGtKJ0Tu2XF}``W6RQJ)X5p1_j;TztS(Gda-bcbV<;)@(Re zbztS5oX!!gCr2JE?wrkt6>H$DSx|!)_RXHvtfQ5IFzKqNTs1Z@m8d zd&S|Dm>h3<4?uh#nYvc(gecBV`(NxCAD{f-?F)w1Q11%-a?nP%dOnrC_u`kiP@IRbB%8;+13=v~ zDdWJ6I{eAe?gJABpByOyD0R?C=7GtBMoJ=-)^{x`fDB0UrJ%4H2deS8~Z)EvJ_(T|4PB?l%_x Mp((HD$LvG@1NBl-?*IS*

u@8Z(Sv$*& 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�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