# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1268649611 -7200 # Node ID 171e07ac910ff476b002ef409e63a2af82468d2b # Parent 943ff56250288ce138b1c29e3f7d6ab617aa630b Revision: 201009 Kit: 201010 diff -r 943ff5625028 -r 171e07ac910f mpxmusicplayer/commonui/src/mpxalbumartutil.cpp --- a/mpxmusicplayer/commonui/src/mpxalbumartutil.cpp Fri Mar 12 15:42:25 2010 +0200 +++ b/mpxmusicplayer/commonui/src/mpxalbumartutil.cpp Mon Mar 15 12:40:11 2010 +0200 @@ -317,20 +317,18 @@ { CThumbnailObjectSource* source = CThumbnailObjectSource::NewLC( album, KMPXAlbumMimeType ); TInt ret = NULL; - TInt err = KErrNone; - if(iThumbnailManager ) + if(iThumbnailManager && iReqId >0) { - if(iReqId >0) - { - iThumbnailManager->CancelRequest( iReqId ); - } - TRAP(err, iReqId = TInt (iThumbnailManager->GetThumbnailL( *source, (TAny*)ret))); - } - - if( err != KErrNone) - { - User::Leave( KErrNotFound ); - } + iThumbnailManager->CancelRequest( iReqId ); + } + if(iThumbnailManager) + { + TRAPD(err, iReqId = TInt (iThumbnailManager->GetThumbnailL( *source, (TAny*)ret))); + if( err != KErrNone) + { + User::Leave( KErrNotFound ); + } + } CleanupStack::PopAndDestroy( source ); } } diff -r 943ff5625028 -r 171e07ac910f mpxmusicplayer/commonui/src/mpxcommonuihelper.cpp --- a/mpxmusicplayer/commonui/src/mpxcommonuihelper.cpp Fri Mar 12 15:42:25 2010 +0200 +++ b/mpxmusicplayer/commonui/src/mpxcommonuihelper.cpp Mon Mar 15 12:40:11 2010 +0200 @@ -107,7 +107,7 @@ const TText KRightToLeftMark = 0x200F; -const TInt KMPXChunkSize = 100; // number of songs added in each chunk, IncAddL +const TInt KMPXChunkSize = 50; // number of songs added in each chunk, IncAddL const TInt KSQLErrGeneral = -311; // SQL General error. Don't want to include sql header here _LIT( KMPXCommonUiRscPath, "mpxcommonui.rsc" ); diff -r 943ff5625028 -r 171e07ac910f mpxmusicplayer/metadatahandler/src/mpxmetadatahandlerimp.cpp --- a/mpxmusicplayer/metadatahandler/src/mpxmetadatahandlerimp.cpp Fri Mar 12 15:42:25 2010 +0200 +++ b/mpxmusicplayer/metadatahandler/src/mpxmetadatahandlerimp.cpp Mon Mar 15 12:40:11 2010 +0200 @@ -145,6 +145,10 @@ iEqPresetListener->StartL(); iTrackNumber = 0; iColId.iUid = -1; + + //Notify accessories that currently no track is playing. + iPlayerEventsObserver->TrackChanged(MPlayerEventsObserver::KNoTrackSelected, + MPlayerEventsObserver::KPlaybackPositionUnknown); } // --------------------------------------------------------------------------- diff -r 943ff5625028 -r 171e07ac910f mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/src/mpxdbcommonutil.cpp --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/src/mpxdbcommonutil.cpp Fri Mar 12 15:42:25 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/src/mpxdbcommonutil.cpp Mon Mar 15 12:40:11 2010 +0200 @@ -138,7 +138,7 @@ { TUint at = (begin + end) / 2; const TMimeMapItem & item = KMimeMap[at]; - TUint r = item.iExt->CompareF(extension); + TInt r = item.iExt->CompareF(extension); if (r == 0) { return item.iType; diff -r 943ff5625028 -r 171e07ac910f mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbhandler.h --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbhandler.h Fri Mar 12 15:42:25 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbhandler.h Mon Mar 15 12:40:11 2010 +0200 @@ -940,6 +940,7 @@ /** * Verify the volume id for the databases */ + void VerifyVolumeIdL( TInt aDrive ); void VerifyVolumeIdL(); diff -r 943ff5625028 -r 171e07ac910f mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbalbum.cpp --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbalbum.cpp Fri Mar 12 15:42:25 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbalbum.cpp Mon Mar 15 12:40:11 2010 +0200 @@ -255,8 +255,8 @@ if (aItemChangedMessages) { // add the item changed message - MPXDbCommonUtil::AddItemChangedMessageL(*aItemChangedMessages, aId, EMPXItemModified, - iCategory, KDBPluginUid); + MPXDbCommonUtil::AddItemAlbumChangedMessageL(*aItemChangedMessages, aId, EMPXItemModified, + EMPXAlbum, KDBPluginUid, ETrue, 0 ); } } diff -r 943ff5625028 -r 171e07ac910f mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbhandler.cpp --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbhandler.cpp Fri Mar 12 15:42:25 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbhandler.cpp Mon Mar 15 12:40:11 2010 +0200 @@ -1294,7 +1294,7 @@ iDbManager->OpenDatabaseL(aDrive); // Verify the volume ID after a remount event - VerifyVolumeIdL(); + VerifyVolumeIdL( aDrive ); } // ---------------------------------------------------------------------------- @@ -2671,36 +2671,32 @@ // Verifies that the volume ID of the database matches the drive // ---------------------------------------------------------------------------- // -void CMPXDbHandler::VerifyVolumeIdL() +void CMPXDbHandler::VerifyVolumeIdL( TInt aDrive ) { MPX_DEBUG1("CMPXDbHandler::VerifyVolumeIdL <--"); - - TInt count( iDbDrives.Count() ); - for( TInt i=0; iIsOpen( iDbDrives[i] ) ) + if( iDbManager->IsOpen( aDrive ) ) { TVolumeInfo volInfo; - iFs.Volume(volInfo, iDbDrives[i] ); + iFs.Volume(volInfo, aDrive ); TUint curId(volInfo.iUniqueID); - TInt volId = iDbAuxiliary->IdL( iDbDrives[i] ); + TInt volId = iDbAuxiliary->IdL( aDrive ); // New database, no volume id set, mask out top bit because this is an uint // MPX_DEBUG3("CMPXDBHandler::VerifyVolumeIdL drive:%i db:%i", curId, volId); - if( volId == 0 ) + if( volId == 0 && (curId&0x7FFFFFFF) ) { MPX_DEBUG1("CMPXDbHandler::VerifyVolumeIdL -- New ID"); BeginTransactionL(); - TRAPD( err, iDbAuxiliary->SetIdL( iDbDrives[i], curId&0x7FFFFFFF ) ); + TRAPD( err, iDbAuxiliary->SetIdL( aDrive, curId&0x7FFFFFFF ) ); EndTransactionL( err ); // KSqlDbCorrupted indicates DB corrupted, need to recreate. if ( err == KSqlDbCorrupted ) { MPX_DEBUG1("CMPXPodcastDbHandler::VerifyVolumeIdL -- Corrupted DB"); - iDbManager->RecreateDatabaseL(iDbDrives[i]); + iDbManager->RecreateDatabaseL(aDrive); BeginTransactionL(); TRAPD(err, iDbAuxiliary->SetDBCorruptedL( ETrue ) ); EndTransactionL( err ); @@ -2711,12 +2707,27 @@ else if ( (curId&0x7FFFFFFF) != (volId&0x7FFFFFFFF) ) { MPX_DEBUG1("CMPXDbHandler::VerifyVolumeIdL -- ID match FAILED"); - iDbManager->RecreateDatabaseL(iDbDrives[i]); + iDbManager->RecreateDatabaseL(aDrive); BeginTransactionL(); TRAPD(err, iDbAuxiliary->SetDBCorruptedL( ETrue ) ); EndTransactionL( err ); } } + + MPX_DEBUG1("CMPXDbHandler::VerifyVolumeIdL -->"); + } + +// ---------------------------------------------------------------------------- +// Verifies that the volume ID of the database matches the drive +// ---------------------------------------------------------------------------- +// +void CMPXDbHandler::VerifyVolumeIdL() + { + MPX_DEBUG1("CMPXDbHandler::VerifyVolumeIdL <--"); + TInt count( iDbDrives.Count() ); + for( TInt i=0; i"); } diff -r 943ff5625028 -r 171e07ac910f mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbplugin.cpp --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbplugin.cpp Fri Mar 12 15:42:25 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbplugin.cpp Mon Mar 15 12:40:11 2010 +0200 @@ -64,7 +64,7 @@ const TUid KCRUIDMusicPlayerFeatures = { 0x101FFCD0 }; const TInt KMusicPlayerFeatures = 1; -const TInt KDisablePodcasting = 0x80; +const TInt KDisablePodcasting = 0x08; const TInt KIncrementalDeleteCount = 400; @@ -792,65 +792,66 @@ TInt levels(aPath.Levels()); TBool isASong(EFalse); - aEntries.SetTObjectValueL(KMPXMediaGeneralId, aPath.Id(levels - 1)); - - if (1 == levels) - { - // return the "main menu" - count = iMusicLibraryMenuTitles->Count(); - RArray ids; - CleanupClosePushL(ids); - - // due to ui changes, the order of main menu is changed - // since multiple clients hardcode indexes to each entry, - // the enum cannot be changed, instead we will have to - // manually change the display order to minimize the impact to - // external clients - - // change from: - // all songs, playlist, artist, album, (podcast), genre, composer - // to: - // artist, album, playlist, all songs, (podcast), genre, composer - for (TInt i = EBrowseArtist; i <= EBrowseAlbum; ++i) + + if ( 1 == levels ) + { + + // Redirecting all open requests at level 1 to open albums + // due to UI changes that removed the library menu collection level. + TInt acount = array->Count(); + MPX_DEBUG2(" array count11 [%d]", acount); + + CMPXCollectionPath* path = CMPXCollectionPath::NewL(aPath); + CleanupStack::PushL( path ); + + path->AppendL(3); // Albums + TInt whatLevel = path->Levels(); + + MPX_DEBUG_PATH(*path); + + aEntries.SetTObjectValueL(KMPXMediaGeneralId, path->Id(whatLevel - 1) ); + + // Create a media which hold the pointer to the returned path + if (aEntries.IsSupported(KMPXMediaGeneralValue)) { - MPXDbCommonUtil::AppendMediaL(*array, iMusicLibraryMenuTitles->MdcaPoint(i), EMPXGroup, - CategoryForBrowseType(static_cast(i)), iMusicLibraryMenuIds[i]); - ids.AppendL(TMPXItemId(iMusicLibraryMenuIds[i])); + MPX_DEBUG1(" pointer to the returned path "); + CMPXMedia* pMedia = CMPXMedia::NewL(); + CleanupStack::PushL(pMedia); + pMedia->SetTObjectValueL(KMPXMediaGeneralValue, + aEntries.ValueTObjectL(KMPXMediaGeneralValue)); + array->AppendL(*pMedia); + CleanupStack::PopAndDestroy(pMedia); } - MPXDbCommonUtil::AppendMediaL(*array, iMusicLibraryMenuTitles->MdcaPoint(1), EMPXGroup, - CategoryForBrowseType(static_cast(1)), iMusicLibraryMenuIds[1]); - ids.AppendL(TMPXItemId(iMusicLibraryMenuIds[1])); - MPXDbCommonUtil::AppendMediaL(*array, iMusicLibraryMenuTitles->MdcaPoint(0), EMPXGroup, - CategoryForBrowseType(static_cast(0)), iMusicLibraryMenuIds[0]); - ids.AppendL(TMPXItemId(iMusicLibraryMenuIds[0])); - -#ifdef __ENABLE_PODCAST_IN_MUSIC_MENU - if( !iDisablePodcasting ) + + + RArray openAttrs; + CleanupClosePushL(openAttrs); + + RArray supportedIds; + CleanupClosePushL(supportedIds); + + SetAttributesL(*path, openAttrs, supportedIds); + openAttrs.AppendL(KMPXMediaArrayContents); + + CleanupStack::PopAndDestroy(&supportedIds); + + if( iAllSongsValid ) + { + isASong = DoOpenBrowseAlbumL( *path, openAttrs.Array(), aEntries, array ); + } + CleanupStack::PopAndDestroy(&openAttrs); + CleanupStack::PopAndDestroy( path ); + + //Remove the first media + if ( array->Count() && + (*array)[0]->IsSupported(KMPXMediaGeneralValue)) { - MPXDbCommonUtil::AppendMediaL(*array, iMusicLibraryMenuTitles->MdcaPoint(EBrowsePodcasts), EMPXGroup, - CategoryForBrowseType(static_cast(EBrowsePodcasts)), iMusicLibraryMenuIds[EBrowsePodcasts]); - ids.AppendL(TMPXItemId(iMusicLibraryMenuIds[EBrowsePodcasts])); + array->Remove(0); } -#endif // __ENABLE_PODCAST_IN_MUSIC_MENU - - // Genre and composer - for (TInt i = ( EBrowseGenre ); i < count; ++i) - { - MPXDbCommonUtil::AppendMediaL(*array, iMusicLibraryMenuTitles->MdcaPoint(i), EMPXGroup, - CategoryForBrowseType(static_cast(i)), iMusicLibraryMenuIds[i]); - ids.AppendL(TMPXItemId(iMusicLibraryMenuIds[i])); - } - - TInt pPath = aEntries.ValueTObjectL(KMPXMediaGeneralValue); - MPX_ASSERT(pPath); - ((CMPXCollectionPath*)pPath)->AppendL(ids.Array()); - CleanupStack::PopAndDestroy(&ids); - SetMediaGeneralAttributesL(aEntries, EMPXGroup, EMPXCollection, *iMusicMenuTitle); - aEntries.SetTObjectValueL( - KMPXMediaGeneralNonPermissibleActions, EMPXWrite); - } + } else if (levels >= 2) { + aEntries.SetTObjectValueL(KMPXMediaGeneralId, aPath.Id(levels - 1)); // Create a media which hold the pointer to the returned path if (aEntries.IsSupported(KMPXMediaGeneralValue)) { @@ -3820,7 +3821,14 @@ // Cancel is called, no need to callback to observer if (aErr != KErrCancel) { - iObs->HandleCommandComplete(NULL, aErr); + if( iActiveTask->GetTask() == KMPXCommandIdCollectionAdd ) + { + iObs->HandleCommandComplete( &iActiveTask->GetCommand(), aErr ); + } + else + { + iObs->HandleCommandComplete(NULL, aErr); + } } if( iDbHandler->InTransaction() ) diff -r 943ff5625028 -r 171e07ac910f mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/src/mpxdbplugin.cpp --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/src/mpxdbplugin.cpp Fri Mar 12 15:42:25 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/src/mpxdbplugin.cpp Mon Mar 15 12:40:11 2010 +0200 @@ -64,7 +64,7 @@ const TUid KCRUIDMusicPlayerFeatures = { 0x101FFCD0 }; const TInt KMusicPlayerFeatures = 1; -const TInt KDisablePodcasting = 0x80; +const TInt KDisablePodcasting = 0x08; const TInt KIncrementalDeleteCount = 400; diff -r 943ff5625028 -r 171e07ac910f mpxplugins/serviceplugins/collectionplugins/mpxsqlitepodcastdbplugin/inc/mpxpodcastdbhandler.h --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitepodcastdbplugin/inc/mpxpodcastdbhandler.h Fri Mar 12 15:42:25 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitepodcastdbplugin/inc/mpxpodcastdbhandler.h Mon Mar 15 12:40:11 2010 +0200 @@ -469,6 +469,7 @@ /** * Verify the volume id for the databases */ + void VerifyVolumeIdL( TInt aDrive ); void VerifyVolumeIdL(); /** diff -r 943ff5625028 -r 171e07ac910f mpxplugins/serviceplugins/collectionplugins/mpxsqlitepodcastdbplugin/src/mpxpodcastdbhandler.cpp --- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitepodcastdbplugin/src/mpxpodcastdbhandler.cpp Fri Mar 12 15:42:25 2010 +0200 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitepodcastdbplugin/src/mpxpodcastdbhandler.cpp Mon Mar 15 12:40:11 2010 +0200 @@ -795,7 +795,7 @@ iDbManager->OpenDatabaseL(aDrive); // Verify the volume ID after a remount event - VerifyVolumeIdL(); + VerifyVolumeIdL( aDrive ); } // ---------------------------------------------------------------------------- @@ -1425,52 +1425,64 @@ // Verifies that the volume ID of the database matches the drive // ---------------------------------------------------------------------------- // +void CMPXPodcastDbHandler::VerifyVolumeIdL( TInt aDrive ) + { + MPX_DEBUG1("CMPXPodcastDbHandler::VerifyVolumeIdL <--"); + + if( iDbManager->IsOpen(aDrive) ) + { + TVolumeInfo volInfo; + iFs.Volume(volInfo, aDrive ); + TUint curId(volInfo.iUniqueID); + + TInt volId = iDbAuxiliary->IdL( aDrive ); + + // New database, no volume id set, mask out top bit because this is an uint + // + MPX_DEBUG3("CMPXPodcastDbHandler::VerifyVolumeIdL drive:%i db:%i", curId, volId); + if( volId == 0 && (curId&0x7FFFFFFF) ) + { + MPX_DEBUG1("CMPXPodcastDbHandler::VerifyVolumeIdL -- New ID"); + BeginTransactionL(); + TRAPD( err, iDbAuxiliary->SetIdL( aDrive, curId&0x7FFFFFFF ) ); + EndTransactionL( err ); + + // KSqlDbCorrupted indicates DB corrupted, need to recreate. + if ( err == KSqlDbCorrupted ) + { + MPX_DEBUG1("CMPXPodcastDbHandler::VerifyVolumeIdL -- Corrupted DB"); + iDbManager->RecreateDatabaseL( aDrive ); + BeginTransactionL(); + TRAPD( err, iDbAuxiliary->SetDBCorruptedL( ETrue ) ); + EndTransactionL( err ); + } + } + // Unmatched volume id, mark db as corrupt + // + else if ( (curId&0x7FFFFFFF) != (volId&0x7FFFFFFFF) ) + { + MPX_DEBUG1("CMPXPodcastDbHandler::VerifyVolumeIdL -- ID match FAILED"); + iDbManager->RecreateDatabaseL( aDrive ); + BeginTransactionL(); + TRAPD( err, iDbAuxiliary->SetDBCorruptedL( ETrue ) ); + EndTransactionL( err ); + } + } + MPX_DEBUG1("CMPXPodcastDbHandler::VerifyVolumeIdL -->"); + } + + +// ---------------------------------------------------------------------------- +// Verifies that the volume ID of the database matches the drive +// ---------------------------------------------------------------------------- +// void CMPXPodcastDbHandler::VerifyVolumeIdL() { MPX_DEBUG1("CMPXPodcastDbHandler::VerifyVolumeIdL <--"); - TInt count( iDbDrives.Count() ); for( TInt i=0; iIsOpen(iDbDrives[i]) ) - { - TVolumeInfo volInfo; - iFs.Volume(volInfo, iDbDrives[i] ); - TUint curId(volInfo.iUniqueID); - - TInt volId = iDbAuxiliary->IdL( iDbDrives[i] ); - - // New database, no volume id set, mask out top bit because this is an uint - // - MPX_DEBUG3("CMPXPodcastDbHandler::VerifyVolumeIdL drive:%i db:%i", curId, volId); - if( volId == 0 ) - { - MPX_DEBUG1("CMPXPodcastDbHandler::VerifyVolumeIdL -- New ID"); - BeginTransactionL(); - TRAPD( err, iDbAuxiliary->SetIdL( iDbDrives[i], curId&0x7FFFFFFF ) ); - EndTransactionL( err ); - - // KSqlDbCorrupted indicates DB corrupted, need to recreate. - if ( err == KSqlDbCorrupted ) - { - MPX_DEBUG1("CMPXPodcastDbHandler::VerifyVolumeIdL -- Corrupted DB"); - iDbManager->RecreateDatabaseL(iDbDrives[i]); - BeginTransactionL(); - TRAPD(err, iDbAuxiliary->SetDBCorruptedL( ETrue ) ); - EndTransactionL( err ); - } - } - // Unmatched volume id, mark db as corrupt - // - else if ( (curId&0x7FFFFFFF) != (volId&0x7FFFFFFFF) ) - { - MPX_DEBUG1("CMPXPodcastDbHandler::VerifyVolumeIdL -- ID match FAILED"); - iDbManager->RecreateDatabaseL(iDbDrives[i]); - BeginTransactionL(); - TRAPD(err, iDbAuxiliary->SetDBCorruptedL( ETrue ) ); - EndTransactionL( err ); - } - } + VerifyVolumeIdL(iDbDrives[i]); } MPX_DEBUG1("CMPXPodcastDbHandler::VerifyVolumeIdL -->"); } diff -r 943ff5625028 -r 171e07ac910f mpxplugins/viewplugins/inc/mpxcommonplaybackviewimp.h --- a/mpxplugins/viewplugins/inc/mpxcommonplaybackviewimp.h Fri Mar 12 15:42:25 2010 +0200 +++ b/mpxplugins/viewplugins/inc/mpxcommonplaybackviewimp.h Mon Mar 15 12:40:11 2010 +0200 @@ -12,7 +12,7 @@ * Contributors: * * Description: MPX common playback view implementation -* Version : %version: da1mmcf#41.1.6.1.1.1.9 % << Don't touch! Updated by Synergy at check-out. +* Version : %version: da1mmcf#41.1.6.1.1.1.10 % << Don't touch! Updated by Synergy at check-out. * */ @@ -642,6 +642,12 @@ * @param aPtr pointer to self */ static TInt HandleDelayedError( TAny* aPtr ); + + /** + * Callback function of timer to handle TN request for custom size + * @param aPtr pointer to self + */ + static TInt HandleTNRequestForCustomSizeL( TAny* aPtr ); protected: // Data @@ -754,6 +760,9 @@ TInt iOldPosition; // in seconds TBool iIsTapped; TCommandSender iCommandSender; + + TSize iFullScreenImageSize; + CPeriodic* iTNRequestTimer; }; #endif // CMPXCOMMONPLAYBACKVIEWIMP_H diff -r 943ff5625028 -r 171e07ac910f mpxplugins/viewplugins/views/audioeffectsview/group/mpxaudioeffectsview.mmp --- a/mpxplugins/viewplugins/views/audioeffectsview/group/mpxaudioeffectsview.mmp Fri Mar 12 15:42:25 2010 +0200 +++ b/mpxplugins/viewplugins/views/audioeffectsview/group/mpxaudioeffectsview.mmp Mon Mar 15 12:40:11 2010 +0200 @@ -72,6 +72,7 @@ LIBRARY commonengine.lib LIBRARY mpxplaybackutility.lib LIBRARY mpxcommon.lib +LIBRARY mpxviewutility.lib #if defined(ARMCC) deffile ../eabi/ diff -r 943ff5625028 -r 171e07ac910f mpxplugins/viewplugins/views/audioeffectsview/inc/mpxaudioeffectsviewimp.h --- a/mpxplugins/viewplugins/views/audioeffectsview/inc/mpxaudioeffectsviewimp.h Fri Mar 12 15:42:25 2010 +0200 +++ b/mpxplugins/viewplugins/views/audioeffectsview/inc/mpxaudioeffectsviewimp.h Mon Mar 15 12:40:11 2010 +0200 @@ -33,7 +33,7 @@ class MMPXPlaybackUtility; class CMPXAudioEffectEngine; class CCustomCommandUtility; - +class MMPXViewUtility; /** * CMPXAudioEffectsViewImp, View class for audio settings @@ -125,6 +125,7 @@ TVwsViewId iPreviousView; TInt iResourceOffset; + MMPXViewUtility* iViewUtility; }; #endif // C_CMPXAUDIOEFFECTSVIEWIMP_H diff -r 943ff5625028 -r 171e07ac910f mpxplugins/viewplugins/views/audioeffectsview/src/mpxaudioeffectsviewimp.cpp --- a/mpxplugins/viewplugins/views/audioeffectsview/src/mpxaudioeffectsviewimp.cpp Fri Mar 12 15:42:25 2010 +0200 +++ b/mpxplugins/viewplugins/views/audioeffectsview/src/mpxaudioeffectsviewimp.cpp Mon Mar 15 12:40:11 2010 +0200 @@ -28,6 +28,7 @@ #include #include +#include #include "mpxaudioeffectengine.h" #include "mpxaudioeffectsmodel.h" @@ -71,6 +72,8 @@ iPlaybackUtility = MMPXPlaybackUtility::UtilityL( KPbModeDefault ); iModel = CMPXAudioEffectsModel::NewL( *iPlaybackUtility ); + + iViewUtility = MMPXViewUtility::UtilityL(); } // --------------------------------------------------------------------------- @@ -113,6 +116,12 @@ { CCoeEnv::Static()->DeleteResourceFile( iResourceOffset ); } + + if ( iViewUtility ) + { + iViewUtility->Close(); + } + } // ----------------------------------------------------------------------------- @@ -159,6 +168,11 @@ AppUi()->AppHelpContextL()); break; } + case EAknSoftkeyBack: + { + iViewUtility->ActivatePreviousViewL(); + break; + } default: { // Pass the command to AppUi to handle. diff -r 943ff5625028 -r 171e07ac910f mpxplugins/viewplugins/views/collectionviewhg/data/mpxcollectionviewhg.rss --- a/mpxplugins/viewplugins/views/collectionviewhg/data/mpxcollectionviewhg.rss Fri Mar 12 15:42:25 2010 +0200 +++ b/mpxplugins/viewplugins/views/collectionviewhg/data/mpxcollectionviewhg.rss Mon Mar 15 12:40:11 2010 +0200 @@ -1480,14 +1480,14 @@ //------------------------------------------------------------------------------ -// r_mpx_progress_note -// Generic Progress note. +// r_mpx_wait_note +// Generic Wait note. //------------------------------------------------------------------------------ // -RESOURCE DIALOG r_mpx_progress_note +RESOURCE DIALOG r_mpx_wait_note { - flags = EAknProgressNoteFlags; - buttons = R_AVKON_SOFTKEYS_CANCEL; + flags = EAknWaitNoteFlags; + buttons = R_AVKON_SOFTKEYS_EMPTY; items = { DLG_LINE @@ -1496,7 +1496,8 @@ id = 0x1000; control = AVKON_NOTE { - layout = EProgressLayout; + layout = EWaitLayout; + animation = R_QGN_GRAF_WAIT_BAR_ANIM; }; } }; diff -r 943ff5625028 -r 171e07ac910f mpxplugins/viewplugins/views/collectionviewhg/inc/mpxcollectionviewhgimp.h --- a/mpxplugins/viewplugins/views/collectionviewhg/inc/mpxcollectionviewhgimp.h Fri Mar 12 15:42:25 2010 +0200 +++ b/mpxplugins/viewplugins/views/collectionviewhg/inc/mpxcollectionviewhgimp.h Mon Mar 15 12:40:11 2010 +0200 @@ -21,7 +21,7 @@ // INCLUDES #include -#include // MProgressDialogCallback +#include #include #include #include @@ -203,18 +203,17 @@ void StartWaitNoteL( TWaitNoteType aNoteType ); /** - * Start either the delete progress note + * Start either the delete wait note * */ - void StartProgressNoteL(); + void StartDeleteWaitNoteL(); /** * Updates the progress note text and progress bar * - * @param aProgress Indicates the portion of the process completed * @param aProgressText Text to be displayed on the progress note */ - void UpdateProcessL( TInt aProgress, const TDesC& aProgressText ); + void UpdateProcessL( const TDesC& aProgressText ); /** * Close a wait note @@ -843,7 +842,8 @@ * Stores the current list box item index. */ void StoreListboxItemIndexL(); - + + void ShowAddedItemsDialogL(); /* * Internal function for registering to BackStepping service. @@ -904,7 +904,7 @@ TBool iIgnoreNextFocusChangedMessage; TBool iCollectionReady; // for incremental open TBool iCollectionCacheReady; //cache ready - + TInt iCurrentPlaylistOp; TInt iNumSongAddedToPlaylist; TMPXItemId iPlaylistId; @@ -982,9 +982,8 @@ TInt iMusicStoreWebPage; HBufC16* iOperatorMusicStoreURI; - // Progress note for delete - CAknProgressDialog* iProgressDialog; - CEikProgressInfo* iProgressInfo; + // Wait note for delete + CAknWaitDialog* iWaitDialog; TBool iIsAddingToPlaylist; // flag used to handle the return by adding songs incrementally CUpnpCopyCommand* iUpnpCopyCommand; @@ -992,6 +991,9 @@ TBool iMarkedAll; TBool iFirstIncrementalBatch; CMPXMedia *iStoredAlbum; // owned + + TBool iDialogDismissed; + HBufC* iTitleWait; // Owned }; #endif // C_CMPXCOLLECTIONVIEWHGIMP_H diff -r 943ff5625028 -r 171e07ac910f mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgcontainer.cpp --- a/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgcontainer.cpp Fri Mar 12 15:42:25 2010 +0200 +++ b/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgcontainer.cpp Mon Mar 15 12:40:11 2010 +0200 @@ -67,7 +67,7 @@ #include #include // For transition effects -#include // For transition effects +#include // For transition effects #include "mpxcommoncontainer.hrh" #include "mpxcollectionviewhg.hrh" @@ -486,7 +486,7 @@ { CEikImage* newIcon = iContextPane->SwapPicture( iOrigIcon ); delete newIcon; - iOrigIcon = NULL; + iOrigIcon = NULL; } } @@ -742,10 +742,10 @@ { if ( iCurrentViewType == EMPXViewMediawall ) { - if ( iDialog ) + if ( iDialog ) { iDialog->CancelPopup(); - } + } } iSetEmptyTextNeeded = ETrue; @@ -759,8 +759,6 @@ iLayoutSwitch = ETrue; - if( iCbaHandler ) - iCbaHandler->UpdateCba(); TRect clientRect = ((CAknView*)iView)->ClientRect(); SetRect( clientRect ); @@ -1188,7 +1186,19 @@ HandleLbxItemRemovalL(); TViewType prevViewType = iCurrentViewType; - ResolveCurrentViewType(); + //no songs and no allbums, then its list view + if ( count > 0 ) + { + ResolveCurrentViewType(); + } + else + { + TBool landscapeOrientation = Layout_Meta_Data::IsLandscapeOrientation(); + if( landscapeOrientation ) + iCurrentViewType = EMPXViewMediawall; + else + iCurrentViewType = EMPXViewList; + } iThumbnailReqMap.Reset(); if (ShuffleItemPresent()) @@ -1267,7 +1277,7 @@ { LoadAndSetEmptyTextL(); iSetEmptyTextNeeded = EFalse; - } + } if( !iDefaultIconSet ) { SetDefaultIconL(); @@ -1793,13 +1803,13 @@ TBool CMPXCollectionViewHgContainer::IsTBoneView() { TBool tBoneView = EFalse; - + if( EMPXViewTBone == iCurrentViewType ) tBoneView = ETrue; - + return tBoneView; } - + // ---------------------------------------------------------------------------- // Resolve the current view type based on the browsing context // ---------------------------------------------------------------------------- @@ -1821,7 +1831,6 @@ { iCurrentViewType = EMPXViewTBone; iContext = EContextItemAlbum; - iOpenAlbumTracks = EFalse; } else { @@ -1895,7 +1904,7 @@ MPX_FUNC( "CMPXCollectionViewHgContainer::IsSelectedItemASong" ); TBool res(EFalse); - if ( iContext == EContextItemAlbum || + if ( iContext == EContextItemAlbum || iContext == EContextGroupSong || iContext == EContextItemGenre ) { @@ -1925,9 +1934,9 @@ CMPXMedia* CMPXCollectionViewHgContainer::SelectedItemMediaL() { MPX_FUNC( "CMPXCollectionViewHgImp::SelectedItemMediaL" ); - CMPXMedia* song = NULL; + CMPXMedia* song = NULL; const CMPXMediaArray& albums = iListBoxArray->MediaArray(); - CMPXMedia* album( albums.AtL( iSelectedAlbumIndex ) ); + CMPXMedia* album( albums.AtL( iSelectedAlbumIndex ) ); const CMPXMediaArray* songs = album->Value(KMPXMediaArrayContents); CHgScroller* listWidget = CurrentListWidget(); if (listWidget && songs) @@ -2270,30 +2279,61 @@ { const CMPXMediaArray& mediaArray = iListBoxArray->MediaArray(); TInt index(0); - for( TInt i = aBufferStart; i <= aBufferEnd; i++ ) + + if(iDirection == MHgScrollBufferObserver::EHgBufferScrollUp ) { - // Just get the exiting item and update the fields + icon. - CHgItem* item = NULL; - if( iMediaWall ) - item = &iMediaWall->ItemL(i); - else - item = &iListWidget->ItemL(i); - - index = MediaIndex(i); - if ( index >= 0 ) - { - CMPXMedia* currentMedia( mediaArray.AtL( index ) ); - AddThumbnailToDisplayedItemL( item, currentMedia, index ); - } - else - { - if ( iCurrentViewType == EMPXViewMediawall || - iCurrentViewType == EMPXViewList && (i-iShuffleItem) == -1 ) - SetDetailIconShuffleL(); - iThumbnailReqMap[i] = ETrue; - RefreshNoThumbnailL(i); + for( TInt i = aBufferEnd; i >= aBufferStart; i-- ) + { + // Just get the exiting item and update the fields + icon. + CHgItem* item = NULL; + if( iMediaWall ) + item = &iMediaWall->ItemL(i); + else + item = &iListWidget->ItemL(i); + + index = MediaIndex(i); + if ( index >= 0 ) + { + CMPXMedia* currentMedia( mediaArray.AtL( index ) ); + AddThumbnailToDisplayedItemL( item, currentMedia, index ); + } + else + { + if ( iCurrentViewType == EMPXViewMediawall || + iCurrentViewType == EMPXViewList && (i-iShuffleItem) == -1 ) + SetDetailIconShuffleL(); + iThumbnailReqMap[i] = ETrue; + RefreshNoThumbnailL(i); + } } - } + } + else + { + for( TInt i = aBufferStart; i <= aBufferEnd; i++ ) + { + // Just get the exiting item and update the fields + icon. + CHgItem* item = NULL; + if( iMediaWall ) + item = &iMediaWall->ItemL(i); + else + item = &iListWidget->ItemL(i); + + index = MediaIndex(i); + if ( index >= 0 ) + { + CMPXMedia* currentMedia( mediaArray.AtL( index ) ); + AddThumbnailToDisplayedItemL( item, currentMedia, index ); + } + else + { + if ( iCurrentViewType == EMPXViewMediawall || + iCurrentViewType == EMPXViewList && (i-iShuffleItem) == -1 ) + SetDetailIconShuffleL(); + iThumbnailReqMap[i] = ETrue; + RefreshNoThumbnailL(i); + } + } + } } // ----------------------------------------------------------------------------- @@ -3714,7 +3754,12 @@ MPX_DEBUG_PATH(*cpath); - if (cpath->Levels() == 3) + if ( 2 == cpath->Levels()) + { + cpath->Back(); + cpath->AppendL(3); + } + else if (cpath->Levels() == 3) { // go back one level before amending path with new levels cpath->Back(); @@ -3846,7 +3891,13 @@ CleanupStack::PushL( cpath ); MPX_DEBUG_PATH(*cpath); - if (cpath->Levels() == 3) + + if ( 2 == cpath->Levels()) + { + cpath->Back(); + cpath->AppendL(3); + } + else if (cpath->Levels() == 3) { // go back one level before amending path with new levels cpath->Back(); @@ -4249,7 +4300,7 @@ listBox->ConstructL( dialog, EAknListBoxSelectionList | EAknListBoxScrollBarSizeExcluded ); - + listBox->CreateScrollBarFrameL( ETrue ); listBox->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, @@ -4567,7 +4618,20 @@ CMPXCollectionViewHgContainer* self = static_cast(aPtr); if( self ) { + //check if the pointer to ContainerMedia exists + const CMPXMedia& media = self->iListBoxArray->ContainerMedia(); + if ( NULL == &media ) + { + return KErrNone; + } + + self->HandleLbxItemAdditionL(); + + if( self->iCbaHandler ) + { + self->iCbaHandler->UpdateCba(); + } } return KErrNone; } @@ -4708,7 +4772,7 @@ TInt resId = R_MPX_COLLECTION_ALBUM_LBX_EMPTYTEXT; HBufC* emptyText = StringLoader::LoadLC( resId ); SetLbxEmptyTextL( *emptyText ); - CleanupStack::PopAndDestroy( emptyText ); + CleanupStack::PopAndDestroy( emptyText ); } } @@ -4746,7 +4810,9 @@ iTranstionType = EMPXTranstionNotDefined; return; } - else if( iCurrentViewType == EMPXViewTBone ) + else if( iContext == EContextItemAlbum || + iContext == EContextItemGenre || + iContext == EContextItemPlaylist ) { iTranstionType = EMPXTranstionToRight; } @@ -4755,6 +4821,9 @@ { 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; diff -r 943ff5625028 -r 171e07ac910f mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgimp.cpp --- a/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgimp.cpp Fri Mar 12 15:42:25 2010 +0200 +++ b/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgimp.cpp Mon Mar 15 12:40:11 2010 +0200 @@ -37,8 +37,8 @@ #include #include #include -#include -#include +#include +#include #ifdef RD_MULTIPLE_DRIVE #include #endif //RD_MULTIPLE_DRIVE @@ -48,9 +48,9 @@ #include #include -#include +#include #include -#include +#include #include #include @@ -130,7 +130,6 @@ const TInt KIncrementalDelayHalfSecond = 1000000; const TInt KIncrementalFetchBlockSize = 400; const TInt KIncrementalDirectionCount = 8; -const TInt KProgressBarMaxValue = 100; // Max Value for the Progress Info bar const TInt KWaitNoteImpUid = 0x101FFC6C; // refresh wait note UID #ifdef __ENABLE_PODCAST_IN_MUSIC_MENU const TInt KMusicMenuPodcastMenuItemIndex = 4; // podcast menu item index @@ -287,7 +286,10 @@ AppUi()->RemoveFromStack( iContainer ); delete iContainer; } - + if( iTitleWait ) + { + delete iTitleWait; + } delete iUserPlaylists; delete iCommonUiHelper; delete iSendUi; @@ -322,7 +324,9 @@ iCurrentHighlightedIndex( KErrNotFound ), iCachedCommand( KErrNotFound ), iNoteType( EMPXNoteNotDefined ), - iFirstIncrementalBatch( ETrue ) + iFirstIncrementalBatch( ETrue ), + iDialogDismissed( EFalse ), + iTitleWait( NULL ) { MPX_FUNC( "CMPXCollectionViewHgImp::CMPXCollectionViewHgImp" ); iUsingNokiaService = EFalse; @@ -626,9 +630,6 @@ if ( !isIgnore && iCollectionReady ) { CMPXCommonListBoxArrayBase* listboxArray( iContainer->ListBoxArray() ); - const CMPXMedia& containerMedia( listboxArray->ContainerMedia() ); - - const TMPXItemId containerId = containerMedia.ValueTObjectL(KMPXMediaGeneralId); HBufC* promptTxt( NULL ); HBufC* waitNoteText( NULL ); @@ -657,7 +658,12 @@ const TDesC& trackTitle( albumTrack->ValueText( KMPXMediaGeneralTitle ) ); // create the item path to delete - if ( path->Levels() == 3 ) + if ( 2 == path->Levels() ) + { + path->Back(); + path->AppendL(3); + } + else if ( path->Levels() == 3 ) { path->Back(); } @@ -667,9 +673,15 @@ path->Back(); } - - path->AppendL(containerId); - path->AppendL(trackId); + TInt currentIndex( iContainer->CurrentLbxItemIndex() ); + const CMPXMediaArray& albums = listboxArray->MediaArray(); + CMPXMedia* album( albums.AtL( currentIndex ) ); + const TMPXItemId albumId = album->ValueTObjectL(KMPXMediaGeneralId); + + path->AppendL(albumId); + path->AppendL(trackId); + + MPX_DEBUG_PATH(*path); waitNoteText = StringLoader::LoadLC( R_MPX_QTN_ALBUM_WAITING_DELETING, trackTitle ); @@ -703,6 +715,9 @@ if(iCachedCommand != aCommand) { iIsWaitNoteCanceled = EFalse; + StartDeleteWaitNoteL(); + TPtr buf = waitNoteText->Des(); + UpdateProcessL( buf ); } if ( !iIsWaitNoteCanceled ) { @@ -798,13 +813,36 @@ // Create a copy of collection path CMPXCollectionPath* path( iCollectionUtility->Collection().PathL() ); CleanupStack::PushL( path ); + + if ( 2 == path->Levels() ) + { + path->Back(); + path->AppendL(3); + + const CMPXMediaArray& albums = listboxArray->MediaArray(); + + RArray ids; + CleanupClosePushL(ids); + + TInt albumCount = albums.Count(); + for (TInt i=0; iValueTObjectL(KMPXMediaGeneralId); + ids.AppendL(id); + } + path->AppendL(ids.Array()); // top level items + ids.Reset(); + path->Set(currentIndex); + CleanupStack::PopAndDestroy(&ids); + } + MPX_DEBUG_PATH(*path); + HBufC* promptTxt( NULL ); HBufC* waitNoteText( NULL ); TInt waitNoteCBA( R_AVKON_SOFTKEYS_EMPTY ); MPX_DEBUG2( "CMPXCollectionViewHgImp::DeleteSelectedItemsL delete array count = %d", arrayCount ); - // delete single song, not show wait note - TBool singleSong( EFalse ); TMPXGeneralType containerType( containerMedia.ValueTObjectL( KMPXMediaGeneralType ) ); @@ -906,11 +944,6 @@ if ( ( type == EMPXItem && category == EMPXSong ) || ( type == EMPXItem && category == EMPXPlaylist ) ) { - // delete single song - if ( type == EMPXItem && category == EMPXSong ) - { - singleSong = ETrue; - } // tracks level, or deleting a playlist waitNoteText = StringLoader::LoadLC( R_MPX_QTN_ALBUM_WAITING_DELETING, title ); @@ -1029,13 +1062,9 @@ if(iCachedCommand != aCommand) { iIsWaitNoteCanceled = EFalse; - // If delete one song, don't show progress note. - if ( !singleSong ) - { - StartProgressNoteL(); - TPtr buf = waitNoteText->Des(); - UpdateProcessL(0, buf); - } + StartDeleteWaitNoteL(); + TPtr buf = waitNoteText->Des(); + UpdateProcessL( buf ); } if ( !iIsWaitNoteCanceled ) @@ -1390,31 +1419,29 @@ } // --------------------------------------------------------------------------- -// Start a Progress note +// Start a Wait note // --------------------------------------------------------------------------- // -void CMPXCollectionViewHgImp::StartProgressNoteL() +void CMPXCollectionViewHgImp::StartDeleteWaitNoteL() { - iProgressDialog = new (ELeave) CAknProgressDialog( - (REINTERPRET_CAST(CEikDialog**, &iProgressDialog)), + iWaitDialog = new (ELeave) CAknWaitDialog( + (REINTERPRET_CAST(CEikDialog**, &iWaitDialog)), ETrue); - iProgressDialog->PrepareLC(R_MPX_PROGRESS_NOTE); - iProgressInfo = iProgressDialog->GetProgressInfoL(); - iProgressDialog->SetCallback(this); - iProgressDialog->RunLD(); - iProgressInfo->SetFinalValue(KProgressBarMaxValue); + iWaitDialog->PrepareLC(R_MPX_WAIT_NOTE); + + iWaitDialog->SetCallback(this); + iWaitDialog->RunLD(); } // --------------------------------------------------------------------------- // Update the Progress note // --------------------------------------------------------------------------- // -void CMPXCollectionViewHgImp::UpdateProcessL( TInt aProgress, const TDesC& aProgressText ) +void CMPXCollectionViewHgImp::UpdateProcessL( const TDesC& aProgressText ) { - if ( iProgressDialog ) - { - iProgressDialog->SetTextL(aProgressText); - iProgressInfo->SetAndDraw(aProgress); + if ( iWaitDialog ) + { + iWaitDialog->SetTextL(aProgressText); } } @@ -2743,11 +2770,16 @@ else { //single selection - isHidden = array->IsItemBrokenLinkL( - iContainer->CurrentLbxItemIndex() ); - isHidden = isHidden || - array->IsItemCorruptedL( - iContainer->CurrentLbxItemIndex() ); + TInt currentIndex( iContainer->CurrentLbxItemIndex() ); + if( currentIndex > KErrNotFound ) + { + isHidden = array->IsItemBrokenLinkL( currentIndex ); + isHidden = isHidden || array->IsItemCorruptedL( currentIndex ); + } + else + { + isHidden = ETrue; + } } } @@ -2896,9 +2928,17 @@ CMPXMedia* albumTrack = iContainer->SelectedItemMediaL(); TMPXItemId trackId = albumTrack->ValueTObjectL(KMPXMediaGeneralId); - - path->Back(); - path->Back(); + // create the item path to send + + if ( path->Levels() == 3 ) //TBone album level + { + path->Back(); + } + else if (path->Levels() == 4) //TBone Song Node level + { + path->Back(); + path->Back(); + } path->AppendL(aContainerId); path->AppendL(trackId); @@ -3674,6 +3714,7 @@ { MPX_FUNC( "CMPXCollectionViewHgImp::HandleAddCompletedL" ); iAddingToNewPlaylist = EFalse; + iDialogDismissed = EFalse; iCommonUiHelper->DismissWaitNoteL(); HandleCommandL( EMPXCmdHandleExternalCommand ); if ( aError == KErrNone ) @@ -3686,45 +3727,16 @@ MPX_DEBUG2( "CMPXCollectionViewHgImp::HandleAddCompletedL iPlaylistId = 0x%x", iPlaylistId.iId1 ); if ( iCurrentPlaylistOp != EMPXOpPLCreating ) { - HBufC* confirmTxt( NULL ); - const TDesC& title( aPlaylist->ValueText( KMPXMediaGeneralTitle ) ); - TMPlayerSecondaryDisplayNote noteId( EMPlayerNoteNone ); - if ( iNumSongAddedToPlaylist > 1 ) - { - confirmTxt = StringLoader::LoadLC( - R_MPX_QTN_MUS_MULTIPLE_TRACKS_ADDED_TO_PL, - title, iNumSongAddedToPlaylist ); - noteId = EMPlayerNoteAddManySongToPlaylist; - } - else - { - confirmTxt = StringLoader::LoadLC( - R_MPX_QTN_MUS_NOTE_TRACK_ADDED_TO_PL, title ); - noteId = EMPlayerNoteAddSongToPlaylist; - } - - CAknConfirmationNote* note = new ( ELeave ) CAknConfirmationNote(); - - note->PublishDialogL( - noteId, - KMPlayerNoteCategory ); - - if ( iCoverDisplay ) - { - CAknMediatorFacade* covercl = AknMediatorFacade( note ); - if ( covercl ) - { - covercl->BufStream() << title; - if ( iNumSongAddedToPlaylist > 1 ) - { - covercl->BufStream().WriteInt32L( iNumSongAddedToPlaylist ); - } - } - } - - note->ExecuteLD( *confirmTxt ); - CleanupStack::PopAndDestroy( confirmTxt ); - + if( !iTitleWait ) + { + delete iTitleWait; + iTitleWait = NULL; + } + iTitleWait = aPlaylist->ValueText( KMPXMediaGeneralTitle ).AllocL(); + if( iDialogDismissed ) + { + ShowAddedItemsDialogL(); + } } else // iCurrentPlaylistOp == EMPXOpPLCreating { @@ -3747,6 +3759,57 @@ } } +// --------------------------------------------------------------------------- +// Shows the added items dialog +// --------------------------------------------------------------------------- +// +void CMPXCollectionViewHgImp::ShowAddedItemsDialogL() + { + HBufC* confirmTxt( NULL ); + + TMPlayerSecondaryDisplayNote noteId( EMPlayerNoteNone ); + if ( iNumSongAddedToPlaylist > 1 ) + { + + confirmTxt = StringLoader::LoadLC( + R_MPX_QTN_MUS_MULTIPLE_TRACKS_ADDED_TO_PL, + iTitleWait->Des(), iNumSongAddedToPlaylist ); + noteId = EMPlayerNoteAddManySongToPlaylist; + } + else + { + confirmTxt = StringLoader::LoadLC( + R_MPX_QTN_MUS_NOTE_TRACK_ADDED_TO_PL, iTitleWait->Des() ); + noteId = EMPlayerNoteAddSongToPlaylist; + } + + CAknConfirmationNote* note = new ( ELeave ) CAknConfirmationNote(); + + note->PublishDialogL( + noteId, + KMPlayerNoteCategory ); + + if ( iCoverDisplay ) + { + CAknMediatorFacade* covercl = AknMediatorFacade( note ); + if ( covercl ) + { + covercl->BufStream() << iTitleWait; + if ( iNumSongAddedToPlaylist > 1 ) + { + covercl->BufStream().WriteInt32L( iNumSongAddedToPlaylist ); + } + } + } + note->ExecuteLD( *confirmTxt ); + CleanupStack::PopAndDestroy( confirmTxt ); + if( iTitleWait ) + { + delete iTitleWait; + iTitleWait = NULL; + } + } + // ----------------------------------------------------------------------------- // Handles the completion of setting a media event. // ----------------------------------------------------------------------------- @@ -4092,6 +4155,7 @@ // void CMPXCollectionViewHgImp::DialogDismissedL( TInt aButtonId ) { + iDialogDismissed = ETrue; MPX_FUNC( "CMPXCollectionViewHgImp::DialogDismissedL" ); if ( iCommandInitiator ) { @@ -4127,6 +4191,15 @@ } break; } + case EAknSoftkeyDone: + { + // Double check that we should be showing the dialog + if( iTitleWait ) + { + ShowAddedItemsDialogL(); + } + break; + } default: { // no special handling for other cases @@ -4515,9 +4588,9 @@ { // nothing else to delete iIsDeleting = EFalse; - if ( iProgressDialog ) - { - iProgressDialog->ProcessFinishedL(); + if ( iWaitDialog ) + { + iWaitDialog->ProcessFinishedL(); } HandleCommandL( EMPXCmdHandleExternalCommand ); } @@ -4891,9 +4964,9 @@ { // only dismiss wait note if the wait note is not // canceled - if ( iProgressDialog ) + if ( iWaitDialog ) { - iProgressDialog->ProcessFinishedL(); + iWaitDialog->ProcessFinishedL(); } HandleCommandL( EMPXCmdHandleExternalCommand ); iIsWaitNoteCanceled = EFalse; @@ -4916,9 +4989,9 @@ iIsDeleting = EFalse; if ( !iIsWaitNoteCanceled ) { - if ( iProgressDialog ) + if ( iWaitDialog ) { - iProgressDialog->ProcessFinishedL(); + iWaitDialog->ProcessFinishedL(); } HandleCommandL( EMPXCmdHandleExternalCommand ); iIsWaitNoteCanceled = EFalse; @@ -5028,27 +5101,6 @@ } break; } - case EDeleteStatusOp: - { - if ( aArgument ) - { - CMPXMedia* media = (CMPXMedia*)aArgument; - CleanupStack::PushL( media ); - if ( media->IsSupported( KMPXMediaGeneralCount ) ) - { - TInt deletePercent = media->ValueTObjectL( KMPXMediaGeneralCount ); - MPX_DEBUG2( "CMPXCollectionViewHgImp::HandleOperationCompleteL % Files Deleted: %d", deletePercent ); - // update WaitNote dialog. - HBufC* string = StringLoader::LoadLC(R_MPX_QTN_NMP_DEL_BATCH_SONGS_WAIT_NOTE, deletePercent); - TPtr buf = string->Des(); - UpdateProcessL(deletePercent, buf); - CleanupStack::PopAndDestroy( string ); - } - CleanupStack::PopAndDestroy( media ); - aArgument = NULL; - } - break; - } default: { break; @@ -5447,6 +5499,28 @@ } CMPXCollectionPath* path = iCollectionUtility->Collection().PathL(); CleanupStack::PushL( path ); + + if ( 2 == path->Levels() ) + { + path->Back(); + path->AppendL(3); + + const CMPXMediaArray& albums = listboxArray->MediaArray(); + + RArray ids; + CleanupClosePushL(ids); + + TInt albumCount = albums.Count(); + for (TInt i=0; iValueTObjectL(KMPXMediaGeneralId); + ids.AppendL(id); + } + path->AppendL(ids.Array()); // top level items + ids.Reset(); + CleanupStack::PopAndDestroy(&ids); + } path->Set( iContainer->CurrentLbxItemIndex() ); RArray attrs; CleanupClosePushL( attrs ); @@ -6068,7 +6142,17 @@ TMPXGeneralType containerType( containerMedia.ValueTObjectL( KMPXMediaGeneralType ) ); - + + TInt usbUnblockingStatus; + RProperty::Get( KMPXViewPSUid, + KMPXUSBUnblockingPSStatus, + usbUnblockingStatus); + + if(usbUnblockingStatus) + { + aMenuPane->SetItemDimmed( EMPXCmdRefreshLibrary, ETrue ); + } + switch ( containerCategory ) { case EMPXPlaylist: @@ -6177,36 +6261,24 @@ aMenuPane->SetItemDimmed( EMPXCmdFind, ETrue ); aMenuPane->SetItemDimmed( EMPXCmdUpnpPlayVia, ETrue ); aMenuPane->SetItemDimmed( EMPXCmdUPnPAiwCmdCopyToExternalCriteria, ETrue ); + aMenuPane->SetItemDimmed( EMPXCmdCreatePlaylist, ETrue ); + aMenuPane->SetItemDimmed( EMPXCmdAddToPlaylist, ETrue ); + aMenuPane->SetItemDimmed( EMPXCmdAddSongs, ETrue ); + aMenuPane->SetItemDimmed( EMPXCmdReorder, ETrue ); + aMenuPane->SetItemDimmed( EMPXCmdSend, ETrue ); + aMenuPane->SetItemDimmed( EMPXCmdDelete, ETrue ); + aMenuPane->SetItemDimmed( EMPXCmdRemove, ETrue ); + aMenuPane->SetItemDimmed( EMPXCmdPlayItem, ETrue ); TBool landscapeOrientation = Layout_Meta_Data::IsLandscapeOrientation(); - if ( landscapeOrientation ) + if ( !landscapeOrientation ) { - aMenuPane->SetItemDimmed( EMPXCmdCreatePlaylist, ETrue ); - aMenuPane->SetItemDimmed( EMPXCmdAddToPlaylist, ETrue ); - aMenuPane->SetItemDimmed( EMPXCmdAddSongs, ETrue ); - aMenuPane->SetItemDimmed( EMPXCmdReorder, ETrue ); - aMenuPane->SetItemDimmed( EMPXCmdSend, ETrue ); - aMenuPane->SetItemDimmed( EMPXCmdDelete, ETrue ); - aMenuPane->SetItemDimmed( EMPXCmdRemove, ETrue ); - aMenuPane->SetItemDimmed( EMPXCmdPlayItem, ETrue ); - } - else - { - aMenuPane->SetItemDimmed( EMPXCmdCreatePlaylist, ETrue ); - aMenuPane->SetItemDimmed( EMPXCmdAddToPlaylist, ETrue ); - aMenuPane->SetItemDimmed( EMPXCmdAddSongs, ETrue ); - aMenuPane->SetItemDimmed( EMPXCmdReorder, ETrue ); - aMenuPane->SetItemDimmed( EMPXCmdSend, ETrue ); - aMenuPane->SetItemDimmed( EMPXCmdDelete, ETrue ); - aMenuPane->SetItemDimmed( EMPXCmdRemove, ETrue ); - aMenuPane->SetItemDimmed( EMPXCmdPlayItem, ETrue ); - TInt usbUnblockingStatus; RProperty::Get( KMPXViewPSUid, KMPXUSBUnblockingPSStatus, usbUnblockingStatus); - if ( iContainer->CurrentLbxItemIndex() > KErrNotFound ) + if ( iContainer->CurrentLbxItemIndex() > KErrNotFound && !iContainer->IsTBoneView()) { if ( usbUnblockingStatus == EMPXUSBUnblockingPSStatusActive ) { @@ -6217,9 +6289,7 @@ { aMenuPane->SetItemDimmed( EMPXCmdAddToPlaylist, EFalse ); aMenuPane->SetItemDimmed( EMPXCmdDelete, EFalse ); - aMenuPane->SetItemDimmed( EMPXCmdSend, ETrue ); - aMenuPane->SetItemDimmed( EMPXCmdPlayItem, - iContainer->IsTBoneView() ? ETrue : EFalse ); + aMenuPane->SetItemDimmed( EMPXCmdPlayItem, EFalse ); } } if ( iContainer->IsSelectedItemASong() && iContainer->IsTBoneView() ) @@ -6233,19 +6303,20 @@ { aMenuPane->SetItemDimmed( EMPXCmdAddToPlaylist, EFalse ); aMenuPane->SetItemDimmed( EMPXCmdDelete, EFalse ); + aMenuPane->SetItemDimmed( EMPXCmdSend, EFalse ); } } + } - //If Operator Music store exist, show the cascade menu with Nokia and Operator music store. - if ( iOperatorMusicStore ) - { - aMenuPane->SetItemDimmed(EMPXCmdGoToMusicShop, ETrue); - } - else - { - aMenuPane->SetItemDimmed(EMPXCmdGoToMultipleMusicShop, ETrue); - } - } + //If Operator Music store exist, show the cascade menu with Nokia and Operator music store. + if ( iOperatorMusicStore ) + { + aMenuPane->SetItemDimmed(EMPXCmdGoToMusicShop, ETrue); + } + else + { + aMenuPane->SetItemDimmed(EMPXCmdGoToMultipleMusicShop, ETrue); + } } break; @@ -6323,34 +6394,35 @@ } TInt currentItem( iContainer->CurrentLbxItemIndex() ); - - CMPXCollectionViewListBoxArray* array = - static_cast( - iContainer->ListBoxArray() ); - const CMPXMedia& media = array->MediaL( currentItem ); - - if ( media.IsSupported( KMPXMediaGeneralNonPermissibleActions ) ) - { - // check for auto playlist, disable delete - TMPXGeneralNonPermissibleActions attr( - media.ValueTObjectL( - KMPXMediaGeneralNonPermissibleActions ) ); - if ( attr & EMPXWrite ) - { - aMenuPane->SetItemDimmed( EMPXCmdDelete, ETrue ); - } - } - - TInt trackCount (0); - if( media.IsSupported(KMPXMediaGeneralCount) ) - { - trackCount = media.ValueTObjectL( KMPXMediaGeneralCount ); - } - if( trackCount < 1 ) - { - aMenuPane->SetItemDimmed( EMPXCmdPlayItem, ETrue ); - } - + if(currentItem > KErrNotFound ) + { + CMPXCollectionViewListBoxArray* array = + static_cast( + iContainer->ListBoxArray() ); + const CMPXMedia& media = array->MediaL( currentItem ); + + if ( media.IsSupported( KMPXMediaGeneralNonPermissibleActions ) ) + { + // check for auto playlist, disable delete + TMPXGeneralNonPermissibleActions attr( + media.ValueTObjectL( + KMPXMediaGeneralNonPermissibleActions ) ); + if ( attr & EMPXWrite ) + { + aMenuPane->SetItemDimmed( EMPXCmdDelete, ETrue ); + } + } + + TInt trackCount (0); + if( media.IsSupported(KMPXMediaGeneralCount) ) + { + trackCount = media.ValueTObjectL( KMPXMediaGeneralCount ); + } + if( trackCount < 1 ) + { + aMenuPane->SetItemDimmed( EMPXCmdPlayItem, ETrue ); + } + } if ( iOperatorMusicStore ) { aMenuPane->SetItemDimmed(EMPXCmdGoToMusicShop, ETrue); @@ -6372,47 +6444,49 @@ aMenuPane->SetItemDimmed( EMPXCmdPlaylistDetails, ETrue ); TInt currentItem( iContainer->CurrentLbxItemIndex() ); - - CMPXCollectionViewListBoxArray* array = - static_cast( - iContainer->ListBoxArray() ); - const CMPXMedia& media = array->MediaL( currentItem ); - - TInt usbUnblockingStatus; - RProperty::Get( KMPXViewPSUid, - KMPXUSBUnblockingPSStatus, - usbUnblockingStatus); - if ( usbUnblockingStatus == EMPXUSBUnblockingPSStatusActive ) - { - aMenuPane->SetItemDimmed( EMPXCmdRename, ETrue ); - } - else - { - aMenuPane->SetItemDimmed( EMPXCmdRename, EFalse ); - } - - if ( media.IsSupported( - KMPXMediaGeneralNonPermissibleActions ) ) - { - // check for auto playlist, disable delete - TMPXGeneralNonPermissibleActions attr( - media.ValueTObjectL( - KMPXMediaGeneralNonPermissibleActions ) ); - if ( attr & EMPXWrite ) - { - aMenuPane->SetItemDimmed( EMPXCmdRename, ETrue ); - // TODO: this should be an item specific command. - aMenuPane->SetItemDimmed( EMPXCmdPlaylistDetails, ETrue ); - } - } - if ( array->IsItemBrokenLinkL( currentItem ) || - array->IsItemCorruptedL( currentItem ) ) - { - aMenuPane->SetItemDimmed( EMPXCmdRename, ETrue ); - // TODO: this should be an item specific command. - aMenuPane->SetItemDimmed( EMPXCmdPlaylistDetails, ETrue ); - } - + + if(currentItem > KErrNotFound ) + { + CMPXCollectionViewListBoxArray* array = + static_cast( + iContainer->ListBoxArray() ); + const CMPXMedia& media = array->MediaL( currentItem ); + + TInt usbUnblockingStatus; + RProperty::Get( KMPXViewPSUid, + KMPXUSBUnblockingPSStatus, + usbUnblockingStatus); + if ( usbUnblockingStatus == EMPXUSBUnblockingPSStatusActive ) + { + aMenuPane->SetItemDimmed( EMPXCmdRename, ETrue ); + } + else + { + aMenuPane->SetItemDimmed( EMPXCmdRename, EFalse ); + } + + if ( media.IsSupported( + KMPXMediaGeneralNonPermissibleActions ) ) + { + // check for auto playlist, disable delete + TMPXGeneralNonPermissibleActions attr( + media.ValueTObjectL( + KMPXMediaGeneralNonPermissibleActions ) ); + if ( attr & EMPXWrite ) + { + aMenuPane->SetItemDimmed( EMPXCmdRename, ETrue ); + // TODO: this should be an item specific command. + aMenuPane->SetItemDimmed( EMPXCmdPlaylistDetails, ETrue ); + } + } + if ( array->IsItemBrokenLinkL( currentItem ) || + array->IsItemCorruptedL( currentItem ) ) + { + aMenuPane->SetItemDimmed( EMPXCmdRename, ETrue ); + // TODO: this should be an item specific command. + aMenuPane->SetItemDimmed( EMPXCmdPlaylistDetails, ETrue ); + } + } break; } default: @@ -6731,27 +6805,26 @@ aMenuPane->SetItemDimmed( EMPXCmdRemove, EFalse ); } } - - CMPXCollectionViewListBoxArray* array = - static_cast( - iContainer->ListBoxArray() ); - const CMPXMedia& containerMedia = array->ContainerMedia(); - - if ( containerMedia.IsSupported( KMPXMediaGeneralNonPermissibleActions ) ) - { - // check for auto playlist, disable add, remove and reorder - TMPXGeneralNonPermissibleActions attr( - containerMedia.ValueTObjectL( - KMPXMediaGeneralNonPermissibleActions ) ); - if ( attr & EMPXWrite ) - { - aMenuPane->SetItemDimmed( EMPXCmdAddSongs, ETrue ); - aMenuPane->SetItemDimmed( EMPXCmdReorder, ETrue ); - aMenuPane->SetItemDimmed( EMPXCmdRemove, ETrue ); - } - } - } - + } + + CMPXCollectionViewListBoxArray* array = + static_cast( + iContainer->ListBoxArray() ); + const CMPXMedia& containerMedia = array->ContainerMedia(); + + if ( containerMedia.IsSupported( KMPXMediaGeneralNonPermissibleActions ) ) + { + // check for auto playlist, disable add, remove and reorder + TMPXGeneralNonPermissibleActions attr( + containerMedia.ValueTObjectL( + KMPXMediaGeneralNonPermissibleActions ) ); + if ( attr & EMPXWrite ) + { + aMenuPane->SetItemDimmed( EMPXCmdAddSongs, ETrue ); + aMenuPane->SetItemDimmed( EMPXCmdReorder, ETrue ); + aMenuPane->SetItemDimmed( EMPXCmdRemove, ETrue ); + } + } break; } diff -r 943ff5625028 -r 171e07ac910f mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgtnloader.cpp --- a/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgtnloader.cpp Fri Mar 12 15:42:25 2010 +0200 +++ b/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgtnloader.cpp Mon Mar 15 12:40:11 2010 +0200 @@ -82,7 +82,7 @@ if( index >= 0 && iLoading[0]->iId == 0) { CThumbnailObjectSource* source = CThumbnailObjectSource::NewLC(iLoading[0]->iFileName, KMPXAlbumMimeType); - TRAPD(err, iLoading[0]->iId = iTnEngine->GetThumbnailL( *source, NULL, 0 ); ) + TRAPD(err, iLoading[0]->iId = iTnEngine->GetThumbnailL( *source, NULL, 1 ); ) MPX_DEBUG4( "GetThumbnailL: %d [%d,%d]", err, index, iLoading[0]->iId); CleanupStack::PopAndDestroy(source); } @@ -144,7 +144,7 @@ iTnEngine->SetQualityPreferenceL( CThumbnailManager::EOptimizeForQuality ); iTnEngine->SetThumbnailSizeL( iSize ); TCallBack callback(CMpxTNLoader::LoadThumbnail, this); - iAsyncCallBack = new (ELeave) CAsyncCallBack( CActive::EPriorityStandard ); + iAsyncCallBack = new (ELeave) CAsyncCallBack( CActive::EPriorityHigh ); iAsyncCallBack->Set(callback); iPauseTimer = CPeriodic::NewL( CActive::EPriorityStandard ); } diff -r 943ff5625028 -r 171e07ac910f mpxplugins/viewplugins/views/commoncontainer/src/mpxcommonlistboxarraybase.cpp --- a/mpxplugins/viewplugins/views/commoncontainer/src/mpxcommonlistboxarraybase.cpp Fri Mar 12 15:42:25 2010 +0200 +++ b/mpxplugins/viewplugins/views/commoncontainer/src/mpxcommonlistboxarraybase.cpp Mon Mar 15 12:40:11 2010 +0200 @@ -80,8 +80,11 @@ EXPORT_C void CMPXCommonListBoxArrayBase::AppendMediaL( const CMPXMedia& aMedia ) { MPX_FUNC( "CMPXCommonListBoxArrayBase::AppendMediaL" ); - delete iContainerMedia; - iContainerMedia=NULL; + if ( NULL != iContainerMedia ) + { + delete iContainerMedia; + iContainerMedia=NULL; + } iContainerMedia=CMPXMedia::NewL(aMedia); iMedia=const_cast(iContainerMedia->Value( KMPXMediaArrayContents ) ); MPX_DEBUG2( "CMPXCommonListBoxArrayBase::AppendMediaL media count %d", iMedia->Count() ); @@ -95,8 +98,11 @@ EXPORT_C void CMPXCommonListBoxArrayBase::ResetMediaArrayL() { MPX_FUNC( "CMPXCommonListBoxArrayBase::ResetMediaArray" ); - delete iContainerMedia; - iContainerMedia = NULL; + if ( NULL != iContainerMedia ) + { + delete iContainerMedia; + iContainerMedia = NULL; + } iMedia = NULL; iIndex = KErrNotFound; iPbState = EPbStateNotInitialised; diff -r 943ff5625028 -r 171e07ac910f mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewcontainer.cpp --- a/mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewcontainer.cpp Fri Mar 12 15:42:25 2010 +0200 +++ b/mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewcontainer.cpp Mon Mar 15 12:40:11 2010 +0200 @@ -56,7 +56,7 @@ #include #include #include // For transition effects -#include // For transition effects +#include // For transition effects #include "mpxcommonplaybackviewcontainer.h" #include "mpxcommonplaybackviewlayout.h" @@ -182,7 +182,7 @@ iLightStatus = CHWRMLight::ELightStatusUnknown; iIsForeground = EFalse ; - iLight = CHWRMLight::NewL(this); + iLight = CHWRMLight::NewL(this); DrawableWindow()->SetPointerGrab( ETrue ); EnableDragEvents(); @@ -210,7 +210,7 @@ delete iCommonUiHelper; if ( iLight ) - { + { delete iLight; iLight = NULL; } @@ -719,7 +719,7 @@ iTrackAlbumArt = aBitmap; } - DrawDeferred(); + DrawDeferred(); //Window().Invalidate( iAlbumArtRect ); //Window().Invalidate( iSliderPaneRect ); } @@ -1020,27 +1020,16 @@ { if ( iTrackAlbumArt ) { - // Calculating the CenterPoint for Drawing the albumart image - TSize bmpSizeInPixels = iTrackAlbumArt->SizeInPixels(); - TInt xPos = ( iAlbumArtRect.Width() - bmpSizeInPixels.iWidth ) - / 2; - TInt yPos = - ( iAlbumArtRect.Height() - bmpSizeInPixels.iHeight ) - / 2; - TPoint Centerpos = TPoint(xPos, yPos ); - // bitmap top left corner position - Centerpos += iAlbumArtRect.iTl; - // Draw album art and frame - gc.BitBlt( Centerpos, iTrackAlbumArt); + gc.DrawBitmap( iAlbumArtRect, iTrackAlbumArt, iTrackAlbumArt->SizeInPixels() ); + TRgb color = KRgbBlack; AknsUtils::GetCachedColor( skin, color, KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG50 ); - TRect imageRect( Centerpos, iTrackAlbumArt->SizeInPixels() ); gc.SetPenStyle( CGraphicsContext::ESolidPen ); gc.SetBrushStyle( CGraphicsContext::ENullBrush ); gc.SetPenColor( color ); - gc.DrawRect( imageRect ); + gc.DrawRect( iAlbumArtRect ); } else { @@ -1077,7 +1066,7 @@ // --------------------------------------------------------------------------- // Update progress bar graphics and redraw. // Refresh happens only when backlight is ON and -// the UI is in foreground. +// the UI is in foreground. // Note: Some display types may not need backlight. In that case // code may need to be adjusted accordingly. // --------------------------------------------------------------------------- @@ -1141,7 +1130,7 @@ else { background->SetBitmap( KAknsIIDQsnBgAreaMain ); - background->SetRect( aRect ); + background->SetRect( aRect ); } } @@ -1189,7 +1178,7 @@ { return 0; } - } + } // --------------------------------------------------------------------------- // From CCoeControl // Gets an indexed component of a compound control. @@ -1252,7 +1241,7 @@ { case TPointerEvent::EButton1Down: { - if ( iSliderPaneRect.Contains(aPointerEvent.iPosition) && + if ( iSliderPaneRect.Contains(aPointerEvent.iPosition) && ( iMode == EPlayMode || iMode == EPauseMode )) { // Pointer events @@ -1269,13 +1258,13 @@ EAspectRatioNotPreserved ); } if ( iAlbumArtRect.Contains(aPointerEvent.iPosition ) ) - { + { MTouchFeedback* feedback = MTouchFeedback::Instance(); if (feedback) { feedback->InstantFeedback(ETouchFeedbackBasic); - } - + } + if ( iCommandObserver ) { iCommandObserver->ProcessCommandL( EMPXCmdVolumeChanged ); @@ -1437,7 +1426,7 @@ { MPX_DEBUG2(" LightStatusChanged: (%d)", aStatus); if ( ( aStatus == CHWRMLight::ELightOn || aStatus == CHWRMLight::ELightOff ) && aStatus != iLightStatus ) - { + { iLightStatus = aStatus; } } @@ -1619,7 +1608,7 @@ // CMPXCommonPlaybackViewContainer::ReStoreButtons // ----------------------------------------------------------------------------- // -void CMPXCommonPlaybackViewContainer::RestoreButtons( +void CMPXCommonPlaybackViewContainer::RestoreButtons( TMPXPlaybackState aState ) { if ( iEnableButtons ) diff -r 943ff5625028 -r 171e07ac910f mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewimp.cpp --- a/mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewimp.cpp Fri Mar 12 15:42:25 2010 +0200 +++ b/mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewimp.cpp Mon Mar 15 12:40:11 2010 +0200 @@ -113,6 +113,7 @@ const TUid KMPXEqualizerViewImplementationId = { 0x101FFC77 }; const TInt KMPXPostponeForHandleDelayedError( 1000000 ); // 1S const TInt KMPXPlaybackViewWindowBackground = -1; +const TInt KMPXDelayForTNRequest( 3000000 ); // 3S // for freqency display in the format of "XXX.XX" const TInt KMPXFMFreqWidth = 6; @@ -159,6 +160,9 @@ _LIT(KMPXRnRealAudioMimeType, "audio/vnd.rn-realaudio"); #endif +#define THUMBNAIL_CENREP_UID 0x102830B0 // from thumbnailmanageruids.hrh +const TUint32 KSizeAudioFullscreenWidth = 0x16; +const TUint32 KSizeAudioFullscreenHeight = 0x17; // ======== MEMBER FUNCTIONS ======== @@ -209,6 +213,15 @@ CleanupStack::PopAndDestroy( repository ); repository = NULL; + repository = CRepository::NewLC( TUid::Uid(THUMBNAIL_CENREP_UID)); + + TInt xSize( 0 ); + TInt ySize( 0 ); + User::LeaveIfError( repository->Get( KSizeAudioFullscreenWidth, xSize )); + User::LeaveIfError( repository->Get( KSizeAudioFullscreenHeight, ySize )); + iFullScreenImageSize.SetSize(xSize,ySize); + CleanupStack::PopAndDestroy( repository ); + repository = NULL; iChangeRTForAllProfiles = static_cast( flags & KMPXChangeRTForAll ); @@ -349,6 +362,8 @@ iIsffButtonPressed = EFalse; iDelayedErrorTimer = CPeriodic::NewL( CActive::EPriorityStandard ); iFmTxActivity = EFmTxStateUnknown; + + iTNRequestTimer = CPeriodic::NewL( CActive::EPriorityStandard ); } @@ -462,6 +477,13 @@ } delete iOldUri; + + if ( iTNRequestTimer ) + { + iTNRequestTimer->Cancel(); + delete iTNRequestTimer; + } + MPX_DEBUG1( "CMPXCommonPlaybackViewImp::~CMPXCommonPlaybackViewImp exiting" ); } @@ -729,20 +751,32 @@ const TDesC& album = aMedia->ValueText( KMPXMediaGeneralUri ); if(!iOldUri || iOldUri->Compare(album)!= 0) { - - TRect albumArtRect( - iLayout->IndicatorLayout( - ClientRect(), EAlbumArtArea ) ); - - MPX_TRAP( err, - iMPXUtility->ExtractAlbumArtL( + // Request for pre-generated TN size + MPX_TRAP( err, + iMPXUtility->ExtractAlbumArtL( *aMedia, *iContainer, - albumArtRect.Size() ); ); - delete iOldUri; - iOldUri = NULL; - iOldUri=album.AllocL(); + iFullScreenImageSize ); ); + + // cancel timer + if ( iTNRequestTimer->IsActive()) + { + iTNRequestTimer->Cancel(); + } + + if ( err == KErrNone ) + { + // startup timer for updating album art with custom size + TCallBack cb( HandleTNRequestForCustomSizeL, this ); + iTNRequestTimer->Start( KMPXDelayForTNRequest, + KMPXDelayForTNRequest, + cb ); + } } + + delete iOldUri; + iOldUri = NULL; + iOldUri = album.AllocL(); } if (KErrNone != err ) @@ -2043,8 +2077,6 @@ if ( !iBacking ) { // event not consumed by Back Stepping utility, handle here - // - // Status pane has to be modified before view gets deactivated MMPXSource* source = iPlaybackUtility->Source(); if ( source ) @@ -2053,48 +2085,15 @@ if ( playlist ) { CleanupStack::PushL( playlist ); - CMPXCollectionPath* browsePath( iCollectionUtility->Collection().PathL() ); - CleanupStack::PushL( browsePath ); - MPX_DEBUG_PATH(*browsePath); - + if ( playlist->Count() ) { - CMPXCollectionPath* pbPath = - CMPXCollectionPath::NewL( playlist->Path() ); + CMPXCollectionPath* pbPath = CMPXCollectionPath::NewL( playlist->Path() ); CleanupStack::PushL( pbPath ); + pbPath->Back(); + iViewUtility->PushDefaultHistoryL(); MPX_DEBUG_PATH(*pbPath); - - TInt playbackPathCount( pbPath->Levels() ); - // if both path are at the same level, we need to check further - TBool isEqual( ETrue ); - if ( browsePath->Levels() == playbackPathCount ) - { - // Check id at each level - for ( TInt i = 0; i < playbackPathCount - 1; i++ ) - { - if ( browsePath->Id( i ) != pbPath->Id( i ) ) - { - isEqual = EFalse; - break; - } - } - } - else - { - isEqual = EFalse; - } - - if ( isEqual ) // if they're the same path - { - pbPath->Back(); - iViewUtility->PushDefaultHistoryL(); - iCollectionUtility->Collection().OpenL( *pbPath ); - } - else // we want to reopen the browse path - { - browsePath->Back(); - iCollectionUtility->Collection().OpenL( *browsePath ); - } + iCollectionUtility->Collection().OpenL( *pbPath ); CleanupStack::PopAndDestroy( pbPath ); } else @@ -2103,7 +2102,6 @@ // music main menu? or change ui spec AppUi()->HandleCommandL( EAknSoftkeyBack ); } - CleanupStack::PopAndDestroy( browsePath ); CleanupStack::PopAndDestroy( playlist ); } else @@ -2115,7 +2113,7 @@ { CMPXCollectionPath* cpath = iCollectionUtility->Collection().PathL(); CleanupStack::PushL( cpath ); - while ( cpath->Levels() > 1 ) + while ( cpath->Levels() > 2 ) { cpath->Back(); } @@ -2649,6 +2647,11 @@ toolbar->MakeVisible(EFalse); AppUi()->RemoveFromStack( toolbar ); } + + if ( iTNRequestTimer->IsActive()) + { + iTNRequestTimer->Cancel(); + } } // --------------------------------------------------------------------------- @@ -2991,7 +2994,6 @@ // EXPORT_C void CMPXCommonPlaybackViewImp::HandleLayoutChange() { - iContainer->ExtractAlbumArtCompleted( NULL, KErrNone ); if (iContainer && !iSwitchingView) { if ( !Layout_Meta_Data::IsLandscapeOrientation() ) @@ -4000,4 +4002,56 @@ return KErrNone; } + +// --------------------------------------------------------------------------- +// Updates track's album art. +// --------------------------------------------------------------------------- +// +TInt CMPXCommonPlaybackViewImp::HandleTNRequestForCustomSizeL( TAny* aPtr ) + { + MPX_DEBUG1("CMPXCommonPlaybackViewImp::HandleTNRequestForCustomSizeL()"); + + ASSERT( aPtr ); + CMPXCommonPlaybackViewImp* pv = reinterpret_cast( aPtr ); + + ASSERT( pv->iOldUri ); + if ( pv->iContainer && !pv->iSwitchingView ) + { + TInt err( KErrNone ); + if ( pv->iMedia && pv->iMedia->IsSupported(KMPXMediaGeneralUri) ) + { + const TDesC& album = pv->iMedia->ValueText( KMPXMediaGeneralUri ); + + if ( pv->iOldUri->Compare( album ) == 0 ) + { + TRect albumArtRect( + pv->iLayout->IndicatorLayout( + pv->ClientRect(), EAlbumArtArea ) ); + + // Request for custom TN size + MPX_TRAP( err, + pv->iMPXUtility->ExtractAlbumArtL( + *pv->iMedia, + *pv->iContainer, + albumArtRect.Size() ); ); + } + } + + if ( KErrNone != err ) + { + // If error, show default album art + MPX_DEBUG2("CMPXCommonPlaybackViewImp::HandleTNRequestForCustomSizeL(): err = %d", err); + pv->iContainer->ExtractAlbumArtCompleted( NULL, KErrNone ); + } + } + + // cancel timer + if ( pv->iTNRequestTimer->IsActive()) + { + pv->iTNRequestTimer->Cancel(); + } + + return KErrNone; + } + // End of File diff -r 943ff5625028 -r 171e07ac910f musichomescreen_multiview/musicplayeractionhandlerplugin/inc/musicplayeractionhandler.h --- a/musichomescreen_multiview/musicplayeractionhandlerplugin/inc/musicplayeractionhandler.h Fri Mar 12 15:42:25 2010 +0200 +++ b/musichomescreen_multiview/musicplayeractionhandlerplugin/inc/musicplayeractionhandler.h Mon Mar 15 12:40:11 2010 +0200 @@ -20,6 +20,7 @@ #define C_MUSICPLAYERACTIONHANDLER_H #include +#include // FORWARD DECLARATION class CLiwMap; @@ -126,6 +127,11 @@ TInt ExtractVariantL( const CLiwMap* aMap, TLiwVariant& aVariant, const TDesC8& aMapName ); + /** + * Sets the playback command. + * @param aCommand commandType. + */ + void SetPlaybackCommandL( TMPXPlaybackCommand aCommand ); private: // data /** diff -r 943ff5625028 -r 171e07ac910f musichomescreen_multiview/musicplayeractionhandlerplugin/src/musicplayeractionhandler.cpp --- a/musichomescreen_multiview/musicplayeractionhandlerplugin/src/musicplayeractionhandler.cpp Fri Mar 12 15:42:25 2010 +0200 +++ b/musichomescreen_multiview/musicplayeractionhandlerplugin/src/musicplayeractionhandler.cpp Mon Mar 15 12:40:11 2010 +0200 @@ -27,6 +27,7 @@ #include // KMPXPluginTypePlaybackUid #include // CAknTaskList +#include #include #include #include "musicplayeractionhandler.h" @@ -38,6 +39,8 @@ const TInt KPlayerMusicPlayerParameterGranularity = 50; const TUid KMusicPlayerAppUid = { 0x102072C3 }; +const TInt KMPXStandAloneProcessIDTop32( 1 ); +const TInt KMPXStandAloneProcessIDBottom32( 2 ); // RProperty key to identify the case when Music Player launching // in the background const TInt KMPXLaunchingOnBackground( 100 ); @@ -122,13 +125,9 @@ errCode = ExtractVariantL( aMap, variant, KCommand ); if ( errCode == KErrNone ) { - if ( !iPlaybackUtility ) // Ensure that the utility exists - { - iPlaybackUtility = MMPXPlaybackUtility::NewL( KMusicPlayerAppUid); - } TMPXPlaybackCommand Command; Command = static_cast( variant.AsTInt32() ); - iPlaybackUtility->CommandL( Command ); + SetPlaybackCommandL( Command ); } CleanupStack::PopAndDestroy( &variant); MPX_DEBUG1("<--CMusicPlayerActionHandler::ExecutePlaybackCommandL()"); @@ -501,5 +500,50 @@ return errCode; } +// --------------------------------------------------------------------------- +// Set the command to playbackUtility +// --------------------------------------------------------------------------- +// +void CMusicPlayerActionHandler::SetPlaybackCommandL( TMPXPlaybackCommand aCommand ) + { + MPX_DEBUG1("-->CMusicPlayerActionHandler::SetPlaybackCommandL()"); + //Try to get musicplay StandAloneMode process id + TInt procId( 0 ); + TUint64 mpProcId( 0 ); + TInt err( RProperty::Get( KMusicPlayerAppUid, KMPXStandAloneProcessIDTop32, procId ) ); + if ( err == KErrNone ) + { + mpProcId = TUint64( procId ) << 32; + err = RProperty::Get( KMusicPlayerAppUid, KMPXStandAloneProcessIDBottom32, procId ); + if ( err == KErrNone ) + { + mpProcId += procId; + } + else + { + mpProcId = 0; + } + } + + CMPXCommand* cmd( CMPXCommand::NewL() ); + CleanupStack::PushL( cmd ); + cmd->SetTObjectValueL( KMPXCommandGeneralId, KMPXCommandIdPlaybackGeneral ); + cmd->SetTObjectValueL( KMPXCommandGeneralDoSync, ETrue ); + cmd->SetTObjectValueL( KMPXCommandPlaybackGeneralType, aCommand ); + cmd->SetTObjectValueL( KMPXCommandPlaybackGeneralData, 0 ); + if ( mpProcId ) + { + //This attribute will be used by playbckEngine->iLastActiveProcess + cmd->SetTObjectValueL ( KMPXCommandPlaybackGeneralClientPid, mpProcId ); + } + if ( !iPlaybackUtility ) // Ensure that the utility exists + { + iPlaybackUtility = MMPXPlaybackUtility::NewL( KMusicPlayerAppUid); + } + + iPlaybackUtility->CommandL( *cmd ); + CleanupStack::PopAndDestroy( cmd ); + MPX_DEBUG1("<--CMusicPlayerActionHandler::SetPlaybackCommandL()"); + } // End of File diff -r 943ff5625028 -r 171e07ac910f musicplayer_plat/mpx_music_player_commonui_api/inc/mpxalbumartutil.h --- a/musicplayer_plat/mpx_music_player_commonui_api/inc/mpxalbumartutil.h Fri Mar 12 15:42:25 2010 +0200 +++ b/musicplayer_plat/mpx_music_player_commonui_api/inc/mpxalbumartutil.h Mon Mar 15 12:40:11 2010 +0200 @@ -20,7 +20,7 @@ #define CMPXALBUMARTUTIL_H #include -#include +#include #include #include