Revision: 201001
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 18 Jan 2010 20:18:06 +0200
changeset 2 b70d77332e66
parent 1 8118492f1bdf
child 3 3f752ecfeea4
Revision: 201001 Kit: 201003
mpxmusicplayer/app/src/mpxappui.cpp
mpxmusicplayer/commonui/src/mpxalbumartutil.cpp
mpxmusicplayer/commonui/src/mpxdrmuihelper.cpp
mpxmusicplayer/commonui/src/mpximageutil.cpp
mpxmusicplayer/help/inc/mus.hlp.hrh
mpxmusicplayer/mediakeyhandler/src/mpxmediakeyhandlerimp.cpp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbartist.cpp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbhandler.cpp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbplugin.cpp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/src/mpxdbartist.cpp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/src/mpxdbhandler.cpp
mpxplugins/serviceplugins/playbackplugins/progressdownloadsb/src/mpxprogressdownloadsb.cpp
mpxplugins/viewplugins/inc/mpxcommonplaybackviewimp.h
mpxplugins/viewplugins/views/addtracksdialog/src/mpxaddtracksdialog.cpp
mpxplugins/viewplugins/views/collectionview/src/mpxcollectionviewimp.cpp
mpxplugins/viewplugins/views/collectionviewhg/inc/mpxcollectionviewhgimp.h
mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgcontainer.cpp
mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgimp.cpp
mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewimp.cpp
mpxplugins/viewplugins/views/metadataeditordialog/src/mpxmetadataeditordialog.cpp
mpxplugins/viewplugins/views/upnpplaybackview/src/mpxupnpplaybackviewimp.cpp
musichomescreen/mcpmusicplayer/inc/applicationmonitor.h
musichomescreen/mcpmusicplayer/src/applicationmonitor.cpp
musichomescreen/mcpmusicplayer/src/mcpmusicplayer.cpp
musichomescreen/musicplayeractionhandlerplugin/inc/musicplayeractionhandler.h
musichomescreen/musicplayeractionhandlerplugin/src/musicplayeractionhandler.cpp
musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/hsps/00/manifest.dat
musichomescreen_multiview/mcpmusicplayer/inc/applicationmonitor.h
musichomescreen_multiview/mcpmusicplayer/src/applicationmonitor.cpp
musichomescreen_multiview/mcpmusicplayer/src/mcpmusicplayer.cpp
musichomescreen_multiview/musiccontentpublisher/inc/musiccontentpublisher.h
musichomescreen_multiview/musiccontentpublisher/src/musiccontentpublisher.cpp
musichomescreen_multiview/musicplayeractionhandlerplugin/src/musicplayeractionhandler.cpp
musicplayer_plat/mpx_music_shop_ui_api/inc/MMusicShopBrViewCallback.h
musicplayer_plat/mpx_music_shop_ui_api/inc/MusicShopExternalInterface.h
musicplayer_plat/mpx_music_store_api/inc/MusicStoreUidConstants.h
musicplayer_plat/mpx_music_store_api/inc/mpxfindinmusicshop.inl
musicplayer_plat/mpx_music_wap_adapter_cenrep_api/inc/MusicWapCenRepKeys.h
--- a/mpxmusicplayer/app/src/mpxappui.cpp	Thu Jan 07 12:45:53 2010 +0200
+++ b/mpxmusicplayer/app/src/mpxappui.cpp	Mon Jan 18 20:18:06 2010 +0200
@@ -2001,14 +2001,20 @@
         {
         if ( !IsEmbedded() )
             {
-            CMPXCollectionPath* cPath = iCollectionUtility->Collection().PathL ( );
-            CleanupStack::PushL ( cPath );
             TBool usbDiskRemovalEvent(EFalse);
             if ( (op == EMcMsgDiskRemoved) && iIsUsbOnGoing )
                 {
                 usbDiskRemovalEvent = ETrue;
                 }
-
+            else
+                {
+                MPX_DEBUG1( "CMPXAppUi::HandleBroadcastMessageL. MMC ejected and the application needs to close." );
+                RunAppShutter();
+				return;
+                }
+
+            CMPXCollectionPath* cPath = iCollectionUtility->Collection().PathL ( );
+            CleanupStack::PushL ( cPath );
             if ( cPath->Levels ( )> 1 && !iFormattingOnGoing && !usbDiskRemovalEvent &&
                  iCurrentViewType.iUid != KMPXPluginTypePlaybackUid )
                 {
@@ -3631,14 +3637,9 @@
 					{
 					TRAP( err, iCoeEnv->SimulateKeyEventL(key,EEventKey); )
 					}
-
-				// Options/Exit selected, close also the MM suite
-                if( aCommand == EAknCmdExit )
-                    {
-                    LaunchMmViewL( KMmMessage );
-                    }
-				}
-
+                }
+
+            TBool needToExit( EFalse );
             if ( iSaveMode != EMPXSaveModeIdle )
                 {
                 iCancelFileMan = ETrue;
@@ -3656,7 +3657,16 @@
                     TRAP_IGNORE( manager.ClearSelectPlayersL() );
                     iPlaybackUtility->CommandL( EPbCmdClose );
                     }
-
+                needToExit = ETrue;
+                }
+
+            if( aCommand == EAknCmdExit )
+                {
+                // Options/Exit selected, close also the MM suite
+                LaunchMmViewL( KMmMessage );
+                }
+            if( needToExit )
+                {
                 Exit();
                 }
             break;
--- a/mpxmusicplayer/commonui/src/mpxalbumartutil.cpp	Thu Jan 07 12:45:53 2010 +0200
+++ b/mpxmusicplayer/commonui/src/mpxalbumartutil.cpp	Mon Jan 18 20:18:06 2010 +0200
@@ -64,6 +64,7 @@
     {
     if (iArtUtil)
         {
+		iArtUtil->CancelRequest();
         delete iArtUtil;
         }
     if(iFilename)
@@ -121,8 +122,16 @@
     {
     MPX_DEBUG1("CMPXAlbumArtUtil::ExtractAlbumArtL(): Entering");
     MPX_DEBUG_THREAD("CMPXAlbumArtUtil::ExtractAlbumArtL()");
-    delete iArtUtil;
-    iArtUtil = NULL;
+    if(iFilename)
+        {  
+        delete iFilename;
+        iFilename = NULL;
+        } 
+    if ( iArtUtil )
+        {
+        delete iArtUtil;
+        iArtUtil = NULL;
+        }
     iArtUtil = CMPXImageUtil::NewL(aObs);
     iDisplayMode = aDisplayMode;
     iImageSize = aSize;
@@ -132,6 +141,7 @@
         {
         if ( aMedia.ValueText( KMPXMediaMusicAlbumArtFileName ).Length() == 0)
             {
+            iReqId = 0;  
             User::Leave( KErrNotFound );
             }
         }
@@ -139,8 +149,6 @@
     if ( aMedia.IsSupported( KMPXMediaGeneralUri ) &&
          aMedia.IsSupported( KMPXMediaMusicAlbumArtFileName ))
         {
-        delete iFilename;
-        iFilename = NULL;
         iFilename = aMedia.ValueText( KMPXMediaMusicAlbumArtFileName ).AllocL();
         if(aSize == iFullScreenImageSize)
             {
@@ -173,6 +181,12 @@
     if ( iArtUtil )
         {
         iArtUtil->CancelRequest();
+        delete iArtUtil;
+        iArtUtil = 0;
+        }
+	if ( iThumbnailManager && iReqId > 0 )
+        {
+         iThumbnailManager->CancelRequest(iReqId);
         }
     iReqId = 0;
     MPX_DEBUG1("CMPXAlbumArtUtil::CancelRequest(): Exiting");
@@ -203,7 +217,7 @@
         TPtrC data = metaCont.Field( aFieldId );
         if(data.Length()==0)
             {
-            iObserver->ExtractAlbumArtCompleted( NULL, KErrNotFound );            
+            User::Leave( KErrNotFound );          
             }
         ret = MPXUser::Alloc8L(data);
 
@@ -258,12 +272,12 @@
                 delete tempBitmap;
                 } 
             }
-        else
+        else if(iReqId == aId)
             {
             iObserver->ExtractAlbumArtCompleted( NULL, KErrNotFound );
             }
         } 	
-    else
+    else if (iArtUtil && iFilename)
         {
         TRAPD( err,
             HBufC8* art( ExtractBinaryMetaDataLC(iFilename->Des(),EMetaDataJpeg ));
@@ -276,6 +290,7 @@
             }  
         } 
 
+    iReqId = 0;
     }
 
 // -----------------------------------------------------------------------------
@@ -302,6 +317,10 @@
             {
             CThumbnailObjectSource* source = CThumbnailObjectSource::NewLC( album, KMPXAlbumMimeType );
             TInt ret = NULL;
+            if(iThumbnailManager && iReqId >0)
+                {
+                iThumbnailManager->CancelRequest( iReqId );
+                }   
             TRAPD(err, iReqId = TInt (iThumbnailManager->GetThumbnailL( *source, (TAny*)ret)));
             if( err != KErrNone)
                 {
--- a/mpxmusicplayer/commonui/src/mpxdrmuihelper.cpp	Thu Jan 07 12:45:53 2010 +0200
+++ b/mpxmusicplayer/commonui/src/mpxdrmuihelper.cpp	Mon Jan 18 20:18:06 2010 +0200
@@ -502,6 +502,7 @@
             TInt /*aOperationId*/,
             TInt /*aError*/ )
 	{
+    iRightsValid = ETrue;
     }
 
 // ----------------------------------------------------------------------------
@@ -512,6 +513,7 @@
             TInt /*aOperationId*/,
             TInt /*aError*/ )
 	{
+    iRightsValid = ETrue;
 	}
 
 // ----------------------------------------------------------------------------
--- a/mpxmusicplayer/commonui/src/mpximageutil.cpp	Thu Jan 07 12:45:53 2010 +0200
+++ b/mpxmusicplayer/commonui/src/mpximageutil.cpp	Mon Jan 18 20:18:06 2010 +0200
@@ -240,6 +240,11 @@
         default: // some error
             {
             iState = EIdle;
+            if ( iBitmap )
+                {
+                delete iBitmap;
+                iBitmap = NULL;                        
+                }
             iObserver.ExtractAlbumArtCompleted(iBitmap,iStatus.Int());
             break;
             }
--- a/mpxmusicplayer/help/inc/mus.hlp.hrh	Thu Jan 07 12:45:53 2010 +0200
+++ b/mpxmusicplayer/help/inc/mus.hlp.hrh	Mon Jan 18 20:18:06 2010 +0200
@@ -2,9 +2,9 @@
 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
-* under the terms of the License "Symbian Foundation License v1.0"
+* under the terms of "Eclipse Public License v1.0"
 * which accompanies this distribution, and is available
-* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
 *
 * Initial Contributors:
 * Nokia Corporation - initial contribution.
--- a/mpxmusicplayer/mediakeyhandler/src/mpxmediakeyhandlerimp.cpp	Thu Jan 07 12:45:53 2010 +0200
+++ b/mpxmusicplayer/mediakeyhandler/src/mpxmediakeyhandlerimp.cpp	Mon Jan 18 20:18:06 2010 +0200
@@ -297,20 +297,32 @@
         if ( forwardCommand )
             {
             iVolumeEventCount++;
+        	
+            TInt volume(0);
+            TFileName subPlayerName;
+            TMPXPlaybackPlayerType currentPlayerType = EPbLocal;
+            GetSubPlayerInfoL(subPlayerName, currentPlayerType);
             
-            TInt volume = iUpnpVolume % ( KPbPlaybackVolumeLevelMax / iVolumeSteps )
-                    + iCurrentVol * KPbPlaybackVolumeLevelMax / iVolumeSteps;
-
-			if ( volume < KMPXMinVolume )
-				{
-				volume = KMPXMinVolume;
-				}
-			if ( volume > KMPXMaxVolume )
-				{
-				volume = KMPXMaxVolume;
-				}
-			
-			iObserver->HandleMediaKeyCommand( aCommandId, volume );
+        	if ( currentPlayerType == EPbRemote )
+                {
+        	    volume = iUpnpVolume % ( KPbPlaybackVolumeLevelMax / iVolumeSteps )
+            	                    + iCurrentVol * KPbPlaybackVolumeLevelMax / iVolumeSteps;
+        	    }
+        	else
+        	    {
+        	    volume = iCurrentVol * KPbPlaybackVolumeLevelMax/iVolumeSteps;
+        	    }
+            
+            if ( volume < KMPXMinVolume )
+                {
+                volume = KMPXMinVolume;
+                }
+            if ( volume > KMPXMaxVolume )
+                {
+                volume = KMPXMaxVolume;
+                }
+            
+            iObserver->HandleMediaKeyCommand( aCommandId, volume );
             }
         }
     }
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbartist.cpp	Thu Jan 07 12:45:53 2010 +0200
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbartist.cpp	Mon Jan 18 20:18:06 2010 +0200
@@ -241,7 +241,9 @@
 //              aMedia.SetTObjectValueL<TInt>(KMPXMediaGeneralCount,albumCount);
 //              MPX_DEBUG1("	EMPXMediaGeneralCount");
 //				MPX_DEBUG2("	AlbumCount[%d]", albumCount);
-				TInt songCount = aRecord.ColumnInt64(EArtistSongCount);
+                // get songs count from all drives
+                TInt songCount = GetSongsCountL( KDbManagerAllDrives,
+                                    aRecord.ColumnInt64( EArtistUniqueId ) );
 				aMedia.SetTObjectValueL<TInt>(KMPXMediaGeneralCount, songCount); // mod by anjokela
 
                 MPX_DEBUG1("	EMPXMediaGeneralCount");
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbhandler.cpp	Thu Jan 07 12:45:53 2010 +0200
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbhandler.cpp	Mon Jan 18 20:18:06 2010 +0200
@@ -2789,6 +2789,15 @@
         MPXDbCommonUtil::AddItemChangedMessageL(*aItemChangedMessages, id, EMPXItemInserted,
             aCategory, KDBPluginUid);
         }
+    // when the added item's category is Genre or Composer,
+    // and it is NOT a new record,
+    // we should send the item number changed message
+    else if ( ( aCategory == EMPXGenre || aCategory == EMPXComposer ) &&
+    		!newRecord && aItemChangedMessages )
+        {
+        MPXDbCommonUtil::AddItemChangedMessageL(*aItemChangedMessages, id, EMPXItemModified,
+            aCategory, KDBPluginUid);
+        }
     aItemExist = !newRecord;
     MPX_PERF_END(CMPXDbHandler_AddCategoryItemL);
 
@@ -2825,6 +2834,14 @@
         MPXDbCommonUtil::AddItemChangedMessageL(*aItemChangedMessages, id, EMPXItemInserted,
             aCategory, KDBPluginUid);
         }
+    // when the added item's category is Artist, and it is NOT a new record,
+    // we should send the item number changed message
+    else if (  aCategory == EMPXArtist &&
+    		!newRecord && aItemChangedMessages )
+        {
+        MPXDbCommonUtil::AddItemChangedMessageL(*aItemChangedMessages, id, EMPXItemModified,
+            aCategory, KDBPluginUid);
+        }
     aItemExist = !newRecord;
     MPX_PERF_END(CMPXDbHandler_AddCategoryItemL);
 
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbplugin.cpp	Thu Jan 07 12:45:53 2010 +0200
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbplugin.cpp	Mon Jan 18 20:18:06 2010 +0200
@@ -1408,6 +1408,25 @@
                 iDbHandler->GetSongsMatchingPlaylistL(aPath.Id (idIndex).iId2, aAttrs, aArray);
                 }
 
+
+             // Add "Shuffle" item
+            if (aArray->Count() > 2)
+                {
+                MPXDbCommonUtil::PrependMediaL(*aArray, *iShuffleAllText,
+                        EMPXItem, EMPXCommand, 0, 0, 0, 1);
+                aArray->AtL(1)->SetTObjectValueL(KMPXMediaColDetailNumberOfItems, aArray->Count()-2);
+
+				TInt pPath(0);
+                CMPXMedia* pMedia = aArray->AtL(0);
+				if (pMedia->IsSupported(KMPXMediaGeneralValue))
+					{
+					pPath = pMedia->ValueTObjectL<TInt>(KMPXMediaGeneralValue);
+					MPX_ASSERT(pPath);
+					}
+				//Update path to include the additional id.
+				((CMPXCollectionPath*)pPath)->InsertL(0,0);
+                }
+
             SetMediaGeneralAttributesL(aEntries, EMPXItem, EMPXPlaylist, aPath.Id(idIndex).iId2);
 
             // populate EMPXMediaGeneralNonPermissibleActions
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/src/mpxdbartist.cpp	Thu Jan 07 12:45:53 2010 +0200
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/src/mpxdbartist.cpp	Mon Jan 18 20:18:06 2010 +0200
@@ -244,7 +244,9 @@
 //              aMedia.SetTObjectValueL<TInt>(KMPXMediaGeneralCount,albumCount);
 //              MPX_DEBUG1("	EMPXMediaGeneralCount");
 //				MPX_DEBUG2("	AlbumCount[%d]", albumCount);
-				TInt songCount = aRecord.ColumnInt64(EArtistSongCount);
+                // get songs count from all drives
+                TInt songCount = GetSongsCountL( KDbManagerAllDrives,
+                                    aRecord.ColumnInt64( EArtistUniqueId ) );
 				aMedia.SetTObjectValueL<TInt>(KMPXMediaGeneralCount, songCount); // mod by anjokela
 				
                 MPX_DEBUG1("	EMPXMediaGeneralCount");
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/src/mpxdbhandler.cpp	Thu Jan 07 12:45:53 2010 +0200
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbplugin/src/mpxdbhandler.cpp	Mon Jan 18 20:18:06 2010 +0200
@@ -2789,6 +2789,15 @@
         MPXDbCommonUtil::AddItemChangedMessageL(*aItemChangedMessages, id, EMPXItemInserted,
             aCategory, KDBPluginUid);
         }
+    // when the added item's category is Genre or Composer,
+    // and it is NOT a new record,
+    // we should send the item number changed message
+    else if ( ( aCategory == EMPXGenre || aCategory == EMPXComposer ) &&
+    		!newRecord && aItemChangedMessages )
+        {
+        MPXDbCommonUtil::AddItemChangedMessageL(*aItemChangedMessages, id, EMPXItemModified,
+            aCategory, KDBPluginUid);
+        }
     aItemExist = !newRecord;
     MPX_PERF_END(CMPXDbHandler_AddCategoryItemL);
 
@@ -2825,6 +2834,14 @@
         MPXDbCommonUtil::AddItemChangedMessageL(*aItemChangedMessages, id, EMPXItemInserted,
             aCategory, KDBPluginUid);
         }
+    // when the added item's category is Artist, and it is NOT a new record,
+    // we should send the item number changed message
+    else if (  aCategory == EMPXArtist &&
+    		!newRecord && aItemChangedMessages )
+        {
+        MPXDbCommonUtil::AddItemChangedMessageL(*aItemChangedMessages, id, EMPXItemModified,
+            aCategory, KDBPluginUid);
+        }
     aItemExist = !newRecord;
     MPX_PERF_END(CMPXDbHandler_AddCategoryItemL);
 
--- a/mpxplugins/serviceplugins/playbackplugins/progressdownloadsb/src/mpxprogressdownloadsb.cpp	Thu Jan 07 12:45:53 2010 +0200
+++ b/mpxplugins/serviceplugins/playbackplugins/progressdownloadsb/src/mpxprogressdownloadsb.cpp	Mon Jan 18 20:18:06 2010 +0200
@@ -1442,7 +1442,9 @@
 //
 void CMPXProgressDownloadSB::MoveDownloadedFileToMusicFolderL()
     {
-    if ( iFileSaved || ( (*iPdPath).Length() == 0 ) )
+    if ( iFileSaved ||
+         ( (*iPdPath).Length() == 0 ) ||
+         iMAudioProgDLSource->GetDownloadStatus() == MProgDLSource::EDeleted )
         {
         return;
         }
--- a/mpxplugins/viewplugins/inc/mpxcommonplaybackviewimp.h	Thu Jan 07 12:45:53 2010 +0200
+++ b/mpxplugins/viewplugins/inc/mpxcommonplaybackviewimp.h	Mon Jan 18 20:18:06 2010 +0200
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:  MPX common playback view implementation
-*  Version     : %version: da1mmcf#41.1.6.1.1.1.8 % << Don't touch! Updated by Synergy at check-out.
+*  Version     : %version: da1mmcf#41.1.6.1.1.1.9 % << Don't touch! Updated by Synergy at check-out.
 *
 */
 
@@ -656,7 +656,8 @@
     CMPXPSKeyWatcher*   iPSKeyWatcher;      // own
     CMPXCenRepWatcher*  iCRWatcher;         // own
     TInt                iFMTxFreqKHz;
-
+    TInt                iFmTxActivity;
+	
     // View utility.
     MMPXViewUtility* iViewUtility;
 
--- a/mpxplugins/viewplugins/views/addtracksdialog/src/mpxaddtracksdialog.cpp	Thu Jan 07 12:45:53 2010 +0200
+++ b/mpxplugins/viewplugins/views/addtracksdialog/src/mpxaddtracksdialog.cpp	Mon Jan 18 20:18:06 2010 +0200
@@ -590,12 +590,11 @@
 
     CAknFilteredTextListBoxModel* lbxModel =
         static_cast<CAknFilteredTextListBoxModel*>( iListBox->Model() );
-    CAknSearchField* tempSearchField =
-        static_cast<CAknSearchField*>( lbxModel->Filter()->FindBox() );
+    CAknSearchField* findBox = FindBox();
     lbxModel->Filter()->SetSearchField( NULL );//for find the items
     // Update item array
     iLbxFilterItems->HandleItemArrayChangeL();
-    lbxModel->Filter()->SetSearchField( tempSearchField );// for laylout of list
+    lbxModel->Filter()->SetSearchField( findBox );// for laylout of list
 
     TInt itemCount = CurrentListItemCount();
     if ( itemCount )
@@ -1508,9 +1507,13 @@
             TRAP_IGNORE( findBox->ResetL() );
             iListBox->SetFocus( ETrue );
             
+            CAknFilteredTextListBoxModel* lbxModel =
+                static_cast<CAknFilteredTextListBoxModel*>( iListBox->Model() );
+            lbxModel->Filter()->SetSearchField( findBox );// for laylout of list
             TRect mainPane;
             AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPane );
             SetSizeAndPosition( mainPane.Size() );
+            DrawDeferred();
             break;
             }
         default:
@@ -1537,6 +1540,10 @@
     TKeyResponse res = EKeyWasNotConsumed;
     TBool updateCBA = EFalse;
     CAknSearchField* findbox = FindBox();
+    
+    CAknFilteredTextListBoxModel* lbxModel =
+        static_cast<CAknFilteredTextListBoxModel*>( iListBox->Model() );
+    lbxModel->Filter()->SetSearchField( NULL );//for find the items
 
     if ( aType == EEventKey )
         {
@@ -1647,9 +1654,12 @@
                     TRAP_IGNORE( findBox->ResetL() );
                     iListBox->SetFocus( ETrue );
                     
+                    lbxModel->Filter()->SetSearchField( findBox );// for laylout of list
+                    
                     TRect mainPane;
                     AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPane );
                     SetSizeAndPosition( mainPane.Size() );
+                    iListBox->DrawDeferred();
                     res = EKeyWasConsumed;
                     }
                 else
@@ -1687,9 +1697,14 @@
 
     if ( aType == KEikDynamicLayoutVariantSwitch )
         {
-        TRect rect;
-        AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, rect );
-        SetRect( rect );
+        CAknSearchField* findBox = FindBox();    
+        CAknFilteredTextListBoxModel* lbxModel =
+            static_cast<CAknFilteredTextListBoxModel*>( iListBox->Model() );
+        lbxModel->Filter()->SetSearchField( findBox );// for laylout of list
+
+        TRect mainPane;
+        AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPane );
+        SetSizeAndPosition( mainPane.Size() );
         }
 
     if ( aType == KAknsMessageSkinChange )
--- a/mpxplugins/viewplugins/views/collectionview/src/mpxcollectionviewimp.cpp	Thu Jan 07 12:45:53 2010 +0200
+++ b/mpxplugins/viewplugins/views/collectionview/src/mpxcollectionviewimp.cpp	Mon Jan 18 20:18:06 2010 +0200
@@ -5962,7 +5962,14 @@
                                 aMenuPane->SetItemDimmed( EMPXCmdAddSongs, ETrue );
                                 aMenuPane->SetItemDimmed( EMPXCmdReorder, ETrue );
                                 aMenuPane->SetItemDimmed( EMPXCmdSend, SendOptionVisibilityL() );
-                                aMenuPane->SetItemDimmed( EMPXCmdDelete, EFalse );
+                                if ( iCollectionReady )
+                                	{
+                                	aMenuPane->SetItemDimmed( EMPXCmdDelete, EFalse );
+                                	}
+                                else
+                                	{
+                                	aMenuPane->SetItemDimmed( EMPXCmdDelete, ETrue );
+                                	}
                                 aMenuPane->SetItemDimmed( EMPXCmdRemove, ETrue );
                                 }
                             break;
--- a/mpxplugins/viewplugins/views/collectionviewhg/inc/mpxcollectionviewhgimp.h	Thu Jan 07 12:45:53 2010 +0200
+++ b/mpxplugins/viewplugins/views/collectionviewhg/inc/mpxcollectionviewhgimp.h	Mon Jan 18 20:18:06 2010 +0200
@@ -407,7 +407,7 @@
      *        containing info for currently selected items used by playlist
      *        does not own this object
      */
-    void PrepareMediaForSelectedItemsL( CMPXMedia& aMedia );
+    void PrepareMediaForSelectedItemsL( CMPXMedia& aMedia, TMPXGeneralCategory aContainerCategory, TMPXGeneralType aContainerType );
 
     /**
      * Populates media object with information needed for save to
--- a/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgcontainer.cpp	Thu Jan 07 12:45:53 2010 +0200
+++ b/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgcontainer.cpp	Mon Jan 18 20:18:06 2010 +0200
@@ -176,6 +176,7 @@
     delete iMediaWall;
     delete iMwListWidget;
     delete iListWidget;
+    delete iOrigIcon;
     delete iCommonUiHelper;
     CancelTNRequest();
     iThumbnailReqMap.Close();
@@ -458,6 +459,10 @@
     newIcon->SetPictureOwnedExternally( EFalse );
     iContextPane = static_cast<CAknContextPane*>
         ( sp->ControlL( TUid::Uid( EEikStatusPaneUidContext ) ) );
+    if ( iOrigIcon )
+        {
+        delete iOrigIcon;
+        }
     iOrigIcon = iContextPane->SwapPicture( newIcon );
     CleanupStack::Pop( 3 ); // bitmap, mask, newIcon
     }
@@ -473,6 +478,7 @@
         {
         CEikImage* newIcon = iContextPane->SwapPicture( iOrigIcon );
         delete newIcon;
+        iOrigIcon = NULL; 
         }
     }
 
@@ -1099,6 +1105,10 @@
         {
         iListWidget->SetEmptyTextL( aText );
         }
+    else if ( iMediaWall && aText != KNullDesC )
+        {
+        iMediaWall->SetEmptyTextL( aText );
+        }
     }
 
 // -----------------------------------------------------------------------------
@@ -1673,7 +1683,7 @@
 // ----------------------------------------------------------------------------
 CHgScroller* CMPXCollectionViewHgContainer::CurrentListWidget()
     {
-    CHgScroller* current = 0;
+    CHgScroller* current = NULL;
     switch (iCurrentViewType)
         {
         case EMPXViewTBone:
@@ -1941,7 +1951,7 @@
             iView->ProcessCommandL( EMPXCmdCommonEnterKey );
             }
         }
-    else if ( iContext == EContextGroupSong )
+    else if ( iContext == EContextGroupSong || iContext == EContextItemPlaylist )
         {
         // Check if shuffle play all was selected.
         if (!ShufflePlayAllL(aIndex))
@@ -2524,7 +2534,7 @@
 
 	CGulIcon* iconCopy = CGulIcon::NewL(bitmap, mask);
 	iconCopy->SetBitmapsOwnedExternally(ETrue);
-
+	CleanupStack::PushL( iconCopy );
 	if ( iMediaWall )
 		{
 		iMediaWall->SetDefaultIconL(iconCopy);
@@ -2537,6 +2547,7 @@
 		{
 		delete iconCopy;
 		}
+	CleanupStack::Pop( iconCopy );
 	iCurrentDefaultIcon = defaultIcon;
 	}
 
@@ -2593,7 +2604,7 @@
 
 	CGulIcon* iconCopy = CGulIcon::NewL(bitmap, mask);
 	iconCopy->SetBitmapsOwnedExternally(ETrue);
-
+	CleanupStack::PushL( iconCopy );
 
 	// TODO, fix this to use currentviewtype
 	if ( iMediaWall && defaultIcon != EMPXDefaultIconNotSet )
@@ -2608,6 +2619,7 @@
 		{
 		delete iconCopy;
 		}
+	CleanupStack::Pop( iconCopy );
 	}
 
 
@@ -3918,7 +3930,18 @@
     if ( type == EMPXItem && category == EMPXCommand )
         {
 		shuffle = ETrue;
-		iPlaylistHelper->InitPlaylistL(shuffle);
+		if ( iContext == EContextItemPlaylist )
+			{
+			CMPXCollectionPath* cpath = iCollectionUtility->Collection().PathL();
+			CleanupStack::PushL( cpath );
+			cpath->Remove(0); // we want to remove index 0 which is shuffle item
+			iPlaylistHelper->InitPlaylistL(*cpath, shuffle);
+			CleanupStack::PopAndDestroy( cpath );
+			}
+		else
+			{
+			iPlaylistHelper->InitPlaylistL(shuffle);
+			}
         }
 
     return shuffle;
@@ -4354,21 +4377,26 @@
     MPX_FUNC( "CMPXCollectionViewHgContainer::RestoreSelectedAlbumItemL" );
 
     CMPXMedia* restoredAlbum = CMPXMedia::NewL();
+    CleanupStack::PushL( restoredAlbum );
     ReadFromStreamFileL(restoredAlbum);
     TMPXItemId id=restoredAlbum->ValueTObjectL<TMPXItemId>(KMPXMediaGeneralId);
-
+    iRestoredAlbumIndex = 0; 
+    iSelectedAlbumIndex = 0;
+	
     for ( TInt i = 0; i < aMediaArray.Count() ; i++ )
         {
         CMPXMedia* currentMedia( aMediaArray.AtL( i ) );
 
         if ( (currentMedia->ValueTObjectL<TMPXItemId>( KMPXMediaGeneralId ) == id) || 
-             (id == KMPXInvalidItemId && currentMedia->ValueText(KMPXMediaGeneralTitle).Compare( restoredAlbum->ValueText(KMPXMediaGeneralTitle) ) == 0 )  )
+             (id.iId1 == 0 && currentMedia->ValueText(KMPXMediaGeneralTitle).Compare( restoredAlbum->ValueText(KMPXMediaGeneralTitle) ) == 0 )  )
             {
             iRestoredAlbumIndex = i;
             iSelectedAlbumIndex = i;
             break;
             }
         }
+		
+    CleanupStack::PopAndDestroy( restoredAlbum );
     }
 
 // ----------------------------------------------------------------------------
@@ -4440,12 +4468,6 @@
         CleanupStack::PopAndDestroy( store );
         }
 
-    // for corrupted Media
-    TMPXItemId id=aMedia->ValueTObjectL<TMPXItemId>(KMPXMediaGeneralId);    
-    if ( id.iId1 == 0 )
-        {
-        aMedia->SetTObjectValueL<TMPXItemId>(KMPXMediaGeneralId, KMPXInvalidItemId );
-        }
     }
 
 void CMPXCollectionViewHgContainer::HandleGainingForeground()
--- a/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgimp.cpp	Thu Jan 07 12:45:53 2010 +0200
+++ b/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgimp.cpp	Mon Jan 18 20:18:06 2010 +0200
@@ -35,7 +35,7 @@
 #include <avkon.rsg>
 #include <avkon.mbg>
 #include <sendui.h>
-#include <cmessagedata.h>
+#include <CMessageData.h>
 #include <centralrepository.h>
 #include <mprofileengine.h>
 #include <akndlgshut.h>
@@ -3341,27 +3341,77 @@
 // Prepares media object for selected items
 // -----------------------------------------------------------------------------
 //
-void CMPXCollectionViewHgImp::PrepareMediaForSelectedItemsL( CMPXMedia& aMedia )
+void CMPXCollectionViewHgImp::PrepareMediaForSelectedItemsL( CMPXMedia& aMedia, TMPXGeneralCategory aContainerCategory, TMPXGeneralType aContainerType  )
     {
     MPX_FUNC( "CMPXCollectionViewHgImp::PrepareMediaForSelectedItemsL" );
     CMPXMediaArray* mediaArray( CMPXMediaArray::NewL() );
     CleanupStack::PushL( mediaArray );
-    CMPXCommonListBoxArrayBase* listBoxArray =
-        iContainer->ListBoxArray();
-    TInt count( iSelectionIndexCache->Count() );
 
     CMPXCollectionPath* path( iCollectionUtility->Collection().PathL() );
     CleanupStack::PushL( path );
     TMPXItemId id( path->Id( 0 ) );
     MPX_DEBUG2( "CMPXCollectionViewHgImp::PrepareMediaForSelectedItemsL collection ID = 0x%x", id.iId1 );
     CleanupStack::PopAndDestroy( path );
-
-    if ( count > 0 )
-        {
-        if ( count == 1 )
-            {
-            // marked one item, if it's not valid, ignore the command
-            const CMPXMedia& listBoxMedia = listBoxArray->MediaL( iSelectionIndexCache->At(0) );
+    
+    //support for TBone view add to playlist
+    if ( aContainerCategory == EMPXAlbum && aContainerType == EMPXItem)
+        { 	 
+        CMPXMedia* media = iContainer->SelectedItemMediaL();
+        if ( media->ValueTObjectL<TMPXItemId>( KMPXMediaGeneralId ) == KMPXInvalidItemId )
+           {
+           // leave with special error code, this error
+           // should not trigger any error message, the operation should
+           // be terminated silently
+           User::Leave( KMPXErrDataNotReady );
+           }
+        else
+           {
+           CMPXMedia* entry( PopulateMediaLC( *media, id ) );
+           mediaArray->AppendL( entry );
+           CleanupStack::Pop( entry );
+           }      	
+       }
+
+    else
+        {
+        TInt count( iSelectionIndexCache->Count() );   
+        CMPXCommonListBoxArrayBase* listBoxArray =   
+            iContainer->ListBoxArray(); 
+        if ( count > 0 )
+            {
+                            
+            if ( count == 1 )
+                {
+                // marked one item, if it's not valid, ignore the command
+                const CMPXMedia& listBoxMedia = listBoxArray->MediaL( iSelectionIndexCache->At(0) );
+                if ( listBoxMedia.ValueTObjectL<TMPXItemId>( KMPXMediaGeneralId ) == KMPXInvalidItemId )
+                    {
+                    // leave with special error code, this error
+                    // should not trigger any error message, the operation should
+                    // be terminated silently
+                    User::Leave( KMPXErrDataNotReady );
+                    }
+                
+                }
+                for ( TInt i = 0; i < count; i++ )
+                    {
+                    const CMPXMedia& listBoxMedia = listBoxArray->MediaL( iSelectionIndexCache->At(i) );
+                    if ( listBoxMedia.ValueTObjectL<TMPXItemId>( KMPXMediaGeneralId ) == KMPXInvalidItemId )
+                        {
+                        // item not ready, cache this command and execute
+                        // it when the data becomes valid
+                        User::Leave( KMPXErrDataNotReadyCacheCommand );
+                        }
+                    CMPXMedia* entry( PopulateMediaLC( listBoxMedia, id ) );
+                    mediaArray->AppendL( entry );
+                    CleanupStack::Pop( entry );
+                    }
+            }
+       
+        else
+            {
+            const CMPXMedia& listBoxMedia = listBoxArray->MediaL(
+                iContainer->CurrentLbxItemIndex() );
             if ( listBoxMedia.ValueTObjectL<TMPXItemId>( KMPXMediaGeneralId ) == KMPXInvalidItemId )
                 {
                 // leave with special error code, this error
@@ -3369,44 +3419,20 @@
                 // be terminated silently
                 User::Leave( KMPXErrDataNotReady );
                 }
-            }
-        for ( TInt i = 0; i < count; i++ )
-            {
-            const CMPXMedia& listBoxMedia = listBoxArray->MediaL( iSelectionIndexCache->At(i) );
-            if ( listBoxMedia.ValueTObjectL<TMPXItemId>( KMPXMediaGeneralId ) == KMPXInvalidItemId )
-                {
-                // item not ready, cache this command and execute
-                // it when the data becomes valid
-                User::Leave( KMPXErrDataNotReadyCacheCommand );
-                }
-            CMPXMedia* entry( PopulateMediaLC( listBoxMedia, id ) );
-            mediaArray->AppendL( entry );
-            CleanupStack::Pop( entry );
-            }
-        }
-    else
-        {
-        const CMPXMedia& listBoxMedia = listBoxArray->MediaL(
-            iContainer->CurrentLbxItemIndex() );
-        if ( listBoxMedia.ValueTObjectL<TMPXItemId>( KMPXMediaGeneralId ) == KMPXInvalidItemId )
-            {
-            // leave with special error code, this error
-            // should not trigger any error message, the operation should
-            // be terminated silently
-            User::Leave( KMPXErrDataNotReady );
-            }
-        else
-            {
-            CMPXMedia* entry( PopulateMediaLC( listBoxMedia, id ) );
-            mediaArray->AppendL( entry );
-            CleanupStack::Pop( entry );
-            }
-        }
-    aMedia.SetTObjectValueL( KMPXMediaGeneralCollectionId, id );
-    aMedia.SetCObjectValueL( KMPXMediaArrayContents, mediaArray );
-    aMedia.SetTObjectValueL( KMPXMediaArrayCount, mediaArray->Count() );
-    iNumSongAddedToPlaylist = mediaArray->Count();
-    CleanupStack::PopAndDestroy( mediaArray );
+            else
+                {
+                CMPXMedia* entry( PopulateMediaLC( listBoxMedia, id ) );
+                mediaArray->AppendL( entry );
+                CleanupStack::Pop( entry );
+                }
+            }
+       }
+ 
+       aMedia.SetTObjectValueL( KMPXMediaGeneralCollectionId, id );
+       aMedia.SetCObjectValueL( KMPXMediaArrayContents, mediaArray );
+       aMedia.SetTObjectValueL( KMPXMediaArrayCount, mediaArray->Count() );
+       iNumSongAddedToPlaylist = mediaArray->Count();
+       CleanupStack::PopAndDestroy( mediaArray );
     }
 
 // -----------------------------------------------------------------------------
@@ -3583,11 +3609,7 @@
     const TDesC& location = aMedia.ValueText( KMPXMediaGeneralUri );
     if ( location.Length() == 0 || ConeUtils::FileExists( location ) )
         {
-#ifdef SINGLE_CLICK_INCLUDED
-        HandleListBoxEventL( NULL, EEventItemSingleClicked );
-#else
         HandleListBoxEventL( NULL, EEventItemClicked );   
-#endif
         HBufC* buf = HBufC::NewLC( 5 ); // magic number, array granularity
         buf->Des().AppendNum( iContainer->CurrentLbxItemIndex() );
         // Activate view via View Framework
@@ -3976,23 +3998,39 @@
                 }
             // USB flags
             //
+	       CEikMenuBar* menuBar( MenuBar() );
+#ifdef SINGLE_CLICK_INCLUDED
+            iContainer->EnableMarking( EFalse );
+            menuBar->SetMenuTitleResourceId( R_MPX_COLLECTION_VIEW_MENUBAR_NO_MARKING );
+#else
+            iContainer->EnableMarking( ETrue );
+            menuBar->SetMenuTitleResourceId( R_MPX_COLLECTION_VIEW_MENUBAR );
+#endif
+	        TBool IsUSBEvent( EFalse );
             if( type == EMcMsgUSBMassStorageStart || type == EMcMsgUSBMTPStart )
                 {
                 iUSBOnGoing = ETrue;
+		        IsUSBEvent = ETrue;
                 }
             else if( type == EMcMsgUSBMassStorageEnd || type == EMcMsgUSBMTPEnd )
                 {
                 iUSBOnGoing = EFalse;
+		        IsUSBEvent = ETrue;
                 RProperty::Set( KMPXViewPSUid,
                                 KMPXUSBUnblockingPSStatus,
                                 EMPXUSBUnblockingPSStatusUninitialized );
                 }
             else if( type == EMcMsgUSBMTPNotActive )
                 {
+		        IsUSBEvent = ETrue;
                 RProperty::Set( KMPXViewPSUid,
                                 KMPXUSBUnblockingPSStatus,
                                 EMPXUSBUnblockingPSStatusActive );
-				}
+		        }
+            if( IsUSBEvent && menuBar && menuBar->IsDisplayed() )
+            	{
+            	menuBar->StopDisplayingMenuBar();
+            	}
 
             if ( iContainer && iIsEmbedded && type == EMcMsgUSBMassStorageEnd )
             	{
@@ -5200,19 +5238,35 @@
             // flag used only in the case when songs are added incrementally
             iIsAddingToPlaylist = ETrue;
             iNumSongAddedToPlaylist = -1;
-            TMPXGeneralCategory category( EMPXNoCategory );
-            CMPXCommonListBoxArrayBase* array(
-                iContainer->ListBoxArray() );
-            const CMPXMedia& media = array->MediaL(
+      
+            CMPXCommonListBoxArrayBase* listboxArray(
+                   iContainer->ListBoxArray() );
+                
+            const CMPXMedia& currentMedia = listboxArray->MediaL(
                 iContainer->CurrentLbxItemIndex() );
-            category = media.ValueTObjectL<TMPXGeneralCategory>(
-                KMPXMediaGeneralCategory );
-            if ( category == EMPXSong )
+            
+            TMPXGeneralCategory mediaCategory( currentMedia.ValueTObjectL<TMPXGeneralCategory>( KMPXMediaGeneralCategory ));
+                 
+            const CMPXMedia& containerMedia = listboxArray->ContainerMedia();
+       
+            TMPXGeneralType containerType( EMPXNoType );
+            if ( containerMedia.IsSupported( KMPXMediaGeneralType ) )
+                 {
+                 containerType = containerMedia.ValueTObjectL<TMPXGeneralType>( KMPXMediaGeneralType );
+                 }
+
+            TMPXGeneralCategory containerCategory( EMPXNoCategory );
+            if ( containerMedia.IsSupported( KMPXMediaGeneralCategory ) )
+                 {
+                 containerCategory = containerMedia.ValueTObjectL<TMPXGeneralCategory>( KMPXMediaGeneralCategory );
+                 } 
+                            
+            if ( mediaCategory == EMPXSong || (containerCategory == EMPXAlbum && containerType== EMPXItem) )
                 {
                 CMPXMedia* tracks = CMPXMedia::NewL();
                 CleanupStack::PushL( tracks );
 
-                MPX_TRAPD( err, PrepareMediaForSelectedItemsL( *tracks ) );
+                MPX_TRAPD( err, PrepareMediaForSelectedItemsL( *tracks, containerCategory, containerType ) );
                 if ( err == KErrNone )
                     {
                     TBool ret = EFalse;
@@ -5291,13 +5345,6 @@
                     EMPXMediaGeneralType | EMPXMediaGeneralCategory ) );
                 CMPXMedia* criteria = CMPXMedia::NewL();
                 CleanupStack::PushL( criteria );
-                CMPXCommonListBoxArrayBase* listboxArray =
-                    iContainer->ListBoxArray();
-                const CMPXMedia& containerMedia =
-                    listboxArray->ContainerMedia();
-                TMPXGeneralCategory containerCategory(
-                    containerMedia.ValueTObjectL<TMPXGeneralCategory>(
-                    KMPXMediaGeneralCategory ) );
                 if ( containerCategory == EMPXArtist )
                     {
                     // artist/album level, need to specify artist ID in container ID
@@ -5306,8 +5353,7 @@
                     criteria->SetTObjectValueL<TMPXItemId>(
                         KMPXMediaGeneralContainerId, containerId );
                     }
-                const CMPXMedia& currentMedia = listboxArray->MediaL(
-                    iContainer->CurrentLbxItemIndex() );
+            
                 TMPXItemId id(
                     currentMedia.ValueTObjectL<TMPXItemId>( KMPXMediaGeneralId ) );
                 criteria->SetTObjectValueL<TMPXGeneralType>(
@@ -6000,7 +6046,7 @@
 		case EMPXAlbum:
 		case EMPXArtist:
 			{
-			// Album & Artist view
+			// Artists & Albums view
 			aMenuPane->SetItemDimmed( EMPXCmdGoToArtistAlbums, ETrue );
 			aMenuPane->SetItemDimmed( EMPXCmdGoToGenre, ETrue );
 			break;
@@ -6040,6 +6086,8 @@
     TInt currentItem( iContainer->CurrentLbxItemIndex() );
     TBool isListEmpty( currentItem < 0 );
     TInt selectionCount( 0 );
+	
+    iSelectionIndexCache = iContainer->CurrentSelectionIndicesL(); // not owned
     if ( iSelectionIndexCache)
         {
         selectionCount = iSelectionIndexCache->Count();
@@ -6067,18 +6115,24 @@
 
             // Always dim the find in hg implementation
             aMenuPane->SetItemDimmed( EMPXCmdFind, ETrue );
-            MMPXPlaybackUtility* pdPlaybackUtility;
-            pdPlaybackUtility = MMPXPlaybackUtility::UtilityL( TUid::Uid( KProgressDownloadUid ) );
-            MMPXSource* pdsource( pdPlaybackUtility->Source() );
-            MMPXSource* source( iPlaybackUtility->Source() );
-            TBool hideNowPlaying;
-            hideNowPlaying = ( (pdsource == 0)
-                           &&  (source == 0));
-            pdPlaybackUtility->Close();
-            if ( hideNowPlaying )
-                {
-                aMenuPane->SetItemDimmed( EMPXCmdGoToNowPlaying, ETrue );
-                }
+
+			// Determine if we should hide "Goto now playing" option.
+            TBool hideNowPlaying(EFalse);
+			MMPXSource* source( iPlaybackUtility->Source() );
+            if ( source == 0 )
+				{
+				MMPXPlaybackUtility* pdPlaybackUtility;
+				pdPlaybackUtility = MMPXPlaybackUtility::UtilityL( TUid::Uid( KProgressDownloadUid ) );
+				hideNowPlaying = pdPlaybackUtility->Source() ? EFalse : ETrue;
+				pdPlaybackUtility->Close();
+				}
+            if (usbUnblockingStatus == EMPXUSBUnblockingPSStatusActive)
+                {
+                aMenuPane->SetItemDimmed( EMPXCmdRefreshLibrary, ETrue );
+                }
+
+			aMenuPane->SetItemDimmed( EMPXCmdGoToNowPlaying, hideNowPlaying );
+
             if ( !isListEmpty )
                 {
                 const CMPXMedia& media = array->MediaL( currentItem );
@@ -6091,12 +6145,13 @@
 #ifdef SINGLE_CLICK_INCLUDED
                 if ( containerType == EMPXGroup && containerCategory == EMPXAlbum )
                     {
-                    // album view
+                    // Artists & Albums view
                     switch ( category )
                         {
                         case EMPXAlbum:
                             {
-                            if ( usbUnblockingStatus == EMPXUSBUnblockingPSStatusActive )
+                            TBool landscapeOrientation = Layout_Meta_Data::IsLandscapeOrientation();
+                            if ( landscapeOrientation )
                                 {
                                 aMenuPane->SetItemDimmed( EMPXCmdCreatePlaylist, ETrue );
                                 aMenuPane->SetItemDimmed( EMPXCmdAddToPlaylist, ETrue );
@@ -6105,18 +6160,32 @@
                                 aMenuPane->SetItemDimmed( EMPXCmdSend, ETrue );
                                 aMenuPane->SetItemDimmed( EMPXCmdDelete, ETrue );
                                 aMenuPane->SetItemDimmed( EMPXCmdRemove, ETrue );
-                                aMenuPane->SetItemDimmed( EMPXCmdPlayItem, EFalse );
+                                aMenuPane->SetItemDimmed( EMPXCmdPlayItem, ETrue );                            
                                 }
                             else
                                 {
-                                aMenuPane->SetItemDimmed( EMPXCmdCreatePlaylist, ETrue );
-                                aMenuPane->SetItemDimmed( EMPXCmdAddToPlaylist, EFalse );
-                                aMenuPane->SetItemDimmed( EMPXCmdAddSongs, ETrue );
-                                aMenuPane->SetItemDimmed( EMPXCmdReorder, ETrue );
-                                aMenuPane->SetItemDimmed( EMPXCmdSend, ETrue );
-                                aMenuPane->SetItemDimmed( EMPXCmdDelete, EFalse );
-                                aMenuPane->SetItemDimmed( EMPXCmdRemove, ETrue );
-                                aMenuPane->SetItemDimmed( EMPXCmdPlayItem, EFalse );
+                                if ( usbUnblockingStatus == EMPXUSBUnblockingPSStatusActive )
+                                    {
+                                    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, EFalse );
+                                    }
+                                else
+                                    {
+                                    aMenuPane->SetItemDimmed( EMPXCmdCreatePlaylist, ETrue );
+                                    aMenuPane->SetItemDimmed( EMPXCmdAddToPlaylist, EFalse );
+                                    aMenuPane->SetItemDimmed( EMPXCmdAddSongs, ETrue );
+                                    aMenuPane->SetItemDimmed( EMPXCmdReorder, ETrue );
+                                    aMenuPane->SetItemDimmed( EMPXCmdSend, ETrue );
+                                    aMenuPane->SetItemDimmed( EMPXCmdDelete, EFalse );
+                                    aMenuPane->SetItemDimmed( EMPXCmdRemove, ETrue );
+                                    aMenuPane->SetItemDimmed( EMPXCmdPlayItem, EFalse );
+                                    }
                                 }
                             break;
                             }
@@ -6229,12 +6298,21 @@
                                     }
                                 }
                             aMenuPane->SetItemDimmed( EMPXCmdRemove, ETrue );
+                            TInt trackCount (0);                   
+                            if(media.IsSupported(KMPXMediaGeneralCount))
+                                {
+                                trackCount = media.ValueTObjectL<TInt>( KMPXMediaGeneralCount );
+                                } 
+                            if( trackCount < 1 )
+                                {
+                                aMenuPane->SetItemDimmed( EMPXCmdPlayItem, ETrue );
+                                }   
                             break;
                             }
 #ifdef SINGLE_CLICK_INCLUDED
                         case EMPXAlbum:
                             {
-                            // album contents view
+                            // Album > Tracks view
                             if ( iContainer->IsSelectedItemASong() )
                                 {                            
                                 if ( usbUnblockingStatus == EMPXUSBUnblockingPSStatusActive )
--- a/mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewimp.cpp	Thu Jan 07 12:45:53 2010 +0200
+++ b/mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewimp.cpp	Mon Jan 18 20:18:06 2010 +0200
@@ -353,6 +353,7 @@
 #endif
     iIsffButtonPressed = EFalse;
     iDelayedErrorTimer = CPeriodic::NewL( CActive::EPriorityStandard );
+    iFmTxActivity = EFmTxStateUnknown;
     }
 
 
@@ -899,6 +900,7 @@
                         }
                     }
                 }
+            iFmTxActivity = value;
 
             MPX_DEBUG4( "CMPXCommonPlaybackViewImp::UpdateFMTransmitterInfoL iFMTxFreqKHz %d freqKHz %d aForceUpdate %d", iFMTxFreqKHz, freqKHz, aForceUpdate);
             if ( iFMTxFreqKHz != freqKHz || aForceUpdate )
@@ -2414,7 +2416,11 @@
         case EMPXCmdVolumeUnMute:
         case EMPXCmdVolumeChanged:
             {
-            AppUi()->HandleCommandL( aCommand );
+            //Do not try to update volume if FMTx (transmission) is on.
+            if (iFmTxActivity != EFmTxStateActive)
+                {           
+                AppUi()->HandleCommandL( aCommand );
+                }
             break;
             }
         default:
@@ -2508,7 +2514,6 @@
                 | ECoeStackFlagRefusesAllKeys );
         toolbar->MakeVisible( ETrue );
         toolbar->HideItemsAndDrawOnlyBackground(EFalse);
-        toolbar->SetSkinBackgroundId(KAknsIIDQsnBgScreenMp);
         toolbar->SetToolbarVisibility(ETrue);
         }
     PrepareStatusPaneForPlaybackViewL();
--- a/mpxplugins/viewplugins/views/metadataeditordialog/src/mpxmetadataeditordialog.cpp	Thu Jan 07 12:45:53 2010 +0200
+++ b/mpxplugins/viewplugins/views/metadataeditordialog/src/mpxmetadataeditordialog.cpp	Mon Jan 18 20:18:06 2010 +0200
@@ -882,7 +882,7 @@
         if ( ( IdOfFocusControl() == EMPXMetadataEditorDlgCtrlIdGenre ) ||
             ( IdOfFocusControl() == EMPXMetadataEditorDlgCtrlIdLibrary ) )
             {
-            aMenuPane->SetItemDimmed( EMPXCmdSongDetailsChange, EFalse );
+            aMenuPane->SetItemDimmed( EMPXCmdSongDetailsChange, ETrue );
             }
         else
             {
@@ -2498,7 +2498,7 @@
     {
     MPX_FUNC( "CMPXMetadataEditorDialog::PostLayoutDynInitL" );
     CAknForm::PostLayoutDynInitL();
-    SetEditableL( ETrue );
+    SetEditableL( EFalse );
     }
 
 // -----------------------------------------------------------------------------
--- a/mpxplugins/viewplugins/views/upnpplaybackview/src/mpxupnpplaybackviewimp.cpp	Thu Jan 07 12:45:53 2010 +0200
+++ b/mpxplugins/viewplugins/views/upnpplaybackview/src/mpxupnpplaybackviewimp.cpp	Mon Jan 18 20:18:06 2010 +0200
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:  Implementation of Upnp Playback view
-*  Version     : %version: da1mmcf#35.1.3.1.4 % << Don't touch! Updated by Synergy at check-out.
+*  Version     : %version: e003sa33#35.1.3.1.5 % << Don't touch! Updated by Synergy at check-out.
 *
 */
 
@@ -245,7 +245,8 @@
                                      EPbAccessoryWirelessHeadset == mode ||
                                      EPbAccessoryMusicStand == mode ||
                                      EPbAccessoryTVOut == mode ||
-                                     EPbAccessoryHeadphones == mode );
+                                     EPbAccessoryHeadphones == mode ||
+                                     EPbAccessoryHDMI == mode );
 #else
                     resetToLocal = ( EPbAccessoryHeadset == mode ||
                                      EPbAccessoryLoopset == mode );
--- a/musichomescreen/mcpmusicplayer/inc/applicationmonitor.h	Thu Jan 07 12:45:53 2010 +0200
+++ b/musichomescreen/mcpmusicplayer/inc/applicationmonitor.h	Mon Jan 18 20:18:06 2010 +0200
@@ -83,6 +83,7 @@
 private: // data
     MApplicationMonitorObserver&  iObserver;
     RThread iThread; 
+    TUid iAppUid;
     };
 
 #endif // C_APPLICATIONMONITOR_H
--- a/musichomescreen/mcpmusicplayer/src/applicationmonitor.cpp	Thu Jan 07 12:45:53 2010 +0200
+++ b/musichomescreen/mcpmusicplayer/src/applicationmonitor.cpp	Mon Jan 18 20:18:06 2010 +0200
@@ -87,6 +87,7 @@
     TUint64 threadId(0);
     TBool taskExists(EFalse);
     TInt status = KErrNone;
+    iAppUid = aAppUid;
     if(aRootAppIndication)
         {
         CAknTaskList* taskList = CAknTaskList::NewL( wsSession );
@@ -131,22 +132,22 @@
     MPX_DEBUG1("CApplicationMonitor::RunL <---");
     switch (iStatus.Int())
         {
-        case EExitKill: 
-        case EExitTerminate:
-        case EExitPanic:
-            MPX_DEBUG1("CApplicationMonitor::RunL kill\terminate\panic");
-            iObserver.HandleApplicationClosedL((TExitType) iStatus.Int());
+        case EExitPending: 
+            MPX_DEBUG1("CApplicationMonitor::RunL reason = EExitPending");
+            iThread.Close();
+            TRAPD(err, StartL( iAppUid ) );
+            if (KErrNone != err)
+                {
+                MPX_DEBUG1("CApplicationMonitor::RunL reason = EExitPending but thread is really gone");
+                iObserver.HandleApplicationClosedL((TExitType) iStatus.Int());
+                }
             break;
         case KErrCancel:
-        case KErrNoMemory:
-            MPX_DEBUG1("CApplicationMonitor::RunL cancel\memory");
+            MPX_DEBUG1("CApplicationMonitor::RunL cancel");
             break;
-        case EExitPending: 
         default:
-            MPX_DEBUG1("CApplicationMonitor::RunL exitpendin\default");
-            // Listen again
-            iThread.Logon(iStatus);
-            SetActive();
+        	  MPX_DEBUG2("CApplicationMonitor::RunL reason = %d", iStatus.Int());
+        	  iObserver.HandleApplicationClosedL((TExitType) iStatus.Int());
             break;
         }
     MPX_DEBUG1("CApplicationMonitor::RunL --->");
@@ -171,9 +172,6 @@
 TInt CApplicationMonitor::RunError(TInt /*aError*/)
     {
     MPX_DEBUG1("CApplicationMonitor::RunError <---");
-    // Listen again
-    iThread.Logon(iStatus);
-    SetActive();
     MPX_DEBUG1("CApplicationMonitor::RunError --->");
     return KErrNone;
     }
--- a/musichomescreen/mcpmusicplayer/src/mcpmusicplayer.cpp	Thu Jan 07 12:45:53 2010 +0200
+++ b/musichomescreen/mcpmusicplayer/src/mcpmusicplayer.cpp	Mon Jan 18 20:18:06 2010 +0200
@@ -655,6 +655,7 @@
             case EMPlayerStatePlaying:
                 {
                 MPX_DEBUG1("CMCPMusicPlayer::DoUpdatePlayerStateL EMPlayerStatePlaying");
+                iMusicPlayerOpeningTimer->Cancel();
                 UpdateToolBarL(TBK::KSkeep_L|TBK::KPause|TBK::KSkeep_R);
                 break;
                 }
@@ -1275,31 +1276,12 @@
 //
 TInt CMCPMusicPlayer::MusicPlayerOpeningTimerCallback( TAny* aPtr )
     {
-    MPX_DEBUG1("CMCPMusicPlayer::MusicPlayerOpeningTimerCallback <---");
-    RWsSession wsSession;
-    TInt error = wsSession.Connect();
-    if ( error != KErrNone )
-        {
-        return error;
-        }
-    
-    TBool taskExists( EFalse );
-    CAknTaskList* taskList( NULL );
-    TRAPD( err, taskList = CAknTaskList::NewL( wsSession ) );
-    if ( err == KErrNone )
+    MPX_DEBUG1("CMCPMusicPlayer::MusicPlayerOpeningTimerCallback <---");     
+    if ( EMPlayerStatePlaying != static_cast<CMCPMusicPlayer*>(aPtr)->iEngine->PlayerState() )
         {
-        MPX_DEBUG2("CMCPMusicPlayer::MusicPlayerOpeningTimerCallback "
-                "error = %d occur when creating CAknTaskList", err);
-        TApaTask task = taskList->FindRootApp( TUid::Uid( KMusicPlayerAppUidAsTInt ) );
-        delete taskList;
-        taskExists = task.Exists();
-        }
-    wsSession.Close();
-    
-    if ( !taskExists )
-        {
-        MPX_DEBUG1("CMCPMusicPlayer::MusicPlayerOpeningTimerCallback Music Player not opened");
-        //Reset the widget and menu, music player is not running
+        MPX_DEBUG1("CMCPMusicPlayer::MusicPlayerOpeningTimerCallback Music Player not Playing");
+        //Reset the widget and menu, music player is not running and playing.
+        static_cast<CMCPMusicPlayer*>(aPtr)->iActive = EFalse;
         TRAP_IGNORE( static_cast<CMCPMusicPlayer*>(aPtr)->ResetL() );
         }
     static_cast<CMCPMusicPlayer*>(aPtr)->iMusicPlayerOpeningTimer->Cancel();
--- a/musichomescreen/musicplayeractionhandlerplugin/inc/musicplayeractionhandler.h	Thu Jan 07 12:45:53 2010 +0200
+++ b/musichomescreen/musicplayeractionhandlerplugin/inc/musicplayeractionhandler.h	Mon Jan 18 20:18:06 2010 +0200
@@ -20,6 +20,7 @@
 #define C_MUSICPLAYERACTIONHANDLER_H
 
 #include <ahplugin.h>
+#include <mpxplaybackcommanddefs.h>
 
 // FORWARD DECLARATION
 class CLiwMap;
@@ -120,6 +121,11 @@
     TInt ExtractVariantL( const CLiwMap* aMap, TLiwVariant& aVariant,
             const TDesC8& aMapName );
 
+    /**
+     *  Sets the playback command.
+     *  @param aCommand commandType.
+     */
+    void SetPlaybackCommandL( TMPXPlaybackCommand aCommand );
 private: // data
 
     /**
--- a/musichomescreen/musicplayeractionhandlerplugin/src/musicplayeractionhandler.cpp	Thu Jan 07 12:45:53 2010 +0200
+++ b/musichomescreen/musicplayeractionhandlerplugin/src/musicplayeractionhandler.cpp	Mon Jan 18 20:18:06 2010 +0200
@@ -27,6 +27,7 @@
 #include <mpxmusicplayerviewplugin.hrh> // KMPXPluginTypePlaybackUid
 #include <AknTaskList.h>                // CAknTaskList
 
+#include <mpxcommandgeneraldefs.h>
 #include <mpxcommonuihelper.h>
 #include <mpxcollectionhelperfactory.h>
 #include "musicplayeractionhandler.h"
@@ -36,6 +37,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 );
@@ -121,7 +124,7 @@
         {
         TMPXPlaybackCommand Command;
         Command = static_cast<TMPXPlaybackCommand>( variant.AsTInt32() );
-        iPlaybackUtility->CommandL( Command );
+        SetPlaybackCommandL( Command );
         }
     CleanupStack::PopAndDestroy( &variant);
     MPX_DEBUG1("<--CMusicPlayerActionHandler::ExecutePlaybackCommandL()");
@@ -429,5 +432,45 @@
     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<TInt>( KMPXCommandGeneralId, KMPXCommandIdPlaybackGeneral );
+    cmd->SetTObjectValueL<TBool>( KMPXCommandGeneralDoSync, ETrue );
+    cmd->SetTObjectValueL<TInt>( KMPXCommandPlaybackGeneralType, aCommand );
+    cmd->SetTObjectValueL<TInt>( KMPXCommandPlaybackGeneralData, 0 );
+    if ( mpProcId )
+        {
+        //This attribute will be used by playbckEngine->iLastActiveProcess 
+        cmd->SetTObjectValueL<TProcessId> ( KMPXCommandPlaybackGeneralClientPid, mpProcId );
+        }
+    iPlaybackUtility->CommandL( *cmd );
+    CleanupStack::PopAndDestroy( cmd );
+    MPX_DEBUG1("<--CMusicPlayerActionHandler::SetPlaybackCommandL()");
+    }
 //  End of File
 
--- a/musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/hsps/00/manifest.dat	Thu Jan 07 12:45:53 2010 +0200
+++ b/musichomescreen_multiview/data/themes/default/install/musicwidget_10207c18/hsps/00/manifest.dat	Mon Jan 18 20:18:06 2010 +0200
@@ -21,7 +21,7 @@
 	<version>1.0</version>
 
 	<description>&amp;qtn_musicwidget_configuration_desc;</description>
-	<filelogo>SKIN(270501603 8633): mif(musicwidgeticon.mif 16384 16385)</filelogo>
+	<filelogo>SKIN(270501603 8633):mif(musicwidgeticon.mif 16384 16385)</filelogo>
 	
 
 	<!-- configuration -->
--- a/musichomescreen_multiview/mcpmusicplayer/inc/applicationmonitor.h	Thu Jan 07 12:45:53 2010 +0200
+++ b/musichomescreen_multiview/mcpmusicplayer/inc/applicationmonitor.h	Mon Jan 18 20:18:06 2010 +0200
@@ -83,6 +83,7 @@
 private: // data
     MApplicationMonitorObserver&  iObserver;
     RThread iThread; 
+    TUid iAppUid;
     };
 
 #endif // C_APPLICATIONMONITOR_H
--- a/musichomescreen_multiview/mcpmusicplayer/src/applicationmonitor.cpp	Thu Jan 07 12:45:53 2010 +0200
+++ b/musichomescreen_multiview/mcpmusicplayer/src/applicationmonitor.cpp	Mon Jan 18 20:18:06 2010 +0200
@@ -87,6 +87,7 @@
     TUint64 threadId(0);
     TBool taskExists(EFalse);
     TInt status = KErrNone;
+    iAppUid = aAppUid;
     if(aRootAppIndication)
         {
         CAknTaskList* taskList = CAknTaskList::NewL( wsSession );
@@ -131,22 +132,22 @@
     MPX_DEBUG1("CApplicationMonitor::RunL <---");
     switch (iStatus.Int())
         {
-        case EExitKill: 
-        case EExitTerminate:
-        case EExitPanic:
-            MPX_DEBUG1("CApplicationMonitor::RunL kill\terminate\panic");
-            iObserver.HandleApplicationClosedL((TExitType) iStatus.Int());
+        case EExitPending: 
+            MPX_DEBUG1("CApplicationMonitor::RunL reason = EExitPending");
+            iThread.Close();
+            TRAPD(err, StartL( iAppUid ) );
+            if (KErrNone != err)
+                {
+                MPX_DEBUG1("CApplicationMonitor::RunL reason = EExitPending but thread is really gone");
+                iObserver.HandleApplicationClosedL((TExitType) iStatus.Int());
+                }
             break;
         case KErrCancel:
-        case KErrNoMemory:
-            MPX_DEBUG1("CApplicationMonitor::RunL cancel\memory");
+            MPX_DEBUG1("CApplicationMonitor::RunL cancel");
             break;
-        case EExitPending: 
         default:
-            MPX_DEBUG1("CApplicationMonitor::RunL exitpendin\default");
-            // Listen again
-            iThread.Logon(iStatus);
-            SetActive();
+        	  MPX_DEBUG2("CApplicationMonitor::RunL reason = %d", iStatus.Int());
+        	  iObserver.HandleApplicationClosedL((TExitType) iStatus.Int());
             break;
         }
     MPX_DEBUG1("CApplicationMonitor::RunL --->");
@@ -171,9 +172,6 @@
 TInt CApplicationMonitor::RunError(TInt /*aError*/)
     {
     MPX_DEBUG1("CApplicationMonitor::RunError <---");
-    // Listen again
-    iThread.Logon(iStatus);
-    SetActive();
     MPX_DEBUG1("CApplicationMonitor::RunError --->");
     return KErrNone;
     }
--- a/musichomescreen_multiview/mcpmusicplayer/src/mcpmusicplayer.cpp	Thu Jan 07 12:45:53 2010 +0200
+++ b/musichomescreen_multiview/mcpmusicplayer/src/mcpmusicplayer.cpp	Mon Jan 18 20:18:06 2010 +0200
@@ -656,7 +656,7 @@
         MPX_DEBUG1("CMCPMusicPlayer::ActivateL we are active now");
         
         iMHObserver->PublishTextL( this, EMusicWidgetDefaultText, KEmpty );
-        InstallGoToAlbumL(EMusicWidgetTrigger1);
+        InstallGoToNowPlayingL(EMusicWidgetTrigger1);
         InstallGoToLastPlayedL(EMusicMenuMusicInfoTrigger, EFalse);
         iMHObserver->PublishTextL(this, EMusicMenuMusicInfoLine1, 
                  KNowPlaying);
--- a/musichomescreen_multiview/musiccontentpublisher/inc/musiccontentpublisher.h	Thu Jan 07 12:45:53 2010 +0200
+++ b/musichomescreen_multiview/musiccontentpublisher/inc/musiccontentpublisher.h	Mon Jan 18 20:18:06 2010 +0200
@@ -403,7 +403,8 @@
     HBufC* iGoToMusicBuffer;
 
     CMCPHarvesterPublisherObserver* iHPObserver;
-    TBool iIsPublisherActive;
+    TBool iWidgetForeground;
+    TBool iWidgetActivated;
 
     HBufC* iInstanceId;
    
--- a/musichomescreen_multiview/musiccontentpublisher/src/musiccontentpublisher.cpp	Thu Jan 07 12:45:53 2010 +0200
+++ b/musichomescreen_multiview/musiccontentpublisher/src/musiccontentpublisher.cpp	Mon Jan 18 20:18:06 2010 +0200
@@ -78,12 +78,9 @@
 // Constructor
 // ---------------------------------------------------------------------------
 //
-CMusicContentPublisher::CMusicContentPublisher( MLiwInterface* aCPSInterface )
+CMusicContentPublisher::CMusicContentPublisher( MLiwInterface* aCPSInterface ):
+        iCPSInterface (aCPSInterface)
     {
-    iCPSInterface = aCPSInterface;
-    iActivePlugin=NULL;
-    iIsPublisherActive = EFalse;
-
     }
 
 // ---------------------------------------------------------------------------
@@ -307,14 +304,14 @@
         TPtrC8 dataKey ( reinterpret_cast<const TUint8*>(
                 tmpdstitemp->dataKey ) );
         TPtrC content ( reinterpret_cast<const TUint16*>(
-                    tmpdstitemp->content) );
+                tmpdstitemp->content) );
 
         aType.Set(type);
         aDataKey.Set(dataKey);
 
         if ( !content.Compare( KWildCard ) )
             {
-            aContent.Set( iInstanceId->Des() );
+            aContent.Set(iInstanceId ? iInstanceId->Des(): KNullDesC() );
             }
         else
             {
@@ -680,7 +677,7 @@
             }
         else
             {
-            if ( iIsPublisherActive )
+            if ( iWidgetForeground )
                 {
                 iCPSInterface->ExecuteCmdL( KAdd , *inParam, *outParam );
                 }
@@ -780,7 +777,7 @@
             }
         else
             {
-            if ( iIsPublisherActive )
+            if ( iWidgetForeground )
                 {
                 iCPSInterface->ExecuteCmdL( KAdd , *inParam, *outParam );  	
                 }
@@ -921,7 +918,7 @@
             }
         else
             {
-            if ( iIsPublisherActive )
+            if ( iWidgetForeground )
                 {
                 iCPSInterface->ExecuteCmdL( KAdd , *inParam, *outParam );        	
                 }
@@ -990,7 +987,7 @@
             }
         else
             {
-            if ( iIsPublisherActive )
+            if ( iWidgetForeground )
                 {
             	  iCPSInterface->ExecuteCmdL( KAdd , *inParam, *outParam );
                 }
@@ -1076,17 +1073,18 @@
 void CMusicContentPublisher::HandlePublisherNotificationL( const TDesC& aContentId, const TDesC8& aTrigger )
     {
     MPX_DEBUG1("CMusicContentPublisher::HandlePublisherNotificationL <---");
-    if ( aTrigger == KMyActive )
+    if ( aTrigger == KMyActive && !iWidgetActivated)
         {
+        iWidgetActivated = ETrue;
         MPX_DEBUG1("CMusicContentPublisher::HandlePublisherNotificationL activate");
         if ( !iInstanceId )
             {
             iInstanceId = aContentId.AllocL();
-        	  //Reset The Widget
-        	  MPX_DEBUG1("CMusicContentPublisher::HandlePublisherNotificationL activate --> Reset Widget");
-        	  RDebug::Print(aContentId);
+            //Reset The Widget
+            MPX_DEBUG1("CMusicContentPublisher::HandlePublisherNotificationL activate --> Reset Widget");
+            RDebug::Print(aContentId);
             PublishImageL(NULL,EMusicWidgetImage1,KEmpty);
-        	InstallGoToAlbumL( EMusicWidgetTrigger1 );
+            InstallGoToAlbumL( EMusicWidgetTrigger1 );
             PublishTextL( NULL,EMusicWidgetText1, KEmpty );
             PublishImageL(NULL,EMusicWidgetToolbarB1,KEmpty);
             PublishImageL(NULL,EMusicWidgetToolbarB2,KEmpty);
@@ -1095,7 +1093,7 @@
             InstallEmptyActionL(EMusicWidgetTB2Trigger);
             InstallEmptyActionL(EMusicWidgetTB3Trigger);
             PublishTextL( NULL,EMusicWidgetDefaultText, iGoToMusicBuffer->Des() );
-			InstallGoToAlbumL( EMusicWidgetTrigger2 );
+            InstallGoToAlbumL( EMusicWidgetTrigger2 );
             }
         else
             {
@@ -1104,8 +1102,9 @@
             iInstanceId = aContentId.AllocL();
             }
         }
-    else if ( aTrigger ==  KMyDeActive)
+    else if ( aTrigger ==  KMyDeActive && iWidgetActivated)
         {
+        iWidgetActivated = EFalse;
         MPX_DEBUG1("CMusicContentPublisher::HandlePublisherNotificationL deactivate");
         //Removing al the CPS entrys to prevent flicker of old text and unwanted images (old/expired handles).
         RemoveL( EMusicWidgetImage1 );
@@ -1115,15 +1114,15 @@
         RemoveL( EMusicWidgetToolbarB3 );
         RemoveL( EMusicWidgetDefaultText );
         }
-    else if ( aTrigger ==  KMySuspend)
+    else if ( aTrigger ==  KMySuspend && iWidgetActivated && iWidgetForeground)
         {
         MPX_DEBUG1("CMusicContentPublisher::HandlePublisherNotificationL suspend");
-        iIsPublisherActive = EFalse;
+        iWidgetForeground = EFalse;
         }
-    else if ( aTrigger ==  KMyResume)
+    else if ( aTrigger ==  KMyResume && iWidgetActivated && !iWidgetForeground)
         {
         MPX_DEBUG1("CMusicContentPublisher::HandlePublisherNotificationL resume");
-        iIsPublisherActive = ETrue;
+        iWidgetForeground = ETrue;
         DoPublishL();
         }
     MPX_DEBUG1("CMusicContentPublisher::HandlePublisherNotificationL --->");
--- a/musichomescreen_multiview/musicplayeractionhandlerplugin/src/musicplayeractionhandler.cpp	Thu Jan 07 12:45:53 2010 +0200
+++ b/musichomescreen_multiview/musicplayeractionhandlerplugin/src/musicplayeractionhandler.cpp	Mon Jan 18 20:18:06 2010 +0200
@@ -67,7 +67,7 @@
     MPX_DEBUG1("-->CMusicPlayerActionHandler::ConstructL()");
     
     //iPlaybackUtility = MMPXPlaybackUtility::UtilityL( KPbModeActivePlayer );
-    iPlaybackUtility = MMPXPlaybackUtility::NewL( KMusicPlayerAppUid);
+    //iPlaybackUtility = MMPXPlaybackUtility::NewL( KMusicPlayerAppUid);
 
     MPX_DEBUG1("<--CMusicPlayerActionHandler::ConstructL()");
     }
@@ -122,6 +122,10 @@
     errCode = ExtractVariantL( aMap, variant, KCommand );
     if ( errCode == KErrNone )
         {
+        if ( !iPlaybackUtility ) // Ensure that the utility exists
+            {
+            iPlaybackUtility = MMPXPlaybackUtility::NewL( KMusicPlayerAppUid);
+            }	
         TMPXPlaybackCommand Command;
         Command = static_cast<TMPXPlaybackCommand>( variant.AsTInt32() );
         iPlaybackUtility->CommandL( Command );
--- a/musicplayer_plat/mpx_music_shop_ui_api/inc/MMusicShopBrViewCallback.h	Thu Jan 07 12:45:53 2010 +0200
+++ b/musicplayer_plat/mpx_music_shop_ui_api/inc/MMusicShopBrViewCallback.h	Mon Jan 18 20:18:06 2010 +0200
@@ -33,13 +33,7 @@
 */
 class MMusicShopBrViewCallback
     {
-    public:
-        enum TMusDownloadControlCommandId
-            {
-            EPauseDownload = 0x01, // pause
-            EResumeDownload, // resume
-            ECancelDownload // cancel
-            };
+
         /**
         * Activate the MusicShop application view based on view id
         *
@@ -50,13 +44,6 @@
         */
         virtual void ActivateMusicShopViewL (TUid aViewId) = 0;
 
-        /**
-        * Handle pause/resume/cancel download related commands from Music Player playback view.
-        *
-        * @since S60 3.2.3
-        * @param aControlDownloadCommandId pause/resume/cancel download command id.
-        */
-        virtual void HandleDownloadCommandL ( TMusDownloadControlCommandId aControlDownloadCommandId ) = 0;
     };
 
 #endif //M_MUSICSHOP_BR_VIEW_CALLBACK_H
--- a/musicplayer_plat/mpx_music_shop_ui_api/inc/MusicShopExternalInterface.h	Thu Jan 07 12:45:53 2010 +0200
+++ b/musicplayer_plat/mpx_music_shop_ui_api/inc/MusicShopExternalInterface.h	Mon Jan 18 20:18:06 2010 +0200
@@ -36,7 +36,14 @@
     {
     public: // member variable
         TBuf<KMaxUrlLength> iUrl;
+#if 1 // __ALR_MUSICSHOP_SUPPORT
+        TUint iConnectionMode;
+        TUint iConnection;
+        TUint iConfirmCellUsage;
+        TUint iConfirmRoaming;                        
+#else
         TUint iDefaultAccessPoint;
+#endif // __ALR_MUSICSHOP_SUPPORT
         TInt  iRskId;
     };
 
--- a/musicplayer_plat/mpx_music_store_api/inc/MusicStoreUidConstants.h	Thu Jan 07 12:45:53 2010 +0200
+++ b/musicplayer_plat/mpx_music_store_api/inc/MusicStoreUidConstants.h	Mon Jan 18 20:18:06 2010 +0200
@@ -22,8 +22,8 @@
 #define MUSICSTOREAPPUIDCONST_H
 
 // Music Shop Wrapper (or Music Store)
-// use by Music Player for the "Find in Music Shop"
-const TUid KUidMusicStore = { 0x10207BF5 }; // UID used in MusicStoreApp.cpp
+// use by Music Player for the "Find in Music Shop" 
+const TUid KUidMusicStore = { 0x101FFB51 }; // UID used in MusicStoreApp.cpp
 
 
 #endif // MUSICSTOREAPPUIDCONST_H
--- a/musicplayer_plat/mpx_music_store_api/inc/mpxfindinmusicshop.inl	Thu Jan 07 12:45:53 2010 +0200
+++ b/musicplayer_plat/mpx_music_store_api/inc/mpxfindinmusicshop.inl	Mon Jan 18 20:18:06 2010 +0200
@@ -48,20 +48,23 @@
     CMPXFindInMShop* imp = NULL;
     RImplInfoPtrArray plugins;
     REComSession::ListImplementationsL( KSchemeHandlerDefinitionUid, plugins );
-    TInt err = KErrNotFound;
+    
+    TInt latestVersion(KErrNotFound);
+    TInt current_version(0);
+    // Find largest version number from the plugins
     for( TInt i=0; i<plugins.Count(); ++i )
         {
         CImplementationInformation* info = plugins[i];
-        if( info->RomBased() )
+        current_version = info->Version();
+        if ( current_version > latestVersion )
             {
-            err = KErrNone;
-            TUid uid = info->ImplementationUid();    
+            latestVersion = current_version;
+            TUid uid = info->ImplementationUid();
             imp = reinterpret_cast<CMPXFindInMShop*>
-                ( REComSession::CreateImplementationL( uid, _FOFF( CMPXFindInMShop, iDtorKey ) ) );
-            break;
+                ( REComSession::CreateImplementationL( uid, _FOFF( CMPXFindInMShop, iDtorKey ) ) );        
             }
         }
-    User::LeaveIfError( err );
+
     plugins.ResetAndDestroy();
     plugins.Close();
     return imp;
--- a/musicplayer_plat/mpx_music_wap_adapter_cenrep_api/inc/MusicWapCenRepKeys.h	Thu Jan 07 12:45:53 2010 +0200
+++ b/musicplayer_plat/mpx_music_wap_adapter_cenrep_api/inc/MusicWapCenRepKeys.h	Mon Jan 18 20:18:06 2010 +0200
@@ -21,7 +21,7 @@
 #define MUSICWAPADAPTERCRKEYS_H
 
 // CenRep UID for Music Store
-const TUid KCRUidMusicShopSettings = {0x10207BF5};
+const TUid KCRUidMusicShopSettings = {0x101FFB51};
 
 const TUint32 KMusicShopToProxy            = 0x00000001;
 const TUint32 KMusicShopBookmarkName       = 0x00000002;
@@ -30,17 +30,48 @@
 const TUint32 KMusicShopAuthName           = 0x00000005;
 const TUint32 KMusicShopAuthSecret         = 0x00000006;
 const TUint32 KMusicShopSearchURI          = 0x00000007;
+#if 0 // NO __ALR_MUSICSHOP_SUPPORT
 const TUint32 KMusicShopIAP                = 0x00000008;
+#endif // NO __ALR_MUSICSHOP_SUPPORT
 const TUint32 KMusicShopFeatureFlagSupport = 0x00000009;
 const TUint32 KMusicShopAppWrapperSupport  = 0x0000000A;
+#if 0 // NO __ALR_MUSICSHOP_SUPPORT
 const TUint32 KMusicShopAlwaysAsk          = 0x0000000B;
+#endif // NO __ALR_MUSICSHOP_SUPPORT
 const TUint32 KMusicShopHideSetting        = 0x0000000C;
 const TUint32 KMusicShopVersion            = 0x0000000D;
+#if 1 // __ALR_MUSICSHOP_SUPPORT
+const TUint32 KMusicShopConnectionMode     = 0x0000000E;
+const TUint32 KMusicShopConnectionId       = 0x0000000F;
+const TUint32 KMusicShopConfirmCellUsage   = 0x00000010;
+const TUint32 KMusicShopConfirmRoaming     = 0x00000011;
+#endif // __ALR_MUSICSHOP_SUPPORT
+// Feature flag for Nokia Music Services
+const TUint32 KMusicServiceFeatureFlagSupport = 0x00000012;
+// Feature flag for Nokia Music Services (3-item toolbar)
+const TUint32 KMusicShopHomeLink		   = 0x000000013;
+const TUint32 KMusicShopAccountLink		   = 0x000000014;
+// Feature flag for OTA Streaming and download with WLAN AP only
+const TUint32 KMusicShopOtaWlanOnly        = 0x000000015;
+//
+// Bit definitions for KMusicShopFeatureFlagSupport
+//
+const TUint32 KSupportRTSP                    = 0x00000001;
+const TUint32 KSupportWLan                    = 0x00000002;
+const TUint32 KSupportMusicShopWrapper        = 0x00000004;
+const TUint32 KSupportMusicShopSettings       = 0x00000008;
+const TUint32 KSupportMusicShopDownloadUi     = 0x00000010;
 
-#define KSupportRTSP 0x00000001;
-#define KSupportWLan 0x00000002;
-#define KSupportMusicShopWrapper 0x00000004;
-#define KSupportMusicShopSettings 0x00000008;
+//
+// Bit definitions for KMusicServiceFeatureFlagSupport
+// This is the capability of Music Store client on device.
+// Must agree with Music Servie on the scheme when adding new
+// feature on device.
+//
+const TUint32 KSupportCwnIMEISending          = 0x00000001;
+const TUint32 KSupportHTTPStreaming           = 0x00000002;
+const TUint32 KSupportOmaDownloadDescriptor   = 0x00000004;
+const TUint32 KSupportMusicShopRedirection    = 0x00000008;
 
 #endif      // MUSICWAPADAPTERCRKEYS_H