Release 4.0.0-preview1-00151
[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         public event EventHandler<MediaControlServerStartedEventArgs> ServerStarted;
34
35         /// <summary>
36         /// Occurs when a server is stopped.
37         /// </summary>
38         public event EventHandler<MediaControlServerStoppedEventArgs> ServerStopped;
39
40         private void InitializeEvents()
41         {
42             RegisterPlaybackUpdatedEvent();
43             RegisterServerUpdatedEvent();
44             RegisterMetadataUpdatedEvent();
45             RegisterShuffleModeUpdatedEvent();
46             RegisterRepeatModeUpdatedEvent();
47         }
48
49         private void RaiseServerChangedEvent(MediaControllerServerState state, MediaController controller)
50         {
51             if (controller == null)
52             {
53                 return;
54             }
55
56             if (state == MediaControllerServerState.Activated)
57             {
58                 ServerStarted?.Invoke(this, new MediaControlServerStartedEventArgs(controller));
59             }
60             else
61             {
62                 controller.RaiseStoppedEvent();
63                 ServerStopped?.Invoke(this, new MediaControlServerStoppedEventArgs(controller.ServerAppId));
64             }
65         }
66
67         private void RegisterServerUpdatedEvent()
68         {
69             _serverUpdatedCallback = (serverName, state, _) =>
70             {
71                 RaiseServerChangedEvent(state, HandleServerUpdated(serverName, state));
72             };
73
74             Native.SetServerUpdatedCb(Handle, _serverUpdatedCallback).ThrowIfError("Failed to init server changed event.");
75         }
76
77         private void RegisterPlaybackUpdatedEvent()
78         {
79             _playbackUpdatedCallback = (serverName, playback, _) =>
80             {
81                 GetController(serverName)?.RaisePlaybackUpdatedEvent(playback);
82             };
83
84             Native.SetPlaybackUpdatedCb(Handle, _playbackUpdatedCallback).ThrowIfError("Failed to init PlaybackUpdated event.");
85         }
86
87
88         private void RegisterMetadataUpdatedEvent()
89         {
90             _metadataUpdatedCallback = (serverName, metadata, _) =>
91             {
92                 GetController(serverName)?.RaiseMetadataUpdatedEvent(metadata);
93             };
94
95             Native.SetMetadataUpdatedCb(Handle, _metadataUpdatedCallback).ThrowIfError("Failed to init MetadataUpdated event.");
96         }
97
98         private void RegisterShuffleModeUpdatedEvent()
99         {
100             _shufflemodeUpdatedCallback = (serverName, shuffleMode, _) =>
101             {
102                 GetController(serverName)?.RaiseShuffleModeUpdatedEvent(shuffleMode);
103             };
104
105             Native.SetShuffleModeUpdatedCb(Handle, _shufflemodeUpdatedCallback).
106                 ThrowIfError("Failed to init ShuffleModeUpdated event.");
107         }
108
109         private void RegisterRepeatModeUpdatedEvent()
110         {
111             _repeatmodeUpdatedCallback = (serverName, repeatMode, _) =>
112             {
113                 GetController(serverName)?.RaiseRepeatModeUpdatedEvent(repeatMode.ToPublic());
114             };
115
116             Native.SetRepeatModeUpdatedCb(Handle, _repeatmodeUpdatedCallback).
117                 ThrowIfError("Failed to init RepeatModeUpdated event.");
118         }
119     }
120 }