199da06d0Sopenharmony_ci/** 299da06d0Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 399da06d0Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 499da06d0Sopenharmony_ci * you may not use this file except in compliance with the License. 599da06d0Sopenharmony_ci * You may obtain a copy of the License at 699da06d0Sopenharmony_ci * 799da06d0Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 899da06d0Sopenharmony_ci * 999da06d0Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1099da06d0Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1199da06d0Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1299da06d0Sopenharmony_ci * See the License for the specific language governing permissions and 1399da06d0Sopenharmony_ci * limitations under the License. 1499da06d0Sopenharmony_ci */ 1599da06d0Sopenharmony_ci 1699da06d0Sopenharmony_ci/** 1799da06d0Sopenharmony_ci * @file: notification manager 1899da06d0Sopenharmony_ci */ 1999da06d0Sopenharmony_ci 2099da06d0Sopenharmony_ciimport wantAgent from '@ohos.wantAgent'; 2199da06d0Sopenharmony_ciimport notification from '@ohos.notification'; 2299da06d0Sopenharmony_ciimport commonEvent from '@ohos.commonEvent'; 2399da06d0Sopenharmony_ciimport callStateConst from '../common/constant/CallStateConst'; 2499da06d0Sopenharmony_ciimport LogUtils from '../common/utils/LogUtils'; 2599da06d0Sopenharmony_ciimport * as Constants from '../common/utils/Constants'; 2699da06d0Sopenharmony_ci 2799da06d0Sopenharmony_ciconst TAG = 'NotificationManager'; 2899da06d0Sopenharmony_ciconst ID = 0; 2999da06d0Sopenharmony_ci 3099da06d0Sopenharmony_ciconst notificationRequest = { 3199da06d0Sopenharmony_ci content: { 3299da06d0Sopenharmony_ci contentType: notification.ContentType.NOTIFICATION_CONTENT_LONG_TEXT, 3399da06d0Sopenharmony_ci longText: { 3499da06d0Sopenharmony_ci title: '', 3599da06d0Sopenharmony_ci text: '', 3699da06d0Sopenharmony_ci longText: '', 3799da06d0Sopenharmony_ci briefText: '', 3899da06d0Sopenharmony_ci expandedTitle: '' 3999da06d0Sopenharmony_ci } 4099da06d0Sopenharmony_ci }, 4199da06d0Sopenharmony_ci id: ID, 4299da06d0Sopenharmony_ci wantAgent: null, 4399da06d0Sopenharmony_ci actionButtons: [], 4499da06d0Sopenharmony_ci slotType: notification.SlotType.OTHER_TYPES, 4599da06d0Sopenharmony_ci deliveryTime: new Date().getTime() 4699da06d0Sopenharmony_ci}; 4799da06d0Sopenharmony_ci 4899da06d0Sopenharmony_ciconst textMap = 4999da06d0Sopenharmony_ci { 5099da06d0Sopenharmony_ci 'answer': $r('app.string.answer'), 5199da06d0Sopenharmony_ci 'reject': $r('app.string.reject'), 5299da06d0Sopenharmony_ci 'hangUp': $r('app.string.hangUp'), 5399da06d0Sopenharmony_ci 'mute': $r('app.string.mute'), 5499da06d0Sopenharmony_ci 'callHold': $r('app.string.callHold'), 5599da06d0Sopenharmony_ci }; 5699da06d0Sopenharmony_ci 5799da06d0Sopenharmony_ciexport default class NotificationManager { 5899da06d0Sopenharmony_ci /** 5999da06d0Sopenharmony_ci * Send notification 6099da06d0Sopenharmony_ci * 6199da06d0Sopenharmony_ci * @param { Object } text - text info 6299da06d0Sopenharmony_ci * 6399da06d0Sopenharmony_ci * @param { Object } callData - call data 6499da06d0Sopenharmony_ci * 6599da06d0Sopenharmony_ci * @param { FUnction } $t - i18n format 6699da06d0Sopenharmony_ci */ 6799da06d0Sopenharmony_ci async sendNotification(callData) { 6899da06d0Sopenharmony_ci const {callState, accountNumber, contactName, callId} = callData; 6999da06d0Sopenharmony_ci const actionBtnKeys = this.getMapObj(callState) || []; 7099da06d0Sopenharmony_ci const {START_ABILITY, SEND_COMMON_EVENT} = wantAgent.OperationType; 7199da06d0Sopenharmony_ci const wantAgentObj = await this.getWantAgent(callData, START_ABILITY); 7299da06d0Sopenharmony_ci let titleName = ' '; 7399da06d0Sopenharmony_ci let expandedName = ' '; 7499da06d0Sopenharmony_ci if (contactName) { 7599da06d0Sopenharmony_ci titleName = contactName; 7699da06d0Sopenharmony_ci expandedName = accountNumber; 7799da06d0Sopenharmony_ci } else { 7899da06d0Sopenharmony_ci titleName = accountNumber; 7999da06d0Sopenharmony_ci expandedName = ' '; 8099da06d0Sopenharmony_ci } 8199da06d0Sopenharmony_ci notificationRequest.wantAgent = wantAgentObj; 8299da06d0Sopenharmony_ci notificationRequest.actionButtons = []; 8399da06d0Sopenharmony_ci 8499da06d0Sopenharmony_ci if (actionBtnKeys.length) { 8599da06d0Sopenharmony_ci for (const key of actionBtnKeys) { 8699da06d0Sopenharmony_ci const data = { 8799da06d0Sopenharmony_ci callId, btnType: key 8899da06d0Sopenharmony_ci }; 8999da06d0Sopenharmony_ci LogUtils.i(TAG, 'sendNotification getResourceManager key:' + JSON.stringify(key)); 9099da06d0Sopenharmony_ci const wantAgentObj = await this.getWantAgent(data, SEND_COMMON_EVENT); 9199da06d0Sopenharmony_ci const title = globalThis.calluiAbilityContext?.resourceManager.getStringSync(textMap[key]); 9299da06d0Sopenharmony_ci LogUtils.i(TAG, 'sendNotification getResourceManager textMap[key].id:' + JSON.stringify(title)); 9399da06d0Sopenharmony_ci notificationRequest.actionButtons.push({ 9499da06d0Sopenharmony_ci title: title, 9599da06d0Sopenharmony_ci wantAgent: wantAgentObj 9699da06d0Sopenharmony_ci }); 9799da06d0Sopenharmony_ci LogUtils.i(TAG, 'sendNotification getResourceManager notificationRequest.actionButtons.push:' + JSON.stringify(notificationRequest.actionButtons)); 9899da06d0Sopenharmony_ci } 9999da06d0Sopenharmony_ci } 10099da06d0Sopenharmony_ci Object.assign(notificationRequest.content.longText, { 10199da06d0Sopenharmony_ci title: titleName, 10299da06d0Sopenharmony_ci text: expandedName, 10399da06d0Sopenharmony_ci expandedTitle: titleName, 10499da06d0Sopenharmony_ci longText: expandedName 10599da06d0Sopenharmony_ci }); 10699da06d0Sopenharmony_ci notification.publish(notificationRequest).then((data) => { 10799da06d0Sopenharmony_ci LogUtils.i(TAG, 'sendNotification publish success') 10899da06d0Sopenharmony_ci }).catch((err) => { 10999da06d0Sopenharmony_ci LogUtils.i(TAG, 'sendNotification public err' + JSON.stringify(err)) 11099da06d0Sopenharmony_ci }); 11199da06d0Sopenharmony_ci LogUtils.i(TAG, 'sendNotification end :') 11299da06d0Sopenharmony_ci } 11399da06d0Sopenharmony_ci 11499da06d0Sopenharmony_ci /** 11599da06d0Sopenharmony_ci * Get call status 11699da06d0Sopenharmony_ci * @param callState 11799da06d0Sopenharmony_ci */ 11899da06d0Sopenharmony_ci getMapObj(callState) { 11999da06d0Sopenharmony_ci if (callState === callStateConst.CALL_STATUS_INCOMING) { 12099da06d0Sopenharmony_ci return ['answer', 'reject'] 12199da06d0Sopenharmony_ci } 12299da06d0Sopenharmony_ci if (callState === callStateConst.CALL_STATUS_ACTIVE) { 12399da06d0Sopenharmony_ci return ['hangUp'] 12499da06d0Sopenharmony_ci } 12599da06d0Sopenharmony_ci if (callState === callStateConst.CALL_STATUS_HOLDING) { 12699da06d0Sopenharmony_ci return ['hangUp'] 12799da06d0Sopenharmony_ci } 12899da06d0Sopenharmony_ci if (callState === callStateConst.CALL_STATUS_ALERTING) { 12999da06d0Sopenharmony_ci return ['hangUp'] 13099da06d0Sopenharmony_ci } 13199da06d0Sopenharmony_ci if (callState === callStateConst.CALL_STATUS_DIALING) { 13299da06d0Sopenharmony_ci return ['hangUp'] 13399da06d0Sopenharmony_ci } 13499da06d0Sopenharmony_ci if (callState === callStateConst.CALL_STATUS_WAITING) { 13599da06d0Sopenharmony_ci return ['answer', 'reject'] 13699da06d0Sopenharmony_ci } 13799da06d0Sopenharmony_ci } 13899da06d0Sopenharmony_ci 13999da06d0Sopenharmony_ci /** 14099da06d0Sopenharmony_ci * get want agent 14199da06d0Sopenharmony_ci * 14299da06d0Sopenharmony_ci * @param { object } data - call data 14399da06d0Sopenharmony_ci * 14499da06d0Sopenharmony_ci * @param { number } operationType - type 14599da06d0Sopenharmony_ci */ 14699da06d0Sopenharmony_ci getWantAgent(data, operationTypes) { 14799da06d0Sopenharmony_ci if (!wantAgent) { 14899da06d0Sopenharmony_ci LogUtils.i(TAG, 'wantAgent is not exist'); 14999da06d0Sopenharmony_ci return; 15099da06d0Sopenharmony_ci } 15199da06d0Sopenharmony_ci return wantAgent.getWantAgent({ 15299da06d0Sopenharmony_ci wants: [{ 15399da06d0Sopenharmony_ci deviceId: '', 15499da06d0Sopenharmony_ci bundleName: Constants.CALL_BUNDLE_NAME, 15599da06d0Sopenharmony_ci abilityName: Constants.CALL_ABILITY_NAME, 15699da06d0Sopenharmony_ci uri: '', 15799da06d0Sopenharmony_ci type: 'phone', 15899da06d0Sopenharmony_ci action: 'callui.event.click', 15999da06d0Sopenharmony_ci parameters: data, 16099da06d0Sopenharmony_ci entities: [] 16199da06d0Sopenharmony_ci }], 16299da06d0Sopenharmony_ci requestCode: 0, 16399da06d0Sopenharmony_ci operationType: operationTypes, 16499da06d0Sopenharmony_ci wantAgentFlags: [wantAgent.WantAgentFlags.ONE_TIME_FLAG] 16599da06d0Sopenharmony_ci }); 16699da06d0Sopenharmony_ci } 16799da06d0Sopenharmony_ci 16899da06d0Sopenharmony_ci /** 16999da06d0Sopenharmony_ci * Cancel notice 17099da06d0Sopenharmony_ci */ 17199da06d0Sopenharmony_ci cancelNotification() { 17299da06d0Sopenharmony_ci LogUtils.i(TAG, 'cancelNotification') 17399da06d0Sopenharmony_ci notification.cancel(ID).then((res) => { 17499da06d0Sopenharmony_ci LogUtils.i(TAG, 'notify.cancel res data : %s' + JSON.stringify(res)) 17599da06d0Sopenharmony_ci }).catch((err) => { 17699da06d0Sopenharmony_ci LogUtils.i(TAG, 'notify.cancel err data : %s' + JSON.stringify(err)) 17799da06d0Sopenharmony_ci }); 17899da06d0Sopenharmony_ci } 17999da06d0Sopenharmony_ci 18099da06d0Sopenharmony_ci /** 18199da06d0Sopenharmony_ci * send capsule notification 18299da06d0Sopenharmony_ci * 18399da06d0Sopenharmony_ci * @param {Object} callData - call data 18499da06d0Sopenharmony_ci * 18599da06d0Sopenharmony_ci * @param {boolean} isBackground - is background 18699da06d0Sopenharmony_ci */ 18799da06d0Sopenharmony_ci sendCapsuleNotification(callData, isBackground) { 18899da06d0Sopenharmony_ci LogUtils.i(TAG, 'sendCapsuleNotification isBackground : ' + JSON.stringify(isBackground)) 18999da06d0Sopenharmony_ci LogUtils.i(TAG, 'sendCapsuleNotification callData.startTime :') 19099da06d0Sopenharmony_ci const {callState, startTime} = callData; 19199da06d0Sopenharmony_ci let commonEventPublishData = { 19299da06d0Sopenharmony_ci bundleName: 'com.ohos.systemui', 19399da06d0Sopenharmony_ci isOrdered: false, 19499da06d0Sopenharmony_ci subscriberPermissions: ['ohos.permission.GET_TELEPHONY_STATE'], 19599da06d0Sopenharmony_ci data: JSON.stringify({ 19699da06d0Sopenharmony_ci callState, 19799da06d0Sopenharmony_ci startTime: startTime * 1000, 19899da06d0Sopenharmony_ci isBackground, 19999da06d0Sopenharmony_ci wantBundleName: Constants.CALL_BUNDLE_NAME, 20099da06d0Sopenharmony_ci wantAbilityName: Constants.CALL_ABILITY_NAME 20199da06d0Sopenharmony_ci }) 20299da06d0Sopenharmony_ci } 20399da06d0Sopenharmony_ci 20499da06d0Sopenharmony_ci commonEvent.publish('CAPSULE_EVENT_CALL_UI', commonEventPublishData, (err, data) => { 20599da06d0Sopenharmony_ci if (err) { 20699da06d0Sopenharmony_ci LogUtils.i(TAG, 'sendCapsuleNotification publish launcher err:' + JSON.stringify(err)) 20799da06d0Sopenharmony_ci } else { 20899da06d0Sopenharmony_ci LogUtils.i(TAG, 'sendCapsuleNotification publish launcher success:' + JSON.stringify(data)) 20999da06d0Sopenharmony_ci } 21099da06d0Sopenharmony_ci }) 21199da06d0Sopenharmony_ci } 21299da06d0Sopenharmony_ci}