2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 using Tizen.Internals.Errors;
20 namespace Tizen.CallManager
24 None = ErrorCode.None,
25 OutOfMemory = ErrorCode.OutOfMemory,
26 InvalidParameter = ErrorCode.InvalidParameter,
27 PermissionDenied = ErrorCode.PermissionDenied,
28 NotSupported = ErrorCode.NotSupported,
29 NotRegistered = -0x00000000 | 0x01,
30 AlreadyRegistered = -0x00000000 | 0x02,
31 OperationFailed = -0x00000000 | 0x03,
32 InvalidState = -0x00000000 | 0x04
35 internal static class CmUtility
37 internal const string LogTag = "Tizen.CallManager";
39 internal static CallData GetCallData(IntPtr handle)
41 CallData data = new CallData();
42 int ret = Interop.CallManager.GetCallId(handle, out uint id);
43 if (ret != (int)CmError.None)
45 Log.Error(CmUtility.LogTag, "Failed to get call ID from call data, Error: " + (CmError)ret);
53 ret = Interop.CallManager.GetCallDirection(handle, out CallDirection direction);
54 if (ret != (int)CmError.None)
56 Log.Error(CmUtility.LogTag, "Failed to get call direction from call data, Error: " + (CmError)ret);
61 data.CallDirection = direction;
64 ret = Interop.CallManager.GetCallNumber(handle, out string number);
65 if (ret != (int)CmError.None)
67 Log.Error(CmUtility.LogTag, "Failed to get call number from call data, Error: " + (CmError)ret);
75 ret = Interop.CallManager.GetCallingName(handle, out string name);
76 if (ret != (int)CmError.None)
78 Log.Error(CmUtility.LogTag, "Failed to get calling name from call data, Error: " + (CmError)ret);
86 ret = Interop.CallManager.GetCallType(handle, out CallType type);
87 if (ret != (int)CmError.None)
89 Log.Error(CmUtility.LogTag, "Failed to get call type from call data, Error: " + (CmError)ret);
97 ret = Interop.CallManager.GetCallState(handle, out CallState state);
98 if (ret != (int)CmError.None)
100 Log.Error(CmUtility.LogTag, "Failed to get call state from call data, Error: " + (CmError)ret);
105 data.CallState = state;
108 ret = Interop.CallManager.GetCallMemberCount(handle, out int count);
109 if (ret != (int)CmError.None)
111 Log.Error(CmUtility.LogTag, "Failed to get call member count from call data, Error: " + (CmError)ret);
119 ret = Interop.CallManager.IsEmergencyCall(handle, out bool isEmergency);
120 if (ret != (int)CmError.None)
122 Log.Error(CmUtility.LogTag, "Failed to check if the call is emergency from call data, Error: " + (CmError)ret);
127 data.IsEcc = isEmergency;
130 ret = Interop.CallManager.IsVoiceMailNumber(handle, out bool isVoiceMail);
131 if (ret != (int)CmError.None)
133 Log.Error(CmUtility.LogTag, "Failed to check if the number is voicemail number from call data, Error: " + (CmError)ret);
138 data.IsVoiceMail = isVoiceMail;
141 ret = Interop.CallManager.GetCallDomain(handle, out CallDomain domain);
142 if (ret != (int)CmError.None)
144 Log.Error(CmUtility.LogTag, "Failed to get call domain from call data, Error: " + (CmError)ret);
149 data.CallDomain = domain;
152 ret = Interop.CallManager.GetPersonId(handle, out int personId);
153 if (ret != (int)CmError.None)
155 Log.Error(CmUtility.LogTag, "Failed to get person ID from call data, Error: " + (CmError)ret);
160 data.PersonIndex = personId;
163 ret = Interop.CallManager.GetStartTime(handle, out long startTime);
164 if (ret != (int)CmError.None)
166 Log.Error(CmUtility.LogTag, "Failed to get start time from call data, Error: " + (CmError)ret);
171 data.CallStartTime = startTime;
174 ret = Interop.CallManager.GetNameMode(handle, out CallNameMode nameMode);
175 if (ret != (int)CmError.None)
177 Log.Error(CmUtility.LogTag, "Failed to get name mode from call data, Error: " + (CmError)ret);
182 data.CallNameMode = nameMode;
185 ret = Interop.CallManager.GetSessionId(handle, out int sessionId);
186 if (ret != (int)CmError.None)
188 Log.Error(CmUtility.LogTag, "Failed to get session ID from call data, Error: " + (CmError)ret);
193 data.SessionIdIms = sessionId;
196 ret = Interop.CallManager.GetHdIconState(handle, out int isHdEnable);
197 if (ret != (int)CmError.None)
199 Log.Error(CmUtility.LogTag, "Failed to get HD icon state from call data, Error: " + (CmError)ret);
204 data.IsHdEnableIms = (isHdEnable == 1) ? true : false;
207 ret = Interop.CallManager.IsWiFiCalling(handle, out int isWiFiCalling);
208 if (ret != (int)CmError.None)
210 Log.Error(CmUtility.LogTag, "Failed to identify WiFi calling from call data, Error: " + (CmError)ret);
215 data.IsWiFiCall = (isWiFiCalling == 1) ? true : false;
218 ret = Interop.CallManager.GetUpgradeDowngradeState(handle, out int isEnable);
219 if (ret != (int)CmError.None)
221 Log.Error(CmUtility.LogTag, "Failed to get updagrade downgrade state from call data, Error: " + (CmError)ret);
226 data.IsUpgradeDowngrade = (isEnable == 1) ? true : false;
229 ret = Interop.CallManager.IsRemoteOnHold(handle, out int isHold);
230 if (ret != (int)CmError.None)
232 Log.Error(CmUtility.LogTag, "Failed to get remote on hold state from call data, Error: " + (CmError)ret);
237 data.IsRemoteHold = (isHold == 1) ? true : false;
240 ret = Interop.CallManager.IsAddedToConference(handle, out int isAdded);
241 if (ret != (int)CmError.None)
243 Log.Error(CmUtility.LogTag, "Failed to check if the call is in conf state from call data, Error: " + (CmError)ret);
248 data.IsAddedToConf = (isAdded == 1) ? true : false;
251 ret = Interop.CallManager.IsForwardedCall(handle, out bool isForwarded);
252 if (ret != (int)CmError.None)
254 Log.Error(CmUtility.LogTag, "Failed to check if the call is forwarded call from call data, Error: " + (CmError)ret);
259 data.IsForwardedCall = isForwarded;
265 internal static ConferenceCallData GetConfCallData(IntPtr handle)
267 ConferenceCallData confData = new ConferenceCallData();
268 int ret = Interop.CallManager.GetConfCallId(handle, out uint callId);
269 if (ret != (int)CmError.None)
271 Log.Error(CmUtility.LogTag, "Failed to get conf call ID, Error: " + (CmError)ret);
276 confData.CallId = callId;
279 ret = Interop.CallManager.GetConfCallNumber(handle, out string number);
280 if (ret != (int)CmError.None)
282 Log.Error(CmUtility.LogTag, "Failed to get conf call number, Error: " + (CmError)ret);
287 confData.Number = number;
290 ret = Interop.CallManager.GetConfCallPersonId(handle, out int personId);
291 if (ret != (int)CmError.None)
293 Log.Error(CmUtility.LogTag, "Failed to get conf call person ID, Error: " + (CmError)ret);
298 confData.PersonIndex = personId;
301 ret = Interop.CallManager.GetConfCallNameMode(handle, out CallNameMode nameMode);
302 if (ret != (int)CmError.None)
304 Log.Error(CmUtility.LogTag, "Failed to get conf call name mode, Error: " + (CmError)ret);
309 confData.NameMode = nameMode;
315 internal static CallEventData GetCallEventData(IntPtr handle)
317 CallEventData eventData = new CallEventData();
318 int ret = Interop.CallManager.GetEventDataCallId(handle, out uint id);
319 if (ret != (int)CmError.None)
321 Log.Error(CmUtility.LogTag, "Failed to get event data call ID, Error: " + (CmError)ret);
326 eventData.EventId = id;
329 ret = Interop.CallManager.GetSimSlot(handle, out MultiSimSlot simSlot);
330 if (ret != (int)CmError.None)
332 Log.Error(CmUtility.LogTag, "Failed to get event data sim slot, Error: " + (CmError)ret);
337 eventData.Slot = simSlot;
340 ret = Interop.CallManager.GetEndCause(handle, out CallEndCause endCause);
341 if (ret != (int)CmError.None)
343 Log.Error(CmUtility.LogTag, "Failed to get end cause, Error: " + (CmError)ret);
348 eventData.Cause = endCause;
351 ret = Interop.CallManager.GetIncomingCallData(handle, out IntPtr incoming);
352 if (ret != (int)CmError.None)
354 Log.Error(CmUtility.LogTag, "Failed to get incoming call data, Error: " + (CmError)ret);
359 eventData.Incoming = GetCallData(incoming);
362 ret = Interop.CallManager.GetActiveCall(handle, out IntPtr active);
363 if (ret != (int)CmError.None)
365 Log.Error(CmUtility.LogTag, "Failed to get active call data, Error: " + (CmError)ret);
370 eventData.Active = GetCallData(active);
373 ret = Interop.CallManager.GetHeldCall(handle, out IntPtr held);
374 if (ret != (int)CmError.None)
376 Log.Error(CmUtility.LogTag, "Failed to get held call data, Error: " + (CmError)ret);
381 eventData.Held = GetCallData(held);
387 internal static void ThrowCmException(int exception)
389 _throwException(exception, false, "");
392 internal static void ThrowCmException(int exception, IntPtr handle)
394 _throwException(exception, (handle == IntPtr.Zero), "");
397 internal static void ThrowCmException(int exception, IntPtr handle, string message)
399 _throwException(exception, (handle == IntPtr.Zero), message);
402 private static void _throwException(int exception, bool isHandleNull, string message)
404 CmError _error = (CmError)exception;
407 case CmError.NotSupported:
408 throw new NotSupportedException("Unsupported feature: http://tizen.org/feature/network.telephony");
409 case CmError.PermissionDenied:
410 throw new UnauthorizedAccessException("Permission denied: " + message);
411 case CmError.OutOfMemory:
412 throw new OutOfMemoryException("System out of memory");
413 case CmError.InvalidParameter:
416 throw new InvalidOperationException("Invalid instance (object may have been disposed or released)");
419 throw new ArgumentException("Invalid parameter");
421 throw new InvalidOperationException(_error.ToString());