1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef RINGTONE_PLAYER_H
17 #define RINGTONE_PLAYER_H
18 
19 #include <string>
20 
21 #include "audio_info.h"
22 
23 namespace OHOS {
24 namespace Media {
25 enum RingtoneState {
26     /** INVALID state */
27     STATE_INVALID = -1,
28     /** Create New instance */
29     STATE_NEW,
30     /** Prepared state */
31     STATE_PREPARED,
32     /** Running state */
33     STATE_RUNNING,
34     /** Stopped state */
35     STATE_STOPPED,
36     /** Released state */
37     STATE_RELEASED,
38     /** Paused state */
39     STATE_PAUSED
40 };
41 
42 class RingtonePlayerInterruptCallback;
43 
44 class RingtonePlayer {
45 public:
46     virtual ~RingtonePlayer() = default;
47 
48     /**
49      * @brief Returns the current ringtone state
50      *
51      * @return Returns the current state of ringtone player.
52      * @since 1.0
53      * @version 1.0
54      */
55     virtual RingtoneState GetRingtoneState() = 0;
56 
57     /**
58      * @brief Configure the ringtone player before playing any audio
59      *
60      * @param volume Configures the volume at which the ringtone has to be played
61      * @param loop Boolean parameter indicating whether to enable or disable looping
62      * @return Returns {@link MSERR_OK} if the looping parameter is set successfully to player;
63      * returns an error code defined in {@link media_errors.h} otherwise.
64      * @since 1.0
65      * @version 1.0
66      */
67     virtual int32_t Configure(const float &volume, const bool &loop) = 0;
68 
69     /**
70      * @brief Start playing ringtone
71      *
72      * @return Returns {@link MSERR_OK} if the looping parameter is set successfully to player;
73      * returns an error code defined in {@link media_errors.h} otherwise.
74      * @since 1.0
75      * @version 1.0
76      */
77     virtual int32_t Start() = 0;
78 
79     /**
80      * @brief Stop playing ringtone
81      *
82      * @return Returns {@link MSERR_OK} if the looping parameter is set successfully to player;
83      * returns an error code defined in {@link media_errors.h} otherwise.
84      * @since 1.0
85      * @version 1.0
86      */
87     virtual int32_t Stop() = 0;
88 
89     /**
90      * @brief Returns the audio contetnt type and stream uage details to the clients
91      *
92      * @return Returns {@link MSERR_OK} if the looping parameter is set successfully to player;
93      * returns an error code defined in {@link media_errors.h} otherwise.
94      * @since 1.0
95      * @version 1.0
96      */
97     virtual int32_t GetAudioRendererInfo(AudioStandard::AudioRendererInfo &rendererInfo) const = 0;
98 
99     /**
100      * @brief Returns the title of the uri set.
101      *
102      * @return Returns title as string if the title is obtained successfully from media library.
103      * returns an empty string otherwise.
104      * @since 1.0
105      * @version 1.0
106      */
107     virtual std::string GetTitle() = 0;
108 
109     /**
110      * @brief Releases the ringtone client resources
111      *
112      * @return Returns {@link MSERR_OK} if the looping parameter is set successfully to player;
113      * returns an error code defined in {@link media_errors.h} otherwise.
114      * @since 1.0
115      * @version 1.0
116      */
117     virtual int32_t Release() = 0;
118 
119     /**
120      * @brief Registers the ringtone player callback listener.
121      *
122      * @return Returns {@link MSERR_OK} if callback registration is successful;
123      * returns an error code defined in {@link media_errors.h} otherwise.
124      * @since 1.0
125      * @version 1.0
126      */
127     virtual int32_t SetRingtonePlayerInterruptCallback
128         (const std::shared_ptr<RingtonePlayerInterruptCallback> &interruptCallback) = 0;
129 };
130 
131 
132 class RingtonePlayerInterruptCallback {
133 public:
134     virtual ~RingtonePlayerInterruptCallback() = default;
135     /**
136      * Called when an interrupt is received.
137      *
138      * @param interruptEvent Indicates the InterruptEvent information needed by client.
139      * For details, refer InterruptEventInternal struct in audio_info.h
140      */
141     virtual void OnInterrupt(const AudioStandard::InterruptEvent &interruptEvent) = 0;
142 };
143 } // namespace Media
144 } // namespace OHOS
145 #endif // RINGTONE_PLAYER_H
146