21 #include <e32std.h> |
21 #include <e32std.h> |
22 #include <e32debug.h> |
22 #include <e32debug.h> |
23 |
23 |
24 #include <centralrepository.h> |
24 #include <centralrepository.h> |
25 #include <ecom/implementationinformation.h> |
25 #include <ecom/implementationinformation.h> |
|
26 #include <ProfileEngineInternalCRKeys.h> |
26 |
27 |
27 #include "tactilefeedbackprivatecrkeys.h" |
28 #include "tactilefeedbackprivatecrkeys.h" |
28 #include "tactilefeedbackinternalpskeys.h" |
29 #include "tactilefeedbackinternalpskeys.h" |
29 #include "tactilefeedbacktrace.h" |
30 #include "tactilefeedbacktrace.h" |
30 |
31 |
101 // |
102 // |
102 CTactileFeedbackResolver::~CTactileFeedbackResolver() |
103 CTactileFeedbackResolver::~CTactileFeedbackResolver() |
103 { |
104 { |
104 delete iCenRepNotifier; |
105 delete iCenRepNotifier; |
105 delete iRepository; |
106 delete iRepository; |
|
107 delete iProfileRepository; |
106 delete iPropertyWatcher; |
108 delete iPropertyWatcher; |
107 delete iHapticsPlayer; |
109 delete iHapticsPlayer; |
108 delete iAudioPlayer; |
110 delete iAudioPlayer; |
109 REComSession::FinalClose(); |
111 REComSession::FinalClose(); |
110 } |
112 } |
111 |
113 |
112 TBool CTactileFeedbackResolver::IsHigherThanPlaying( |
114 TBool CTactileFeedbackResolver::IsHigherThanPlaying( |
113 TTouchLogicalFeedback aFeedback ) const |
115 TTouchLogicalFeedback aFeedback ) const |
114 { |
116 { |
115 if( aFeedback == ETouchFeedbackList && |
117 if( aFeedback == ETouchFeedbackBasicItem && |
116 iLastFeedback == ETouchFeedbackSensitiveList ) |
118 iLastFeedback == ETouchFeedbackSensitiveItem ) |
117 { |
119 { |
118 return ETrue; |
120 return ETrue; |
119 } |
121 } |
120 |
122 |
121 return ( ( aFeedback == ETouchFeedbackPopUp || |
123 return ( aFeedback == ETouchFeedbackPopUp || |
122 aFeedback == ETouchFeedbackIncreasingPopUp || |
124 aFeedback == ETouchFeedbackPopupOpen || |
123 aFeedback == ETouchFeedbackDecreasingPopUp || |
125 aFeedback == ETouchFeedbackPopupClose || |
124 aFeedback == ETouchFeedbackBoundaryList || |
126 aFeedback == ETouchFeedbackBounceEffect ) && |
125 aFeedback == ETouchFeedbackOptionsMenuOpened || |
|
126 aFeedback == ETouchFeedbackOptionsMenuClosed || |
|
127 aFeedback == ETouchFeedbackSubMenuOpened || |
|
128 aFeedback == ETouchFeedbackSubMenuClosed ) && |
|
129 ( iLastFeedback == ETouchFeedbackBasicButton || |
127 ( iLastFeedback == ETouchFeedbackBasicButton || |
130 iLastFeedback == ETouchFeedbackSensitiveButton || |
128 iLastFeedback == ETouchFeedbackSensitiveButton || |
131 iLastFeedback == ETouchFeedbackSensitiveList || |
129 iLastFeedback == ETouchFeedbackSensitiveItem || |
132 iLastFeedback == ETouchFeedbackList || |
130 iLastFeedback == ETouchFeedbackBasicItem || |
133 iLastFeedback == ETouchFeedbackCheckbox ) ); |
131 iLastFeedback == ETouchFeedbackCheckbox ); |
134 } |
132 } |
135 |
133 |
136 // --------------------------------------------------------------------------- |
134 // --------------------------------------------------------------------------- |
137 // We play feedback in case all three conditions are met: |
135 // We play feedback in case all three conditions are met: |
138 // |
136 // |
145 TTouchLogicalFeedback aFeedback, |
143 TTouchLogicalFeedback aFeedback, |
146 TBool aPlayVibra, |
144 TBool aPlayVibra, |
147 TBool aPlayAudio ) |
145 TBool aPlayAudio ) |
148 { |
146 { |
149 // TRACE("CTactileFeedbackResolver::PlayFeedback - Begin"); |
147 // TRACE("CTactileFeedbackResolver::PlayFeedback - Begin"); |
|
148 |
|
149 // A temporary solution to change effect of ETouchFeedbackSensitiveSlider, |
|
150 // it will be removed when the IVT files is ready. |
|
151 if( ETouchFeedbackSensitiveSlider == aFeedback ) |
|
152 { |
|
153 aFeedback = ETouchFeedbackBasicSlider; |
|
154 } |
|
155 |
150 // Feedback filtering in order to prevent too many feedbacks |
156 // Feedback filtering in order to prevent too many feedbacks |
151 // in a short time (e.g. when doing text selection). |
157 // in a short time (e.g. when doing text selection). |
152 TTime now; |
158 TTime now; |
153 now.UniversalTime(); |
159 now.UniversalTime(); |
154 |
160 |
188 if ( !iAudioEnabled ) |
194 if ( !iAudioEnabled ) |
189 { |
195 { |
190 aPlayAudio = EFalse; |
196 aPlayAudio = EFalse; |
191 } |
197 } |
192 |
198 |
|
199 // check silent mode, if device is in silent mode, |
|
200 // audio feedback is not allowed. |
|
201 TInt err; |
|
202 TInt isAudioSupported; |
|
203 err = iProfileRepository->Get( KProEngSilenceMode, isAudioSupported ); |
|
204 if ( KErrNone == err && 1 == isAudioSupported ) |
|
205 { |
|
206 aPlayAudio = EFalse; |
|
207 } |
|
208 |
193 if ( ( aPlayVibra || aPlayAudio ) && // #1 |
209 if ( ( aPlayVibra || aPlayAudio ) && // #1 |
194 aFeedback != ETouchFeedbackNone ) // #2 |
210 aFeedback != ETouchFeedbackNone ) // #2 |
195 { |
211 { |
196 OstTrace0( TACTILE_PERFORMANCE, TACTILE_RESOLVER_PLAY_FEEDBACK_1, "e_TACTILE_RESOLVER_PLAY_FEEDBACK 1"); |
212 OstTrace0( TACTILE_PERFORMANCE, TACTILE_RESOLVER_PLAY_FEEDBACK_1, "e_TACTILE_RESOLVER_PLAY_FEEDBACK 1"); |
197 |
213 |
232 void CTactileFeedbackResolver::InitializeCrKeysL() |
248 void CTactileFeedbackResolver::InitializeCrKeysL() |
233 { |
249 { |
234 if ( !iRepository ) |
250 if ( !iRepository ) |
235 { |
251 { |
236 iRepository = CRepository::NewL( KCRUidTactileFeedback ); |
252 iRepository = CRepository::NewL( KCRUidTactileFeedback ); |
237 } |
253 } |
|
254 |
|
255 if ( !iProfileRepository ) |
|
256 { |
|
257 iProfileRepository = CRepository::NewL( KCRUidProfileEngine ); |
|
258 } |
238 |
259 |
239 TInt minInterval(0); |
260 TInt minInterval(0); |
240 // Read and store minimun feedback interfal |
261 // Read and store minimun feedback interfal |
241 User::LeaveIfError( iRepository->Get( KTactileFeedbackMinimumInterval, |
262 User::LeaveIfError( iRepository->Get( KTactileFeedbackMinimumInterval, |
242 minInterval ) ); |
263 minInterval ) ); |
367 iHapticsPlayer->ModifyFeedback( aIntensity ); |
388 iHapticsPlayer->ModifyFeedback( aIntensity ); |
368 } |
389 } |
369 } |
390 } |
370 |
391 |
371 // --------------------------------------------------------------------------- |
392 // --------------------------------------------------------------------------- |
372 // Stop feedback. |
393 // Stop continuous feedback. |
373 // --------------------------------------------------------------------------- |
394 // --------------------------------------------------------------------------- |
374 // |
395 // |
375 void CTactileFeedbackResolver::StopFeedback() |
396 void CTactileFeedbackResolver::StopFeedback() |
376 { |
397 { |
377 if ( iHapticsPlayer ) |
398 if ( iHapticsPlayer ) |
387 // |
408 // |
388 void CTactileFeedbackResolver::PlayPreviewFeedback( TInt aLevel, |
409 void CTactileFeedbackResolver::PlayPreviewFeedback( TInt aLevel, |
389 TTouchLogicalFeedback aFeedback, |
410 TTouchLogicalFeedback aFeedback, |
390 TTouchFeedbackType aType ) |
411 TTouchFeedbackType aType ) |
391 { |
412 { |
|
413 // A temporary solution to change effect of ETouchFeedbackSensitiveSlider, |
|
414 // it will be removed when the IVT files is ready. |
|
415 if( ETouchFeedbackSensitiveSlider == aFeedback ) |
|
416 { |
|
417 aFeedback = ETouchFeedbackBasicSlider; |
|
418 } |
|
419 |
392 if ( aType & ETouchFeedbackVibra && iHapticsPlayer ) |
420 if ( aType & ETouchFeedbackVibra && iHapticsPlayer ) |
393 { |
421 { |
394 iHapticsPlayer->PlayPreviewFeedback( aLevel, aFeedback ); |
422 iHapticsPlayer->PlayPreviewFeedback( aLevel, aFeedback ); |
395 } |
423 } |
396 if ( aType & ETouchFeedbackAudio && iAudioPlayer ) |
424 if ( aType & ETouchFeedbackAudio && iAudioPlayer ) |