670443e26585ee3ffa3359cf23aacbed783497e7
[platform/core/csapi/tizenfx.git] / src / Tizen.Multimedia.Remoting / MediaController / MediaControllerManager.Events.cs
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 using System;
18 using Native = Interop.MediaControllerClient;
19
20 namespace Tizen.Multimedia.Remoting
21 {
22     public partial class MediaControllerManager
23     {
24         private Native.ServerUpdatedCallback _serverUpdatedCallback;
25         private Native.PlaybackUpdatedCallback _playbackUpdatedCallback;
26         private Native.MetadataUpdatedCallback _metadataUpdatedCallback;
27         private Native.ShuffleModeUpdatedCallback _shufflemodeUpdatedCallback;
28         private Native.RepeatModeUpdatedCallback _repeatmodeUpdatedCallback;
29
30         /// <summary>
31         /// Occurs when a server is started.
32         /// </summary>
33         /// <since_tizen> 4 </since_tizen>
34         public event EventHandler<MediaControlServerStartedEventArgs> ServerStarted;
35
36         /// <summary>
37         /// Occurs when a server is stopped.
38         /// </summary>
39         /// <since_tizen> 4 </since_tizen>
40         public event EventHandler<MediaControlServerStoppedEventArgs> ServerStopped;
41
42         private void InitializeEvents()
43         {
44             RegisterPlaybackUpdatedEvent();
45             RegisterServerUpdatedEvent();
46             RegisterMetadataUpdatedEvent();
47             RegisterShuffleModeUpdatedEvent();
48             RegisterRepeatModeUpdatedEvent();
49         }
50
51         private void RaiseServerChangedEvent(MediaControllerServerState state, MediaController controller)
52         {
53             if (controller == null)
54             {
55                 return;
56             }
57
58             if (state == MediaControllerServerState.Activated)
59             {
60                 ServerStarted?.Invoke(this, new MediaControlServerStartedEventArgs(controller));
61             }
62             else
63             {
64                 controller.RaiseStoppedEvent();
65                 ServerStopped?.Invoke(this, new MediaControlServerStoppedEventArgs(controller.ServerAppId));
66             }
67         }
68
69         private void RegisterServerUpdatedEvent()
70         {
71             _serverUpdatedCallback = (serverName, state, _) =>
72             {
73                 RaiseServerChangedEvent(state, HandleServerUpdated(serverName, state));
74             };
75
76             Native.SetServerUpdatedCb(Handle, _serverUpdatedCallback).ThrowIfError("Failed to init server changed event.");
77         }
78
79         private void RegisterPlaybackUpdatedEvent()
80         {
81             _playbackUpdatedCallback = (serverName, playback, _) =>
82             {
83                 GetController(serverName)?.RaisePlaybackUpdatedEvent(playback);
84             };
85
86             Native.SetPlaybackUpdatedCb(Handle, _playbackUpdatedCallback).ThrowIfError("Failed to init PlaybackUpdated event.");
87         }
88
89
90         private void RegisterMetadataUpdatedEvent()
91         {
92             _metadataUpdatedCallback = (serverName, metadata, _) =>
93             {
94                 GetController(serverName)?.RaiseMetadataUpdatedEvent(metadata);
95             };
96
97             Native.SetMetadataUpdatedCb(Handle, _metadataUpdatedCallback).ThrowIfError("Failed to init MetadataUpdated event.");
98         }
99
100         private void RegisterShuffleModeUpdatedEvent()
101         {
102             _shufflemodeUpdatedCallback = (serverName, shuffleMode, _) =>
103             {
104                 GetController(serverName)?.RaiseShuffleModeUpdatedEvent(shuffleMode);
105             };
106
107             Native.SetShuffleModeUpdatedCb(Handle, _shufflemodeUpdatedCallback).
108                 ThrowIfError("Failed to init ShuffleModeUpdated event.");
109         }
110
111         private void RegisterRepeatModeUpdatedEvent()
112         {
113             _repeatmodeUpdatedCallback = (serverName, repeatMode, _) =>
114             {
115                 GetController(serverName)?.RaiseRepeatModeUpdatedEvent(repeatMode.ToPublic());
116             };
117
118             Native.SetRepeatModeUpdatedCb(Handle, _repeatmodeUpdatedCallback).
119                 ThrowIfError("Failed to init RepeatModeUpdated event.");
120         }
121     }
122 }