Release 4.0.0-preview1-00258
[platform/core/csapi/tizenfx.git] / src / Tizen.CallManager / Tizen.CallManager / CmClientHandle.cs
index c41dc82..38b4292 100755 (executable)
@@ -17,6 +17,7 @@
 using System;
 using System.Collections.Generic;
 using System.Runtime.InteropServices;
+using System.Linq;
 
 namespace Tizen.CallManager
 {
@@ -251,9 +252,9 @@ namespace Tizen.CallManager
 
         private void RegisterCallStatusChangedEvent()
         {
-            _callStatusChangedCb = (CallStatus status, string number, IntPtr userData) =>
+            _callStatusChangedCb = (CallStatus status, IntPtr number, IntPtr userData) =>
             {
-                _callStatusChanged?.Invoke(null, new CallStatusChangedEventArgs(status, number));
+                _callStatusChanged?.Invoke(null, new CallStatusChangedEventArgs(status, Marshal.PtrToStringAnsi(number)));
             };
             int ret = Interop.CallManager.SetCallStatusCallback(_handle, _callStatusChangedCb, IntPtr.Zero);
             if (ret != (int)CmError.None)
@@ -301,7 +302,7 @@ namespace Tizen.CallManager
         {
             _callEventCb = (CallEvent callEvent, IntPtr eventData, IntPtr userData) =>
             {
-                _callEvent?.Invoke(null, new CallEventEventArgs(callEvent, CmUtility.GetCallEventData(eventData)));
+                _callEvent?.Invoke(null, new CallEventEventArgs(callEvent, CmUtility.GetCallEventData(callEvent, eventData)));
             };
             int ret = Interop.CallManager.SetCallEventCb(_handle, _callEventCb, IntPtr.Zero);
             if (ret != (int)CmError.None)
@@ -506,20 +507,22 @@ namespace Tizen.CallManager
                     return null;
                 }
 
+                int length = Interop.GsList.GetLength(list);
+                if (length == 0)
+                {
+                    Log.Debug(CmUtility.LogTag, "Call list is empty");
+                    return Enumerable.Empty<CallData>();
+                }
+
                 List<CallData> callList = new List<CallData>();
-                int offset = 0;
-                IntPtr data = Marshal.ReadIntPtr(list, offset);
-                if (data != IntPtr.Zero)
+                IntPtr callData = IntPtr.Zero;
+                for (int index = 0; index < length; index++)
                 {
-                    do
+                    callData = Interop.GsList.GetDataByIndex(list, index);
+                    if (callData != IntPtr.Zero)
                     {
-                        offset += Marshal.SizeOf(data);
-                        callList.Add(CmUtility.GetCallData(data));
-                        Interop.CallManager.FreeCallData(data);
-                        data = IntPtr.Zero;
+                        callList.Add(CmUtility.GetCallData(callData));
                     }
-
-                    while ((data = Marshal.ReadIntPtr(list, offset)) != IntPtr.Zero);
                 }
 
                 return callList;
@@ -540,20 +543,21 @@ namespace Tizen.CallManager
                     return null;
                 }
 
+                int length = Interop.GsList.GetLength(list);
+                if (length == 0)
+                {
+                    Log.Debug(CmUtility.LogTag, "Conf call list is empty");
+                    return Enumerable.Empty<ConferenceCallData>();
+                }
                 List<ConferenceCallData> confList = new List<ConferenceCallData>();
-                int offset = 0;
-                IntPtr data = Marshal.ReadIntPtr(list, offset);
-                if (data != IntPtr.Zero)
+                IntPtr confData = IntPtr.Zero;
+                for (int index = 0; index < length; index++)
                 {
-                    do
+                    confData = Interop.GsList.GetDataByIndex(list, index);
+                    if (confData != IntPtr.Zero)
                     {
-                        offset += Marshal.SizeOf(data);
-                        confList.Add(CmUtility.GetConfCallData(data));
-                        Interop.CallManager.FreeConfCallData(data);
-                        data = IntPtr.Zero;
+                        confList.Add(CmUtility.GetConfCallData(confData));
                     }
-
-                    while ((data = Marshal.ReadIntPtr(list, offset)) != IntPtr.Zero);
                 }
 
                 return confList;