1/** 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16import router from '@ohos.router'; 17import { CallLogRepository } from '../../../../../feature/call'; 18import { ContactRepository } from '../../../../../feature/contact/src/main/ets/repo/ContactRepository'; 19import pasteboard from '@ohos.pasteboard'; 20import { HiLog } from '../../../../../common/src/main/ets/util/HiLog'; 21import { StringUtil } from '../../../../../common/src/main/ets/util/StringUtil'; 22import StringFormatUtil from '../util/StringFormatUtil'; 23import CallRecordPresenter from './dialer/callRecord/CallRecordPresenter'; 24import { missedCallManager } from '../feature/missedCall/MissedCallManager'; 25import emitter from '@ohos.events.emitter'; 26import Constants from '../../../../../common/src/main/ets/Constants'; 27 28const TAG = 'IndexPresenter '; 29 30export default class IndexPresenter { 31 private static instance: IndexPresenter; 32 uriTabFlag: boolean = false; 33 isEditNum: boolean = false; 34 editPhoneNumber: string = ""; 35 tabsIndex: number = 0; 36 innerEvent = { 37 eventId: Constants.Event.CALLS_MERGE, 38 priority: emitter.EventPriority.HIGH 39 }; 40 41 public static getInstance(): IndexPresenter { 42 if (!IndexPresenter.instance) { 43 IndexPresenter.instance = new IndexPresenter(); 44 } 45 return IndexPresenter.instance; 46 } 47 48 onPageShow() { 49 HiLog.i(TAG, 'onPageShow !!!'); 50 if (AppStorage.Get("indexTabs") === 0) { 51 this.tabsIndex = 0; 52 } 53 this.uriTabFlag = !this.uriTabFlag; 54 if (this.isEditNum) { 55 this.editPhoneNumber = AppStorage.Get("tele_number"); 56 this.isEditNum = !this.isEditNum; 57 } 58 this.cancelMissedCallNotification() 59 this.getNewWant(); 60 if (parseInt(StringFormatUtil.judgeSysTime()) !== AppStorage.Get("sysTime")) { 61 HiLog.i(TAG, 'DO requestItem cause systemTime changed'); 62 emitter.emit(this.innerEvent) 63 AppStorage.SetOrCreate("sysTime", parseInt(StringFormatUtil.judgeSysTime())); 64 } 65 } 66 67 cancelMissedCallNotification() { 68 HiLog.i(TAG, `cancelMissedCallNotification`); 69 missedCallManager.cancelNotification() 70 } 71 72 aboutToAppear() { 73 HiLog.i(TAG, 'aboutToAppear !!!'); 74 AppStorage.SetOrCreate("sysTime", parseInt(StringFormatUtil.judgeSysTime())); 75 AppStorage.SetOrCreate('router', router.getState()); 76 } 77 78 aboutToDisappear() { 79 HiLog.i(TAG, 'aboutToDisappear !!!'); 80 CallLogRepository.getInstance().unRegisterDataChangeObserver(() => { 81 }); 82 ContactRepository.getInstance().unRegisterDataChangeObserver(() => { 83 }); 84 } 85 86 getNewWant() { 87 let Want = globalThis.abilityWant; 88 if (StringUtil.isEmpty(Want)) { 89 return; 90 } 91 globalThis.abilityWant = null; 92 HiLog.i(TAG, 'do getNewWant success: want is ' + JSON.stringify(Want)); 93 if (StringUtil.isEmpty(Want.uri) && StringUtil.isEmpty(Want.parameters.pageFlag)) { 94 HiLog.e(TAG, 'Route message is invalid.'); 95 } else if (!StringUtil.isEmpty(Want.uri)) { 96 HiLog.i(TAG, "want uri is not empty!"); 97 this.pageRouteHandler({ 98 pageFlag: Want.uri 99 }); 100 } else { 101 HiLog.i(TAG, "go pageRouteHandler"); 102 this.pageRouteHandler(Want.parameters); 103 } 104 } 105 106 // Go to a specified page. 107 pageRouteHandler(routeMessage) { 108 HiLog.i(TAG, 'show pageRouteHandler routeMessage '); 109 let uri = ""; 110 let params = {}; 111 if (StringUtil.isEmpty(routeMessage.pageFlag)) { 112 HiLog.i(TAG, 'pageRouteHandler and routeMessage.pageFlag isEmpty '); 113 return; 114 } 115 HiLog.i(TAG, 'pageRouteHandler case is ' + routeMessage.pageFlag); 116 switch (routeMessage.pageFlag.toString()) { 117 // jump to index 118 case 'page_flag_dialer': 119 router.back({ 120 url: "pages/index" 121 }); 122 this.tabsIndex = 0; 123 this.uriTabFlag = !this.uriTabFlag; 124 return; 125 case 'page_flag_choose_contacts': 126 router.back({ 127 url: "pages/index" 128 }); 129 this.tabsIndex = 1; 130 this.uriTabFlag = !this.uriTabFlag; 131 return; 132 case 'page_flag_contact_details': 133 uri = "pages/contacts/details/ContactDetail"; 134 if (routeMessage.contactId) { 135 params = { 136 'sourceHasId': true, 137 'contactId': routeMessage.contactId 138 } 139 } else { 140 HiLog.i(TAG, 'SHOW pageRouteHandler and routeMessage.phoneNumber '); 141 params = { 142 'sourceHasPhone': true, 143 'phoneNumberShow': routeMessage.phoneNumber, 144 } 145 } 146 break; 147 case 'page_flag_edit_before_calling': 148 router.back({ 149 url: "pages/index" 150 }); 151 this.tabsIndex = 0; 152 this.uriTabFlag = !this.uriTabFlag; 153 this.editBeforeCall(routeMessage.phoneNumber); 154 this.isEditNum = true; 155 return; 156 case 'page_flag_save_contact': 157 this.addContacts(routeMessage); 158 return; 159 case 'page_flag_save_exist_contact': 160 this.saveToContacts(routeMessage.phoneNumber); 161 return; 162 case 'page_flag_sms_forward': 163 router.push({ 164 url: 'pages/contacts/batchselectcontacts/BatchSelectContactsPage', 165 params: { 166 selectType: 1 167 } 168 }); 169 return; 170 case 'page_flag_multi_choose': 171 router.push({ 172 url: 'pages/contacts/batchselectcontacts/BatchSelectContactsPage', 173 params: { 174 selectType: 0 175 } 176 }); 177 return; 178 case 'page_flag_single_choose': 179 router.push({ 180 url: 'pages/contacts/batchselectcontacts/SingleSelectContactPage', 181 params: { 182 selectType: 0 183 } 184 }); 185 return; 186 default: 187 HiLog.e(TAG, 'pageRouteHandler and This page is not open.'); 188 break; 189 } 190 HiLog.i(TAG, 'SHOW final uri'); 191 router.replace({ 192 url: uri, 193 params: params 194 }); 195 } 196 197 editBeforeCall(phoneNumber) { 198 this.editPhoneNumber = phoneNumber; 199 } 200 201 saveToContacts(phoneNumber) { 202 router.replace({ 203 url: 'pages/contacts/selectContactsList/selectContactsList', 204 params: { 205 type: 'saveContacts', 206 number: phoneNumber 207 } 208 }); 209 } 210 211 addContacts(routeMessage) { 212 let phoneNumber = routeMessage.phoneNumber; 213 let contactName = routeMessage.contactName 214 let number = phoneNumber.replace(/[^0123456789+]*/g, ''); 215 router.replace({ 216 url: 'pages/contacts/accountants/Accountants', 217 params: { 218 phoneNumbers: [ 219 { 220 'phoneNumber': number, 221 } 222 ], 223 'disPlayName': contactName 224 } 225 }); 226 } 227 228 getCopy(phoneNumber) { 229 HiLog.i(TAG, 'Succeeded PasteData is ' + JSON.stringify(phoneNumber)); 230 let pasteData = pasteboard.createPlainTextData(phoneNumber); 231 let systemPasteboard = pasteboard.getSystemPasteboard(); 232 systemPasteboard.setPasteData(pasteData, (err, data) => { 233 if (err) { 234 HiLog.e(TAG, 'Failed to set PasteData. Cause: ' + JSON.stringify(err.message)); 235 return; 236 } 237 HiLog.i(TAG, 'Succeeded in setting PasteData.'); 238 }); 239 } 240 241 getTabSrc(tabIndex: number, index: number): Resource { 242 let imgSrc = $r('app.media.ic_call_filled_normal'); 243 if (index === 1) { 244 imgSrc = $r("app.media.ic_contacts_normal_filled"); 245 } 246 return imgSrc; 247 } 248 249 getTabText(tabIndex: number, index: number): Resource { 250 let text = $r('app.string.dialer'); 251 if (index === 1) { 252 text = $r('app.string.contact'); 253 } 254 return text; 255 } 256 257 getTabTextColor(tabIndex: number, index: number): Resource { 258 let color = $r('sys.color.ohos_id_color_bottom_tab_text_off'); 259 if (tabIndex === index) { 260 color = $r('sys.color.ohos_id_color_connected'); 261 } 262 return color; 263 } 264}