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: Voice call API interface call 1899da06d0Sopenharmony_ci */ 1999da06d0Sopenharmony_ci 2099da06d0Sopenharmony_ci/** 2199da06d0Sopenharmony_ci * The code here is the voice call interface and the sim card interface, 2299da06d0Sopenharmony_ci * as well as the interface piling test simulation, 2399da06d0Sopenharmony_ci * which is convenient for development, so I will leave it for now. 2499da06d0Sopenharmony_ci */ 2599da06d0Sopenharmony_ci 2699da06d0Sopenharmony_ciimport commonEvent from '@ohos.commonEvent'; 2799da06d0Sopenharmony_ciimport call from '@ohos.telephony.call'; 2899da06d0Sopenharmony_ciimport LogUtils from '../common/utils/LogUtils'; 2999da06d0Sopenharmony_ci 3099da06d0Sopenharmony_ciconst TAG = 'CallServiceProxy'; 3199da06d0Sopenharmony_ciconst prefixLog = 'callUI app:@ohos.telephony.call:'; 3299da06d0Sopenharmony_ci 3399da06d0Sopenharmony_ci/** 3499da06d0Sopenharmony_ci * dial call 3599da06d0Sopenharmony_ci * @param { string } phoneNumber - phone number 3699da06d0Sopenharmony_ci * @param { number } accountId - account id 3799da06d0Sopenharmony_ci * @param { number } videoState - video state 3899da06d0Sopenharmony_ci * @param { number } dialScene - dial scene 3999da06d0Sopenharmony_ci * @return { Object } promise object 4099da06d0Sopenharmony_ci */ 4199da06d0Sopenharmony_ciexport default class CallServiceProxy { 4299da06d0Sopenharmony_ci private static sCallServiceProxy: CallServiceProxy; 4399da06d0Sopenharmony_ci 4499da06d0Sopenharmony_ci public static getInstance(): CallServiceProxy { 4599da06d0Sopenharmony_ci if (!CallServiceProxy.sCallServiceProxy) { 4699da06d0Sopenharmony_ci CallServiceProxy.sCallServiceProxy = new CallServiceProxy(); 4799da06d0Sopenharmony_ci } 4899da06d0Sopenharmony_ci return CallServiceProxy.sCallServiceProxy; 4999da06d0Sopenharmony_ci } 5099da06d0Sopenharmony_ci 5199da06d0Sopenharmony_ci /** 5299da06d0Sopenharmony_ci * Make a phone call 5399da06d0Sopenharmony_ci */ 5499da06d0Sopenharmony_ci public dialCall(phoneNumber, accountId = 0, videoState = 0, dialScene = 0) { 5599da06d0Sopenharmony_ci LogUtils.i(TAG, 'dialCall phoneNumber :'); 5699da06d0Sopenharmony_ci return call.dial(phoneNumber, { 5799da06d0Sopenharmony_ci accountId, 5899da06d0Sopenharmony_ci videoState, 5999da06d0Sopenharmony_ci dialScene 6099da06d0Sopenharmony_ci }); 6199da06d0Sopenharmony_ci } 6299da06d0Sopenharmony_ci 6399da06d0Sopenharmony_ci /** 6499da06d0Sopenharmony_ci * Stops the ringtone. 6599da06d0Sopenharmony_ci */ 6699da06d0Sopenharmony_ci public muteRinger() { 6799da06d0Sopenharmony_ci LogUtils.i(TAG, 'muteRinger') 6899da06d0Sopenharmony_ci call.muteRinger((err) => { 6999da06d0Sopenharmony_ci LogUtils.e(TAG, `muteRinger callback: err->${JSON.stringify(err)}`); 7099da06d0Sopenharmony_ci }); 7199da06d0Sopenharmony_ci } 7299da06d0Sopenharmony_ci 7399da06d0Sopenharmony_ci /** 7499da06d0Sopenharmony_ci * accept call 7599da06d0Sopenharmony_ci * 7699da06d0Sopenharmony_ci * @param { number } callId - call id 7799da06d0Sopenharmony_ci */ 7899da06d0Sopenharmony_ci public acceptCall = function (callId) { 7999da06d0Sopenharmony_ci call.answerCall(callId).then((res) => { 8099da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'call.answerCall : %s' + JSON.stringify(callId)) 8199da06d0Sopenharmony_ci }).catch((err) => { 8299da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'call.answerCall catch : %s' + JSON.stringify(err)) 8399da06d0Sopenharmony_ci }); 8499da06d0Sopenharmony_ci }; 8599da06d0Sopenharmony_ci 8699da06d0Sopenharmony_ci /** 8799da06d0Sopenharmony_ci * reject call 8899da06d0Sopenharmony_ci * 8999da06d0Sopenharmony_ci * @param { number } callId - call id 9099da06d0Sopenharmony_ci * 9199da06d0Sopenharmony_ci * @param { boolean } isSendSms - is send sms 9299da06d0Sopenharmony_ci * 9399da06d0Sopenharmony_ci * @param { string } msg - message string 9499da06d0Sopenharmony_ci */ 9599da06d0Sopenharmony_ci public rejectCall = function (callId, isSendSms = false, msg = '') { 9699da06d0Sopenharmony_ci const rejectCallPromise = isSendSms ? call.rejectCall(callId, { 9799da06d0Sopenharmony_ci messageContent: msg 9899da06d0Sopenharmony_ci }) : call.rejectCall(callId); 9999da06d0Sopenharmony_ci rejectCallPromise.then((res) => { 10099da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'then:rejectCall'); 10199da06d0Sopenharmony_ci }) 10299da06d0Sopenharmony_ci .catch((err) => { 10399da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'catch:rejectCall : %s' + JSON.stringify(err)); 10499da06d0Sopenharmony_ci }); 10599da06d0Sopenharmony_ci }; 10699da06d0Sopenharmony_ci 10799da06d0Sopenharmony_ci /** 10899da06d0Sopenharmony_ci * hang up Call 10999da06d0Sopenharmony_ci * 11099da06d0Sopenharmony_ci * @param { number } callId - call id 11199da06d0Sopenharmony_ci * 11299da06d0Sopenharmony_ci * @return { Object } promise object 11399da06d0Sopenharmony_ci */ 11499da06d0Sopenharmony_ci public hangUpCall = (callId) => new Promise((resolve, reject) => { 11599da06d0Sopenharmony_ci call.hangUpCall(callId).then((res) => { 11699da06d0Sopenharmony_ci resolve(res); 11799da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'then:hangUpCall : %s' + JSON.stringify(callId)) 11899da06d0Sopenharmony_ci }).catch((err) => { 11999da06d0Sopenharmony_ci reject(err); 12099da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'catch:hangUpCall : %s' + JSON.stringify(err)) 12199da06d0Sopenharmony_ci }); 12299da06d0Sopenharmony_ci }); 12399da06d0Sopenharmony_ci 12499da06d0Sopenharmony_ci /** 12599da06d0Sopenharmony_ci * hold call 12699da06d0Sopenharmony_ci * 12799da06d0Sopenharmony_ci * @param { number } callId - call id 12899da06d0Sopenharmony_ci * 12999da06d0Sopenharmony_ci * @return { Object } promise object 13099da06d0Sopenharmony_ci */ 13199da06d0Sopenharmony_ci public holdCall = (callId) => new Promise((resolve, reject) => { 13299da06d0Sopenharmony_ci call.holdCall(callId).then((res) => { 13399da06d0Sopenharmony_ci resolve(res); 13499da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'then:holdCall : %s' + JSON.stringify(callId)); 13599da06d0Sopenharmony_ci }) 13699da06d0Sopenharmony_ci .catch((err) => { 13799da06d0Sopenharmony_ci reject(err); 13899da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'catch:holdCall : %s' + JSON.stringify(err)); 13999da06d0Sopenharmony_ci }); 14099da06d0Sopenharmony_ci }); 14199da06d0Sopenharmony_ci 14299da06d0Sopenharmony_ci /** 14399da06d0Sopenharmony_ci * un hold call 14499da06d0Sopenharmony_ci * 14599da06d0Sopenharmony_ci * @param { number } callId - call id 14699da06d0Sopenharmony_ci * 14799da06d0Sopenharmony_ci * @return { Object } promise object 14899da06d0Sopenharmony_ci */ 14999da06d0Sopenharmony_ci public unHoldCall = (callId) => new Promise((resolve, reject) => { 15099da06d0Sopenharmony_ci call.unHoldCall(callId).then((res) => { 15199da06d0Sopenharmony_ci resolve(res); 15299da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'then:unholdCall : %s' + JSON.stringify(callId)); 15399da06d0Sopenharmony_ci }) 15499da06d0Sopenharmony_ci .catch((err) => { 15599da06d0Sopenharmony_ci reject(err); 15699da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'catch:unHoldCall : %s' + JSON.stringify(err)); 15799da06d0Sopenharmony_ci }); 15899da06d0Sopenharmony_ci }); 15999da06d0Sopenharmony_ci 16099da06d0Sopenharmony_ci /** 16199da06d0Sopenharmony_ci * set call mute 16299da06d0Sopenharmony_ci */ 16399da06d0Sopenharmony_ci public setMuted() { 16499da06d0Sopenharmony_ci call.setMuted().then((res) => { 16599da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'then:setMute'); 16699da06d0Sopenharmony_ci }).catch((err) => { 16799da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'catch:setMute : %s' + JSON.stringify(err)); 16899da06d0Sopenharmony_ci }); 16999da06d0Sopenharmony_ci }; 17099da06d0Sopenharmony_ci 17199da06d0Sopenharmony_ci /** 17299da06d0Sopenharmony_ci * cancel call mute 17399da06d0Sopenharmony_ci */ 17499da06d0Sopenharmony_ci public cancelMuted() { 17599da06d0Sopenharmony_ci call.cancelMuted().then((res) => { 17699da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'then:cancelMuted'); 17799da06d0Sopenharmony_ci }).catch((err) => { 17899da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'catch:cancelMuted : %s' + JSON.stringify(err)) 17999da06d0Sopenharmony_ci }); 18099da06d0Sopenharmony_ci }; 18199da06d0Sopenharmony_ci 18299da06d0Sopenharmony_ci /** 18399da06d0Sopenharmony_ci * switch call 18499da06d0Sopenharmony_ci * 18599da06d0Sopenharmony_ci * @param { number } callId - call id 18699da06d0Sopenharmony_ci * 18799da06d0Sopenharmony_ci * @return { Object } promise object 18899da06d0Sopenharmony_ci */ 18999da06d0Sopenharmony_ci public switchCall = (callId) => new Promise((resolve, reject) => { 19099da06d0Sopenharmony_ci call.switchCall(callId).then((res) => { 19199da06d0Sopenharmony_ci resolve(res); 19299da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'then:switchCall : %s' + JSON.stringify(callId)) 19399da06d0Sopenharmony_ci }) 19499da06d0Sopenharmony_ci .catch((err) => { 19599da06d0Sopenharmony_ci reject(err); 19699da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'catch:switchCall : %s' + JSON.stringify(err)) 19799da06d0Sopenharmony_ci }); 19899da06d0Sopenharmony_ci }); 19999da06d0Sopenharmony_ci 20099da06d0Sopenharmony_ci /** 20199da06d0Sopenharmony_ci * register call state callback 20299da06d0Sopenharmony_ci * 20399da06d0Sopenharmony_ci * @param { Function } callBack - inject an Function 20499da06d0Sopenharmony_ci */ 20599da06d0Sopenharmony_ci public registerCallStateCallback(callBack) { 20699da06d0Sopenharmony_ci call.on('callDetailsChange', (data) => { 20799da06d0Sopenharmony_ci if (!data) { 20899da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'call.on registerCallStateCallback') 20999da06d0Sopenharmony_ci return; 21099da06d0Sopenharmony_ci } 21199da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'call.on registerCallStateCallback callState') 21299da06d0Sopenharmony_ci callBack(data); 21399da06d0Sopenharmony_ci }); 21499da06d0Sopenharmony_ci } 21599da06d0Sopenharmony_ci 21699da06d0Sopenharmony_ci /** 21799da06d0Sopenharmony_ci * onRegister call state callback 21899da06d0Sopenharmony_ci */ 21999da06d0Sopenharmony_ci public unRegisterCallStateCallback() { 22099da06d0Sopenharmony_ci call.off('callDetailsChange', (data) => { 22199da06d0Sopenharmony_ci if (!data) { 22299da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'call.off unRegisterCallStateCallback') 22399da06d0Sopenharmony_ci return; 22499da06d0Sopenharmony_ci } 22599da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'call.off unRegisterCallStateCallback') 22699da06d0Sopenharmony_ci }); 22799da06d0Sopenharmony_ci } 22899da06d0Sopenharmony_ci 22999da06d0Sopenharmony_ci /** 23099da06d0Sopenharmony_ci * register call event callback 23199da06d0Sopenharmony_ci */ 23299da06d0Sopenharmony_ci public registerCallEventCallback() { 23399da06d0Sopenharmony_ci call.on('callEventChange', (data) => { 23499da06d0Sopenharmony_ci if (!data) { 23599da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'call.on callEventChange') 23699da06d0Sopenharmony_ci } else { 23799da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'call.on callEventChange') 23899da06d0Sopenharmony_ci } 23999da06d0Sopenharmony_ci }); 24099da06d0Sopenharmony_ci } 24199da06d0Sopenharmony_ci 24299da06d0Sopenharmony_ci /** 24399da06d0Sopenharmony_ci * unRegister call event callback 24499da06d0Sopenharmony_ci */ 24599da06d0Sopenharmony_ci public unRegisterCallEventCallback() { 24699da06d0Sopenharmony_ci call.off('callEventChange', (data) => { 24799da06d0Sopenharmony_ci if (!data) { 24899da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'call.off unRegisterCallEventCallback : %s') 24999da06d0Sopenharmony_ci } else { 25099da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'call.off unRegisterCallEventCallback : %s') 25199da06d0Sopenharmony_ci } 25299da06d0Sopenharmony_ci }); 25399da06d0Sopenharmony_ci } 25499da06d0Sopenharmony_ci 25599da06d0Sopenharmony_ci /** 25699da06d0Sopenharmony_ci * start DTMF 25799da06d0Sopenharmony_ci * 25899da06d0Sopenharmony_ci * @param { number } callId - call id 25999da06d0Sopenharmony_ci * 26099da06d0Sopenharmony_ci * @param { string } str - str char 26199da06d0Sopenharmony_ci */ 26299da06d0Sopenharmony_ci public startDTMF = (callId = 1, str = '1') => { 26399da06d0Sopenharmony_ci call.startDTMF(callId, str).then((res) => { 26499da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'then:startDtmf : %s' + JSON.stringify(callId) + JSON.stringify(str)) 26599da06d0Sopenharmony_ci }).catch((err) => { 26699da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'catch:startDtmf : %s' + JSON.stringify(err)) 26799da06d0Sopenharmony_ci }); 26899da06d0Sopenharmony_ci }; 26999da06d0Sopenharmony_ci 27099da06d0Sopenharmony_ci /** 27199da06d0Sopenharmony_ci * stop DTMF 27299da06d0Sopenharmony_ci * 27399da06d0Sopenharmony_ci * @param { number } callId - call id 27499da06d0Sopenharmony_ci */ 27599da06d0Sopenharmony_ci public stopDTMF = (callId = 1) => { 27699da06d0Sopenharmony_ci call.stopDTMF(callId).then((res) => { 27799da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'then:stopDtmf : %s' + JSON.stringify(callId)) 27899da06d0Sopenharmony_ci }).catch((err) => { 27999da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'then:startDtmf : %s' + JSON.stringify(err)) 28099da06d0Sopenharmony_ci }); 28199da06d0Sopenharmony_ci }; 28299da06d0Sopenharmony_ci 28399da06d0Sopenharmony_ci /** 28499da06d0Sopenharmony_ci * combine conference 28599da06d0Sopenharmony_ci * 28699da06d0Sopenharmony_ci * @param { number } callId - call id 28799da06d0Sopenharmony_ci */ 28899da06d0Sopenharmony_ci public combineConference = (callId) => { 28999da06d0Sopenharmony_ci call.combineConference(callId).then((res) => { 29099da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'then:combineConference : %s' + JSON.stringify(callId)) 29199da06d0Sopenharmony_ci }).catch((err) => { 29299da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'catch:combineConference : %s' + JSON.stringify(err)) 29399da06d0Sopenharmony_ci }); 29499da06d0Sopenharmony_ci }; 29599da06d0Sopenharmony_ci 29699da06d0Sopenharmony_ci public publish(data) { 29799da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'callui.event.callEvent publish') 29899da06d0Sopenharmony_ci commonEvent.publish('callui.event.callEvent', { 29999da06d0Sopenharmony_ci bundleName: 'com.ohos.callui', 30099da06d0Sopenharmony_ci isOrdered: false, 30199da06d0Sopenharmony_ci subscriberPermissions: ['ohos.permission.GET_TELEPHONY_STATE'], 30299da06d0Sopenharmony_ci data: JSON.stringify(data) 30399da06d0Sopenharmony_ci }, (res) => { 30499da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'callui.event.callEvent success') 30599da06d0Sopenharmony_ci }); 30699da06d0Sopenharmony_ci LogUtils.i(TAG, prefixLog + 'callui.event.callEvent publish end') 30799da06d0Sopenharmony_ci } 30899da06d0Sopenharmony_ci} 30999da06d0Sopenharmony_ci 310