201029
authorhgs
Fri, 23 Jul 2010 17:31:12 -0500
changeset 45 612c4815aebe
parent 43 0f32e550d9d8
child 47 4cc1412daed0
201029
app/inc/mpglobalpopuphandler.h
app/src/mpglobalpopuphandler.cpp
app/src/mpmainwindow.cpp
app/src/mpmtpinfolink.cpp
mpdata/mpdata.pro
mpdata/src/mpcollectionalbumartmanager.cpp
mpdata/src/mpcollectiontbonelistdatamodel.cpp
mpdata/src/mpplaybackdata.cpp
mpdata/src/mpsongdata_p.cpp
mpdata/tsrc/tsrc.pro
mpdata/tsrc/unittest_mpsongdata/sis.bat
mpdata/tsrc/unittest_mpsongdata/src/unittest_mpsongdata.cpp
mpengine/inc/mpmpxplaybackframeworkwrapper.h
mpengine/inc/mpmpxplaybackframeworkwrapper_p.h
mpengine/src/mpengine.cpp
mpengine/src/mpmpxcollectionframeworkwrapper_p.cpp
mpengine/src/mpmpxplaybackframeworkwrapper.cpp
mpengine/src/mpmpxplaybackframeworkwrapper_p.cpp
mpengine/tsrc/tsrc.pro
mpengine/tsrc/unittest_mpmpxplaybackframeworkwrapper/inc/unittest_mpmpxplaybackframeworkwrapper.h
mpengine/tsrc/unittest_mpmpxplaybackframeworkwrapper/src/unittest_mpmpxplaybackframeworkwrapper.cpp
mpengine/tsrc/unittest_mpmpxplaybackframeworkwrapper/stub/src/mpplaybackdata.cpp
mpengine/tsrc/unittest_mpmpxplaybackframeworkwrapper/stub/src/mpxplaybackutility.cpp
mpengine/tsrc/unittest_mpmpxplaybackframeworkwrapper/unittest_mpmpxplaybackframeworkwrapper.pro
mpserviceplugins/audioeffects/group/mpxaudioeffectengine.mmp
mpserviceplugins/localaudio/group/mpxlocalaudioplayback.mmp
mpserviceplugins/m3uplaylistplugin/group/mpxm3uplaylistparsers.mmp
mpserviceplugins/m3uplaylistplugin/group/mpxm3uplaylistplugin.mmp
mpserviceplugins/mpxinmemoryplugin/group/mpxinmemoryplugin.mmp
mpserviceplugins/mpxinmemoryplugin/src/mpxinmemoryplugin.cpp
mpserviceplugins/mpxsqlitedbcommon/group/mpxsqlitedbcommon.mmp
mpserviceplugins/mpxsqlitedbcommon/src/mpxdbcommonutil.cpp
mpserviceplugins/mpxsqlitedbcommon/src/mpxdbmanager.cpp
mpserviceplugins/mpxsqlitedbhgplugin/group/mpxsqlitedbhgplugin.mmp
mpserviceplugins/mpxsqlitedbhgplugin/src/mpxdbhandler.cpp
mpserviceplugins/mpxsqlitedbhgplugin/src/mpxdbplugin.cpp
mpserviceplugins/mpxsqlitepodcastdbplugin/group/mpxsqlitepodcastdbplugin.mmp
mpserviceplugins/mpxsqlitepodcastdbplugin/src/mpxpodcastdbplugin.cpp
mpviewplugins/mpcollectionviewplugin/mpcollectionviewplugin.pro
mpviewplugins/mpdetailsviewplugin/resources/mpdetailsview.docml
mpviewplugins/mpdetailsviewplugin/src/mpdetailssharedialog.cpp
mpviewplugins/mpdetailsviewplugin/src/mpdetailsview.cpp
mpviewplugins/mpdetailsviewplugin/src/mpquerymanager.cpp
mpviewplugins/mpdetailsviewplugin/tsrc/UT_ALL_mpdetailsviewplugin.pkg
mpviewplugins/mpdetailsviewplugin/tsrc/UT_ALL_mpdetailsviewplugin.pro
mpviewplugins/mpdetailsviewplugin/tsrc/UT_ALL_mpdetailsviewplugin.sisx
mpviewplugins/mpdetailsviewplugin/tsrc/tsrc.pro
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailssharedialog/stub/src/hbmessagebox.cpp
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailssharedialog/stub/src/mpsongdata.cpp
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/src/unittest_mpdetailsview.cpp
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/stub/inc/mpquerymanager.h
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/stub/src/mpdetailssharedialog.cpp
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/stub/src/mpengine.cpp
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/stub/src/mpenginefactory.cpp
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/stub/src/mpsongdata.cpp
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/unittest_mpdetailsview.pro
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpquerymanager/inc/unittest_mpquerymanager.h
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpquerymanager/src/unittest_mpquerymanager.cpp
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpsharedata/src/unittest_mpsharedata.cpp
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpsharedata/stub/src/mpsongdata.cpp
mpviewplugins/mpmediawallviewplugin/mpmediawallviewplugin.pro
mpviewplugins/mpplaybackviewplugin/mpplaybackviewplugin.pro
mpviewplugins/mpplaybackviewplugin/src/mpplaybackview.cpp
mpviewplugins/mpplaybackviewplugin/src/mpplaybackwidget.cpp
mpviewplugins/mpsettingsviewplugin/mpsettingsviewplugin.pro
mpviewplugins/mpsettingsviewplugin/tsrc/tsrc.pro
mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsaudioeffectswidget/inc/unittest_mpsettingsaudioeffectswidget.h
mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsaudioeffectswidget/src/unittest_mpsettingsaudioeffectswidget.cpp
mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsaudioeffectswidget/stub/inc/mpengine.h
mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsaudioeffectswidget/stub/inc/mpenginefactory.h
mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsaudioeffectswidget/stub/src/mpengine.cpp
mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsaudioeffectswidget/stub/src/mpenginefactory.cpp
mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsaudioeffectswidget/unittest_mpsettingsaudioeffectswidget.pro
musicservices/musicservices.pro
musicwidgetplugin/src/musicwidget.cpp
utilities/mpalbumcoverwidget/mpalbumcoverwidget.pro
utilities/mpnowplayingbanner/mpnowplayingbanner.pro
utilities/mpnowplayingbanner/resources/banner_color.css
utilities/mpsettingsmanager/mpsettingsmanager.pro
--- a/app/inc/mpglobalpopuphandler.h	Fri Jul 09 16:27:03 2010 -0500
+++ b/app/inc/mpglobalpopuphandler.h	Fri Jul 23 17:31:12 2010 -0500
@@ -53,7 +53,7 @@
     void outstandingPopupClosing();
 
 private:
-    void launchScanFinishedDialog( bool ok );
+    void launchScanFinishedDialog( bool ok, int itemsAdded );
     void launchDiskFullDialog();
     void setOutstandingPopup( HbPopup *popup );
 
--- a/app/src/mpglobalpopuphandler.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/app/src/mpglobalpopuphandler.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -152,7 +152,7 @@
 void MpGlobalPopupHandler::handleScanFinished( int error, int itemsAdded )
 {
     TX_ENTRY_ARGS("error: " << error << " Items added: " << itemsAdded )
-    Q_UNUSED( itemsAdded );
+
     if ( mOutstandingPopup && ( mOutstandingPopup->objectName() == KScanProgressDialog ) ) {
         HbProgressDialog *dialog = qobject_cast<HbProgressDialog *>( mOutstandingPopup );
         disconnect( dialog, SIGNAL( aboutToClose() ), this, SLOT( outstandingPopupClosing() ) );
@@ -162,10 +162,10 @@
 
     switch( error ) {
         case MpSongScanner::ScanErrorNone :
-            launchScanFinishedDialog( true );
+            launchScanFinishedDialog( true , itemsAdded );
             break;
         case MpSongScanner::ScanGeneralError :
-            launchScanFinishedDialog( false );
+            launchScanFinishedDialog( false, itemsAdded );
             break;
         case MpSongScanner::ScanErrorDiskFull :
             launchDiskFullDialog();
@@ -280,7 +280,7 @@
  \internal
  Launches Scan Finished Notification.
  */
-void MpGlobalPopupHandler::launchScanFinishedDialog( bool ok )
+void MpGlobalPopupHandler::launchScanFinishedDialog( bool ok , int itemsAdded )
 {
     HbNotificationDialog *finishedDialog = new HbNotificationDialog();
     finishedDialog->setModal(true);
@@ -290,10 +290,15 @@
     // in order to get finishDialog cleared before MtpInfoDialog is launched.
     setOutstandingPopup( finishedDialog );
 
+    // Educating user (of MTP information) dialog is displayed
+    // only when the following conditions are met:
+    // 1. A "manual" refresh operation completes successfully
+    // 2. Refresh operation finds at least one new item
+
     if( ok ) {
         finishedDialog->setIcon( HbIcon( QString("qtg_large_ok") ) );
         finishedDialog->setTitle( hbTrId( "txt_mus_dpophead_refresh_complete" ) );
-        if ( MpSettingsManager::showMtpInfo() && !mMpSongScanner->isAutomaticScan() ) {
+        if ( MpSettingsManager::showMtpInfo() && !mMpSongScanner->isAutomaticScan() && itemsAdded ) {
             connect( finishedDialog, SIGNAL( aboutToClose() ), this, SLOT( launchMTPInfoDialog() ) );
         }
     }
--- a/app/src/mpmainwindow.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/app/src/mpmainwindow.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -322,11 +322,13 @@
 {
     TX_ENTRY
 
-    // If library changed while playing back, always return to AllSongs collection view.
-    if ( mPlaybackViewPlugin &&
-         mCurrentViewPlugin == mPlaybackViewPlugin &&
-         mCollectionViewPlugin ) {
-
+    // Data might have changed, so other views than Collection or MediaWall are not valid any more.
+    if ( mCurrentViewPlugin == mMediaWallViewPlugin ) {
+        if ( mVerticalViewType != CollectionView ) {
+            mVerticalViewType = CollectionView;
+        }
+    }
+    else if ( mCollectionViewPlugin && mCurrentViewPlugin != mCollectionViewPlugin ) {
         activateView( CollectionView );
         MpViewBase* collectionView = reinterpret_cast<MpViewBase*>(mCollectionViewPlugin->getView());
         collectionView->setDefaultView();
@@ -523,6 +525,7 @@
     TX_ENTRY
     QVariantHash activityData = data.toHash();
     QByteArray serializedRestorePath = activityData.value( "restorePath" ).toByteArray();
+    connect( MpEngineFactory::sharedEngine(), SIGNAL( restorePathFailed() ), this, SLOT( handleRestorePathFailed() ) );
     MpEngineFactory::sharedEngine()->loadActivityData( serializedRestorePath );
     TX_EXIT
 }
--- a/app/src/mpmtpinfolink.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/app/src/mpmtpinfolink.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -88,7 +88,7 @@
 {
     TX_ENTRY
     QString url = MpSettingsManager::instance()->mtpInfoUrl();
-    QString text = HbParameterLengthLimiter( hbTrId("txt_mus_info_please_note_that_using_media_transfer") ).arg( url );
+    QString text = HbParameterLengthLimiter( hbTrId("txt_mus_info_note_that_using_nokia_ovi_suite_mode") ).arg( url );
     QString htmlLink = "<a href=\"" + url + "\">" + url + "</a>" ;
     text.replace( url, htmlLink );
     text = "<p>" + text + "</p>" ;
--- a/mpdata/mpdata.pro	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpdata/mpdata.pro	Fri Jul 23 17:31:12 2010 -0500
@@ -19,7 +19,7 @@
 TARGET = mpdata
 symbian: { 
     TARGET.UID3 = 0x10207C95
-    MMP_RULES += "DEFFILE mpdata.def"
+    MMP_RULES += "DEFFILE mpdata.def" SMPSAFE
     defFilePath = .
     TARGET.CAPABILITY = CAP_GENERAL_DLL
     TARGET.EPOCALLOWDLLDATA = 1
--- a/mpdata/src/mpcollectionalbumartmanager.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpdata/src/mpcollectionalbumartmanager.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -61,7 +61,7 @@
       mCollectionData( data ),
       mThumbnailManager( 0 ),
       mCachingInProgress( false ),
-      mDefaultIcon( "qtg_large_music_album" ),
+      mDefaultIcon( "qtg_large_album_art" ),
       mPendingRequest( false ),
       mDefaultArtEnabled( true )
 {
--- a/mpdata/src/mpcollectiontbonelistdatamodel.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpdata/src/mpcollectiontbonelistdatamodel.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -173,24 +173,26 @@
 void MpCollectionTBoneListDataModel::updateSong()
 {
     TX_ENTRY
-    int newSongId = mPlaybackData->id();
-    
-    if ( mCurrentSongId && newSongId != mCurrentSongId) {
-        //Attempt to remove old song icon.
-        QModelIndex oldSongIndex;
-        oldSongIndex = index( mCollectionData->albumSongIndex( mCurrentSongId ) );
-        if ( oldSongIndex.isValid() ) {
-            emit dataChanged( oldSongIndex, oldSongIndex );
-        }       
+    if( mPlaybackActive ) {
+        int newSongId = mPlaybackData->id();
+
+        if ( mCurrentSongId && newSongId != mCurrentSongId) {
+            //Attempt to remove old song icon.
+            QModelIndex oldSongIndex;
+            oldSongIndex = index( mCollectionData->albumSongIndex( mCurrentSongId ) );
+            if ( oldSongIndex.isValid() ) {
+               emit dataChanged( oldSongIndex, oldSongIndex );
+            } 
+        }
+
+        //Attempt to update current song data and state.
+        QModelIndex songIndex;
+        songIndex = index( mCollectionData->albumSongIndex( newSongId ) );
+        if ( songIndex.isValid() ) {
+            emit dataChanged( songIndex, songIndex );
+        }
+        mCurrentSongId = newSongId;
     }
-
-    //Attempt to update current song data and state.
-    QModelIndex songIndex;
-    songIndex = index( mCollectionData->albumSongIndex( newSongId ) );
-    if ( songIndex.isValid() ) {
-        emit dataChanged( songIndex, songIndex );
-    }
-    mCurrentSongId = newSongId;
     TX_EXIT
 }
 
--- a/mpdata/src/mpplaybackdata.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpdata/src/mpplaybackdata.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -81,7 +81,7 @@
       mPosition(0),
       mAlbumId(0),
       mId(0),
-      mAlbumArt( "qtg_large_music_album" ),
+      mAlbumArt( "qtg_large_album_art" ),
       mPlaybackState( NotPlaying ),
       mRealAudio( false )
 {
--- a/mpdata/src/mpsongdata_p.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpdata/src/mpsongdata_p.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -62,7 +62,7 @@
       mAlbumArt()
 {
     TX_ENTRY
-    mDefaultAlbumArt = new HbIcon( "qtg_large_music_album" );
+    mDefaultAlbumArt = new HbIcon( "qtg_large_album_art" );
     TX_EXIT
 }
 
@@ -143,7 +143,79 @@
 QString MpSongDataPrivate::genre() const
 {
     TX_LOG
-    return mGenre;
+	QString localizedString(mGenre);
+
+	if ( mGenre == "Acoustic" ) {
+		localizedString = hbTrId( "txt_mus_dblist_genre_val_acoustic" );
+	}
+    else if ( mGenre == "Alternative" ) {
+		localizedString = hbTrId( "txt_mus_dblist_genre_val_alternative" );
+    }
+    else if ( mGenre == "Blues" ) {
+        localizedString = hbTrId( "txt_mus_dblist_genre_val_blues" );
+    }
+    else if ( mGenre == "Classical" ) {
+		localizedString = hbTrId( "txt_mus_dblist_genre_val_classical" );
+    }
+    else if ( mGenre == "Country" ) {
+		localizedString = hbTrId( "txt_mus_dblist_genre_val_country" );
+    }
+    else if ( mGenre == "Dance" ) {
+    	localizedString = hbTrId( "txt_mus_dblist_genre_val_dance" );
+    }
+    else if ( mGenre == "Easy Listening" ) {
+		localizedString = hbTrId( "txt_mus_dblist_genre_val_easy_listening" );
+    }
+    else if ( mGenre == "Electronic" ) {
+        localizedString = hbTrId( "txt_mus_dblist_genre_val_electronic" );
+    }
+    else if ( mGenre == "Folk" ) {
+        localizedString = hbTrId( "txt_mus_dblist_genre_val_folk" );
+    }
+	else if ( mGenre == "Hip-Hop" ) {
+        localizedString = hbTrId( "txt_mus_dblist_genre_val_hiphop" );
+    }
+    else if ( mGenre == "Jazz" ) {
+        localizedString = hbTrId( "txt_mus_dblist_genre_val_jazz" );
+    }
+    else if ( mGenre == "Latin" ) {
+        localizedString = hbTrId( "txt_mus_dblist_genre_val_latin" );
+    }
+    else if ( mGenre == "Metal" ) {
+        localizedString = hbTrId( "txt_mus_dblist_genre_val_metal" );
+    }
+    else if ( mGenre == "New Age" ) {
+        localizedString = hbTrId( "txt_mus_dblist_genre_val_new_age" );
+    }
+    else if ( mGenre == "Other" ) {
+        localizedString = hbTrId( "txt_mus_dblist_genre_val_other" );
+    }
+    else if ( mGenre == "Pop" ) {
+        localizedString = hbTrId( "txt_mus_dblist_genre_val_pop" );
+    }
+    else if ( mGenre == "R&B" ) {
+        localizedString = hbTrId( "txt_mus_dblist_genre_val_rb" );
+    }
+    else if ( mGenre == "Rap" ) {
+        localizedString = hbTrId( "txt_mus_dblist_genre_val_rap" );
+    }
+    else if ( mGenre == "Reggae" ) {
+        localizedString = hbTrId( "txt_mus_dblist_genre_val_reggae" );
+    }
+    else if ( mGenre == "Rock" ) {
+        localizedString = hbTrId( "txt_mus_dblist_genre_val_rock" );
+    }
+    else if ( mGenre == "Soundtrack" ) {
+        localizedString = hbTrId( "txt_mus_dblist_genre_val_soundtrack" );
+    }
+    else if ( mGenre == "Spoken" ) {
+        localizedString = hbTrId( "txt_mus_dblist_genre_val_spoken" );
+    }
+    else if ( mGenre == "World" ) {
+        localizedString = hbTrId( "txt_mus_dblist_genre_val_world" );
+    }
+    TX_EXIT_ARGS( "Logical String = " << localizedString );
+    return localizedString;
 }
 
 /*!
@@ -392,7 +464,7 @@
             TX_LOG_ARGS( "Album art is default album art." )
             delete mAlbumArt;
             mAlbumArt = new HbIcon(qicon);
-            mDefaultAlbumArt = new HbIcon( "qtg_large_music_album" );
+            mDefaultAlbumArt = new HbIcon( "qtg_large_album_art" );
         } else {
             TX_LOG_ARGS( "Album art is NOT default album art." )
             delete mAlbumArt;
@@ -887,7 +959,7 @@
     bool change = false;
     if ( QString::number( size ) != mSize ) {
         change = true;
-        mSize = QString::number( size / 1000 );
+        mSize = QString::number( size ); // in bytes
     }
     TX_EXIT
     return change;
--- a/mpdata/tsrc/tsrc.pro	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpdata/tsrc/tsrc.pro	Fri Jul 23 17:31:12 2010 -0500
@@ -16,10 +16,10 @@
 
 TEMPLATE = subdirs
 
-SUBDIRS += # unittest_mpcollectionalbumartmanager \
+#SUBDIRS += unittest_mpcollectionalbumartmanager \
 #           unittest_mpcollectiondatamodel \
 #           unittest_mpcollectiontbonelistdatamodel \
-           unittest_mpmpxcollectiondata \
+SUBDIRS += unittest_mpmpxcollectiondata
 #           unittest_mpplaybackdata \
 #           unittest_mpsongdata
 
--- a/mpdata/tsrc/unittest_mpsongdata/sis.bat	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpdata/tsrc/unittest_mpsongdata/sis.bat	Fri Jul 23 17:31:12 2010 -0500
@@ -16,5 +16,5 @@
 
 del *.sisx
 makesis UT_mpsongdata.pkg
-signsis UT_mpsongdata.sis UT_mpsongdata.sisx RNDCERTS_PATH\Nokia_RnDCert_02.der RNDCERTS_PATH\Nokia_RnDCert_02.key
+signsis UT_mpsongdata.sis UT_mpsongdata.sisx %RNDCERTS_PATH%\Nokia_RnDCert_02.der %RNDCERTS_PATH%\Nokia_RnDCert_02.key
 del     UT_mpsongdata.sis
\ No newline at end of file
--- a/mpdata/tsrc/unittest_mpsongdata/src/unittest_mpsongdata.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpdata/tsrc/unittest_mpsongdata/src/unittest_mpsongdata.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -933,14 +933,14 @@
     mTestPrivate->mSize = QString();
     result = mTestPrivate->setSize( size );
     QCOMPARE( result, true );
-    QCOMPARE( mTest->size(), QString::number( size / 1000 ) );
+    QCOMPARE( mTest->size(), QString::number( size ) );
 
     result = false;
     size = 4300;
     mTestPrivate->mSize = QString( "5" );
     result = mTestPrivate->setSize( size );
     QCOMPARE( result, true );
-    QCOMPARE( mTest->size(), QString::number( size / 1000 ) );
+    QCOMPARE( mTest->size(), QString::number( size ) );
 }
 
 /*!
--- a/mpengine/inc/mpmpxplaybackframeworkwrapper.h	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpengine/inc/mpmpxplaybackframeworkwrapper.h	Fri Jul 23 17:31:12 2010 -0500
@@ -62,7 +62,8 @@
     void setPosition( int position );
     void setShuffle( bool mode );
     void setRepeat( bool mode );
-    
+    void closeCurrentPlayback();
+
 private:
 
     Q_DISABLE_COPY(MpMpxPlaybackFrameworkWrapper)
--- a/mpengine/inc/mpmpxplaybackframeworkwrapper_p.h	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpengine/inc/mpmpxplaybackframeworkwrapper_p.h	Fri Jul 23 17:31:12 2010 -0500
@@ -56,6 +56,7 @@
     void setBalance( int balance );
     void applyAudioEffects();
     void applyEqualizer();
+    void closeCurrentPlayback();
 
     MpPlaybackData *playbackData();
 
@@ -79,6 +80,7 @@
     void ForceStopL();
     void UpdateStateL();
     void DoRetrieveSongDetailsL( bool detailsRequest );
+    void DoCloseCurrentPlaybackL();
 
 private:
 
--- a/mpengine/src/mpengine.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpengine/src/mpengine.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -276,6 +276,8 @@
 
         // Playback Wrapper
         mMpxPlaybackWrapper = new MpMpxPlaybackFrameworkWrapper( mHostUid, mSongData );
+        connect( this, SIGNAL( libraryAboutToUpdate() ),
+                 mMpxPlaybackWrapper, SLOT( closeCurrentPlayback() ) );
 
         // AudioEffects wrapper
         mAudioEffectsWrapper = new MpAudioEffectsFrameworkWrapper();
@@ -309,6 +311,8 @@
 
         // Playback Wrapper
         mMpxPlaybackWrapper = new MpMpxPlaybackFrameworkWrapper( mHostUid, 0 );
+        connect( this, SIGNAL( libraryAboutToUpdate() ),
+                 mMpxPlaybackWrapper, SLOT( closeCurrentPlayback() ) );
     }
     else if ( MediaBrowsing == mode ) {
         // Collection Wrapper
--- a/mpengine/src/mpmpxcollectionframeworkwrapper_p.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpengine/src/mpmpxcollectionframeworkwrapper_p.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -792,8 +792,8 @@
 
     RArray<TMPXAttribute> attrs;
     CleanupClosePushL( attrs );
-    attrs.Append( KMPXMediaGeneralId );
-    attrs.Append( KMPXMediaGeneralTitle );
+    attrs.AppendL( KMPXMediaGeneralId );
+    attrs.AppendL( KMPXMediaGeneralTitle );
 
     CMPXMedia* criteria = CMPXMedia::NewL();
     CleanupStack::PushL( criteria );
@@ -1130,23 +1130,28 @@
     const CMPXMediaArray* mediaArray = container.Value<CMPXMediaArray>( KMPXMediaArrayContents );
     CMPXMedia* album( mediaArray->AtL( index ) );
 
-    // Fetch the songs for the selected album
+	// Obtain the artistId from the container
+    TMPXItemId artistId = container.ValueTObjectL<TMPXItemId>(KMPXMediaGeneralId);
+	
+    // Fetch the songs for the selected album and the artist
+	// Specifying artistId is necessary to search for songs in the artist’s unknown album.
     TMPXItemId albumId = album->ValueTObjectL<TMPXItemId>(KMPXMediaGeneralId);
     CMPXMedia* findCriteria = CMPXMedia::NewL();
     CleanupStack::PushL( findCriteria );
     findCriteria->SetTObjectValueL<TMPXGeneralType>( KMPXMediaGeneralType, EMPXGroup );
     findCriteria->SetTObjectValueL<TMPXGeneralCategory>( KMPXMediaGeneralCategory, EMPXSong );
     findCriteria->SetTObjectValueL<TMPXItemId>( KMPXMediaGeneralId, albumId );
+    findCriteria->SetTObjectValueL<TMPXItemId>( KMPXMediaGeneralContainerId, artistId );
     RArray<TMPXAttribute> attrs;
     CleanupClosePushL( attrs );
-    attrs.Append( TMPXAttribute( KMPXMediaIdGeneral,
+    attrs.AppendL( TMPXAttribute( KMPXMediaIdGeneral,
                                  EMPXMediaGeneralTitle |
 								 EMPXMediaGeneralUri |
                                  EMPXMediaGeneralId |
                                  EMPXMediaGeneralType |
                                  EMPXMediaGeneralCategory |
                                  EMPXMediaGeneralFlags ) );
-    attrs.Append( KMPXMediaMusicAlbumTrack );
+    attrs.AppendL( KMPXMediaMusicAlbumTrack );
 
     iCollectionUtility->Collection().FindAllL( *findCriteria, attrs.Array(), *this );
     CleanupStack::PopAndDestroy( &attrs );
@@ -1335,7 +1340,7 @@
             findCriteria->SetTObjectValueL<TMPXItemId>( KMPXMediaGeneralId, containerId );
             RArray<TMPXAttribute> attrs;
             CleanupClosePushL( attrs );
-            attrs.Append( TMPXAttribute( KMPXMediaIdGeneral,
+            attrs.AppendL( TMPXAttribute( KMPXMediaIdGeneral,
                                          EMPXMediaGeneralTitle |
                                          EMPXMediaGeneralId ) );
             results = iCollectionUtility->Collection().FindAllL( *findCriteria, attrs.Array() );
--- a/mpengine/src/mpmpxplaybackframeworkwrapper.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpengine/src/mpmpxplaybackframeworkwrapper.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -152,6 +152,14 @@
 }
 
 /*!
+ Slot to close current playback.
+ */
+void MpMpxPlaybackFrameworkWrapper::closeCurrentPlayback()
+{
+    d_ptr->closeCurrentPlayback();
+}
+
+/*!
  Change \a balance.
  */
 void MpMpxPlaybackFrameworkWrapper::setBalance( int balance )
--- a/mpengine/src/mpmpxplaybackframeworkwrapper_p.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpengine/src/mpmpxplaybackframeworkwrapper_p.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -280,6 +280,19 @@
 }
 
 /*!
+ \ Closes current playback source.
+ */
+void MpMpxPlaybackFrameworkWrapperPrivate::closeCurrentPlayback()
+{
+    TX_ENTRY
+    TRAPD( err, DoCloseCurrentPlaybackL() );
+    if ( err != KErrNone ) {
+        TX_LOG_ARGS("Error: " << err << "; should never get here.");
+    }
+    TX_EXIT
+}
+
+/*!
  \internal
  */
 MpPlaybackData *MpMpxPlaybackFrameworkWrapperPrivate::playbackData()
@@ -656,3 +669,15 @@
     TX_EXIT
 }
 
+/*!
+ \internal
+ */
+void MpMpxPlaybackFrameworkWrapperPrivate::DoCloseCurrentPlaybackL()
+{
+    TX_ENTRY
+    if( iPlaybackUtility->Source() ) {
+        iPlaybackUtility->CommandL( EPbCmdClose );
+    }
+    TX_EXIT
+}
+
--- a/mpengine/tsrc/tsrc.pro	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpengine/tsrc/tsrc.pro	Fri Jul 23 17:31:12 2010 -0500
@@ -22,7 +22,7 @@
            unittest_mpmpxcollectionframeworkwrapper \
            unittest_mpmpxharvesterframeworkwrapper \
            unittest_mpmpxisolatedcollectionhelper \
-           # unittest_mpmpxplaybackframeworkwrapper \
+           unittest_mpmpxplaybackframeworkwrapper \
            unittest_mpsongscanner
 
 CONFIG += ordered
--- a/mpengine/tsrc/unittest_mpmpxplaybackframeworkwrapper/inc/unittest_mpmpxplaybackframeworkwrapper.h	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpengine/tsrc/unittest_mpmpxplaybackframeworkwrapper/inc/unittest_mpmpxplaybackframeworkwrapper.h	Fri Jul 23 17:31:12 2010 -0500
@@ -70,6 +70,7 @@
     void testStopSeeking();
     void testStartSeekBackward();
     void testHandleSubPlayerNamesL();
+    void testCloseCurrentPlayback();
 
 private:
 
--- a/mpengine/tsrc/unittest_mpmpxplaybackframeworkwrapper/src/unittest_mpmpxplaybackframeworkwrapper.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpengine/tsrc/unittest_mpmpxplaybackframeworkwrapper/src/unittest_mpmpxplaybackframeworkwrapper.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -265,7 +265,7 @@
     testMessage->SetTObjectValueL<TInt>(KMPXMessageGeneralType,0);
     testMessage->SetTObjectValueL<TInt>(KMPXMessageGeneralData,0);
     mTestPrivate->HandlePlaybackMessage(testMessage, KErrNone);
-    QCOMPARE(mTestPrivate->iPlaybackUtility->iAttrs->Count(), 6);
+    QCOMPARE(mTestPrivate->iPlaybackUtility->iAttrs->Count(), 8);
 
     CleanupStack::PopAndDestroy(testMessage);
 }
@@ -368,12 +368,12 @@
 {
     // Internal requests
     mTestPrivate->DoRetrieveSongDetailsL(false);
-    QCOMPARE(mTestPrivate->iPlaybackUtility->iAttrs->Count(), 6);
+    QCOMPARE(mTestPrivate->iPlaybackUtility->iAttrs->Count(), 8);
 
     // Request from Details view
     mTestPrivate->iDetailsRequest = false;
     mTest->retrieveSongDetails();
-    QCOMPARE(mTestPrivate->iPlaybackUtility->iAttrs->Count(), 16);
+    QCOMPARE(mTestPrivate->iPlaybackUtility->iAttrs->Count(), 18);
     QCOMPARE(mTestPrivate->iDetailsRequest, true);
 
     // Request from Details view - no source
@@ -537,6 +537,25 @@
 }
 
 /*!
+ Tests closeCurrentPlayback() / DoCloseCurrentPlaybackL()
+ */
+void TestMpMpxPlaybackFrameworkWrapper::testCloseCurrentPlayback()
+{
+    TMPXPlaybackCommand dummyCmd = EPbCmdPlay;
+    mTestPrivate->iPlaybackUtility->iCmd = dummyCmd;
+
+    //Simulate none file opened.
+    mTestPrivate->iPlaybackUtility->iReturnSource = false;
+    mTest->closeCurrentPlayback();
+    QVERIFY(mTestPrivate->iPlaybackUtility->iCmd != EPbCmdClose);
+
+    //Simulate some file already opened.
+    mTestPrivate->iPlaybackUtility->iReturnSource = true;
+    mTest->closeCurrentPlayback();
+    QVERIFY(mTestPrivate->iPlaybackUtility->iCmd == EPbCmdClose);
+}
+
+/*!
  Used to load test data
  */
 void TestMpMpxPlaybackFrameworkWrapper::loadTestData(TInt aPos)
--- a/mpengine/tsrc/unittest_mpmpxplaybackframeworkwrapper/stub/src/mpplaybackdata.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpengine/tsrc/unittest_mpmpxplaybackframeworkwrapper/stub/src/mpplaybackdata.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -31,8 +31,8 @@
       mTitle(""),
       mAlbum(""),
       mArtist("Unknown"),
+      mPlaybackState(MpPlaybackData::Stopped),
       mMediaReady(EFalse),
-      mPlaybackState(MpPlaybackData::Stopped),
       mRealAudio( false ),
       mAlbumId( 0 ),
       mId( 0 )
--- a/mpengine/tsrc/unittest_mpmpxplaybackframeworkwrapper/stub/src/mpxplaybackutility.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpengine/tsrc/unittest_mpmpxplaybackframeworkwrapper/stub/src/mpxplaybackutility.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -24,13 +24,13 @@
 /*!
  Stub function.
 */
-MMPXPlaybackUtility::MMPXPlaybackUtility():iProperty(EPbPropertyVolume),
+MMPXPlaybackUtility::MMPXPlaybackUtility():iValue(0),
+                                           iComandData(0),
+                                           iProperty(EPbPropertyVolume),
                                            iObs(0),
-                                           iValue(0),
-                                           iComandData(0),
+                                           iCMPXCmd(0),
                                            iState(EPbStateNotInitialised),
                                            iAttrs(0),
-                                           iCMPXCmd(0),
                                            iInitialized(false),
                                            iReturnSource(true)
 {
--- a/mpengine/tsrc/unittest_mpmpxplaybackframeworkwrapper/unittest_mpmpxplaybackframeworkwrapper.pro	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpengine/tsrc/unittest_mpmpxplaybackframeworkwrapper/unittest_mpmpxplaybackframeworkwrapper.pro	Fri Jul 23 17:31:12 2010 -0500
@@ -35,6 +35,7 @@
 
 LIBS += -lestor.dll \
         -lfbscli.dll \
+        -lefsrv.dll \
         -lmpxcommon.dll \
         -lmpxcollectionutility.dll \
         -lxqserviceutil.dll
--- a/mpserviceplugins/audioeffects/group/mpxaudioeffectengine.mmp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpserviceplugins/audioeffects/group/mpxaudioeffectengine.mmp	Fri Jul 23 17:31:12 2010 -0500
@@ -62,4 +62,6 @@
 deffile ../bwinscw/ 
 #endif
 
+SMPSAFE
+
 // End of File
--- a/mpserviceplugins/localaudio/group/mpxlocalaudioplayback.mmp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpserviceplugins/localaudio/group/mpxlocalaudioplayback.mmp	Fri Jul 23 17:31:12 2010 -0500
@@ -64,4 +64,6 @@
 LIBRARY         mpxcommon.lib
 LIBRARY         mpxaudioeffectengine.lib
 
+SMPSAFE
+
 // End of File
--- a/mpserviceplugins/m3uplaylistplugin/group/mpxm3uplaylistparsers.mmp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpserviceplugins/m3uplaylistplugin/group/mpxm3uplaylistparsers.mmp	Fri Jul 23 17:31:12 2010 -0500
@@ -47,4 +47,6 @@
 LIBRARY         PlatformEnv.lib
 #endif //RD_MULTIPLE_DRIVE
 
+SMPSAFE
+
 // End of File
--- a/mpserviceplugins/m3uplaylistplugin/group/mpxm3uplaylistplugin.mmp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpserviceplugins/m3uplaylistplugin/group/mpxm3uplaylistplugin.mmp	Fri Jul 23 17:31:12 2010 -0500
@@ -48,4 +48,6 @@
 LIBRARY         mpxcommon.lib
 LIBRARY         mpxm3uplaylistparsers.lib
 
+SMPSAFE
+
 // End of File
--- a/mpserviceplugins/mpxinmemoryplugin/group/mpxinmemoryplugin.mmp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpserviceplugins/mpxinmemoryplugin/group/mpxinmemoryplugin.mmp	Fri Jul 23 17:31:12 2010 -0500
@@ -54,4 +54,6 @@
 LIBRARY         mpxcommon.lib
 LIBRARY         mpxmetadataextractor.lib
 
+SMPSAFE
+
 // End of File
--- a/mpserviceplugins/mpxinmemoryplugin/src/mpxinmemoryplugin.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpserviceplugins/mpxinmemoryplugin/src/mpxinmemoryplugin.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -520,7 +520,7 @@
         iTemporaryData.Compress();
         }
     // Push onto list
-    iEmbeddedContext.Append( context );
+    iEmbeddedContext.AppendL( context );
 
     CMPXMedia* copy = CMPXMedia::NewL();
     *copy = aNewMedia;
--- a/mpserviceplugins/mpxsqlitedbcommon/group/mpxsqlitedbcommon.mmp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpserviceplugins/mpxsqlitedbcommon/group/mpxsqlitedbcommon.mmp	Fri Jul 23 17:31:12 2010 -0500
@@ -73,4 +73,6 @@
 deffile ../bwinscw/ 
 #endif
 
+SMPSAFE
+
 // End of File
\ No newline at end of file
--- a/mpserviceplugins/mpxsqlitedbcommon/src/mpxdbcommonutil.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpserviceplugins/mpxsqlitedbcommon/src/mpxdbcommonutil.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -427,6 +427,7 @@
     const TArray<TMPXAttribute>& aAttrs,
     RArray<TInt>& aSupportedIds)
     {
+    CleanupClosePushL(aSupportedIds);
     MPX_FUNC("MPXDbCommonUtil::FillInSupportedUIDs");
 
     TInt attrCount(aAttrs.Count());
@@ -457,6 +458,7 @@
             // ignore attribute
             }
         }
+    CleanupStack::Pop();
     }
 
 // ----------------------------------------------------------------------------
--- a/mpserviceplugins/mpxsqlitedbcommon/src/mpxdbmanager.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpserviceplugins/mpxsqlitedbcommon/src/mpxdbmanager.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -2299,6 +2299,7 @@
     const TDesC& aAlias,
     RArray<HBufC*>& aTableName)
     {
+    CleanupClosePushL(aTableName);
     RSqlStatement statement;
     CleanupClosePushL(statement);
 
@@ -2329,6 +2330,7 @@
         }
 
     CleanupStack::PopAndDestroy(&statement);
+    CleanupStack::Pop();
     }
 
 // ----------------------------------------------------------------------------
--- a/mpserviceplugins/mpxsqlitedbhgplugin/group/mpxsqlitedbhgplugin.mmp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpserviceplugins/mpxsqlitedbhgplugin/group/mpxsqlitedbhgplugin.mmp	Fri Jul 23 17:31:12 2010 -0500
@@ -108,4 +108,6 @@
 ALWAYS_BUILD_AS_ARM
 OPTION ARMCC -O3 -Otime
 
+SMPSAFE
+
 // End of File
--- a/mpserviceplugins/mpxsqlitedbhgplugin/src/mpxdbhandler.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpserviceplugins/mpxsqlitedbhgplugin/src/mpxdbhandler.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -999,18 +999,18 @@
             {
             MPX_DEBUG1("    EMPXMediaGeneralCount");
 
-            attributes.Append(TMPXAttribute(KMPXMediaIdGeneral, attributeId & ~EMPXMediaGeneralCount));
+            attributes.AppendL(TMPXAttribute(KMPXMediaIdGeneral, attributeId & ~EMPXMediaGeneralCount));
 
             tryGetSongCount = ETrue;
             break;
             }
 
-        attributes.Append(aAttrs[i]);
+        attributes.AppendL(aAttrs[i]);
         }
 
     for (TInt j = i+1; j < attrCount; j++)
         {
-        attributes.Append(aAttrs[j]);
+        attributes.AppendL(aAttrs[j]);
         }
     iDbAlbum->GetSubCategoryItemsL(EMPXArtist, aArtistId, attributes.Array(), aMediaArray);
     CleanupStack::PopAndDestroy(&attributes);
--- a/mpserviceplugins/mpxsqlitedbhgplugin/src/mpxdbplugin.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpserviceplugins/mpxsqlitedbhgplugin/src/mpxdbplugin.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -1004,7 +1004,7 @@
         for( TInt i=0; i<c; ++i )
             {
             TMPXItemId id = aArray->AtL(i)->ValueTObjectL<TMPXItemId>( KMPXMediaGeneralId );
-            ids.Append( id );
+            ids.AppendL( id );
             }
 
         // Rest are all blank items
@@ -1019,7 +1019,7 @@
         for( TInt i=0; i<count; ++i )
             {
             aArray->AppendL( *entry );
-            ids.Append( KMPXInvalidItemId );
+            ids.AppendL( KMPXInvalidItemId );
             }
         CleanupStack::PopAndDestroy( entry );
 
@@ -1688,7 +1688,7 @@
                     // return all songs of a particular artist (currently highlighted)
                     path->Set(EMPXOpenGroupOrPlaylist);
                     ids.Reset();
-                    ids.Append(aPath.Id(2));
+                    ids.AppendL(aPath.Id(2));
                     path->AppendL(ids.Array());
                     path->SelectL(aPath.Id(2));
                     path->Set(EMPXOpenPlaylistOnly);
@@ -4332,6 +4332,9 @@
     RArray<TMPXAttribute>& aAttrs,
     RArray<TInt>& aSupportedIds )
     {
+    CleanupClosePushL(aAttrs);
+    CleanupClosePushL(aSupportedIds);
+       
     aAttrs.AppendL( TMPXAttribute(KMPXMediaIdGeneral,
         EMPXMediaGeneralId | EMPXMediaGeneralType | EMPXMediaGeneralCategory |
         EMPXMediaGeneralTitle | EMPXMediaGeneralFlags | EMPXMediaGeneralUri) );
@@ -4428,6 +4431,8 @@
             EMPXMediaMusicArtist | EMPXMediaMusicAlbum | EMPXMediaMusicAlbumArtFileName ) );
         aSupportedIds.AppendL( KMPXMediaIdMusic );
         }
+    CleanupStack::Pop();
+    CleanupStack::Pop();
     }
 
 #ifdef _DEBUG
--- a/mpserviceplugins/mpxsqlitepodcastdbplugin/group/mpxsqlitepodcastdbplugin.mmp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpserviceplugins/mpxsqlitepodcastdbplugin/group/mpxsqlitepodcastdbplugin.mmp	Fri Jul 23 17:31:12 2010 -0500
@@ -79,4 +79,6 @@
 LIBRARY         mpxsqlitedbcommon.lib
 LIBRARY         mpxcommon.lib
 
+SMPSAFE
+
 // End of File
--- a/mpserviceplugins/mpxsqlitepodcastdbplugin/src/mpxpodcastdbplugin.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpserviceplugins/mpxsqlitepodcastdbplugin/src/mpxpodcastdbplugin.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -3088,6 +3088,9 @@
     RArray<TMPXAttribute>& aAttrs,
     RArray<TInt>& aSupportedIds )
     {
+    CleanupClosePushL(aAttrs);
+    CleanupClosePushL(aSupportedIds);
+    
     aAttrs.AppendL(TMPXAttribute(KMPXMediaIdGeneral, EMPXMediaGeneralTitle |
         EMPXMediaGeneralDuration | EMPXMediaGeneralSize |
         EMPXMediaGeneralType | EMPXMediaGeneralCategory | EMPXMediaGeneralId |
@@ -3109,6 +3112,8 @@
         aAttrs.AppendL( TMPXAttribute(KMPXMediaIdMusic, EMPXMediaMusicAlbumArtFileName ) );
         aSupportedIds.AppendL( KMPXMediaIdMusic );
         }
+    CleanupStack::Pop();
+    CleanupStack::Pop();
     }
 
 #ifdef _DEBUG
--- a/mpviewplugins/mpcollectionviewplugin/mpcollectionviewplugin.pro	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpviewplugins/mpcollectionviewplugin/mpcollectionviewplugin.pro	Fri Jul 23 17:31:12 2010 -0500
@@ -21,6 +21,7 @@
     TARGET.UID3 = 0x10207C63
     TARGET.CAPABILITY = All -TCB
     TARGET.EPOCALLOWDLLDATA = 1
+    MMP_RULES += SMPSAFE
 }
 
 SERVICE.INTERFACE_NAME = org.nokia.mmdt.MpxViewPlugin/1.0
--- a/mpviewplugins/mpdetailsviewplugin/resources/mpdetailsview.docml	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/resources/mpdetailsview.docml	Fri Jul 23 17:31:12 2010 -0500
@@ -1,101 +1,130 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<hbdocument version="0.7">
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="0.9">
     <widget name="content" type="HbWidget">    
-        <spaceritem name="spacer1">
-            <sizepolicy verticalPolicy="Expanding"/>
-        </spaceritem>
-        <widget name="albumArt" type="HbLabel">
-            <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
-            <icon iconName="Album Art" name="icon"/>
-        </widget>
-        <widget name="trackTitle" type="HbLabel">
-            <fontspec name="fontSpec" role="Primary"/>
-            <enums name="alignment" value="AlignLeft"/>
-        </widget>
-        <widget name="artist" type="HbLabel">
-            <fontspec name="fontSpec" role="Secondary"/>
-            <enums name="alignment" value="AlignLeft"/>
-        </widget>
-        <widget name="albumName" type="HbLabel">
-            <fontspec name="fontSpec" role="Secondary"/>
-            <enums name="alignment" value="AlignLeft"/>
-        </widget>
-        <widget name="shareButton" type="HbPushButton">
-            <string name="text" value="Share"/>
-            <enums name="textAlignment" value="AlignCenter"/>                
-        </widget>
+        <widget name="songInfo" type="HbWidget">
+            <widget name="albumArt" type="HbLabel">
+                <sizehint height="12.5un" type="FIXED" width="12.5un"/>
+                <icon iconName="Album Art" name="icon"/>
+            </widget>
+            <widget name="trackTitle" type="HbLabel">
+                <fontspec name="fontSpec" role="Primary"/>
+                <enums name="alignment" value="AlignLeft"/>
+            </widget>
+            <widget name="artist" type="HbLabel">
+                <fontspec name="fontSpec" role="Secondary"/>
+                <enums name="alignment" value="AlignLeft"/>
+            </widget>
+            <widget name="albumName" type="HbLabel">
+                <fontspec name="fontSpec" role="Secondary"/>
+                <enums name="alignment" value="AlignLeft"/>
+            </widget>
+            <widget name="shareButton" type="HbPushButton">
+                <string locid="txt_mus_other_share" name="text"/>
+                <enums name="textAlignment" value="AlignCenter"/>                
+            </widget>
+	    </widget>
         <widget name="songDetails" type="HbGroupBox">
              <widget name="songDetailsListWidget" role="HbGroupBox:contentWidget" type="HbListWidget">
                 <string name="verticalScrollBarPolicy" value="ScrollBarAlwaysOff"/>
              </widget>
              <bool name="collapsable" value="TRUE"/>
-             <string name="heading" value="Song details"/>
+             <string locid="txt_mus_subtitle_song_details" name="heading"/>
         </widget>
-        <widget name="inspireMeGroupBox" type="HbGroupBox">
-            <widget name="inspireListWidget" role="HbGroupBox:contentWidget" type="HbListWidget">
-                <string name="verticalScrollBarPolicy" value="ScrollBarAlwaysOff"/>
+        <widget name="inspireMeArea" type="HbWidget">
+            <widget name="inspireMeGroupBox" type="HbGroupBox">
+                <widget name="inspireListWidget" role="HbGroupBox:contentWidget" type="HbListWidget">
+                    <string name="verticalScrollBarPolicy" value="ScrollBarAlwaysOff"/>
+                    <enums name="clampingStyle" value="StrictClamping"/>
+                </widget>
+                <widget name="inspireMeProgressBar" type="HbProgressBar">
+            	    <integer name="minimum" value="0"/>
+            	    <integer name="maximum" value="0"/>
+                    <enums name="orientation" value="Horizontal"/>
+                    <bool name="visible" value="FALSE"/>
+                </widget>
+                <bool name="collapsable" value="TRUE"/>
+                <string locid="txt_mus_subtitle_inspire_me" name="heading"/>
             </widget>
-            <widget name="inspireMeProgressBar" type="HbProgressBar">
-            	<integer name="minimum" value="0"/>
-            	<integer name="maximum" value="0"/>
-              <enums name="orientation" value="Horizontal"/>
-              <bool name="visible" value="FALSE"/>
-            </widget>
-            <bool name="collapsable" value="TRUE"/>
-            <string name="heading" value="Inspire me"/>
-        </widget>
+        </widget>     
     </widget>
 
   <section name="ShowInspireMe">
     <widget name="content" type="HbWidget">
-      <layout type="anchor">
-        <anchoritem dst="artist" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" src="albumArt" srcEdge="RIGHT"/>
-        <anchoritem dst="albumArt" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
-        <anchoritem dst="albumArt" dstEdge="TOP" spacing="var(hb-param-margin-gene-top)" src="" srcEdge="TOP"/>
-        <anchoritem dst="trackTitle" dstEdge="TOP" spacing="var(hb-param-margin-gene-top)" src="" srcEdge="TOP"/>
-        <anchoritem dst="trackTitle" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
-        <anchoritem dst="trackTitle" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" src="albumArt" srcEdge="RIGHT"/>
-        <anchoritem dst="artist" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
-        <anchoritem dst="artist" dstEdge="TOP" spacing="var(hb-param-margin-gene-middle-vertical)" src="trackTitle" srcEdge="BOTTOM"/>
-        <anchoritem dst="albumName" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
-        <anchoritem dst="albumName" dstEdge="TOP" spacing="var(hb-param-margin-gene-middle-vertical)" src="artist" srcEdge="BOTTOM"/>
-        <anchoritem dst="albumName" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" src="albumArt" srcEdge="RIGHT"/>
-        <anchoritem dst="shareButton" dstEdge="TOP" spacing="var(hb-param-margin-gene-bottom)" src="albumName" srcEdge="BOTTOM"/>
-        <anchoritem dst="shareButton" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
-        <anchoritem dst="shareButton" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
-        <anchoritem dst="songDetails" dstEdge="TOP" spacing="var(hb-param-margin-gene-bottom)" src="shareButton" srcEdge="BOTTOM"/>
-        <anchoritem dst="songDetails" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
-        <anchoritem dst="songDetails" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
-        <anchoritem dst="inspireMeGroupBox" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
-        <anchoritem dst="inspireMeGroupBox" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
-        <anchoritem dst="inspireMeGroupBox" dstEdge="TOP" spacing="0un" src="songDetails" srcEdge="BOTTOM"/>
-        <anchoritem dst="inspireMeGroupBox" dstEdge="BOTTOM" spacer="spacer1" src="" srcEdge="BOTTOM"/>
-      </layout>
+        <widget name="songInfo" type="HbWidget">    
+            <layout type="anchor">
+    		    <anchoritem dst="albumArt" dstEdge="TOP" spacing="var(hb-param-margin-gene-top)" src="" srcEdge="TOP"/>
+                <anchoritem dst="albumArt" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
+            
+                <anchoritem dst="trackTitle" dstEdge="TOP" spacing="var(hb-param-margin-gene-top)" src="" srcEdge="TOP"/>
+                <anchoritem dst="trackTitle" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
+                <anchoritem dst="trackTitle" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" src="albumArt" srcEdge="RIGHT"/>
+            
+                <anchoritem dst="artist" dstEdge="TOP" spacing="var(hb-param-margin-gene-middle-vertical)" src="trackTitle" srcEdge="BOTTOM"/>
+    		    <anchoritem dst="artist" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
+    		    <anchoritem dst="artist" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" src="albumArt" srcEdge="RIGHT"/>
+            
+    		    <anchoritem dst="albumName" dstEdge="TOP" spacing="var(hb-param-margin-gene-middle-vertical)" src="artist" srcEdge="BOTTOM"/>
+    		    <anchoritem dst="albumName" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
+                <anchoritem dst="albumName" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" src="albumArt" srcEdge="RIGHT"/>
+                   
+                <anchoritem dst="shareButton" dstEdge="TOP" spacing="var(hb-param-margin-gene-bottom)" src="albumName" srcEdge="BOTTOM"/>
+    		    <anchoritem dst="shareButton" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
+                <anchoritem dst="shareButton" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
+                <anchoritem dst="shareButton" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+            </layout>
+        </widget>
+        <widget name="inspireMeArea" type="HbWidget">
+           <layout type="anchor">
+                <anchoritem dst="inspireMeGroupBox" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>        
+                <anchoritem dst="inspireMeGroupBox" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+                <anchoritem dst="inspireMeGroupBox" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+                <anchoritem dst="inspireMeGroupBox" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>                
+                <anchoritem dst="inspireMeProgressBar" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
+                <anchoritem dst="inspireMeProgressBar" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
+        	<anchoritem dst="inspireMeProgressBar" dstEdge="TOP" spacing="expr(var(hb-param-margin-gene-top) + var(hb-param-margin-gene-bottom) + var(hb-param-text-height-primary) + var(hb-param-margin-gene-top))" src="inspireMeGroupBox" srcEdge="TOP"/>           
+           </layout>
+        </widget>           
+        <layout type="linear" orientation="Vertical" >
+            <contentsmargins left="0" top="0" right="0" bottom="0" />
+            <linearitem itemname="songInfo"/>
+            <linearitem itemname="songDetails"/>
+            <linearitem itemname="inspireMeArea"/>
+            <stretchitem stretchfactor="5"/>
+        </layout>
     </widget>
   </section>
 
   <section name="HideInspireMe">
     <widget name="content" type="HbWidget">
-      <layout type="anchor">
-        <anchoritem dst="artist" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" src="albumArt" srcEdge="RIGHT"/>
-        <anchoritem dst="albumArt" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
-        <anchoritem dst="albumArt" dstEdge="TOP" spacing="var(hb-param-margin-gene-top)" src="" srcEdge="TOP"/>
-        <anchoritem dst="trackTitle" dstEdge="TOP" spacing="var(hb-param-margin-gene-top)" src="" srcEdge="TOP"/>
-        <anchoritem dst="trackTitle" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
-        <anchoritem dst="trackTitle" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" src="albumArt" srcEdge="RIGHT"/>
-        <anchoritem dst="artist" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
-        <anchoritem dst="artist" dstEdge="TOP" spacing="var(hb-param-margin-gene-middle-vertical)" src="trackTitle" srcEdge="BOTTOM"/>
-        <anchoritem dst="albumName" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
-        <anchoritem dst="albumName" dstEdge="TOP" spacing="var(hb-param-margin-gene-middle-vertical)" src="artist" srcEdge="BOTTOM"/>
-        <anchoritem dst="albumName" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" src="albumArt" srcEdge="RIGHT"/>
-        <anchoritem dst="shareButton" dstEdge="TOP" spacing="var(hb-param-margin-gene-bottom)" src="albumName" srcEdge="BOTTOM"/>
-        <anchoritem dst="shareButton" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
-        <anchoritem dst="shareButton" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
-        <anchoritem dst="songDetails" dstEdge="TOP" spacing="var(hb-param-margin-gene-bottom)" src="shareButton" srcEdge="BOTTOM"/>
-        <anchoritem dst="songDetails" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
-        <anchoritem dst="songDetails" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
-        <anchoritem dst="songDetails" dstEdge="BOTTOM" spacer="spacer1" src="" srcEdge="BOTTOM"/>
-      </layout>
+        <widget name="songInfo" type="HbWidget">    
+            <layout type="anchor">
+    		    <anchoritem dst="albumArt" dstEdge="TOP" spacing="var(hb-param-margin-gene-top)" src="" srcEdge="TOP"/>
+                <anchoritem dst="albumArt" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
+            
+                <anchoritem dst="trackTitle" dstEdge="TOP" spacing="var(hb-param-margin-gene-top)" src="" srcEdge="TOP"/>
+                <anchoritem dst="trackTitle" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
+                <anchoritem dst="trackTitle" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" src="albumArt" srcEdge="RIGHT"/>
+            
+                <anchoritem dst="artist" dstEdge="TOP" spacing="var(hb-param-margin-gene-middle-vertical)" src="trackTitle" srcEdge="BOTTOM"/>
+    		    <anchoritem dst="artist" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
+    		    <anchoritem dst="artist" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" src="albumArt" srcEdge="RIGHT"/>
+            
+    		    <anchoritem dst="albumName" dstEdge="TOP" spacing="var(hb-param-margin-gene-middle-vertical)" src="artist" srcEdge="BOTTOM"/>
+    		    <anchoritem dst="albumName" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
+                <anchoritem dst="albumName" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" src="albumArt" srcEdge="RIGHT"/>
+                   
+                <anchoritem dst="shareButton" dstEdge="TOP" spacing="var(hb-param-margin-gene-bottom)" src="albumName" srcEdge="BOTTOM"/>
+    		    <anchoritem dst="shareButton" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
+                <anchoritem dst="shareButton" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
+                <anchoritem dst="shareButton" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+            </layout>
+        </widget>
+        <layout type="linear" orientation="Vertical" >
+            <contentsmargins left="0" top="0" right="0" bottom="0" />
+            <linearitem itemname="songInfo"/>
+            <linearitem itemname="songDetails"/>
+            <stretchitem stretchfactor="5"/>
+        </layout>
     </widget>
   </section>
 
--- a/mpviewplugins/mpdetailsviewplugin/src/mpdetailssharedialog.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/src/mpdetailssharedialog.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -462,7 +462,8 @@
 void MpDetailsShareDialog::debugJs( QString s )
 {
     TX_ENTRY
-    TX_LOG_ARGS( "share: debugJs: " << s )
+    Q_UNUSED(s);
+
     TX_EXIT
 }
 
--- a/mpviewplugins/mpdetailsviewplugin/src/mpdetailsview.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/src/mpdetailsview.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -55,7 +55,9 @@
 
 
 const int KRecommendationCount = 2;
-
+const int KOneKiloByteInBytes = 1024;
+const int KOneMegabyteInBytes = 1048576;        
+const int KOneGigaByteInBytes = 134217728;        
 
 /*!
  Constructor
@@ -338,9 +340,7 @@
         prototype->setSecondaryTextRowCount(minTextRowCount,maxTextRowCount);
 
         HbListWidgetItem  *inspireMeItem = new HbListWidgetItem();
-        QString info(tr("There are no recommendations for this track, but you can always discover new music on Ovi"));
-        inspireMeItem->setText( QString( " " ) );
-        inspireMeItem->setSecondaryText( info );
+        inspireMeItem->setSecondaryText( hbTrId( "txt_mus_dblist_val_there_are_no_recommendations" ) );
         mInspireList->addItem( inspireMeItem );
     }
 
@@ -386,13 +386,13 @@
     if ( !mSongData->album().isEmpty () ) {
         mAlbumText->setPlainText( mSongData->album() );
     } else {
-        mAlbumText->setPlainText( tr( "Unknown") );
+        mAlbumText->setPlainText( hbTrId( "txt_mus_other_unknown7") );
     }
 
     if ( !mSongData->artist().isEmpty() ) {
         mArtistText->setPlainText( mSongData->artist() );
     } else {
-        mArtistText->setPlainText( tr( "Unknown") );
+        mArtistText->setPlainText( hbTrId( "txt_mus_other_unknown6") );
     }
 
     if (canQuerySharePlayerLink() ) {
@@ -433,7 +433,7 @@
 
     if ( !mSongData->albumTrack().isNull() ) {
         HbListWidgetItem *item = new HbListWidgetItem();
-        item->setText( tr( "Song number" ) );
+        item->setText( hbTrId( "txt_mus_dblist_song_number" ) );
         item->setSecondaryText( mSongData->albumTrack() );
         item->setEnabled( false );
         mDetailList->addItem( item );
@@ -441,7 +441,7 @@
 
     if ( !mSongData->year().isNull() ) {
         HbListWidgetItem *item = new HbListWidgetItem();
-        item->setText( tr( "Year" ) );
+        item->setText( hbTrId( "txt_mus_dblist_year" ) );
         item->setSecondaryText( mSongData->year() );
         item->setEnabled( false );
         mDetailList->addItem( item );
@@ -449,7 +449,7 @@
 
     if ( !mSongData->genre().isNull() ) {
         HbListWidgetItem *item = new HbListWidgetItem();
-        item->setText( tr( "Genre" ) );
+        item->setText( hbTrId( "txt_mus_dblist_genre" ) );
         item->setSecondaryText( mSongData->genre() );
         item->setEnabled( false );
         mDetailList->addItem( item );
@@ -457,7 +457,7 @@
 
     if ( !mSongData->composer().isNull() ) {
         HbListWidgetItem *item = new HbListWidgetItem();
-        item->setText( tr( "Composer" ) );
+        item->setText( hbTrId( "txt_mus_dblist_composer" ) );
         item->setSecondaryText( mSongData->composer() );
         item->setEnabled( false );
         mDetailList->addItem( item );
@@ -465,7 +465,7 @@
 
     if ( !mSongData->fileName().isNull() ) {
         HbListWidgetItem *item = new HbListWidgetItem();
-        item->setText( tr( "File name" ) );
+        item->setText( hbTrId( "txt_mus_dblist_file_name" ) );
         item->setSecondaryText( mSongData->fileName() );
         item->setEnabled( false );
         mDetailList->addItem( item );
@@ -473,7 +473,7 @@
 
     if ( !mSongData->mimeType().isNull() ) {
         HbListWidgetItem *item = new HbListWidgetItem();
-        item->setText( tr( "Format" ) );
+        item->setText( hbTrId( "txt_mus_dblist_format" ) );
         item->setSecondaryText( mSongData->mimeType() );
         item->setEnabled( false );
         mDetailList->addItem( item );
@@ -481,7 +481,7 @@
 
     if ( !mSongData->duration().isNull() ) {
         HbListWidgetItem *item = new HbListWidgetItem();
-        item->setText( tr( "Duration" ) );
+        item->setText( hbTrId( "txt_mus_dblist_duration" ) );
         item->setSecondaryText( mSongData->duration() );
         item->setEnabled( false );
         mDetailList->addItem( item );
@@ -489,31 +489,59 @@
 
     if ( !mSongData->bitRate().isNull() ) {
         HbListWidgetItem *item = new HbListWidgetItem();
-        item->setText( tr( "Bitrate" ) );
-        item->setSecondaryText( mSongData->bitRate().append( " Kbps" ) );
+        item->setText( hbTrId( "txt_mus_dblist_bitrate" ) );
+        bool ok = false;
+        int bitRate = mSongData->bitRate().toInt(&ok);
+        TX_LOG_ARGS("Warning: If zero, bitrate is not read correctly. It wont show up in details" << ok);
+        if(ok) {
+            item->setSecondaryText( hbTrId("txt_mus_dblist_bitrate_val_ln_kbps", bitRate) );
+        }    
         item->setEnabled( false );
         mDetailList->addItem( item );
     }
 
     if ( !mSongData->sampleRate().isNull() ) {
         HbListWidgetItem *item = new HbListWidgetItem();
-        item->setText( tr( "Sampling rate" ) );
-        item->setSecondaryText( mSongData->sampleRate().append( " hz" ) );
+        item->setText( hbTrId( "txt_mus_dblist_sampling_rate" ) );
+        bool ok = false;
+        int samplingRate = mSongData->sampleRate().toInt(&ok);
+        TX_LOG_ARGS("Warning: If zero, sampling rate is not read correctly. It wont show up in details" << ok);
+        if(ok) {
+            item->setSecondaryText(	hbTrId("txt_mus_dblist_sampling_rate_val_ln_hz", samplingRate) );
+        }            
         item->setEnabled( false );
         mDetailList->addItem( item );
     }
 
     if ( !mSongData->size().isNull() ) {
         HbListWidgetItem *item = new HbListWidgetItem();
-        item->setText( tr( "Size" ) );
-        item->setSecondaryText( mSongData->size().append( " MB" ) );
+        item->setText( hbTrId( "txt_mus_dblist_size" ) );
+        bool ok = false;
+        long size = mSongData->size().toLong(&ok); // in bytes
+        TX_LOG_ARGS("WARNING: If zero, Cant get song data size right. You wont see the size in details groupbox correctly" << ok );
+        if( size < KOneKiloByteInBytes) {
+            // under 1 KB
+            item->setSecondaryText( hbTrId("txt_mus_dblist_size_val_ln_b", size) );
+        } else if( size < KOneMegabyteInBytes ) {
+            // under 1 MB
+            size /= KOneKiloByteInBytes; // turn size into KB
+            item->setSecondaryText( hbTrId("txt_mus_dblist_size_val_ln_kb", size) );
+        } else if( size < KOneGigaByteInBytes ) {
+            // under 1 GB
+            size /= KOneMegabyteInBytes; // turn size to MB
+            item->setSecondaryText( hbTrId("txt_mus_dblist_size_val_ln_mb", size) );
+        } else {
+            // 1 GB or higher
+            size /= KOneGigaByteInBytes; // turn size to GB
+            item->setSecondaryText( hbTrId("txt_mus_dblist_size_val_ln_gb", size) );            
+        }
         item->setEnabled( false );
         mDetailList->addItem( item );
     }
 
     if ( !mSongData->modified().isNull() ) {
         HbListWidgetItem *item = new HbListWidgetItem();
-        item->setText( tr( "Modified" ) );
+        item->setText( hbTrId( "txt_mus_dblist_modified" ) );
         item->setSecondaryText( mSongData->modified() );
         item->setEnabled( false );
         mDetailList->addItem( item );
@@ -521,7 +549,7 @@
 
     if ( !mSongData->copyright().isNull() ) {
         HbListWidgetItem *item = new HbListWidgetItem();
-        item->setText( tr( "Copyright" ) );
+        item->setText( hbTrId( "txt_mus_dblist_copyright" ) );
         item->setSecondaryText( mSongData->copyright() );
         item->setEnabled( false );
         mDetailList->addItem( item );
@@ -529,7 +557,7 @@
 
     if ( !mSongData->musicURL().isNull() ) {
         HbListWidgetItem *item = new HbListWidgetItem();
-        item->setText( tr( "Web site" ) );
+        item->setText( hbTrId( "txt_mus_dblist_web_site" ) );
         item->setSecondaryText( mSongData->musicURL() );
         item->setEnabled( true );
         mDetailList->addItem( item );
@@ -537,8 +565,8 @@
 
     if ( mSongData->isDrmProtected() ) {
         HbListWidgetItem *item = new HbListWidgetItem();
-        item->setText( tr( "Licences" ) );
-        item->setSecondaryText( tr( "Click for details" ) );
+        item->setText( hbTrId( "txt_mus_dblist_licences" ) );
+        item->setSecondaryText( hbTrId( "txt_mus_dblist_licences_val_click_for_details" ) );
         item->setEnabled( true );
         mDetailList->addItem( item );
     }
@@ -617,6 +645,7 @@
     if ( !mSharePopup->isInitialized() )
     {
         connect( mSharePopup, SIGNAL( closeShareDialog() ), this, SLOT( closeShareDialog() ) );
+		// TODO: Ask for a localization string for this, there is none in text map
         mSharePopup->initialize( mSongData, tr( "Unknown" ) );
     }
     TX_EXIT
--- a/mpviewplugins/mpdetailsviewplugin/src/mpquerymanager.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/src/mpquerymanager.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -247,6 +247,7 @@
 void MpQueryManager::retrieveInformationNetworkError( QNetworkReply::NetworkError error )
 {
     // TODO: agree on error handling
+	Q_UNUSED(error)
     TX_ENTRY_ARGS( "Network error for retrieving Information" << error);
     TX_EXIT
 }
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/UT_ALL_mpdetailsviewplugin.pkg	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/tsrc/UT_ALL_mpdetailsviewplugin.pkg	Fri Jul 23 17:31:12 2010 -0500
@@ -17,7 +17,7 @@
 &EN
 
 ; SIS header: name, uid, version
-#{"UT_ALL_mpdetailsviewplugin"},(0xE003e880),1,0,0
+#{"UT_ALL_mpdetailsviewplugin"},(0xEab0059a),1,0,0
 
 ; Localised Vendor name
 %{"Vendor"}
@@ -26,14 +26,13 @@
 :"Vendor"
 
 ; Executable and default resource files
-"/epoc32/release/armv5/udeb/unittest_mpmpxdetailsframeworkwrapper.exe"    - "!:\sys\bin\unittest_mpmpxdetailsframeworkwrapper.exe"
-"/epoc32/data/z/private/10003a3f/import/apps/unittest_mpmpxdetailsframeworkwrapper_reg.rsc"    - "!:\private\10003a3f\import\apps\unittest_mpmpxdetailsframeworkwrapper_reg.rsc"
+
+"/epoc32/release/armv5/udeb/unittest_mpdetailssharedialog.exe"    - "!:\sys\bin\unittest_mpdetailssharedialog.exe"
+"/epoc32/data/z/private/10003a3f/import/apps/unittest_mpdetailssharedialog_reg.rsc"    - "!:\private\10003a3f\import\apps\unittest_mpdetailssharedialog_reg.rsc"
 
 "/epoc32/release/armv5/udeb/unittest_mpdetailsview.exe"    - "!:\sys\bin\unittest_mpdetailsview.exe"
 "/epoc32/data/z/private/10003a3f/import/apps/unittest_mpdetailsview_reg.rsc"    - "!:\private\10003a3f\import\apps\unittest_mpdetailsview_reg.rsc"
 
-"/epoc32/release/armv5/udeb/unittest_mpsongdata.exe"    - "!:\sys\bin\unittest_mpsongdata.exe"
-"/epoc32/data/z/private/10003a3f/import/apps/unittest_mpsongdata_reg.rsc"    - "!:\private\10003a3f\import\apps\unittest_mpsongdata_reg.rsc"
 
 "/epoc32/release/armv5/udeb/unittest_mpdetailsviewplugin.exe"    - "!:\sys\bin\unittest_mpdetailsviewplugin.exe"
 "/epoc32/data/z/private/10003a3f/import/apps/unittest_mpdetailsviewplugin_reg.rsc"    - "!:\private\10003a3f\import\apps\unittest_mpdetailsviewplugin_reg.rsc"
@@ -41,3 +40,8 @@
 "/epoc32/release/armv5/udeb/unittest_mpquerymanager.exe"    - "!:\sys\bin\unittest_mpquerymanager.exe"
 "/epoc32/data/z/private/10003a3f/import/apps/unittest_mpquerymanager_reg.rsc"    - "!:\private\10003a3f\import\apps\unittest_mpquerymanager_reg.rsc"
 
+"/epoc32/release/armv5/udeb/unittest_mpsharedata.exe"    - "!:\sys\bin\unittest_mpsharedata.exe"
+"/epoc32/data/z/private/10003a3f/import/apps/unittest_mpsharedata_reg.rsc"    - "!:\private\10003a3f\import\apps\unittest_mpsharedata_reg.rsc"
+
+
+
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/UT_ALL_mpdetailsviewplugin.pro	Fri Jul 09 16:27:03 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-#
-# 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 "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: Unit test for mpdetailsviewplugin
-#
-
-
-TEMPLATE = subdirs
-
-## TODO: fix this pro file, unit tests in their own root compile, but not within this pro file
-SUBDIRS += ./unittest_mpdetailssharedialog
-SUBDIRS += ./unittest_mpdetailsview
-SUBDIRS += ./unittest_mpdetailsviewplugin
-SUBDIRS += ./unittest_mpquerymanager
-SUBDIRS += ./unittest_mpsharedata
-
-test.depends = first
-test.CONFIG += recursive
-autotest.depends = first
-autotest.CONFIG += recursive
-QMAKE_EXTRA_TARGETS += test autotest
-
-
Binary file mpviewplugins/mpdetailsviewplugin/tsrc/UT_ALL_mpdetailsviewplugin.sisx has changed
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/tsrc.pro	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/tsrc/tsrc.pro	Fri Jul 23 17:31:12 2010 -0500
@@ -17,10 +17,10 @@
 TEMPLATE = subdirs
 
 SUBDIRS += unittest_mpdetailssharedialog \
-           # unittest_mpdetailsview \
+           unittest_mpdetailsview \
            unittest_mpdetailsviewplugin \
-           # unittest_mpquerymanager \
-           # unittest_mpsharedata
+           unittest_mpquerymanager \
+           unittest_mpsharedata
 
 CONFIG += ordered
 
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailssharedialog/stub/src/hbmessagebox.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailssharedialog/stub/src/hbmessagebox.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -29,10 +29,10 @@
 
 void HbMessageBox::information(const QString &warningText)
 {
-
+    Q_UNUSED(warningText);
 }
 
 void HbMessageBox::warning(const QString &warningText)
 {
-
+    Q_UNUSED(warningText);
 }
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailssharedialog/stub/src/mpsongdata.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailssharedialog/stub/src/mpsongdata.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -67,8 +67,7 @@
       mAlbumArt(),
       mReqId( KUndefined )
 {
-    //TX_ENTRY
-    //TX_EXIT
+    TX_ENTRY_ARGS("Stub")
 }
 
 /*!
@@ -76,8 +75,7 @@
  */
 MpSongData::~MpSongData()
 {
-    //TX_ENTRY
-    //TX_EXIT
+    TX_ENTRY_ARGS("Stub")
 }
 
 /*!
@@ -85,14 +83,12 @@
 */
 void MpSongData::albumArt( QPixmap& pixmap )
 {
-    //TX_ENTRY
      if ( !mAlbumArt.isNull() ) {
         pixmap = mAlbumArt;
      }
      else {
          pixmap = QPixmap();
      }
-    //TX_EXIT
 }
 
 
@@ -101,7 +97,6 @@
 */
 QString MpSongData::title() const
 {
-    //TX_LOG
     return mTitle;
 }
 
@@ -110,7 +105,6 @@
 */
 QString MpSongData::album() const
 {
-    //TX_LOG
     return mAlbum;
 }
 
@@ -119,7 +113,6 @@
 */
 QString MpSongData::artist() const
 {
-    //TX_LOG
     return mArtist;
 }
 
@@ -128,7 +121,6 @@
 */
 QString MpSongData::comment() const
 {
-    //TX_LOG
     return mComment;
 }
 
@@ -137,7 +129,6 @@
 */
 QString MpSongData::composer() const
 {
-    //TX_LOG
     return mComposer;
 }
 
@@ -147,7 +138,6 @@
 */
 QString MpSongData::genre() const
 {
-    //TX_LOG
     return mGenre;
 }
 
@@ -157,7 +147,6 @@
 */
 QString MpSongData::albumTrack() const
 {
-    //TX_LOG
     return mAlbumTrack;
 }
 
@@ -166,7 +155,6 @@
 */
 QString MpSongData::link() const
 {
-    //TX_LOG
     return mLink;
 }
 
@@ -175,7 +163,6 @@
 */
 QString MpSongData::year() const
 {
-    //TX_LOG    
     return mYear;
 }
 
@@ -185,13 +172,11 @@
 */
 bool MpSongData::setTitle( const QString &title )
 {
-    //TX_ENTRY_ARGS( "title =" << title )
     bool change = false;
     if ( title != mTitle ) {
         change = true;
         mTitle = title;
     }
-    //TX_EXIT
     return change;
 }
 
@@ -200,13 +185,11 @@
 */
 bool MpSongData::setAlbum( const QString &album )
 {
-    //TX_ENTRY_ARGS( "album =" << album )
     bool change = false;
     if ( album != mAlbum ) {
         change = true;
         mAlbum = album;
     }
-    //TX_EXIT
     return change;
 }
 
@@ -215,13 +198,11 @@
 */
 bool MpSongData::setArtist( const QString &artist )
 {
-    //TX_ENTRY_ARGS( "artist =" << artist )
     bool change = false;
     if ( artist != mArtist ) {
         change = true;
         mArtist = artist;
     }
-    //TX_EXIT
     return change;
 }
 
@@ -230,13 +211,11 @@
 */
 bool MpSongData::setComment( const QString &comment)
 {
-    //TX_ENTRY_ARGS( "comment =" << comment )
     bool change = false;
     if ( comment != mComment ) {
         change = true;
         mComment = comment;
     }
-    //TX_EXIT
     return change;
 }
 
@@ -246,13 +225,11 @@
 */
 bool MpSongData::setComposer( const QString &composer )
 {
-    //TX_ENTRY_ARGS( "composer =" << composer )
     bool change = false;
     if ( composer != mComposer ) {
         change = true;
         mComposer = composer;
     }
-    //TX_EXIT
     return change;
 }
 
@@ -261,13 +238,11 @@
 */
 bool MpSongData::setGenre( const QString &genre )
 {
-    //TX_ENTRY_ARGS( "genre =" << genre )
     bool change = false;
     if ( genre != mGenre ) {
         change = true;
         mGenre = genre;
     }
-    //TX_EXIT
     return change;
 }
 
@@ -277,7 +252,6 @@
 */
 bool MpSongData::setYear( int year )
 {
-    //TX_ENTRY_ARGS( "year =" << year )
     bool change = false;
     if ( QString::number(year) != mYear ) {
         change = true;
@@ -285,7 +259,6 @@
             mYear = QString::number(year);
         }
     }
-    //TX_EXIT
     return change;
 }
 
@@ -294,13 +267,11 @@
 */
 bool MpSongData::setAlbumTrack( const QString &track )
 {
-    //TX_ENTRY_ARGS( "track =" << track )
     bool change = false;
     if ( track != mAlbumTrack ) {
         change = true;
         mAlbumTrack = track;
     }
-    //TX_EXIT
     return change;
 }
 
@@ -309,9 +280,7 @@
 */
 void MpSongData::setLink( const QString &link )
 {
-    //TX_ENTRY_ARGS( "Link =" << link )
     mLink = link;
-    //TX_EXIT
 }
 
 /*!
@@ -319,10 +288,9 @@
 */
 void MpSongData::setAlbumArtUri( const QString &albumArtUri)
 {
-    //TX_ENTRY
+    Q_UNUSED(albumArtUri);
     mAlbumArt = mDefaultAlbumArt;
     emit albumArtReady();
-    //TX_EXIT
 }
 
 
@@ -335,10 +303,10 @@
         int id,
         int error  )
 {
-    //TX_ENTRY
+    Q_UNUSED( pixmap );
     Q_UNUSED( data );
-
-    //TX_EXIT
+    Q_UNUSED( id );
+    Q_UNUSED( error );
 }
 
 /*!
@@ -346,9 +314,7 @@
 */
 void MpSongData::commitPlaybackInfo()
 {
-    //TX_ENTRY
     emit playbackInfoChanged();
-    //TX_EXIT
 }
 
 /*!
@@ -356,23 +322,12 @@
 */
 void MpSongData::commitSongDetailInfo()
 {
-    //TX_ENTRY
     emit songDetailInfoChanged();
-    //TX_EXIT
 }
 
 QString MpSongData::albumArtBase64() const
 {
-    // Converts the current album art pixmap to a base64 string, and return the string.
-//    TX_ENTRY
-//    QByteArray array;
-//    QBuffer buffer(&array);
-//    buffer.open(QIODevice::WriteOnly);
-//    mAlbumArt.save(&buffer, "PNG"); // writes pixmap into bytes in PNG format
-//    buffer.close();
-//    QByteArray base64 = array.toBase64();
-//    TX_EXIT
-//    return base64.constData();
+
     return QString("");
 }
 
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/src/unittest_mpdetailsview.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/src/unittest_mpdetailsview.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -55,7 +55,10 @@
 #include "mpdetailsview.h"
 #undef private
 
+// This so we can test private functions
+#include "../../src/mpdetailsview.cpp"
 
+#include "../moc_mpdetailsview.cpp"
 
 /*!
  Make our test case a stand-alone executable that runs all the test functions.
@@ -250,8 +253,8 @@
     mTest->handlePlaybackInfoChanged();
     QVERIFY( mTest->mInspireMeQueryRendered == true );
     QVERIFY( mTest->mSongData->link().isEmpty() == true );
-    QCOMPARE( mTest->mAlbumText->plainText(), QString( "Unknown" ) );
-    QCOMPARE( mTest->mArtistText->plainText(), QString( "Unknown" ) );
+    QCOMPARE( mTest->mAlbumText->plainText(), QString( "txt_mus_other_unknown7" ) );
+    QCOMPARE( mTest->mArtistText->plainText(), QString( "txt_mus_other_unknown6" ) );
 }
 
 void TestMpDetailsView::testClearInspireMe()
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/stub/inc/mpquerymanager.h	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/stub/inc/mpquerymanager.h	Fri Jul 23 17:31:12 2010 -0500
@@ -27,7 +27,6 @@
 class MpDetailsShareDialog;
 class MpEngine;
 
-QTM_USE_NAMESPACE
 
 class MpQueryManager : public QObject
 {
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/stub/src/mpdetailssharedialog.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/stub/src/mpdetailssharedialog.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -37,7 +37,7 @@
 private:
     QNetworkReply *createRequest( Operation /*op*/,
                                  const QNetworkRequest &/*request*/,
-                                 QIODevice *outgoingData = 0 ) { return 0; }
+                                 QIODevice */*outgoingData = 0*/ ) { return 0; }
 };
 
 
@@ -58,6 +58,7 @@
 
 void MpDetailsShareDialog::initialize( MpSongData* aSongData )
 {
+    Q_UNUSED(aSongData)
     TX_ENTRY_ARGS("STUB")
     TX_EXIT_ARGS("STUB")
 }
@@ -76,6 +77,7 @@
 
 void MpDetailsShareDialog::onIndexLoad( bool aOk )
 {
+    Q_UNUSED(aOk)
     TX_ENTRY_ARGS("STUB")
     TX_EXIT_ARGS("STUB")
 }
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/stub/src/mpengine.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/stub/src/mpengine.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -40,6 +40,7 @@
 
 bool MpEngine::verifyUsbBlocking( bool showMessage )
 {
+    Q_UNUSED(showMessage)
     TX_ENTRY_ARGS("Stub")
     return false;
 }
@@ -56,16 +57,20 @@
 
 void MpEngine::handleScanEnded( int count, int error ) 
 {
+    Q_UNUSED(count)
+    Q_UNUSED(error)
     TX_ENTRY_ARGS("Stub")
 }
 
 void MpEngine::handleDiskEvent( MpxDiskEvents event )
 {
+    Q_UNUSED(event)
     TX_ENTRY_ARGS("Stub")
 }
 
 void MpEngine::handleUsbEvent( MpxUsbEvents event )
 {
+    Q_UNUSED(event)
     TX_ENTRY_ARGS("Stub")
 }
 
@@ -76,11 +81,13 @@
 
 void MpEngine::openCollection( TCollectionContext context )
 {
+    Q_UNUSED(context)
     TX_ENTRY_ARGS("Stub")
 }
 
 void MpEngine::openCollectionItem( int index )
 {
+    Q_UNUSED(index)
     TX_ENTRY_ARGS("Stub")
 }
 
@@ -91,46 +98,61 @@
 
 void MpEngine::findPlaylists( QStringList &playlists )
 {
+    Q_UNUSED(playlists)
     TX_ENTRY_ARGS("Stub")
 }
 
 void MpEngine::createPlaylist( QString &playlistName, QList<int> &selection, MpMpxCollectionData* collectionData )
 {
+    Q_UNUSED(playlistName)
+    Q_UNUSED(selection)
+    Q_UNUSED(collectionData)
+
     TX_ENTRY_ARGS("Stub")
 }
 
 void MpEngine::saveToPlaylist( int playlistIndex, QList<int> &selection )
 {
+    Q_UNUSED(playlistIndex)
+    Q_UNUSED(selection)
     TX_ENTRY_ARGS("Stub")
 }
 
 void MpEngine::renamePlaylist( QString &newName, int index )
 {
+    Q_UNUSED(newName)
+    Q_UNUSED(index)
     TX_ENTRY_ARGS("Stub")
 }
 
 void MpEngine::saveToCurrentPlaylist( QList<int> &selection, MpMpxCollectionData *collectionData )
 {
+    Q_UNUSED(selection)
+    Q_UNUSED(collectionData)
     TX_ENTRY_ARGS("Stub")
 }
 
 void MpEngine::renamePlaylist( QString &newName )
 {
+    Q_UNUSED(newName)
     TX_ENTRY_ARGS("Stub")
 }
 
 void MpEngine::deleteSongs( QList<int> &selection )
 {
+    Q_UNUSED(selection)
     TX_ENTRY_ARGS("Stub")
 }
 
 void MpEngine::previewItem( int index )
 {
+    Q_UNUSED(index)
     TX_ENTRY_ARGS("Stub")
 }
 
 void MpEngine::openIsolatedCollection( TCollectionContext context )
 {
+    Q_UNUSED(context)
     TX_ENTRY_ARGS("Stub")
 }
 
@@ -141,11 +163,14 @@
 
 void MpEngine::findAlbumSongs( int index )
 {
+    Q_UNUSED(index)
     TX_ENTRY_ARGS("Stub")
 }
 
 void MpEngine::playAlbumSongs( int albumIndex, int songIndex )
 {
+    Q_UNUSED(albumIndex)
+    Q_UNUSED(songIndex)
     TX_ENTRY_ARGS("Stub")
 }
 
@@ -162,6 +187,10 @@
 
 void MpEngine::reorderPlaylist( int playlistId, int songId, int originalOrdinal, int newOrdinal )
 {
+    Q_UNUSED(playlistId)
+    Q_UNUSED(songId)
+    Q_UNUSED(originalOrdinal)
+    Q_UNUSED(newOrdinal)
     TX_ENTRY_ARGS("Stub")
 }
 
@@ -174,11 +203,13 @@
 
 void MpEngine::playEmbedded( QString aFilename )
 {
+    Q_UNUSED(aFilename)
     TX_ENTRY_ARGS("Stub")
 }
 
 void MpEngine::playEmbedded(const XQSharableFile& file )
 {
+    Q_UNUSED(file)
     TX_ENTRY_ARGS("Stub")
 }
 
@@ -204,16 +235,19 @@
 
 void MpEngine::setPosition( int position )
 {
+    Q_UNUSED(position)
     TX_ENTRY_ARGS("Stub")
 }
 
 void MpEngine::setShuffle( bool mode )
 {
+    Q_UNUSED(mode)
     TX_ENTRY_ARGS("Stub")
 }
 
 void MpEngine::setRepeat( bool mode )
 {
+    Q_UNUSED(mode)
     TX_ENTRY_ARGS("Stub")
 }
 
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/stub/src/mpenginefactory.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/stub/src/mpenginefactory.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -57,7 +57,7 @@
  Returns an instance to an engine with \a hostUid, and \a mode, if the shared engine is 
  already created parameters are ignored.
  */
-MpEngine *MpEngineFactory::createSharedEngine( TUid hostUid , MpEngine::EngineMode mode )
+MpEngine *MpEngineFactory::createSharedEngine( TUid /*hostUid*/ , MpEngine::EngineMode /*mode*/ )
 {
     TX_LOG_ARGS("MpEngineFactory::createSharedEngine() Stub")
     if ( !instance()->mSharedEngine ) {
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/stub/src/mpsongdata.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/stub/src/mpsongdata.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -63,7 +63,7 @@
     TX_EXIT_ARGS("Stub")
 }
 
-void MpSongData::albumArt( HbIcon& icon ) const
+void MpSongData::albumArt( HbIcon& /*icon*/ ) const
 {
     TX_ENTRY_ARGS("Stub")
     TX_EXIT_ARGS("Stub")
@@ -197,9 +197,9 @@
     return change;
 }
 
-bool MpSongData::setAlbum( const QString &album )
+bool MpSongData::setAlbum( const QString &/*album*/ )
 {
-    TX_ENTRY_ARGS("Stub album =" << album )
+
     TX_EXIT_ARGS("Stub")
     return false;
 }
@@ -474,8 +474,11 @@
         int id,
         int error  )
 {
+    Q_UNUSED( pixmap );
+    Q_UNUSED( data );
+    Q_UNUSED( id );
+    Q_UNUSED( error );
     TX_ENTRY_ARGS("Stub")
-    Q_UNUSED( data );
     TX_EXIT_ARGS("Stub")
 }
 
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/unittest_mpdetailsview.pro	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/unittest_mpdetailsview.pro	Fri Jul 23 17:31:12 2010 -0500
@@ -22,6 +22,7 @@
     network \
     xml
 
+TARGET.CAPABILITY = All -TCB
 TARGET = 
 DEPENDPATH += . 
 INCLUDEPATH += ./stub/inc \
@@ -34,6 +35,8 @@
 LIBS += -lmpxviewframeworkqt.dll \
         -lmpsettingsmanager.dll
 
+MOC_DIR = ./
+
 # Input
 HEADERS += inc/unittest_mpdetailsview.h \
 		   ../../inc/mpdetailsview.h \
@@ -47,7 +50,7 @@
            
 
 SOURCES += src/unittest_mpdetailsview.cpp \
-	       ../../src/mpdetailsview.cpp \
+               #../../src/mpdetailsview.cpp \
 		   stub/src/mpquerymanager.cpp \	       
 		   stub/src/mpengine.cpp \
 		   stub/src/mpenginefactory.cpp \		       
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpquerymanager/inc/unittest_mpquerymanager.h	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpquerymanager/inc/unittest_mpquerymanager.h	Fri Jul 23 17:31:12 2010 -0500
@@ -49,9 +49,9 @@
     
 private slots:
   //Test Cases  
-  void testrecommendationSongs();
+  //void testrecommendationSongs();
   void testrecommendationArtists();
-  void testrecommendationAlbumArtsLink();
+  //void testrecommendationAlbumArtsLink();
    
 private:
     MpQueryManager *mTest;
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpquerymanager/src/unittest_mpquerymanager.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpquerymanager/src/unittest_mpquerymanager.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -117,8 +117,11 @@
     mTest = 0;
 }
 
+/*
 void TestMpQueryManager::testrecommendationSongs()
 {
+    // TODO: when this test gets executed, it crashes at cleanup() where QueryManager destructor
+    // refers to the QNetworkAccessManager instances. Fishy.. Do a deaper investigation    
     QStringList recommendedSongs;
     QStringList recommendedSongsRecd;
     
@@ -135,7 +138,7 @@
     QCOMPARE(recommendedSongs,recommendedSongsRecd);
 }
 
-
+*/
 void TestMpQueryManager::testrecommendationArtists()
 {
     QStringList recommendedArtists;
@@ -154,9 +157,11 @@
     QCOMPARE(recommendedArtists,recommendedArtistsRecd);
 }
 
-
+/*
 void TestMpQueryManager::testrecommendationAlbumArtsLink()
 {
+    // TODO: when this test gets executed, it crashes at cleanup() where QueryManager destructor
+    // refers to the QNetworkAccessManager instances. Fishy.. Do a deaper investigation    
     QStringList recommendedAlbumArtsLink;
     QStringList recommendedAlbumArtsLinkRecd;
         
@@ -173,4 +178,5 @@
     QCOMPARE(recommendedAlbumArtsLink,recommendedAlbumArtsLinkRecd);
 }
 
+*/
 
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpsharedata/src/unittest_mpsharedata.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpsharedata/src/unittest_mpsharedata.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -108,7 +108,7 @@
 void TestMpShareData::testOwner()
 {
     mTest->setOwner(this);
-    QCOMPARE(mTest->owner(), this);
+    QCOMPARE(mTest->owner(), (QObject*) this);
 }
 
 void TestMpShareData::testSongData()
@@ -229,14 +229,6 @@
     delete song;
 }
 
-//void TestMpShareData::testSongAlbum()
-//{
-//    MpSongData *song = new MpSongData();
-//    song->setAlbum("TestAlbum");
-//    mTest->setSongData(song);
-//    QCOMPARE(mTest->album(), QString("TestAlbum"));
-//    delete song;
-//}
 
 void TestMpShareData::testSongArtist()
 {
@@ -264,72 +256,6 @@
     delete song;
 }
 
-/*
-void TestMpShareData::testSongComment()
-{
-    MpSongData *song = new MpSongData();
-    song->setComment("TestComment");
-    mTest->setSongData(song);
-    QCOMPARE(mTest->comment(), QString("TestComment"));
-    delete song;
-}
-
-void TestMpShareData::testSongAlbumArt()
-{
-    MpSongData *song = new MpSongData();
-    song->setAlbumArtUri("TestAlbum");
-    mTest->setSongData(song);
-    QPixmap pic;
-    mTest->albumArt(pic);
-    delete song;
-}
-
-void TestMpShareData::testSongYear()
-{
-    MpSongData *song = new MpSongData();
-    song->setYear(1999);
-    mTest->setSongData(song);
-    QCOMPARE(mTest->year(), QString("1999"));
-    delete song;
-}
-
-void TestMpShareData::testSongGenre()
-{
-    MpSongData *song = new MpSongData();
-    song->setGenre("TestGenre");
-    mTest->setSongData(song);
-    QCOMPARE(mTest->genre(), QString("TestGenre"));
-    delete song;
-}
-
-void TestMpShareData::testSongComposer()
-{
-    MpSongData *song = new MpSongData();
-    song->setComposer("TestComposer");
-    mTest->setSongData(song);
-    QCOMPARE(mTest->composer(), QString("TestComposer"));
-    delete song;
-}
-
-void TestMpShareData::testSongAlbumTrack()
-{
-    MpSongData *song = new MpSongData();
-    song->setAlbumTrack("TestAlbumTrack");
-    mTest->setSongData(song);
-    QCOMPARE(mTest->albumTrack(), QString("TestAlbumTrack"));
-    delete song;
-}
-
-void TestMpShareData::testSongLink()
-{
-    MpSongData *song = new MpSongData();
-    song->setLink("TestLink");
-    mTest->setSongData(song);
-    QCOMPARE(mTest->link(), QString("TestLink"));
-    delete song;
-}
-*/
-
 void TestMpShareData::testSongNoInfo()
 {
     QCOMPARE(mTest->title(), QString("Unknown"));
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpsharedata/stub/src/mpsongdata.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpsharedata/stub/src/mpsongdata.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -342,6 +342,7 @@
 void MpSongData::setAlbumArtUri( const QString &albumArtUri)
 {
     //TX_ENTRY
+    Q_UNUSED(albumArtUri)
     mAlbumArt = mDefaultAlbumArt;
     emit albumArtReady();
     //TX_EXIT
@@ -358,8 +359,10 @@
         int error  )
 {
     //TX_ENTRY
+    Q_UNUSED( pixmap );
     Q_UNUSED( data );
-
+    Q_UNUSED( id );
+    Q_UNUSED( error );
     //TX_EXIT
 }
 
--- a/mpviewplugins/mpmediawallviewplugin/mpmediawallviewplugin.pro	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpviewplugins/mpmediawallviewplugin/mpmediawallviewplugin.pro	Fri Jul 23 17:31:12 2010 -0500
@@ -22,6 +22,7 @@
     TARGET.UID3 = 0x10207C94
     TARGET.CAPABILITY = All -TCB
     TARGET.EPOCALLOWDLLDATA = 1
+    MMP_RULES += SMPSAFE
 }
 
 SERVICE.INTERFACE_NAME = org.nokia.mmdt.MpxViewPlugin/1.0
--- a/mpviewplugins/mpplaybackviewplugin/mpplaybackviewplugin.pro	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpviewplugins/mpplaybackviewplugin/mpplaybackviewplugin.pro	Fri Jul 23 17:31:12 2010 -0500
@@ -21,6 +21,7 @@
     TARGET.UID3 = 0x10207C64
     TARGET.CAPABILITY = All -TCB
     TARGET.EPOCALLOWDLLDATA = 1
+    MMP_RULES += SMPSAFE
 }
 
 SERVICE.INTERFACE_NAME = org.nokia.mmdt.MpxViewPlugin/1.0
--- a/mpviewplugins/mpplaybackviewplugin/src/mpplaybackview.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpviewplugins/mpplaybackviewplugin/src/mpplaybackview.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -119,8 +119,6 @@
     connect ( mWindow, SIGNAL( viewReady() ), this, SLOT( connectButtons() ) );
     
     if ( mViewMode == MpCommon::DefaultView ) {
-        mEqualizerWidget = new MpEqualizerWidget();
-        mEqualizerWidget->prepareDialog();
         // Observe changes in settings.
         connect( MpSettingsManager::instance(), SIGNAL( shuffleChanged( bool ) ),
                  this, SLOT( shuffleChanged( bool ) ) );
@@ -570,11 +568,12 @@
 void MpPlaybackView::showEqualizerDialog()
 {
     TX_ENTRY
-
-    if( mEqualizerWidget )
-    {
-        mEqualizerWidget->show();
+    if ( !mEqualizerWidget ){
+        mEqualizerWidget = new MpEqualizerWidget();
+        mEqualizerWidget->prepareDialog();
     }
+	
+	mEqualizerWidget->show();
 
     TX_EXIT
 }
--- a/mpviewplugins/mpplaybackviewplugin/src/mpplaybackwidget.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpviewplugins/mpplaybackviewplugin/src/mpplaybackwidget.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -81,7 +81,7 @@
         tmpWidgetPtr = mDocumentLoader->findWidget(QString("albumArt"));
         mAlbumArt = qobject_cast<MpAlbumCoverWidget*>(tmpWidgetPtr);
         mAlbumArt->setEnabled( false );
-        mAlbumArt->setDefaultIcon( HbIcon( "qtg_large_music_album" ) );
+        mAlbumArt->setDefaultIcon( HbIcon( "qtg_large_album_art" ) );
         tmpWidgetPtr = mDocumentLoader->findWidget(QString("realAudio"));
         mRealAudioIndicator = qobject_cast<HbLabel*>(tmpWidgetPtr);
         mRealAudioIndicator->hide();
@@ -228,6 +228,7 @@
     mProgressBar->setSliderValue(value);
     mProgressBar->setMinText( formatDuration(value) );
     mProgressBar->setMaxText( formatDuration(mDuration  - value) );
+    mProgressBar->setSliderToolTip( formatDuration(value) );
     if ( !mProgreesBarDragging ) {
         // Click on the progress bar, not a drag.
         emit setPlaybackPosition( KMicroSecToMiliSec * value );
--- a/mpviewplugins/mpsettingsviewplugin/mpsettingsviewplugin.pro	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpviewplugins/mpsettingsviewplugin/mpsettingsviewplugin.pro	Fri Jul 23 17:31:12 2010 -0500
@@ -21,6 +21,7 @@
     TARGET.UID3 = 0x10207C66
     TARGET.CAPABILITY = All -TCB
     TARGET.EPOCALLOWDLLDATA = 1
+    MMP_RULES += SMPSAFE
 }
 
 SERVICE.INTERFACE_NAME = org.nokia.mmdt.MpxViewPlugin/1.0
--- a/mpviewplugins/mpsettingsviewplugin/tsrc/tsrc.pro	Fri Jul 09 16:27:03 2010 -0500
+++ b/mpviewplugins/mpsettingsviewplugin/tsrc/tsrc.pro	Fri Jul 23 17:31:12 2010 -0500
@@ -16,7 +16,8 @@
 
 TEMPLATE = subdirs
 
-SUBDIRS += unittest_mpsettingsviewplugin
+SUBDIRS += unittest_mpsettingsviewplugin \
+           unittest_mpsettingsaudioeffectswidget
 
 CONFIG += ordered
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsaudioeffectswidget/inc/unittest_mpsettingsaudioeffectswidget.h	Fri Jul 23 17:31:12 2010 -0500
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Unit test for mpaudioeffectswidget
+*
+*/
+
+#ifndef TestMpSettingsAudioEffectsWidget_H
+#define TestMpSettingsAudioEffectsWidget_H
+
+#include <QtTest/QtTest>
+
+class QTranslator;
+class MpSettingsAudioEffectsWidget;
+
+class TestMpSettingsAudioEffectsWidget: public QObject
+{
+    Q_OBJECT
+
+public:
+
+    TestMpSettingsAudioEffectsWidget();
+    virtual ~TestMpSettingsAudioEffectsWidget();
+
+signals:
+
+public slots:
+    void initTestCase();
+    void cleanupTestCase();
+    void init();
+    void cleanup();
+
+private slots:
+    void testInitializeSlider();
+    void testInitializeLoudnessOn();
+    void testInitializeLoudnessOff();
+    void testFilterSignals();
+
+private:
+
+    MpSettingsAudioEffectsWidget *mTest;
+    QTranslator       *mMpTranslator; // Own
+
+};
+
+#endif  // MpSettingsAudioEffectsWidget_H
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsaudioeffectswidget/src/unittest_mpsettingsaudioeffectswidget.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -0,0 +1,175 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Unit test for mpsettingsaudioeffectswidget
+*
+*/
+
+#include <QMetaType>
+#include <QtGui>
+#include <QTranslator>
+#include <QLocale>
+
+#include "unittest_mpsettingsaudioeffectswidget.h"
+#include "mpenginefactory.h"
+#include "mpengine.h"
+
+// Do this so we can access all member variables.
+#define private public
+#include "MpSettingsAudioEffectsWidget.h"
+#undef private
+
+//This so we can test private functions
+//#include "../../src/mpsettingsaudioeffectswidget.cpp"
+
+
+
+/*!
+ Make our test case a stand-alone executable that runs all the test functions.
+ */
+int main(int argc, char *argv[])
+{
+    QApplication app(argc, argv);
+    TestMpSettingsAudioEffectsWidget tv;
+
+    if ( argc > 1 ) {
+        return QTest::qExec( &tv, argc, argv);
+    }
+    else {
+        char *pass[3];
+        pass[0] = argv[0];
+        pass[1] = "-o";
+        pass[2] = "c:\\data\\unittest_mpsettingsaudioeffectswidget.txt";
+
+        return QTest::qExec(&tv, 3, pass);
+    }
+}
+
+TestMpSettingsAudioEffectsWidget::TestMpSettingsAudioEffectsWidget()
+    : mTest(0),
+      mMpTranslator(0)
+{
+}
+
+TestMpSettingsAudioEffectsWidget::~TestMpSettingsAudioEffectsWidget()
+{
+    delete mTest;
+    delete mMpTranslator;
+}
+
+/*!
+ Called before the first testfunction is executed.
+ */
+void TestMpSettingsAudioEffectsWidget::initTestCase()
+{
+    QString lang = QLocale::system().name();
+    QString path = QString("z:/resource/qt/translations/");
+    bool translatorLoaded = false;
+
+    mMpTranslator = new QTranslator(this);
+    translatorLoaded = mMpTranslator->load(path + "musicplayer_" + lang);
+    if ( translatorLoaded ) {
+        qApp->installTranslator(mMpTranslator);
+    }
+}   
+
+/*!
+ Called after the last testfunction was executed.
+ */
+void TestMpSettingsAudioEffectsWidget::cleanupTestCase()
+{
+}
+
+/*!
+ Called before each testfunction is executed.
+ */
+void TestMpSettingsAudioEffectsWidget::init()
+{
+    MpEngineFactory::createSharedEngine();
+    mTest = new MpSettingsAudioEffectsWidget();
+}
+
+/*!
+ Called after every testfunction.
+ */
+void TestMpSettingsAudioEffectsWidget::cleanup()
+{
+    delete mTest;
+    mTest = 0;
+    MpEngineFactory::close();
+}
+
+/*!
+ Tests constructor.
+ */
+void TestMpSettingsAudioEffectsWidget::testInitializeSlider()
+{
+    mTest->initialize();
+    QVERIFY(mTest->mMpEngine != 0 );
+
+    MpEngineFactory::sharedEngine()->setLoudness( false );
+
+    QCOMPARE(mTest->mModel->rowCount(),2 );
+    QCOMPARE(mTest->mModel->columnCount(),1 );
+
+
+    QCOMPARE(  mTest->mModel->item( 0 )->type(), HbDataFormModelItem::SliderItem );
+    QCOMPARE(  mTest->mModel->item( 1 )->type(), HbDataFormModelItem::ToggleValueItem );
+
+    //slider
+    QCOMPARE(  mTest->mModel->item( 0 )->contentWidgetData("minimum"), QVariant(-100) );
+    QCOMPARE(  mTest->mModel->item( 0 )->contentWidgetData("maximum"), QVariant(100) );
+    QCOMPARE(  mTest->mModel->item( 0 )->contentWidgetData("majorTickInterval"), QVariant(100) );
+    QCOMPARE(  mTest->mModel->item( 0 )->contentWidgetData("minorTickInterval"), QVariant(25) );
+    QCOMPARE(  mTest->mModel->item( 0 )->contentWidgetData("singleStep"), QVariant(25) );
+    QCOMPARE(  mTest->mModel->item( 0 )->contentWidgetData("toolTipVisible"), QVariant(false) );   
+    int position = Hb::SliderTicksRight;
+    QCOMPARE((mTest->mModel->item( 0 )->contentWidgetData("tickPosition")).toInt(), position);
+    QCOMPARE(  mTest->mModel->item( 0 )->contentWidgetData("sliderPosition"), QVariant(mTest->mMpEngine->balance()) ); //this needs to be checked
+    QCOMPARE(  mTest->mModel->item( 0 )->contentWidgetData("trackFilled"), QVariant(false) );
+
+}
+
+void TestMpSettingsAudioEffectsWidget::testInitializeLoudnessOff()
+{
+    MpEngineFactory::sharedEngine()->setLoudness( false );
+    mTest->initialize();
+    QVERIFY(  mTest->mModel->item( 1 )->type() == HbDataFormModelItem::ToggleValueItem );
+    QCOMPARE(  mTest->mModel->item( 1 )->contentWidgetData("text"), QVariant(hbTrId( "txt_mus_setlabel_loudness_val_off" )) );
+    QCOMPARE(  mTest->mModel->item( 1 )->contentWidgetData("additionalText"), QVariant(hbTrId( "txt_mus_setlabel_loudness_val_on" )) );
+}
+
+void TestMpSettingsAudioEffectsWidget::testInitializeLoudnessOn()
+{
+    MpEngineFactory::sharedEngine()->setLoudness( true );
+    mTest->initialize();
+    QVERIFY(  mTest->mModel->item( 1 )->type() == HbDataFormModelItem::ToggleValueItem );
+    QCOMPARE(  mTest->mModel->item( 1 )->contentWidgetData("text"), QVariant(hbTrId( "txt_mus_setlabel_loudness_val_on" )) );
+    QCOMPARE(  mTest->mModel->item( 1 )->contentWidgetData("additionalText"), QVariant(hbTrId( "txt_mus_setlabel_loudness_val_off" )) );
+
+}
+
+
+void TestMpSettingsAudioEffectsWidget::testFilterSignals()
+{
+    MpEngineFactory::sharedEngine()->setLoudness( false );
+    mTest->initialize();
+    QCOMPARE(MpEngineFactory::sharedEngine()->loudness(), false);
+    QModelIndex index1 = mTest->mModel->indexFromItem((mTest->mModel->item(1)));
+    mTest->filterSignals(index1,index1);
+    QCOMPARE(MpEngineFactory::sharedEngine()->loudness(), true);
+}
+
+
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsaudioeffectswidget/stub/inc/mpengine.h	Fri Jul 23 17:31:12 2010 -0500
@@ -0,0 +1,74 @@
+/*
+* 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 "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Music Player engine.
+*
+*/
+
+#ifndef MPENGINE_H
+#define MPENGINE_H
+
+#include <QObject>
+#include <QStringList>
+//#include "mpmpxcollectionviewdefs.h"
+//#include "mpmpxcommondefs.h"
+//#include "mpcommondefs.h"
+
+//class MpMpxCollectionData;
+//class MpPlaybackData;
+//class MpSongData;
+//class XQSharableFile;
+class MpEngine : public QObject
+{
+    Q_OBJECT
+
+    friend class MpEngineFactory;
+
+public:
+    enum EngineMode{
+        StandAlone,
+        Fetch,
+        Embedded,
+        MediaBrowsing
+    };
+    
+private:
+    explicit MpEngine();
+
+public:
+
+    virtual ~MpEngine();
+
+    // Audio Effects related
+    int balance();
+    bool loudness();
+
+signals:
+
+public slots:
+    // Audio Effects related
+    void setBalance( int balance );
+    void setLoudness( bool mode );
+
+private:
+
+    Q_DISABLE_COPY( MpEngine )
+
+public:
+    int mBalance;
+    bool mLoudness;
+
+
+};
+
+#endif // MPENGINE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsaudioeffectswidget/stub/inc/mpenginefactory.h	Fri Jul 23 17:31:12 2010 -0500
@@ -0,0 +1,44 @@
+/*
+* 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 "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Music Player engine.
+*
+*/
+
+#ifndef MPENGINEFACTORY_H
+#define MPENGINEFACTORY_H
+
+#include <QObject>
+
+#include "mpengine.h"
+#include "mpcommondefs.h"
+
+
+class MpEngineFactory
+{
+private:
+    explicit MpEngineFactory();
+
+public:
+    virtual ~MpEngineFactory();
+    static MpEngineFactory * instance();
+    
+    static MpEngine *createSharedEngine( TUid uid = TUid::Uid( MpCommon::KMusicPlayerUid ), MpEngine::EngineMode mode = MpEngine::StandAlone );
+    static MpEngine *sharedEngine();
+    static void close();
+	
+public:
+    MpEngine    *mSharedEngine;
+};
+
+#endif // MPENGINEFACTORY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsaudioeffectswidget/stub/src/mpengine.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -0,0 +1,70 @@
+/*
+* 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 "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Wrapper for mpx framework utilities.
+*
+*/
+
+#include "mpengine.h"
+#include "mptrace.h"
+
+
+MpEngine::MpEngine()
+    : mBalance(0),
+    mLoudness(0)
+{
+    TX_LOG_ARGS("Stub")
+}
+
+/*!
+ Destructs music player engine.
+ */
+MpEngine::~MpEngine()
+{
+    TX_ENTRY_ARGS("Stub")
+}
+
+// Audio Effects related
+/*!
+ Destructs music player engine.
+ */
+int MpEngine::balance()
+{
+    return mBalance;
+}
+
+/*!
+ Destructs music player engine.
+ */
+bool MpEngine::loudness()
+{
+    return mLoudness;
+}
+
+
+//slots:
+/*!
+ Destructs music player engine.
+ */
+void MpEngine::setBalance( int balance )
+{
+     mBalance=balance;
+}
+
+/*!
+ Destructs music player engine.
+ */
+void MpEngine::setLoudness( bool mode )
+{
+    mLoudness=mode;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsaudioeffectswidget/stub/src/mpenginefactory.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -0,0 +1,86 @@
+/*
+* 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 "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: mp engine factory.
+*
+*/
+
+#include "mpengine.h"
+#include "mpenginefactory.h"
+#include "mptrace.h"
+
+/*!
+    \class MpEngineFactory
+    \brief Music Player engine factory.
+
+    MP Engine factory is responsible to create and mantain ownership of MP engines.
+*/
+
+/*!
+ Constructs music player engine factory.
+ */
+MpEngineFactory::MpEngineFactory()
+    : mSharedEngine( 0 )
+{
+    TX_ENTRY_ARGS("Stub")
+}
+
+/*!
+ Destructs music player engine factory.
+ */
+MpEngineFactory::~MpEngineFactory()
+{
+}
+
+/*!
+ Returns the singleton instance of music player engine factory.
+ */
+MpEngineFactory * MpEngineFactory::instance()
+{
+    static MpEngineFactory instance;
+    return &instance;
+}
+
+/*!
+ Returns an instance to an engine with \a hostUid, and \a mode, if the shared engine is 
+ already created parameters are ignored.
+ */
+MpEngine *MpEngineFactory::createSharedEngine( TUid hostUid , MpEngine::EngineMode mode )
+{
+    Q_UNUSED( hostUid );
+    Q_UNUSED( mode );
+    if ( !instance()->mSharedEngine ) {
+        instance()->mSharedEngine = new MpEngine();
+    }
+    return instance()->mSharedEngine;
+}
+
+/*!
+ Returns an instance to the current shared engine previously created with createEngine().
+ */
+MpEngine *MpEngineFactory::sharedEngine()
+{
+    return instance()->mSharedEngine;
+}
+
+/*!
+ Closes all engines created on this process.
+ */
+void MpEngineFactory::close()
+{
+    if ( instance()->mSharedEngine ) {
+        delete instance()->mSharedEngine;
+        instance()->mSharedEngine = 0;
+        
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsaudioeffectswidget/unittest_mpsettingsaudioeffectswidget.pro	Fri Jul 23 17:31:12 2010 -0500
@@ -0,0 +1,43 @@
+#
+# 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 "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: mpsettingsaudioeffectswidget unit test project file.
+#
+
+TEMPLATE = app
+CONFIG += qtestlib hb symbian_test
+TARGET = unittest_mpsettingsaudioeffectswidget
+TARGET.CAPABILITY = CAP_APPLICATION
+
+DEPENDPATH += .
+INCLUDEPATH += ./stub/inc \
+               ../../inc \
+               ../../../../inc
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+LIBS += -lestor.dll \
+        -lfbscli.dll
+
+symbian: TARGET.EPOCALLOWDLLDATA = 1
+
+HEADERS += stub/inc/mpengine.h \
+           stub/inc/mpenginefactory.h \
+           inc/unittest_mpsettingsaudioeffectswidget.h \
+           ../../inc/mpsettingsaudioeffectswidget.h
+
+SOURCES += stub/src/mpengine.cpp \
+           stub/src/mpenginefactory.cpp \
+           src/unittest_mpsettingsaudioeffectswidget.cpp \
+           ../../src/mpsettingsaudioeffectswidget.cpp
+
+
--- a/musicservices/musicservices.pro	Fri Jul 09 16:27:03 2010 -0500
+++ b/musicservices/musicservices.pro	Fri Jul 23 17:31:12 2010 -0500
@@ -19,7 +19,7 @@
 TARGET = musicservices
 symbian: { 
     TARGET.UID3 = 0x10207C69
-    MMP_RULES += "DEFFILE musicservices.def"
+    MMP_RULES += "DEFFILE musicservices.def" SMPSAFE
     defFilePath = .
     TARGET.CAPABILITY = CAP_GENERAL_DLL
     TARGET.EPOCALLOWDLLDATA = 1
--- a/musicwidgetplugin/src/musicwidget.cpp	Fri Jul 09 16:27:03 2010 -0500
+++ b/musicwidgetplugin/src/musicwidget.cpp	Fri Jul 23 17:31:12 2010 -0500
@@ -59,7 +59,7 @@
 const QLatin1String ICON_LARGE_MUSIC_PLAYER ("qtg_large_music_player");
 /**  Music Player shortcut icon */
 const QLatin1String ICON_FIRST_TIME_USE ("qtg_large_music_empty");
-const QLatin1String ICON_DEFAULT_ART ("qtg_large_music_album");
+const QLatin1String ICON_DEFAULT_ART ("qtg_large_album_art");
 
 /**  HsWidget normal background */
 const QLatin1String WIDGET_BG_NORMAL ("qtg_fr_hswidget_normal");
--- a/utilities/mpalbumcoverwidget/mpalbumcoverwidget.pro	Fri Jul 09 16:27:03 2010 -0500
+++ b/utilities/mpalbumcoverwidget/mpalbumcoverwidget.pro	Fri Jul 23 17:31:12 2010 -0500
@@ -19,7 +19,7 @@
 TARGET = mpalbumcoverwidget
 symbian: { 
     TARGET.UID3 = 0x10207C96
-    MMP_RULES += "DEFFILE mpalbumcoverwidget.def"
+    MMP_RULES += "DEFFILE mpalbumcoverwidget.def" SMPSAFE
     defFilePath = .
     TARGET.CAPABILITY = CAP_GENERAL_DLL
     TARGET.EPOCALLOWDLLDATA = 1
--- a/utilities/mpnowplayingbanner/mpnowplayingbanner.pro	Fri Jul 09 16:27:03 2010 -0500
+++ b/utilities/mpnowplayingbanner/mpnowplayingbanner.pro	Fri Jul 23 17:31:12 2010 -0500
@@ -20,7 +20,7 @@
 TARGET = mpnowplayingbanner
 symbian: { 
     TARGET.UID3 = 0x10207C67
-    MMP_RULES += "DEFFILE mpnowplayingbanner.def"
+    MMP_RULES += "DEFFILE mpnowplayingbanner.def" SMPSAFE
     defFilePath = .
     TARGET.CAPABILITY = CAP_GENERAL_DLL
     TARGET.EPOCALLOWDLLDATA = 1
--- a/utilities/mpnowplayingbanner/resources/banner_color.css	Fri Jul 09 16:27:03 2010 -0500
+++ b/utilities/mpnowplayingbanner/resources/banner_color.css	Fri Jul 23 17:31:12 2010 -0500
@@ -2,7 +2,7 @@
 
 HbLabel#bannerLabel[state = "normal"]::text
 {
-    color:var(qtc_multimedia_trans);
+    color:var(qtc_multimedia_trans_normal);
 }
 
 HbLabel#bannerLabel[state = "pressed"]::text
@@ -15,7 +15,7 @@
 
 HbLabel#bannerLabel[state = "normal"]::icon
 {
-    color:var(qtc_multimedia_trans);
+    color:var(qtc_multimedia_trans_normal);
 }
 
 HbLabel#bannerLabel[state = "pressed"]::icon
--- a/utilities/mpsettingsmanager/mpsettingsmanager.pro	Fri Jul 09 16:27:03 2010 -0500
+++ b/utilities/mpsettingsmanager/mpsettingsmanager.pro	Fri Jul 23 17:31:12 2010 -0500
@@ -21,7 +21,7 @@
 TARGET = mpsettingsmanager
 symbian: { 
     TARGET.UID3 = 0x10207C68
-    MMP_RULES += "DEFFILE mpsettingsmanager.def"
+    MMP_RULES += "DEFFILE mpsettingsmanager.def" SMPSAFE
     defFilePath = .
     TARGET.CAPABILITY = CAP_GENERAL_DLL
     TARGET.EPOCALLOWDLLDATA = 1