Revision: 201017 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 11 May 2010 16:10:56 +0300
branchRCL_3
changeset 26 70a8526f03f2
parent 21 a1247965635c
child 28 56b11cf8addb
Revision: 201017 Kit: 201019
mpxmusicplayer/Conf/mpxmusicplayer.confml
mpxmusicplayer/app/data/mpx_reg.rss
mpxmusicplayer/app/src/mpxrestorepath.cpp
mpxmusicplayer/commonui/bwinscw/mpxcommonuiU.DEF
mpxmusicplayer/commonui/eabi/mpxcommonuiU.DEF
mpxmusicplayer/commonui/loc/mpxcommonui.loc
mpxmusicplayer/commonui/src/mpxalbumartutil.cpp
mpxmusicplayer/mediakeyhandler/data/mpxmediakeyhandler.rss
mpxmusicplayer/mediakeyhandler/group/mpxmediakeyhandler.mmp
mpxmusicplayer/mediakeyhandler/src/mpxmediakeyhandlerimp.cpp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbalbum.h
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbhandler.h
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbmusic.h
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbpluginqueries.h
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/loc/mpxcollectiondbhg.loc
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbabstractalbum.cpp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbalbum.cpp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbhandler.cpp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbmusic.cpp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/loc/mpxcollectiondb.loc
mpxplugins/serviceplugins/playbackplugins/progressdownloadsb/src/mpxprogressdownloadsb.cpp
mpxplugins/viewplugins/inc/mpxmetadataeditordialog.h
mpxplugins/viewplugins/views/collectionview/loc/mpxcollectionview.loc
mpxplugins/viewplugins/views/collectionviewhg/loc/mpxcollectionviewhg.loc
mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgcontainer.cpp
mpxplugins/viewplugins/views/commonplaybackview/loc/mpxcommonplaybackview.loc
mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewcontainer.cpp
mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewimp.cpp
mpxplugins/viewplugins/views/metadataeditordialog/loc/mpxmetadataeditordialog.loc
mpxplugins/viewplugins/views/metadataeditordialog/src/mpxmetadataeditordialog.cpp
mpxplugins/viewplugins/views/waitnotedialog/loc/mpxwaitnotedialog.loc
musichomescreen_multiview/mcpmusicplayer/src/aiplayerpluginengine.cpp
musicplayer_plat/mpx_music_player_commonui_api/inc/mpxalbumartutil.h
Binary file mpxmusicplayer/Conf/mpxmusicplayer.confml has changed
--- a/mpxmusicplayer/app/data/mpx_reg.rss	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxmusicplayer/app/data/mpx_reg.rss	Tue May 11 16:10:56 2010 +0300
@@ -90,7 +90,9 @@
         DATATYPE { priority = EDataTypePriorityMPX; type = "audio/x-wav"; },
         DATATYPE { priority = EDataTypePriorityMPX; type = "audio/x-au"; },
         DATATYPE { priority = EDataTypePriorityMPX; type = "audio/au"; },
-        DATATYPE { priority = EDataTypePriorityMPX; type = "application/vnd.nokia.ringing-tone"; }
+        DATATYPE { priority = EDataTypePriorityMPX; type = "application/vnd.nokia.ringing-tone"; },
+        DATATYPE { priority = EDataTypePriorityMPX; type = "audio/x-mpegurl"; },
+        DATATYPE { priority = EDataTypePriorityMPX; type = "audio/mpegurl"; }
         };
     }
 
--- a/mpxmusicplayer/app/src/mpxrestorepath.cpp	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxmusicplayer/app/src/mpxrestorepath.cpp	Tue May 11 16:10:56 2010 +0300
@@ -652,7 +652,9 @@
             // USB mass storage dismounts the disk, but in that case
             // we do want to revert back to first song of all songs
             //
-            else if( type == EMcMsgDiskInserted &&
+			//if refresh started save the path info
+			//
+            else if( ( type == EMcMsgDiskInserted || EMcMsgRefreshStart ) &&
                      !iUSBOngoing )
                 {
                 SavePathL();
--- a/mpxmusicplayer/commonui/bwinscw/mpxcommonuiU.DEF	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxmusicplayer/commonui/bwinscw/mpxcommonuiU.DEF	Tue May 11 16:10:56 2010 +0300
@@ -1,60 +1,60 @@
 EXPORTS
-	??1CMPXAlbumArtUtil@@UAE@XZ @ 1 NONAME ; CMPXAlbumArtUtil::~CMPXAlbumArtUtil(void)
-	??1CMPXLbxExtendedFeatures@@UAE@XZ @ 2 NONAME ; CMPXLbxExtendedFeatures::~CMPXLbxExtendedFeatures(void)
-	??1CMPXSaveHelper@@UAE@XZ @ 3 NONAME ; CMPXSaveHelper::~CMPXSaveHelper(void)
-	?AddToSavedPlaylistL@CMPXCommonUiHelper@@QAEHABVCMPXMedia@@0PAVMMPXCHelperObserver@@PAVMProgressDialogCallback@@@Z @ 4 NONAME ; int CMPXCommonUiHelper::AddToSavedPlaylistL(class CMPXMedia const &, class CMPXMedia const &, class MMPXCHelperObserver *, class MProgressDialogCallback *)
-	?AllowMove@MPXTlsHelper@@SAHXZ @ 5 NONAME ; int MPXTlsHelper::AllowMove(void)
-	?AvailableDriveLC@CMPXCommonUiHelper@@QAEPAVHBufC16@@H@Z @ 6 NONAME ; class HBufC16 * CMPXCommonUiHelper::AvailableDriveLC(int)
-	?CancelRequest@CMPXAlbumArtUtil@@QAEXXZ @ 7 NONAME ; void CMPXAlbumArtUtil::CancelRequest(void)
-	?CreatePlaylistL@CMPXCommonUiHelper@@QAEHABVCMPXMedia@@PAVMMPXCHelperObserver@@PAVMProgressDialogCallback@@@Z @ 8 NONAME ; int CMPXCommonUiHelper::CreatePlaylistL(class CMPXMedia const &, class MMPXCHelperObserver *, class MProgressDialogCallback *)
-	?DefaultDriveLC@CMPXCommonUiHelper@@QAEPAVHBufC16@@XZ @ 9 NONAME ; class HBufC16 * CMPXCommonUiHelper::DefaultDriveLC(void)
-	?DismissWaitNoteL@CMPXCommonUiHelper@@QAEXXZ @ 10 NONAME ; void CMPXCommonUiHelper::DismissWaitNoteL(void)
-	?DisplayConfirmNoteL@CMPXCommonUiHelper@@QAEXABVTDesC16@@@Z @ 11 NONAME ; void CMPXCommonUiHelper::DisplayConfirmNoteL(class TDesC16 const &)
-	?DisplayConfirmNoteL@CMPXCommonUiHelper@@QAEXH@Z @ 12 NONAME ; void CMPXCommonUiHelper::DisplayConfirmNoteL(int)
-	?DisplayInfoNoteL@CMPXCommonUiHelper@@QAEXABVTDesC16@@@Z @ 13 NONAME ; void CMPXCommonUiHelper::DisplayInfoNoteL(class TDesC16 const &)
-	?DisplayInfoNoteL@CMPXCommonUiHelper@@QAEXH@Z @ 14 NONAME ; void CMPXCommonUiHelper::DisplayInfoNoteL(int)
-	?DisplayableDurationInTextL@CMPXCommonUiHelper@@QAEPAVHBufC16@@_J@Z @ 15 NONAME ; class HBufC16 * CMPXCommonUiHelper::DisplayableDurationInTextL(long long)
-	?DisplayableDurationL@CMPXCommonUiHelper@@QAEPAVHBufC16@@_JW4TMPXDuratDisplayMode@1@@Z @ 16 NONAME ; class HBufC16 * CMPXCommonUiHelper::DisplayableDurationL(long long, enum CMPXCommonUiHelper::TMPXDuratDisplayMode)
-	?DoSetAsRingingToneL@CMPXCommonUiHelper@@QAEXABVCMPXMedia@@HH@Z @ 17 NONAME ; void CMPXCommonUiHelper::DoSetAsRingingToneL(class CMPXMedia const &, int, int)
-	?EnableSpeedScrollL@CMPXLbxExtendedFeatures@@QAEXH@Z @ 18 NONAME ; void CMPXLbxExtendedFeatures::EnableSpeedScrollL(int)
-	?ExitOptionHiddenL@CMPXCommonUiHelper@@QAEHXZ @ 19 NONAME ; int CMPXCommonUiHelper::ExitOptionHiddenL(void)
-	?ExtractAlbumArtL@CMPXAlbumArtUtil@@QAEXABVCMPXMedia@@AAVMMPXAlbumArtUtilObserver@@ABVTSize@@W4TDisplayMode@@@Z @ 20 NONAME ; void CMPXAlbumArtUtil::ExtractAlbumArtL(class CMPXMedia const &, class MMPXAlbumArtUtilObserver &, class TSize const &, enum TDisplayMode)
-	?FilePath@MPXTlsHelper@@SA?AV?$TBuf@$0BAA@@@XZ @ 21 NONAME ; class TBuf<256> MPXTlsHelper::FilePath(void)
-	?FindPlaylistsL@CMPXCommonUiHelper@@QAEPAVCMPXMedia@@XZ @ 22 NONAME ; class CMPXMedia * CMPXCommonUiHelper::FindPlaylistsL(void)
-	?GenerateTitleL@CMPXCommonUiHelper@@QAEPAVHBufC16@@W4TMPXGeneralCategory@@ABVTDesC16@@@Z @ 23 NONAME ; class HBufC16 * CMPXCommonUiHelper::GenerateTitleL(enum TMPXGeneralCategory, class TDesC16 const &)
-	?HandleErrorL@CMPXCommonUiHelper@@QAEHHPBVCMPXMedia@@PAVRFile@@@Z @ 24 NONAME ; int CMPXCommonUiHelper::HandleErrorL(int, class CMPXMedia const *, class RFile *)
-	?HandleLbxKeyEventL@CMPXLbxExtendedFeatures@@QAE?AW4TKeyResponse@@ABUTKeyEvent@@W4TEventCode@@@Z @ 25 NONAME ; enum TKeyResponse CMPXLbxExtendedFeatures::HandleLbxKeyEventL(struct TKeyEvent const &, enum TEventCode)
-	?HostUid@MPXTlsHelper@@SA?AVTUid@@XZ @ 26 NONAME ; class TUid MPXTlsHelper::HostUid(void)
-	?InitializeL@MPXTlsHelper@@SAXXZ @ 27 NONAME ; void MPXTlsHelper::InitializeL(void)
-	?IsForegroundApplication@CMPXCommonUiHelper@@QAEHH@Z @ 28 NONAME ; int CMPXCommonUiHelper::IsForegroundApplication(int)
+	?IsForegroundApplication@CMPXCommonUiHelper@@QAEHH@Z @ 1 NONAME ; int CMPXCommonUiHelper::IsForegroundApplication(int)
+	?AllowMove@MPXTlsHelper@@SAHXZ @ 2 NONAME ; int MPXTlsHelper::AllowMove(void)
+	?IsProfileOfflineModeL@CMPXCommonUiHelper@@QAEHXZ @ 3 NONAME ; int CMPXCommonUiHelper::IsProfileOfflineModeL(void)
+	?InitializeL@MPXTlsHelper@@SAXXZ @ 4 NONAME ; void MPXTlsHelper::InitializeL(void)
+	?StartCopyOperationL@CMPXSaveHelper@@QAEXABVTDesC16@@0H@Z @ 5 NONAME ; void CMPXSaveHelper::StartCopyOperationL(class TDesC16 const &, class TDesC16 const &, int)
+	?SetHostUidL@MPXTlsHelper@@SAXABVTUid@@@Z @ 6 NONAME ; void MPXTlsHelper::SetHostUidL(class TUid const &)
+	?LaunchMode@MPXTlsHelper@@SA?AW4TMPXLaunchMode@@XZ @ 7 NONAME ; enum TMPXLaunchMode MPXTlsHelper::LaunchMode(void)
+	?IsHostMessagingL@CMPXCommonUiHelper@@QAEHXZ @ 8 NONAME ; int CMPXCommonUiHelper::IsHostMessagingL(void)
+	?DoSetAsRingingToneL@CMPXCommonUiHelper@@QAEXABVCMPXMedia@@HH@Z @ 9 NONAME ; void CMPXCommonUiHelper::DoSetAsRingingToneL(class CMPXMedia const &, int, int)
+	?LaunchRenameDialogL@CMPXCommonUiHelper@@QAEHABVTDesC16@@AAVTDes16@@0@Z @ 10 NONAME ; int CMPXCommonUiHelper::LaunchRenameDialogL(class TDesC16 const &, class TDes16 &, class TDesC16 const &)
+	?AddToSavedPlaylistL@CMPXCommonUiHelper@@QAEHABVCMPXMedia@@0PAVMMPXCHelperObserver@@PAVMProgressDialogCallback@@@Z @ 11 NONAME ; int CMPXCommonUiHelper::AddToSavedPlaylistL(class CMPXMedia const &, class CMPXMedia const &, class MMPXCHelperObserver *, class MProgressDialogCallback *)
+	?Uninitialize@MPXTlsHelper@@SAXXZ @ 12 NONAME ; void MPXTlsHelper::Uninitialize(void)
+	?RemoveMiddleSoftKeyLabel@CMPXCommonUiHelper@@QAEXAAVCEikButtonGroupContainer@@@Z @ 13 NONAME ; void CMPXCommonUiHelper::RemoveMiddleSoftKeyLabel(class CEikButtonGroupContainer &)
+	?CreatePlaylistL@CMPXCommonUiHelper@@QAEHABVCMPXMedia@@PAVMMPXCHelperObserver@@PAVMProgressDialogCallback@@@Z @ 14 NONAME ; int CMPXCommonUiHelper::CreatePlaylistL(class CMPXMedia const &, class MMPXCHelperObserver *, class MProgressDialogCallback *)
+	?SetFilePath@MPXTlsHelper@@SAXABVTDesC16@@@Z @ 15 NONAME ; void MPXTlsHelper::SetFilePath(class TDesC16 const &)
+	?NeedSave@MPXTlsHelper@@SAHXZ @ 16 NONAME ; int MPXTlsHelper::NeedSave(void)
+	?ExtractAlbumArtL@CMPXAlbumArtUtil@@QAEXABVCMPXMedia@@AAVMMPXAlbumArtUtilObserver@@ABVTSize@@HW4TDisplayMode@@@Z @ 17 NONAME ; void CMPXAlbumArtUtil::ExtractAlbumArtL(class CMPXMedia const &, class MMPXAlbumArtUtilObserver &, class TSize const &, int, enum TDisplayMode)
+	?DefaultDriveLC@CMPXCommonUiHelper@@QAEPAVHBufC16@@XZ @ 18 NONAME ; class HBufC16 * CMPXCommonUiHelper::DefaultDriveLC(void)
+	?AvailableDriveLC@CMPXCommonUiHelper@@QAEPAVHBufC16@@H@Z @ 19 NONAME ; class HBufC16 * CMPXCommonUiHelper::AvailableDriveLC(int)
+	?IsHostPodcastingAppL@CMPXCommonUiHelper@@QAEHXZ @ 20 NONAME ; int CMPXCommonUiHelper::IsHostPodcastingAppL(void)
+	?DisplayableDurationL@CMPXCommonUiHelper@@QAEPAVHBufC16@@_JW4TMPXDuratDisplayMode@1@@Z @ 21 NONAME ; class HBufC16 * CMPXCommonUiHelper::DisplayableDurationL(long long, enum CMPXCommonUiHelper::TMPXDuratDisplayMode)
+	?CancelCollectionOperation@CMPXCommonUiHelper@@QAEXXZ @ 22 NONAME ; void CMPXCommonUiHelper::CancelCollectionOperation(void)
+	?DisplayConfirmNoteL@CMPXCommonUiHelper@@QAEXABVTDesC16@@@Z @ 23 NONAME ; void CMPXCommonUiHelper::DisplayConfirmNoteL(class TDesC16 const &)
+	?MMCDriveNumber@CMPXCommonUiHelper@@SAHXZ @ 24 NONAME ; int CMPXCommonUiHelper::MMCDriveNumber(void)
+	?HandleErrorL@CMPXCommonUiHelper@@QAEHHPBVCMPXMedia@@PAVRFile@@@Z @ 25 NONAME ; int CMPXCommonUiHelper::HandleErrorL(int, class CMPXMedia const *, class RFile *)
+	?ExitOptionHiddenL@CMPXCommonUiHelper@@QAEHXZ @ 26 NONAME ; int CMPXCommonUiHelper::ExitOptionHiddenL(void)
+	?GenerateTitleL@CMPXCommonUiHelper@@QAEPAVHBufC16@@W4TMPXGeneralCategory@@ABVTDesC16@@@Z @ 27 NONAME ; class HBufC16 * CMPXCommonUiHelper::GenerateTitleL(enum TMPXGeneralCategory, class TDesC16 const &)
+	?SetMiddleSoftKeyIconL@CMPXCommonUiHelper@@QAEXAAVCEikButtonGroupContainer@@PAVCFbsBitmap@@1@Z @ 28 NONAME ; void CMPXCommonUiHelper::SetMiddleSoftKeyIconL(class CEikButtonGroupContainer &, class CFbsBitmap *, class CFbsBitmap *)
 	?IsHostBrowserL@CMPXCommonUiHelper@@QAEHXZ @ 29 NONAME ; int CMPXCommonUiHelper::IsHostBrowserL(void)
-	?IsHostMessagingBrowserL@CMPXCommonUiHelper@@QAEHXZ @ 30 NONAME ; int CMPXCommonUiHelper::IsHostMessagingBrowserL(void)
-	?IsHostMessagingL@CMPXCommonUiHelper@@QAEHXZ @ 31 NONAME ; int CMPXCommonUiHelper::IsHostMessagingL(void)
-	?IsHostPodcastingAppL@CMPXCommonUiHelper@@QAEHXZ @ 32 NONAME ; int CMPXCommonUiHelper::IsHostPodcastingAppL(void)
-	?IsProfileOfflineModeL@CMPXCommonUiHelper@@QAEHXZ @ 33 NONAME ; int CMPXCommonUiHelper::IsProfileOfflineModeL(void)
-	?LaunchMode@MPXTlsHelper@@SA?AW4TMPXLaunchMode@@XZ @ 34 NONAME ; enum TMPXLaunchMode MPXTlsHelper::LaunchMode(void)
-	?LaunchRenameDialogL@CMPXCommonUiHelper@@QAEHABVTDesC16@@AAVTDes16@@0@Z @ 35 NONAME ; int CMPXCommonUiHelper::LaunchRenameDialogL(class TDesC16 const &, class TDes16 &, class TDesC16 const &)
-	?MMCDriveNumber@CMPXCommonUiHelper@@SAHXZ @ 36 NONAME ; int CMPXCommonUiHelper::MMCDriveNumber(void)
-	?NeedSave@MPXTlsHelper@@SAHXZ @ 37 NONAME ; int MPXTlsHelper::NeedSave(void)
-	?NewL@CMPXAlbumArtUtil@@SAPAV1@XZ @ 38 NONAME ; class CMPXAlbumArtUtil * CMPXAlbumArtUtil::NewL(void)
-	?NewL@CMPXCommonUiHelper@@SAPAV1@PAVMMPXCollectionUtility@@@Z @ 39 NONAME ; class CMPXCommonUiHelper * CMPXCommonUiHelper::NewL(class MMPXCollectionUtility *)
-	?NewL@CMPXLbxExtendedFeatures@@SAPAV1@PAVCEikTextListBox@@H@Z @ 40 NONAME ; class CMPXLbxExtendedFeatures * CMPXLbxExtendedFeatures::NewL(class CEikTextListBox *, int)
-	?NewL@CMPXSaveHelper@@SAPAV1@PAVMMPXSaveHelperObserver@@PAVMFileManObserver@@@Z @ 41 NONAME ; class CMPXSaveHelper * CMPXSaveHelper::NewL(class MMPXSaveHelperObserver *, class MFileManObserver *)
-	?RemoveMiddleSoftKeyLabel@CMPXCommonUiHelper@@QAEXAAVCEikButtonGroupContainer@@@Z @ 42 NONAME ; void CMPXCommonUiHelper::RemoveMiddleSoftKeyLabel(class CEikButtonGroupContainer &)
+	?StandAloneModePId@CMPXCommonUiHelper@@SA_JXZ @ 30 NONAME ; long long CMPXCommonUiHelper::StandAloneModePId(void)
+	?StartCopyOperationL@CMPXSaveHelper@@QAEXAAVRFile@@ABVTDesC16@@HH@Z @ 31 NONAME ; void CMPXSaveHelper::StartCopyOperationL(class RFile &, class TDesC16 const &, int, int)
+	?CancelRequest@CMPXAlbumArtUtil@@QAEXXZ @ 32 NONAME ; void CMPXAlbumArtUtil::CancelRequest(void)
+	?DisplayConfirmNoteL@CMPXCommonUiHelper@@QAEXH@Z @ 33 NONAME ; void CMPXCommonUiHelper::DisplayConfirmNoteL(int)
+	?UnitConversionL@CMPXCommonUiHelper@@QAEPAVHBufC16@@_JH@Z @ 34 NONAME ; class HBufC16 * CMPXCommonUiHelper::UnitConversionL(long long, int)
+	?DisplayInfoNoteL@CMPXCommonUiHelper@@QAEXABVTDesC16@@@Z @ 35 NONAME ; void CMPXCommonUiHelper::DisplayInfoNoteL(class TDesC16 const &)
+	?NewL@CMPXSaveHelper@@SAPAV1@PAVMMPXSaveHelperObserver@@PAVMFileManObserver@@@Z @ 36 NONAME ; class CMPXSaveHelper * CMPXSaveHelper::NewL(class MMPXSaveHelperObserver *, class MFileManObserver *)
+	?NewL@CMPXCommonUiHelper@@SAPAV1@PAVMMPXCollectionUtility@@@Z @ 37 NONAME ; class CMPXCommonUiHelper * CMPXCommonUiHelper::NewL(class MMPXCollectionUtility *)
+	?DisplayInfoNoteL@CMPXCommonUiHelper@@QAEXH@Z @ 38 NONAME ; void CMPXCommonUiHelper::DisplayInfoNoteL(int)
+	??1CMPXAlbumArtUtil@@UAE@XZ @ 39 NONAME ; CMPXAlbumArtUtil::~CMPXAlbumArtUtil(void)
+	?IsHostMessagingBrowserL@CMPXCommonUiHelper@@QAEHXZ @ 40 NONAME ; int CMPXCommonUiHelper::IsHostMessagingBrowserL(void)
+	?ShowWaitNoteL@CMPXCommonUiHelper@@QAEXAAVTDesC16@@HHPAVMProgressDialogCallback@@H@Z @ 41 NONAME ; void CMPXCommonUiHelper::ShowWaitNoteL(class TDesC16 &, int, int, class MProgressDialogCallback *, int)
+	?DismissWaitNoteL@CMPXCommonUiHelper@@QAEXXZ @ 42 NONAME ; void CMPXCommonUiHelper::DismissWaitNoteL(void)
 	?SetAllowMove@MPXTlsHelper@@SAXH@Z @ 43 NONAME ; void MPXTlsHelper::SetAllowMove(int)
-	?SetFilePath@MPXTlsHelper@@SAXABVTDesC16@@@Z @ 44 NONAME ; void MPXTlsHelper::SetFilePath(class TDesC16 const &)
-	?SetHostUidL@MPXTlsHelper@@SAXABVTUid@@@Z @ 45 NONAME ; void MPXTlsHelper::SetHostUidL(class TUid const &)
-	?SetLaunchModeL@MPXTlsHelper@@SAXW4TMPXLaunchMode@@@Z @ 46 NONAME ; void MPXTlsHelper::SetLaunchModeL(enum TMPXLaunchMode)
-	?SetMiddleSoftKeyIconL@CMPXCommonUiHelper@@QAEXAAVCEikButtonGroupContainer@@PAVCFbsBitmap@@1@Z @ 47 NONAME ; void CMPXCommonUiHelper::SetMiddleSoftKeyIconL(class CEikButtonGroupContainer &, class CFbsBitmap *, class CFbsBitmap *)
+	??1CMPXSaveHelper@@UAE@XZ @ 44 NONAME ; CMPXSaveHelper::~CMPXSaveHelper(void)
+	?DisplayableDurationInTextL@CMPXCommonUiHelper@@QAEPAVHBufC16@@_J@Z @ 45 NONAME ; class HBufC16 * CMPXCommonUiHelper::DisplayableDurationInTextL(long long)
+	?HandleLbxKeyEventL@CMPXLbxExtendedFeatures@@QAE?AW4TKeyResponse@@ABUTKeyEvent@@W4TEventCode@@@Z @ 46 NONAME ; enum TKeyResponse CMPXLbxExtendedFeatures::HandleLbxKeyEventL(struct TKeyEvent const &, enum TEventCode)
+	?SetStandAloneModePId@CMPXCommonUiHelper@@SAH_J@Z @ 47 NONAME ; int CMPXCommonUiHelper::SetStandAloneModePId(long long)
 	?SetMiddleSoftKeyLabelL@CMPXCommonUiHelper@@QAEXAAVCEikButtonGroupContainer@@HH@Z @ 48 NONAME ; void CMPXCommonUiHelper::SetMiddleSoftKeyLabelL(class CEikButtonGroupContainer &, int, int)
-	?SetNeedSave@MPXTlsHelper@@SAXH@Z @ 49 NONAME ; void MPXTlsHelper::SetNeedSave(int)
-	?SetStandAloneModePId@CMPXCommonUiHelper@@SAH_J@Z @ 50 NONAME ; int CMPXCommonUiHelper::SetStandAloneModePId(long long)
-	?ShowWaitNoteL@CMPXCommonUiHelper@@QAEXAAVTDesC16@@HHPAVMProgressDialogCallback@@H@Z @ 51 NONAME ; void CMPXCommonUiHelper::ShowWaitNoteL(class TDesC16 &, int, int, class MProgressDialogCallback *, int)
-	?SpeedNaviUpdating@CMPXLbxExtendedFeatures@@QAEXH@Z @ 52 NONAME ; void CMPXLbxExtendedFeatures::SpeedNaviUpdating(int)
-	?StandAloneModePId@CMPXCommonUiHelper@@SA_JXZ @ 53 NONAME ; long long CMPXCommonUiHelper::StandAloneModePId(void)
-	?StartCopyOperationL@CMPXSaveHelper@@QAEXAAVRFile@@ABVTDesC16@@HH@Z @ 54 NONAME ; void CMPXSaveHelper::StartCopyOperationL(class RFile &, class TDesC16 const &, int, int)
-	?StartCopyOperationL@CMPXSaveHelper@@QAEXABVTDesC16@@0H@Z @ 55 NONAME ; void CMPXSaveHelper::StartCopyOperationL(class TDesC16 const &, class TDesC16 const &, int)
-	?Uninitialize@MPXTlsHelper@@SAXXZ @ 56 NONAME ; void MPXTlsHelper::Uninitialize(void)
-	?UnitConversionL@CMPXCommonUiHelper@@QAEPAVHBufC16@@_JH@Z @ 57 NONAME ; class HBufC16 * CMPXCommonUiHelper::UnitConversionL(long long, int)
-	?CancelCollectionOperation@CMPXCommonUiHelper@@QAEXXZ @ 58 NONAME ; void CMPXCommonUiHelper::CancelCollectionOperation(void)
+	?FindPlaylistsL@CMPXCommonUiHelper@@QAEPAVCMPXMedia@@XZ @ 49 NONAME ; class CMPXMedia * CMPXCommonUiHelper::FindPlaylistsL(void)
+	?SetLaunchModeL@MPXTlsHelper@@SAXW4TMPXLaunchMode@@@Z @ 50 NONAME ; void MPXTlsHelper::SetLaunchModeL(enum TMPXLaunchMode)
+	?NewL@CMPXLbxExtendedFeatures@@SAPAV1@PAVCEikTextListBox@@H@Z @ 51 NONAME ; class CMPXLbxExtendedFeatures * CMPXLbxExtendedFeatures::NewL(class CEikTextListBox *, int)
+	?EnableSpeedScrollL@CMPXLbxExtendedFeatures@@QAEXH@Z @ 52 NONAME ; void CMPXLbxExtendedFeatures::EnableSpeedScrollL(int)
+	?FilePath@MPXTlsHelper@@SA?AV?$TBuf@$0BAA@@@XZ @ 53 NONAME ; class TBuf<256> MPXTlsHelper::FilePath(void)
+	?HostUid@MPXTlsHelper@@SA?AVTUid@@XZ @ 54 NONAME ; class TUid MPXTlsHelper::HostUid(void)
+	?NewL@CMPXAlbumArtUtil@@SAPAV1@XZ @ 55 NONAME ; class CMPXAlbumArtUtil * CMPXAlbumArtUtil::NewL(void)
+	?SetNeedSave@MPXTlsHelper@@SAXH@Z @ 56 NONAME ; void MPXTlsHelper::SetNeedSave(int)
+	??1CMPXLbxExtendedFeatures@@UAE@XZ @ 57 NONAME ; CMPXLbxExtendedFeatures::~CMPXLbxExtendedFeatures(void)
+	?SpeedNaviUpdating@CMPXLbxExtendedFeatures@@QAEXH@Z @ 58 NONAME ; void CMPXLbxExtendedFeatures::SpeedNaviUpdating(int)
 
--- a/mpxmusicplayer/commonui/eabi/mpxcommonuiU.DEF	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxmusicplayer/commonui/eabi/mpxcommonuiU.DEF	Tue May 11 16:10:56 2010 +0300
@@ -18,7 +18,7 @@
 	_ZN14CMPXSaveHelperD1Ev @ 17 NONAME
 	_ZN14CMPXSaveHelperD2Ev @ 18 NONAME
 	_ZN16CMPXAlbumArtUtil13CancelRequestEv @ 19 NONAME
-	_ZN16CMPXAlbumArtUtil16ExtractAlbumArtLERK9CMPXMediaR24MMPXAlbumArtUtilObserverRK5TSize12TDisplayMode @ 20 NONAME
+	_ZN16CMPXAlbumArtUtil16ExtractAlbumArtLERK9CMPXMediaR24MMPXAlbumArtUtilObserverRK5TSizei12TDisplayMode @ 20 NONAME
 	_ZN16CMPXAlbumArtUtil4NewLEv @ 21 NONAME
 	_ZN16CMPXAlbumArtUtilD0Ev @ 22 NONAME
 	_ZN16CMPXAlbumArtUtilD1Ev @ 23 NONAME
@@ -53,18 +53,18 @@
 	_ZN18CMPXCommonUiHelper23IsForegroundApplicationEi @ 52 NONAME
 	_ZN18CMPXCommonUiHelper23IsHostMessagingBrowserLEv @ 53 NONAME
 	_ZN18CMPXCommonUiHelper24RemoveMiddleSoftKeyLabelER24CEikButtonGroupContainer @ 54 NONAME
-	_ZN18CMPXCommonUiHelper26DisplayableDurationInTextLEx @ 55 NONAME
-	_ZN18CMPXCommonUiHelper4NewLEP21MMPXCollectionUtility @ 56 NONAME
-	_ZN23CMPXLbxExtendedFeatures17SpeedNaviUpdatingEi @ 57 NONAME
-	_ZN23CMPXLbxExtendedFeatures18EnableSpeedScrollLEi @ 58 NONAME
-	_ZN23CMPXLbxExtendedFeatures18HandleLbxKeyEventLERK9TKeyEvent10TEventCode @ 59 NONAME
-	_ZN23CMPXLbxExtendedFeatures4NewLEP15CEikTextListBoxi @ 60 NONAME
-	_ZN23CMPXLbxExtendedFeaturesD0Ev @ 61 NONAME
-	_ZN23CMPXLbxExtendedFeaturesD1Ev @ 62 NONAME
-	_ZN23CMPXLbxExtendedFeaturesD2Ev @ 63 NONAME
-	_ZTI13CMPXImageUtil @ 64 NONAME ; #<TI>#
-	_ZTI16CMPXAlbumArtUtil @ 65 NONAME ; #<TI>#
-	_ZTV13CMPXImageUtil @ 66 NONAME ; #<VT>#
-	_ZTV16CMPXAlbumArtUtil @ 67 NONAME ; #<VT>#
-	_ZN18CMPXCommonUiHelper25CancelCollectionOperationEv @ 68 NONAME
+	_ZN18CMPXCommonUiHelper25CancelCollectionOperationEv @ 55 NONAME
+	_ZN18CMPXCommonUiHelper26DisplayableDurationInTextLEx @ 56 NONAME
+	_ZN18CMPXCommonUiHelper4NewLEP21MMPXCollectionUtility @ 57 NONAME
+	_ZN23CMPXLbxExtendedFeatures17SpeedNaviUpdatingEi @ 58 NONAME
+	_ZN23CMPXLbxExtendedFeatures18EnableSpeedScrollLEi @ 59 NONAME
+	_ZN23CMPXLbxExtendedFeatures18HandleLbxKeyEventLERK9TKeyEvent10TEventCode @ 60 NONAME
+	_ZN23CMPXLbxExtendedFeatures4NewLEP15CEikTextListBoxi @ 61 NONAME
+	_ZN23CMPXLbxExtendedFeaturesD0Ev @ 62 NONAME
+	_ZN23CMPXLbxExtendedFeaturesD1Ev @ 63 NONAME
+	_ZN23CMPXLbxExtendedFeaturesD2Ev @ 64 NONAME
+	_ZTI13CMPXImageUtil @ 65 NONAME
+	_ZTI16CMPXAlbumArtUtil @ 66 NONAME
+	_ZTV13CMPXImageUtil @ 67 NONAME
+	_ZTV16CMPXAlbumArtUtil @ 68 NONAME
 
--- a/mpxmusicplayer/commonui/loc/mpxcommonui.loc	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxmusicplayer/commonui/loc/mpxcommonui.loc	Tue May 11 16:10:56 2010 +0300
@@ -162,20 +162,20 @@
 // *** Playlist ***
 
 // d:Options menu item for adding to a playlist.
-// l:list_single_pane_t1_cp2/opt3
-// r:3.1
+// l:heading_pane_t1
+// r:5.2
 //
 #define qtn_mus_options_add_to_pl "Add to a playlist"
 
 // d:Options menu item for adding to a new playlist.
-// l:list_single_popup_submenu_pane_t1
-// r:3.1
+// l:list_single_pane_t1_cp2
+// r:5.2
 //
 #define qtn_nmp_sub_add_to_playlist_new "New playlist"
 
 // d:Options menu item for adding to a saved playlist.
-// l:list_single_popup_submenu_pane_t1
-// r:3.1
+// l:list_single_pane_t1_cp2
+// r:5.2
 //
 #define qtn_nmp_sub_add_to_playlist_saved "Saved playlist"
 
--- a/mpxmusicplayer/commonui/src/mpxalbumartutil.cpp	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxmusicplayer/commonui/src/mpxalbumartutil.cpp	Tue May 11 16:10:56 2010 +0300
@@ -29,17 +29,9 @@
 #include "mpxalbumartutil.h"
 #include <thumbnaildata.h>
 #include <thumbnailobjectsource.h>
-#include <centralrepository.h>
-
-#define THUMBNAIL_CENREP_UID 0x102830B0
-
-const TUint32 KSizeAudioGridWidth = 0x12;
-const TUint32 KSizeAudioGridHeight = 0x13;
-const TUint32 KSizeAudioFullscreenWidth = 0x16;
-const TUint32 KSizeAudioFullscreenHeight = 0x17;
-
 
 _LIT( KMPXAlbumMimeType, "audio/mpeg3" );
+
 // ============================== MEMBER FUNCTIONS ============================
 
 // ----------------------------------------------------------------------------
@@ -90,25 +82,10 @@
 //
 void CMPXAlbumArtUtil::ConstructL()
     {
-     MPX_FUNC("CMPXAlbumArtUtil::ConstructL()");
-     iThumbnailManager = CThumbnailManager::NewL( *this );
-     iThumbnailManager->SetFlagsL( CThumbnailManager::EDefaultFlags );
-     iThumbnailManager->SetQualityPreferenceL( CThumbnailManager::EOptimizeForPerformance );
-	 //cenrep
-     CRepository* repository;
-     repository = CRepository::NewL( TUid::Uid(THUMBNAIL_CENREP_UID));
-
-     TInt xSize( 0 );
-     TInt ySize( 0 );
-     User::LeaveIfError( repository->Get( KSizeAudioGridWidth, xSize ));
-     User::LeaveIfError( repository->Get( KSizeAudioGridHeight, ySize ));
-     iGridViewImageSize.SetSize(xSize,ySize);
-
-     User::LeaveIfError( repository->Get( KSizeAudioFullscreenWidth, xSize ));
-     User::LeaveIfError( repository->Get( KSizeAudioFullscreenHeight, ySize ));
-     iFullScreenImageSize.SetSize(xSize,ySize);
-     delete repository;
-     repository = NULL;
+	MPX_FUNC("CMPXAlbumArtUtil::ConstructL()");
+	iThumbnailManager = CThumbnailManager::NewL( *this );
+	iThumbnailManager->SetFlagsL( CThumbnailManager::EDefaultFlags );
+	iThumbnailManager->SetQualityPreferenceL( CThumbnailManager::EOptimizeForPerformance );
     }
 
 // ----------------------------------------------------------------------------
@@ -118,6 +95,7 @@
 EXPORT_C void CMPXAlbumArtUtil::ExtractAlbumArtL(const CMPXMedia& aMedia,
                                             MMPXAlbumArtUtilObserver& aObs,
                                             const TSize& aSize,
+                                            TBool aLargestFromCache,
                                             TDisplayMode aDisplayMode /*= EColor64K*/)
     {
     MPX_DEBUG1("CMPXAlbumArtUtil::ExtractAlbumArtL(): Entering");
@@ -150,18 +128,16 @@
          aMedia.IsSupported( KMPXMediaMusicAlbumArtFileName ))
         {
         iFilename = aMedia.ValueText( KMPXMediaMusicAlbumArtFileName ).AllocL();
-        if(aSize == iFullScreenImageSize)
-            {
+
+        if ( aLargestFromCache )
+			{
             iThumbnailManager->SetThumbnailSizeL(EAudioFullScreenThumbnailSize);
-            }
-        else if(aSize == iGridViewImageSize)
-            { 
-            iThumbnailManager->SetThumbnailSizeL(EAudioGridThumbnailSize);
-            } 
-        else
-            {
+			}
+		else
+			{
             iThumbnailManager->SetThumbnailSizeL(aSize);
-            }
+			}
+
         ExtractThumbnailL(&aMedia);
         }
     else
--- a/mpxmusicplayer/mediakeyhandler/data/mpxmediakeyhandler.rss	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxmusicplayer/mediakeyhandler/data/mpxmediakeyhandler.rss	Tue May 11 16:10:56 2010 +0300
@@ -40,6 +40,17 @@
 // RESOURCE DEFINITIONS 
 
 // -----------------------------------------------------------------------------
+// r_mpx_avsrc_name_text
+// AV source name shown in AVRCP 1.4 devices.
+// -----------------------------------------------------------------------------
+//
+RESOURCE TBUF r_mpx_avsrc_name_text
+    {
+    buf = qtn_svk_title_music_player;
+    }
+
+
+// -----------------------------------------------------------------------------
 // r_mpx_volume_popup_text
 // Text shown in volume popup dialog.
 // -----------------------------------------------------------------------------
--- a/mpxmusicplayer/mediakeyhandler/group/mpxmediakeyhandler.mmp	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxmusicplayer/mediakeyhandler/group/mpxmediakeyhandler.mmp	Tue May 11 16:10:56 2010 +0300
@@ -73,6 +73,7 @@
 LIBRARY         remconinterfacebase.lib
 LIBRARY         mpxplaybackutility.lib
 LIBRARY         mpxcommon.lib
+LIBRARY         charconv.lib // Unicode character conversions
 #ifdef IAD_INCLUDE_UPNP
 LIBRARY         upnpcommand.lib
 #endif
--- a/mpxmusicplayer/mediakeyhandler/src/mpxmediakeyhandlerimp.cpp	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxmusicplayer/mediakeyhandler/src/mpxmediakeyhandlerimp.cpp	Tue May 11 16:10:56 2010 +0300
@@ -27,6 +27,7 @@
 #include <bautils.h>
 #include <StringLoader.h>
 #include <apgwgnam.h>
+#include <utf.h>
 
 #ifdef UPNP_INCLUDED
 #include <upnpcopycommand.h>  
@@ -68,6 +69,19 @@
 const TInt KTenStepsVolume = 10;   
 const TInt KTwentyStepsVolume = 20;
 
+const TRemConCoreApiOperationId KSupportedCoreFeatures[] = {
+        ERemConCoreApiVolumeUp,
+        ERemConCoreApiVolumeDown,
+        ERemConCoreApiPlay,
+        ERemConCoreApiStop,
+        ERemConCoreApiPause,
+        ERemConCoreApiRewind,
+        ERemConCoreApiFastForward,
+        ERemConCoreApiForward,
+        ERemConCoreApiBackward,
+        ERemConCoreApiPausePlayFunction
+};
+
 _LIT( KMPXMediaKeyHandlerRscPath, "mpxmediakeyhandler.rsc" );
 
 
@@ -105,10 +119,24 @@
 
     // Register to remote control framework
     iInterfaceSelector = CRemConInterfaceSelector::NewL();
-    iCoreTarget = CRemConCoreApiTarget::NewL( *iInterfaceSelector, *this );
+
+    // For AVRCP 1.4 support, pass the core features to the target API. 
+    TInt entrySize = sizeof( KSupportedCoreFeatures[0] );
+    TRemConCoreApiOperationId* entries = (TRemConCoreApiOperationId*) &KSupportedCoreFeatures[0];
+    TInt count = sizeof( KSupportedCoreFeatures ) / entrySize;
+    RArray<TRemConCoreApiOperationId> coreFeatures( entrySize, entries, count );
+    iCoreTarget = CRemConCoreApiTarget::NewL( *iInterfaceSelector, *this, coreFeatures );
+
     // For handling AVRCP 1.3 metadata
     iMetaDataHandler = MMPXMetaDataHandler::NewL(*iInterfaceSelector);
-    iInterfaceSelector->OpenTargetL();
+    
+    // For AVRCP 1.4 support, make the player named. 
+    HBufC* avsrcname = StringLoader::LoadLC( R_MPX_AVSRC_NAME_TEXT );
+    HBufC8* avsrcname8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L( avsrcname->Des() );
+    CleanupStack::PushL( avsrcname8 );
+    iInterfaceSelector->OpenTargetL(ERemConAudioPlayer, ERemConNoSubType, *avsrcname8);
+    CleanupStack::PopAndDestroy( avsrcname8 );
+    CleanupStack::PopAndDestroy( avsrcname );
     iResponseHandler = CMPXRemConKeyResponse::NewL( *iCoreTarget );
 
     // Timer for implementing repeat
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbalbum.h	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbalbum.h	Tue May 11 16:10:56 2010 +0300
@@ -31,6 +31,13 @@
     public:
         virtual TInt HandleIsUnknownArtistL(TUint32 aId) = 0;
         virtual TUint32 HandleArtistForAlbumL( const TUint32 aId ) = 0;
+        /**
+        * HandleAlbumartForAlbumL.
+        * @param aId, The album ID.
+        * @param aArt, The albumart uri.
+        * @returns alternative albumart retrieved in the specified Album.
+        */
+        virtual HBufC* HandleAlbumartForAlbumL( const TUint32 aId, TPtrC aArt ) = 0;
     };
 /**
 * Responsible for managing all music databases
@@ -95,42 +102,43 @@
         *                  category was deleted
         * @param aItemExist Out parameter, ETrue if the category is not deleted after the delete,
         *        EFalse otherwise
-		* @param aArtist: The ID of the artist
+        * @param aArtist: The ID of the artist
+        * @param aArt: The albumart uri
         */
         void DecrementSongsForCategoryL(TUint32 aId, TInt aDriveId,
-            CMPXMessageArray* aItemChangedMessages, TBool& aItemExist, const TUint32 aArtist);
+            CMPXMessageArray* aItemChangedMessages, TBool& aItemExist, const TUint32 aArtist, const TDesC& aArt );
 
-		/**
-	* Gets the details for all category items.
-	* @param aAttrs attributes to be returned
-	* @param aMediaArray returns the requested attributes for all items
-	*/
-		void GetAllCategoryItemsL(const TArray<TMPXAttribute>& aAttrs,
-			CMPXMediaArray& aMediaArray);
+        /**
+    * Gets the details for all category items.
+    * @param aAttrs attributes to be returned
+    * @param aMediaArray returns the requested attributes for all items
+    */
+        void GetAllCategoryItemsL(const TArray<TMPXAttribute>& aAttrs,
+            CMPXMediaArray& aMediaArray);
 
-		/**
-	* Update a category item.
-	* @param aId: The ID of the category to update
-	* @param aMedia: The media data
-	* @param aDriveId: The Drive Id the name (category) belongs
-	* @param aItemChangedMessages: if valid on return contains a updated message if the
+    /**
+    * Update a category item.
+    * @param aId: The ID of the category to update
+    * @param aMedia: The media data
+    * @param aDriveId: The Drive Id the name (category) belongs
+    * @param aItemChangedMessages: if valid on return contains a updated message if the
     *        category was updated
-	*/
-		void UpdateItemL(TUint32 aId, const CMPXMedia& aMedia, TInt aDriveId, CMPXMessageArray* aItemChangedMessages);
+    */
+        void UpdateItemL(TUint32 aId, const CMPXMedia& aMedia, TInt aDriveId, CMPXMessageArray* aItemChangedMessages);
 
-	public:
-		/**
-	* Get albums count for a specified artist
-	* @param aId: The ID of the artist
-	*/
-	    TInt GetAlbumsCountForArtistL(TUint32 aArtistId);
+    public:
+        /**
+    * Get albums count for a specified artist
+    * @param aId: The ID of the artist
+    */
+        TInt GetAlbumsCountForArtistL(TUint32 aArtistId);
 
-		/**
-	* Get songs count for a specified album and a specified artist
-	* @param aArtistId: The ID of the artist
-	* @param aAlbumId: The ID of the album
-	*/
-		TInt GetSongsCountInAlbumMatchingArtistL(TUint32 aArtistId, TUint32 aAlbumId);
+        /**
+    * Get songs count for a specified album and a specified artist
+    * @param aArtistId: The ID of the artist
+    * @param aAlbumId: The ID of the album
+    */
+        TInt GetSongsCountInAlbumMatchingArtistL(TUint32 aArtistId, TUint32 aAlbumId);
 
     private:
         /**
@@ -149,13 +157,20 @@
         * @param aValues values of each field of Album table
         * @return a string containing the selection criteria. The ownership is passed to the caller.
         */
-		void GenerateAlbumFieldsValuesL(const CMPXMedia& aMedia,
-			CDesCArray& aFields, CDesCArray& aValues);
+        void GenerateAlbumFieldsValuesL(const CMPXMedia& aMedia,
+            CDesCArray& aFields, CDesCArray& aValues);
 
 
-		TBool IsUnknownArtistL(TUint32 aId);
+        TBool IsUnknownArtistL(TUint32 aId);
 
-		TUint32 ArtistForAlbumL(const TUint32 aId);
+        TUint32 ArtistForAlbumL(const TUint32 aId);
+        /**
+        * Get the Albumart of song which belongs to the specified Album.
+        * @param aId The ID of the album
+        * @param aArt albumart with the song is deleted.
+        * @returns alternative albumart retrieved in the specified Album.
+        */
+        HBufC* AlbumartForAlbumL(const TUint32 aId, TPtrC aArt);
 
     private:    // from MMPXTable
 
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbhandler.h	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbhandler.h	Tue May 11 16:10:56 2010 +0300
@@ -1082,8 +1082,16 @@
     /**
     * @see MMPXDbAlbumObserver
     */
-        virtual TBool HandleIsUnknownArtistL(TUint32 aArtistId);
-        virtual TUint32 HandleArtistForAlbumL(const TUint32 aAlbumId);
+    virtual TBool HandleIsUnknownArtistL(TUint32 aArtistId);
+    virtual TUint32 HandleArtistForAlbumL(const TUint32 aAlbumId);
+        
+    /**
+    * Get the Albumart of song which belongs to the specified Album.     
+    * @param aId, The Album ID.
+    * @param aArt, the AlbumArt uri.
+	* @returns alternative albumart retrieved in the specified Album.
+    */
+    virtual HBufC* HandleAlbumartForAlbumL(const TUint32 aAlbumId, TPtrC aArt);
 
     private:	// From MMPXDbPlaylistObserver
 	/**
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbmusic.h	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbmusic.h	Tue May 11 16:10:56 2010 +0300
@@ -129,7 +129,7 @@
         */
         virtual HBufC* HandleGetAlbumNameFromIdL( TUint32 aId ) = 0;
 #endif // ABSTRACTAUDIOALBUM_INCLUDED    
-	};
+    };
 
 /**
 * Responsible for managing the Music table
@@ -245,10 +245,11 @@
         * @param aComposerId returns the artist ID
         * @param aAbstractAlbumId returns the AbstractAlbum ID
         * @param aDriveId returns the song drive
+        * @param aArt returns the albumart uri
         * @return song URI. The ownership is transferred.
         */
         HBufC* GetSongInfoL(TUint32 aSongId, TUint32& aArtistId, TUint32& aAlbumId,
-            TUint32& aGenreId, TUint32& aComposerId, TUint32& aAbstractAlbumId, TInt& aDriveId);
+            TUint32& aGenreId, TUint32& aComposerId, TUint32& aAbstractAlbumId, TInt& aDriveId, HBufC*& aArt);
 #else 
         /**
         * Get the drive and category IDs for a specified song
@@ -258,10 +259,11 @@
         * @param aGenreId returns the artist ID
         * @param aComposerId returns the artist ID
         * @param aDriveId returns the song drive
+        * @param aArt returns the albumart uri
         * @return song URI. The ownership is transferred.
         */
         HBufC* GetSongInfoL(TUint32 aSongId, TUint32& aArtistId, TUint32& aAlbumId,
-            TUint32& aGenreId, TUint32& aComposerId, TInt& aDriveId);
+            TUint32& aGenreId, TUint32& aComposerId, TInt& aDriveId, HBufC*& aArt);
 #endif // ABSTRACTAUDIOALBUM_INCLUDED
         /**
         * Get the song Id, title, URI, and general flags from the given song Id and/or URI
@@ -527,6 +529,15 @@
          * @param aId, the ID of Album
          */
         TUint32 CMPXDbMusic::ArtistForAlbumL(const TUint32 aId);
+            
+        /**
+        * Get the Albumart of song which belongs to the specified Album
+        * @param aId, the ID of Album
+        * @param aArt, AlbumArt uri
+		* @returns alternative albumart retrieved in the specified Album.
+        */
+        HBufC* AlbumartForAlbumL(const TUint32 aAlbumId, TPtrC aArt);
+        
 
         /*
         * Check the integrity of the music basic table
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbpluginqueries.h	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbpluginqueries.h	Tue May 11 16:10:56 2010 +0300
@@ -222,11 +222,14 @@
 
 // Select songs information from music, playlistsongs and playlistsonginfo via playlistid order by playlistsongs's ordinal
 _LIT(KQueryMusicGetAllSongsbyPl,"select mu.UniqueId,mu.DbFlag,mu.VolumeId,mu.Title,mu.Artist,mu.Art,0,mu.Location,pl.UniqueId as PlUId, pl.ordinal from :dbname.music as mu,:pldbname.playlistsongs as pl where mu.Deleted=0 AND mu.uniqueid = pl.songid and pl.playlistid =%u ORDER BY 10");
+#ifdef ABSTRACTAUDIOALBUM_INCLUDED
+_LIT(KQueryMusicGetAllSongsInfobyPl,"SELECT Music.*,Artist.Name,Album.Name,Genre.Name,Composer.Name,pl.UniqueId as PlUId,pl.ordinal FROM :dbname.Music,:dbname.Artist,:dbname.Album,:dbname.Genre,:dbname.Composer,:pldbname.playlistsongs as pl WHERE Music.Deleted=0 AND Music.Album=Album.UniqueId AND Music.Artist=Artist.UniqueId AND Music.Genre=Genre.UniqueId AND Music.Composer=Composer.UniqueId AND Music.UniqueId=pl .songid and pl .PlaylistId=%u ORDER BY 40");
+#else
 _LIT(KQueryMusicGetAllSongsInfobyPl,"SELECT Music.*,Artist.Name,Album.Name,Genre.Name,Composer.Name,pl.UniqueId as PlUId,pl.ordinal FROM :dbname.Music,:dbname.Artist,:dbname.Album,:dbname.Genre,:dbname.Composer,:pldbname.playlistsongs as pl WHERE Music.Deleted=0 AND Music.Album=Album.UniqueId AND Music.Artist=Artist.UniqueId AND Music.Genre=Genre.UniqueId AND Music.Composer=Composer.UniqueId AND Music.UniqueId=pl .songid and pl .PlaylistId=%u ORDER BY 37");
-
+#endif
 _LIT(KQuerySongsInArtistAlbum, "SELECT count(*) FROM :dbname.Music WHERE Deleted=0 AND Artist=%u AND Album=%u");
 _LIT(KQueryMusicGetArtistForAlbum, "SELECT Artist FROM :dbname.Music,:dbname.Artist WHERE Music.Deleted=0 AND Music.Artist=Artist.UniqueId AND Music.Album=%u");
-
+_LIT(KQueryMusicGetAlbumartForAlbum, "SELECT Art FROM :dbname.Music WHERE Music.Deleted=0 AND Music.Album=%u");
 // == Category table queries ==================================================
 //
 _LIT(KCategoryTablePlaceholder, "##table##");
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/loc/mpxcollectiondbhg.loc	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/loc/mpxcollectiondbhg.loc	Tue May 11 16:10:56 2010 +0300
@@ -76,14 +76,14 @@
 #define qtn_nmp_all_by "All"
 
 // d:Title for first item in music library menu.
-// l:title_pane_t2/opt9
-// r:5.0
+// l:title_pane_t1/opt3
+// r:5.2
 //
 #define qtn_mus_title_all_tracks "All songs"
 
 // d:Title for second item in music library menu.
-// l:title_pane_t2/opt9
-// r:5.0
+// l:title_pane_t1/opt3
+// r:5.2
 //
 #define qtn_mus_title_pls "Playlists"
 
@@ -105,8 +105,8 @@
 #define qtn_mus_title_album "Album"
 
 // d:Title for fifth item in music library menu.
-// l:title_pane_t2/opt9
-// r:5.0
+// l:title_pane_t1/opt3
+// r:5.2
 //
 #define qtn_mus_title_genres "Genres"
 
@@ -117,8 +117,8 @@
 #define qtn_mus_title_composers "Composers"
 
 // d:Title for Most Played item in the playlists menu
-// l:title_pane_t2/opt9
-// r:5.0
+// l:title_pane_t1/opt3
+// r:5.2
 //
 #define qtn_mus_title_most_played "Most played"
 
@@ -129,8 +129,8 @@
 #define qtn_mus_pl_most_played "Most played"
 
 // d:Title for Recently Played item in the playlists menu
-// l:title_pane_t2/opt9
-// r:5.0
+// l:title_pane_t1/opt3
+// r:5.2
 //
 #define qtn_mus_title_recently_played "Recently played"
 
@@ -141,8 +141,8 @@
 #define qtn_mus_pl_recently_played "Recently played"
 
 // d:Title for Recently Added item in the playlists menu
-// l:title_pane_t2/opt9
-// r:5.0
+// l:title_pane_t1/opt3
+// r:5.2
 //
 #define qtn_mus_title_recently_downloaded "Recently added"
 
@@ -179,7 +179,7 @@
 #define qtn_mus_title_music_menu "Music Menu"
 
 // d:Title for Artists & Albums view in portrait mode
-// l:title_pane_t2/opt9
+// l:title_pane_t1/opt3
 // r:5.2
 //
 #define qtn_mus_title_artists_and_albums "Artists & Albums"
@@ -203,7 +203,7 @@
 #define qtn_mus_music_one_song_duration "1 song - %U"
 
 // d:Title for Songs view
-// l:title_pane_t2/opt9
+// l:title_pane_t1/opt3
 // r:5.2
 //
 #define qtn_mus_title_tracks "Songs"
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbabstractalbum.cpp	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbabstractalbum.cpp	Tue May 11 16:10:56 2010 +0300
@@ -323,13 +323,19 @@
 
     RSqlStatement recordset(GetCategoryRecordL(aId));
     CleanupClosePushL(recordset);
-
-    if (recordset.Next() != KSqlAtRow)
+    HBufC* uri = NULL;
+    if (recordset.Next() == KSqlAtRow)
+        {
+        uri = MPXDbCommonUtil::GetColumnTextL(recordset, EAbstractAlbumUri).AllocL();     
+        }
+    else
         {
-        User::LeaveIfError(KErrNotFound);
+        //entry is deleted due to garbage collection 
+        MPX_DEBUG1("CMPXDbAbstractAlbum::GetUriL, no uri, entry is deleted due to garbage collection"); 
+        TPtrC nullUri(KNullDesC);
+        uri = nullUri.AllocL();
         }
-    HBufC* uri = MPXDbCommonUtil::GetColumnTextL(recordset, EAbstractAlbumUri).AllocL();
-    CleanupStack::PopAndDestroy(&recordset);
+    CleanupStack::PopAndDestroy(&recordset);    
     return uri;
     }
 
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbalbum.cpp	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbalbum.cpp	Tue May 11 16:10:56 2010 +0300
@@ -33,6 +33,9 @@
 #include "mpxdbalbum.h"
 
 // CONSTANTS
+#ifdef ABSTRACTAUDIOALBUM_INCLUDED
+_LIT( KAbstractAlbumExt, ".alb" );
+#endif // ABSTRACTAUDIOALBUM_INCLUDED
 
 // ============================ MEMBER FUNCTIONS ==============================
 
@@ -202,7 +205,8 @@
     TInt aDriveId,
     CMPXMessageArray* aItemChangedMessages,
     TBool& aItemExist,
-    const TUint32 aArtist)
+    const TUint32 aArtist,
+    const TDesC& aArt)
     {
     MPX_FUNC("CMPXDbAlbum::DecrementSongsForCategoryL");
 
@@ -237,8 +241,7 @@
         }
 
         TUint32 artistId = recordset.ColumnInt64(EAlbumArtist);
-
-        CleanupStack::PopAndDestroy(&recordset);
+        TBool itemModified = EFalse;
 
         // the current artist is equal to deleted song's artist
         if ( artistId == aArtist )
@@ -252,16 +255,63 @@
 
                 iDbManager.ExecuteQueryL(aDriveId, KQueryAlbumUpdate, setStr, aId);
                 CleanupStack::PopAndDestroy(setStr);
-                
-                if (aItemChangedMessages)
-                    {
-                    // add the item changed message
-                    MPXDbCommonUtil::AddItemAlbumChangedMessageL(*aItemChangedMessages, aId, EMPXItemModified,
-                        EMPXAlbum, KDBPluginUid, ETrue, 0 );  
-                    }
+                itemModified = ETrue;
                 }
             }
         
+#ifdef ABSTRACTAUDIOALBUM_INCLUDED      
+    TBool nonEmbeddedArt = EFalse;
+    if (aArt.Length()>0)
+        {
+        TParsePtrC parse(aArt);
+        TPtrC ext(parse.Ext());
+        //set flag to false, so .alb will not overwrite art field in album, artist table 
+        // when song with embedded art
+        if (ext.CompareF(KAbstractAlbumExt)== 0) 
+            {     
+            nonEmbeddedArt = ETrue;        
+            }
+        }
+  if (!nonEmbeddedArt)       
+       {
+#endif // ABSTRACTAUDIOALBUM_INCLUDED
+       TPtrC art(MPXDbCommonUtil::GetColumnTextL(recordset, EAlbumArt));
+        // the current art is equal to deleted song's art      
+        if(aArt.Length()>0 && art.Length()>0 && aArt.CompareF(art) ==0 )
+            {
+            MPX_DEBUG2("AlbumArt of the Song to be deleted is [%S]", &aArt);
+            
+            //need to get alternative art in the same album to display
+            HBufC* newArt = AlbumartForAlbumL(aId, aArt);
+            CleanupStack::PushL(newArt);
+
+            //update Album table only if alternative albumart found
+            if (newArt)
+                {
+                MPX_DEBUG1("CMPXDbAlbum::DecrementSongsForCategoryL, get newArt");
+                HBufC* artReplaceSingleQuote = MPXDbCommonUtil::ProcessSingleQuotesLC( *newArt );
+                _LIT( KFormatArt, "Art=\'%S\'" );
+                HBufC* setStr = HBufC::NewLC(256);                 
+                setStr->Des().Format( KFormatArt, artReplaceSingleQuote );
+
+                iDbManager.ExecuteQueryL(aDriveId, KQueryAlbumUpdate, setStr, aId);
+                CleanupStack::PopAndDestroy(setStr);
+                CleanupStack::PopAndDestroy(artReplaceSingleQuote);
+                itemModified = ETrue;                     
+                }
+           CleanupStack::PopAndDestroy(newArt);             
+           }
+#ifdef ABSTRACTAUDIOALBUM_INCLUDED            
+         }
+#endif // ABSTRACTAUDIOALBUM_INCLUDED
+        if (aItemChangedMessages && itemModified)
+           {
+           // add the item changed message
+           MPXDbCommonUtil::AddItemAlbumChangedMessageL(*aItemChangedMessages, aId, EMPXItemModified,
+                      EMPXAlbum, KDBPluginUid, ETrue, 0 );
+           }
+        CleanupStack::PopAndDestroy(&recordset);
+        
         // decrement the number of songs for the category
         query = PreProcessStringLC(KQueryCategoryDecrementSongCount);
         iDbManager.ExecuteQueryL(aDriveId, *query, aId);
@@ -510,6 +560,15 @@
     }
 
 // ----------------------------------------------------------------------------
+// CMPXDbAlbum::AlbumartForAlbumL
+// ----------------------------------------------------------------------------
+//
+HBufC* CMPXDbAlbum::AlbumartForAlbumL(const TUint32 aId, TPtrC aArt)
+    {
+    return iObserver.HandleAlbumartForAlbumL(aId, aArt);
+    }
+
+// ----------------------------------------------------------------------------
 // CMPXDbAlbum::CreateTableL
 // ----------------------------------------------------------------------------
 //
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbhandler.cpp	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbhandler.cpp	Tue May 11 16:10:56 2010 +0300
@@ -2114,6 +2114,7 @@
     TUint32 albumID(0);
     TUint32 genreID(0);
     TUint32 composerID(0);
+    HBufC*  art(NULL);
 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
     TUint32 abstractAlbumID(0);
 #endif // ABSTRACTAUDIOALBUM_INCLUDED
@@ -2121,11 +2122,12 @@
 
 // Get information from the Music table first
 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
-    HBufC* uri = iDbMusic->GetSongInfoL(aSongId, artistID, albumID, genreID, composerID, abstractAlbumID, drive);
+    HBufC* uri = iDbMusic->GetSongInfoL(aSongId, artistID, albumID, genreID, composerID, abstractAlbumID, drive, art);
 #else
-    HBufC* uri = iDbMusic->GetSongInfoL(aSongId, artistID, albumID, genreID, composerID, drive);
+    HBufC* uri = iDbMusic->GetSongInfoL(aSongId, artistID, albumID, genreID, composerID, drive, art);
 #endif // ABSTRACTAUDIOALBUM_INCLUDED
 
+    CleanupStack::PushL(art);
     // add the URI to the return array
     CleanupStack::PushL(uri);
     aUriArray.AppendL(*uri);
@@ -2134,9 +2136,10 @@
     // Update the category records
     TBool categoryExist( EFalse );
     iDbArtist->DecrementSongsForCategoryL(artistID, drive, &aItemChangedMessages, categoryExist);
-    iDbAlbum->DecrementSongsForCategoryL(albumID, drive, &aItemChangedMessages, categoryExist, artistID);
+    iDbAlbum->DecrementSongsForCategoryL(albumID, drive, &aItemChangedMessages, categoryExist, artistID, *art);
     iDbGenre->DecrementSongsForCategoryL(genreID, drive, &aItemChangedMessages, categoryExist);
     iDbComposer->DecrementSongsForCategoryL(composerID, drive, &aItemChangedMessages, categoryExist);
+    CleanupStack::PopAndDestroy(art);
 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
     if (abstractAlbumID)
         {
@@ -3355,10 +3358,23 @@
     return iDbArtist->IsUnknownArtistL(aArtistId);
     }
 
+// ---------------------------------------------------------------------------
+// CMPXDbHandler::HandleArtistForAlbumL
+// ---------------------------------------------------------------------------
+//
 TUint32 CMPXDbHandler::HandleArtistForAlbumL(const TUint32 aAlbumId)
     {
     return iDbMusic->ArtistForAlbumL(aAlbumId);
     }
+
+// ---------------------------------------------------------------------------
+// CMPXDbHandler::HandleAlbumartForAlbumL
+// ---------------------------------------------------------------------------
+//
+HBufC*  CMPXDbHandler::HandleAlbumartForAlbumL(const TUint32 aAlbumId, TPtrC aArt)
+    {
+    return iDbMusic->AlbumartForAlbumL(aAlbumId, aArt);
+    }
 #ifdef ABSTRACTAUDIOALBUM_INCLUDED   
 // ----------------------------------------------------------------------------------------------------------
 // CMPXDbHandler::HandleGetAlbumNameForSongL
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbmusic.cpp	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbmusic.cpp	Tue May 11 16:10:56 2010 +0300
@@ -448,7 +448,8 @@
 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
     TUint32& aAbstractAlbumId,
 #endif // ABSTRACTAUDIOALBUM_INCLUDED
-    TInt& aDriveId)
+    TInt& aDriveId,
+    HBufC*& aArt)
     {
     MPX_FUNC("CMPXDbMusic::GetSongInfoL");
 
@@ -469,6 +470,7 @@
 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
     aAbstractAlbumId = recordset.ColumnInt64(EMusicAbstractAlbum);
 #endif // ABSTRACTAUDIOALBUM_INCLUDED
+    aArt = MPXDbCommonUtil::GetColumnTextL(recordset, EMusicArt).AllocL();
     HBufC* uri = ConstructUriL(recordset);
 
     CleanupStack::PopAndDestroy(&recordset);
@@ -1063,6 +1065,31 @@
     }
 
 // ----------------------------------------------------------------------------
+// CMPXDbMusic::AlbumartForAlbumL
+// ----------------------------------------------------------------------------
+//
+HBufC* CMPXDbMusic::AlbumartForAlbumL(const TUint32 aAlbumId, TPtrC aArt)
+    {
+	  MPX_FUNC("CMPXDbMusic::AlbumartForAlbumL");
+    RSqlStatement recordset(iDbManager.ExecuteSelectQueryL(KQueryMusicGetAlbumartForAlbum, aAlbumId));
+    HBufC* albumart(NULL);
+   
+    CleanupClosePushL(recordset);
+    TInt err(KErrNone);
+    while ((err = recordset.Next()) == KSqlAtRow)
+        {     
+        TPtrC art(MPXDbCommonUtil::GetColumnTextL(recordset, KMPXTableDefaultIndex));		
+        if (art.Length()>0 && art.Compare(KNullDesC)!=0 &&  art.CompareF(aArt)!=0 )
+            {
+            albumart = art.AllocL(); 
+            break;
+            }	
+        }
+       
+    CleanupStack::PopAndDestroy(&recordset);
+    return albumart;
+    }
+// ----------------------------------------------------------------------------
 // CMPXDbMusic::SongExistsL
 // ----------------------------------------------------------------------------
 //
@@ -1150,11 +1177,19 @@
         MPX_DEBUG1("    !aMedia.IsSupported(KMPXMediaGeneralId)");
         TUint32 songId(aMusicTable.ColumnInt64(EMusicUniqueId));
         TInt columnCount(aMusicTable.ColumnCount());
+#ifdef ABSTRACTAUDIOALBUM_INCLUDED
+        if(columnCount == 40 && aMusicTable.ColumnIndex(_L("PlUId"))==38)
+            {
+            TUint32 pListUId(aMusicTable.ColumnInt64(38));
+            aMedia.SetTObjectValueL<TMPXItemId>(KMPXMediaGeneralId, TMPXItemId(pListUId, songId));
+            }
+#else
         if(columnCount == 37 && aMusicTable.ColumnIndex(_L("PlUId"))==35)
             {
             TUint32 pListUId(aMusicTable.ColumnInt64(35));
             aMedia.SetTObjectValueL<TMPXItemId>(KMPXMediaGeneralId, TMPXItemId(pListUId, songId));
             }
+#endif
         else
             {
             aMedia.SetTObjectValueL<TMPXItemId>(KMPXMediaGeneralId, songId);
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/loc/mpxcollectiondb.loc	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/loc/mpxcollectiondb.loc	Tue May 11 16:10:56 2010 +0300
@@ -77,14 +77,14 @@
 #define qtn_nmp_all_by "All"
 
 // d:Title for first item in music library menu.
-// l:title_pane_t2/opt9
-// r:5.0
+// l:title_pane_t1/opt3
+// r:5.2
 //
 #define qtn_mus_title_all_tracks "All songs"
 
 // d:Title for second item in music library menu.
-// l:title_pane_t2/opt9
-// r:5.0
+// l:title_pane_t1/opt3
+// r:5.2
 //
 #define qtn_mus_title_pls "Playlists"
 
@@ -106,8 +106,8 @@
 #define qtn_mus_title_album "Album"
 
 // d:Title for fifth item in music library menu.
-// l:title_pane_t2/opt9
-// r:5.0
+// l:title_pane_t1/opt3
+// r:5.2
 //
 #define qtn_mus_title_genres "Genres"
 
--- a/mpxplugins/serviceplugins/playbackplugins/progressdownloadsb/src/mpxprogressdownloadsb.cpp	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxplugins/serviceplugins/playbackplugins/progressdownloadsb/src/mpxprogressdownloadsb.cpp	Tue May 11 16:10:56 2010 +0300
@@ -320,6 +320,7 @@
                 break;
                 }
             case EPbCmdPause:
+            	{
                 if ( EPbDlStateDownloadCompleted == iDownloadState && iConsumeStarted )
                     {
                     ConsumeRights( ContentAccess::EPause );
@@ -327,6 +328,7 @@
                 TInt ret = iMStreamControl->Pause();
                 iObs->HandlePluginEvent(MMPXPlaybackPluginObserver::EPPaused, 0, ret);
                 break;
+                }  
             case EPbCmdStop:
                 iMStreamControl->Stop();
                 iObs->HandlePluginEvent(MMPXPlaybackPluginObserver::EPStopped,
--- a/mpxplugins/viewplugins/inc/mpxmetadataeditordialog.h	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxplugins/viewplugins/inc/mpxmetadataeditordialog.h	Tue May 11 16:10:56 2010 +0300
@@ -662,6 +662,7 @@
     CIdle*                                  iIdle;
     TBool                                   iTryingExit;
     DRM::CDrmUiHandling* iDrmUiHandler;
+	MMPXPlaybackUtility* iPlaybackUtility;  // not own, but need to close
     };
 
 #endif  // MPXMETADATAEDITORDIALOG_H
--- a/mpxplugins/viewplugins/views/collectionview/loc/mpxcollectionview.loc	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxplugins/viewplugins/views/collectionview/loc/mpxcollectionview.loc	Tue May 11 16:10:56 2010 +0300
@@ -258,7 +258,7 @@
 
 // d:Collection details popup label.
 // d:Label for collection details popup, available phone memory.
-// l:list_single_heading_pane_t1_cp2
+// l:list_single_heading_pane_t2_cp2
 // r:5.0
 //
 #define qtn_nmp_details_phone_memory "Phone Memory"
@@ -371,8 +371,9 @@
 //
 #define qtn_nmp_prmpt_new_name "New name:"
 
-// d:Unknown in listbox.
-// l:list_single_graphic_pane_t1
+// d:Text for an item with unknown description
+// d:Part of text for wait note
+// l:popup_note_wait_window
 // r:5.0
 //
 #define qtn_mp_list_unknown "Unknown"
@@ -390,8 +391,8 @@
 #define qtn_mus_title_unknown_album "Unknown album"
 
 // d:Unknown genre in title.
-// l:title_pane_t2/opt9
-// r:5.0
+// l:title_pane_t1/opt3
+// r:5.2
 //
 #define qtn_mus_title_unknown_genre "Unknown genre"
 
--- a/mpxplugins/viewplugins/views/collectionviewhg/loc/mpxcollectionviewhg.loc	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxplugins/viewplugins/views/collectionviewhg/loc/mpxcollectionviewhg.loc	Tue May 11 16:10:56 2010 +0300
@@ -406,8 +406,8 @@
 #define qtn_mus_title_unknown_album "Unknown album"
 
 // d:Unknown genre in title.
-// l:title_pane_t2/opt9
-// r:5.0
+// l:title_pane_t1/opt3
+// r:5.2
 //
 #define qtn_mus_title_unknown_genre "Unknown genre"
 
--- a/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgcontainer.cpp	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgcontainer.cpp	Tue May 11 16:10:56 2010 +0300
@@ -4359,7 +4359,16 @@
 			    {
                 if( iCurrentViewType == EMPXViewMediawall )
                     {
-                    ShowAlbumSongsDialogL( aResults );
+					// do not call ShowAlbumSongsDialogL if song count = 0
+					// otherwise panic occurs
+                    if( songArray->Count() )
+                        {
+                        ShowAlbumSongsDialogL( aResults );
+                        }
+                    else
+                        {
+                        iMediaWall->StartOpeningAnimationL( EFalse );
+                        }
                     }
                 else
                     {
@@ -4478,7 +4487,8 @@
     TInt songCount = songArray->Count();
 
     CDesC16ArrayFlat* songList = new (ELeave) CDesC16ArrayFlat(songCount);
-
+    CleanupStack::PushL(songList); 
+    
     if ( songCount > 1 )
         {
         HBufC* shuffleText = StringLoader::LoadLC(
@@ -4528,6 +4538,7 @@
 
     CTextListBoxModel* model = listBox->Model();
     model->SetItemTextArray( songList );
+    CleanupStack::Pop(); // songList
     model->SetOwnershipType( ELbmOwnsItemArray );
     CleanupStack::Pop( dialog );
     iDialog = dialog;
--- a/mpxplugins/viewplugins/views/commonplaybackview/loc/mpxcommonplaybackview.loc	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxplugins/viewplugins/views/commonplaybackview/loc/mpxcommonplaybackview.loc	Tue May 11 16:10:56 2010 +0300
@@ -59,8 +59,8 @@
 
 // d:Text in title pane
 // d:Player view
-// l:title_pane_t2/opt9
-// r:3.1
+// l:title_pane_t1/opt3
+// r:5.2
 //
 #define qtn_nmp_title_now_playing "Now Playing"
 
--- a/mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewcontainer.cpp	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewcontainer.cpp	Tue May 11 16:10:56 2010 +0300
@@ -725,8 +725,6 @@
         }
 
     DrawDeferred();
-    //Window().Invalidate( iAlbumArtRect );
-    //Window().Invalidate( iSliderPaneRect );
     }
 
 // ---------------------------------------------------------------------------
@@ -805,8 +803,6 @@
     else if ( aType == KEikDynamicLayoutVariantSwitch )
         {
         iLayoutObserver->HandleLayoutChange();
-        UpdateBackgroundSkinControlContext( Rect() );
-
         }
     else
         {
@@ -1267,7 +1263,7 @@
                     MTouchFeedback* feedback = MTouchFeedback::Instance();
                     if (feedback)
                         {
-                        feedback->InstantFeedback(ETouchFeedbackBasic);
+                        feedback->InstantFeedback(ETouchFeedbackPopUp);
                         }
 
                     if ( iCommandObserver )
--- a/mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewimp.cpp	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewimp.cpp	Tue May 11 16:10:56 2010 +0300
@@ -162,10 +162,6 @@
 _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 ========
 
 
@@ -215,16 +211,6 @@
     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<TBool>( flags & KMPXChangeRTForAll );
 
@@ -757,12 +743,13 @@
             const TDesC& album = aMedia->ValueText( KMPXMediaGeneralUri );
             if(!iOldUri || iOldUri->Compare(album)!= 0)
                 {
+				TRect albumArtRect( iLayout->IndicatorLayout( ClientRect(), EAlbumArtArea ));
                 // Request for pre-generated TN size
                 MPX_TRAP( err,
                     iMPXUtility->ExtractAlbumArtL(
                     *aMedia,
                     *iContainer,
-                    iFullScreenImageSize ); );
+                    albumArtRect.Size() ); );
 
                 // cancel timer
                 if ( iTNRequestTimer->IsActive())
@@ -968,6 +955,7 @@
                     TInt err = freqMHzStr.Num( freqMHz, realFormat );
                     if ( err > 0 )
                         {
+                        AknTextUtils::LanguageSpecificNumberConversion( freqMHzStr );
                         HBufC* labelFormatText = StringLoader::LoadL(
                             R_MPX_FM_FREQUENCY_LABEL,
                             freqMHzStr );
@@ -2566,28 +2554,20 @@
     // Set title
     // Ignore errors from updating title pane since if that is not
     // updated, still want to activate view
-    TRAP_IGNORE(
+    TRAP_IGNORE( UpdateTitlePaneL() );
+
+    if ( !AknLayoutUtils::PenEnabled() )
         {
-        UpdateTitlePaneL();
-        CAknNavigationControlContainer* naviPane(
-            static_cast<CAknNavigationControlContainer*>
-            ( StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidNavi ))));
-        if ( naviPane )
+        CEikButtonGroupContainer* cba = Cba();
+        if ( cba )
             {
-            naviPane->PushDefaultL();
+#ifdef __ENABLE_MSK
+            iCommonUiHelper->SetMiddleSoftKeyLabelL(
+                *cba,
+                R_TEXT_SOFTKEY_EMPTY,
+                EAknSoftkeyForwardKeyEvent );
+#endif // __ENABLE_MSK
             }
-        } );
-
-    CEikButtonGroupContainer* cba = Cba();
-    if ( cba )
-        {
-
-#ifdef __ENABLE_MSK
-        iCommonUiHelper->SetMiddleSoftKeyLabelL(
-            *cba,
-            R_TEXT_SOFTKEY_EMPTY,
-            EAknSoftkeyForwardKeyEvent );
-#endif // __ENABLE_MSK
         }
 
     iPlaybackState = iPlaybackUtility->StateL();
@@ -3039,11 +3019,6 @@
             }
 
         iContainer->SetRect( ClientRect() );
-        delete iOldUri;
-        iOldUri = NULL;
-        // Update album art
-        TRAP_IGNORE( UpdateAlbumArtL( iMedia ));
-        TRAP_IGNORE( UpdateTrackInfoL( iMedia ));
         iContainer->DrawDeferred();
         }
     }
@@ -3878,7 +3853,7 @@
     {
     MPX_FUNC("CMPXCommonPlaybackViewImp::UpdateMiddleSoftKeyDisplayL");
 
-    if (iContainer)
+    if (iContainer && !AknLayoutUtils::PenEnabled() )
             {
         CEikButtonGroupContainer* cba = Cba();
         if (cba)
@@ -3997,6 +3972,7 @@
 TInt CMPXCommonPlaybackViewImp::HandleDelayedError( TAny* aPtr )
     {
 	TInt ret( KErrNone );
+	TInt index( KErrNotFound );
     CMPXCommonPlaybackViewImp* pv = reinterpret_cast<CMPXCommonPlaybackViewImp*>( aPtr );
     pv->iDelayedErrorTimer->Cancel();
     // compare index
@@ -4011,8 +3987,11 @@
             	{
                 return ret;
             	}
-
-			if ( pv->iErrIndex == pl->Index() )
+            if ( pl )
+                {
+                index = pl->Index();  
+                }  
+			if ( pv->iErrIndex == index )
 				{
 				MPX_TRAP( ret, pv->HandleErrorL( pv->iLastDelayedErr ) );
 				}
@@ -4056,7 +4035,8 @@
                     pv->iMPXUtility->ExtractAlbumArtL(
                     *pv->iMedia,
                     *pv->iContainer,
-                    albumArtRect.Size() ); );                
+                    albumArtRect.Size(),
+                    EFalse ); );
                 }
             }
 
--- a/mpxplugins/viewplugins/views/metadataeditordialog/loc/mpxmetadataeditordialog.loc	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxplugins/viewplugins/views/metadataeditordialog/loc/mpxmetadataeditordialog.loc	Tue May 11 16:10:56 2010 +0300
@@ -423,8 +423,8 @@
 
 // d:Text in title pane
 // d:Form title
-// l:title_pane_t1
-// r:3.1
+// l:title_pane_t1/opt3
+// r:5.2
 //
 #define qtn_mus_title_details_track "Song details"
 
--- a/mpxplugins/viewplugins/views/metadataeditordialog/src/mpxmetadataeditordialog.cpp	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxplugins/viewplugins/views/metadataeditordialog/src/mpxmetadataeditordialog.cpp	Tue May 11 16:10:56 2010 +0300
@@ -2975,7 +2975,9 @@
         {
         HBufC* stringBuf = iCommonUiHelper->UnitConversionL(sizeNum);
         CleanupStack::PushL(stringBuf);
-        SetControlTextL(EMPXMetadataEditorDlgCtrlIdSize, *stringBuf,
+        TPtr stringBufPtr = stringBuf->Des();
+        AknTextUtils::DisplayTextLanguageSpecificNumberConversion(stringBufPtr);
+        SetControlTextL(EMPXMetadataEditorDlgCtrlIdSize, stringBufPtr,
                 KNullDesC);
         CleanupStack::PopAndDestroy(stringBuf);
         }
@@ -3026,6 +3028,7 @@
             {
             modDatePtr.Append( KMPXSpace );
             modDatePtr.Append( modTimePtr );
+            AknTextUtils::DisplayTextLanguageSpecificNumberConversion(modDatePtr);
             SetControlTextL(EMPXMetadataEditorDlgCtrlIdLastModified,
                     modDatePtr,
                     KNullDesC);
--- a/mpxplugins/viewplugins/views/waitnotedialog/loc/mpxwaitnotedialog.loc	Tue Apr 27 16:34:37 2010 +0300
+++ b/mpxplugins/viewplugins/views/waitnotedialog/loc/mpxwaitnotedialog.loc	Tue May 11 16:10:56 2010 +0300
@@ -94,7 +94,7 @@
 // l:popup_note_wait_window
 // r:3.1
 //
-#define qtn_nmp_note_usb_connection_in_progress "USB connection in progress"
+#define qtn_nmp_note_usb_connection_in_progress "USB connection active"
 
 // d:Wait note shown when a disk format operation is in progress
 // l:popup_note_wait_window
@@ -114,4 +114,9 @@
 //
 #define qtn_mus_note_updating_library "Updating Library. \n Please wait."
 
+// d:Wait note shown when MTP connection in progress
+// l:popup_note_wait_window
+// r:5.2
+//
+#define qtn_mus_note_media_transfer_in_progress "Media transfer in progress"
 // End of File
--- a/musichomescreen_multiview/mcpmusicplayer/src/aiplayerpluginengine.cpp	Tue Apr 27 16:34:37 2010 +0300
+++ b/musichomescreen_multiview/mcpmusicplayer/src/aiplayerpluginengine.cpp	Tue May 11 16:10:56 2010 +0300
@@ -200,7 +200,8 @@
                 TRAPD(err,iAlbumArtUtil->ExtractAlbumArtL(
                         *iMedia,
                         *this,
-                        TSize(70,70)));
+                        TSize(70,70),
+                        EFalse));
                 
                 if (err != KErrNone)
                     {
--- a/musicplayer_plat/mpx_music_player_commonui_api/inc/mpxalbumartutil.h	Tue Apr 27 16:34:37 2010 +0300
+++ b/musicplayer_plat/mpx_music_player_commonui_api/inc/mpxalbumartutil.h	Tue May 11 16:10:56 2010 +0300
@@ -54,12 +54,15 @@
     *              TMPXAttribute( KMPXMediaIdGeneral, EMPXMediaGeneralUri )
     * @param aObs callback after the operation completed.
     * @param aSize The size of the required destination BMP.
+    * @param aLargestFromCache ETrue, get the largest available from image cache, EFalse
+    *                          get the size specified in aSize.
     * @param aDisplayMode the display mode of the destination BMP
     * @return bitmap object
     */
     IMPORT_C void ExtractAlbumArtL(const CMPXMedia& aProp,
                                    MMPXAlbumArtUtilObserver& aObs,
                                    const TSize& aSize,
+                                   TBool aLargestFromCache = ETrue,
                                    TDisplayMode aDisplayMode = EColor64K);
 
    /**
@@ -124,8 +127,6 @@
     CThumbnailManager*          iThumbnailManager;      // Owned
     TDisplayMode            iDisplayMode ; //Owned
     TSize                       iImageSize;
-    TSize                       iFullScreenImageSize;
-    TSize                       iGridViewImageSize;
     TInt iReqId;
     HBufC* iFilename;
     MMPXAlbumArtUtilObserver* iObserver;