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.
19 namespace Tizen.Messaging.Messages
21 internal partial class MessagesManagerImpl
23 private event EventHandler<MessageReceivedEventArgs> _messageReceived;
25 private Interop.Messages.MessageIncomingCallback _messageReceivedCallback;
27 internal event EventHandler<MessageReceivedEventArgs> _MessageReceived
31 if (_messageReceived == null)
33 RegisterMessageReceivedEvent();
35 _messageReceived += value;
39 _messageReceived -= value;
40 if (_messageReceived == null)
42 UnregisterMessageReceivedEvent();
47 private void RegisterMessageReceivedEvent()
49 _messageReceivedCallback = (IntPtr messageHandle, IntPtr userData) =>
53 IntPtr duplicatedMessageHandle = IntPtr.Zero;
55 DuplicateMessageHandle(messageHandle, out duplicatedMessageHandle);
56 if (duplicatedMessageHandle != IntPtr.Zero)
58 int type = (int)MessageType.Unknown;
59 int result = Interop.Messages.GetMessageType(duplicatedMessageHandle, out type);
60 if (result != (int)MessagesError.None)
62 Log.Error(Globals.LogTag, "Failed to get message type, Error - " + (MessagesError)result);
65 switch ((MessageType)type)
69 var receivedMessage = new SmsMessage(duplicatedMessageHandle);
70 MessageReceivedEventArgs args = new MessageReceivedEventArgs(receivedMessage);
71 _messageReceived?.Invoke(null, args);
76 var receivedMessage = new MmsMessage(duplicatedMessageHandle);
77 MessageReceivedEventArgs args = new MessageReceivedEventArgs(receivedMessage);
78 _messageReceived?.Invoke(null, args);
81 case MessageType.CellBroadcast:
83 var receivedMessage = new CBMessage(duplicatedMessageHandle);
84 MessageReceivedEventArgs args = new MessageReceivedEventArgs(receivedMessage);
85 _messageReceived?.Invoke(null, args);
88 case MessageType.Push:
90 var receivedMessage = new PushMessage(duplicatedMessageHandle);
91 MessageReceivedEventArgs args = new MessageReceivedEventArgs(receivedMessage);
92 _messageReceived?.Invoke(null, args);
97 Log.Error(Globals.LogTag, "Invaild message type - " + type);
105 Log.Error(Globals.LogTag, "Exception in Callback");
109 int ret = Interop.Messages.SetMessageIncomingCb(_MessageServiceHandle, _messageReceivedCallback, IntPtr.Zero);
110 if (ret != (int)MessagesError.None)
112 Log.Error(Globals.LogTag, "Failed to set message incoming callback, Error - " + (MessagesError)ret);
116 private void UnregisterMessageReceivedEvent()
118 int ret = Interop.Messages.UnsetMessageIncomingCb(_MessageServiceHandle);
119 if (ret != (int)MessagesError.None)
121 Log.Error(Globals.LogTag, "Failed to unset message incoming callback, Error - " + (MessagesError)ret);