[MediaController] Add new APIs for event, capabilities and search. (#468)
[platform/core/csapi/tizenfx.git] / src / Tizen.Multimedia.Remoting / MediaController / MediaControlEnums.cs
1 /*
2  * Copyright (c) 2018 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 System.Diagnostics;
19
20 namespace Tizen.Multimedia.Remoting
21 {
22     /// <summary>
23     /// Specifies the playlist mode.
24     /// </summary>
25     /// <since_tizen> 5 </since_tizen>
26     public enum MediaControlPlaylistMode
27     {
28         /// <summary>
29         /// Playlist is created or update.
30         /// </summary>
31         Updated,
32
33         /// <summary>
34         /// Playlist is removed.
35         /// </summary>
36         Removed,
37     }
38
39     /// <summary>
40     /// Specifies the repeat mode.
41     /// </summary>
42     /// <since_tizen> 4 </since_tizen>
43     public enum MediaControlRepeatMode
44     {
45         /// <summary>
46         /// Off.
47         /// </summary>
48         Off,
49
50         /// <summary>
51         /// On.
52         /// </summary>
53         On,
54
55         /// <summary>
56         /// One media.
57         /// </summary>
58         /// <since_tizen> 5 </since_tizen>
59         OneMedia
60     }
61
62     /// <summary>
63     /// Specifies playback commands.
64     /// </summary>
65     /// <since_tizen> 4 </since_tizen>
66     public enum MediaControlPlaybackCommand
67     {
68         /// <summary>
69         /// Play.
70         /// </summary>
71         Play,
72
73         /// <summary>
74         /// Pause.
75         /// </summary>
76         Pause,
77
78         /// <summary>
79         /// Stop.
80         /// </summary>
81         Stop,
82
83         /// <summary>
84         /// Skip to next.
85         /// </summary>
86         Next,
87
88         /// <summary>
89         /// Skip to previous.
90         /// </summary>
91         Previous,
92
93         /// <summary>
94         /// Fast forward.
95         /// </summary>
96         FastForward,
97
98         /// <summary>
99         /// Rewind.
100         /// </summary>
101         Rewind,
102
103         /// <summary>
104         /// Toggle play/pause.
105         /// </summary>
106         /// <since_tizen> 5 </since_tizen>
107         Toggle,
108     }
109
110     /// <summary>
111     /// Specifies playback states.
112     /// </summary>
113     /// <since_tizen> 4 </since_tizen>
114     public enum MediaControlPlaybackState
115     {
116         /// <summary>
117         /// Unknown; no state is set.
118         /// </summary>
119         None,
120
121         /// <summary>
122         /// Playing.
123         /// </summary>
124         Playing,
125
126         /// <summary>
127         /// Paused.
128         /// </summary>
129         Paused,
130
131         /// <summary>
132         /// Stopped.
133         /// </summary>
134         Stopped,
135
136         /// <summary>
137         /// Fast forwarding.
138         /// </summary>
139         FastForwarding,
140
141         /// <summary>
142         /// Rewinding.
143         /// </summary>
144         Rewinding,
145
146         /// <summary>
147         /// Skipping to the next item.
148         /// </summary>
149         /// <since_tizen> 5 </since_tizen>
150         MovingToNext,
151
152         /// <summary>
153         /// Skipping to the previous item.
154         /// </summary>
155         /// <since_tizen> 5 </since_tizen>
156         MovingToPrevious,
157     }
158
159     /// <summary>
160     /// Specifies the support type of media control capability.
161     /// </summary>
162     /// <since_tizen> 5 </since_tizen>
163     public enum MediaControlCapabilitySupport
164     {
165         /// <summary>
166         /// Supported.
167         /// </summary>
168         Supported,
169
170         /// <summary>
171         /// Not supported.
172         /// </summary>
173         NotSupported,
174
175         /// <summary>
176         /// There's no support info in server.
177         /// </summary>
178         NotDecided
179     }
180
181     /// <summary>
182     /// Specifies the content type.
183     /// </summary>
184     /// <since_tizen> 5 </since_tizen>
185     public enum MediaControlContentType
186     {
187         /// <summary>
188         /// Image type.
189         /// </summary>
190         Image,
191
192         /// <summary>
193         /// Video type.
194         /// </summary>
195         Video,
196
197         /// <summary>
198         /// Music type.
199         /// </summary>
200         Music,
201
202         /// <summary>
203         /// Other type.
204         /// </summary>
205         Other,
206
207         /// <summary>
208         /// There's no content type info in server.
209         /// </summary>
210         NotDecided
211     }
212
213     /// <summary>
214     /// Specifies the search category.
215     /// </summary>
216     /// <since_tizen> 5 </since_tizen>
217     public enum MediaControlSearchCategory
218     {
219         /// <summary>
220         /// Search by all category.
221         /// </summary>
222         All,
223
224         /// <summary>
225         /// Search by content title.
226         /// </summary>
227         Title,
228
229         /// <summary>
230         /// Search by content artist.
231         /// </summary>
232         Artist,
233
234         /// <summary>
235         /// Search by content album.
236         /// </summary>
237         Album,
238
239         /// <summary>
240         /// Search by content genre.
241         /// </summary>
242         Genre,
243
244         /// <summary>
245         /// Search by TPO(Time Place Occasion).
246         /// </summary>
247         Tpo
248     }
249
250     internal static class EnumExtensions
251     {
252         internal static MediaControlPlaybackState ToPublic(this MediaControllerNativePlaybackState nativeState)
253         {
254             switch (nativeState)
255             {
256                 case MediaControllerNativePlaybackState.None: return MediaControlPlaybackState.None;
257                 case MediaControllerNativePlaybackState.Play: return MediaControlPlaybackState.Playing;
258                 case MediaControllerNativePlaybackState.Pause: return MediaControlPlaybackState.Paused;
259                 case MediaControllerNativePlaybackState.Stop: return MediaControlPlaybackState.Stopped;
260                 case MediaControllerNativePlaybackState.Next:
261                 case MediaControllerNativePlaybackState.MovingToNext: return MediaControlPlaybackState.MovingToNext;
262                 case MediaControllerNativePlaybackState.Prev:
263                 case MediaControllerNativePlaybackState.MovingToPrev: return MediaControlPlaybackState.MovingToPrevious;
264                 case MediaControllerNativePlaybackState.FastForward:
265                 case MediaControllerNativePlaybackState.FastForwarding: return MediaControlPlaybackState.FastForwarding;
266                 case MediaControllerNativePlaybackState.Rewind:
267                 case MediaControllerNativePlaybackState.Rewinding: return MediaControlPlaybackState.Rewinding;
268             }
269
270             Debug.Fail($"Not supported code for playback state{nativeState}.");
271             return MediaControlPlaybackState.None;
272         }
273
274         internal static MediaControllerNativePlaybackState ToNative(this MediaControlPlaybackState state)
275         {
276             switch (state)
277             {
278                 case MediaControlPlaybackState.Playing: return MediaControllerNativePlaybackState.Play;
279                 case MediaControlPlaybackState.Paused: return MediaControllerNativePlaybackState.Pause;
280                 case MediaControlPlaybackState.Stopped: return MediaControllerNativePlaybackState.Stop;
281                 case MediaControlPlaybackState.MovingToNext: return MediaControllerNativePlaybackState.MovingToNext;
282                 case MediaControlPlaybackState.MovingToPrevious: return MediaControllerNativePlaybackState.MovingToPrev;
283                 case MediaControlPlaybackState.FastForwarding: return MediaControllerNativePlaybackState.FastForwarding;
284                 case MediaControlPlaybackState.Rewinding: return MediaControllerNativePlaybackState.Rewinding;
285             }
286             return MediaControllerNativePlaybackState.None;
287         }
288
289         internal static MediaControlPlaybackCommand ToPublic(this MediaControllerNativePlaybackAction nativeAction)
290         {
291             switch (nativeAction)
292             {
293                 case MediaControllerNativePlaybackAction.Play: return MediaControlPlaybackCommand.Play;
294                 case MediaControllerNativePlaybackAction.Pause: return MediaControlPlaybackCommand.Pause;
295                 case MediaControllerNativePlaybackAction.Stop: return MediaControlPlaybackCommand.Stop;
296                 case MediaControllerNativePlaybackAction.Next: return MediaControlPlaybackCommand.Next;
297                 case MediaControllerNativePlaybackAction.Prev: return MediaControlPlaybackCommand.Previous;
298                 case MediaControllerNativePlaybackAction.FastForward: return MediaControlPlaybackCommand.FastForward;
299                 case MediaControllerNativePlaybackAction.Rewind: return MediaControlPlaybackCommand.Rewind;
300                 case MediaControllerNativePlaybackAction.Toggle: return MediaControlPlaybackCommand.Toggle;
301             }
302
303             Debug.Fail($"Not supported code for playback command{nativeAction}.");
304             return MediaControlPlaybackCommand.Play;
305         }
306
307         internal static MediaControllerNativePlaybackAction ToNative(this MediaControlPlaybackCommand command)
308         {
309             switch (command)
310             {
311                 case MediaControlPlaybackCommand.Play: return MediaControllerNativePlaybackAction.Play;
312                 case MediaControlPlaybackCommand.Pause: return MediaControllerNativePlaybackAction.Pause;
313                 case MediaControlPlaybackCommand.Stop: return MediaControllerNativePlaybackAction.Stop;
314                 case MediaControlPlaybackCommand.Next: return MediaControllerNativePlaybackAction.Next;
315                 case MediaControlPlaybackCommand.Previous: return MediaControllerNativePlaybackAction.Prev;
316                 case MediaControlPlaybackCommand.FastForward: return MediaControllerNativePlaybackAction.FastForward;
317                 case MediaControlPlaybackCommand.Rewind: return MediaControllerNativePlaybackAction.Rewind;
318                 case MediaControlPlaybackCommand.Toggle: return MediaControllerNativePlaybackAction.Toggle;
319             }
320             return MediaControllerNativePlaybackAction.Play;
321         }
322
323         internal static MediaControlRepeatMode ToPublic(this MediaControllerNativeRepeatMode mode)
324         {
325             Debug.Assert(Enum.IsDefined(typeof(MediaControllerNativeRepeatMode), mode));
326
327             return mode == MediaControllerNativeRepeatMode.Off ? MediaControlRepeatMode.On :
328                 (mode == MediaControllerNativeRepeatMode.On ? MediaControlRepeatMode.Off : MediaControlRepeatMode.OneMedia);
329         }
330
331         internal static MediaControllerNativeRepeatMode ToNative(this MediaControlRepeatMode mode)
332         {
333             Debug.Assert(Enum.IsDefined(typeof(MediaControlRepeatMode), mode));
334
335             return mode == MediaControlRepeatMode.Off ? MediaControllerNativeRepeatMode.On :
336                 (mode == MediaControlRepeatMode.On ? MediaControllerNativeRepeatMode.Off : MediaControllerNativeRepeatMode.OneMedia);
337         }
338     }
339 }