• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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}