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 { HiLog } from '../../../../../common/src/main/ets/util/HiLog'; 17import Constants from '../../../../../common/src/main/ets/Constants'; 18import ContactListPresenter from './contact/ContactListPresenter'; 19import CallRecordPresenter from './dialer/callRecord/CallRecordPresenter'; 20import WorkerWrapper from '../workers/base/WorkerWrapper'; 21import Want from '@ohos.app.ability.Want'; 22 23const TAG = 'PageManager' 24 25export default class PresenterManager { 26 mainUrl: string = 'pages/index'; 27 context: Context; 28 worker: WorkerWrapper; 29 callRecordPresenter: CallRecordPresenter = CallRecordPresenter.getInstance(); 30 contactListPresenter: ContactListPresenter = ContactListPresenter.getInstance(); 31 32 constructor(context: Context, worker: WorkerWrapper) { 33 this.context = context; 34 this.worker = worker; 35 } 36 37 onCreate(want: Want) { 38 HiLog.i(TAG, 'onCreate'); 39 this.onRequest(want.parameters, true); 40 this.callRecordPresenter.onCreate(this.context, this.worker); 41 this.contactListPresenter.onCreate(this.context, this.worker); 42 if (this.mainUrl == 'pages/index' && globalThis.config.needCache) { 43 this.initDataCache(); 44 } 45 } 46 47 onNewWant(want: Want) { 48 HiLog.i(TAG, 'onNewWant'); 49 this.onRequest(want.parameters, false); 50 } 51 52 initDataCache() { 53 CallRecordPresenter.getInstance().cachePageOne(); 54 ContactListPresenter.getInstance().cachePageOne(); 55 } 56 57 onDestroy() { 58 HiLog.i(TAG, 'onDestroy') 59 this.callRecordPresenter.onDestroy(); 60 this.contactListPresenter.onDestroy(); 61 } 62 63 // Go to a specified page. 64 onRequest(parameters: { [key: string]: Object }, isOnCreate: boolean) { 65 HiLog.i(TAG, 'show pageRouteHandler routeMessage '); 66 let url = 'pages/index'; 67 let params = {}; 68 let pageIndex = 1; 69 if (parameters?.pageFlag) { 70 HiLog.i(TAG, 'pageRouteHandler case is ' + parameters.pageFlag); 71 switch (parameters.pageFlag.toString()) { 72 // jump to index 73 case 'page_flag_dialer': 74 AppStorage.SetOrCreate(Constants.Storage.mainTabsIndex, 0); 75 params = { 76 mainTabsIndex: 0 77 } 78 break; 79 case 'page_flag_choose_contacts': 80 AppStorage.SetOrCreate(Constants.Storage.mainTabsIndex, 1); 81 params = { 82 mainTabsIndex: 1 83 } 84 break; 85 case 'page_flag_contact_details': 86 url = 'pages/contacts/details/ContactDetail'; 87 pageIndex = 2; 88 if (parameters.contactId) { 89 params = { 90 'sourceHasId': true, 91 'contactId': parameters.contactId 92 } 93 } else { 94 HiLog.i(TAG, 'SHOW pageRouteHandler and routeMessage.phoneNumber '); 95 params = { 96 'sourceHasPhone': true, 97 'phoneNumberShow': parameters.phoneNumber, 98 } 99 } 100 break; 101 case 'page_flag_edit_before_calling': 102 AppStorage.SetOrCreate(Constants.Storage.mainTabsIndex, 0); 103 AppStorage.SetOrCreate(Constants.Storage.teleNumber, parameters.phoneNumber); 104 params = { 105 mainTabsIndex: 0, teleNumber: parameters.phoneNumber 106 } 107 break; 108 case 'page_flag_save_contact': 109 url = 'pages/contacts/accountants/Accountants'; 110 pageIndex = 3; 111 params = { 112 phoneNumbers: [ 113 { 114 'phoneNumber': parameters.phoneNumber?.toString().replace(/[^0123456789+]*/g, ''), 115 } 116 ], 117 'disPlayName': parameters.contactName 118 } 119 break; 120 case 'page_flag_save_exist_contact': 121 url = 'pages/contacts/selectContactsList/selectContactsList'; 122 pageIndex = 4; 123 params = { 124 type: 'saveContacts', 125 number: parameters.phoneNumber 126 } 127 break; 128 case 'page_flag_sms_forward': 129 url = 'pages/contacts/batchselectcontacts/BatchSelectContactsPage' 130 pageIndex = 4 131 params = { 132 selectType: 1 133 } 134 break; 135 case 'page_flag_multi_choose': 136 pageIndex = 4; 137 url = 'pages/contacts/batchselectcontacts/BatchSelectContactsPage' 138 params = { 139 selectType: 0 140 } 141 142 break; 143 case 'page_flag_single_choose': 144 pageIndex = 4; 145 url = 'pages/contacts/batchselectcontacts/SingleSelectContactPage' 146 params = { 147 selectType: 0 148 } 149 break; 150 default: 151 HiLog.e(TAG, 'pageRouteHandler and This page is not open.'); 152 break; 153 } 154 } 155 if (isOnCreate) { 156 this.mainUrl = url; 157 AppStorage.SetOrCreate('params', params); 158 } else { 159 AppStorage.SetOrCreate(Constants.Storage.targetPage, { 160 url: url, 161 pageIndex: pageIndex, 162 params: params 163 }) 164 HiLog.i(TAG, 'pageRouteHandler finish!'); 165 } 166 } 167}