# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1274780352 -10800 # Node ID 56b11cf8addb8b452ec18e71d66bbad6ecd94f44 # Parent 70a8526f03f2ff0a951a2c0ef771878120ae3d6d Revision: 201019 Kit: 2010121 diff -r 70a8526f03f2 -r 56b11cf8addb mpxmusicplayer/app/src/mpxappui.cpp --- a/mpxmusicplayer/app/src/mpxappui.cpp Tue May 11 16:10:56 2010 +0300 +++ b/mpxmusicplayer/app/src/mpxappui.cpp Tue May 25 12:39:12 2010 +0300 @@ -159,6 +159,7 @@ const TUid KCRUidMPXMPSettings = {0x101FFCDC}; const TUint32 KMPXMPPlaybackRandomMode = 0x0B; const TUint32 KMPXMPPlaybackRepeatMode = 0x0C; +const TInt KIMMusicPluginUid = 0x10282960; // ======== MEMBER FUNCTIONS ======== @@ -3415,15 +3416,45 @@ MMPXPlaybackUtility* activePlaybackUtility = MMPXPlaybackUtility::UtilityL( KPbModeActivePlayer ); - MMPXPlayer* player = - activePlaybackUtility->PlayerManager().CurrentPlayer(); + + MMPXSource* source = activePlaybackUtility->Source(); + CMPXCollectionPlaylist* pl = NULL; + if( source ) + { + CMPXCollectionPlaylist* pl = source->PlaylistL(); + if (pl) + { + CleanupStack::PushL( pl ); + const CMPXCollectionPath& path = pl->Path(); + if(path.Levels() > 0) + { + //Fix for ou1cimx1#355699 Go to Now Playing view doesn’t work after application interaction + //If active player is KIMMusicPluginUid i.e. embedded player, we don't want use it because + //eventually plugin resolver resolves then wrong plugin. Instead of it get this instance's + //default playback utility + if ((TUid::Uid(path.Id(0)).iUid) == KIMMusicPluginUid) + { + source = NULL; + activePlaybackUtility->Close(); + activePlaybackUtility = MMPXPlaybackUtility::UtilityL( KPbModeDefault ); + } + } + CleanupStack::PopAndDestroy( pl ); + pl = NULL; + } + } + TUid pluginUid( KNullUid ); RArray array; CleanupClosePushL( array ); - - MMPXSource* source = activePlaybackUtility->Source(); - CMPXCollectionPlaylist* pl = NULL; + MMPXPlayer* player = + activePlaybackUtility->PlayerManager().CurrentPlayer(); + + if (!source) + { + source = activePlaybackUtility->Source(); + } if( source ) { pl = source->PlaylistL(); diff -r 70a8526f03f2 -r 56b11cf8addb mpxmusicplayer/mediakeyhandler/inc/mpxmediakeyhandlerimp.h --- a/mpxmusicplayer/mediakeyhandler/inc/mpxmediakeyhandlerimp.h Tue May 11 16:10:56 2010 +0300 +++ b/mpxmusicplayer/mediakeyhandler/inc/mpxmediakeyhandlerimp.h Tue May 25 12:39:12 2010 +0300 @@ -342,6 +342,11 @@ * @return The check result. If mpx is foreground, return true. */ TBool IsAppForeground(); + + static VolumePopupSynchTimerCallback( TAny* aPtr ); + void DoVolumePopupSynch(); + void StartVolumePopupSynchTimer(); + private: // Data @@ -375,13 +380,12 @@ TInt iCurrentVol; TBool iIncreaseVol; TBool iMuted; - TInt iTouchVolEventCount; - TInt iVolumeEventCount; TInt iVolumeSteps; // Number of volume steps in ui #ifdef UPNP_INCLUDED CUpnpCopyCommand* iUpnpCopyCommand; #endif TInt iUpnpVolume; // absolute upnp volume value + CPeriodic* iVolumePopupSynchTimer; }; #endif // C_CMPXMEDIAKEYHANDLERIMP_H diff -r 70a8526f03f2 -r 56b11cf8addb mpxmusicplayer/mediakeyhandler/src/mpxmediakeyhandlerimp.cpp --- a/mpxmusicplayer/mediakeyhandler/src/mpxmediakeyhandlerimp.cpp Tue May 11 16:10:56 2010 +0300 +++ b/mpxmusicplayer/mediakeyhandler/src/mpxmediakeyhandlerimp.cpp Tue May 25 12:39:12 2010 +0300 @@ -68,7 +68,7 @@ const TInt KMPXVolumeSteps(1); const TInt KTenStepsVolume = 10; const TInt KTwentyStepsVolume = 20; - +const TInt KVolumePopupSynchInterval = 300000; // 300 ms const TRemConCoreApiOperationId KSupportedCoreFeatures[] = { ERemConCoreApiVolumeUp, ERemConCoreApiVolumeDown, @@ -164,7 +164,10 @@ iVolPopup->SetObserver(this); iVolPopup->SetRange(KMPXMinVolume, iVolumeSteps); iVolPopup->SetStepSize(KMPXVolumeSteps); - + // Ensure that initial value is set to popup. If not initialized, CAknVolumePopup::Value() returns 0 + // but the control appears unmuted and allows volume to be decreased out of range (panics also with Avkon 6 in UDEB) + iVolPopup->SetValue( 0 ); + HBufC* popupText = StringLoader::LoadLC( R_MPX_VOLUME_POPUP_TEXT ); iVolPopup->SetTitleTextL( *popupText ); CleanupStack::PopAndDestroy( popupText ); @@ -207,6 +210,7 @@ } } #endif + iVolumePopupSynchTimer = CPeriodic::NewL( CActive::EPriorityStandard ); } // --------------------------------------------------------------------------- @@ -232,6 +236,11 @@ // CMPXMediaKeyHandlerImp::~CMPXMediaKeyHandlerImp() { + if ( iVolumePopupSynchTimer ) + { + iVolumePopupSynchTimer->Cancel(); + delete iVolumePopupSynchTimer; + } if ( iPlaybackUtility ) { TRAP_IGNORE( iPlaybackUtility->RemoveObserverL( *this ) ); @@ -324,8 +333,6 @@ if ( forwardCommand ) { - iVolumeEventCount++; - TInt volume(0); TFileName subPlayerName; TMPXPlaybackPlayerType currentPlayerType = EPbLocal; @@ -350,6 +357,7 @@ volume = KMPXMaxVolume; } + MPX_DEBUG3( "CMPXMediaKeyHandlerImp::DoFilterAndSendCommandL: aCommandId(%d), volume(%d)" , aCommandId, volume ); iObserver->HandleMediaKeyCommand( aCommandId, volume ); } } @@ -461,91 +469,69 @@ } case EPbPropertyMute: { - if ( iTouchVolEventCount > 0 ) - { - --iTouchVolEventCount; - } - if ( iVolumeEventCount > 0 ) - { - --iVolumeEventCount; - } iMuted = aValue; - if ( iMuted ) - { - iVolPopup->SetValue( 0 ); - } - else - { - iVolPopup->SetValue( iCurrentVol ); - } + StartVolumePopupSynchTimer(); break; } case EPbPropertyVolume: { - if ( iVolPopup ) - { - if ( iTouchVolEventCount > 0 ) - { - --iTouchVolEventCount; - } - // Avkon Volume has 10 steps, but the rest of the framework - // has 100 steps. Need to scale it to 10 steps. - if ( aValue > 0 ) + // Avkon Volume has 10 steps, but the rest of the framework + // has 100 steps. Need to scale it to 10 steps. + if ( aValue > 0 ) + { + aValue = aValue * iVolumeSteps; + aValue = aValue / KPbPlaybackVolumeLevelMax; + if ( aValue > iVolumeSteps ) { - aValue = aValue * iVolumeSteps; - aValue = aValue / KPbPlaybackVolumeLevelMax; - if ( aValue > iVolumeSteps ) - { - aValue = iVolumeSteps; - } + aValue = iVolumeSteps; } + } - if( !iMuted && aValue > 0 ) // unmute - { - iMuted = EFalse; - iCurrentVol = aValue; - iVolPopup->SetValue( iCurrentVol ); - } - else if( aValue == 0 ) // mute - { - if( !iMuted ) - { - iMuted = ETrue; - iVolPopup->SetValue( 0 ); - } - } - else if ( aValue != iCurrentVol && !iTouchVolEventCount && !iVolumeEventCount ) - { - if ( aValue != 0 ) - { - iCurrentVol = aValue; - } - iVolPopup->SetValue( iCurrentVol ); - } + if( iMuted && aValue > 0 ) // unmute + { + iMuted = EFalse; + iCurrentVol = aValue; + } + else if( aValue == 0 ) // mute + { + if( !iMuted ) + { + iMuted = ETrue; + } + } + else if ( aValue != iCurrentVol ) + { + if ( aValue != 0 ) + { + iCurrentVol = aValue; + } + } + + if ( iCurrentVol == KErrNotFound ) // muted by some other application before launching Music Player + { + iCurrentVol = aValue; + } + + StartVolumePopupSynchTimer(); + + // send a command to UI to display Volume bar on device when controlling volume via UPnP + if ( IsUpnpVisibleL() && iPlayerState != EPbStateNotInitialised ) + { + TFileName subPlayerName; + TMPXPlaybackPlayerType currentPlayerType = EPbLocal; + GetSubPlayerInfoL( subPlayerName, currentPlayerType ); - if ( iVolumeEventCount > 0 ) - { - --iVolumeEventCount; - } - - // send a command to UI to display Volume bar on device when controlling volume via UPnP - if ( IsUpnpVisibleL() && iPlayerState != EPbStateNotInitialised ) + if ( currentPlayerType != EPbLocal ) { - TFileName subPlayerName; - TMPXPlaybackPlayerType currentPlayerType = EPbLocal; - GetSubPlayerInfoL( subPlayerName, currentPlayerType ); - - if ( currentPlayerType != EPbLocal ) - { - iObserver->HandleMediaKeyCommand( EPbCmdSetVolume, iUpnpVolume ); - } - } - - if ( iUpnpFrameworkSupport ) - { - SetVolumePopupTitleL(); - } - } + iObserver->HandleMediaKeyCommand( EPbCmdSetVolume, iUpnpVolume ); + } + } + + if ( iUpnpFrameworkSupport ) + { + SetVolumePopupTitleL(); + } + break; } default: @@ -771,12 +757,16 @@ { iMuted = EFalse; iCommandId = EPbCmdUnMuteVolume; + if ( iCurrentVol == 0 ) // prevent muting again when HandleControlEvent is called next time + { + iCurrentVol = 1; // "1" is the first step of 20-step volume + } iVolPopup->SetValue( iCurrentVol ); } else { iCommandId = EPbCmdSetVolume; - iCurrentVol = iCurrentVol < iVolumeSteps ? (iCurrentVol + 1) : iCurrentVol; // +KMPXVolumeSteps; ? + iCurrentVol = iCurrentVol < iVolumeSteps ? (iCurrentVol + 1) : iCurrentVol; iVolPopup->SetValue( iCurrentVol ); } } @@ -797,7 +787,7 @@ else { iCommandId = EPbCmdSetVolume; - iCurrentVol = iCurrentVol - 1; // KMPXVolumeSteps ? + iCurrentVol = iCurrentVol - 1; iVolPopup->SetValue( iCurrentVol ); } } @@ -1241,6 +1231,7 @@ // void CMPXMediaKeyHandlerImp::HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType ) { + MPX_FUNC("CMPXMediaKeyHandlerImp::HandleControlEventL"); if ( !AknLayoutUtils::PenEnabled() ) { return; @@ -1249,13 +1240,15 @@ if( (aEventType == EEventStateChanged) && (aControl == iVolPopup) ) { TInt vol = iVolPopup->Value(); - if ( vol == iCurrentVol ) + + MPX_DEBUG4( "CMPXMediaKeyHandlerImp::HandleControlEventL: vol(%d), iCurrentVol(%d), iMuted(%d)", vol, iCurrentVol, iMuted ); + + if ( vol == iCurrentVol && vol != 0 ) { if ( iMuted ) { iMuted = EFalse; FilterAndSendCommand( EPbCmdUnMuteVolume ); - iTouchVolEventCount++; } else { @@ -1273,7 +1266,6 @@ { iMuted = ETrue; FilterAndSendCommand( EPbCmdMuteVolume ); - iTouchVolEventCount++; } } else @@ -1281,15 +1273,19 @@ if ( iMuted ) { iMuted = EFalse; + + if ( iCurrentVol == 0 ) // setting volume to 0 would reapply mute, use slider value instead + { + iCurrentVol = vol; + } + iVolPopup->SetValue( iCurrentVol ); FilterAndSendCommand( EPbCmdUnMuteVolume ); - iTouchVolEventCount++; } else { iCurrentVol = vol; FilterAndSendCommand( EPbCmdSetVolume ); - iTouchVolEventCount++; } } } @@ -1319,4 +1315,60 @@ return isForeground; } + +// --------------------------------------------------------------------------- +// CMPXMediaKeyHandlerImp::VolumePopupSynchTimerCallback +// --------------------------------------------------------------------------- +// +TInt CMPXMediaKeyHandlerImp::VolumePopupSynchTimerCallback( TAny* aPtr ) + { + static_cast( aPtr )->DoVolumePopupSynch(); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CMPXMediaKeyHandlerImp::DoVolumePopupSynch +// --------------------------------------------------------------------------- +// +void CMPXMediaKeyHandlerImp::DoVolumePopupSynch() + { + MPX_FUNC("CMPXMediaKeyHandlerImp::DoVolumePopupSynch"); + + iVolumePopupSynchTimer->Cancel(); + + TInt popupValue = iVolPopup->Value(); + + MPX_DEBUG4("CMPXMediaKeyHandlerImp::DoVolumePopupSynch: popupValue(%d), iMuted(%d), iCurrentVol(%d)", + popupValue, iMuted, iCurrentVol ); + + if ( iMuted ) + { + if ( popupValue != 0 ) + { + MPX_DEBUG1("CMPXMediaKeyHandlerImp::DoVolumePopupSynch: popup out of synch (muted)" ); + iVolPopup->SetValue( 0 ); + } + } + else + { + if ( iCurrentVol != popupValue ) + { + MPX_DEBUG1("CMPXMediaKeyHandlerImp::DoVolumePopupSynch: popup out of synch" ); + iVolPopup->SetValue( iCurrentVol ); + } + } + } + +// --------------------------------------------------------------------------- +// CMPXMediaKeyHandlerImp::StartVolumePopupSynchTimer +// --------------------------------------------------------------------------- +// +void CMPXMediaKeyHandlerImp::StartVolumePopupSynchTimer() + { + iVolumePopupSynchTimer->Cancel(); + iVolumePopupSynchTimer->Start( KVolumePopupSynchInterval, + KVolumePopupSynchInterval, + TCallBack( VolumePopupSynchTimerCallback, this ) ); + + } // End of File diff -r 70a8526f03f2 -r 56b11cf8addb mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/src/mpxdbmanager.cpp --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/src/mpxdbmanager.cpp Tue May 11 16:10:56 2010 +0300 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/src/mpxdbmanager.cpp Tue May 25 12:39:12 2010 +0300 @@ -29,7 +29,7 @@ #include #ifdef __RAMDISK_PERF_ENABLE #include -#include +#include #include #endif //__RAMDISK_PERF_ENABLE diff -r 70a8526f03f2 -r 56b11cf8addb mpxplugins/serviceplugins/playbackplugins/localaudio/inc/mpxlocalaudioplayback.h --- a/mpxplugins/serviceplugins/playbackplugins/localaudio/inc/mpxlocalaudioplayback.h Tue May 11 16:10:56 2010 +0300 +++ b/mpxplugins/serviceplugins/playbackplugins/localaudio/inc/mpxlocalaudioplayback.h Tue May 25 12:39:12 2010 +0300 @@ -180,14 +180,16 @@ /** * Sets the volume level in audio controller * @param aVolume Volume level, ranges from 0 - KPbPlaybackVolumeLevelMax + * @param aNotifyChange ETrue if EPVolumeChanged must be sent to observer */ - void SetVolume( TInt aVolume ); + void SetVolume( TInt aVolume, TBool aNotifyChange = ETrue ); /** * Sets the volume level in audio controller to mute. * @param aMute ETrue to indicated mute + * @param aNotifyChange ETrue if EPMuteChanged must be sent to observer */ - void SetMute( TBool aMute ); + void SetMute( TBool aMute, TBool aNotifyChange = ETrue ); /** * Consumes the rights for the current media according diff -r 70a8526f03f2 -r 56b11cf8addb mpxplugins/serviceplugins/playbackplugins/localaudio/src/mpxlocalaudioplayback.cpp --- a/mpxplugins/serviceplugins/playbackplugins/localaudio/src/mpxlocalaudioplayback.cpp Tue May 11 16:10:56 2010 +0300 +++ b/mpxplugins/serviceplugins/playbackplugins/localaudio/src/mpxlocalaudioplayback.cpp Tue May 25 12:39:12 2010 +0300 @@ -495,14 +495,14 @@ { case EPbPropertyVolume: { - SetVolume( aValue ); + SetVolume( aValue, EFalse ); // don't notify MPX because playback engine converts EPSetComplete to EPropertyChanged break; } case EPbPropertyVolumeRamp: iPlayer->SetVolumeRamp(TTimeIntervalMicroSeconds(TInt64(aValue))); break; case EPbPropertyMute: - SetMute( aValue ); + SetMute( aValue, EFalse ); // don't notify MPX because playback engine converts EPSetComplete to EPropertyChanged break; case EPbPropertyBalance: iPlayer->SetBalance(MMFBalance(aValue)); @@ -1110,7 +1110,7 @@ // Sets the volume level in audio controller // ---------------------------------------------------------------------------- // -void CMPXLocalAudioPlayback::SetVolume( TInt aVolume ) +void CMPXLocalAudioPlayback::SetVolume( TInt aVolume, TBool aNotifyChange ) { MPX_DEBUG3("-->CMPXLocalAudioPlayback::SetVolume 0x%08x vol (%d)", this, aVolume); @@ -1162,9 +1162,15 @@ } } } + else if ( volError == KErrNone && aVolume == currentVol && changed ) + { + // volume changed only to player after it has been initialised, + // no need to reflect this to upper layers as the stored setting haven't changed + changed = EFalse; + } // Notify observer if value changed - if ( changed ) + if ( changed && aNotifyChange ) { iObs->HandlePluginEvent( MMPXPlaybackPluginObserver::EPVolumeChanged, aVolume, @@ -1178,7 +1184,7 @@ // Sets the volume level in audio controller // ---------------------------------------------------------------------------- // -void CMPXLocalAudioPlayback::SetMute( TBool aMute ) +void CMPXLocalAudioPlayback::SetMute( TBool aMute, TBool aNotifyChange ) { MPX_DEBUG3("-->CMPXLocalAudioPlayback::SetMute 0x%08x vol (%d)", this, aMute); @@ -1214,10 +1220,14 @@ { MPX_TRAP( muteError, iMuteWatcher->SetValueL( aMute ) ); } + else if ( changed ) // Cenrep setting hasn't changed, no need to propagate to MPX + { + changed = EFalse; + } } // Notify observer if value changed - if ( changed ) + if ( changed && aNotifyChange ) { iObs->HandlePluginEvent( MMPXPlaybackPluginObserver::EPMuteChanged, aMute, diff -r 70a8526f03f2 -r 56b11cf8addb mpxplugins/serviceplugins/playbackplugins/progressdownloadsb/inc/mpxprogressdownloadsb.h --- a/mpxplugins/serviceplugins/playbackplugins/progressdownloadsb/inc/mpxprogressdownloadsb.h Tue May 11 16:10:56 2010 +0300 +++ b/mpxplugins/serviceplugins/playbackplugins/progressdownloadsb/inc/mpxprogressdownloadsb.h Tue May 25 12:39:12 2010 +0300 @@ -197,14 +197,16 @@ /** * Sets the volume level in audio controller * @param aVolume Volume level, ranges from 0 - KPbPlaybackVolumeLevelMax + * @param aNotifyChange ETrue if EPVolumeChanged must be sent to observer */ - void SetVolume( TInt aVolume ); + void SetVolume( TInt aVolume, TBool aNotifyChange = EFalse ); /** * Sets the volume level in audio controller to mute. * @param aMute ETrue to indicated mute + * @param aNotifyChange ETrue if EPMuteChanged must be sent to observer */ - void SetMute( TBool aMute ); + void SetMute( TBool aMute, TBool aNotifyChange = EFalse ); void ResetEnhancedMediaClient(); diff -r 70a8526f03f2 -r 56b11cf8addb mpxplugins/serviceplugins/playbackplugins/progressdownloadsb/src/mpxprogressdownloadsb.cpp --- a/mpxplugins/serviceplugins/playbackplugins/progressdownloadsb/src/mpxprogressdownloadsb.cpp Tue May 11 16:10:56 2010 +0300 +++ b/mpxplugins/serviceplugins/playbackplugins/progressdownloadsb/src/mpxprogressdownloadsb.cpp Tue May 25 12:39:12 2010 +0300 @@ -472,7 +472,7 @@ { case EPbPropertyVolume: { - SetVolume(aValue); + SetVolume( aValue, EFalse ); // don't notify MPX because playback engine converts EPSetComplete to EPropertyChanged } break; case EPbPropertyVolumeRamp: @@ -489,7 +489,7 @@ } break; case EPbPropertyMute: - SetMute( aValue ); + SetMute( aValue, EFalse ); // don't notify MPX because playback engine converts EPSetComplete to EPropertyChanged break; case EPbPropertyBalance: break; @@ -1372,7 +1372,7 @@ // Sets the volume level in audio controller // ---------------------------------------------------------------------------- // -void CMPXProgressDownloadSB::SetVolume( TInt aVolume ) +void CMPXProgressDownloadSB::SetVolume( TInt aVolume, TBool aNotifyChange ) { MPX_DEBUG2("CMPXProgressDownloadSB::SetVolume(%d) entering", aVolume); @@ -1430,7 +1430,7 @@ // Notify observer if value changed - if ( changed ) + if ( changed && aNotifyChange ) { iObs->HandlePluginEvent( MMPXPlaybackPluginObserver::EPVolumeChanged, aVolume, @@ -1444,7 +1444,7 @@ // Sets the volume level in audio controller // ---------------------------------------------------------------------------- // -void CMPXProgressDownloadSB::SetMute( TBool aMute ) +void CMPXProgressDownloadSB::SetMute( TBool aMute, TBool aNotifyChange ) { MPX_DEBUG3("-->CMPXProgressDownloadSB::SetMute 0x%08x vol (%d)", this, aMute); @@ -1483,7 +1483,7 @@ } // Notify observer if value changed - if ( changed ) + if ( changed && aNotifyChange ) { iObs->HandlePluginEvent( MMPXPlaybackPluginObserver::EPMuteChanged, aMute, diff -r 70a8526f03f2 -r 56b11cf8addb mpxplugins/serviceplugins/screensaverplugins/mpxscreensaverplugin/data/mpxscreensaverplugin.rss --- a/mpxplugins/serviceplugins/screensaverplugins/mpxscreensaverplugin/data/mpxscreensaverplugin.rss Tue May 11 16:10:56 2010 +0300 +++ b/mpxplugins/serviceplugins/screensaverplugins/mpxscreensaverplugin/data/mpxscreensaverplugin.rss Tue May 25 12:39:12 2010 +0300 @@ -580,7 +580,7 @@ // RESOURCE AVKON_LAYOUT_LABEL r_mpx_screensaver_title_layout_qhd_portrait { - font = EAknLogicalFontPrimaryFont; C = 0; l = 44; r = 10; B = 118; W = 298; J = ELayoutAlignLeft; + font = EAknLogicalFontPrimaryFont; C = 0; l = 44; r = 10; B = 107; W = 298; J = ELayoutAlignLeft; } // --------------------------------------------------------------------------- diff -r 70a8526f03f2 -r 56b11cf8addb mpxplugins/viewplugins/views/collectionviewhg/data/mpxcollectionviewhg.rss --- a/mpxplugins/viewplugins/views/collectionviewhg/data/mpxcollectionviewhg.rss Tue May 11 16:10:56 2010 +0300 +++ b/mpxplugins/viewplugins/views/collectionviewhg/data/mpxcollectionviewhg.rss Tue May 25 12:39:12 2010 +0300 @@ -1576,30 +1576,30 @@ // ----------------------------------------------------------------------------- // RESOURCE DIALOG r_mpx_about_dialog - { - flags=EEikDialogFlagNoDrag |EEikDialogFlagCbaButtons |EEikDialogFlagWait; - buttons = R_AVKON_SOFTKEYS_OK_EMPTY; - items = - { - DLG_LINE - { - type = EAknCtPopupHeadingPane; - id = EAknMessageQueryHeaderId; - control = AVKON_HEADING - { - headinglayout = R_AVKON_LIST_HEADING_PANE_POPUPS; - }; - }, - DLG_LINE - { - type = EAknCtMessageQuery; - id = EAknMessageQueryContentId; - control = AVKON_MESSAGE_QUERY - { - }; - } - }; - } + { + flags = EGeneralQueryFlags; + buttons = R_AVKON_SOFTKEYS_OK_EMPTY; + items = + { + DLG_LINE + { + type = EAknCtPopupHeadingPane; + id = EAknMessageQueryHeaderId; + control = AVKON_HEADING + { + headinglayout = R_AVKON_LIST_HEADING_PANE_POPUPS; + }; + }, + DLG_LINE + { + type = EAknCtMessageQuery; + id = EAknMessageQueryContentId; + control = AVKON_MESSAGE_QUERY + { + }; + } + }; + } // --------------------------------------------------------------------------- // r_qtn_nmp_note_educating_the_user diff -r 70a8526f03f2 -r 56b11cf8addb mpxplugins/viewplugins/views/collectionviewhg/group/mpxcollectionviewhg.mmp --- a/mpxplugins/viewplugins/views/collectionviewhg/group/mpxcollectionviewhg.mmp Tue May 11 16:10:56 2010 +0300 +++ b/mpxplugins/viewplugins/views/collectionviewhg/group/mpxcollectionviewhg.mmp Tue May 25 12:39:12 2010 +0300 @@ -75,6 +75,7 @@ LIBRARY bafl.lib LIBRARY aknskins.lib LIBRARY aknicon.lib +LIBRARY fbscli.lib LIBRARY commonengine.lib LIBRARY sendui.lib LIBRARY centralrepository.lib diff -r 70a8526f03f2 -r 56b11cf8addb mpxplugins/viewplugins/views/collectionviewhg/inc/mpxcollectionviewhgcontainer.h --- a/mpxplugins/viewplugins/views/collectionviewhg/inc/mpxcollectionviewhgcontainer.h Tue May 11 16:10:56 2010 +0300 +++ b/mpxplugins/viewplugins/views/collectionviewhg/inc/mpxcollectionviewhgcontainer.h Tue May 25 12:39:12 2010 +0300 @@ -556,11 +556,8 @@ /** * Records begin state for the transition animation. - * - * @param aPrevViewWasPlayback ETrue if previous view was playback. - * This information used to decide animation direction. */ - void BeginFullScreenAnimation( TBool aPrevViewWasPlayback = EFalse ); + void BeginFullScreenAnimation(); /** * Set the previous view Uid @@ -876,6 +873,14 @@ */ void ResolvePopupListSizeL(); + /** + * Setup transition type + * @param aType Type of transition to be used. + * @param aPrevViewWasPlayback ETrue if previous view was playback. + * This information used to decide animation direction. + */ + void SetupTransitionType( TInt aType, TBool aPrevViewWasPlayback = EFalse ); + private: // data member /** @@ -1006,6 +1011,7 @@ TBool iLayoutSwitch; TRect iPopupListRect; TUid iPreviousViewId; + TBool iPreviousOrientation; }; #endif // CMPXCOLLECTIONVIEWHGCONTAINER_H diff -r 70a8526f03f2 -r 56b11cf8addb mpxplugins/viewplugins/views/collectionviewhg/inc/mpxcollectionviewhgimp.h --- a/mpxplugins/viewplugins/views/collectionviewhg/inc/mpxcollectionviewhgimp.h Tue May 11 16:10:56 2010 +0300 +++ b/mpxplugins/viewplugins/views/collectionviewhg/inc/mpxcollectionviewhgimp.h Tue May 25 12:39:12 2010 +0300 @@ -26,7 +26,7 @@ // INCLUDES #include -#include +#include #include #include #include diff -r 70a8526f03f2 -r 56b11cf8addb mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgcontainer.cpp --- a/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgcontainer.cpp Tue May 11 16:10:56 2010 +0300 +++ b/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgcontainer.cpp Tue May 25 12:39:12 2010 +0300 @@ -105,6 +105,8 @@ const TReal KIconFactor = 0.7; const TInt KThumbLoadingPauseForTransition(500000); +const TInt KMPXInterviewTransition = 0; +const TInt KMPXIntraviewTransition = 1; _LIT( KMPXDash, " - " ); #ifdef HG_MP_LOC_AVAILABLE @@ -112,14 +114,6 @@ #endif //HG_MP_LOC_AVAILABLE _LIT( KMPXZeroDurationMark, "--"); -_LIT( KSong, " song" ); -_LIT( KSongs, " songs" ); -_LIT( KEpisode, " episode" ); -_LIT( KEpisodes, " episodes" ); -_LIT( KAlbum, " album" ); -_LIT( KAlbums, " albums" ); -_LIT( KSongDash, " song - " ); -_LIT( KSongsDash, " songs - " ); // ======== MEMBER FUNCTIONS ======== @@ -217,12 +211,6 @@ delete iPlaylist; delete iPlaylistHelper; - if( iAsyncCallBack ) - { - iAsyncCallBack->Cancel(); - } - delete iAsyncCallBack; - iCoeEnv->RemoveForegroundObserver( *this ); } @@ -274,9 +262,7 @@ iIsForeground = ETrue; iCoeEnv->AddForegroundObserverL( *this ); - TCallBack callback(CMPXCollectionViewHgContainer::AsyncCallback, this); - iAsyncCallBack = new (ELeave) CAsyncCallBack( CActive::EPriorityStandard ); - iAsyncCallBack->Set(callback); + iPreviousOrientation = Layout_Meta_Data::IsLandscapeOrientation(); GfxTransEffect::Enable(); @@ -728,12 +714,12 @@ { delete iIconArray; iIconArray = NULL; - CreateIconArrayL(); if( iCurrentViewType == EMPXViewMediawall || iCurrentViewType == EMPXViewTBone ) { iMediaWall->SetDefaultIconL(NULL); - iMediaWall->EnableScrollBufferL(*this, KMPXListBufferSize, KMPXListBufferSize/4); + CreateIconArrayL(); + iMediaWall->EnableScrollBufferL(*this, KMPXListBufferSizeWithMediaWall, KMPXListBufferSizeWithMediaWall/4); } else { @@ -741,14 +727,45 @@ if( list ) { list->SetDefaultIconL(NULL); - list->EnableScrollBufferL(*this, KMPXListBufferSizeWithMediaWall, KMPXListBufferSizeWithMediaWall/4); + CreateIconArrayL(); + list->EnableScrollBufferL(*this, KMPXListBufferSize, KMPXListBufferSize/4); } } - SetDetailIconShuffleL(); + // Reset the shuffle item for TBone view + if ( iCurrentViewType == EMPXViewTBone ) + { + if (iMwListWidget && iMwListWidget->ItemCount() > 1) + { + SetShuffleItemToListL(iMwListWidget); + } + } + // Songs dialog is opened in mediawall, we need to reset its shuffle item + else if ( iCurrentViewType == EMPXViewMediawall && iDialog ) + { + CAknIconArray* iconArray = new( ELeave ) CAknIconArray( 1 ); + CleanupStack::PushL( iconArray ); + // Prepare icon array. + CGulIcon* icon = (*iIconArray)[EMPXClvIconShuffle]; + CGulIcon* iconCopy = CGulIcon::NewL(icon->Bitmap(), icon->Mask()); + iconCopy->SetBitmapsOwnedExternally(ETrue); + iconArray->AppendL(iconCopy); + CAknSingleGraphicPopupMenuStyleListBox* listbox = (CAknSingleGraphicPopupMenuStyleListBox *)iDialog->ListBox(); + listbox->ItemDrawer()->ColumnData()->SetIconArrayL( iconArray ); + CleanupStack::Pop(); // iconArray + } + else + { + // Reset the shuffle item for other views + SetDetailIconShuffleL(); + } } - else if ( aType == KEikDynamicLayoutVariantSwitch ) + else if ( aType == KEikDynamicLayoutVariantSwitch && + ( iPreviousOrientation != landscapeOrientation ) ) { iLayoutSwitch = ETrue; + // To prevent multiple layout change causing multiple repopulation of the list. + // Temporary fix until rootcause is found. + iPreviousOrientation = landscapeOrientation; if ( iCurrentViewType == EMPXViewMediawall ) { @@ -756,9 +773,6 @@ { iDialog->CancelPopup(); } - // make cba visible so that visible screen area is calculated correctly in list view - if( iCbaHandler ) - iCbaHandler->ChangeCbaVisibility( ETrue ); } iSetEmptyTextNeeded = ETrue; @@ -1227,8 +1241,13 @@ if ( pbv ) { iPreviousViewId = TUid::Uid(0); + SetupTransitionType(KMPXInterviewTransition, pbv); } - BeginFullScreenAnimation( pbv ); + else // intraview transitions + { + SetupTransitionType(KMPXIntraviewTransition); + } + BeginFullScreenAnimation(); } switch (iCurrentViewType) @@ -1269,7 +1288,6 @@ DrawableWindow()->SetOrdinalPosition( -1 ); - CleanPrevView(); iPrevViewType = iCurrentViewType; iPrevContext = iContext; if ( iSetEmptyTextNeeded ) @@ -1277,11 +1295,6 @@ LoadAndSetEmptyTextL(); iSetEmptyTextNeeded = EFalse; } - if( !iDefaultIconSet ) - { - SetDefaultIconL(); - } - iLayoutSwitch = EFalse; } @@ -1518,9 +1531,15 @@ SaveSelectedAlbumItemL( iSelectedAlbumIndex ); } + TInt prevItemCount( iMediaWall->ItemCount() ); iMediaWall->Reset(); if ( aCount ) { + // enable scroll buffering now as it has not been enabled when empty mediawall was constructed + if ( !prevItemCount ) + { + iMediaWall->EnableScrollBufferL( *this, KMPXListBufferSizeWithMediaWall, KMPXListBufferSizeWithMediaWall/4 ); + } iMediaWall->ResizeL( aCount ); ProvideDataWithoutThumbnailsMwL(aMediaArray); @@ -1608,13 +1627,22 @@ { MPX_DEBUG1("CMPXCollectionViewHgContainer::PrepareListL - EnableScrollBufferL"); iListWidget->EnableScrollBufferL(*this, KMPXListBufferSize, KMPXListBufferSize/4); + iDefaultIconSet = EFalse; + // Setting an empty icon to the list as default icon. + iListWidget->SetDefaultIconL(CGulIcon::NewL(new CFbsBitmap())); + CleanPrevView(); } else { + // Note: Special case + // We need to clean previous view prior to setting default icon otherwise the + // icon will be set to the wrong scroller. + CleanPrevView(); + SetDefaultIconL(); EndFullScreenAnimation(); iListWidget->RefreshScreen(0); + iDefaultIconSet = ETrue; } - iDefaultIconSet = EFalse; } // ---------------------------------------------------------------------------- @@ -1661,7 +1689,7 @@ CHgVgMediaWall::EHgVgMediaWallStyleCoverflowTBonePortrait, EFalse, this, - DefaultIconL() ); + CGulIcon::NewL( new CFbsBitmap()) ); if( !iIsForeground ) iMediaWall->HandleLosingForeground(); @@ -1729,7 +1757,8 @@ OpenAlbumL(iAlbumIndex); } iMwListWidget->RefreshScreen(0); - iDefaultIconSet = ETrue; + + CleanPrevView(); } // ---------------------------------------------------------------------------- @@ -1754,7 +1783,7 @@ { switchBuffer = CMPXCollectionViewHgSwitchBuffer::CreateBufferLC( *iListWidget ); } - else if ( iMediaWall ) + else if ( iMediaWall && iPrevViewType == EMPXViewTBone ) { switchBuffer = CMPXCollectionViewHgSwitchBuffer::CreateBufferLC( *iMediaWall ); switchBuffer->SetIndexOffset(1); @@ -1786,7 +1815,7 @@ // Check if the list is empty, Enable scroll buffer won't call requst if list is empty if( iMediaWall->ItemCount() != 0 ) { - iMediaWall->EnableScrollBufferL( + iMediaWall->EnableScrollBufferL( *this, KMPXListBufferSizeWithMediaWall, KMPXListBufferSizeWithMediaWall / 4); @@ -1819,7 +1848,7 @@ // Check if the list is empty, Enable scroll buffer won't call requst if list is empty if( iMediaWall->ItemCount() != 0 ) { - iMediaWall->EnableScrollBufferL( + iMediaWall->EnableScrollBufferL( *this, KMPXListBufferSizeWithMediaWall, KMPXListBufferSizeWithMediaWall / 4); @@ -1840,11 +1869,11 @@ iMediaWall->SetFlags( CHgVgMediaWall::EHgVgMediaWallDrawToWindowGC ); } - if( iPopupListRect == TRect(0,0,0,0) ) - { - ResolvePopupListSizeL(); - } - + if( iPopupListRect == TRect(0,0,0,0) ) + { + ResolvePopupListSizeL(); + } + iMediaWall->SetOpenedItemRect( iPopupListRect ); iMediaWall->SetOpeningAnimationType( CHgVgMediaWall::EHgVgOpeningAnimationZoomToFront ); @@ -1855,6 +1884,7 @@ switchBuffer = NULL; } iDefaultIconSet = ETrue; + CleanPrevView(); } // ---------------------------------------------------------------------------- @@ -2114,6 +2144,10 @@ break; } } + // Start animation now as next view activated is + // now playing view. We will end animation in now playing view. + SetupTransitionType(KMPXInterviewTransition); + BeginFullScreenAnimation(); } } @@ -2172,6 +2206,10 @@ { SaveSelectedAlbumItemL(iSelectedAlbumIndex); UpdatePathAndOpenL(index); + // Start animation now as next view activated is + // now playing view. We will end animation in now playing view. + SetupTransitionType(KMPXInterviewTransition); + BeginFullScreenAnimation(); } else if ( iContext == EContextGroupAlbum ) { @@ -2192,6 +2230,10 @@ // To open the selected album. iView->ProcessCommandL( EMPXCmdCommonEnterKey ); } + // Start animation now as next view activated is + // now playing view. We will end animation in now playing view. + SetupTransitionType(KMPXInterviewTransition); + BeginFullScreenAnimation(); } else { @@ -2238,6 +2280,10 @@ // Open the selected song of album UpdatePathAndOpenL(index); } + // Start animation now as next view activated is + // now playing view. We will end animation in now playing view. + SetupTransitionType(KMPXInterviewTransition); + BeginFullScreenAnimation(); } else if ( iContext == EContextGroupAlbum ) { @@ -2248,6 +2294,13 @@ { OpenAlbumL(index); } + else + { + // Start animation now as next view activated is + // now playing view. We will end animation in now playing view. + SetupTransitionType(KMPXInterviewTransition); + BeginFullScreenAnimation(); + } } } else @@ -2656,11 +2709,16 @@ } if ( canRefresh ) { + if( !iDefaultIconSet ) + { + SetDefaultIconL(); + iDefaultIconSet = ETrue; + } if( iCurrentViewType == EMPXViewTBone || iCurrentViewType == EMPXViewMediawall ) { if( iTranstionType != EMPXTranstionNotDefined ) { - // This will tricker the transtition animation + // This will trigger the transtition animation EndFullScreenAnimation(); iMediaWall->DrawNow(); } @@ -2673,7 +2731,7 @@ { if( iTranstionType != EMPXTranstionNotDefined ) { - // This will tricker the transtition animation + // This will trigger the transtition animation // Use DrawNow since RefreshScreen uses DrawDeferred and we want to start // the animation immediately. EndFullScreenAnimation(); @@ -2781,7 +2839,7 @@ case EContextItemAlbum: { defaultIcon = EMPXDefaultIconAlbum; - iconIndex = EMPXClvIconAlbum; + iconIndex = 27; // default album art in mediawall and list view break; } case EContextGroupPodcast: @@ -4487,8 +4545,8 @@ TInt songCount = songArray->Count(); CDesC16ArrayFlat* songList = new (ELeave) CDesC16ArrayFlat(songCount); - CleanupStack::PushL(songList); - + CleanupStack::PushL(songList); + if ( songCount > 1 ) { HBufC* shuffleText = StringLoader::LoadLC( @@ -4557,6 +4615,10 @@ SaveSelectedAlbumItemL(iSelectedAlbumIndex); // Open the selected song of album UpdatePathAndOpenL(index); + // Start animation now as next view activated is + // now playing view. We will end animation in now playing view. + SetupTransitionType(KMPXInterviewTransition); + BeginFullScreenAnimation(); } else if( !iLayoutSwitch && iMediaWall ) { @@ -4797,6 +4859,11 @@ void CMPXCollectionViewHgContainer::HandleGainingForeground() { iIsForeground = ETrue; + if ( iCurrentViewType == EMPXViewMediawall ) + { + if( iCbaHandler ) + iCbaHandler->ChangeCbaVisibility( EFalse ); + } } void CMPXCollectionViewHgContainer::HandleLosingForeground() @@ -4869,6 +4936,7 @@ if( !iLayoutSwitch ) { + SetupTransitionType(KMPXIntraviewTransition); BeginFullScreenAnimation(); } @@ -4877,14 +4945,8 @@ DrawableWindow()->SetOrdinalPosition( -1 ); - CleanPrevView(); - iPrevViewType = iCurrentViewType; - if( !iDefaultIconSet ) - { - SetDefaultIconL(); - } // We need to adjust the CBA for this view. if( iCbaHandler ) iCbaHandler->UpdateCba(); @@ -5012,41 +5074,11 @@ // Prepare and begin fullscreen animation effects // --------------------------------------------------------------------------- // -void CMPXCollectionViewHgContainer::BeginFullScreenAnimation(TBool aPrevViewWasPlayback) +void CMPXCollectionViewHgContainer::BeginFullScreenAnimation() { - if( iTranstionType != EMPXTranstionNotDefined ) + if( iTranstionType == EMPXTranstionNotDefined ) return; - iTranstionType = EMPXTranstionToLeft; - - if ( (iPrevContext == EContextUnknown || - iPrevContext == EContextItemAlbum ) && aPrevViewWasPlayback ) - { - iTranstionType = EMPXTranstionToLeft; - } - else if( iPrevContext == EContextUnknown ) - { - // We aren't coming from playback view and prev context is unknown. - // Musicplayer is propably started so we shouldn't use any animation. - iTranstionType = EMPXTranstionNotDefined; - return; - } - else if( iContext == EContextItemAlbum || - iContext == EContextItemGenre || - iContext == EContextItemPlaylist ) - { - iTranstionType = EMPXTranstionToRight; - } - - if( iPrevViewType == EMPXViewMediawall || iPrevViewType == EMPXViewTBone ) - { - iMediaWall->SetFlags( CHgVgMediaWall::EHgVgMediaWallDrawToWindowGC ); - iMediaWall->DrawNow(); - // workaround for NGA animations: includes Media Wall into transition animation. - iCoeEnv->WsSession().Finish(); - User::After(1000); - } - const TInt flags = AknTransEffect::TParameter::EActivateExplicitCancel; TRect appRect = ((CAknAppUi*)iCoeEnv->AppUi())->ApplicationRect(); GfxTransEffect::BeginFullScreen( iTranstionType, appRect, @@ -5070,6 +5102,48 @@ } // --------------------------------------------------------------------------- +// Setup transition types for animation. +// --------------------------------------------------------------------------- +// +void CMPXCollectionViewHgContainer::SetupTransitionType( TInt aType, TBool aPrevViewWasPlayback ) + { + if ( aType == KMPXIntraviewTransition ) + { + iTranstionType = EMPXTranstionToLeft; + + if( iPrevContext == EContextUnknown ) + { + // We aren't coming from playback view and prev context is unknown. + // Musicplayer is propably started so we shouldn't use any animation. + iTranstionType = EMPXTranstionNotDefined; + return; + } + else if( iContext == EContextItemAlbum || + iContext == EContextItemGenre || + iContext == EContextItemPlaylist ) + { + iTranstionType = EMPXTranstionToRight; + } + + if( iPrevViewType == EMPXViewMediawall || iPrevViewType == EMPXViewTBone ) + { + iMediaWall->SetFlags( CHgVgMediaWall::EHgVgMediaWallDrawToWindowGC ); + iMediaWall->DrawNow(); + } + } + else // interview transition + { + + iTranstionType = EMPXTranstionToRight; + if ( (iPrevContext == EContextUnknown || + iPrevContext == EContextItemAlbum ) && aPrevViewWasPlayback ) + { + iTranstionType = EMPXTranstionToLeft; + } + } + } + +// --------------------------------------------------------------------------- // Resolving the size of the popup list rectangle. // --------------------------------------------------------------------------- // diff -r 70a8526f03f2 -r 56b11cf8addb mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgimp.cpp --- a/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgimp.cpp Tue May 11 16:10:56 2010 +0300 +++ b/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgimp.cpp Tue May 25 12:39:12 2010 +0300 @@ -91,9 +91,10 @@ #include #include // KFindInMShopKeyInValid -// cenrep key need to be checked whether USB cable is connected in MTP/Combined Mode +// cenrep key need to be checked whether Mass Storage or MTP is connected #include #include +#include #include #include #include @@ -616,13 +617,16 @@ TInt usbStatus; RProperty::Get(KPSUidUsbWatcher, KUsbWatcherSelectedPersonality, usbStatus); - - // Whenever usb is connected - if ( usbStatus == KUsbPersonalityIdMTP - || usbStatus == KUsbPersonalityIdMS - || usbStatus == KUsbPersonalityIdPTP - || usbStatus == KUsbPersonalityIdPCSuiteMTP - || usbStatus == KUsbPersonalityIdPCSuite ) + TInt mtpStatus = EMtpPSStatusUninitialized; + RProperty::Get( KMtpPSUid, KMtpPSStatus, mtpStatus); + + MPX_DEBUG2("CMPXCollectionViewHgImp::ConstructL, mtpstatus = %d", mtpStatus); + + // Whenever usb/mtp is connected + if ( usbStatus == KUsbPersonalityIdMS + || usbStatus == KUsbPersonalityIdPTP + || usbStatus == KUsbPersonalityIdPCSuite + || mtpStatus != EMtpPSStatusUninitialized ) { RProperty::Set( KMPXViewPSUid, KMPXUSBUnblockingPSStatus, @@ -754,12 +758,12 @@ { iContainer->EnableFindBox(EFalse); } + + // delete songs list to update T-bone view after deleting a song + album->Delete( KMPXMediaArrayContents ); } iConfirmationDlg = NULL; - CleanupStack::PopAndDestroy( waitNoteText ); - - // delete songs list to update T-bone view after deleting a song - album->Delete( KMPXMediaArrayContents ); + CleanupStack::PopAndDestroy( waitNoteText ); } } CleanupStack::PopAndDestroy( path ); @@ -1269,7 +1273,7 @@ else if ( ( aIndex > 0 ) && ( aIndex < iContainer->CurrentListItemCount() ) ) { - iContainer->SetLbxCurrentItemIndexAndDraw( aIndex ); + // No need to do anything here } else { @@ -3670,7 +3674,8 @@ { MPX_FUNC( "CMPXCollectionViewHgImp::UpdateMiddleSoftKeyDisplayL" ); CEikButtonGroupContainer* cba = Cba(); - if ( cba ) + // We only update middle softkey for non-touch UI + if ( cba && !AknLayoutUtils::PenEnabled() ) { if ( !iContainer->CurrentListItemCount() ) // list is empty { @@ -4073,15 +4078,7 @@ } // USB flags // - CEikMenuBar* menuBar( MenuBar() ); - if(iContainer) - { - iContainer->EnableMarking( EFalse ); - } - if(menuBar) - { - menuBar->SetMenuTitleResourceId( R_MPX_COLLECTION_VIEW_MENUBAR_NO_MARKING ); - } + CEikMenuBar* menuBar( MenuBar() ); TBool IsUSBEvent( EFalse ); if( type == EMcMsgUSBMassStorageStart || type == EMcMsgUSBMTPStart ) { @@ -5951,25 +5948,16 @@ // Add view deactivation observer AppUi()->AddViewDeactivationObserverL( this ); -#ifdef __ENABLE_PODCAST_IN_MUSIC_MENU + CMPXCollectionPath* cpath( iCollectionUtility->Collection().PathL() ); + CleanupStack::PushL( cpath ); // media is not valid until the first HandleOpenL call CEikButtonGroupContainer* cba = Cba(); if ( cba ) { - cba->SetCommandSetL(R_MPX_OPTIONS_BACK_CBA_NO_ACTION); - cba->DrawNow(); - } -#else - // media is not valid until the first HandleOpenL call - CEikButtonGroupContainer* cba = Cba(); - if ( cba ) - { - cba->SetCommandSetL( - ( iViewUtility->ViewHistoryDepth() == 1 && !iIsEmbedded ) ? - R_MPX_OPTIONS_EXIT_CBA_NO_ACTION : R_MPX_OPTIONS_BACK_CBA_NO_ACTION ); - cba->DrawDeferred(); - } -#endif + cba->SetCommandSetL(( cpath->Levels() == 3 && !iIsEmbedded ) ? + R_MPX_OPTIONS_HIDE_CBA: R_MPX_OPTIONS_BACK_CBA_NO_ACTION ); + cba->DrawDeferred(); + } // Set status pane layout if switched here directly from another view, // such as when using the AnyKey @@ -5985,10 +5973,6 @@ AppUi()->AddToStackL( *this, iContainer ); iContainer->SetRect( ClientRect() ); - CMPXCollectionPath* cpath( iCollectionUtility->Collection().PathL() ); - CleanupStack::PushL( cpath ); - - UpdateTitlePaneL(); @@ -6022,7 +6006,6 @@ if ( cpath->Levels() > 1 ) { // valid path in collection - GetDurationL(); MPX_DEBUG_PATH(*cpath); DoIncrementalOpenL(); @@ -6042,12 +6025,8 @@ { iPodcast = ETrue; } - // don't bother getting duration if at plugin list - if ( cpath->Levels() > 1 ) #endif - { - GetDurationL(); - } + MPX_DEBUG_PATH(*cpath); DoIncrementalOpenL( cpath->Levels()>KMusicCollectionMenuLevel ? ETrue:EFalse ); @@ -6210,7 +6189,14 @@ { // playlist view aMenuPane->SetItemDimmed( EMPXCmdGoToPlaylists, ETrue ); - aMenuPane->SetItemDimmed(EMPXCmdGoToMusicShop, iGoToMusicShopOptionHidden ); + if(usbUnblockingStatus) + { + aMenuPane->SetItemDimmed( EMPXCmdGoToMusicShop, ETrue ); + } + else + { + aMenuPane->SetItemDimmed(EMPXCmdGoToMusicShop, iGoToMusicShopOptionHidden ); + } if (containerType != EMPXGroup ) // EMPXItem -> playlist tracks level { aMenuPane->SetItemDimmed( EMPXCmdGoToArtistAlbums, ETrue ); @@ -6230,7 +6216,14 @@ { // Artists & Albums view aMenuPane->SetItemDimmed( EMPXCmdGoToArtistAlbums, ETrue ); - aMenuPane->SetItemDimmed(EMPXCmdGoToMusicShop, iGoToMusicShopOptionHidden ); + if(usbUnblockingStatus) + { + aMenuPane->SetItemDimmed( EMPXCmdGoToMusicShop, ETrue ); + } + else + { + aMenuPane->SetItemDimmed(EMPXCmdGoToMusicShop, iGoToMusicShopOptionHidden ); + } if ( iContainer->IsTBoneView() ) //TBone View { aMenuPane->SetItemDimmed( EMPXCmdGoToAllSongs, ETrue ); @@ -6247,7 +6240,14 @@ { // Genre view aMenuPane->SetItemDimmed( EMPXCmdGoToGenre, ETrue ); - aMenuPane->SetItemDimmed(EMPXCmdGoToMusicShop, iGoToMusicShopOptionHidden ); + if(usbUnblockingStatus) + { + aMenuPane->SetItemDimmed( EMPXCmdGoToMusicShop, ETrue ); + } + else + { + aMenuPane->SetItemDimmed(EMPXCmdGoToMusicShop, iGoToMusicShopOptionHidden ); + } if ( containerType != EMPXGroup ) // EMPXItem -> tracks level { aMenuPane->SetItemDimmed( EMPXCmdGoToAllSongs, ETrue ); @@ -6267,7 +6267,14 @@ { // Song view and Genre Track view aMenuPane->SetItemDimmed( EMPXCmdGoToAllSongs, ETrue ); - aMenuPane->SetItemDimmed(EMPXCmdGoToMusicShop, iGoToMusicShopOptionHidden ); + if(usbUnblockingStatus) + { + aMenuPane->SetItemDimmed( EMPXCmdGoToMusicShop, ETrue ); + } + else + { + aMenuPane->SetItemDimmed(EMPXCmdGoToMusicShop, iGoToMusicShopOptionHidden ); + } break; } default: @@ -6313,6 +6320,7 @@ if ( iContainer->CurrentLbxItemIndex() > KErrNotFound && !iContainer->IsTBoneView()) { + aMenuPane->SetItemDimmed( EMPXCmdPlayItem, EFalse ); if ( usbUnblockingStatus == EMPXUSBUnblockingPSStatusActive ) { aMenuPane->SetItemDimmed( EMPXCmdAddToPlaylist, ETrue ); @@ -6322,7 +6330,6 @@ { aMenuPane->SetItemDimmed( EMPXCmdAddToPlaylist, EFalse ); aMenuPane->SetItemDimmed( EMPXCmdDelete, EFalse ); - aMenuPane->SetItemDimmed( EMPXCmdPlayItem, EFalse ); } } if ( iContainer->IsSelectedItemASong() && iContainer->IsTBoneView() ) @@ -6364,7 +6371,16 @@ aMenuPane->SetItemDimmed( EMPXCmdPlaylistDetails, ETrue ); if ( !Layout_Meta_Data::IsLandscapeOrientation() ) { - if( !iContainer->IsTBoneView()&& (iContainer->CurrentLbxItemIndex() > KErrNotFound)) + TInt usbUnblockingStatus; + RProperty::Get( KMPXViewPSUid, + KMPXUSBUnblockingPSStatus, + usbUnblockingStatus); + + if (usbUnblockingStatus == EMPXUSBUnblockingPSStatusActive) + { + aMenuPane->SetItemDimmed( EMPXCmdFindInMusicShop, ETrue); + } + else if( !iContainer->IsTBoneView()&& (iContainer->CurrentLbxItemIndex() > KErrNotFound)) { CMPXCollectionViewListBoxArray* array = static_cast( @@ -6571,6 +6587,7 @@ if ( iContainer->CurrentLbxItemIndex() > KErrNotFound ) { + aMenuPane->SetItemDimmed( EMPXCmdPlayItem, EFalse ); TInt usbUnblockingStatus; RProperty::Get( KMPXViewPSUid, KMPXUSBUnblockingPSStatus, @@ -6582,7 +6599,6 @@ else { aMenuPane->SetItemDimmed( EMPXCmdAddToPlaylist, EFalse ); - aMenuPane->SetItemDimmed( EMPXCmdPlayItem, EFalse ); } } @@ -6720,7 +6736,20 @@ aMenuPane->SetItemDimmed( EMPXCmdAlbumArt, ETrue ); aMenuPane->SetItemDimmed( EMPXCmdFindInMusicShop, ETrue ); } - aMenuPane->SetItemDimmed( EMPXCmdFindInMusicShop, !iUsingNokiaService ); + + TInt usbUnblockingStatus; + RProperty::Get( KMPXViewPSUid, + KMPXUSBUnblockingPSStatus, + usbUnblockingStatus); + + if (usbUnblockingStatus == EMPXUSBUnblockingPSStatusActive) + { + aMenuPane->SetItemDimmed( EMPXCmdFindInMusicShop, ETrue); + } + else + { + aMenuPane->SetItemDimmed( EMPXCmdFindInMusicShop, !iUsingNokiaService ); + } } } aMenuPane->SetItemDimmed( EMPXCmdRename, ETrue ); @@ -6763,6 +6792,11 @@ { case R_MPX_COLLECTION_VIEW_MENU_1: { + TInt usbUnblockingStatus; + RProperty::Get( KMPXViewPSUid, + KMPXUSBUnblockingPSStatus, + usbUnblockingStatus); + HandleInitMusicMenuPaneL(aMenuPane); aMenuPane->SetItemDimmed( EMPXCmdGoToNowPlaying, NowPlayingOptionVisibilityL() ); if ( isListEmpty ) @@ -6777,7 +6811,14 @@ aMenuPane->SetItemDimmed( EMPXCmdDelete, ETrue ); aMenuPane->SetItemDimmed( EMPXCmdRemove, ETrue ); aMenuPane->SetItemDimmed( EMPXCmdPlayItem, ETrue ); - aMenuPane->SetItemDimmed( EMPXCmdAddSongs, EFalse ); + if ( usbUnblockingStatus == EMPXUSBUnblockingPSStatusActive ) + { + aMenuPane->SetItemDimmed( EMPXCmdAddSongs, ETrue ); + } + else + { + aMenuPane->SetItemDimmed( EMPXCmdAddSongs, EFalse ); + } } else { @@ -6792,10 +6833,7 @@ aMenuPane->SetItemDimmed( EMPXCmdRemove, ETrue ); aMenuPane->SetItemDimmed( EMPXCmdPlayItem, ETrue ); - TInt usbUnblockingStatus; - RProperty::Get( KMPXViewPSUid, - KMPXUSBUnblockingPSStatus, - usbUnblockingStatus); + if ( usbUnblockingStatus == EMPXUSBUnblockingPSStatusActive ) { @@ -6811,8 +6849,15 @@ { selectionCount = iSelectionIndexCache->Count(); } - // do not display add songs option when marking is on - aMenuPane->SetItemDimmed( EMPXCmdAddSongs, selectionCount > 0 ); + // do not display add songs option when marking is on or USB is connected + if ( usbUnblockingStatus == EMPXUSBUnblockingPSStatusActive ) + { + aMenuPane->SetItemDimmed( EMPXCmdAddSongs, ETrue ); + } + else + { + aMenuPane->SetItemDimmed( EMPXCmdAddSongs, selectionCount > 0 ); + } if ( iContainer->CurrentLbxItemIndex() > KErrNotFound ) { @@ -6880,7 +6925,20 @@ { aMenuPane->SetItemDimmed( EMPXCmdSongDetails, ETrue ); } - aMenuPane->SetItemDimmed( EMPXCmdFindInMusicShop, !iUsingNokiaService ); + + TInt usbUnblockingStatus; + RProperty::Get( KMPXViewPSUid, + KMPXUSBUnblockingPSStatus, + usbUnblockingStatus); + + if (usbUnblockingStatus == EMPXUSBUnblockingPSStatusActive) + { + aMenuPane->SetItemDimmed( EMPXCmdFindInMusicShop, ETrue); + } + else + { + aMenuPane->SetItemDimmed( EMPXCmdFindInMusicShop, !iUsingNokiaService ); + } } } if (iServiceHandler->HandleSubmenuL(*aMenuPane)) diff -r 70a8526f03f2 -r 56b11cf8addb mpxplugins/viewplugins/views/commonplaybackview/loc/mpxcommonplaybackview.loc --- a/mpxplugins/viewplugins/views/commonplaybackview/loc/mpxcommonplaybackview.loc Tue May 11 16:10:56 2010 +0300 +++ b/mpxplugins/viewplugins/views/commonplaybackview/loc/mpxcommonplaybackview.loc Tue May 25 12:39:12 2010 +0300 @@ -103,8 +103,8 @@ // d:A string in the main pane. // d:Shown in player view when player FM transmitter is turned on // d:%U is the FM frequency in MHz -// l:mup3_progress_pane_t3 -// r:3.1 +// l:main_mup3_pane_t7/opt14 +// r:5.2 // #define qtn_nmp_display_fm_freq "%U MHz" diff -r 70a8526f03f2 -r 56b11cf8addb mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewcontainer.cpp --- a/mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewcontainer.cpp Tue May 11 16:10:56 2010 +0300 +++ b/mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewcontainer.cpp Tue May 25 12:39:12 2010 +0300 @@ -1160,7 +1160,6 @@ { MPX_FUNC("CMPXCommonPlaybackViewContainer::SizeChanged()"); UpdateLayout(); - UpdateSoftkeyColors(); UpdateBackgroundSkinControlContext( Rect() ); } @@ -1671,4 +1670,13 @@ } } + +// ----------------------------------------------------------------------------- +// CMPXCommonPlaybackViewContainer::SetTransitionType +// ----------------------------------------------------------------------------- +// +void CMPXCommonPlaybackViewContainer::SetTransitionType( TTransitionType aTransitionType ) + { + iTransitionType = aTransitionType; + } // End of File diff -r 70a8526f03f2 -r 56b11cf8addb mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewimp.cpp --- a/mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewimp.cpp Tue May 11 16:10:56 2010 +0300 +++ b/mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewimp.cpp Tue May 25 12:39:12 2010 +0300 @@ -2504,12 +2504,6 @@ { MPX_FUNC_EX( "CMPXCommonPlaybackViewImp::DoActivateL()" ); - if( aPrevViewId.iAppUid == KAppUidMusicPlayerX && iContainer ) - { - // record the begin state for the transition animation. - iContainer->BeginTransition(); - } - iSwitchingView = EFalse; iDatabaseNotReady = EFalse; iUnsupportedNoteDisabled = EFalse; @@ -2570,6 +2564,14 @@ } } + if( aPrevViewId.iAppUid == KAppUidMusicPlayerX && iContainer ) + { + iContainer->SetTransitionType(EMPXTranstionToLeft); + // Transition was started in collection view, we end it here. + iContainer->EndTransition(); + } + + iPlaybackState = iPlaybackUtility->StateL(); MPX_DEBUG2("CMPXCommonPlaybackViewImp::DoActivateL(): state = %d", iPlaybackState); if ( iPlaybackState == EPbStateInitialising ) @@ -4076,6 +4078,8 @@ { toolbar->SetToolbarVisibility(ETrue); } + iContainer->SetRect( ClientRect()); + iContainer->DrawDeferred(); } // End of File diff -r 70a8526f03f2 -r 56b11cf8addb mpxplugins/viewplugins/views/inc/mpxcommonplaybackviewcontainer.h --- a/mpxplugins/viewplugins/views/inc/mpxcommonplaybackviewcontainer.h Tue May 11 16:10:56 2010 +0300 +++ b/mpxplugins/viewplugins/views/inc/mpxcommonplaybackviewcontainer.h Tue May 25 12:39:12 2010 +0300 @@ -399,10 +399,19 @@ /** * Records the transition animation begin state. - * Animation is started when albumart is fetched. */ void BeginTransition(); - + + /** + * Mark the end state. Triggers the transtition. + */ + void EndTransition(); + + /** + * Sets the transtition type for animation. + */ + void SetTransitionType( TTransitionType aTransitionType ); + private: /** @@ -410,11 +419,8 @@ */ void DoUpdateLayoutL(); - /** - * Trickers the transtition. - */ - void EndTransition(); - + + protected: // data MEikCommandObserver* iCommandObserver; // not owned diff -r 70a8526f03f2 -r 56b11cf8addb mpxplugins/viewplugins/views/metadataeditordialog/src/mpxmetadataeditordialog.cpp --- a/mpxplugins/viewplugins/views/metadataeditordialog/src/mpxmetadataeditordialog.cpp Tue May 11 16:10:56 2010 +0300 +++ b/mpxplugins/viewplugins/views/metadataeditordialog/src/mpxmetadataeditordialog.cpp Tue May 25 12:39:12 2010 +0300 @@ -191,6 +191,11 @@ delete iParam; delete iIdle; delete iDrmInfo; + if ( iPlaybackUtility ) + { + iPlaybackUtility->CancelRequest(); + iPlaybackUtility->Close(); + } if ( iCollectionUtility ) { iCollectionUtility->Close(); @@ -1118,51 +1123,43 @@ PopulatePodcastFileDetailsL( aHeadingsArray, aDataArray ); } - // Get modified - if ( iMedia->IsSupported( KMPXMediaGeneralDate ) ) - { - TInt64 timeInt( ( TInt64 )iMedia->ValueTObjectL( - KMPXMediaGeneralDate ) ); - TTime time( timeInt ); - ConvertToLocalTimeL(time); - HBufC* modDateTime = HBufC::NewLC( - KMPXMaxTimeLength + KMPXDurationDisplayResvLen ); - HBufC* format = StringLoader::LoadLC( - R_QTN_DATE_USUAL_WITH_ZERO ); - TPtr modDatePtr = modDateTime->Des(); - MPX_TRAPD( err, time.FormatL( modDatePtr, *format ) ); - CleanupStack::PopAndDestroy( format ); - if (err != KErrNone) - { - aDataArray->AppendL( KNullDesC ); - } - else - { - format = StringLoader::LoadLC( - R_QTN_TIME_USUAL_WITH_ZERO ); - HBufC* modTime = HBufC::NewLC( - format->Length() + KMPXDurationDisplayResvLen ); - TPtr modTimePtr = modTime->Des(); - MPX_TRAPD( err, time.FormatL( modTimePtr, *format ) ); - if ( err != KErrNone ) - { - aDataArray->AppendL( KNullDesC ); - } - else - { - modDatePtr.Append( KMPXSpace ); - modDatePtr.Append( modTimePtr ); - aDataArray->AppendL( modDatePtr ); - } - CleanupStack::PopAndDestroy( modTime ); - CleanupStack::PopAndDestroy( format ); - } - CleanupStack::PopAndDestroy( modDateTime ); - } - else - { - aDataArray->AppendL( KNullDesC ); - } + // Get last modified time + TTime time; + User::LeaveIfError( fs.Modified( uri, time ) ); + ConvertToLocalTimeL( time ); + HBufC* modDateTime = HBufC::NewLC( + KMPXMaxTimeLength + KMPXDurationDisplayResvLen ); + HBufC* format = StringLoader::LoadLC( + R_QTN_DATE_USUAL_WITH_ZERO ); + TPtr modDatePtr = modDateTime->Des(); + MPX_TRAPD( error, time.FormatL( modDatePtr, *format ) ); + CleanupStack::PopAndDestroy( format ); + if (error != KErrNone) + { + aDataArray->AppendL( KNullDesC ); + } + else + { + format = StringLoader::LoadLC( + R_QTN_TIME_USUAL_WITH_ZERO ); + HBufC* modTime = HBufC::NewLC( + format->Length() + KMPXDurationDisplayResvLen ); + TPtr modTimePtr = modTime->Des(); + MPX_TRAPD( err, time.FormatL( modTimePtr, *format ) ); + if ( err != KErrNone ) + { + aDataArray->AppendL( KNullDesC ); + } + else + { + modDatePtr.Append( KMPXSpace ); + modDatePtr.Append( modTimePtr ); + aDataArray->AppendL( modDatePtr ); + } + CleanupStack::PopAndDestroy( modTime ); + CleanupStack::PopAndDestroy( format ); + } + CleanupStack::PopAndDestroy( modDateTime ); // Get filename AppendStringToArrayL( aDataArray, iMedia->ValueText( @@ -2485,8 +2482,8 @@ else // Dialog launched from NowPlayingView { // Get the playback utility instance from engine. - MMPXPlaybackUtility* playbackUtility = MMPXPlaybackUtility::UtilityL( KPbModeDefault ); - MMPXSource* s = playbackUtility->Source(); + iPlaybackUtility = MMPXPlaybackUtility::UtilityL( KPbModeDefault ); + MMPXSource* s = iPlaybackUtility->Source(); if ( s ) { RArray attrs; @@ -2504,7 +2501,6 @@ s->MediaL(attrs.Array(), *this); CleanupStack::PopAndDestroy( &attrs ); } - playbackUtility->Close(); } @@ -2990,25 +2986,21 @@ { PopulatePodcastFileDetailsL(); } -// Get modified -if ( iMedia->IsSupported( KMPXMediaGeneralDate ) ) - { - TInt64 timeInt( ( TInt64 )iMedia->ValueTObjectL( - KMPXMediaGeneralDate ) ); - TTime time( timeInt ); - ConvertToLocalTimeL(time); + // Get last modified time + TTime time; + User::LeaveIfError( fs.Modified( uri, time ) ); + ConvertToLocalTimeL( time ); HBufC* modDateTime = HBufC::NewLC( KMPXMaxTimeLength + KMPXDurationDisplayResvLen ); HBufC* format = StringLoader::LoadLC( R_QTN_DATE_USUAL_WITH_ZERO ); TPtr modDatePtr = modDateTime->Des(); - MPX_TRAPD( err, time.FormatL( modDatePtr, *format ) ); + MPX_TRAPD( error, time.FormatL( modDatePtr, *format ) ); CleanupStack::PopAndDestroy( format ); - if (err != KErrNone) + if ( error != KErrNone) { SetControlTextL(EMPXMetadataEditorDlgCtrlIdLastModified, KNullDesC, KNullDesC); - } else { @@ -3037,13 +3029,6 @@ CleanupStack::PopAndDestroy( format ); } CleanupStack::PopAndDestroy( modDateTime ); - } -else - { - SetControlTextL(EMPXMetadataEditorDlgCtrlIdLastModified, - KNullDesC, KNullDesC); - - } // Get filename SetControlTextL(EMPXMetadataEditorDlgCtrlIdCopyright,