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}