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 public event EventHandler<MediaControlServerStartedEventArgs> ServerStarted;
36 /// Occurs when a server is stopped.
38 public event EventHandler<MediaControlServerStoppedEventArgs> ServerStopped;
40 private void InitializeEvents()
42 RegisterPlaybackUpdatedEvent();
43 RegisterServerUpdatedEvent();
44 RegisterMetadataUpdatedEvent();
45 RegisterShuffleModeUpdatedEvent();
46 RegisterRepeatModeUpdatedEvent();
49 private void RaiseServerChangedEvent(MediaControllerServerState state, MediaController controller)
51 if (controller == null)
56 if (state == MediaControllerServerState.Activated)
58 ServerStarted?.Invoke(this, new MediaControlServerStartedEventArgs(controller));
62 controller.RaiseStoppedEvent();
63 ServerStopped?.Invoke(this, new MediaControlServerStoppedEventArgs(controller.ServerAppId));
67 private void RegisterServerUpdatedEvent()
69 _serverUpdatedCallback = (serverName, state, _) =>
71 RaiseServerChangedEvent(state, HandleServerUpdated(serverName, state));
74 Native.SetServerUpdatedCb(Handle, _serverUpdatedCallback).ThrowIfError("Failed to init server changed event.");
77 private void RegisterPlaybackUpdatedEvent()
79 _playbackUpdatedCallback = (serverName, playback, _) =>
81 GetController(serverName)?.RaisePlaybackUpdatedEvent(playback);
84 Native.SetPlaybackUpdatedCb(Handle, _playbackUpdatedCallback).ThrowIfError("Failed to init PlaybackUpdated event.");
88 private void RegisterMetadataUpdatedEvent()
90 _metadataUpdatedCallback = (serverName, metadata, _) =>
92 GetController(serverName)?.RaiseMetadataUpdatedEvent(metadata);
95 Native.SetMetadataUpdatedCb(Handle, _metadataUpdatedCallback).ThrowIfError("Failed to init MetadataUpdated event.");
98 private void RegisterShuffleModeUpdatedEvent()
100 _shufflemodeUpdatedCallback = (serverName, shuffleMode, _) =>
102 GetController(serverName)?.RaiseShuffleModeUpdatedEvent(shuffleMode);
105 Native.SetShuffleModeUpdatedCb(Handle, _shufflemodeUpdatedCallback).
106 ThrowIfError("Failed to init ShuffleModeUpdated event.");
109 private void RegisterRepeatModeUpdatedEvent()
111 _repeatmodeUpdatedCallback = (serverName, repeatMode, _) =>
113 GetController(serverName)?.RaiseRepeatModeUpdatedEvent(repeatMode.ToPublic());
116 Native.SetRepeatModeUpdatedCb(Handle, _repeatmodeUpdatedCallback).
117 ThrowIfError("Failed to init RepeatModeUpdated event.");