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