• 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 { 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}