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 Native = Interop.MediaControllerClient;
20 namespace Tizen.Multimedia.Remoting
22 public partial class MediaControllerManager
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;
31 /// Occurs when a server is started.
33 /// <since_tizen> 4 </since_tizen>
34 public event EventHandler<MediaControlServerStartedEventArgs> ServerStarted;
37 /// Occurs when a server is stopped.
39 /// <since_tizen> 4 </since_tizen>
40 public event EventHandler<MediaControlServerStoppedEventArgs> ServerStopped;
42 private void InitializeEvents()
44 RegisterPlaybackUpdatedEvent();
45 RegisterServerUpdatedEvent();
46 RegisterMetadataUpdatedEvent();
47 RegisterShuffleModeUpdatedEvent();
48 RegisterRepeatModeUpdatedEvent();
51 private void RaiseServerChangedEvent(MediaControllerServerState state, MediaController controller)
53 if (controller == null)
58 if (state == MediaControllerServerState.Activated)
60 ServerStarted?.Invoke(this, new MediaControlServerStartedEventArgs(controller));
64 controller.RaiseStoppedEvent();
65 ServerStopped?.Invoke(this, new MediaControlServerStoppedEventArgs(controller.ServerAppId));
69 private void RegisterServerUpdatedEvent()
71 _serverUpdatedCallback = (serverName, state, _) =>
73 RaiseServerChangedEvent(state, HandleServerUpdated(serverName, state));
76 Native.SetServerUpdatedCb(Handle, _serverUpdatedCallback).ThrowIfError("Failed to init server changed event.");
79 private void RegisterPlaybackUpdatedEvent()
81 _playbackUpdatedCallback = (serverName, playback, _) =>
83 GetController(serverName)?.RaisePlaybackUpdatedEvent(playback);
86 Native.SetPlaybackUpdatedCb(Handle, _playbackUpdatedCallback).ThrowIfError("Failed to init PlaybackUpdated event.");
90 private void RegisterMetadataUpdatedEvent()
92 _metadataUpdatedCallback = (serverName, metadata, _) =>
94 GetController(serverName)?.RaiseMetadataUpdatedEvent(metadata);
97 Native.SetMetadataUpdatedCb(Handle, _metadataUpdatedCallback).ThrowIfError("Failed to init MetadataUpdated event.");
100 private void RegisterShuffleModeUpdatedEvent()
102 _shufflemodeUpdatedCallback = (serverName, shuffleMode, _) =>
104 GetController(serverName)?.RaiseShuffleModeUpdatedEvent(shuffleMode);
107 Native.SetShuffleModeUpdatedCb(Handle, _shufflemodeUpdatedCallback).
108 ThrowIfError("Failed to init ShuffleModeUpdated event.");
111 private void RegisterRepeatModeUpdatedEvent()
113 _repeatmodeUpdatedCallback = (serverName, repeatMode, _) =>
115 GetController(serverName)?.RaiseRepeatModeUpdatedEvent(repeatMode.ToPublic());
118 Native.SetRepeatModeUpdatedCb(Handle, _repeatmodeUpdatedCallback).
119 ThrowIfError("Failed to init RepeatModeUpdated event.");