1# Call Manager<a name="EN-US_TOPIC_0000001105058232"></a>
2
3
4## Introduction<a name="section117mcpsimp"></a>
5
6The Call Manager module mainly manages three types of calls: circuit switched \(CS\), IP multimedia subsystem \(IMS\), and over the top \(OTT\) calls. It is responsible for applying for the audio and video resources required for a call and resolving conflicts in a multi-channel call. The module consists of six parts: UI interaction \(CallServiceAbility\), service management \(CallManagerService\), call management \(Call Manager\), audio management \(Audio Manager\), video management \(Video Manager\), and Bluetooth management \(Bluetooth Manager\).
7
81.  CallServiceAbility: Implements interaction with the call UI, for example, launching the keypad UI for dialup and reporting the incoming call status to the UI.
92.  CallManagerService: starts and initializes the Call Manager.
103.  Call Manager: processes downlink call operations \(such as dialup, answer, and onhook\) and uplink call status \(such as incoming call status and call waiting status\), and resolves conflicts that occur in a call.
114.  Audio Manager: applies for audio resources for a call and releases the resources after the call ends. This part depends on the multimedia subsystem and needs to call its APIs to perform audio-related operations.
125.  Video Manager: applies for video resources for a call and releases the resources after the call ends. This part depends on the multimedia subsystem and needs to call its APIs to perform video-related operations.
136.  Bluetooth Manager: applies for Bluetooth resources for a call and releases the resources after the call ends. Besides, this part processes call operations initiated by Bluetooth devices, such as answering and ending calls.
14
15The following figure shows the architecture of the Call Manager module.
16
17**Figure  1**  Architecture of the Call Manager module<a name="fig11440121615591"></a>
18
19
20![](figures/en-us_architecture-of-the-call-manager-module.png)
21
22## Directory Structure<a name="section128mcpsimp"></a>
23
24```
25/base/telephony/call_manager
26├─ figures                                 # Figures of readme files
27├─ frameworks                              # Frameworks
28│  ├─ js                                   # JS code
29│  └─ native                               # Native code
30├─ interfaces                              # APIs
31│  ├─ innerkits                            # Internal APIs
32│  └─ kits                                 # External APIs (such as JS APIs)
33├─ sa_profile                              # SA profile
34├─ services                                # Service code
35│  ├─ audio                                # Audio management
36│  ├─ bluetooth                            # Bluetooth call management
37│  ├─ call                                 # Call service
38│  ├─ call_manager_service                 # Call Manager service
39│  ├─ call_report                          # Call status reporting
40│  ├─ call_setting                         # Call setting
41│  ├─ telephony_interaction                # Telephony core service interaction
42│  └─ video                                # Video Manager code
43├─ test                                    # Test code
44│  ├─ fuzztest                             # Fuzzy test
45│  ├─ mock                                 # Simulation test
46│  └─ unittest                             # Unit test
47└─ utils                                   # Utilities
48```
49
50## Constraints<a name="section131mcpsimp"></a>
51
52-   Programming language: JavaScript
53-   In terms of software, this module needs to work with the Security subsystem, Multimedia subsystem, and Intelligent Soft Bus subsystem \(Bluetooth module\), as well as the telephony core service \(core\_service\) and cellular call module \(cellular\_call\).
54-   In terms of hardware, the accommodating device must be equipped with a speaker or earphone, and a headset.
55
56## Available APIs<a name="section136mcpsimp"></a>
57
58**Table  1**  External API provided by the Call Manager module
59
60<a name="table137mcpsimp"></a>
61<table><thead align="left"><tr id="row143mcpsimp"><th class="cellrowborder" valign="top" width="33.33333333333333%" id="mcps1.2.4.1.1"><p id="entry144mcpsimpp0"><a name="entry144mcpsimpp0"></a><a name="entry144mcpsimpp0"></a>Description</p>
62</th>
63<th class="cellrowborder" valign="top" width="33.33333333333333%" id="mcps1.2.4.1.2"><p id="entry145mcpsimpp0"><a name="entry145mcpsimpp0"></a><a name="entry145mcpsimpp0"></a>Description</p>
64</th>
65<th class="cellrowborder" valign="top" width="33.33333333333333%" id="mcps1.2.4.1.3"><p id="entry146mcpsimpp0"><a name="entry146mcpsimpp0"></a><a name="entry146mcpsimpp0"></a>Required Permission</p>
66</th>
67</tr>
68</thead>
69<tbody><tr id="row147mcpsimp"><td class="cellrowborder" valign="top" width="33.33333333333333%" headers="mcps1.2.4.1.1 "><p id="p143312519577"><a name="p143312519577"></a><a name="p143312519577"></a>function dial(phoneNumber: string, options: DialOptions, callback: AsyncCallback&lt;boolean&gt;): void;</p>
70</td>
71<td class="cellrowborder" valign="top" width="33.33333333333333%" headers="mcps1.2.4.1.2 "><p id="entry149mcpsimpp0"><a name="entry149mcpsimpp0"></a><a name="entry149mcpsimpp0"></a>Performs dialup operations.</p>
72</td>
73<td class="cellrowborder" valign="top" width="33.33333333333333%" headers="mcps1.2.4.1.3 "><p id="entry150mcpsimpp0"><a name="entry150mcpsimpp0"></a><a name="entry150mcpsimpp0"></a>ohos.permission.PLACE_CALL</p>
74</td>
75</tr>
76</tbody>
77<tbody><tr id="row147mcpsimp"><td class="cellrowborder" valign="top" width="33.33333333333333%" headers="mcps1.2.4.1.1 "><p id="p143312519577"><a name="p143312519577"></a><a name="p143312519577"></a>function isImsSwitchEnabledSync(slotId: number):boolean;</p>
78</td>
79<td class="cellrowborder" valign="top" width="33.33333333333333%" headers="mcps1.2.4.1.2 "><p id="entry149mcpsimpp0"><a name="entry149mcpsimpp0"></a><a name="entry149mcpsimpp0"></a>Checks if VoLTE HD calling is enabled(The parameter slotId represents the SIM card ID, where 0 indicates Card 1 and 1 indicates Card 2).</p>
80</td>
81<td class="cellrowborder" valign="top" width="33.33333333333333%" headers="mcps1.2.4.1.3 "><p id="entry150mcpsimpp0"><a name="entry150mcpsimpp0"></a><a name="entry150mcpsimpp0"></a>ohos.permission.PLACE_CALL</p>
82</td>
83</tr>
84</tbody>
85</table>
86
87
88
89**Table  2**  Parameters of the Dial API
90
91<a name="table18488202215170"></a>
92<table><thead align="left"><tr id="row748952217179"><th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.1"><p id="p1948942271710"><a name="p1948942271710"></a><a name="p1948942271710"></a>Parameter</p>
93</th>
94<th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.2"><p id="p1648972215173"><a name="p1648972215173"></a><a name="p1648972215173"></a>Description</p>
95</th>
96</tr>
97</thead>
98<tbody><tr id="row749092213171"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p14901222191720"><a name="p14901222191720"></a><a name="p14901222191720"></a>phoneNumber: string</p>
99</td>
100<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p34906228170"><a name="p34906228170"></a><a name="p34906228170"></a>Phone number</p>
101</td>
102</tr>
103<tr id="row549011221176"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p44902223175"><a name="p44902223175"></a><a name="p44902223175"></a>options: DialOptions</p>
104</td>
105<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p11490162241718"><a name="p11490162241718"></a><a name="p11490162241718"></a>Dialup options (For details, see the following table.)</p>
106</td>
107</tr>
108<tr id="row149072216176"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p5490152211715"><a name="p5490152211715"></a><a name="p5490152211715"></a>callback: AsyncCallback&lt;boolean&gt;</p>
109</td>
110<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p649002291718"><a name="p649002291718"></a><a name="p649002291718"></a>Asynchronous execution result. Value <strong id="b1400386820"><a name="b1400386820"></a><a name="b1400386820"></a>true</strong> indicates that the dialup is successful, and value <strong id="b022154719814"><a name="b022154719814"></a><a name="b022154719814"></a>false</strong> indicates that the dialup has failed.</p>
111</td>
112</tr>
113</tbody>
114</table>
115
116**Table  3**  Parameter description of options: DialOptions
117
118<a name="table1322739190"></a>
119<table><thead align="left"><tr id="row193221031194"><th class="cellrowborder" valign="top" width="20%" id="mcps1.2.6.1.1"><p id="p203224311917"><a name="p203224311917"></a><a name="p203224311917"></a>Parameter</p>
120</th>
121<th class="cellrowborder" valign="top" width="20%" id="mcps1.2.6.1.2"><p id="p1639614810198"><a name="p1639614810198"></a><a name="p1639614810198"></a>Type</p>
122</th>
123<th class="cellrowborder" valign="top" width="20%" id="mcps1.2.6.1.3"><p id="p113221730191"><a name="p113221730191"></a><a name="p113221730191"></a>Description</p>
124</th>
125<th class="cellrowborder" valign="top" width="20%" id="mcps1.2.6.1.4"><p id="p153221330197"><a name="p153221330197"></a><a name="p153221330197"></a>Mandatory</p>
126</th>
127<th class="cellrowborder" valign="top" width="20%" id="mcps1.2.6.1.5"><p id="p632220310199"><a name="p632220310199"></a><a name="p632220310199"></a>Default Value</p>
128</th>
129</tr>
130</thead>
131<tbody><tr id="row123238311920"><td class="cellrowborder" valign="top" width="20%" headers="mcps1.2.6.1.1 "><p id="p932310311197"><a name="p932310311197"></a><a name="p932310311197"></a>extras</p>
132</td>
133<td class="cellrowborder" valign="top" width="20%" headers="mcps1.2.6.1.2 "><p id="p73966801911"><a name="p73966801911"></a><a name="p73966801911"></a>boolean</p>
134</td>
135<td class="cellrowborder" valign="top" width="20%" headers="mcps1.2.6.1.3 "><p id="p19821612162118"><a name="p19821612162118"></a><a name="p19821612162118"></a><strong id="b345117841310"><a name="b345117841310"></a><a name="b345117841310"></a>false</strong>: audio; <strong id="b1701410181319"><a name="b1701410181319"></a><a name="b1701410181319"></a>true</strong>: video</p>
136</td>
137<td class="cellrowborder" valign="top" width="20%" headers="mcps1.2.6.1.4 "><p id="p33231931191"><a name="p33231931191"></a><a name="p33231931191"></a>No</p>
138</td>
139<td class="cellrowborder" valign="top" width="20%" headers="mcps1.2.6.1.5 "><p id="p12323232197"><a name="p12323232197"></a><a name="p12323232197"></a>false</p>
140</td>
141</tr>
142</tbody>
143</table>
144
145## Usage Guidelines<a name="section163mcpsimp"></a>
146
147### Calling the dial API to Place a Call<a name="section113291522113518"></a>
148
1491.  Construct the  **phoneNumber**  and  **options**  parameters.
1502.  Call the  **Dial**  API in callback or Promise mode.
1513.  Obtain the dialup result. The  **Dial**  API works in asynchronous mode. The dialup result is returned through the callback.
152
153    ```
154    import call from "@ohos.telephony.call";
155
156    let phoneNumber = "12312312312";
157
158    // Call the API in callback mode.
159    call.dial(phoneNumber, {extras: false}, (err, value) => {
160      if (err) {
161        // If the API call failed, err is not empty.
162        console.error(`failed to dial because ${err.message}`);
163        return;
164      }
165      // If the API call succeeded, err is empty.
166      console.log(`success to dial: ${value}`);
167    });
168
169    // Call the API in Promise mode.
170    let promise = call.dial(phoneNumber, {extras: false});
171    promise.then((value) => {
172      // The API call succeeded.
173      console.log(`success to dial: ${value}`);
174    }).catch((err) => {
175      // The API call failed.
176      console.error(`failed to dial because ${err.message}`);
177    });
178    ```
179
180### Check if VoLTE HD calling is enabled<a name="section113291522113520"></a>
181
1821. You can check if VoLTE HD calling service is enabled by invoking isImsSwitchEnabledSync.
183
1842. This interface is a synchronous interface, and theThis interface is a synchronous interface, and the returned from isImsSwitch and the relevant execution results will be returned from isImsSwitchEnabledSync.
185
186   ```
187   import call from "@ohos.telephony.call";
188
189   try {
190   	// Call the interface [Sync method]
191   	let isEnabled: boolean = data.isImsSwitchEnabledSync(0);
192   	// Call the interface successfully
193       console.log(`isImsSwitchEnabledSync success : ${isEnabled}`);
194   } catch (error) {
195   	// Call the interface failed
196       console.log(`isImsSwitchEnabledSync failed`);
197   }
198   ```
199
200## Repositories Involved<a name="section227mcpsimp"></a>
201
202[Telephony](https://gitee.com/openharmony/docs/blob/master/en/readme/telephony.md)
203
204**telephony_call_manager**
205
206[telephony_core_service](https://gitee.com/openharmony/telephony_core_service/blob/master/README.md)
207
208[telephony_cellular_call](https://gitee.com/openharmony/telephony_cellular_call/blob/master/README.md)
209
210[telephony_state_registry](https://gitee.com/openharmony/telephony_state_registry/blob/master/README.md)
211