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 pasteboard from '@ohos.pasteboard'; 18import { HiLog } from '../../../../../common/src/main/ets/util/HiLog'; 19import { StringUtil } from '../../../../../common/src/main/ets/util/StringUtil'; 20import StringFormatUtil from '../util/StringFormatUtil'; 21import { missedCallManager } from '../feature/missedCall/MissedCallManager'; 22import CallRecordPresenter from './dialer/callRecord/CallRecordPresenter'; 23 24const TAG = 'IndexPresenter '; 25 26export default class IndexPresenter { 27 private static instance: IndexPresenter; 28 uriTabFlag: boolean = false; 29 isEditNum: boolean = false; 30 editPhoneNumber: string = ""; 31 tabsIndex: number = 0; 32 33 public static getInstance(): IndexPresenter { 34 if (!IndexPresenter.instance) { 35 IndexPresenter.instance = new IndexPresenter(); 36 } 37 return IndexPresenter.instance; 38 } 39 40 onPageShow() { 41 HiLog.i(TAG, 'onPageShow !!!'); 42 if (AppStorage.Get("indexTabs") === 0) { 43 this.tabsIndex = 0; 44 } 45 this.uriTabFlag = !this.uriTabFlag; 46 if (this.isEditNum) { 47 this.editPhoneNumber = AppStorage.Get("tele_number"); 48 this.isEditNum = !this.isEditNum; 49 } 50 this.cancelMissedCallNotification() 51 this.getNewWant(); 52 if (parseInt(StringFormatUtil.judgeSysTime()) !== AppStorage.Get("sysTime")) { 53 HiLog.i(TAG, 'DO requestItem cause systemTime changed'); 54 CallRecordPresenter.getInstance().requestItem(); 55 AppStorage.SetOrCreate("sysTime", parseInt(StringFormatUtil.judgeSysTime())); 56 } 57 } 58 59 cancelMissedCallNotification() { 60 HiLog.i(TAG, `cancelMissedCallNotification`); 61 missedCallManager.cancelNotification() 62 } 63 64 aboutToAppear() { 65 HiLog.i(TAG, 'aboutToAppear !!!'); 66 AppStorage.SetOrCreate("sysTime", parseInt(StringFormatUtil.judgeSysTime())); 67 AppStorage.SetOrCreate('router', router.getState()); 68 } 69 70 aboutToDisappear() { 71 HiLog.i(TAG, 'aboutToDisappear !!!'); 72 } 73 74 getNewWant() { 75 let Want = globalThis.abilityWant; 76 if (StringUtil.isEmpty(Want)) { 77 return; 78 } 79 globalThis.abilityWant = null; 80 HiLog.i(TAG, 'do getNewWant success: want is ' + JSON.stringify(Want)); 81 if (StringUtil.isEmpty(Want.uri) && StringUtil.isEmpty(Want.parameters.pageFlag)) { 82 HiLog.e(TAG, 'Route message is invalid.'); 83 } else if (!StringUtil.isEmpty(Want.uri)) { 84 HiLog.i(TAG, "want uri is not empty!"); 85 this.pageRouteHandler({ 86 pageFlag: Want.uri 87 }); 88 } else { 89 HiLog.i(TAG, "go pageRouteHandler"); 90 this.pageRouteHandler(Want.parameters); 91 } 92 } 93 94 // Go to a specified page. 95 pageRouteHandler(routeMessage) { 96 HiLog.i(TAG, 'show pageRouteHandler routeMessage '); 97 let uri = ""; 98 let params = {}; 99 if (StringUtil.isEmpty(routeMessage.pageFlag)) { 100 HiLog.i(TAG, 'pageRouteHandler and routeMessage.pageFlag isEmpty '); 101 return; 102 } 103 HiLog.i(TAG, 'pageRouteHandler case is ' + routeMessage.pageFlag); 104 switch (routeMessage.pageFlag.toString()) { 105 // jump to index 106 case 'page_flag_dialer': 107 router.back({ 108 url: "pages/index" 109 }); 110 this.tabsIndex = 0; 111 this.uriTabFlag = !this.uriTabFlag; 112 return; 113 case 'page_flag_choose_contacts': 114 router.back({ 115 url: "pages/index" 116 }); 117 this.tabsIndex = 1; 118 this.uriTabFlag = !this.uriTabFlag; 119 return; 120 case 'page_flag_contact_details': 121 uri = "pages/contacts/details/ContactDetail"; 122 if (routeMessage.contactId) { 123 params = { 124 'sourceHasId': true, 125 'contactId': routeMessage.contactId 126 } 127 } else { 128 HiLog.i(TAG, 'SHOW pageRouteHandler and routeMessage.phoneNumber '); 129 params = { 130 'sourceHasPhone': true, 131 'phoneNumberShow': routeMessage.phoneNumber, 132 } 133 } 134 break; 135 case 'page_flag_edit_before_calling': 136 router.back({ 137 url: "pages/index" 138 }); 139 this.tabsIndex = 0; 140 this.uriTabFlag = !this.uriTabFlag; 141 this.editBeforeCall(routeMessage.phoneNumber); 142 this.isEditNum = true; 143 return; 144 case 'page_flag_save_contact': 145 this.addContacts(routeMessage); 146 return; 147 case 'page_flag_save_exist_contact': 148 this.saveToContacts(routeMessage.phoneNumber); 149 return; 150 case 'page_flag_sms_forward': 151 router.push({ 152 url: 'pages/contacts/batchselectcontacts/BatchSelectContactsPage', 153 params: { 154 selectType: 1 155 } 156 }); 157 return; 158 case 'page_flag_multi_choose': 159 router.push({ 160 url: 'pages/contacts/batchselectcontacts/BatchSelectContactsPage', 161 params: { 162 selectType: 0 163 } 164 }); 165 return; 166 case 'page_flag_single_choose': 167 router.push({ 168 url: 'pages/contacts/batchselectcontacts/SingleSelectContactPage', 169 params: { 170 selectType: 0 171 } 172 }); 173 return; 174 default: 175 HiLog.e(TAG, 'pageRouteHandler and This page is not open.'); 176 break; 177 } 178 HiLog.i(TAG, 'SHOW final uri'); 179 router.replace({ 180 url: uri, 181 params: params 182 }); 183 } 184 185 editBeforeCall(phoneNumber) { 186 this.editPhoneNumber = phoneNumber; 187 } 188 189 saveToContacts(phoneNumber) { 190 router.replace({ 191 url: 'pages/contacts/selectContactsList/selectContactsList', 192 params: { 193 type: 'saveContacts', 194 number: phoneNumber 195 } 196 }); 197 } 198 199 addContacts(routeMessage) { 200 let phoneNumber = routeMessage.phoneNumber; 201 let contactName = routeMessage.contactName 202 let number = phoneNumber.replace(/[^0123456789+]*/g, ''); 203 router.replace({ 204 url: 'pages/contacts/accountants/Accountants', 205 params: { 206 phoneNumbers: [ 207 { 208 'phoneNumber': number, 209 } 210 ], 211 'disPlayName': contactName 212 } 213 }); 214 } 215 216 getCopy(phoneNumber) { 217 HiLog.i(TAG, 'Succeeded PasteData is ' + JSON.stringify(phoneNumber)); 218 let pasteData = pasteboard.createPlainTextData(phoneNumber); 219 let systemPasteboard = pasteboard.getSystemPasteboard(); 220 systemPasteboard.setPasteData(pasteData, (err, data) => { 221 if (err) { 222 HiLog.e(TAG, 'Failed to set PasteData. Cause: ' + JSON.stringify(err.message)); 223 return; 224 } 225 HiLog.i(TAG, 'Succeeded in setting PasteData.'); 226 }); 227 } 228 229 getTabSrc(tabIndex: number, index: number): Resource { 230 let imgSrc = $r('app.media.ic_call_filled_normal'); 231 if (index === 1) { 232 imgSrc = $r("app.media.ic_contacts_normal_filled"); 233 } 234 return imgSrc; 235 } 236 237 getTabText(tabIndex: number, index: number): Resource { 238 let text = $r('app.string.dialer'); 239 if (index === 1) { 240 text = $r('app.string.contact'); 241 } 242 return text; 243 } 244 245 getTabTextColor(tabIndex: number, index: number): Resource { 246 let color = $r('sys.color.ohos_id_color_bottom_tab_text_off'); 247 if (tabIndex === index) { 248 color = $r('sys.color.ohos_id_color_connected'); 249 } 250 return color; 251 } 252}