13 * |
13 * |
14 * Description: |
14 * Description: |
15 * This file provides the implementation of System Tone Service used |
15 * This file provides the implementation of System Tone Service used |
16 * by the STS Server. |
16 * by the STS Server. |
17 */ |
17 */ |
18 |
18 // Include Files |
19 #include "sts.h" |
19 #include "sts.h" |
20 #include <AudioPreference.h> |
20 #include "stssettingsmanager.h" |
21 #include <MProEngEngine.h> |
|
22 #include <MProEngProfile.h> |
|
23 #include <MProEngTones.h> |
|
24 #include <MProEngToneSettings.h> |
|
25 #include <ProEngFactory.h> |
|
26 |
|
27 _LIT(KDefaultFile,"z:\\data\\sounds\\digital\\clock.aac"); |
|
28 |
|
29 |
21 |
30 class CSts::CPlayerNode |
22 class CSts::CPlayerNode |
31 { |
23 { |
32 public: |
24 public: |
33 CPlayerNode(CStsPlayer* aPlayer); |
25 CPlayerNode(CStsPlayer* aPlayer); |
73 } |
65 } |
74 |
66 |
75 /*static*/CSts* CSts::Create() |
67 /*static*/CSts* CSts::Create() |
76 { |
68 { |
77 CSts* self = new CSts(); |
69 CSts* self = new CSts(); |
78 |
70 |
79 if (self != 0) |
71 if (self != 0) |
80 { |
72 { |
81 bool successful = self->Init(); |
73 bool successful = self->Init(); |
82 |
74 |
83 if(successful) |
75 if (!successful) |
84 { |
76 { |
85 TRAPD( err ,self->LoadActiveProfileSettingsL()); |
|
86 if( (err != KErrNone ) && (!successful)) |
|
87 { |
|
88 delete self; |
77 delete self; |
89 self = 0; |
78 self = 0; |
90 } |
79 } |
91 } |
80 } |
92 } |
|
93 return self; |
81 return self; |
94 } |
82 } |
95 |
83 |
96 /*static*/void CSts::Delete(CSts* aSts) |
84 /*static*/void CSts::Delete(CSts* aSts) |
97 { |
85 { |
98 delete aSts; |
86 delete aSts; |
99 } |
87 } |
100 |
88 |
101 CSts::CSts() : |
89 CSts::CSts() : |
102 iNextContext(1) |
90 iNextContext(1), iSettingsManager(0) |
103 { |
91 { |
104 } |
92 } |
105 |
93 |
106 bool CSts::Init() |
94 bool CSts::Init() |
107 { |
95 { |
108 iEngine = ProEngFactory::NewEngineL(); |
96 bool successful = false; |
109 return true; |
97 iSettingsManager = CStsSettingsManager::Create(); |
|
98 if (iSettingsManager != 0) |
|
99 { |
|
100 successful = true; |
|
101 } |
|
102 return successful; |
110 } |
103 } |
111 |
104 |
112 CSts::~CSts() |
105 CSts::~CSts() |
113 { |
106 { |
114 CleanUpPlayers(); |
107 CleanUpPlayers(); |
115 if (iProfile) |
108 CStsSettingsManager::Delete(iSettingsManager); |
116 { |
109 } |
117 iProfile->Release(); |
|
118 } |
|
119 if (iEngine) |
|
120 { |
|
121 iEngine->Release(); |
|
122 } |
|
123 |
|
124 } |
|
125 |
|
126 |
|
127 void CSts::LoadActiveProfileSettingsL() |
|
128 { |
|
129 if(!iEngine) |
|
130 { |
|
131 iEngine = ProEngFactory::NewEngineL(); |
|
132 } |
|
133 |
|
134 if (iEngine) |
|
135 iProfile = iEngine->ActiveProfileL(); |
|
136 |
|
137 if (iProfile) |
|
138 { |
|
139 MProEngToneSettings& settings = iProfile->ToneSettings(); |
|
140 iWarningToneEnabled = settings.WarningAndGameTones(); |
|
141 } |
|
142 |
|
143 } |
|
144 |
110 |
145 void CSts::PlayTone(CSystemToneService::TToneType aTone) |
111 void CSts::PlayTone(CSystemToneService::TToneType aTone) |
146 { |
112 { |
147 if(iProfile) |
113 CStsPlayer* player = CStsPlayer::Create(*this, *iSettingsManager, |
148 |
114 iNextContext, aTone); |
149 { |
|
150 MProEngTones& tones = iProfile->ProfileTones(); |
|
151 |
|
152 switch (aTone) |
|
153 { |
|
154 case CSystemToneService::EEmailAlert: |
|
155 { |
|
156 iFileName.Set(tones.EmailAlertTone()); |
|
157 iAudioPreference = KAudioPrefNewSMS; |
|
158 iAudioPriority = KAudioPriorityRecvMsg ; |
|
159 break; |
|
160 } |
|
161 case CSystemToneService::ESmsAlert: |
|
162 { |
|
163 iFileName.Set(tones.MessageAlertTone()); |
|
164 iAudioPreference = KAudioPrefNewSMS; |
|
165 iAudioPriority = KAudioPriorityRecvMsg; |
|
166 break; |
|
167 } |
|
168 case CSystemToneService::EMmsAlert: |
|
169 { |
|
170 iFileName.Set(tones.MessageAlertTone()); |
|
171 iAudioPreference = KAudioPrefNewSMS; |
|
172 iAudioPriority = KAudioPriorityRecvMsg; |
|
173 break; |
|
174 } |
|
175 case CSystemToneService::EChatAlert: |
|
176 { |
|
177 iFileName.Set(tones.MessageAlertTone()); |
|
178 iAudioPreference = KAudioPrefNewSMS ; |
|
179 iAudioPriority = KAudioPriorityRecvMsg; |
|
180 break; |
|
181 } |
|
182 case CSystemToneService::EWarningBeep: |
|
183 { |
|
184 iAudioPreference = KAudioPrefWarning; |
|
185 iAudioPriority = KAudioPriorityWarningTone ; |
|
186 if (iWarningToneEnabled) |
|
187 iFileName.Set(KDefaultFile); |
|
188 else |
|
189 iVolume = 0; |
|
190 |
|
191 break; |
|
192 } |
|
193 default: |
|
194 { |
|
195 iFileName.Set(KDefaultFile); |
|
196 iAudioPreference = KAudioPrefDefaultTone; |
|
197 iAudioPriority = KAudioPriorityWarningTone ; |
|
198 break; |
|
199 } |
|
200 } |
|
201 } |
|
202 |
|
203 else |
|
204 { |
|
205 iFileName.Set(KDefaultFile); |
|
206 iAudioPreference = KAudioPrefDefaultTone; |
|
207 iAudioPriority = KAudioPriorityWarningTone ; |
|
208 } |
|
209 |
|
210 |
|
211 CStsPlayer* player = CStsPlayer::CreateTonePlayer(*this, aTone, |
|
212 iNextContext, iFileName, iVolume, |
|
213 iAudioPreference, iAudioPriority); |
|
214 if (player != 0) |
115 if (player != 0) |
215 { |
116 { |
216 iPlayerMap[iNextContext] = new CPlayerNode(player); |
117 iPlayerMap[iNextContext] = new CPlayerNode(player); |
217 iNextContext++; |
118 iNextContext++; |
218 if (iNextContext == 0) |
119 if (iNextContext == 0) |
226 } |
127 } |
227 |
128 |
228 void CSts::PlayAlarm(CSystemToneService::TAlarmType aAlarm, |
129 void CSts::PlayAlarm(CSystemToneService::TAlarmType aAlarm, |
229 unsigned int& aAlarmContext, MStsPlayAlarmObserver& aObserver) |
130 unsigned int& aAlarmContext, MStsPlayAlarmObserver& aObserver) |
230 { |
131 { |
231 |
132 CStsPlayer* player = CStsPlayer::Create(*this, *iSettingsManager, |
232 if(iProfile) |
133 iNextContext, aAlarm); |
233 |
|
234 { |
|
235 MProEngTones& tones = iProfile->ProfileTones(); |
|
236 |
|
237 switch (aAlarm) |
|
238 { |
|
239 case CSystemToneService::EIncomingCall: |
|
240 { |
|
241 iFileName.Set(tones.RingingTone1()); |
|
242 iAudioPreference = KAudioPrefIncomingCall ; |
|
243 iAudioPriority = KAudioPriorityRingingTone ; |
|
244 break; |
|
245 } |
|
246 case CSystemToneService::EIncomingCallLine2: |
|
247 { |
|
248 iFileName.Set(tones.RingingTone2()); |
|
249 iAudioPreference = KAudioPrefIncomingCall; |
|
250 iAudioPriority = KAudioPriorityRingingTone ; |
|
251 break; |
|
252 } |
|
253 case CSystemToneService::EIncomingDataCall: |
|
254 { |
|
255 iFileName.Set(tones.VideoCallRingingTone()); |
|
256 iAudioPreference = KAudioPrefIncomingDataCall; |
|
257 iAudioPriority = KAudioPriorityRealOnePlayer; |
|
258 break; |
|
259 } |
|
260 default: |
|
261 { |
|
262 iFileName.Set(KDefaultFile); |
|
263 iAudioPreference = KAudioPrefAlarmClock ; |
|
264 iAudioPriority = KAudioPriorityAlarm; |
|
265 break; |
|
266 } |
|
267 } |
|
268 } |
|
269 else |
|
270 { |
|
271 iFileName.Set(KDefaultFile); |
|
272 iAudioPreference = KAudioPrefDefaultTone; |
|
273 iAudioPriority = KAudioPriorityWarningTone ; |
|
274 |
|
275 } |
|
276 |
|
277 CStsPlayer* player = CStsPlayer::CreateAlarmPlayer(*this, aAlarm, |
|
278 iNextContext, iFileName, iVolume, |
|
279 iAudioPreference, iAudioPriority); |
|
280 if (player != 0) |
134 if (player != 0) |
281 { |
135 { |
282 iPlayerMap[iNextContext] = new CPlayerNode(player, aObserver); |
136 iPlayerMap[iNextContext] = new CPlayerNode(player, aObserver); |
283 aAlarmContext = iNextContext; |
137 aAlarmContext = iNextContext; |
284 iNextContext++; |
138 iNextContext++; |
291 //TODO: Add trace here |
145 //TODO: Add trace here |
292 aAlarmContext = 0; |
146 aAlarmContext = 0; |
293 } |
147 } |
294 } |
148 } |
295 |
149 |
296 void CSts::StopAlarm(unsigned int aAlarmContext) |
150 void CSts::PlayAlarm(CSystemToneService::TToneType aTone, |
297 { |
|
298 CPlayerNode* node = iPlayerMap[aAlarmContext]; |
|
299 iPlayerMap.erase(aAlarmContext); |
|
300 if (node) |
|
301 { |
|
302 node->Player()->Stop(); |
|
303 delete node; |
|
304 } |
|
305 else |
|
306 { |
|
307 //TODO: Add trace here |
|
308 } |
|
309 } |
|
310 |
|
311 |
|
312 void CSts::PlayToneStop(CSystemToneService::TToneType aTone, |
|
313 unsigned int& aAlarmContext, MStsPlayAlarmObserver& aObserver) |
151 unsigned int& aAlarmContext, MStsPlayAlarmObserver& aObserver) |
314 { |
152 { |
315 |
153 CStsPlayer* player = CStsPlayer::Create(*this, *iSettingsManager, |
316 if(iProfile) |
154 iNextContext, aTone); |
317 |
|
318 { |
|
319 MProEngTones& tones = iProfile->ProfileTones(); |
|
320 |
|
321 switch (aTone) |
|
322 { |
|
323 case CSystemToneService::EEmailAlert: |
|
324 { |
|
325 iFileName.Set(tones.EmailAlertTone()); |
|
326 iAudioPreference = KAudioPrefNewSMS; |
|
327 iAudioPriority = KAudioPriorityRecvMsg ; |
|
328 break; |
|
329 } |
|
330 case CSystemToneService::ESmsAlert: |
|
331 { |
|
332 iFileName.Set(tones.MessageAlertTone()); |
|
333 iAudioPreference = KAudioPrefNewSMS; |
|
334 iAudioPriority = KAudioPriorityRecvMsg; |
|
335 break; |
|
336 } |
|
337 case CSystemToneService::EMmsAlert: |
|
338 { |
|
339 iFileName.Set(tones.MessageAlertTone()); |
|
340 iAudioPreference = KAudioPrefNewSMS; |
|
341 iAudioPriority = KAudioPriorityRecvMsg; |
|
342 break; |
|
343 } |
|
344 case CSystemToneService::EChatAlert: |
|
345 { |
|
346 iFileName.Set(tones.MessageAlertTone()); |
|
347 iAudioPreference = KAudioPrefNewSMS ; |
|
348 iAudioPriority = KAudioPriorityRecvMsg; |
|
349 break; |
|
350 } |
|
351 case CSystemToneService::EWarningBeep: |
|
352 { |
|
353 iAudioPreference = KAudioPrefWarning; |
|
354 iAudioPriority = KAudioPriorityWarningTone ; |
|
355 if (iWarningToneEnabled) |
|
356 iFileName.Set(KDefaultFile); |
|
357 else |
|
358 iVolume = 0; |
|
359 |
|
360 break; |
|
361 } |
|
362 default: |
|
363 { |
|
364 iFileName.Set(KDefaultFile); |
|
365 iAudioPreference = KAudioPrefDefaultTone; |
|
366 iAudioPriority = KAudioPriorityWarningTone ; |
|
367 break; |
|
368 } |
|
369 } |
|
370 } |
|
371 |
|
372 else |
|
373 { |
|
374 iFileName.Set(KDefaultFile); |
|
375 iAudioPreference = KAudioPrefDefaultTone; |
|
376 iAudioPriority = KAudioPriorityWarningTone ; |
|
377 } |
|
378 |
|
379 CStsPlayer* player = CStsPlayer::CreateTonePlayer(*this, aTone, |
|
380 iNextContext, iFileName, iVolume, |
|
381 iAudioPreference, iAudioPriority); |
|
382 if (player != 0) |
155 if (player != 0) |
383 { |
156 { |
384 iPlayerMap[iNextContext] = new CPlayerNode(player, aObserver); |
157 iPlayerMap[iNextContext] = new CPlayerNode(player, aObserver); |
385 aAlarmContext = iNextContext; |
158 aAlarmContext = iNextContext; |
386 iNextContext++; |
159 iNextContext++; |
393 //TODO: Add trace here |
166 //TODO: Add trace here |
394 aAlarmContext = 0; |
167 aAlarmContext = 0; |
395 } |
168 } |
396 } |
169 } |
397 |
170 |
398 |
171 void CSts::StopAlarm(unsigned int aAlarmContext) |
|
172 { |
|
173 CPlayerNode* node = iPlayerMap[aAlarmContext]; |
|
174 iPlayerMap.erase(aAlarmContext); |
|
175 if (node) |
|
176 { |
|
177 node->Player()->Stop(); |
|
178 delete node; |
|
179 } |
|
180 else |
|
181 { |
|
182 //TODO: Add trace here |
|
183 } |
|
184 } |
399 |
185 |
400 void CSts::CleanUpPlayers() |
186 void CSts::CleanUpPlayers() |
401 { |
187 { |
402 while (!iPlayerMap.empty()) |
188 while (!iPlayerMap.empty()) |
403 { |
189 { |
404 //TODO: Add trace here |
190 //TODO: Add trace here |
405 StopAlarm(iPlayerMap.begin()->first); |
191 StopAlarm(iPlayerMap.begin()->first); |
406 } |
192 } |
407 } |
193 } |
408 |
194 |
409 void CSts::PlayComplete(unsigned int aContext) |
195 void CSts::PlayComplete(unsigned int aContext) |
410 { |
196 { |
411 CPlayerNode* node = iPlayerMap[aContext]; |
197 CPlayerNode* node = iPlayerMap[aContext]; |