141 CAiwMenuPane& aMenuPane, |
145 CAiwMenuPane& aMenuPane, |
142 TInt aIndex, |
146 TInt aIndex, |
143 TInt /* aCascadeId */, |
147 TInt /* aCascadeId */, |
144 const CAiwGenericParamList& /* aInParamList */ ) |
148 const CAiwGenericParamList& /* aInParamList */ ) |
145 { |
149 { |
146 FeatureManager::InitializeLibL(); |
150 MUS_LOG1( "mus: [AIWPRO] -> CMusAiwProvider::InitializeMenuPaneL( %d )", |
147 TBool support = FeatureManager::FeatureSupported( KFeatureIdMultimediaSharing ); |
|
148 FeatureManager::UnInitializeLib(); |
|
149 if( support ) |
|
150 { |
|
151 DoInitializeMenuPaneL( aMenuPane, aIndex ); |
|
152 } |
|
153 } |
|
154 |
|
155 |
|
156 // ----------------------------------------------------------------------------- |
|
157 // Initializes menu pane by adding provider-specific menu items. |
|
158 // ----------------------------------------------------------------------------- |
|
159 // |
|
160 void CMusAiwProvider::DoInitializeMenuPaneL( |
|
161 CAiwMenuPane& aMenuPane, |
|
162 TInt aIndex) |
|
163 { |
|
164 MUS_LOG1( "mus: [AIWPRO] -> CMusAiwProvider::DoInitializeMenuPaneL( %d )", |
|
165 aIndex ) |
151 aIndex ) |
166 |
152 |
167 if( iResourceFileName == NULL ) |
153 if( iResourceFileName == NULL ) |
168 { |
154 { |
169 iResourceFileName = MusResourceFinderUtil::ResourcePathL( |
155 iResourceFileName = MusResourceFinderUtil::ResourcePathL( |
170 KMusAiwProviderResource ); |
156 KMusAiwProviderResource ); |
171 } |
157 } |
172 TFileName filename ( *iResourceFileName ); |
158 TFileName filename ( *iResourceFileName ); |
173 MUS_LOG_TDESC( "mus: [AIWPRO] Resource filename: ", filename ) |
159 MUS_LOG_TDESC( "mus: [AIWPRO] Resource filename: ", filename ) |
174 |
160 |
175 if( ApplicationRunningL() ) |
161 // If app running but hidden from fast swap it means that application |
|
162 // is hidden from user and options menu should look same as |
|
163 // when application is not yet started |
|
164 if( ApplicationRunningL() && !HiddenFromFastSwapL() ) |
176 { |
165 { |
177 MUS_LOG( "mus: [AIWPRO] Application already running:\ |
166 MUS_LOG( "mus: [AIWPRO] Application already running:\ |
178 giving _continue sharing_ menu command" ) |
167 giving _continue sharing_ menu command" ) |
179 // Application is already started. Add resources to menu items. |
168 // Application is already started. Add resources to menu items. |
180 aMenuPane.AddMenuItemsL( filename, |
169 aMenuPane.AddMenuItemsL( filename, |
189 if ( MultimediaSharingSettings::OperatorVariantSettingL() |
178 if ( MultimediaSharingSettings::OperatorVariantSettingL() |
190 == MusSettingsKeys::EOperatorSpecific ) |
179 == MusSettingsKeys::EOperatorSpecific ) |
191 { |
180 { |
192 OperatorVariantStartUpL( filename, aMenuPane, aIndex ); |
181 OperatorVariantStartUpL( filename, aMenuPane, aIndex ); |
193 } |
182 } |
|
183 else if ( IsFastStartupModeL() ) |
|
184 { |
|
185 FastModeStartUpL( filename, aMenuPane, aIndex ); |
|
186 } |
194 else |
187 else |
195 { |
188 { |
196 NoVariationStartUpL( filename, aMenuPane, aIndex ); |
189 NoVariationStartUpL( filename, aMenuPane, aIndex ); |
197 } |
190 } |
198 } |
191 } |
199 |
192 |
200 |
193 |
201 MUS_LOG( "mus: [AIWPRO] <- CMusAiwProvider::DoInitializeMenuPaneL" ) |
194 MUS_LOG( "mus: [AIWPRO] <- CMusAiwProvider::InitializeMenuPaneL" ) |
202 } |
195 } |
203 |
196 |
204 // ----------------------------------------------------------------------------- |
197 // ----------------------------------------------------------------------------- |
205 // |
198 // |
206 // |
199 // |
207 // ----------------------------------------------------------------------------- |
200 // ----------------------------------------------------------------------------- |
208 // |
201 // |
209 void CMusAiwProvider::DoInitialiseL() |
202 void CMusAiwProvider::DoInitialiseL() |
210 { |
203 { |
211 MUS_LOG( "mus: [AIWPRO] -> CMusAiwProvider::DoInitialiseL") |
204 MUS_LOG( "mus: [AIWPRO] -> CMusAiwProvider::DoInitialiseL") |
212 |
205 |
|
206 if ( !iIndicator ) |
|
207 { |
|
208 MUS_LOG( "mus: [AIWPRO] : creating indicator") |
|
209 iIndicator = CMusIndicatorApi::NewL(); |
|
210 } |
213 MUS_LOG( "mus: [AIWPRO] <- CMusAiwProvider::DoInitialiseL") |
211 MUS_LOG( "mus: [AIWPRO] <- CMusAiwProvider::DoInitialiseL") |
214 } |
212 } |
215 |
213 |
216 |
214 |
217 // ----------------------------------------------------------------------------- |
215 // ----------------------------------------------------------------------------- |
250 2.Regardless of Options execution ( All options are just informative. |
248 2.Regardless of Options execution ( All options are just informative. |
251 Cant be considered as Error situation.) |
249 Cant be considered as Error situation.) |
252 3.When iAvailability plugin says OK ( Based on call,network,settingui item) |
250 3.When iAvailability plugin says OK ( Based on call,network,settingui item) |
253 4.Also in confrence and hold cases |
251 4.Also in confrence and hold cases |
254 */ |
252 */ |
255 if ( iAvailability == MultimediaSharing::ESipRegistrationPending || |
253 if ( AvailabilityOk( iAvailability ) ) |
256 iAvailability == MultimediaSharing::ESipOptionsSent || |
254 { |
257 iAvailability == MultimediaSharing::EMultimediaSharingAvailable || |
255 MUS_LOG1( "mus: [AIWPRO] Showing AIW Menu -> iAvailability = %d ", |
258 iAvailability == MultimediaSharing::EErrCallOnHold || |
256 iAvailability ) |
259 iAvailability == MultimediaSharing::EErrConferenceCall || |
|
260 iAvailability == MultimediaSharing::ESipOptionsNotCapable || |
|
261 iAvailability == MultimediaSharing::ESipOptionsNotSent || |
|
262 iAvailability == MultimediaSharing::EErrNetwork || |
|
263 iAvailability == MultimediaSharing::EManualActivation || |
|
264 iAvailability == MultimediaSharing::EErrConnection || |
|
265 iAvailability == MultimediaSharing::EErrSipRegistration ) |
|
266 { |
|
267 MUS_LOG1( "mus: [AIWPRO] Showing AIW Menu -> iAvailability = %d ",iAvailability ) |
|
268 TInt resourceID = R_MUSAIWPROVIDER_BASIC_CASCADED_SUBMENU ; |
257 TInt resourceID = R_MUSAIWPROVIDER_BASIC_CASCADED_SUBMENU ; |
269 if ( !FeatureManager::FeatureSupported( KFeatureIdCamera ) ) |
258 if ( !FeatureManager::FeatureSupported( KFeatureIdCamera ) ) |
270 { |
259 { |
271 MUS_LOG( "mus: [AIWPRO] Camera Not Available" ) |
260 MUS_LOG( "mus: [AIWPRO] Camera Not Available" ) |
272 resourceID = R_MUSAIWPROVIDER_NOCAMERA_CASCADED_SUBMENU ; |
261 resourceID = R_MUSAIWPROVIDER_NOCAMERA_CASCADED_SUBMENU ; |
298 |
288 |
299 // In operator specific mode Multimediasharing Menu items |
289 // In operator specific mode Multimediasharing Menu items |
300 // should be shown in call menu only if iAvailability plugin returns OK |
290 // should be shown in call menu only if iAvailability plugin returns OK |
301 if ( iAvailability == MultimediaSharing::EMultimediaSharingAvailable ) |
291 if ( iAvailability == MultimediaSharing::EMultimediaSharingAvailable ) |
302 { |
292 { |
303 MUS_LOG1( "mus: [AIWPRO] Showing AIW Menu -> iAvailability = %d ", iAvailability ) |
293 MUS_LOG1( "mus: [AIWPRO] Showing AIW Menu -> iAvailability = %d ", |
|
294 iAvailability ) |
304 TInt resourceID = R_MUSAIWPROVIDER_BASIC_CASCADED_SUBMENU ; |
295 TInt resourceID = R_MUSAIWPROVIDER_BASIC_CASCADED_SUBMENU ; |
305 if ( !FeatureManager::FeatureSupported( KFeatureIdCamera ) ) |
296 if ( !FeatureManager::FeatureSupported( KFeatureIdCamera ) ) |
306 { |
297 { |
307 MUS_LOG( "mus: [AIWPRO] Camera Not Available" ) |
298 MUS_LOG( "mus: [AIWPRO] Camera Not Available" ) |
308 resourceID = R_MUSAIWPROVIDER_NOCAMERA_CASCADED_SUBMENU ; |
299 resourceID = R_MUSAIWPROVIDER_NOCAMERA_CASCADED_SUBMENU ; |
312 KMusAiwProviderUid, |
303 KMusAiwProviderUid, |
313 aIndex ); |
304 aIndex ); |
314 } |
305 } |
315 else |
306 else |
316 { |
307 { |
317 MUS_LOG1( "mus: [AIWPRO] Not Showing AIW Menu -> iAvailability = %d ",iAvailability ) |
308 MUS_LOG1( "mus: [AIWPRO] Not Showing AIW Menu -> iAvailability = %d ", |
|
309 iAvailability ) |
318 } |
310 } |
319 |
311 |
320 CleanupStack::PopAndDestroy( manager ); |
312 CleanupStack::PopAndDestroy( manager ); |
321 |
313 |
322 MUS_LOG( "mus: [AIWPRO] <- CMusAiwProvider::OperatorVariantStartUpL" ) |
314 MUS_LOG( "mus: [AIWPRO] <- CMusAiwProvider::OperatorVariantStartUpL" ) |
323 } |
315 } |
324 |
316 |
|
317 // ----------------------------------------------------------------------------- |
|
318 // In fast mode, Multimediasharing Menu items |
|
319 // should not be shown before options queries have completed. Outcome |
|
320 // of queries does not matter. |
|
321 // ----------------------------------------------------------------------------- |
|
322 // |
|
323 void CMusAiwProvider::FastModeStartUpL( |
|
324 TFileName& aFileName, CAiwMenuPane& aMenuPane, TInt aIndex ) |
|
325 { |
|
326 MUS_LOG( "mus: [AIWPRO] -> CMusAiwProvider::FastModeStartUpL" ) |
|
327 |
|
328 if ( MultimediaSharingSettings::CapabilityQuerySettingL() != |
|
329 MusSettingsKeys::EParallel ) |
|
330 { |
|
331 // If parallel capability query is not enabled, use normal startup as |
|
332 // capability query is essential for fast session setup |
|
333 NoVariationStartUpL( aFileName, aMenuPane, aIndex ); |
|
334 } |
|
335 else |
|
336 { |
|
337 CMusManager* manager = CMusManager::NewLC(); |
|
338 iAvailability = manager->AvailabilityL(); |
|
339 |
|
340 if ( iAvailability == MultimediaSharing::ESipRegistrationPending || |
|
341 iAvailability == MultimediaSharing::ESipOptionsSent || |
|
342 !AvailabilityOk( iAvailability ) ) |
|
343 { |
|
344 // Need to wait for options to complete |
|
345 MUS_LOG1( "mus: [AIWPRO] Not Showing AIW Menu -> iAvailability = %d ", |
|
346 iAvailability ) |
|
347 } |
|
348 else |
|
349 { |
|
350 // It does not matter what was result of query |
|
351 MUS_LOG1( "mus: [AIWPRO] Showing AIW Menu -> iAvailability = %d ", |
|
352 iAvailability ) |
|
353 TInt resourceID = R_MUSAIWPROVIDER_BASIC_CASCADED_SUBMENU ; |
|
354 if ( !FeatureManager::FeatureSupported( KFeatureIdCamera ) ) |
|
355 { |
|
356 MUS_LOG( "mus: [AIWPRO] Camera Not Available" ) |
|
357 resourceID = R_MUSAIWPROVIDER_NOCAMERA_CASCADED_SUBMENU ; |
|
358 } |
|
359 aMenuPane.AddMenuItemsL( aFileName, |
|
360 resourceID, |
|
361 KMusAiwProviderUid, |
|
362 aIndex ); |
|
363 } |
|
364 |
|
365 CleanupStack::PopAndDestroy( manager ); |
|
366 } |
|
367 |
|
368 MUS_LOG( "mus: [AIWPRO] <- CMusAiwProvider::FastModeStartUpL" ) |
|
369 } |
|
370 |
325 // ----------------------------------------------------------------------------- |
371 // ----------------------------------------------------------------------------- |
326 // |
372 // |
327 // ----------------------------------------------------------------------------- |
373 // ----------------------------------------------------------------------------- |
328 // |
374 // |
329 HBufC* CMusAiwProvider::ErrorNoteTextLC( TInt aError ) |
375 HBufC* CMusAiwProvider::ErrorNoteTextLC( TInt aError ) |
499 { |
545 { |
500 case EMusCommandLiveShare: |
546 case EMusCommandLiveShare: |
501 { |
547 { |
502 MUS_LOG( "mus: [AIWPRO] \ |
548 MUS_LOG( "mus: [AIWPRO] \ |
503 EMusCommandLiveShare: Will now attempt to start Mus." ) |
549 EMusCommandLiveShare: Will now attempt to start Mus." ) |
504 TRAP( error, manager->StartApplicationL( |
550 TRAP( error, StartApplicationL( *manager, MultimediaSharing::EMusLiveVideo ) ); |
505 MultimediaSharing::EMusLiveVideo ) ); |
|
506 break; |
551 break; |
507 } |
552 } |
508 case EMusCommandClipShare: |
553 case EMusCommandClipShare: |
509 { |
554 { |
510 MUS_LOG( "mus: [AIWPRO] \ |
555 MUS_LOG( "mus: [AIWPRO] \ |
511 EMusCommandClipShare: Will now attempt to start Mus." ) |
556 EMusCommandClipShare: Will now attempt to start Mus." ) |
512 TRAP( error, manager->StartApplicationL( |
557 TRAP( error, StartApplicationL( *manager, MultimediaSharing::EMusClipVideo ) ); |
513 MultimediaSharing::EMusClipVideo ) ); |
558 |
514 break; |
559 break; |
515 } |
560 } |
516 case EMusCommandImageShare: |
561 case EMusCommandImageShare: |
517 { |
562 { |
518 MUS_LOG( "mus: [AIWPRO] \ |
563 MUS_LOG( "mus: [AIWPRO] \ |
519 EMusCommandImageShare: Will now attempt to start Mus." ) |
564 EMusCommandImageShare: Will now attempt to start Mus." ) |
520 TRAP( error, manager->StartApplicationL( |
565 TRAP( error, StartApplicationL( *manager, MultimediaSharing::EMusStillImage ) ); |
521 MultimediaSharing::EMusStillImage ) ); |
|
522 break; |
566 break; |
523 } |
567 } |
524 case EMusCommandContinue: |
568 case EMusCommandContinue: |
525 { |
569 { |
526 MUS_LOG( "mus: [AIWPRO] \ |
570 MUS_LOG( "mus: [AIWPRO] \ |
527 EMusCommandContinue: Will now attempt to start/continue Mus." ) |
571 EMusCommandContinue: Will now attempt to start/continue Mus." ) |
528 TRAP( error, manager->StartApplicationL( |
572 TRAP( error, StartApplicationL( *manager, MultimediaSharing::EMusContinue ) ); |
529 MultimediaSharing::EMusContinue ) ); |
|
530 break; |
573 break; |
531 } |
574 } |
532 default: |
575 default: |
533 { |
576 { |
534 MUS_LOG( "mus: [AIWPRO] \ |
577 MUS_LOG( "mus: [AIWPRO] \ |
546 } |
589 } |
547 |
590 |
548 MUS_LOG( "mus: [AIWPRO] <- CMusAiwProvider::HandleMenuCmdL" ) |
591 MUS_LOG( "mus: [AIWPRO] <- CMusAiwProvider::HandleMenuCmdL" ) |
549 } |
592 } |
550 |
593 |
|
594 // ----------------------------------------------------------------------------- |
|
595 // |
|
596 // ----------------------------------------------------------------------------- |
|
597 // |
|
598 TBool CMusAiwProvider::AvailabilityOk( |
|
599 MultimediaSharing::TMusAvailabilityStatus aAvailability ) const |
|
600 { |
|
601 return ( |
|
602 aAvailability == MultimediaSharing::ESipRegistrationPending || |
|
603 aAvailability == MultimediaSharing::ESipOptionsSent || |
|
604 aAvailability == MultimediaSharing::EMultimediaSharingAvailable || |
|
605 aAvailability == MultimediaSharing::EErrCallOnHold || |
|
606 aAvailability == MultimediaSharing::EErrConferenceCall || |
|
607 aAvailability == MultimediaSharing::ESipOptionsNotCapable || |
|
608 aAvailability == MultimediaSharing::ESipOptionsNotSent || |
|
609 aAvailability == MultimediaSharing::EErrNetwork || |
|
610 aAvailability == MultimediaSharing::EManualActivation || |
|
611 aAvailability == MultimediaSharing::EErrConnection || |
|
612 aAvailability == MultimediaSharing::EErrSipRegistration ); |
|
613 } |
|
614 |
|
615 // ----------------------------------------------------------------------------- |
|
616 // App's fastswap visibility status is interesting only in fast mode. |
|
617 // ----------------------------------------------------------------------------- |
|
618 // |
|
619 TBool CMusAiwProvider::HiddenFromFastSwapL() |
|
620 { |
|
621 MUS_LOG( "mus: [AIWPRO] -> CMusAiwProvider::HiddenFromFastSwapL" ) |
|
622 |
|
623 TBool hidden( EFalse ); |
|
624 if ( !IsFastStartupModeL() ) |
|
625 { |
|
626 MUS_LOG( "mus: [AIWPRO] <- CMusAiwProvider::HiddenFromFastSwapL" ) |
|
627 return hidden; |
|
628 } |
|
629 |
|
630 const TInt KMusAiwMaxHiddenAppSizeMod = 4; |
|
631 TBuf16 <KMusAiwMaxHiddenAppSizeMod*KMaxHiddenApps> hiddenList; |
|
632 TInt err = RProperty::Get( KPSUidUikon, KUikAppHiddenList, hiddenList ); |
|
633 MUS_LOG1( "mus: [AIWPRO] Hidden list read:%d", err ) |
|
634 |
|
635 if ( err == KErrNone ) |
|
636 { |
|
637 TBool continueFinding( ETrue ); |
|
638 MUS_LOG1( "mus: [AIWPRO] Hidden list len:%d", hiddenList.Length() ) |
|
639 for ( TInt i = 0; i < KMaxHiddenApps && continueFinding; i++ ) |
|
640 { |
|
641 // 32-bit uid values are retrieved in two 16-bit parts |
|
642 __ASSERT_ALWAYS( hiddenList.Length() > i + 1, User::Leave( KErrEof ) ); |
|
643 TUint32 listValue = hiddenList[ i ] << 16; |
|
644 listValue += hiddenList[ ++i ]; |
|
645 // the value NULL marks the end of array -> leave the loop |
|
646 if ( listValue ) |
|
647 { |
|
648 MUS_LOG1( "mus: [AIWPRO] Hidden uid:%d", listValue ) |
|
649 if ( listValue == KMusUiUid ) |
|
650 { |
|
651 hidden = ETrue; |
|
652 continueFinding = EFalse; |
|
653 } |
|
654 } |
|
655 else |
|
656 { |
|
657 // Zero value means ending of list |
|
658 continueFinding = EFalse; |
|
659 } |
|
660 } |
|
661 } |
|
662 |
|
663 MUS_LOG1( "mus: [AIWPRO] <- CMusAiwProvider::HiddenFromFastSwapL:%d", hidden ) |
|
664 |
|
665 return hidden; |
|
666 } |
|
667 |
|
668 // ----------------------------------------------------------------------------- |
|
669 // Check whether fast mode is enabled, take in count that key |
|
670 // might not be present. |
|
671 // ----------------------------------------------------------------------------- |
|
672 // |
|
673 TBool CMusAiwProvider::IsFastStartupModeL() |
|
674 { |
|
675 TBool fastModeEnabled( EFalse ); |
|
676 MusSettingsKeys::TFastMode fastMode( MusSettingsKeys::EFastModeOff ); |
|
677 TRAPD( err, fastMode = MultimediaSharingSettings::FastStartupModeL() ); |
|
678 if ( err == KErrNoMemory ) |
|
679 { |
|
680 User::Leave( err ); |
|
681 } |
|
682 if ( err == KErrNone ) |
|
683 { |
|
684 fastModeEnabled = ( fastMode == MusSettingsKeys::EFastModeOn ); |
|
685 } |
|
686 return fastModeEnabled; |
|
687 } |
|
688 |
|
689 // ----------------------------------------------------------------------------- |
|
690 // If fast mode is enabled and app is running and hidden, it has been started |
|
691 // with live use-case but user does not know that. If user tries to do |
|
692 // clip usecase in such situation, use case is just updated and engine |
|
693 // takes case of bringing hidden application to foreground. |
|
694 // ----------------------------------------------------------------------------- |
|
695 // |
|
696 void CMusAiwProvider::StartApplicationL( |
|
697 CMusManager& aManager, MultimediaSharing::TMusUseCase aUseCase ) |
|
698 { |
|
699 MUS_LOG( "mus: [AIWPRO] -> CMusAiwProvider::StartApplicationL" ) |
|
700 |
|
701 TBool startApp( ETrue ); |
|
702 if ( IsFastStartupModeL() && aUseCase == MultimediaSharing::EMusClipVideo && |
|
703 ApplicationRunningL() && HiddenFromFastSwapL() ) |
|
704 { |
|
705 MUS_LOG( "mus: [AIWPRO] App already running hidden, change only usecase!" ) |
|
706 User::LeaveIfError( RProperty::Set( |
|
707 NMusSessionApi::KCategoryUid, NMusSessionApi::KUseCase, aUseCase ) ); |
|
708 startApp = EFalse; |
|
709 } |
|
710 |
|
711 if ( startApp ) |
|
712 { |
|
713 aManager.StartApplicationL( aUseCase ); |
|
714 } |
|
715 |
|
716 MUS_LOG( "mus: [AIWPRO] <- CMusAiwProvider::StartApplicationL" ) |
|
717 } |
|
718 |
551 // end of file |
719 // end of file |