199da06d0Sopenharmony_ci/** 299da06d0Sopenharmony_ci * Copyright (c) 2023 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_ciimport FuncBtn from './FuncBtn'; 1799da06d0Sopenharmony_ciimport InComDialog from './InComDialog'; 1899da06d0Sopenharmony_ciimport ImagePathConst from '../constant/ImagePathConst'; 1999da06d0Sopenharmony_ciimport CallStateConst from '../constant/CallStateConst'; 2099da06d0Sopenharmony_ciimport CallServiceProxy from '../../model/CallServiceProxy'; 2199da06d0Sopenharmony_ciimport sms from '@ohos.telephony.sms'; 2299da06d0Sopenharmony_ciimport resourceManager from '@ohos.resourceManager'; 2399da06d0Sopenharmony_ciimport prompt from '@system.prompt'; 2499da06d0Sopenharmony_ciimport LogUtils from '../utils/LogUtils'; 2599da06d0Sopenharmony_ciimport DefaultCallData from '../struct/TypeUtils'; 2699da06d0Sopenharmony_ciimport CallListStruct from '../struct/CallListStruct' 2799da06d0Sopenharmony_ciimport VibrationAndProximityUtils from '../utils/VibrationAndProximityUtils'; 2899da06d0Sopenharmony_ci 2999da06d0Sopenharmony_ciconst TAG = 'IncomingCom'; 3099da06d0Sopenharmony_ciconst SMS_REJECTION = `${ImagePathConst.BASE_URL}ic_public_message.svg`; 3199da06d0Sopenharmony_ci 3299da06d0Sopenharmony_ci/** 3399da06d0Sopenharmony_ci * SMS sent successfully 3499da06d0Sopenharmony_ci */ 3599da06d0Sopenharmony_ciconst SEND_SMS_SUCCESS = 0; 3699da06d0Sopenharmony_ci 3799da06d0Sopenharmony_ci/** 3899da06d0Sopenharmony_ci * Failed to send SMS for unknown reason 3999da06d0Sopenharmony_ci */ 4099da06d0Sopenharmony_ciconst SEND_SMS_FAILURE_UNKNOWN = 1; 4199da06d0Sopenharmony_ci 4299da06d0Sopenharmony_ci/** 4399da06d0Sopenharmony_ci * The wireless module for sending text messages is turned off 4499da06d0Sopenharmony_ci */ 4599da06d0Sopenharmony_ciconst SEND_SMS_FAILURE_RADIO_OFF = 2; 4699da06d0Sopenharmony_ci 4799da06d0Sopenharmony_ci/** 4899da06d0Sopenharmony_ci * The network sending the text message is unavailable 4999da06d0Sopenharmony_ci */ 5099da06d0Sopenharmony_ciconst SEND_SMS_FAILURE_SERVICE_UNAVAILABLE = 3; 5199da06d0Sopenharmony_ci 5299da06d0Sopenharmony_ci@Component 5399da06d0Sopenharmony_ciexport default struct IncomingCom { 5499da06d0Sopenharmony_ci @Link callList: Array<CallListStruct>; 5599da06d0Sopenharmony_ci @Link callData: DefaultCallData; 5699da06d0Sopenharmony_ci @Link hangup: boolean; 5799da06d0Sopenharmony_ci private btnList = []; 5899da06d0Sopenharmony_ci private msgList = []; 5999da06d0Sopenharmony_ci mCallServiceProxy: CallServiceProxy = null; 6099da06d0Sopenharmony_ci msgDialogController: CustomDialogController = new CustomDialogController ({ 6199da06d0Sopenharmony_ci builder: InComDialog({ 6299da06d0Sopenharmony_ci cancel: () => {}, 6399da06d0Sopenharmony_ci confirm: (item) => { 6499da06d0Sopenharmony_ci this.msgItemClick(item); 6599da06d0Sopenharmony_ci }, 6699da06d0Sopenharmony_ci cancelHandle: () => {}, 6799da06d0Sopenharmony_ci // @ts-ignore 6899da06d0Sopenharmony_ci list: this.msgList 6999da06d0Sopenharmony_ci }), 7099da06d0Sopenharmony_ci cancel: () => {}, 7199da06d0Sopenharmony_ci customStyle: true 7299da06d0Sopenharmony_ci }); 7399da06d0Sopenharmony_ci 7499da06d0Sopenharmony_ci aboutToAppear() { 7599da06d0Sopenharmony_ci this.mCallServiceProxy = CallServiceProxy.getInstance(); 7699da06d0Sopenharmony_ci this.getMsgList(); 7799da06d0Sopenharmony_ci this.getBtnList(); 7899da06d0Sopenharmony_ci } 7999da06d0Sopenharmony_ci 8099da06d0Sopenharmony_ci aboutToDisappear() { 8199da06d0Sopenharmony_ci this.msgDialogController = null; 8299da06d0Sopenharmony_ci } 8399da06d0Sopenharmony_ci 8499da06d0Sopenharmony_ci /** 8599da06d0Sopenharmony_ci * send Message slotId : card slot, destinationHost : accountNumber ,content: content 8699da06d0Sopenharmony_ci * 8799da06d0Sopenharmony_ci * @param obj 8899da06d0Sopenharmony_ci */ 8999da06d0Sopenharmony_ci private sendMessage(obj) { 9099da06d0Sopenharmony_ci let slotId = this.callData.accountId; 9199da06d0Sopenharmony_ci let destinationHost = this.callData.accountNumber 9299da06d0Sopenharmony_ci let contactName = this.callData.contactName 9399da06d0Sopenharmony_ci globalThis.calluiAbilityContext?.resourceManager.getString(obj.msg.id, (err, typeName) => { 9499da06d0Sopenharmony_ci LogUtils.i(TAG, 'sendMessage'); 9599da06d0Sopenharmony_ci sms.sendMessage({ 9699da06d0Sopenharmony_ci slotId: slotId, 9799da06d0Sopenharmony_ci destinationHost: destinationHost, 9899da06d0Sopenharmony_ci content: typeName, 9999da06d0Sopenharmony_ci sendCallback: (err, sendResult) => { 10099da06d0Sopenharmony_ci if (err) { 10199da06d0Sopenharmony_ci return; 10299da06d0Sopenharmony_ci } 10399da06d0Sopenharmony_ci if (sendResult.result === SEND_SMS_SUCCESS) { 10499da06d0Sopenharmony_ci globalThis.calluiAbilityContext?.resourceManager.getString($r('app.string.SMS_Sent') 10599da06d0Sopenharmony_ci .id, (err, typeName) => { 10699da06d0Sopenharmony_ci if (err) { 10799da06d0Sopenharmony_ci return; 10899da06d0Sopenharmony_ci } 10999da06d0Sopenharmony_ci prompt.showToast({ 11099da06d0Sopenharmony_ci message: contactName ? typeName + `${contactName}` : typeName + `${destinationHost}`, 11199da06d0Sopenharmony_ci duration: 2000, 11299da06d0Sopenharmony_ci }); 11399da06d0Sopenharmony_ci }) 11499da06d0Sopenharmony_ci } else { 11599da06d0Sopenharmony_ci globalThis.calluiAbilityContext?.resourceManager.getString($r('app.string.message_Failed') 11699da06d0Sopenharmony_ci .id, (err, typeName) => { 11799da06d0Sopenharmony_ci if (err) { 11899da06d0Sopenharmony_ci return; 11999da06d0Sopenharmony_ci } 12099da06d0Sopenharmony_ci prompt.showToast({ 12199da06d0Sopenharmony_ci message: typeName, 12299da06d0Sopenharmony_ci duration: 2000, 12399da06d0Sopenharmony_ci }); 12499da06d0Sopenharmony_ci }) 12599da06d0Sopenharmony_ci } 12699da06d0Sopenharmony_ci } 12799da06d0Sopenharmony_ci }); 12899da06d0Sopenharmony_ci }) 12999da06d0Sopenharmony_ci } 13099da06d0Sopenharmony_ci 13199da06d0Sopenharmony_ci private getMsgList() { 13299da06d0Sopenharmony_ci this.msgList = [ 13399da06d0Sopenharmony_ci { 13499da06d0Sopenharmony_ci id: 1, 13599da06d0Sopenharmony_ci msg: $r('app.string.backLater') 13699da06d0Sopenharmony_ci }, 13799da06d0Sopenharmony_ci { 13899da06d0Sopenharmony_ci id: 2, 13999da06d0Sopenharmony_ci msg: $r('app.string.answerThePhone') 14099da06d0Sopenharmony_ci }, 14199da06d0Sopenharmony_ci { 14299da06d0Sopenharmony_ci id: 3, 14399da06d0Sopenharmony_ci msg: $r('app.string.contactMeLater') 14499da06d0Sopenharmony_ci }, 14599da06d0Sopenharmony_ci { 14699da06d0Sopenharmony_ci id: 4, 14799da06d0Sopenharmony_ci msg: $r('app.string.beThereSoon') 14899da06d0Sopenharmony_ci }, 14999da06d0Sopenharmony_ci ]; 15099da06d0Sopenharmony_ci } 15199da06d0Sopenharmony_ci 15299da06d0Sopenharmony_ci private getBtnList() { 15399da06d0Sopenharmony_ci this.btnList = [ 15499da06d0Sopenharmony_ci { 15599da06d0Sopenharmony_ci type: 'msg', 15699da06d0Sopenharmony_ci iconText: $r('app.string.sms'), 15799da06d0Sopenharmony_ci iconDefaultUrl: SMS_REJECTION, 15899da06d0Sopenharmony_ci iconDisableUrl: SMS_REJECTION, 15999da06d0Sopenharmony_ci isDisable: false 16099da06d0Sopenharmony_ci }, 16199da06d0Sopenharmony_ci ]; 16299da06d0Sopenharmony_ci } 16399da06d0Sopenharmony_ci 16499da06d0Sopenharmony_ci /** 16599da06d0Sopenharmony_ci * Call rejection interface 16699da06d0Sopenharmony_ci * 16799da06d0Sopenharmony_ci * @param {string} msg - Send SMS content 16899da06d0Sopenharmony_ci */ 16999da06d0Sopenharmony_ci private msgItemClick(obj) { 17099da06d0Sopenharmony_ci LogUtils.i(TAG, 'msgItemClick rejectCall'); 17199da06d0Sopenharmony_ci this.mCallServiceProxy.rejectCall(this.callData.callId, obj.msg); 17299da06d0Sopenharmony_ci this.sendMessage(obj); 17399da06d0Sopenharmony_ci } 17499da06d0Sopenharmony_ci 17599da06d0Sopenharmony_ci /** 17699da06d0Sopenharmony_ci * Handling interface call hangup and rejection 17799da06d0Sopenharmony_ci */ 17899da06d0Sopenharmony_ci private async onReject() { 17999da06d0Sopenharmony_ci if (this.callList.length > 1) { 18099da06d0Sopenharmony_ci const incomingData = this.callList.find((v) => v.callState === CallStateConst.callStateObj.CALL_STATUS_WAITING || 18199da06d0Sopenharmony_ci v.callState === CallStateConst.callStateObj.CALL_STATUS_INCOMING); 18299da06d0Sopenharmony_ci Object.assign(this.callData, { 18399da06d0Sopenharmony_ci ...incomingData 18499da06d0Sopenharmony_ci }); 18599da06d0Sopenharmony_ci } 18699da06d0Sopenharmony_ci const {callId, callState} = this.callData; 18799da06d0Sopenharmony_ci if (callState !== CallStateConst.CALL_STATUS_WAITING) { 18899da06d0Sopenharmony_ci this.mCallServiceProxy.rejectCall(callId); 18999da06d0Sopenharmony_ci LogUtils.i(TAG, 'onReject this.mCallServiceProxy.rejectCall :'); 19099da06d0Sopenharmony_ci } else { 19199da06d0Sopenharmony_ci this.mCallServiceProxy.hangUpCall(callId); 19299da06d0Sopenharmony_ci LogUtils.i(TAG, 'onReject this.mCallServiceProxy.hangUpCall :'); 19399da06d0Sopenharmony_ci } 19499da06d0Sopenharmony_ci if (this.callList.length === 1) { 19599da06d0Sopenharmony_ci this.hangup = true; 19699da06d0Sopenharmony_ci globalThis.calluiAbilityContext?.terminateSelf().then((data) => { 19799da06d0Sopenharmony_ci LogUtils.i(TAG, 'onReject terminateSelfCallBack'); 19899da06d0Sopenharmony_ci }); 19999da06d0Sopenharmony_ci } 20099da06d0Sopenharmony_ci } 20199da06d0Sopenharmony_ci 20299da06d0Sopenharmony_ci /** 20399da06d0Sopenharmony_ci * Enable the SMS reply pop-up 20499da06d0Sopenharmony_ci */ 20599da06d0Sopenharmony_ci private btnClick(type) { 20699da06d0Sopenharmony_ci LogUtils.i(TAG, 'btnClick : %s' + JSON.stringify(type)); 20799da06d0Sopenharmony_ci if (type === 'msg') { 20899da06d0Sopenharmony_ci this.msgDialogController.open(); 20999da06d0Sopenharmony_ci } 21099da06d0Sopenharmony_ci } 21199da06d0Sopenharmony_ci 21299da06d0Sopenharmony_ci /** 21399da06d0Sopenharmony_ci * Answer the phone interface 21499da06d0Sopenharmony_ci */ 21599da06d0Sopenharmony_ci private onAnswer() { 21699da06d0Sopenharmony_ci LogUtils.i(TAG, 'onAnswer :'); 21799da06d0Sopenharmony_ci const incomingData = this.callList.find((v) => v.callState === CallStateConst.callStateObj.CALL_STATUS_WAITING || 21899da06d0Sopenharmony_ci v.callState === CallStateConst.callStateObj.CALL_STATUS_INCOMING); 21999da06d0Sopenharmony_ci if (incomingData !== undefined) { 22099da06d0Sopenharmony_ci this.mCallServiceProxy.acceptCall(incomingData.callId); 22199da06d0Sopenharmony_ci } else { 22299da06d0Sopenharmony_ci this.mCallServiceProxy.acceptCall(this.callData.callId); 22399da06d0Sopenharmony_ci } 22499da06d0Sopenharmony_ci VibrationAndProximityUtils.suspendScreen(); 22599da06d0Sopenharmony_ci VibrationAndProximityUtils.stopVibration(); 22699da06d0Sopenharmony_ci } 22799da06d0Sopenharmony_ci 22899da06d0Sopenharmony_ci build() { 22999da06d0Sopenharmony_ci GridRow({ columns: { sm: 4, md: 8, lg: 12 }, gutter: 24 }) { 23099da06d0Sopenharmony_ci GridCol({ span: { sm: 4, md: 6, lg: 6 }, offset: { sm: 0, md: 1, lg: 3 } }) { 23199da06d0Sopenharmony_ci Column() { 23299da06d0Sopenharmony_ci Row() { 23399da06d0Sopenharmony_ci ForEach(this.btnList, (item) => { 23499da06d0Sopenharmony_ci Column() { 23599da06d0Sopenharmony_ci FuncBtn({ 23699da06d0Sopenharmony_ci btnType: item.type, 23799da06d0Sopenharmony_ci iconDisableUrl: item.iconDefaultUrl, 23899da06d0Sopenharmony_ci iconDefaultUrl: item.iconDefaultUrl, 23999da06d0Sopenharmony_ci iconText: item.iconText, 24099da06d0Sopenharmony_ci isDisable: item.isDisable, 24199da06d0Sopenharmony_ci btnClick: (type) => { 24299da06d0Sopenharmony_ci this.btnClick(type) 24399da06d0Sopenharmony_ci } 24499da06d0Sopenharmony_ci }) 24599da06d0Sopenharmony_ci } 24699da06d0Sopenharmony_ci }) 24799da06d0Sopenharmony_ci } 24899da06d0Sopenharmony_ci .height(51) 24999da06d0Sopenharmony_ci 25099da06d0Sopenharmony_ci Row() { 25199da06d0Sopenharmony_ci Column() { 25299da06d0Sopenharmony_ci Image($r('app.media.ic_public_ring_off')) 25399da06d0Sopenharmony_ci .width(56) 25499da06d0Sopenharmony_ci .height(56) 25599da06d0Sopenharmony_ci .onClick(() => { 25699da06d0Sopenharmony_ci this.onReject() 25799da06d0Sopenharmony_ci }) 25899da06d0Sopenharmony_ci }.layoutWeight(1) 25999da06d0Sopenharmony_ci 26099da06d0Sopenharmony_ci Column() { 26199da06d0Sopenharmony_ci Image($r('app.media.ic_public_answer')) 26299da06d0Sopenharmony_ci .width(56) 26399da06d0Sopenharmony_ci .height(56) 26499da06d0Sopenharmony_ci .onClick(() => { 26599da06d0Sopenharmony_ci this.onAnswer() 26699da06d0Sopenharmony_ci }) 26799da06d0Sopenharmony_ci }.layoutWeight(1) 26899da06d0Sopenharmony_ci } 26999da06d0Sopenharmony_ci .margin({ top: 32 }) 27099da06d0Sopenharmony_ci } 27199da06d0Sopenharmony_ci } 27299da06d0Sopenharmony_ci } 27399da06d0Sopenharmony_ci .width('100%') 27499da06d0Sopenharmony_ci .margin({ left: 24, right: 24 }) 27599da06d0Sopenharmony_ci } 27699da06d0Sopenharmony_ci} 277