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