201031
authorhgs
Fri, 06 Aug 2010 16:51:36 -0500
changeset 47 4cc1412daed0
parent 45 612c4815aebe
child 51 560ce2306a17
201031
app/app.pro
app/inc/mpmainwindow.h
app/rom/musicplayer.iby
app/src/mpglobalpopuphandler.cpp
app/src/mpmainwindow.cpp
app/tsrc/tsrc.pro
app/tsrc/unittest_mpglobalpopuphandler/inc/unittest_mpglobalpopuphandler.h
app/tsrc/unittest_mpglobalpopuphandler/src/unittest_mpglobalpopuphandler.cpp
app/tsrc/unittest_mpglobalpopuphandler/stub/inc/mpengine.h
app/tsrc/unittest_mpglobalpopuphandler/stub/inc/mpenginefactory.h
app/tsrc/unittest_mpglobalpopuphandler/stub/inc/mpmtpinfolink.h
app/tsrc/unittest_mpglobalpopuphandler/stub/inc/mpsettingsmanager.h
app/tsrc/unittest_mpglobalpopuphandler/stub/inc/mpsongscanner.h
app/tsrc/unittest_mpglobalpopuphandler/stub/src/mpengine.cpp
app/tsrc/unittest_mpglobalpopuphandler/stub/src/mpenginefactory.cpp
app/tsrc/unittest_mpglobalpopuphandler/stub/src/mpmtpinfolink.cpp
app/tsrc/unittest_mpglobalpopuphandler/stub/src/mpsettingsmanager.cpp
app/tsrc/unittest_mpglobalpopuphandler/stub/src/mpsongscanner.cpp
app/tsrc/unittest_mpglobalpopuphandler/unittest_mpglobalpopuphandler.pro
inc/mpcommondefs.h
inc/mpengine.h
inc/mpmediacontroller.h
mpdata/src/mpsongdata_p.cpp
mpdata/tsrc/unittest_mpcollectiondatamodel/stub/inc/mpcollectionalbumartmanager.h
mpdata/tsrc/unittest_mpcollectiondatamodel/stub/src/mpcollectionalbumartmanager.cpp
mpdata/tsrc/unittest_mpcollectiontbonelistdatamodel/stub/inc/mpmpxcollectiondata.h
mpdata/tsrc/unittest_mpcollectiontbonelistdatamodel/stub/inc/mpplaybackdata.h
mpdata/tsrc/unittest_mpcollectiontbonelistdatamodel/stub/src/mpmpxcollectiondata.cpp
mpdata/tsrc/unittest_mpcollectiontbonelistdatamodel/stub/src/mpplaybackdata.cpp
mpdata/tsrc/unittest_mpcollectiontbonelistdatamodel/unittest_mpcollectiontbonelistdatamodel.pro
mpdata/tsrc/unittest_mpplaybackdata/src/unittest_mpplaybackdata.cpp
mpengine/bwins/mpengineu.def
mpengine/eabi/mpengineu.def
mpengine/inc/mpmediakeyhandler.h
mpengine/inc/mpmediakeyhandler_p.h
mpengine/inc/mpmediakeyremconresponse.h
mpengine/inc/mpmpxplaybackframeworkwrapper.h
mpengine/inc/mpmpxplaybackframeworkwrapper_p.h
mpengine/mpengine.pro
mpengine/src/mpengine.cpp
mpengine/src/mpmediakeyhandler.cpp
mpengine/src/mpmediakeyhandler_p.cpp
mpengine/src/mpmediakeyremconresponse.cpp
mpengine/src/mpmpxcollectionframeworkwrapper_p.cpp
mpengine/src/mpmpxplaybackframeworkwrapper.cpp
mpengine/src/mpmpxplaybackframeworkwrapper_p.cpp
mpengine/tsrc/tsrc.pro
mpengine/tsrc/unittest_mpengine/inc/unittest_mpengine.h
mpengine/tsrc/unittest_mpengine/src/unittest_mpengine.cpp
mpengine/tsrc/unittest_mpengine/stub/inc/mpaudioeffectsframeworkwrapper.h
mpengine/tsrc/unittest_mpengine/stub/inc/mpequalizerframeworkwrapper.h
mpengine/tsrc/unittest_mpengine/stub/inc/mpmediakeyhandler.h
mpengine/tsrc/unittest_mpengine/stub/inc/mpmpxcollectiondata.h
mpengine/tsrc/unittest_mpengine/stub/inc/mpmpxcollectionframeworkwrapper.h
mpengine/tsrc/unittest_mpengine/stub/inc/mpmpxharvesterframeworkwrapper.h
mpengine/tsrc/unittest_mpengine/stub/inc/mpmpxplaybackframeworkwrapper.h
mpengine/tsrc/unittest_mpengine/stub/inc/mpplaybackdata.h
mpengine/tsrc/unittest_mpengine/stub/inc/mpsettingsmanager.h
mpengine/tsrc/unittest_mpengine/stub/inc/mpsongdata.h
mpengine/tsrc/unittest_mpengine/stub/inc/mpsongscanner.h
mpengine/tsrc/unittest_mpengine/stub/src/mpaudioeffectsframeworkwrapper.cpp
mpengine/tsrc/unittest_mpengine/stub/src/mpequalizerframeworkwrapper.cpp
mpengine/tsrc/unittest_mpengine/stub/src/mpmediakeyhandler.cpp
mpengine/tsrc/unittest_mpengine/stub/src/mpmpxcollectiondata.cpp
mpengine/tsrc/unittest_mpengine/stub/src/mpmpxcollectionframeworkwrapper.cpp
mpengine/tsrc/unittest_mpengine/stub/src/mpmpxharvesterframeworkwrapper.cpp
mpengine/tsrc/unittest_mpengine/stub/src/mpmpxplaybackframeworkwrapper.cpp
mpengine/tsrc/unittest_mpengine/stub/src/mpplaybackdata.cpp
mpengine/tsrc/unittest_mpengine/stub/src/mpsettingsmanager.cpp
mpengine/tsrc/unittest_mpengine/stub/src/mpsongdata.cpp
mpengine/tsrc/unittest_mpengine/stub/src/mpsongscanner.cpp
mpengine/tsrc/unittest_mpengine/unittest_mpengine.pro
mpengine/tsrc/unittest_mpenginefactory/inc/unittest_mpenginefactory.h
mpengine/tsrc/unittest_mpenginefactory/src/unittest_mpenginefactory.cpp
mpengine/tsrc/unittest_mpenginefactory/stub/inc/mpengine.h
mpengine/tsrc/unittest_mpenginefactory/stub/src/mpengine.cpp
mpengine/tsrc/unittest_mpenginefactory/unittest_mpenginefactory.pro
mpengine/tsrc/unittest_mpmediakeyhandler/inc/unittest_mpmediakeyhandler.h
mpengine/tsrc/unittest_mpmediakeyhandler/src/unittest_mpmediakeyhandler.cpp
mpengine/tsrc/unittest_mpmediakeyhandler/stub/inc/mpxplaybackutility.h
mpengine/tsrc/unittest_mpmediakeyhandler/stub/inc/remconcoreapitarget.h
mpengine/tsrc/unittest_mpmediakeyhandler/stub/inc/remconinterfaceselector.h
mpengine/tsrc/unittest_mpmediakeyhandler/stub/src/mpxplaybackutility.cpp
mpengine/tsrc/unittest_mpmediakeyhandler/stub/src/remconcoreapitarget.cpp
mpengine/tsrc/unittest_mpmediakeyhandler/stub/src/remconinterfaceselector.cpp
mpengine/tsrc/unittest_mpmediakeyhandler/unittest_mpmediakeyhandler.pro
mpengine/tsrc/unittest_mpmpxplaybackframeworkwrapper/inc/unittest_mpmpxplaybackframeworkwrapper.h
mpengine/tsrc/unittest_mpmpxplaybackframeworkwrapper/src/unittest_mpmpxplaybackframeworkwrapper.cpp
mpengine/tsrc/unittest_mpmpxplaybackframeworkwrapper/stub/inc/mpxplaybackutility.h
mpengine/tsrc/unittest_mpmpxplaybackframeworkwrapper/stub/src/mpxplaybackutility.cpp
mpserviceplugins/m3uplaylistplugin/src/mpxm3uplaylistexporter.cpp
mpserviceplugins/mpxsqlitedbcommon/src/mpxdbcommonutil.cpp
mpserviceplugins/mpxsqlitedbcommon/src/mpxdbmanager.cpp
mpserviceplugins/mpxsqlitedbcommon/src/mpxdbtable.cpp
mpserviceplugins/mpxsqlitedbhgplugin/inc/mpxcollectiondbdef.h
mpserviceplugins/mpxsqlitedbhgplugin/inc/mpxdbpluginqueries.h
mpserviceplugins/mpxsqlitedbhgplugin/src/mpxdbmusic.cpp
mpserviceplugins/mpxsqlitedbhgplugin/src/mpxdbplugin.cpp
mpviewplugins/mpcollectionviewplugin/mpcollectionviewplugin.pro
mpviewplugins/mpcollectionviewplugin/resources/mpcollectionviewresources.qrc
mpviewplugins/mpcollectionviewplugin/src/mpcollectioncontainerallsongs.cpp
mpviewplugins/mpcollectionviewplugin/tsrc/unittest_mpcollectioncontainers/src/unittest_mpcollectioncontainers.cpp
mpviewplugins/mpcollectionviewplugin/tsrc/unittest_mpcollectioncontainers/stub/inc/hgmediawall.h
mpviewplugins/mpcollectionviewplugin/tsrc/unittest_mpcollectioncontainers/stub/inc/mpmpxcollectiondata.h
mpviewplugins/mpcollectionviewplugin/tsrc/unittest_mpcollectioncontainers/stub/inc/mpnowplayingwidget.h
mpviewplugins/mpcollectionviewplugin/tsrc/unittest_mpcollectioncontainers/stub/src/hgmediawall.cpp
mpviewplugins/mpcollectionviewplugin/tsrc/unittest_mpcollectioncontainers/stub/src/mpmpxcollectiondata.cpp
mpviewplugins/mpcollectionviewplugin/tsrc/unittest_mpcollectioncontainers/stub/src/mpnowplayingwidget.cpp
mpviewplugins/mpcollectionviewplugin/tsrc/unittest_mpcollectioncontainers/unittest_mpcollectioncontainers.pro
mpviewplugins/mpdetailsviewplugin/inc/mpdetailssharedialog.h
mpviewplugins/mpdetailsviewplugin/inc/mpdetailsview.h
mpviewplugins/mpdetailsviewplugin/inc/mpquerymanager.h
mpviewplugins/mpdetailsviewplugin/inc/mpsharedata.h
mpviewplugins/mpdetailsviewplugin/mpdetailsviewplugin.pro
mpviewplugins/mpdetailsviewplugin/resources/index.html
mpviewplugins/mpdetailsviewplugin/resources/mpdetailsview.docml
mpviewplugins/mpdetailsviewplugin/resources/mpdetailsviewresources.qrc
mpviewplugins/mpdetailsviewplugin/resources/musiccontext.css
mpviewplugins/mpdetailsviewplugin/resources/musiccontext.js
mpviewplugins/mpdetailsviewplugin/resources/ovicredentials.txt
mpviewplugins/mpdetailsviewplugin/resources/qtg_large_music_album.svg
mpviewplugins/mpdetailsviewplugin/src/mpdetailssharedialog.cpp
mpviewplugins/mpdetailsviewplugin/src/mpdetailsview.cpp
mpviewplugins/mpdetailsviewplugin/src/mpquerymanager.cpp
mpviewplugins/mpdetailsviewplugin/src/mpsharedata.cpp
mpviewplugins/mpdetailsviewplugin/tsrc/UT_ALL_mpdetailsviewplugin.pkg
mpviewplugins/mpdetailsviewplugin/tsrc/UT_ALL_mpdetailsviewplugin.sisx
mpviewplugins/mpdetailsviewplugin/tsrc/megapak.pkg
mpviewplugins/mpdetailsviewplugin/tsrc/tsrc.pro
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailssharedialog/UT_mpdetailssharedialog.pkg
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailssharedialog/inc/unittest_mpdetailssharedialog.h
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailssharedialog/sis.bat
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailssharedialog/src/unittest_mpdetailssharedialog.cpp
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailssharedialog/stub/inc/hbmessagebox.h
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailssharedialog/stub/inc/mpsongdata.h
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailssharedialog/stub/inc/qsysteminfo.h
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailssharedialog/stub/src/hbmessagebox.cpp
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailssharedialog/stub/src/mpsongdata.cpp
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailssharedialog/stub/src/qsysteminfo.cpp
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailssharedialog/unittest_mpdetailssharedialog.pro
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/inc/unittest_mpdetailsview.h
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/src/unittest_mpdetailsview.cpp
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/stub/inc/mpdetailssharedialog.h
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/mpquerymanager.cpp
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/unittest_mpdetailsview.pro
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpquerymanager/src/unittest_mpquerymanager.cpp
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpquerymanager/stub/inc/thumbnailmanager_qt.h
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpquerymanager/stub/src/thumbnailmanager_qt.cpp
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpquerymanager/unittest_mpquerymanager.pro
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpsharedata/UT_mpsharedata.pkg
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpsharedata/inc/unittest_mpsharedata.h
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpsharedata/sis.bat
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpsharedata/src/unittest_mpsharedata.cpp
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpsharedata/stub/inc/mpsongdata.h
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpsharedata/stub/src/mpsongdata.cpp
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpsharedata/unittest_mpsharedata.pro
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_resources/JsTestDriver-1.2.1.jar
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_resources/JsTestDriver.conf
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_resources/readme.txt
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_resources/test-src/MusicTest.js
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_resources/test-src/oviapi.js
mpviewplugins/mpdetailsviewplugin/tsrc/unittest_resources/test-src/publishplayer.js
mpviewplugins/mpmediawallviewplugin/mpmediawallviewplugin.pro
mpviewplugins/mpmediawallviewplugin/resources/mpmediawallviewresources.qrc
mpviewplugins/mpmediawallviewplugin/src/mptracklistwidget.cpp
mpviewplugins/mpmediawallviewplugin/tsrc/tsrc.pro
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/inc/unittest_mpmediawallview.h
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/src/unittest_mpmediawallview.cpp
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/inc/hgmediawall.h
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/inc/mpalbumcoverwidget.h
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/inc/mpcollectiondatamodel.h
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/inc/mpcollectiontbonelistdatamodel.h
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/inc/mpengine.h
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/inc/mpenginefactory.h
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/inc/mpmediawalldocumentloader.h
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/inc/mpmpxcollectiondata.h
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/inc/mpplaybackdata.h
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/inc/mpreflectioneffect.h
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/inc/mptracklistwidget.h
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/src/hgmediawall.cpp
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/src/mpalbumcoverwidget.cpp
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/src/mpcollectiondatamodel.cpp
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/src/mpcollectiontbonelistdatamodel.cpp
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/src/mpengine.cpp
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/src/mpenginefactory.cpp
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/src/mpmediawalldocumentloader.cpp
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/src/mpmpxcollectiondata.cpp
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/src/mpplaybackdata.cpp
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/src/mpreflectioneffect.cpp
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/src/mptracklistwidget.cpp
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/unittest_mpmediawallview.pro
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallviewplugin/inc/unittest_mpmediawallviewplugin.h
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallviewplugin/src/unittest_mpmediawallviewplugin.cpp
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallviewplugin/stub/inc/mpmediawallview.h
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallviewplugin/stub/inc/xqplugin.h
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallviewplugin/stub/src/mpmediawallview.cpp
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallviewplugin/unittest_mpmediawallviewplugin.pro
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpreflectioneffect/inc/unittest_mpreflectioneffect.h
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpreflectioneffect/src/unittest_mpreflectioneffect.cpp
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpreflectioneffect/unittest_mpreflectioneffect.pro
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mptracklistwidget/inc/unittest_mptracklistwidget.h
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mptracklistwidget/src/unittest_mptracklistwidget.cpp
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mptracklistwidget/stub/inc/hbinstancestub.h
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mptracklistwidget/stub/inc/hbmainwindowstub.h
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mptracklistwidget/stub/src/hbinstancestub.cpp
mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mptracklistwidget/unittest_mptracklistwidget.pro
mpviewplugins/mpplaybackviewplugin/mpplaybackviewplugin.pro
mpviewplugins/mpplaybackviewplugin/resources/mpplaybackviewpluginresources.qrc
mpviewplugins/mpplaybackviewplugin/tsrc/tsrc.pro
mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/inc/unittest_mpplaybackview.h
mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/src/unittest_mpplaybackview.cpp
mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/stub/inc/mpengine.h
mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/stub/inc/mpenginefactory.h
mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/stub/inc/mpequalizerwidget.h
mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/stub/inc/mpplaybackdata.h
mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/stub/inc/mpplaybackwidget.h
mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/stub/inc/mpsettingsmanager.h
mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/stub/inc/mpviewbase.h
mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/stub/src/mpengine.cpp
mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/stub/src/mpenginefactory.cpp
mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/stub/src/mpequalizerwidget.cpp
mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/stub/src/mpplaybackdata.cpp
mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/stub/src/mpplaybackwidget.cpp
mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/stub/src/mpsettingsmanager.cpp
mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/unittest_mpplaybackview.pro
mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackwidget/inc/unittest_mpplaybackwidget.h
mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackwidget/src/unittest_mpplaybackwidget.cpp
mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackwidget/stub/inc/mpalbumcoverwidget.h
mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackwidget/stub/inc/mpplaybackdata.h
mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackwidget/stub/inc/mpplaybackdocumentloader.h
mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackwidget/stub/src/mpalbumcoverwidget.cpp
mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackwidget/stub/src/mpplaybackdata.cpp
mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackwidget/stub/src/mpplaybackdocumentloader.cpp
mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackwidget/unittest_mpplaybackwidget.pro
mpviewplugins/mpsettingsviewplugin/mpsettingsviewplugin.pro
mpviewplugins/mpsettingsviewplugin/resources/mpsettingsview.qrc
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/src/mpengine.cpp
mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsaudioeffectswidget/stub/src/mpenginefactory.cpp
mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsaudioeffectswidget/unittest_mpsettingsaudioeffectswidget.pro
mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsview/inc/unittest_mpsettingsview.h
mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsview/src/unittest_mpsettingsview.cpp
mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsview/stub/inc/mpsettingsaudioeffectswidget.h
mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsview/stub/src/mpsettingsaudioeffectswidget.cpp
mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsview/unittest_mpsettingsview.pro
musicwidgetplugin/musicwidgetplugin.pro
musicwidgetplugin/resource/music_widget.docml
musicwidgetplugin/resource/musicwidgetui.qrc
musicwidgetplugin/src/musicwidget.cpp
qtmusicplayer.pro
sis/musicplayer_stub.pkg
sis/musicplayer_stub.sis
sis/musicplayer_udeb.pkg
sis/musicplayer_urel.pkg
utilities/mpalbumcoverwidget/tsrc/tsrc.pro
utilities/mpalbumcoverwidget/tsrc/unittest_mpalbumcoverwidget/inc/unittest_mpalbumcoverwidget.h
utilities/mpalbumcoverwidget/tsrc/unittest_mpalbumcoverwidget/src/unittest_mpalbumcoverwidget.cpp
utilities/mpalbumcoverwidget/tsrc/unittest_mpalbumcoverwidget/unittest_mpalbumcoverwidget.pro
utilities/mpmediacontroller/bwins/mpmediacontrolleru.def
utilities/mpmediacontroller/eabi/mpmediacontrolleru.def
utilities/mpmediacontroller/inc/mpmediakeyhandler.h
utilities/mpmediacontroller/inc/mpmediakeyhandler_p.h
utilities/mpmediacontroller/inc/mpmediakeyremconresponse.h
utilities/mpmediacontroller/inc/mpvolumeslider.h
utilities/mpmediacontroller/mpmediacontroller.pro
utilities/mpmediacontroller/rom/mpmediacontroller.iby
utilities/mpmediacontroller/rom/rom.pri
utilities/mpmediacontroller/src/mpmediacontroller.cpp
utilities/mpmediacontroller/src/mpmediakeyhandler.cpp
utilities/mpmediacontroller/src/mpmediakeyhandler_p.cpp
utilities/mpmediacontroller/src/mpmediakeyremconresponse.cpp
utilities/mpmediacontroller/src/mpvolumeslider.cpp
utilities/mpmediacontroller/tsrc/tsrc.pro
utilities/mpmediacontroller/tsrc/unittest_mpmediakeyhandler/inc/unittest_mpmediakeyhandler.h
utilities/mpmediacontroller/tsrc/unittest_mpmediakeyhandler/src/unittest_mpmediakeyhandler.cpp
utilities/mpmediacontroller/tsrc/unittest_mpmediakeyhandler/stub/inc/mpenginefactory.h
utilities/mpmediacontroller/tsrc/unittest_mpmediakeyhandler/stub/inc/remconcoreapitarget.h
utilities/mpmediacontroller/tsrc/unittest_mpmediakeyhandler/stub/inc/remconcoreapitargetobserver.h
utilities/mpmediacontroller/tsrc/unittest_mpmediakeyhandler/stub/inc/remconinterfaceselector.h
utilities/mpmediacontroller/tsrc/unittest_mpmediakeyhandler/stub/src/mpenginefactory.cpp
utilities/mpmediacontroller/tsrc/unittest_mpmediakeyhandler/stub/src/remconcoreapitarget.cpp
utilities/mpmediacontroller/tsrc/unittest_mpmediakeyhandler/stub/src/remconinterfaceselector.cpp
utilities/mpmediacontroller/tsrc/unittest_mpmediakeyhandler/unittest_mpmediakeyhandler.pro
utilities/mpmediacontroller/tsrc/unittest_mpvolumeslider/inc/unittest_mpvolumeslider.h
utilities/mpmediacontroller/tsrc/unittest_mpvolumeslider/src/unittest_mpvolumeslider.cpp
utilities/mpmediacontroller/tsrc/unittest_mpvolumeslider/stub/inc/hbvolumesliderpopup.h
utilities/mpmediacontroller/tsrc/unittest_mpvolumeslider/stub/inc/mpenginefactory.h
utilities/mpmediacontroller/tsrc/unittest_mpvolumeslider/stub/src/hbvolumesliderpopup.cpp
utilities/mpmediacontroller/tsrc/unittest_mpvolumeslider/stub/src/mpenginefactory.cpp
utilities/mpmediacontroller/tsrc/unittest_mpvolumeslider/unittest_mpvolumeslider.pro
utilities/mpnowplayingbanner/mpnowplayingbanner.pro
utilities/mpnowplayingbanner/resources/mpnowplayingbanner.qrc
utilities/tsrc/tsrc.pro
utilities/utilities.pro
--- a/app/app.pro	Fri Jul 23 17:31:12 2010 -0500
+++ b/app/app.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -23,7 +23,7 @@
     TARGET.EPOCSTACKSIZE = 0x14000
     TARGET.EPOCHEAPSIZE = 0x020000 0x1F00000
     TARGET.CAPABILITY = CAP_APPLICATION NetworkControl DRM
-    SKINICON = qtg_large_music_player
+    SKINICON = qtg_large_music
 
     BLD_INF_RULES.prj_exports += \
         "../sis/musicplayer_stub.sis          z:/system/install/musicplayer_stub.sis" \
@@ -57,7 +57,8 @@
         -lxqserviceutil \
         -lmusicservices \
         -lmpsettingsmanager \
-        -lmpengine
+        -lmpengine \
+        -lmpmediacontroller
 
 # Input
 HEADERS += inc/mpmainwindow.h \
--- a/app/inc/mpmainwindow.h	Fri Jul 23 17:31:12 2010 -0500
+++ b/app/inc/mpmainwindow.h	Fri Aug 06 16:51:36 2010 -0500
@@ -30,6 +30,7 @@
 class MusicServices;
 class MpGlobalPopupHandler;
 class HbActivityManager;
+class MpMediaController;
 
 // Class declaration
 class MpMainWindow: public MpxViewFramework
@@ -90,7 +91,8 @@
     MusicServices         *mMusicServices;         // Own
     MpGlobalPopupHandler  *mPopupHandler;          // Own
     bool                   mUserExit;
-    HbActivityManager     *mActivityManager;       //Not Own
+    HbActivityManager     *mActivityManager;       // Not Own
+    MpMediaController     *mMpMediaController;     // Own
 
 };
 
--- a/app/rom/musicplayer.iby	Fri Jul 23 17:31:12 2010 -0500
+++ b/app/rom/musicplayer.iby	Fri Aug 06 16:51:36 2010 -0500
@@ -21,7 +21,6 @@
 #include <data_caging_paths_for_iby.hrh>
 
 S60_APP_EXE(musicplayer)
-data = ZRESOURCE\apps\musicplayer.mif                      APP_RESOURCE_DIR\musicplayer.mif
 data = ZPRIVATE\10003A3F\import\APPS\musicplayer_reg.rsc   PRIVATE\10003a3f\import\apps\musicplayer_reg.rsc
 
 data = ZSYSTEM\install\musicplayer_stub.sis          system\install\musicplayer_stub.sis
--- a/app/src/mpglobalpopuphandler.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/app/src/mpglobalpopuphandler.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -116,7 +116,7 @@
     HbProgressDialog* scanProgressDialog = new HbProgressDialog( HbProgressDialog::WaitDialog );
     connect( scanProgressDialog, SIGNAL( cancelled() ), mMpSongScanner, SLOT( cancelScan() ) );
     scanProgressDialog->setModal( true );
-    HbLabel *title = new HbLabel( hbTrId( "txt_mus_info_refreshingnln_songs_added" ) );
+    HbLabel *title = new HbLabel( hbTrId( "txt_mus_title_refreshing" ) );
     title->setFontSpec(HbFontSpec(HbFontSpec::Primary));
 
     scanProgressDialog->setHeadingWidget( title );
--- a/app/src/mpmainwindow.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/app/src/mpmainwindow.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -31,6 +31,7 @@
 #include "mpenginefactory.h"
 #include "mpsettingsmanager.h"
 #include "mpglobalpopuphandler.h"
+#include "mpmediacontroller.h"
 #include "mptrace.h"
 
 const QString MUSIC_MAIN_VIEW = "MusicMainView";
@@ -60,7 +61,8 @@
       mMusicServices(0),
       mPopupHandler(0),
       mUserExit( false ),
-      mActivityManager(0)
+      mActivityManager(0),
+      mMpMediaController(0)
 {
     TX_LOG
 }
@@ -94,7 +96,10 @@
     if (mMediaWallViewPlugin) {
         mMediaWallViewPlugin->destroyView();
         delete mMediaWallViewPlugin;
-    }    
+    }
+
+    delete mMpMediaController;
+
     MpEngineFactory::close();
 
 
@@ -183,6 +188,7 @@
         mActivityManager->removeActivity( MUSIC_NOW_PLAYING_VIEW );
         connect( app, SIGNAL( activate() ), this , SLOT( handleActivity() ) );
         connect( app, SIGNAL( aboutToQuit() ), this, SLOT( saveActivity() ) );
+        mMpMediaController = new MpMediaController();
         emit applicationReady();
         
     }
@@ -395,6 +401,7 @@
         Q_ASSERT_X(false, "MpMainWindow::initializeServiceView", "undefined service");
         break;
     }
+    mMpMediaController = new MpMediaController();
     emit applicationReady();
 }
 
--- a/app/tsrc/tsrc.pro	Fri Jul 23 17:31:12 2010 -0500
+++ b/app/tsrc/tsrc.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -17,6 +17,7 @@
 TEMPLATE = subdirs
 
 # SUBDIRS += unittest_mpmtpinfolink
+# SUBDIRS += unittest_mpglobalpopuphandler
 
 CONFIG += ordered
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/tsrc/unittest_mpglobalpopuphandler/inc/unittest_mpglobalpopuphandler.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,59 @@
+/*
+* 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 MpGlobalPopupHandler
+*
+*/
+
+#ifndef TESTMPGLOBALPOPUPHANDLER_H
+#define TESTMPGLOBALPOPUPHANDLER_H
+
+#include <QtTest/QtTest>
+
+class MpGlobalPopupHandler;
+
+class TestMpGlobalPopupHandler : public QObject
+{
+    Q_OBJECT
+
+public:
+
+    TestMpGlobalPopupHandler();
+    ~TestMpGlobalPopupHandler();
+
+public slots:
+    void initTestCase();
+    void cleanupTestCase();
+    void init();
+    void cleanup();
+    
+private slots:
+    void testHandleLibraryAboutToUpdate(); 
+    void testScanCountChanged();
+    void testHandleScanFinished();
+    void testLaunchUnableToCotinueDueUsb();
+    void testLaunchUsbBlockingNote();
+    void testLaunchMTPInfoDialog();
+    void testOutstandingPopupClosing();
+    void testLaunchScanFinishedDialog();
+    void testLaunchDiskFullDialog();
+    void testSetOutstandingPopup(); 
+
+private:
+
+    MpGlobalPopupHandler          *mTest;
+    QTranslator                   *mMpTranslator; 
+
+};
+
+#endif  // TESTMPGLOBALPOPUPHANDLER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/tsrc/unittest_mpglobalpopuphandler/src/unittest_mpglobalpopuphandler.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,253 @@
+/*
+* 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 MpMediaWallDocumentLoader
+*/
+
+#include "unittest_mpglobalpopuphandler.h"
+#include "mpsongscanner.h"
+#include "mpengine.h"
+#include <hbpopup.h>
+#include <hbprogressdialog.h>
+#include <hbnotificationdialog.h>
+#include <hblabel.h>
+#include <QTranslator>
+#include <QLocale>
+
+/*
+* Following methods were skipped on purpose since theres nothing valuable to test
+* CloseUsbBlockingNote()
+* HanldeMTPInfoDialogFinished
+*/
+
+// Do this so we can access all member variables.
+#define private public
+#include "mpglobalpopuphandler.h"
+#undef private
+
+#include "../../../src/mpglobalpopuphandler.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);
+    TestMpGlobalPopupHandler 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_mpglobalpopuphandler.txt";
+
+        return QTest::qExec(&tv, 3, pass);
+    }
+}
+
+TestMpGlobalPopupHandler::TestMpGlobalPopupHandler()
+    : mTest(0),      
+      mMpTranslator(0)
+{
+}
+
+TestMpGlobalPopupHandler::~TestMpGlobalPopupHandler()
+{
+    delete mTest;
+    delete mMpTranslator;
+}
+
+/*!
+ Called before the first testfunction is executed.
+ */
+void TestMpGlobalPopupHandler::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 TestMpGlobalPopupHandler::cleanupTestCase()
+{
+}
+
+/*!
+ Called before each testfunction is executed.
+ */
+void TestMpGlobalPopupHandler::init()
+{
+    mTest = new MpGlobalPopupHandler( new QObject() );
+}
+
+/*!
+ Called after every testfunction.
+ */
+void TestMpGlobalPopupHandler::cleanup()
+{
+    delete mTest;
+    mTest = 0;
+}
+
+/*!
+ test handleLibraryAboutToUpdate
+ */
+void TestMpGlobalPopupHandler::testHandleLibraryAboutToUpdate() 
+{
+    mTest->mMpSongScanner = 0;
+    mTest->mMpEngine->mSongScanner = new MpSongScanner();
+    
+    mTest->handleLibraryAboutToUpdate();
+    QCOMPARE( mTest->mMpSongScanner,  mTest->mMpEngine->mSongScanner );    
+}
+
+/*!
+  test scanCountChanged
+ */
+void TestMpGlobalPopupHandler::testScanCountChanged() 
+{
+    HbProgressDialog* dialog = new HbProgressDialog( HbProgressDialog::WaitDialog );
+    dialog->setModal( true );
+    dialog->setText( QString("") );
+    dialog->setObjectName( KScanProgressDialog );
+        
+    mTest->mOutstandingPopup = dialog;
+    
+    mTest->scanCountChanged( 2 );
+    HbProgressDialog *dialogNew = qobject_cast<HbProgressDialog *>( mTest->mOutstandingPopup );
+    QCOMPARE( dialogNew->text(),  hbTrId( "txt_mus_info_ln_songs_found" , 2 ));  
+
+}
+
+/*!
+  test handleScanFinished
+ */
+void TestMpGlobalPopupHandler::testHandleScanFinished() 
+{
+    HbProgressDialog* dialog = new HbProgressDialog( HbProgressDialog::WaitDialog );
+    dialog->setModal( true );
+    HbLabel *title = new HbLabel( hbTrId( "testScanCountChanged" ) );
+    title->setFontSpec(HbFontSpec(HbFontSpec::Primary));
+
+    dialog->setHeadingWidget( title );
+    dialog->setText( QString("") );
+    dialog->setObjectName( KScanProgressDialog );
+        
+    mTest->mOutstandingPopup = dialog;    
+    mTest->handleScanFinished( MpSongScanner::ScanErrorNone, 0 );
+    QVERIFY( mTest->mOutstandingPopup->objectName() == KScanFinished );    
+    QVERIFY( qobject_cast<HbNotificationDialog *>( mTest->mOutstandingPopup )->title() == hbTrId( "txt_mus_dpophead_refresh_complete" ) );
+    
+    mTest->mOutstandingPopup = dialog;
+    mTest->handleScanFinished( MpSongScanner::ScanGeneralError, 0 );
+    QVERIFY( mTest->mOutstandingPopup->objectName() == KScanFinished );
+    QVERIFY( qobject_cast<HbNotificationDialog *>( mTest->mOutstandingPopup )->title() == hbTrId( "txt_mus_dpophead_refresh_cancelled" ) );
+    
+    mTest->mOutstandingPopup = dialog;
+    mTest->handleScanFinished( MpSongScanner::ScanErrorDiskFull, 0 );
+    QVERIFY( mTest->mOutstandingPopup->objectName() == KDiskFullDialog );
+
+}
+
+/*!
+  test launchUnableToCotinueDueUsb
+ */
+void TestMpGlobalPopupHandler::testLaunchUnableToCotinueDueUsb()
+{
+    mTest->launchUnableToCotinueDueUsb();
+    QVERIFY( mTest->mOutstandingPopup->objectName() == KUnableToContinueDueUSB );
+}
+
+/*!
+  test launchUsbBlockingNote
+ */
+void TestMpGlobalPopupHandler::testLaunchUsbBlockingNote()
+{
+    mTest->launchUsbBlockingNote();
+    QVERIFY( mTest->mOutstandingPopup->objectName() == KUsbBlockingNote );
+}
+
+
+/*!
+  test launchMTPInfoDialog
+ */
+void TestMpGlobalPopupHandler::testLaunchMTPInfoDialog()
+{
+    mTest->launchMTPInfoDialog();
+    QVERIFY( mTest->mOutstandingPopup->objectName() == KMTPInfoDialog );
+}
+
+
+/*!
+  test outstandingPopupClosing
+ */
+void TestMpGlobalPopupHandler::testOutstandingPopupClosing()
+{
+    HbPopup *dialog = new HbPopup();
+    connect( dialog, SIGNAL( aboutToClose() ), mTest, SLOT( outstandingPopupClosing() ) );
+    mTest->mOutstandingPopup = dialog; 
+    
+    dialog->close();
+    delete dialog;
+    QVERIFY( mTest->mOutstandingPopup == 0 );       
+}
+
+/*!
+  test launchScanFinishedDialog
+ */
+void TestMpGlobalPopupHandler::testLaunchScanFinishedDialog()
+{
+    mTest->launchScanFinishedDialog( true, 1 );
+    QVERIFY( mTest->mOutstandingPopup->objectName() == KScanFinished );
+    QVERIFY( qobject_cast<HbNotificationDialog *>( mTest->mOutstandingPopup )->title() == hbTrId( "txt_mus_dpophead_refresh_complete" ) );
+
+    mTest->launchScanFinishedDialog( false, 1 );
+    QVERIFY( mTest->mOutstandingPopup->objectName() == KScanFinished );
+    QVERIFY( qobject_cast<HbNotificationDialog *>( mTest->mOutstandingPopup )->title() == hbTrId( "txt_mus_dpophead_refresh_cancelled" ) );
+}
+
+
+/*!
+  test launchDiskFullDialog
+ */
+
+void TestMpGlobalPopupHandler::testLaunchDiskFullDialog() 
+{
+    mTest->launchDiskFullDialog();
+    QVERIFY( mTest->mOutstandingPopup->objectName() == KDiskFullDialog );
+}
+
+/*!
+  test setOutstandingPopup
+ */
+void TestMpGlobalPopupHandler::testSetOutstandingPopup() 
+{
+    HbPopup *dialog = new HbPopup();
+    mTest->mOutstandingPopup = 0;    
+    mTest->setOutstandingPopup( dialog );    
+    QVERIFY( mTest->mOutstandingPopup == dialog );
+}
+
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/tsrc/unittest_mpglobalpopuphandler/stub/inc/mpengine.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,58 @@
+/*
+* 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: mpengine stub
+*
+*/
+
+#ifndef MPENGINE_H
+#define MPENGINE_H
+
+#include <QObject>
+
+class MpSongScanner;
+
+class MpEngine : public QObject
+{
+    Q_OBJECT
+
+public:
+    enum EngineMode{
+        StandAlone,
+        Fetch,
+        Embedded,
+        MediaBrowsing
+    };
+    friend class MpEngineFactory;
+    
+public:     
+    MpSongScanner *songScanner();    
+
+private:
+    explicit MpEngine();
+    void initialize( TUid hostUid, EngineMode mode);
+    
+signals:
+    void libraryAboutToUpdate();    
+    void unableToCotinueDueUSB();
+    void usbSynchronizationStarted();
+    void usbSynchronizationFinished();
+
+public:
+    virtual ~MpEngine();
+    
+public:
+    MpSongScanner                        *mSongScanner;          
+};
+
+#endif // MPENGINE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/tsrc/unittest_mpglobalpopuphandler/stub/inc/mpenginefactory.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,46 @@
+/*
+* 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: MpEngineFactory stub 
+*
+*/
+
+#ifndef MPENGINEFACTORY_H
+#define MPENGINEFACTORY_H
+
+#include <QObject>
+#include "mpcommondefs.h"
+#include "mpengine.h"
+
+class MpEngineFactory : QObject
+{
+    Q_OBJECT
+private:
+    explicit MpEngineFactory();
+
+public:
+    virtual ~MpEngineFactory();
+    static MpEngineFactory * instance();    
+    static MpEngine *sharedEngine();
+    static MpEngine *createIsolatedEngine( MpEngine::EngineMode mode );
+    static void close();
+    static MpEngine *createSharedEngine( TUid uid = TUid::Uid( MpCommon::KMusicPlayerUid ), MpEngine::EngineMode mode = MpEngine::StandAlone );
+
+    
+private:    
+    MpEngine             *mSharedEngine;
+    QList<MpEngine *>    mEngines;
+};
+
+
+#endif // MPENGINEFACTORY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/tsrc/unittest_mpglobalpopuphandler/stub/inc/mpmtpinfolink.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,34 @@
+/*
+* 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 MTP info link.
+*
+*/
+
+
+#ifndef MPMTPINFOLINK_H
+#define MPMTPINFOLINK_H
+
+#include <hblabel.h>
+
+class MpMtpInfoLink: public HbLabel
+{
+    Q_OBJECT
+
+public:
+    explicit MpMtpInfoLink();
+    virtual ~MpMtpInfoLink();
+};
+
+#endif // MPMTPINFOLINK_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/tsrc/unittest_mpglobalpopuphandler/stub/inc/mpsettingsmanager.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,48 @@
+/*
+* 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: MpSettingsManager stub for testing MpMtpInfoLink.
+*
+*/
+
+#ifndef MPSETTINGSMANAGER_H
+#define MPSETTINGSMANAGER_H
+
+#include<QObject>
+#include <QtGlobal>
+
+class  MpSettingsManager: public QObject
+{
+    
+Q_OBJECT
+
+private:
+    explicit MpSettingsManager();
+
+public:
+    virtual ~MpSettingsManager();
+    static MpSettingsManager *instance();
+    static void SetUrl( QString url );
+    static QString mtpInfoUrl();
+    static bool showMtpInfo();
+    static void stopShowingMtpInfo();
+
+public:
+    QString mMtpInfoUrl;
+    bool    mShowMtpInfo;
+
+private:
+    Q_DISABLE_COPY(MpSettingsManager)
+};
+
+#endif    // MPSETTINGSMANAGER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/tsrc/unittest_mpglobalpopuphandler/stub/inc/mpsongscanner.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,54 @@
+/*
+* 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: stub for song scanner.
+*
+*/
+
+
+#ifndef MPSONGSCANNER_H
+#define MPSONGSCANNER_H
+
+class MpMpxHarvesterFrameworkWrapper;
+
+#include <QObject>
+
+class MpSongScanner : public QObject
+{
+    Q_OBJECT
+
+public:
+    enum ScanError{
+        ScanErrorNone,
+        ScanGeneralError,
+        ScanErrorDiskFull,
+        ScanInterrupted
+    };
+    
+    MpSongScanner();
+    virtual ~MpSongScanner();
+
+    void scan( bool automaticScan );
+    bool isAutomaticScan();
+    
+signals:
+    void scanStarted();
+    void scanCountChanged( int count );
+    void scanFinished( int error, int itemsAdded );    
+
+public:
+    bool                                 mAutomaticScan;
+};
+
+#endif // MPSONGSCANNER_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/tsrc/unittest_mpglobalpopuphandler/stub/src/mpengine.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,50 @@
+/*
+* 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: Stub for mpengine.
+*
+*/
+
+#include "mpengine.h"
+#include "mpsongscanner.h" 
+
+MpEngine::MpEngine()
+{
+
+}
+
+/*!
+ Destructs music player engine.
+ */
+MpEngine::~MpEngine()
+{
+
+}
+
+/*!
+ Initialize engine
+ */
+void MpEngine::initialize( TUid hostUid, EngineMode mode )
+{
+    Q_UNUSED( hostUid );
+    Q_UNUSED( mode );
+}
+
+/*!
+ \
+ Returs the current songScanner instance
+ */
+MpSongScanner *MpEngine::songScanner()
+{
+    return mSongScanner;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/tsrc/unittest_mpglobalpopuphandler/stub/src/mpenginefactory.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,96 @@
+/*
+* 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: MpEngineFactory stub for testing MpNowPlayingWidget
+*
+*/
+
+
+#include "mpenginefactory.h"
+
+
+/*!
+ *  Stub function
+ */
+MpEngineFactory::MpEngineFactory()
+    : mSharedEngine( 0 )
+{
+}
+
+/*!
+ *  Stub function
+ */
+MpEngineFactory::~MpEngineFactory()
+{
+}
+
+/*!
+ *  Stub function
+ */
+MpEngineFactory * MpEngineFactory::instance()
+{
+    static MpEngineFactory instance;
+    return &instance;
+}
+
+/*!
+ *  Stub function
+ */
+MpEngine *MpEngineFactory::sharedEngine()
+{
+    if ( !instance()->mSharedEngine ) {
+        instance()->mSharedEngine = new MpEngine();
+    }
+    return instance()->mSharedEngine;
+}
+
+/*!
+ Returns an instance to an isolated engine with \a mode.
+ */
+MpEngine *MpEngineFactory::createIsolatedEngine( MpEngine::EngineMode mode )
+{
+    instance()->mEngines.append( new MpEngine() );
+    instance()->mEngines.last()->initialize( TUid::Uid( MpCommon::KMusicPlayerUid + instance()->mEngines.count() ), mode );
+    return instance()->mEngines.last();
+}
+
+/*!
+ Closes all engines created on this process.
+ */
+void MpEngineFactory::close()
+{
+    if ( instance()->mSharedEngine ) {
+        delete instance()->mSharedEngine;
+        instance()->mSharedEngine = 0;
+        
+    }
+    MpEngine *ptr;
+    foreach ( ptr, instance()->mEngines ) {
+        delete ptr;
+        ptr = 0;
+    }
+}
+
+/*!
+ 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 )
+{
+    if ( !instance()->mSharedEngine ) {
+        instance()->mSharedEngine = new MpEngine();
+        instance()->mSharedEngine->initialize( hostUid, mode );
+    }
+    return instance()->mSharedEngine;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/tsrc/unittest_mpglobalpopuphandler/stub/src/mpmtpinfolink.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,38 @@
+/*
+* 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 MTP info link. This class is used to provide a link
+*              to educate the user about MTP after a successful manual refresh.
+*              Basically this class inherits from HbLabel and catches mouse events,
+*              when clicked it opens a url already specified in settings.
+*
+*/
+
+
+#include "mpmtpinfolink.h"
+
+
+/*!
+ Constructs MpMtpInfoLink.
+ */
+MpMtpInfoLink::MpMtpInfoLink()
+{
+}
+
+/*!
+ Destructs the MpMtpInfoLink.
+ */
+MpMtpInfoLink::~MpMtpInfoLink()
+{
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/tsrc/unittest_mpglobalpopuphandler/stub/src/mpsettingsmanager.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,72 @@
+/*
+* 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: MpSettingsManager stub for testing MpMtpInfoLink.
+*
+*/
+
+#include "mpsettingsmanager.h"
+
+
+/*!
+ Constructs the MP Settings Manager.
+ */
+MpSettingsManager::MpSettingsManager()
+{
+    mMtpInfoUrl = QString( "http://nokia.com/" );
+}
+
+/*!
+ Destructs the settings manager.
+ */
+MpSettingsManager::~MpSettingsManager()
+{
+}
+
+/*!
+ Returns the singleton instance to the settings manager.
+ */
+MpSettingsManager * MpSettingsManager::instance()
+{
+    static MpSettingsManager instance;
+    return &instance;
+}
+
+void MpSettingsManager::SetUrl( QString url )
+{
+    instance()->mMtpInfoUrl = url;
+}
+
+/*!
+ Returns mtp info url.
+ */
+QString MpSettingsManager::mtpInfoUrl()
+{
+    return instance()->mMtpInfoUrl;
+}
+
+/*!
+ Returns wheter mtp info should be showed.
+ */
+bool MpSettingsManager::showMtpInfo()
+{
+    return instance()->mShowMtpInfo;
+}
+
+/*!
+ Slot to be called to stop showing mtp info.
+ */
+void MpSettingsManager::stopShowingMtpInfo()
+{
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/tsrc/unittest_mpglobalpopuphandler/stub/src/mpsongscanner.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,47 @@
+/*
+* 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: stub for song scanner.
+*
+*/
+
+#include "../inc/mpsongscanner.h"
+
+/*!
+ Constructs the song scanner.
+ */
+MpSongScanner::MpSongScanner()
+{
+
+}
+
+/*!
+ Destructs the song scanner.
+ */
+MpSongScanner::~MpSongScanner()
+{
+}
+
+/*!
+ Initiates song scanning.
+ */
+void MpSongScanner::scan( bool /*automaticScan*/ )
+{
+
+}
+
+bool MpSongScanner::isAutomaticScan() 
+{
+    return mAutomaticScan;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/tsrc/unittest_mpglobalpopuphandler/unittest_mpglobalpopuphandler.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,48 @@
+#
+# 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: mpglobalpopuphandler unit test project file.
+#
+
+TEMPLATE = app
+CONFIG += qtestlib hb symbian_test
+TARGET = unittest_mpglobalpopuphandler
+TARGET.CAPABILITY = CAP_APPLICATION
+
+DEPENDPATH += .
+INCLUDEPATH += . \
+               stub/inc \
+               ../../inc \
+               ../../../inc
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE 
+
+LIBS += -lestor.dll \
+        -lfbscli.dll \
+
+HEADERS += inc/unittest_mpglobalpopuphandler.h \
+		   ../../inc/mpglobalpopuphandler.h \	
+		   stub/inc/mpmtpinfolink.h \
+		   stub/inc/mpsongscanner.h \
+		   stub/inc/mpenginefactory.h \
+		   stub/inc/mpsettingsmanager.h \
+	       stub/inc/mpengine.h \
+               
+SOURCES += src/unittest_mpglobalpopuphandler.cpp \ 		   
+		   #../../src/mpglobalpopuphandler.cpp \
+		   stub/src/mpmtpinfolink.cpp \
+		   stub/src/mpsongscanner.cpp \
+		   stub/src/mpenginefactory.cpp \
+		   stub/src/mpsettingsmanager.cpp \
+		   stub/src/mpengine.cpp \
+	       
+	       
\ No newline at end of file
--- a/inc/mpcommondefs.h	Fri Jul 23 17:31:12 2010 -0500
+++ b/inc/mpcommondefs.h	Fri Aug 06 16:51:36 2010 -0500
@@ -20,6 +20,8 @@
 #ifndef MPCOMMONDEFS_H
 #define MPCOMMONDEFS_H
 
+#include <QMetaType>
+
 namespace MpCommon
 {
     // UID definition
@@ -63,6 +65,18 @@
         TBoneThumb,
         MediaWallThumb,
     };
+    
+    /*!
+    Volume property, used in MpMpxPlaybackFramework and MpVolumeSlider.
+    */
+    enum MpVolumeProperty{
+        MaxVolume,
+        Volume,
+        MuteState
+    };
 }
 
+    // Register MpVolumeProperty so can be used in signal and slot connection
+    Q_DECLARE_METATYPE( MpCommon::MpVolumeProperty )
+
 #endif	// MPCOMMONDEFS_H
--- a/inc/mpengine.h	Fri Jul 23 17:31:12 2010 -0500
+++ b/inc/mpengine.h	Fri Aug 06 16:51:36 2010 -0500
@@ -27,7 +27,6 @@
 class QStringList;
 class MpMpxHarvesterFrameworkWrapper;
 class MpSongScanner;
-class MpMediaKeyHandler;
 class MpMpxCollectionFrameworkWrapper;
 class MpMpxPlaybackFrameworkWrapper;
 class MpMpxCollectionData;
@@ -146,6 +145,9 @@
     void containerContentsChanged();
     void restorePathFailed();
 
+    // Playback related
+    void volumePropertyChanged( MpCommon::MpVolumeProperty property, int value );
+
     // Equalizer related
     void equalizerReady();
 
@@ -168,6 +170,8 @@
     // Playback related
     void playEmbedded( QString aFilename );
     void playEmbedded( const XQSharableFile&  file );
+    void play();
+    void pause();
     void playPause();
     void stop();
     void skipForward();
@@ -178,6 +182,14 @@
     void setPosition( int position );
     void setShuffle( bool mode );
     void setRepeat( bool mode );
+    void getMaxVolume();
+    void getVolume();
+    void increaseVolume();
+    void decreaseVolume();
+    void setVolume( int value );
+    void getMuteState();
+    void mute();
+    void unmute();
 
     // Audio Effects related
     void setBalance( int balance );
@@ -205,7 +217,6 @@
     // Harvesting related
     MpMpxHarvesterFrameworkWrapper       *mMpxHarvesterWrapper;  // Own
     MpSongScanner                        *mSongScanner;          // Own
-    MpMediaKeyHandler                    *mMediaKeyHandler;      // Own
 
     // Collection related
     MpMpxCollectionFrameworkWrapper      *mMpxCollectionWrapper; //Own
@@ -224,7 +235,8 @@
 
     // General
     UsbBlockingState                     mUsbBlockingState;
-    UsbBlockingState                     mPreviousUsbState;    
+    UsbBlockingState                     mPreviousUsbState;
+    bool                                 mHandleMediaCommands;
     TUid                                 mHostUid;
 };
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/mpmediacontroller.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,48 @@
+/*
+* 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 Media Controller.
+*
+*/
+
+#ifndef MPMEDIACONTROLLER_H
+#define MPMEDIACONTROLLER_H
+
+#include <QObject>
+#include <QtGlobal>
+
+class MpMediaKeyHandler;
+class MpVolumeSlider;
+
+#ifdef BUILD_MPMEDIACONTROLLER
+#define BUILD_MPMEDIACONTROLLER_EXPORT Q_DECL_EXPORT
+#else
+#define BUILD_MPMEDIACONTROLLER_EXPORT Q_DECL_IMPORT
+#endif
+class  BUILD_MPMEDIACONTROLLER_EXPORT MpMediaController: public QObject
+{
+
+Q_OBJECT
+
+public:
+
+    explicit MpMediaController( QObject *parent = 0 );
+    virtual ~MpMediaController();
+
+private:
+    Q_DISABLE_COPY(MpMediaController)
+    MpMediaKeyHandler           *mMpMediaKeyHandler;    // own
+    MpVolumeSlider              *mMpVolumeSlider;       // own
+};
+
+#endif    // MPMEDIACONTROLLER_H
--- a/mpdata/src/mpsongdata_p.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpdata/src/mpsongdata_p.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -28,6 +28,9 @@
 #include <QFileInfo>
 #include <QDateTime>
 #include <QDate>
+#include <HbExtendedLocale>
+#include <hbi18ndef.h>
+#include <HbStringUtil>
 
 #include <hbicon.h>
 
@@ -371,7 +374,9 @@
     TX_LOG_ARGS( "Create album art file " << mTempAlbumArt );
 
     QFile file( mTempAlbumArt );
-    file.open( QIODevice::WriteOnly );
+    if ( !file.open( QIODevice::WriteOnly ) ) {
+        return QString("");
+    }
     if ( mAlbumArt && !mAlbumArt->isNull() && !mAlbumArt->qicon().isNull() )
     {
         QPixmap p = mAlbumArt->qicon().pixmap( QSize( 74, 74 ), QIcon::Normal, QIcon::Off );
@@ -541,19 +546,25 @@
         QFileInfo info( fullName );
         changed |= setSize( info.size() );
 
+        // Localization of timestamp is somewhat complex operation:
+        // 1. Localize the date and time parts separately
+        // 2. Concatenate the resulting localized strings
+        // 3. Finally, convert all of the digits in resulting single string
+        //    to their localized versions (not all scripts have same numerals
+        //    as latin/arabic)
         QDateTime lastModified = info.lastModified();
-        QDate date = lastModified.date();
-        int day = date.day();
-        int month = date.month();
-        int year = date.year();
-        QTime time = lastModified.time();
-        int sec = time.second();
-        int min = time.minute();
-        int hr = time.hour();
+        QDate date( lastModified.date() );
+        QTime time( lastModified.time() );
+
+        HbExtendedLocale locale = HbExtendedLocale::system();
 
-        QString lastModifiedStr("%1.%2.%3 %4:%5:%6");
-        lastModifiedStr = lastModifiedStr.arg( day ).arg( month ).arg( year ).arg( hr ).arg( min ).arg( sec );
-        changed |= setModified( lastModifiedStr );
+        QString dateStr = locale.format( date, r_qtn_date_usual_with_zero );
+        QString timeStr = locale.format( time, r_qtn_time_long_with_zero );
+        QString timestampStr( dateStr + " " + timeStr );
+        TX_LOG_ARGS( "Timestamp before corrections: " << timestampStr );
+        QString convertedTimestampStr( HbStringUtil::convertDigits(timestampStr) );
+
+        changed |= setModified( convertedTimestampStr );
 
 
         // get file name without suffix
@@ -1004,7 +1015,17 @@
     bool change = false;
     if ( musicURL != mMusicURL ) {
         change = true;
-        mMusicURL = musicURL;
+
+        // Make sure URL contains the correct protocol definition (HTTP).
+        if ( (musicURL.length() > 0) &&
+             (musicURL.indexOf( "://", 0, Qt::CaseInsensitive ) == -1) ) {
+            mMusicURL = "http://" + musicURL;
+            TX_LOG_ARGS("Changed music url to " << mMusicURL);
+        }
+		else {
+            mMusicURL = musicURL;
+            TX_LOG_ARGS("Music url unchanged: " << mMusicURL);
+        }
     }
     TX_EXIT
     return change;
--- a/mpdata/tsrc/unittest_mpcollectiondatamodel/stub/inc/mpcollectionalbumartmanager.h	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpdata/tsrc/unittest_mpcollectiondatamodel/stub/inc/mpcollectionalbumartmanager.h	Fri Aug 06 16:51:36 2010 -0500
@@ -44,6 +44,7 @@
     void cacheFirstScreen();
     void cancel();
     void setThumbnailSize( MpCommon::MpThumbType type );
+    void enableDefaultArt( bool enabled );
 
 signals:
 
--- a/mpdata/tsrc/unittest_mpcollectiondatamodel/stub/src/mpcollectionalbumartmanager.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpdata/tsrc/unittest_mpcollectiondatamodel/stub/src/mpcollectionalbumartmanager.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -95,3 +95,10 @@
     mThumbType = type;
 }
 
+/*!
+ Stub function.
+ */
+void MpCollectionAlbumArtManager::enableDefaultArt( bool enabled )
+{
+    Q_UNUSED(enabled);
+}
--- a/mpdata/tsrc/unittest_mpcollectiontbonelistdatamodel/stub/inc/mpmpxcollectiondata.h	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpdata/tsrc/unittest_mpcollectiontbonelistdatamodel/stub/inc/mpmpxcollectiondata.h	Fri Aug 06 16:51:36 2010 -0500
@@ -50,7 +50,9 @@
     virtual ~MpMpxCollectionData();
 
     int albumSongsCount() const;
+    int albumSongId( int index );
     QString albumSongData( int index, MpMpxCollectionData::DataType type ) const;
+    int albumSongIndex( int songUniqueId );
 
 signals:
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpdata/tsrc/unittest_mpcollectiontbonelistdatamodel/stub/inc/mpplaybackdata.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,58 @@
+/*
+* 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: mpplaybackdata stub for testing mpmediawallview
+*
+*/
+
+#ifndef MPPLAYBACKDATA_H
+#define MPPLAYBACKDATA_H
+
+//includes
+#include <QObject>
+#include <QMetaType>
+#include <hbicon.h>
+
+class MpPlaybackData : public QObject
+{
+    Q_OBJECT
+
+public:
+
+    enum SimplifiedState {
+        NotPlaying,
+        Playing,
+        Paused,
+        Stopped
+    };
+
+
+    explicit MpPlaybackData();
+    virtual ~MpPlaybackData();
+
+signals:
+    void playbackStateChanged();
+    void playbackInfoChanged();
+
+public:
+
+    int id();
+    void setPlaybackState( const SimplifiedState state );
+    MpPlaybackData::SimplifiedState playbackState() const;
+
+public:
+
+    MpPlaybackData::SimplifiedState mPlaybackState;
+};
+
+#endif  // MPPLAYBACKDATA_H
--- a/mpdata/tsrc/unittest_mpcollectiontbonelistdatamodel/stub/src/mpmpxcollectiondata.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpdata/tsrc/unittest_mpcollectiontbonelistdatamodel/stub/src/mpmpxcollectiondata.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -69,6 +69,15 @@
 /*!
  Stub function.
  */
+int MpMpxCollectionData::albumSongId( int index )
+{
+    Q_UNUSED(index);
+    return 0;
+}
+
+/*!
+ Stub function.
+ */
 QString MpMpxCollectionData::albumSongData( int index, MpMpxCollectionData::DataType type ) const
 {
     QString data;
@@ -87,3 +96,11 @@
     return data;
 }
 
+/*!
+ Stub function.
+ */
+int MpMpxCollectionData::albumSongIndex( int songUniqueId )
+{
+    Q_UNUSED(songUniqueId);
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpdata/tsrc/unittest_mpcollectiontbonelistdatamodel/stub/src/mpplaybackdata.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,62 @@
+/*
+* 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: MpPlaybackData stub for testing mpnowplayingwidget
+*
+*/
+
+#include "stub/inc/mpplaybackdata.h"
+
+
+int gUpdateCounter = 0;
+
+
+/*!
+ Stub function.
+ */
+MpPlaybackData::MpPlaybackData()
+    : mPlaybackState(NotPlaying)
+{
+    gUpdateCounter++;
+}
+
+/*!
+ Stub function.
+ */
+MpPlaybackData::~MpPlaybackData()
+{
+}
+
+/*!
+ Stub function.
+ */
+int MpPlaybackData::id()
+{
+    return 0;
+}
+
+/*!
+ Stub function.
+ */
+void MpPlaybackData::setPlaybackState(MpPlaybackData::SimplifiedState state)
+{
+    mPlaybackState=state;
+}
+
+/*!
+ Stub function.
+ */
+MpPlaybackData::SimplifiedState MpPlaybackData::playbackState() const
+{
+    return mPlaybackState;
+}
--- a/mpdata/tsrc/unittest_mpcollectiontbonelistdatamodel/unittest_mpcollectiontbonelistdatamodel.pro	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpdata/tsrc/unittest_mpcollectiontbonelistdatamodel/unittest_mpcollectiontbonelistdatamodel.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -32,11 +32,13 @@
 HEADERS += inc/unittest_mpcollectiontbonelistdatamodel.h \
            inc/unittest_helper.h \
            stub/inc/mpmpxcollectiondata.h \
-           ../../../inc/mpcollectiontbonelistdatamodel.h \
+           stub/inc/mpplaybackdata.h \
+           ../../../inc/mpcollectiontbonelistdatamodel.h 
                
 SOURCES += src/unittest_mpcollectiontbonelistdatamodel.cpp \
            src/unittest_helper.cpp \
            stub/src/mpmpxcollectiondata.cpp \
+           stub/src/mpplaybackdata.cpp \
            ../../src/mpcollectiontbonelistdatamodel.cpp
 
 DEFINES += BUILD_MPDATA_LIB
--- a/mpdata/tsrc/unittest_mpplaybackdata/src/unittest_mpplaybackdata.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpdata/tsrc/unittest_mpplaybackdata/src/unittest_mpplaybackdata.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -102,7 +102,6 @@
     QCOMPARE(mTest->mThumbnailManager->getInitCounter(), 1);
     QVERIFY(mTest->mDuration == 0);
     QVERIFY(mTest->mPosition == 0);
-    QVERIFY(mTest->mDefaultAlbumArt != 0);
 
 }
 
@@ -228,18 +227,6 @@
 void TestMpPlaybackData::testSetAlbumArtUri()
 {
     QSignalSpy spy(mTest, SIGNAL(albumArtReady()));
-    //Empty string
-    mTest->setAlbumArtUri(QString(""));
-    QCOMPARE(mTest->mAlbumArt, mTest->mDefaultAlbumArt);
-    QCOMPARE(spy.count(),1);
-    spy.clear();
-    
-    //Request failed
-    mTest->mThumbnailManager->mGetThumbFails = true;
-    mTest->setAlbumArtUri(QString("AlbumArt"));
-    QCOMPARE(mTest->mAlbumArt, mTest->mDefaultAlbumArt);
-    QCOMPARE(spy.count(),1);
-    spy.clear();
     
     //Succesful requests
     mTest->mThumbnailManager->mGetThumbFails = false;
@@ -269,21 +256,6 @@
     QSignalSpy spy(mTest, SIGNAL(albumArtReady()));
     QPixmap albumArt(100,100);
     HbIcon albumArtIcon;
-   
-    //Error
-    mTest->thumbnailReady(albumArt,temp,KUndefined,KUndefined);
-    QCOMPARE(mTest->mAlbumArt, mTest->mDefaultAlbumArt); 
-    QCOMPARE(mTest->mReqId, KUndefined);
-    QCOMPARE(spy.count(),1);
-    spy.clear();
-    
-    //Wrong id
-    mTest->mReqId = 1;
-    mTest->thumbnailReady(albumArt,temp,KUndefined,0);
-    QCOMPARE(mTest->mAlbumArt, mTest->mDefaultAlbumArt); 
-    QCOMPARE(mTest->mReqId, KUndefined);
-    QCOMPARE(spy.count(),1);
-    spy.clear();
     
     //Update album art
     mTest->mReqId = 1;
--- a/mpengine/bwins/mpengineu.def	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpengine/bwins/mpengineu.def	Fri Aug 06 16:51:36 2010 -0500
@@ -1,130 +1,141 @@
 EXPORTS
-	?metaObject@MpEngine@@UBEPBUQMetaObject@@XZ @ 1 NONAME ; struct QMetaObject const * MpEngine::metaObject(void) const
-	?instance@MpEngineFactory@@SAPAV1@XZ @ 2 NONAME ; class MpEngineFactory * MpEngineFactory::instance(void)
-	?createIsolatedEngine@MpEngineFactory@@SAPAVMpEngine@@W4EngineMode@2@@Z @ 3 NONAME ; class MpEngine * MpEngineFactory::createIsolatedEngine(enum MpEngine::EngineMode)
-	??_EMpSongScanner@@UAE@I@Z @ 4 NONAME ; MpSongScanner::~MpSongScanner(unsigned int)
-	?findAlbumSongs@MpEngine@@QAEXH@Z @ 5 NONAME ; void MpEngine::findAlbumSongs(int)
-	?equalizerReady@MpEngine@@IAEXXZ @ 6 NONAME ; void MpEngine::equalizerReady(void)
-	?setPosition@MpEngine@@QAEXH@Z @ 7 NONAME ; void MpEngine::setPosition(int)
-	?saveToCurrentPlaylist@MpEngine@@QAEXAAV?$QList@H@@PAVMpMpxCollectionData@@@Z @ 8 NONAME ; void MpEngine::saveToCurrentPlaylist(class QList<int> &, class MpMpxCollectionData *)
-	?metaObject@MpEngineFactory@@UBEPBUQMetaObject@@XZ @ 9 NONAME ; struct QMetaObject const * MpEngineFactory::metaObject(void) const
-	?handleDeleteStarted@MpEngine@@QAEXW4TCollectionContext@@H@Z @ 10 NONAME ; void MpEngine::handleDeleteStarted(enum TCollectionContext, int)
-	?handleEqualizerReady@MpEngine@@QAEXXZ @ 11 NONAME ; void MpEngine::handleEqualizerReady(void)
-	?collectionData@MpEngine@@QAEPAVMpMpxCollectionData@@XZ @ 12 NONAME ; class MpMpxCollectionData * MpEngine::collectionData(void)
-	?createPlaylist@MpEngine@@QAEXAAVQString@@AAV?$QList@H@@PAVMpMpxCollectionData@@@Z @ 13 NONAME ; void MpEngine::createPlaylist(class QString &, class QList<int> &, class MpMpxCollectionData *)
-	?collectionPlaylistOpened@MpEngine@@IAEXXZ @ 14 NONAME ; void MpEngine::collectionPlaylistOpened(void)
-	?tr@MpSongScanner@@SA?AVQString@@PBD0@Z @ 15 NONAME ; class QString MpSongScanner::tr(char const *, char const *)
-	?renamePlaylist@MpEngine@@QAEXAAVQString@@H@Z @ 16 NONAME ; void MpEngine::renamePlaylist(class QString &, int)
-	?scanCountChanged@MpSongScanner@@IAEXH@Z @ 17 NONAME ; void MpSongScanner::scanCountChanged(int)
-	?handleUsbMtpEndEvent@MpEngine@@AAEXXZ @ 18 NONAME ; void MpEngine::handleUsbMtpEndEvent(void)
-	?setBalance@MpEngine@@QAEXH@Z @ 19 NONAME ; void MpEngine::setBalance(int)
-	?songData@MpEngine@@QAEPAVMpSongData@@XZ @ 20 NONAME ; class MpSongData * MpEngine::songData(void)
-	?skipForward@MpEngine@@QAEXXZ @ 21 NONAME ; void MpEngine::skipForward(void)
-	??_EMpEngineFactory@@UAE@I@Z @ 22 NONAME ; MpEngineFactory::~MpEngineFactory(unsigned int)
-	?playAlbumSongs@MpEngine@@QAEXHHPAVMpMpxCollectionData@@@Z @ 23 NONAME ; void MpEngine::playAlbumSongs(int, int, class MpMpxCollectionData *)
-	?setShuffle@MpEngine@@QAEX_N@Z @ 24 NONAME ; void MpEngine::setShuffle(bool)
-	?openIsolatedCollection@MpEngine@@QAEXW4TCollectionContext@@@Z @ 25 NONAME ; void MpEngine::openIsolatedCollection(enum TCollectionContext)
-	?usbSynchronizationFinished@MpEngine@@IAEXXZ @ 26 NONAME ; void MpEngine::usbSynchronizationFinished(void)
-	?trUtf8@MpSongScanner@@SA?AVQString@@PBD0H@Z @ 27 NONAME ; class QString MpSongScanner::trUtf8(char const *, char const *, int)
-	?close@MpEngineFactory@@SAXXZ @ 28 NONAME ; void MpEngineFactory::close(void)
-	?qt_metacall@MpEngine@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 29 NONAME ; int MpEngine::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?playlistSaved@MpEngine@@IAEX_N@Z @ 30 NONAME ; void MpEngine::playlistSaved(bool)
-	?playbackData@MpEngine@@QAEPAVMpPlaybackData@@XZ @ 31 NONAME ; class MpPlaybackData * MpEngine::playbackData(void)
-	?stop@MpEngine@@QAEXXZ @ 32 NONAME ; void MpEngine::stop(void)
-	?libraryAboutToUpdate@MpEngine@@IAEXXZ @ 33 NONAME ; void MpEngine::libraryAboutToUpdate(void)
-	?scan@MpSongScanner@@QAEX_N@Z @ 34 NONAME ; void MpSongScanner::scan(bool)
-	?openCollection@MpEngine@@QAEXW4TCollectionContext@@@Z @ 35 NONAME ; void MpEngine::openCollection(enum TCollectionContext)
-	?trUtf8@MpEngine@@SA?AVQString@@PBD0H@Z @ 36 NONAME ; class QString MpEngine::trUtf8(char const *, char const *, int)
-	?reopenCollection@MpEngine@@QAEXXZ @ 37 NONAME ; void MpEngine::reopenCollection(void)
-	?songsDeleted@MpEngine@@IAEX_N@Z @ 38 NONAME ; void MpEngine::songsDeleted(bool)
-	??0MpEngineFactory@@AAE@XZ @ 39 NONAME ; MpEngineFactory::MpEngineFactory(void)
-	?refreshLibrary@MpEngine@@QAEX_N@Z @ 40 NONAME ; void MpEngine::refreshLibrary(bool)
-	?qt_metacast@MpEngine@@UAEPAXPBD@Z @ 41 NONAME ; void * MpEngine::qt_metacast(char const *)
-	?startSeekForward@MpEngine@@QAEXXZ @ 42 NONAME ; void MpEngine::startSeekForward(void)
-	?saveToPlaylist@MpEngine@@QAEXHAAV?$QList@H@@@Z @ 43 NONAME ; void MpEngine::saveToPlaylist(int, class QList<int> &)
-	?qt_metacall@MpEngineFactory@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 44 NONAME ; int MpEngineFactory::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?qt_metacall@MpSongScanner@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 45 NONAME ; int MpSongScanner::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?handleDiskEvent@MpSongScanner@@QAEXW4MpxDiskEvents@@@Z @ 46 NONAME ; void MpSongScanner::handleDiskEvent(enum MpxDiskEvents)
-	?tr@MpEngineFactory@@SA?AVQString@@PBD0H@Z @ 47 NONAME ; class QString MpEngineFactory::tr(char const *, char const *, int)
-	?tr@MpEngine@@SA?AVQString@@PBD0H@Z @ 48 NONAME ; class QString MpEngine::tr(char const *, char const *, int)
-	?trUtf8@MpEngine@@SA?AVQString@@PBD0@Z @ 49 NONAME ; class QString MpEngine::trUtf8(char const *, char const *)
-	?findPlaylists@MpEngine@@QAEXAAVQStringList@@@Z @ 50 NONAME ; void MpEngine::findPlaylists(class QStringList &)
-	?presetNames@MpEngine@@QAE?AVQStringList@@XZ @ 51 NONAME ; class QStringList MpEngine::presetNames(void)
-	?isAutomaticScan@MpSongScanner@@QAE_NXZ @ 52 NONAME ; bool MpSongScanner::isAutomaticScan(void)
-	??1MpEngineFactory@@UAE@XZ @ 53 NONAME ; MpEngineFactory::~MpEngineFactory(void)
-	?previewItem@MpEngine@@QAEXH@Z @ 54 NONAME ; void MpEngine::previewItem(int)
-	??1MpSongScanner@@UAE@XZ @ 55 NONAME ; MpSongScanner::~MpSongScanner(void)
-	?loudness@MpEngine@@QAE_NXZ @ 56 NONAME ; bool MpEngine::loudness(void)
-	?staticMetaObject@MpEngineFactory@@2UQMetaObject@@B @ 57 NONAME ; struct QMetaObject const MpEngineFactory::staticMetaObject
-	?deleteSongs@MpEngine@@QAEXAAV?$QList@H@@@Z @ 58 NONAME ; void MpEngine::deleteSongs(class QList<int> &)
-	?releaseIsolatedCollection@MpEngine@@QAEXXZ @ 59 NONAME ; void MpEngine::releaseIsolatedCollection(void)
-	?deleteStarted@MpEngine@@IAEXW4TCollectionContext@@H@Z @ 60 NONAME ; void MpEngine::deleteStarted(enum TCollectionContext, int)
-	?stopSeeking@MpEngine@@QAEXXZ @ 61 NONAME ; void MpEngine::stopSeeking(void)
-	?playEmbedded@MpEngine@@QAEXVQString@@@Z @ 62 NONAME ; void MpEngine::playEmbedded(class QString)
-	?initialize@MpEngine@@AAEXVTUid@@W4EngineMode@1@@Z @ 63 NONAME ; void MpEngine::initialize(class TUid, enum MpEngine::EngineMode)
-	?tr@MpEngine@@SA?AVQString@@PBD0@Z @ 64 NONAME ; class QString MpEngine::tr(char const *, char const *)
-	?disableEqualizer@MpEngine@@QAEXXZ @ 65 NONAME ; void MpEngine::disableEqualizer(void)
-	?getStaticMetaObject@MpEngine@@SAABUQMetaObject@@XZ @ 66 NONAME ; struct QMetaObject const & MpEngine::getStaticMetaObject(void)
-	?shuffleAll@MpEngine@@QAEXXZ @ 67 NONAME ; void MpEngine::shuffleAll(void)
-	?qt_metacast@MpEngineFactory@@UAEPAXPBD@Z @ 68 NONAME ; void * MpEngineFactory::qt_metacast(char const *)
-	?renamePlaylist@MpEngine@@QAEXAAVQString@@@Z @ 69 NONAME ; void MpEngine::renamePlaylist(class QString &)
-	?libraryUpdated@MpEngine@@IAEXXZ @ 70 NONAME ; void MpEngine::libraryUpdated(void)
-	?metaObject@MpSongScanner@@UBEPBUQMetaObject@@XZ @ 71 NONAME ; struct QMetaObject const * MpSongScanner::metaObject(void) const
-	?setRepeat@MpEngine@@QAEX_N@Z @ 72 NONAME ; void MpEngine::setRepeat(bool)
-	?trUtf8@MpEngineFactory@@SA?AVQString@@PBD0@Z @ 73 NONAME ; class QString MpEngineFactory::trUtf8(char const *, char const *)
-	??0MpSongScanner@@QAE@PAVMpMpxHarvesterFrameworkWrapper@@PAVQObject@@@Z @ 74 NONAME ; MpSongScanner::MpSongScanner(class MpMpxHarvesterFrameworkWrapper *, class QObject *)
-	?cancelCollectionRequest@MpEngine@@QAEXXZ @ 75 NONAME ; void MpEngine::cancelCollectionRequest(void)
-	?containerContentsChanged@MpEngine@@IAEXXZ @ 76 NONAME ; void MpEngine::containerContentsChanged(void)
-	?startSeekBackward@MpEngine@@QAEXXZ @ 77 NONAME ; void MpEngine::startSeekBackward(void)
-	?playlistsRenamed@MpEngine@@IAEX_N@Z @ 78 NONAME ; void MpEngine::playlistsRenamed(bool)
-	?playPause@MpEngine@@QAEXXZ @ 79 NONAME ; void MpEngine::playPause(void)
-	?checkForSystemEvents@MpEngine@@QAEXXZ @ 80 NONAME ; void MpEngine::checkForSystemEvents(void)
-	?tr@MpEngineFactory@@SA?AVQString@@PBD0@Z @ 81 NONAME ; class QString MpEngineFactory::tr(char const *, char const *)
-	?applyPreset@MpEngine@@QAEXH@Z @ 82 NONAME ; void MpEngine::applyPreset(int)
-	?playEmbedded@MpEngine@@QAEXABVXQSharableFile@@@Z @ 83 NONAME ; void MpEngine::playEmbedded(class XQSharableFile const &)
-	?trUtf8@MpEngineFactory@@SA?AVQString@@PBD0H@Z @ 84 NONAME ; class QString MpEngineFactory::trUtf8(char const *, char const *, int)
-	?staticMetaObject@MpEngine@@2UQMetaObject@@B @ 85 NONAME ; struct QMetaObject const MpEngine::staticMetaObject
-	?scanStarted@MpSongScanner@@IAEXXZ @ 86 NONAME ; void MpSongScanner::scanStarted(void)
-	?retrieveSongDetails@MpEngine@@QAEXH@Z @ 87 NONAME ; void MpEngine::retrieveSongDetails(int)
-	?unableToCotinueDueUSB@MpEngine@@IAEXXZ @ 88 NONAME ; void MpEngine::unableToCotinueDueUSB(void)
-	?handleUsbMtpStartEvent@MpEngine@@AAEXXZ @ 89 NONAME ; void MpEngine::handleUsbMtpStartEvent(void)
-	?openCollectionItem@MpEngine@@QAEXH@Z @ 90 NONAME ; void MpEngine::openCollectionItem(int)
-	?cancelScan@MpSongScanner@@QAEXXZ @ 91 NONAME ; void MpSongScanner::cancelScan(void)
-	?trUtf8@MpSongScanner@@SA?AVQString@@PBD0@Z @ 92 NONAME ; class QString MpSongScanner::trUtf8(char const *, char const *)
-	?handleScanStarted@MpEngine@@QAEXXZ @ 93 NONAME ; void MpEngine::handleScanStarted(void)
-	?back@MpEngine@@QAEXXZ @ 94 NONAME ; void MpEngine::back(void)
-	?activePreset@MpEngine@@QAEHXZ @ 95 NONAME ; int MpEngine::activePreset(void)
-	?tr@MpSongScanner@@SA?AVQString@@PBD0H@Z @ 96 NONAME ; class QString MpSongScanner::tr(char const *, char const *, int)
-	?handleUsbEvent@MpEngine@@QAEXW4MpxUsbEvents@@@Z @ 97 NONAME ; void MpEngine::handleUsbEvent(enum MpxUsbEvents)
-	?loadActivityData@MpEngine@@QAEXABVQByteArray@@@Z @ 98 NONAME ; void MpEngine::loadActivityData(class QByteArray const &)
-	?songScanner@MpEngine@@QAEPAVMpSongScanner@@XZ @ 99 NONAME ; class MpSongScanner * MpEngine::songScanner(void)
-	?sharedEngine@MpEngineFactory@@SAPAVMpEngine@@XZ @ 100 NONAME ; class MpEngine * MpEngineFactory::sharedEngine(void)
-	?handleUsbMassStorageStartEvent@MpEngine@@AAEXXZ @ 101 NONAME ; void MpEngine::handleUsbMassStorageStartEvent(void)
-	?saveActivityData@MpEngine@@QAEXAAVQByteArray@@@Z @ 102 NONAME ; void MpEngine::saveActivityData(class QByteArray &)
-	?balance@MpEngine@@QAEHXZ @ 103 NONAME ; int MpEngine::balance(void)
-	?handleDeleteEnded@MpEngine@@QAEX_N@Z @ 104 NONAME ; void MpEngine::handleDeleteEnded(bool)
-	?handleDiskEvent@MpEngine@@QAEXW4MpxDiskEvents@@@Z @ 105 NONAME ; void MpEngine::handleDiskEvent(enum MpxDiskEvents)
-	?verifyUsbBlocking@MpEngine@@QAE_N_N@Z @ 106 NONAME ; bool MpEngine::verifyUsbBlocking(bool)
-	?usbSynchronizationStarted@MpEngine@@IAEXXZ @ 107 NONAME ; void MpEngine::usbSynchronizationStarted(void)
-	?handleUsbMassStorageEndEvent@MpEngine@@AAEXXZ @ 108 NONAME ; void MpEngine::handleUsbMassStorageEndEvent(void)
-	?createSharedEngine@MpEngineFactory@@SAPAVMpEngine@@VTUid@@W4EngineMode@2@@Z @ 109 NONAME ; class MpEngine * MpEngineFactory::createSharedEngine(class TUid, enum MpEngine::EngineMode)
-	?usbBlocked@MpEngine@@IAEX_N@Z @ 110 NONAME ; void MpEngine::usbBlocked(bool)
-	?restorePathFailed@MpEngine@@IAEXXZ @ 111 NONAME ; void MpEngine::restorePathFailed(void)
-	?getStaticMetaObject@MpSongScanner@@SAABUQMetaObject@@XZ @ 112 NONAME ; struct QMetaObject const & MpSongScanner::getStaticMetaObject(void)
-	?getStaticMetaObject@MpEngineFactory@@SAABUQMetaObject@@XZ @ 113 NONAME ; struct QMetaObject const & MpEngineFactory::getStaticMetaObject(void)
-	??0MpEngine@@AAE@XZ @ 114 NONAME ; MpEngine::MpEngine(void)
-	?handleUsbMtpNotActive@MpEngine@@AAEXXZ @ 115 NONAME ; void MpEngine::handleUsbMtpNotActive(void)
-	?staticMetaObject@MpSongScanner@@2UQMetaObject@@B @ 116 NONAME ; struct QMetaObject const MpSongScanner::staticMetaObject
-	?handleScanEnded@MpSongScanner@@QAEXHH@Z @ 117 NONAME ; void MpSongScanner::handleScanEnded(int, int)
-	?isolatedCollectionOpened@MpEngine@@IAEXPAVMpMpxCollectionData@@@Z @ 118 NONAME ; void MpEngine::isolatedCollectionOpened(class MpMpxCollectionData *)
-	?handleScanEnded@MpEngine@@QAEXHH@Z @ 119 NONAME ; void MpEngine::handleScanEnded(int, int)
-	?aboutToAddSongs@MpEngine@@IAEXH@Z @ 120 NONAME ; void MpEngine::aboutToAddSongs(int)
-	?skipBackward@MpEngine@@QAEXXZ @ 121 NONAME ; void MpEngine::skipBackward(void)
-	??_EMpEngine@@UAE@I@Z @ 122 NONAME ; MpEngine::~MpEngine(unsigned int)
-	??1MpEngine@@UAE@XZ @ 123 NONAME ; MpEngine::~MpEngine(void)
-	?changeUsbBlockingState@MpEngine@@AAEXW4UsbBlockingState@1@@Z @ 124 NONAME ; void MpEngine::changeUsbBlockingState(enum MpEngine::UsbBlockingState)
-	?setLoudness@MpEngine@@QAEX_N@Z @ 125 NONAME ; void MpEngine::setLoudness(bool)
-	?scanFinished@MpSongScanner@@IAEXHH@Z @ 126 NONAME ; void MpSongScanner::scanFinished(int, int)
-	?reorderPlaylist@MpEngine@@QAEXHHHH@Z @ 127 NONAME ; void MpEngine::reorderPlaylist(int, int, int, int)
-	?qt_metacast@MpSongScanner@@UAEPAXPBD@Z @ 128 NONAME ; void * MpSongScanner::qt_metacast(char const *)
+	?instance@MpEngineFactory@@SAPAV1@XZ @ 1 NONAME ; class MpEngineFactory * MpEngineFactory::instance(void)
+	?saveToCurrentPlaylist@MpEngine@@QAEXAAV?$QList@H@@PAVMpMpxCollectionData@@@Z @ 2 NONAME ; void MpEngine::saveToCurrentPlaylist(class QList<int> &, class MpMpxCollectionData *)
+	?handleDeleteStarted@MpEngine@@QAEXW4TCollectionContext@@H@Z @ 3 NONAME ; void MpEngine::handleDeleteStarted(enum TCollectionContext, int)
+	?getMuteState@MpEngine@@QAEXXZ @ 4 NONAME ; void MpEngine::getMuteState(void)
+	?collectionData@MpEngine@@QAEPAVMpMpxCollectionData@@XZ @ 5 NONAME ; class MpMpxCollectionData * MpEngine::collectionData(void)
+	?createPlaylist@MpEngine@@QAEXAAVQString@@AAV?$QList@H@@PAVMpMpxCollectionData@@@Z @ 6 NONAME ; void MpEngine::createPlaylist(class QString &, class QList<int> &, class MpMpxCollectionData *)
+	?collectionPlaylistOpened@MpEngine@@IAEXXZ @ 7 NONAME ; void MpEngine::collectionPlaylistOpened(void)
+	?renamePlaylist@MpEngine@@QAEXAAVQString@@H@Z @ 8 NONAME ; void MpEngine::renamePlaylist(class QString &, int)
+	?mute@MpEngine@@QAEXXZ @ 9 NONAME ; void MpEngine::mute(void)
+	?scanCountChanged@MpSongScanner@@IAEXH@Z @ 10 NONAME ; void MpSongScanner::scanCountChanged(int)
+	?handleUsbMtpEndEvent@MpEngine@@AAEXXZ @ 11 NONAME ; void MpEngine::handleUsbMtpEndEvent(void)
+	?setBalance@MpEngine@@QAEXH@Z @ 12 NONAME ; void MpEngine::setBalance(int)
+	?playAlbumSongs@MpEngine@@QAEXHHPAVMpMpxCollectionData@@@Z @ 13 NONAME ; void MpEngine::playAlbumSongs(int, int, class MpMpxCollectionData *)
+	?getVolume@MpEngine@@QAEXXZ @ 14 NONAME ; void MpEngine::getVolume(void)
+	?setShuffle@MpEngine@@QAEX_N@Z @ 15 NONAME ; void MpEngine::setShuffle(bool)
+	?openIsolatedCollection@MpEngine@@QAEXW4TCollectionContext@@@Z @ 16 NONAME ; void MpEngine::openIsolatedCollection(enum TCollectionContext)
+	?usbSynchronizationFinished@MpEngine@@IAEXXZ @ 17 NONAME ; void MpEngine::usbSynchronizationFinished(void)
+	?qt_metacall@MpEngine@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 18 NONAME ; int MpEngine::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?playlistSaved@MpEngine@@IAEX_N@Z @ 19 NONAME ; void MpEngine::playlistSaved(bool)
+	?playbackData@MpEngine@@QAEPAVMpPlaybackData@@XZ @ 20 NONAME ; class MpPlaybackData * MpEngine::playbackData(void)
+	?stop@MpEngine@@QAEXXZ @ 21 NONAME ; void MpEngine::stop(void)
+	?scan@MpSongScanner@@QAEX_N@Z @ 22 NONAME ; void MpSongScanner::scan(bool)
+	?openCollection@MpEngine@@QAEXW4TCollectionContext@@@Z @ 23 NONAME ; void MpEngine::openCollection(enum TCollectionContext)
+	?decreaseVolume@MpEngine@@QAEXXZ @ 24 NONAME ; void MpEngine::decreaseVolume(void)
+	??0MpEngineFactory@@AAE@XZ @ 25 NONAME ; MpEngineFactory::MpEngineFactory(void)
+	?handleDiskEvent@MpSongScanner@@QAEXW4MpxDiskEvents@@@Z @ 26 NONAME ; void MpSongScanner::handleDiskEvent(enum MpxDiskEvents)
+	?tr@MpEngine@@SA?AVQString@@PBD0H@Z @ 27 NONAME ; class QString MpEngine::tr(char const *, char const *, int)
+	?trUtf8@MpEngine@@SA?AVQString@@PBD0@Z @ 28 NONAME ; class QString MpEngine::trUtf8(char const *, char const *)
+	?presetNames@MpEngine@@QAE?AVQStringList@@XZ @ 29 NONAME ; class QStringList MpEngine::presetNames(void)
+	?previewItem@MpEngine@@QAEXH@Z @ 30 NONAME ; void MpEngine::previewItem(int)
+	??1MpSongScanner@@UAE@XZ @ 31 NONAME ; MpSongScanner::~MpSongScanner(void)
+	?loudness@MpEngine@@QAE_NXZ @ 32 NONAME ; bool MpEngine::loudness(void)
+	?deleteSongs@MpEngine@@QAEXAAV?$QList@H@@@Z @ 33 NONAME ; void MpEngine::deleteSongs(class QList<int> &)
+	?releaseIsolatedCollection@MpEngine@@QAEXXZ @ 34 NONAME ; void MpEngine::releaseIsolatedCollection(void)
+	?deleteStarted@MpEngine@@IAEXW4TCollectionContext@@H@Z @ 35 NONAME ; void MpEngine::deleteStarted(enum TCollectionContext, int)
+	?stopSeeking@MpEngine@@QAEXXZ @ 36 NONAME ; void MpEngine::stopSeeking(void)
+	?initialize@MpEngine@@AAEXVTUid@@W4EngineMode@1@@Z @ 37 NONAME ; void MpEngine::initialize(class TUid, enum MpEngine::EngineMode)
+	?tr@MpEngine@@SA?AVQString@@PBD0@Z @ 38 NONAME ; class QString MpEngine::tr(char const *, char const *)
+	?disableEqualizer@MpEngine@@QAEXXZ @ 39 NONAME ; void MpEngine::disableEqualizer(void)
+	?getStaticMetaObject@MpEngine@@SAABUQMetaObject@@XZ @ 40 NONAME ; struct QMetaObject const & MpEngine::getStaticMetaObject(void)
+	?qt_metacast@MpEngineFactory@@UAEPAXPBD@Z @ 41 NONAME ; void * MpEngineFactory::qt_metacast(char const *)
+	?libraryUpdated@MpEngine@@IAEXXZ @ 42 NONAME ; void MpEngine::libraryUpdated(void)
+	?unmute@MpEngine@@QAEXXZ @ 43 NONAME ; void MpEngine::unmute(void)
+	??0MpSongScanner@@QAE@PAVMpMpxHarvesterFrameworkWrapper@@PAVQObject@@@Z @ 44 NONAME ; MpSongScanner::MpSongScanner(class MpMpxHarvesterFrameworkWrapper *, class QObject *)
+	?checkForSystemEvents@MpEngine@@QAEXXZ @ 45 NONAME ; void MpEngine::checkForSystemEvents(void)
+	?applyPreset@MpEngine@@QAEXH@Z @ 46 NONAME ; void MpEngine::applyPreset(int)
+	?volumePropertyChanged@MpEngine@@IAEXW4MpVolumeProperty@MpCommon@@H@Z @ 47 NONAME ; void MpEngine::volumePropertyChanged(enum MpCommon::MpVolumeProperty, int)
+	?trUtf8@MpEngineFactory@@SA?AVQString@@PBD0H@Z @ 48 NONAME ; class QString MpEngineFactory::trUtf8(char const *, char const *, int)
+	?staticMetaObject@MpEngine@@2UQMetaObject@@B @ 49 NONAME ; struct QMetaObject const MpEngine::staticMetaObject
+	?scanStarted@MpSongScanner@@IAEXXZ @ 50 NONAME ; void MpSongScanner::scanStarted(void)
+	?unableToCotinueDueUSB@MpEngine@@IAEXXZ @ 51 NONAME ; void MpEngine::unableToCotinueDueUSB(void)
+	?openCollectionItem@MpEngine@@QAEXH@Z @ 52 NONAME ; void MpEngine::openCollectionItem(int)
+	?handleScanStarted@MpEngine@@QAEXXZ @ 53 NONAME ; void MpEngine::handleScanStarted(void)
+	?back@MpEngine@@QAEXXZ @ 54 NONAME ; void MpEngine::back(void)
+	?tr@MpSongScanner@@SA?AVQString@@PBD0H@Z @ 55 NONAME ; class QString MpSongScanner::tr(char const *, char const *, int)
+	?songScanner@MpEngine@@QAEPAVMpSongScanner@@XZ @ 56 NONAME ; class MpSongScanner * MpEngine::songScanner(void)
+	?handleUsbMassStorageStartEvent@MpEngine@@AAEXXZ @ 57 NONAME ; void MpEngine::handleUsbMassStorageStartEvent(void)
+	?saveActivityData@MpEngine@@QAEXAAVQByteArray@@@Z @ 58 NONAME ; void MpEngine::saveActivityData(class QByteArray &)
+	?getMaxVolume@MpEngine@@QAEXXZ @ 59 NONAME ; void MpEngine::getMaxVolume(void)
+	?handleDeleteEnded@MpEngine@@QAEX_N@Z @ 60 NONAME ; void MpEngine::handleDeleteEnded(bool)
+	?handleDiskEvent@MpEngine@@QAEXW4MpxDiskEvents@@@Z @ 61 NONAME ; void MpEngine::handleDiskEvent(enum MpxDiskEvents)
+	?verifyUsbBlocking@MpEngine@@QAE_N_N@Z @ 62 NONAME ; bool MpEngine::verifyUsbBlocking(bool)
+	?usbSynchronizationStarted@MpEngine@@IAEXXZ @ 63 NONAME ; void MpEngine::usbSynchronizationStarted(void)
+	?handleUsbMassStorageEndEvent@MpEngine@@AAEXXZ @ 64 NONAME ; void MpEngine::handleUsbMassStorageEndEvent(void)
+	??0MpEngine@@AAE@XZ @ 65 NONAME ; MpEngine::MpEngine(void)
+	?getStaticMetaObject@MpEngineFactory@@SAABUQMetaObject@@XZ @ 66 NONAME ; struct QMetaObject const & MpEngineFactory::getStaticMetaObject(void)
+	?getStaticMetaObject@MpSongScanner@@SAABUQMetaObject@@XZ @ 67 NONAME ; struct QMetaObject const & MpSongScanner::getStaticMetaObject(void)
+	?isolatedCollectionOpened@MpEngine@@IAEXPAVMpMpxCollectionData@@@Z @ 68 NONAME ; void MpEngine::isolatedCollectionOpened(class MpMpxCollectionData *)
+	?aboutToAddSongs@MpEngine@@IAEXH@Z @ 69 NONAME ; void MpEngine::aboutToAddSongs(int)
+	??1MpEngine@@UAE@XZ @ 70 NONAME ; MpEngine::~MpEngine(void)
+	?changeUsbBlockingState@MpEngine@@AAEXW4UsbBlockingState@1@@Z @ 71 NONAME ; void MpEngine::changeUsbBlockingState(enum MpEngine::UsbBlockingState)
+	?setVolume@MpEngine@@QAEXH@Z @ 72 NONAME ; void MpEngine::setVolume(int)
+	?metaObject@MpEngine@@UBEPBUQMetaObject@@XZ @ 73 NONAME ; struct QMetaObject const * MpEngine::metaObject(void) const
+	??_EMpSongScanner@@UAE@I@Z @ 74 NONAME ; MpSongScanner::~MpSongScanner(unsigned int)
+	?createIsolatedEngine@MpEngineFactory@@SAPAVMpEngine@@W4EngineMode@2@@Z @ 75 NONAME ; class MpEngine * MpEngineFactory::createIsolatedEngine(enum MpEngine::EngineMode)
+	?equalizerReady@MpEngine@@IAEXXZ @ 76 NONAME ; void MpEngine::equalizerReady(void)
+	?findAlbumSongs@MpEngine@@QAEXH@Z @ 77 NONAME ; void MpEngine::findAlbumSongs(int)
+	?setPosition@MpEngine@@QAEXH@Z @ 78 NONAME ; void MpEngine::setPosition(int)
+	?metaObject@MpEngineFactory@@UBEPBUQMetaObject@@XZ @ 79 NONAME ; struct QMetaObject const * MpEngineFactory::metaObject(void) const
+	?handleEqualizerReady@MpEngine@@QAEXXZ @ 80 NONAME ; void MpEngine::handleEqualizerReady(void)
+	?tr@MpSongScanner@@SA?AVQString@@PBD0@Z @ 81 NONAME ; class QString MpSongScanner::tr(char const *, char const *)
+	??_EMpEngineFactory@@UAE@I@Z @ 82 NONAME ; MpEngineFactory::~MpEngineFactory(unsigned int)
+	?skipForward@MpEngine@@QAEXXZ @ 83 NONAME ; void MpEngine::skipForward(void)
+	?songData@MpEngine@@QAEPAVMpSongData@@XZ @ 84 NONAME ; class MpSongData * MpEngine::songData(void)
+	?trUtf8@MpSongScanner@@SA?AVQString@@PBD0H@Z @ 85 NONAME ; class QString MpSongScanner::trUtf8(char const *, char const *, int)
+	?close@MpEngineFactory@@SAXXZ @ 86 NONAME ; void MpEngineFactory::close(void)
+	?libraryAboutToUpdate@MpEngine@@IAEXXZ @ 87 NONAME ; void MpEngine::libraryAboutToUpdate(void)
+	?reopenCollection@MpEngine@@QAEXXZ @ 88 NONAME ; void MpEngine::reopenCollection(void)
+	?trUtf8@MpEngine@@SA?AVQString@@PBD0H@Z @ 89 NONAME ; class QString MpEngine::trUtf8(char const *, char const *, int)
+	?songsDeleted@MpEngine@@IAEX_N@Z @ 90 NONAME ; void MpEngine::songsDeleted(bool)
+	?refreshLibrary@MpEngine@@QAEX_N@Z @ 91 NONAME ; void MpEngine::refreshLibrary(bool)
+	?qt_metacast@MpEngine@@UAEPAXPBD@Z @ 92 NONAME ; void * MpEngine::qt_metacast(char const *)
+	?startSeekForward@MpEngine@@QAEXXZ @ 93 NONAME ; void MpEngine::startSeekForward(void)
+	?saveToPlaylist@MpEngine@@QAEXHAAV?$QList@H@@@Z @ 94 NONAME ; void MpEngine::saveToPlaylist(int, class QList<int> &)
+	?qt_metacall@MpEngineFactory@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 95 NONAME ; int MpEngineFactory::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@MpSongScanner@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 96 NONAME ; int MpSongScanner::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?tr@MpEngineFactory@@SA?AVQString@@PBD0H@Z @ 97 NONAME ; class QString MpEngineFactory::tr(char const *, char const *, int)
+	?findPlaylists@MpEngine@@QAEXAAVQStringList@@@Z @ 98 NONAME ; void MpEngine::findPlaylists(class QStringList &)
+	?isAutomaticScan@MpSongScanner@@QAE_NXZ @ 99 NONAME ; bool MpSongScanner::isAutomaticScan(void)
+	??1MpEngineFactory@@UAE@XZ @ 100 NONAME ; MpEngineFactory::~MpEngineFactory(void)
+	?staticMetaObject@MpEngineFactory@@2UQMetaObject@@B @ 101 NONAME ; struct QMetaObject const MpEngineFactory::staticMetaObject
+	?pause@MpEngine@@QAEXXZ @ 102 NONAME ; void MpEngine::pause(void)
+	?playEmbedded@MpEngine@@QAEXVQString@@@Z @ 103 NONAME ; void MpEngine::playEmbedded(class QString)
+	?shuffleAll@MpEngine@@QAEXXZ @ 104 NONAME ; void MpEngine::shuffleAll(void)
+	?metaObject@MpSongScanner@@UBEPBUQMetaObject@@XZ @ 105 NONAME ; struct QMetaObject const * MpSongScanner::metaObject(void) const
+	?renamePlaylist@MpEngine@@QAEXAAVQString@@@Z @ 106 NONAME ; void MpEngine::renamePlaylist(class QString &)
+	?setRepeat@MpEngine@@QAEX_N@Z @ 107 NONAME ; void MpEngine::setRepeat(bool)
+	?cancelCollectionRequest@MpEngine@@QAEXXZ @ 108 NONAME ; void MpEngine::cancelCollectionRequest(void)
+	?trUtf8@MpEngineFactory@@SA?AVQString@@PBD0@Z @ 109 NONAME ; class QString MpEngineFactory::trUtf8(char const *, char const *)
+	?increaseVolume@MpEngine@@QAEXXZ @ 110 NONAME ; void MpEngine::increaseVolume(void)
+	?containerContentsChanged@MpEngine@@IAEXXZ @ 111 NONAME ; void MpEngine::containerContentsChanged(void)
+	?playPause@MpEngine@@QAEXXZ @ 112 NONAME ; void MpEngine::playPause(void)
+	?playlistsRenamed@MpEngine@@IAEX_N@Z @ 113 NONAME ; void MpEngine::playlistsRenamed(bool)
+	?startSeekBackward@MpEngine@@QAEXXZ @ 114 NONAME ; void MpEngine::startSeekBackward(void)
+	?tr@MpEngineFactory@@SA?AVQString@@PBD0@Z @ 115 NONAME ; class QString MpEngineFactory::tr(char const *, char const *)
+	?playEmbedded@MpEngine@@QAEXABVXQSharableFile@@@Z @ 116 NONAME ; void MpEngine::playEmbedded(class XQSharableFile const &)
+	?retrieveSongDetails@MpEngine@@QAEXH@Z @ 117 NONAME ; void MpEngine::retrieveSongDetails(int)
+	?handleUsbMtpStartEvent@MpEngine@@AAEXXZ @ 118 NONAME ; void MpEngine::handleUsbMtpStartEvent(void)
+	?cancelScan@MpSongScanner@@QAEXXZ @ 119 NONAME ; void MpSongScanner::cancelScan(void)
+	?trUtf8@MpSongScanner@@SA?AVQString@@PBD0@Z @ 120 NONAME ; class QString MpSongScanner::trUtf8(char const *, char const *)
+	?activePreset@MpEngine@@QAEHXZ @ 121 NONAME ; int MpEngine::activePreset(void)
+	?handleUsbEvent@MpEngine@@QAEXW4MpxUsbEvents@@@Z @ 122 NONAME ; void MpEngine::handleUsbEvent(enum MpxUsbEvents)
+	?loadActivityData@MpEngine@@QAEXABVQByteArray@@@Z @ 123 NONAME ; void MpEngine::loadActivityData(class QByteArray const &)
+	?sharedEngine@MpEngineFactory@@SAPAVMpEngine@@XZ @ 124 NONAME ; class MpEngine * MpEngineFactory::sharedEngine(void)
+	?balance@MpEngine@@QAEHXZ @ 125 NONAME ; int MpEngine::balance(void)
+	?createSharedEngine@MpEngineFactory@@SAPAVMpEngine@@VTUid@@W4EngineMode@2@@Z @ 126 NONAME ; class MpEngine * MpEngineFactory::createSharedEngine(class TUid, enum MpEngine::EngineMode)
+	?usbBlocked@MpEngine@@IAEX_N@Z @ 127 NONAME ; void MpEngine::usbBlocked(bool)
+	?handleUsbMtpNotActive@MpEngine@@AAEXXZ @ 128 NONAME ; void MpEngine::handleUsbMtpNotActive(void)
+	?restorePathFailed@MpEngine@@IAEXXZ @ 129 NONAME ; void MpEngine::restorePathFailed(void)
+	?handleScanEnded@MpSongScanner@@QAEXHH@Z @ 130 NONAME ; void MpSongScanner::handleScanEnded(int, int)
+	?staticMetaObject@MpSongScanner@@2UQMetaObject@@B @ 131 NONAME ; struct QMetaObject const MpSongScanner::staticMetaObject
+	?handleScanEnded@MpEngine@@QAEXHH@Z @ 132 NONAME ; void MpEngine::handleScanEnded(int, int)
+	??_EMpEngine@@UAE@I@Z @ 133 NONAME ; MpEngine::~MpEngine(unsigned int)
+	?play@MpEngine@@QAEXXZ @ 134 NONAME ; void MpEngine::play(void)
+	?skipBackward@MpEngine@@QAEXXZ @ 135 NONAME ; void MpEngine::skipBackward(void)
+	?qt_metacast@MpSongScanner@@UAEPAXPBD@Z @ 136 NONAME ; void * MpSongScanner::qt_metacast(char const *)
+	?reorderPlaylist@MpEngine@@QAEXHHHH@Z @ 137 NONAME ; void MpEngine::reorderPlaylist(int, int, int, int)
+	?scanFinished@MpSongScanner@@IAEXHH@Z @ 138 NONAME ; void MpSongScanner::scanFinished(int, int)
+	?setLoudness@MpEngine@@QAEX_N@Z @ 139 NONAME ; void MpEngine::setLoudness(bool)
 
--- a/mpengine/eabi/mpengineu.def	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpengine/eabi/mpengineu.def	Fri Aug 06 16:51:36 2010 -0500
@@ -47,84 +47,95 @@
 	_ZN8MpEngine11songScannerEv @ 46 NONAME
 	_ZN8MpEngine11stopSeekingEv @ 47 NONAME
 	_ZN8MpEngine12activePresetEv @ 48 NONAME
-	_ZN8MpEngine12playEmbeddedE7QString @ 49 NONAME
-	_ZN8MpEngine12playEmbeddedERK14XQSharableFile @ 50 NONAME
-	_ZN8MpEngine12playbackDataEv @ 51 NONAME
-	_ZN8MpEngine12skipBackwardEv @ 52 NONAME
-	_ZN8MpEngine12songsDeletedEb @ 53 NONAME
-	_ZN8MpEngine13deleteStartedE18TCollectionContexti @ 54 NONAME
-	_ZN8MpEngine13findPlaylistsER11QStringList @ 55 NONAME
-	_ZN8MpEngine13playlistSavedEb @ 56 NONAME
-	_ZN8MpEngine14collectionDataEv @ 57 NONAME
-	_ZN8MpEngine14createPlaylistER7QStringR5QListIiEP19MpMpxCollectionData @ 58 NONAME
-	_ZN8MpEngine14equalizerReadyEv @ 59 NONAME
-	_ZN8MpEngine14findAlbumSongsEi @ 60 NONAME
-	_ZN8MpEngine14handleUsbEventE12MpxUsbEvents @ 61 NONAME
-	_ZN8MpEngine14libraryUpdatedEv @ 62 NONAME
-	_ZN8MpEngine14openCollectionE18TCollectionContext @ 63 NONAME
-	_ZN8MpEngine14playAlbumSongsEiiP19MpMpxCollectionData @ 64 NONAME
-	_ZN8MpEngine14refreshLibraryEb @ 65 NONAME
-	_ZN8MpEngine14renamePlaylistER7QString @ 66 NONAME
-	_ZN8MpEngine14renamePlaylistER7QStringi @ 67 NONAME
-	_ZN8MpEngine14saveToPlaylistEiR5QListIiE @ 68 NONAME
-	_ZN8MpEngine15aboutToAddSongsEi @ 69 NONAME
-	_ZN8MpEngine15handleDiskEventE13MpxDiskEvents @ 70 NONAME
-	_ZN8MpEngine15handleScanEndedEii @ 71 NONAME
-	_ZN8MpEngine15reorderPlaylistEiiii @ 72 NONAME
-	_ZN8MpEngine16disableEqualizerEv @ 73 NONAME
-	_ZN8MpEngine16loadActivityDataERK10QByteArray @ 74 NONAME
-	_ZN8MpEngine16playlistsRenamedEb @ 75 NONAME
-	_ZN8MpEngine16reopenCollectionEv @ 76 NONAME
-	_ZN8MpEngine16saveActivityDataER10QByteArray @ 77 NONAME
-	_ZN8MpEngine16startSeekForwardEv @ 78 NONAME
-	_ZN8MpEngine16staticMetaObjectE @ 79 NONAME DATA 16
-	_ZN8MpEngine17handleDeleteEndedEb @ 80 NONAME
-	_ZN8MpEngine17handleScanStartedEv @ 81 NONAME
-	_ZN8MpEngine17restorePathFailedEv @ 82 NONAME
-	_ZN8MpEngine17startSeekBackwardEv @ 83 NONAME
-	_ZN8MpEngine17verifyUsbBlockingEb @ 84 NONAME
-	_ZN8MpEngine18openCollectionItemEi @ 85 NONAME
-	_ZN8MpEngine19getStaticMetaObjectEv @ 86 NONAME
-	_ZN8MpEngine19handleDeleteStartedE18TCollectionContexti @ 87 NONAME
-	_ZN8MpEngine19retrieveSongDetailsEi @ 88 NONAME
-	_ZN8MpEngine20checkForSystemEventsEv @ 89 NONAME
-	_ZN8MpEngine20handleEqualizerReadyEv @ 90 NONAME
-	_ZN8MpEngine20handleUsbMtpEndEventEv @ 91 NONAME
-	_ZN8MpEngine20libraryAboutToUpdateEv @ 92 NONAME
-	_ZN8MpEngine21handleUsbMtpNotActiveEv @ 93 NONAME
-	_ZN8MpEngine21saveToCurrentPlaylistER5QListIiEP19MpMpxCollectionData @ 94 NONAME
-	_ZN8MpEngine21unableToCotinueDueUSBEv @ 95 NONAME
-	_ZN8MpEngine22changeUsbBlockingStateENS_16UsbBlockingStateE @ 96 NONAME
-	_ZN8MpEngine22handleUsbMtpStartEventEv @ 97 NONAME
-	_ZN8MpEngine22openIsolatedCollectionE18TCollectionContext @ 98 NONAME
-	_ZN8MpEngine23cancelCollectionRequestEv @ 99 NONAME
-	_ZN8MpEngine24collectionPlaylistOpenedEv @ 100 NONAME
-	_ZN8MpEngine24containerContentsChangedEv @ 101 NONAME
-	_ZN8MpEngine24isolatedCollectionOpenedEP19MpMpxCollectionData @ 102 NONAME
-	_ZN8MpEngine25releaseIsolatedCollectionEv @ 103 NONAME
-	_ZN8MpEngine25usbSynchronizationStartedEv @ 104 NONAME
-	_ZN8MpEngine26usbSynchronizationFinishedEv @ 105 NONAME
-	_ZN8MpEngine28handleUsbMassStorageEndEventEv @ 106 NONAME
-	_ZN8MpEngine30handleUsbMassStorageStartEventEv @ 107 NONAME
-	_ZN8MpEngine4backEv @ 108 NONAME
-	_ZN8MpEngine4stopEv @ 109 NONAME
-	_ZN8MpEngine7balanceEv @ 110 NONAME
-	_ZN8MpEngine8loudnessEv @ 111 NONAME
-	_ZN8MpEngine8songDataEv @ 112 NONAME
-	_ZN8MpEngine9playPauseEv @ 113 NONAME
-	_ZN8MpEngine9setRepeatEb @ 114 NONAME
-	_ZN8MpEngineC1Ev @ 115 NONAME
-	_ZN8MpEngineC2Ev @ 116 NONAME
-	_ZN8MpEngineD0Ev @ 117 NONAME
-	_ZN8MpEngineD1Ev @ 118 NONAME
-	_ZN8MpEngineD2Ev @ 119 NONAME
-	_ZNK13MpSongScanner10metaObjectEv @ 120 NONAME
-	_ZNK15MpEngineFactory10metaObjectEv @ 121 NONAME
-	_ZNK8MpEngine10metaObjectEv @ 122 NONAME
-	_ZTI13MpSongScanner @ 123 NONAME
-	_ZTI15MpEngineFactory @ 124 NONAME
-	_ZTI8MpEngine @ 125 NONAME
-	_ZTV13MpSongScanner @ 126 NONAME
-	_ZTV15MpEngineFactory @ 127 NONAME
-	_ZTV8MpEngine @ 128 NONAME
+	_ZN8MpEngine12getMaxVolumeEv @ 49 NONAME
+	_ZN8MpEngine12getMuteStateEv @ 50 NONAME
+	_ZN8MpEngine12playEmbeddedE7QString @ 51 NONAME
+	_ZN8MpEngine12playEmbeddedERK14XQSharableFile @ 52 NONAME
+	_ZN8MpEngine12playbackDataEv @ 53 NONAME
+	_ZN8MpEngine12skipBackwardEv @ 54 NONAME
+	_ZN8MpEngine12songsDeletedEb @ 55 NONAME
+	_ZN8MpEngine13deleteStartedE18TCollectionContexti @ 56 NONAME
+	_ZN8MpEngine13findPlaylistsER11QStringList @ 57 NONAME
+	_ZN8MpEngine13playlistSavedEb @ 58 NONAME
+	_ZN8MpEngine14collectionDataEv @ 59 NONAME
+	_ZN8MpEngine14createPlaylistER7QStringR5QListIiEP19MpMpxCollectionData @ 60 NONAME
+	_ZN8MpEngine14decreaseVolumeEv @ 61 NONAME
+	_ZN8MpEngine14equalizerReadyEv @ 62 NONAME
+	_ZN8MpEngine14findAlbumSongsEi @ 63 NONAME
+	_ZN8MpEngine14handleUsbEventE12MpxUsbEvents @ 64 NONAME
+	_ZN8MpEngine14increaseVolumeEv @ 65 NONAME
+	_ZN8MpEngine14libraryUpdatedEv @ 66 NONAME
+	_ZN8MpEngine14openCollectionE18TCollectionContext @ 67 NONAME
+	_ZN8MpEngine14playAlbumSongsEiiP19MpMpxCollectionData @ 68 NONAME
+	_ZN8MpEngine14refreshLibraryEb @ 69 NONAME
+	_ZN8MpEngine14renamePlaylistER7QString @ 70 NONAME
+	_ZN8MpEngine14renamePlaylistER7QStringi @ 71 NONAME
+	_ZN8MpEngine14saveToPlaylistEiR5QListIiE @ 72 NONAME
+	_ZN8MpEngine15aboutToAddSongsEi @ 73 NONAME
+	_ZN8MpEngine15handleDiskEventE13MpxDiskEvents @ 74 NONAME
+	_ZN8MpEngine15handleScanEndedEii @ 75 NONAME
+	_ZN8MpEngine15reorderPlaylistEiiii @ 76 NONAME
+	_ZN8MpEngine16disableEqualizerEv @ 77 NONAME
+	_ZN8MpEngine16loadActivityDataERK10QByteArray @ 78 NONAME
+	_ZN8MpEngine16playlistsRenamedEb @ 79 NONAME
+	_ZN8MpEngine16reopenCollectionEv @ 80 NONAME
+	_ZN8MpEngine16saveActivityDataER10QByteArray @ 81 NONAME
+	_ZN8MpEngine16startSeekForwardEv @ 82 NONAME
+	_ZN8MpEngine16staticMetaObjectE @ 83 NONAME DATA 16
+	_ZN8MpEngine17handleDeleteEndedEb @ 84 NONAME
+	_ZN8MpEngine17handleScanStartedEv @ 85 NONAME
+	_ZN8MpEngine17restorePathFailedEv @ 86 NONAME
+	_ZN8MpEngine17startSeekBackwardEv @ 87 NONAME
+	_ZN8MpEngine17verifyUsbBlockingEb @ 88 NONAME
+	_ZN8MpEngine18openCollectionItemEi @ 89 NONAME
+	_ZN8MpEngine19getStaticMetaObjectEv @ 90 NONAME
+	_ZN8MpEngine19handleDeleteStartedE18TCollectionContexti @ 91 NONAME
+	_ZN8MpEngine19retrieveSongDetailsEi @ 92 NONAME
+	_ZN8MpEngine20checkForSystemEventsEv @ 93 NONAME
+	_ZN8MpEngine20handleEqualizerReadyEv @ 94 NONAME
+	_ZN8MpEngine20handleUsbMtpEndEventEv @ 95 NONAME
+	_ZN8MpEngine20libraryAboutToUpdateEv @ 96 NONAME
+	_ZN8MpEngine21handleUsbMtpNotActiveEv @ 97 NONAME
+	_ZN8MpEngine21saveToCurrentPlaylistER5QListIiEP19MpMpxCollectionData @ 98 NONAME
+	_ZN8MpEngine21unableToCotinueDueUSBEv @ 99 NONAME
+	_ZN8MpEngine21volumePropertyChangedEN8MpCommon16MpVolumePropertyEi @ 100 NONAME
+	_ZN8MpEngine22changeUsbBlockingStateENS_16UsbBlockingStateE @ 101 NONAME
+	_ZN8MpEngine22handleUsbMtpStartEventEv @ 102 NONAME
+	_ZN8MpEngine22openIsolatedCollectionE18TCollectionContext @ 103 NONAME
+	_ZN8MpEngine23cancelCollectionRequestEv @ 104 NONAME
+	_ZN8MpEngine24collectionPlaylistOpenedEv @ 105 NONAME
+	_ZN8MpEngine24containerContentsChangedEv @ 106 NONAME
+	_ZN8MpEngine24isolatedCollectionOpenedEP19MpMpxCollectionData @ 107 NONAME
+	_ZN8MpEngine25releaseIsolatedCollectionEv @ 108 NONAME
+	_ZN8MpEngine25usbSynchronizationStartedEv @ 109 NONAME
+	_ZN8MpEngine26usbSynchronizationFinishedEv @ 110 NONAME
+	_ZN8MpEngine28handleUsbMassStorageEndEventEv @ 111 NONAME
+	_ZN8MpEngine30handleUsbMassStorageStartEventEv @ 112 NONAME
+	_ZN8MpEngine4backEv @ 113 NONAME
+	_ZN8MpEngine4muteEv @ 114 NONAME
+	_ZN8MpEngine4playEv @ 115 NONAME
+	_ZN8MpEngine4stopEv @ 116 NONAME
+	_ZN8MpEngine5pauseEv @ 117 NONAME
+	_ZN8MpEngine6unmuteEv @ 118 NONAME
+	_ZN8MpEngine7balanceEv @ 119 NONAME
+	_ZN8MpEngine8loudnessEv @ 120 NONAME
+	_ZN8MpEngine8songDataEv @ 121 NONAME
+	_ZN8MpEngine9getVolumeEv @ 122 NONAME
+	_ZN8MpEngine9playPauseEv @ 123 NONAME
+	_ZN8MpEngine9setRepeatEb @ 124 NONAME
+	_ZN8MpEngine9setVolumeEi @ 125 NONAME
+	_ZN8MpEngineC1Ev @ 126 NONAME
+	_ZN8MpEngineC2Ev @ 127 NONAME
+	_ZN8MpEngineD0Ev @ 128 NONAME
+	_ZN8MpEngineD1Ev @ 129 NONAME
+	_ZN8MpEngineD2Ev @ 130 NONAME
+	_ZNK13MpSongScanner10metaObjectEv @ 131 NONAME
+	_ZNK15MpEngineFactory10metaObjectEv @ 132 NONAME
+	_ZNK8MpEngine10metaObjectEv @ 133 NONAME
+	_ZTI13MpSongScanner @ 134 NONAME
+	_ZTI15MpEngineFactory @ 135 NONAME
+	_ZTI8MpEngine @ 136 NONAME
+	_ZTV13MpSongScanner @ 137 NONAME
+	_ZTV15MpEngineFactory @ 138 NONAME
+	_ZTV8MpEngine @ 139 NONAME
 
--- a/mpengine/inc/mpmediakeyhandler.h	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +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: Music Player media key handler.
-*
-*/
-
-#ifndef MPMEDIAKEYHANDLER_H
-#define MPMEDIAKEYHANDLER_H
-
-#include <QObject>
-
-class MpMediaKeyHandlerPrivate;
-
-class MpMediaKeyHandler : public QObject
-{
-    Q_OBJECT
-
-    friend class MpMediaKeyHandlerPrivate;
-
-public:
-
-    explicit MpMediaKeyHandler( QObject *parent = 0 );
-    virtual ~MpMediaKeyHandler();
-
-    void setEnabled( bool enable );
-
-signals:
-
-    void volumeChanged( int volume );
-    void errorOccured( int error );
-
-public slots:
-
-
-
-private:
-
-    Q_DISABLE_COPY(MpMediaKeyHandler)
-    MpMediaKeyHandlerPrivate *d_ptr;
-
-};
-
-#endif // MPMEDIAKEYHANDLER_H
--- a/mpengine/inc/mpmediakeyhandler_p.h	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,188 +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: Music Player media key handler - private implementation.
-*
-*/
-
-#ifndef MPMEDIAKEYHANDLER_P_H
-#define MPMEDIAKEYHANDLER_P_H
-
-
-#include <remconcoreapitargetobserver.h>
-#include <mpxplaybackobserver.h>
-#include <mpxplaybackframeworkdefs.h>
-
-class CRemConInterfaceSelector;
-class MMPXPlaybackUtility;
-class MpMediaKeyHandler;
-class MpMediaKeyRemConResponse;
-
-class MpMediaKeyHandlerPrivate : public MRemConCoreApiTargetObserver,
-                                 public MMPXPlaybackCallback
-{
-public:
-
-    MpMediaKeyHandlerPrivate( MpMediaKeyHandler *wrapper );
-    virtual ~MpMediaKeyHandlerPrivate();
-
-    void init();
-    void setEnabled( bool enable );
-
-// From MRemConCoreApiTargetObserver
-
-    /**
-     * From MRemConCoreApiTargetObserver
-     * A command has been received.
-     *
-     * @param aOperationId The operation ID of the command.
-     * @param aButtonAct The button action associated with the command.
-     */
-    void MrccatoCommand(
-        TRemConCoreApiOperationId aOperationId,
-        TRemConCoreApiButtonAction aButtonAct );
-
-    /**
-     * From MRemConCoreApiTargetObserver
-     * A 'play' command has been received.
-     *
-     * @param aSpeed The playback speed.
-     * @param aButtonAct The button action associated with the command.
-     */
-    void MrccatoPlay(
-        TRemConCoreApiPlaybackSpeed aSpeed,
-        TRemConCoreApiButtonAction aButtonAct );
-
-    /**
-     * From MRemConCoreApiTargetObserver
-     * A 'tune function' command has been received.
-     *
-     * @param aTwoPart Determine which channel to be used.
-     * @param aMajorChannel The major channel number.
-     * @param aMinorChannel The minor channel number.
-     * @param aButtonAct The button action associated with the command.
-     */
-    void MrccatoTuneFunction(
-        TBool aTwoPart,
-        TUint aMajorChannel,
-        TUint aMinorChannel,
-        TRemConCoreApiButtonAction aButtonAct );
-
-    /**
-     * From MRemConCoreApiTargetObserver
-     * A 'select disk function' has been received.
-     *
-     * @param aDisk The disk.
-     * @param aButtonAct The button action associated with the command.
-     */
-    void MrccatoSelectDiskFunction(
-        TUint aDisk,
-        TRemConCoreApiButtonAction aButtonAct );
-
-    /**
-     * From MRemConCoreApiTargetObserver
-     * A 'select AV input function' has been received.
-     *
-     * @param aAvInputSignalNumber The AV input.
-     * @param aButtonAct The button action associated with the command.
-     */
-    void MrccatoSelectAvInputFunction(
-        TUint8 aAvInputSignalNumber,
-        TRemConCoreApiButtonAction aButtonAct );
-
-    /**
-     * From MRemConCoreApiTargetObserver
-     * A 'select audio input function' has been received.
-     *
-     * @param aAudioInputSignalNumber The audio input.
-     * @param aButtonAct The button action associated with the command.
-     */
-    void MrccatoSelectAudioInputFunction(
-        TUint8 aAudioInputSignalNumber,
-        TRemConCoreApiButtonAction aButtonAct );
-
-// from base class MMPXPlaybackCallback
-
-    /**
-     * From MMPXPlaybackCallback
-     * Handle playback property
-     *
-     * @param aProperty the property
-     * @param aValue the value of the property
-     * @param aError error code
-     */
-    void HandlePropertyL( TMPXPlaybackProperty aProperty, TInt aValue, TInt aError );
-
-    /**
-     * From MMPXPlaybackCallback
-     * Method is called continously until aComplete=ETrue, signifying that
-     * it is done and there will be no more callbacks
-     * Only new items are passed each time
-     *
-     * @param aPlayer UID of the subplayer
-     * @param aSubPlayers a list of sub players
-     * @param aComplete ETrue no more sub players. EFalse more subplayer
-     *                  expected
-     * @param aError error code
-     */
-    void HandleSubPlayerNamesL(
-        TUid aPlayer,
-        const MDesCArray* aSubPlayers,
-        TBool aComplete,
-        TInt aError );
-
-    /**
-     * From MMPXPlaybackCallback
-     * Handle media properties
-     *
-     * @param aMedia media
-     * @param aError error code
-     */
-    void HandleMediaL( const CMPXMedia& aMedia, TInt aError );
-
-private:
-
-    void DoInitL();
-    void SendCommand( TMPXPlaybackCommand aCommandId );
-    void DoSendCommandL( TMPXPlaybackCommand aCommandId );
-
-    /**
-     * Callback for timer
-     *
-     * @param aPtr Pointer pass to this callback function.
-     * @return Zero if callback function doesn't need to be called again.
-     *         Otherwise, non-zero.
-     */
-    static TInt TimerCallback( TAny* aPtr );
-
-    /**
-     * Handle repeat event
-     */
-    void HandleRepeatEvent();
-
-private:
-
-    MpMediaKeyHandler *q_ptr;
-
-    CRemConInterfaceSelector    *iInterfaceSelector;   // owned
-    MpMediaKeyRemConResponse    *iResponseHandler;     // owned
-    CPeriodic                   *iTimer;               // owned
-
-    MMPXPlaybackUtility         *iPlaybackUtility;
-
-    TBool                       iIncreaseVol;
-    TBool                       iEnabled;
-
-};
-
-#endif // MPMEDIAKEYHANDLER_P_H
--- a/mpengine/inc/mpmediakeyremconresponse.h	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +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: Music Player media key handler.
-*              Helper class for sending response back to Remote Controller Framework.
-*
-*/
-
-#ifndef MPMEDIAKEYREMCONKEYRESPONSE_H
-#define MPMEDIAKEYREMCONKEYRESPONSE_H
-
-#include <remconcoreapitarget.h>
-
-
-NONSHARABLE_CLASS( MpMediaKeyRemConResponse ) : public CActive
-{
-public:
-
-    /**
-     * Two-phased constructor.
-     *
-     * @since 3.0
-     * @param aRemConCoreApiTarget RemCon core target object.
-     * @return Pointer to newly created object.
-     */
-    static MpMediaKeyRemConResponse* NewL( CRemConCoreApiTarget& aRemConCoreApiTarget );
-
-    /**
-     * Destructor.
-     */
-    virtual ~MpMediaKeyRemConResponse();
-
-    /**
-     * Send the any key response back to Remcon server
-     *
-     * @since 3.0
-     * @param aOperationId RemCon operation Id.
-     */
-    void CompleteAnyKey( TRemConCoreApiOperationId aOperationId );
-
-private:
-
-    /**
-     * C++ default constructor.
-     */
-    MpMediaKeyRemConResponse( CRemConCoreApiTarget& aRemConCoreApiTarget );
-
-// from base class CActive
-
-    /**
-     * From CActive
-     * Handles an active object's request completion event.
-     */
-    void RunL();
-
-    /**
-     * From CActive
-     * Implements cancellation of an outstanding request.
-     */
-    void DoCancel();
-
-private:    // Data
-
-    // Response array.
-    RArray<TRemConCoreApiOperationId> iResponseArray;   // Own
-    CRemConCoreApiTarget& iRemConCoreApiTarget;         // Not own
-};
-
-#endif  // MPMEDIAKEYREMCONKEYRESPONSE_H
-
-// End of File
--- a/mpengine/inc/mpmpxplaybackframeworkwrapper.h	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpengine/inc/mpmpxplaybackframeworkwrapper.h	Fri Aug 06 16:51:36 2010 -0500
@@ -48,10 +48,16 @@
 
     void retrieveSongDetails();
 
+signals:
+
+    void volumePropertyChanged( MpCommon::MpVolumeProperty property, int value );
+
 public slots:
     
     void play( QString aFilename );
     void play( const XQSharableFile& file );
+    void play();
+    void pause();
     void playPause();
     void stop();
     void skipForward();
@@ -62,6 +68,14 @@
     void setPosition( int position );
     void setShuffle( bool mode );
     void setRepeat( bool mode );
+    void getMaxVolume();
+    void getVolume();
+    void increaseVolume();
+    void decreaseVolume();
+    void setVolume( int value );
+    void getMuteState();
+    void mute();
+    void unmute();
     void closeCurrentPlayback();
 
 private:
--- a/mpengine/inc/mpmpxplaybackframeworkwrapper_p.h	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpengine/inc/mpmpxplaybackframeworkwrapper_p.h	Fri Aug 06 16:51:36 2010 -0500
@@ -43,6 +43,8 @@
 
     void play( QString aFilename );
     void play( const XQSharableFile& file );
+    void play();
+    void pause();
     void playPause();
     void stop();
     void skipForward();
@@ -56,6 +58,14 @@
     void setBalance( int balance );
     void applyAudioEffects();
     void applyEqualizer();
+    void getMaxVolume();
+    void getVolume();
+    void increaseVolume();
+    void decreaseVolume();
+    void setVolume( int value );
+    void getMuteState();
+    void mute();
+    void unmute();
     void closeCurrentPlayback();
 
     MpPlaybackData *playbackData();
--- a/mpengine/mpengine.pro	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpengine/mpengine.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -40,8 +40,6 @@
         -lmpxharvesterutility \
         -lmpxcommon \
         -lmpxcollectionhelper \
-        -lremconcoreapi \
-        -lremconinterfacebase \
         -lmpsettingsmanager \
         -lmpdata \
         -lxqserviceutil \
@@ -57,9 +55,6 @@
            inc/mpmpxharvesterframeworkwrapper_p.h \
            inc/mpmpxplaybackframeworkwrapper.h \
            inc/mpmpxplaybackframeworkwrapper_p.h \
-           inc/mpmediakeyhandler.h \
-           inc/mpmediakeyhandler_p.h\
-           inc/mpmediakeyremconresponse.h \
            inc/mpmpxcollectionframeworkwrapper.h \
            inc/mpmpxisolatedcollectionhelper.h \
            inc/mpmpxcollectionframeworkwrapper_p.h \
@@ -75,9 +70,6 @@
            src/mpmpxharvesterframeworkwrapper_p.cpp \
            src/mpmpxplaybackframeworkwrapper.cpp \
            src/mpmpxplaybackframeworkwrapper_p.cpp \
-           src/mpmediakeyhandler.cpp \
-           src/mpmediakeyhandler_p.cpp \
-           src/mpmediakeyremconresponse.cpp \
            src/mpmpxcollectionframeworkwrapper.cpp \
            src/mpmpxisolatedcollectionhelper.cpp \
            src/mpmpxcollectionframeworkwrapper_p.cpp \
--- a/mpengine/src/mpengine.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpengine/src/mpengine.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -24,7 +24,6 @@
 #include "mpmpxplaybackframeworkwrapper.h"
 #include "mpaudioeffectsframeworkwrapper.h"
 #include "mpequalizerframeworkwrapper.h"
-#include "mpmediakeyhandler.h"
 #include "mptrace.h"
 #include "mpsettingsmanager.h"
 #include "mpsongscanner.h"
@@ -177,12 +176,25 @@
  */
 
 /*!
+-------------------------------------------------------------------------------
+    Playback related signals
+-------------------------------------------------------------------------------
+*/
+
+/*!
+    \fn void volumePropertyChanged( MpCommon::MpVolumeProperty, int value );
+
+    This signal is emitted when framework receives a volume related property notification,
+    such as EPbPropertyVolume, EPbPropertyMaxVolume, EPbPropertyMute.
+ */
+
+
+/*!
  Constructs music player engine.
  */
 MpEngine::MpEngine()
     : mMpxHarvesterWrapper(0),
       mSongScanner(0),
-      mMediaKeyHandler(0),
       mMpxCollectionWrapper(0),
       mMpxPlaybackWrapper(0),
       mAudioEffectsWrapper(0),
@@ -190,7 +202,8 @@
       mCurrentPresetIndex(KEqualizerPresetNone),
       mSongData(0),
       mUsbBlockingState(USB_NotConnected),
-      mPreviousUsbState(USB_NotConnected)
+      mPreviousUsbState(USB_NotConnected),
+      mHandleMediaCommands(true)
 {
     TX_LOG
 }
@@ -201,7 +214,6 @@
 MpEngine::~MpEngine()
 {
     TX_ENTRY
-    delete mMediaKeyHandler;
     delete mMpxPlaybackWrapper;
     delete mMpxHarvesterWrapper;
     delete mMpxCollectionWrapper;
@@ -219,7 +231,6 @@
 {
     TX_ENTRY_ARGS("hostUid=" << hostUid.iUid << ", mode=" << mode);
     mHostUid = hostUid;
-    mMediaKeyHandler = new MpMediaKeyHandler();
 
     if ( StandAlone == mode ) {
         mSongData = new MpSongData();
@@ -276,8 +287,10 @@
 
         // Playback Wrapper
         mMpxPlaybackWrapper = new MpMpxPlaybackFrameworkWrapper( mHostUid, mSongData );
-        connect( this, SIGNAL( libraryAboutToUpdate() ),
+        connect( this, SIGNAL( libraryUpdated() ),
                  mMpxPlaybackWrapper, SLOT( closeCurrentPlayback() ) );
+        connect( mMpxPlaybackWrapper, SIGNAL( volumePropertyChanged( MpCommon::MpVolumeProperty, int ) ),
+                 this, SIGNAL( volumePropertyChanged( MpCommon::MpVolumeProperty, int ) ) );
 
         // AudioEffects wrapper
         mAudioEffectsWrapper = new MpAudioEffectsFrameworkWrapper();
@@ -311,8 +324,11 @@
 
         // Playback Wrapper
         mMpxPlaybackWrapper = new MpMpxPlaybackFrameworkWrapper( mHostUid, 0 );
-        connect( this, SIGNAL( libraryAboutToUpdate() ),
+        connect( this, SIGNAL( libraryUpdated() ),
                  mMpxPlaybackWrapper, SLOT( closeCurrentPlayback() ) );
+        connect( mMpxPlaybackWrapper, SIGNAL( volumePropertyChanged( MpCommon::MpVolumeProperty, int ) ),
+                 this, SIGNAL( volumePropertyChanged( MpCommon::MpVolumeProperty, int ) ) );
+
     }
     else if ( MediaBrowsing == mode ) {
         // Collection Wrapper
@@ -328,6 +344,9 @@
         mSongData = new MpSongData();
         // Playback Wrapper
         mMpxPlaybackWrapper = new MpMpxPlaybackFrameworkWrapper( mHostUid, mSongData );
+        connect( mMpxPlaybackWrapper, SIGNAL( volumePropertyChanged( MpCommon::MpVolumeProperty, int ) ),
+                 this, SIGNAL( volumePropertyChanged( MpCommon::MpVolumeProperty, int ) ) );
+
     }
     TX_EXIT
 }
@@ -398,7 +417,7 @@
  */
 void MpEngine::handleScanStarted() {
     TX_ENTRY
-    mMediaKeyHandler->setEnabled(false);
+    mHandleMediaCommands = false;
     TX_EXIT
 }
 
@@ -409,7 +428,7 @@
     TX_ENTRY
     Q_UNUSED( count );
     Q_UNUSED( error );
-    mMediaKeyHandler->setEnabled(true);
+    mHandleMediaCommands = true;
     emit libraryUpdated();
     TX_EXIT
 }
@@ -422,10 +441,10 @@
     TX_ENTRY_ARGS("event=" << event);
     switch ( event ) {
         case DiskFormatStarted:
-            mMediaKeyHandler->setEnabled(false);
+            mHandleMediaCommands = false;
             break;
         case DiskFormatEnded:
-            mMediaKeyHandler->setEnabled(true);
+            mHandleMediaCommands = true;
             break;
         case DiskRemoved:
             if ( mUsbBlockingState != USB_Synchronizing ) {
@@ -479,7 +498,7 @@
 void MpEngine::handleUsbMassStorageStartEvent()
 {
     TX_ENTRY
-    mMediaKeyHandler->setEnabled(false);
+    mHandleMediaCommands = false;
 
     changeUsbBlockingState( USB_Synchronizing );
     emit usbBlocked(true);
@@ -494,7 +513,7 @@
 void MpEngine::handleUsbMassStorageEndEvent()
 {
     TX_ENTRY
-    mMediaKeyHandler->setEnabled(true);
+    mHandleMediaCommands = true;
 
     changeUsbBlockingState( USB_NotConnected );
     emit usbBlocked(false);
@@ -510,7 +529,7 @@
 void MpEngine::handleUsbMtpStartEvent()
 {
     TX_ENTRY
-    mMediaKeyHandler->setEnabled(false);
+    mHandleMediaCommands = false;
     
     changeUsbBlockingState( USB_Synchronizing );
     emit usbBlocked(true);
@@ -529,7 +548,7 @@
 void MpEngine::handleUsbMtpEndEvent()
 {
     TX_ENTRY
-    mMediaKeyHandler->setEnabled(true);
+    mHandleMediaCommands = true;
 
     changeUsbBlockingState( USB_NotConnected );
     emit usbBlocked(false);
@@ -749,7 +768,7 @@
 void MpEngine::handleDeleteStarted( TCollectionContext context, int count )
 {
     TX_ENTRY
-    mMediaKeyHandler->setEnabled( false );
+    mHandleMediaCommands = false;
     emit deleteStarted( context, count );
     TX_EXIT
 }
@@ -760,7 +779,7 @@
 void MpEngine::handleDeleteEnded( bool success )
 {
     TX_ENTRY
-    mMediaKeyHandler->setEnabled(true);
+    mHandleMediaCommands = true;
     emit songsDeleted( success );
     TX_EXIT
 }
@@ -808,12 +827,36 @@
 {
     mMpxPlaybackWrapper->play( file );
 }
+
+/*!
+ Slot to handle a play command
+ */
+
+void MpEngine::play()
+{
+    if ( mHandleMediaCommands ) {
+        mMpxPlaybackWrapper->play();
+    }
+}
+
+/*!
+ Slot to handle a pause command.
+ */
+void MpEngine::pause()
+{
+    if ( mHandleMediaCommands ) {
+        mMpxPlaybackWrapper->pause();
+    }
+}
+
 /*!
  Slot to handle a play pause.
  */
 void MpEngine::playPause()
 {
-    mMpxPlaybackWrapper->playPause();
+    if ( mHandleMediaCommands ) {
+        mMpxPlaybackWrapper->playPause();
+    }
 }
 
 /*!
@@ -821,7 +864,9 @@
  */
 void MpEngine::stop()
 {
-    mMpxPlaybackWrapper->stop();
+    if ( mHandleMediaCommands ) {
+        mMpxPlaybackWrapper->stop();
+    }
 }
 
 /*!
@@ -829,7 +874,9 @@
  */
 void MpEngine::skipForward()
 {
-    mMpxPlaybackWrapper->skipForward();
+    if ( mHandleMediaCommands ) {
+        mMpxPlaybackWrapper->skipForward();
+    }
 }
 
 /*!
@@ -837,7 +884,9 @@
  */
 void MpEngine::startSeekForward()
 {
-    mMpxPlaybackWrapper->startSeekForward();
+    if ( mHandleMediaCommands ) {
+        mMpxPlaybackWrapper->startSeekForward();
+    }
 }
 
 /*!
@@ -845,7 +894,9 @@
  */
 void MpEngine::stopSeeking()
 {
-    mMpxPlaybackWrapper->stopSeeking();
+    if ( mHandleMediaCommands ) {
+        mMpxPlaybackWrapper->stopSeeking();
+    }
 }
 
 /*!
@@ -853,7 +904,9 @@
  */
 void MpEngine::skipBackward()
 {
-    mMpxPlaybackWrapper->skipBackward();
+    if ( mHandleMediaCommands ) {
+        mMpxPlaybackWrapper->skipBackward();
+    }
 }
 
 /*!
@@ -861,7 +914,9 @@
  */
 void MpEngine::startSeekBackward()
 {
-    mMpxPlaybackWrapper->startSeekBackward();
+    if ( mHandleMediaCommands ) {
+        mMpxPlaybackWrapper->startSeekBackward();
+    }
 }
 /*!
  Slot to handle a request to change \a position.
@@ -888,6 +943,83 @@
 }
 
 /*!
+ Slot to handle a request to get the volume level Max.
+ Response will be asynchronously sent through volumePropertyChanged() signal.
+ */
+void MpEngine::getMaxVolume( )
+{
+    mMpxPlaybackWrapper->getMaxVolume();
+}
+
+/*!
+ Slot to handle a request to get the current volume level.
+ Response will be asynchronously sent through volumePropertyChanged() signal.
+ */
+void MpEngine::getVolume( )
+{
+    mMpxPlaybackWrapper->getVolume();
+}
+
+/*!
+ Slot to handle a request to increase volume.
+ */
+void MpEngine::increaseVolume()
+{
+    if ( mHandleMediaCommands ) {
+        mMpxPlaybackWrapper->increaseVolume();
+    }
+}
+
+/*!
+ Slot to handle a request to decrease volume.
+ */
+void MpEngine::decreaseVolume()
+{
+    if ( mHandleMediaCommands ) {
+        mMpxPlaybackWrapper->decreaseVolume();
+    }
+}
+
+/*!
+ Slot to handle a request to set the volume level.
+ */
+void MpEngine::setVolume( int value )
+{
+    if ( mHandleMediaCommands ) {
+        mMpxPlaybackWrapper->setVolume( value );
+    }
+}
+
+/*!
+ Slot to handle a request to get the current mute state.
+ Response will be asynchronously sent through volumePropertyChanged() signal.
+ */
+void MpEngine::getMuteState( )
+{
+    mMpxPlaybackWrapper->getMuteState();
+}
+
+/*!
+ Slot to handle a request to mute.
+ */
+void MpEngine::mute()
+{
+    if ( mHandleMediaCommands ) {
+        mMpxPlaybackWrapper->mute();
+    }
+}
+
+/*!
+ Slot to handle a request to unmute.
+ */
+void MpEngine::unmute()
+{
+    if ( mHandleMediaCommands ) {
+        mMpxPlaybackWrapper->unmute();
+    }
+}
+
+/*!
  Returns pointer to MpSongData, which is the song data for Details View.
  */
 MpSongData *MpEngine::songData()
--- a/mpengine/src/mpmediakeyhandler.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +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: Music Player media key handler.
-*
-*/
-
-#include "mpmediakeyhandler.h"
-#include "mpmediakeyhandler_p.h"
-#include "mpengine.h"
-#include "mptrace.h"
-
-// ---------------------------------------------------------------------------
-// MpMediaKeyHandler()
-// ---------------------------------------------------------------------------
-//
-MpMediaKeyHandler::MpMediaKeyHandler( QObject *parent )
-    : QObject(parent)
-{
-    TX_ENTRY
-    d_ptr = new MpMediaKeyHandlerPrivate(this);
-    d_ptr->init();
-    TX_EXIT
-}
-
-// ---------------------------------------------------------------------------
-// ~MpMediaKeyHandler()
-// ---------------------------------------------------------------------------
-//
-MpMediaKeyHandler::~MpMediaKeyHandler()
-{
-    TX_ENTRY
-    delete d_ptr;
-    TX_EXIT
-}
-
-// ---------------------------------------------------------------------------
-// setEnabled()
-// ---------------------------------------------------------------------------
-//
-void MpMediaKeyHandler::setEnabled( bool enable )
-{
-    d_ptr->setEnabled( enable );
-}
-
--- a/mpengine/src/mpmediakeyhandler_p.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,501 +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: Music Player media key handler - private implementation.
-*
-*/
-
-#include "mpmediakeyhandler_p.h"
-#include "mpmediakeyhandler.h"
-#include "mpmediakeyremconresponse.h"
-#include "mpcommondefs.h"
-
-//symbian header files
-#include <remconcoreapitarget.h>
-#include <remconinterfaceselector.h>
-
-//mpx header files
-#include <mpxplaybackutility.h>
-#include <mpxplaybackcommanddefs.h>
-#include <mpxplaybackmessagedefs.h>
-#include <mpxlog.h>
-
-const TInt KFirstTimerExpiryInterval( 1 ); // Expire immediately
-const TInt KTimerExpiryInterval( 1000000/6 );
-
-// ---------------------------------------------------------------------------
-// MpMediaKeyHandlerPrivate()
-// ---------------------------------------------------------------------------
-//
-MpMediaKeyHandlerPrivate::MpMediaKeyHandlerPrivate( MpMediaKeyHandler *wrapper )
-    : q_ptr( wrapper ),
-      iInterfaceSelector(NULL),
-      iResponseHandler(NULL),
-      iTimer(NULL),
-      iPlaybackUtility(NULL),
-      iEnabled(ETrue)
-{
-}
-
-// ---------------------------------------------------------------------------
-// ~MpMediaKeyHandlerPrivate()
-// ---------------------------------------------------------------------------
-//
-MpMediaKeyHandlerPrivate::~MpMediaKeyHandlerPrivate()
-{
-    if ( iPlaybackUtility ) {
-        //TRAP_IGNORE( iPlaybackUtility->RemoveObserverL( *this ) );
-        iPlaybackUtility->Close();
-    }
-
-    delete iResponseHandler;
-    delete iInterfaceSelector;
-
-    if ( iTimer ) {
-        iTimer->Cancel();
-        delete iTimer;
-    }
-
-}
-
-// ---------------------------------------------------------------------------
-// init
-// ---------------------------------------------------------------------------
-//
-void MpMediaKeyHandlerPrivate::init()
-{
-    TRAPD(err, DoInitL());
-    if ( err != KErrNone ) {
-        emit q_ptr->errorOccured(err);
-    }
-
-}
-
-// ---------------------------------------------------------------------------
-// setEnabled
-// ---------------------------------------------------------------------------
-//
-void MpMediaKeyHandlerPrivate::setEnabled( bool enable )
-{
-    iEnabled = enable;
-}
-
-// ---------------------------------------------------------------------------
-// From MRemConCoreApiTargetObserver
-// A command has been received.
-// ---------------------------------------------------------------------------
-//
-void MpMediaKeyHandlerPrivate::MrccatoCommand(
-    TRemConCoreApiOperationId aOperationId,
-    TRemConCoreApiButtonAction aButtonAct )
-{
-    MPX_DEBUG3( "MpMediaKeyHandlerPrivate::MrccatoCommand(aOperationId=%d, aButtonAct=%d)",
-        aOperationId, aButtonAct );
-
-    switch ( aOperationId ) {
-    case ERemConCoreApiPausePlayFunction:
-        if ( aButtonAct == ERemConCoreApiButtonClick ) {
-            SendCommand( EPbCmdPlayPause );
-        }
-        break;
-    case ERemConCoreApiPlay:
-        if ( aButtonAct == ERemConCoreApiButtonClick
-             || aButtonAct == ERemConCoreApiButtonPress ) {
-            SendCommand( EPbCmdPlay );
-        }
-        break;
-    case ERemConCoreApiStop:
-        if ( aButtonAct == ERemConCoreApiButtonClick
-             || aButtonAct == ERemConCoreApiButtonPress ) {
-            SendCommand( EPbCmdStop );
-        }
-        break;
-    case ERemConCoreApiPause:
-        if ( aButtonAct == ERemConCoreApiButtonClick
-             || aButtonAct == ERemConCoreApiButtonPress ) {
-            SendCommand( EPbCmdPause );
-        }
-        break;
-    case ERemConCoreApiRewind:
-        switch ( aButtonAct ) {
-        case ERemConCoreApiButtonPress:
-            SendCommand( EPbCmdStartSeekBackward );
-            break;
-        case ERemConCoreApiButtonRelease:
-            SendCommand( EPbCmdStopSeeking );
-            break;
-        default:
-            break;
-        }
-        break;
-    case ERemConCoreApiFastForward:
-        switch ( aButtonAct ) {
-        case ERemConCoreApiButtonPress:
-            SendCommand( EPbCmdStartSeekForward );
-            break;
-        case ERemConCoreApiButtonRelease:
-            SendCommand( EPbCmdStopSeeking );
-            break;
-        default:
-            break;
-        }
-        break;
-    case ERemConCoreApiBackward:
-        if ( aButtonAct == ERemConCoreApiButtonClick ) {
-            SendCommand( EPbCmdPrevious );
-        }
-        break;
-    case ERemConCoreApiForward:
-        if ( aButtonAct == ERemConCoreApiButtonClick ) {
-            SendCommand( EPbCmdNext );
-        }
-        break;
-    case ERemConCoreApiVolumeUp:
-        iTimer->Cancel();
-        iIncreaseVol = ETrue;
-        switch ( aButtonAct ) {
-        case ERemConCoreApiButtonPress:
-            //Start Timer
-            iTimer->Start(
-                KFirstTimerExpiryInterval,
-                KTimerExpiryInterval,
-                TCallBack( TimerCallback, this ) );
-            break;
-        case ERemConCoreApiButtonClick:
-            SendCommand( EPbCmdIncreaseVolume );
-            break;
-        case ERemConCoreApiButtonRelease:
-        default:
-            break;
-        }
-        break;
-    case ERemConCoreApiVolumeDown:
-        iTimer->Cancel();
-        iIncreaseVol = EFalse;
-        switch ( aButtonAct ) {
-        case ERemConCoreApiButtonPress:
-            //Start Timer
-            iTimer->Start(
-                KFirstTimerExpiryInterval,
-                KTimerExpiryInterval,
-                TCallBack( TimerCallback, this ) );
-            break;
-        case ERemConCoreApiButtonClick:
-            SendCommand( EPbCmdDecreaseVolume );
-            break;
-        case ERemConCoreApiButtonRelease:
-        default:
-            break;
-        }
-        break;
-    default:
-        break;
-    }
-    iResponseHandler->CompleteAnyKey( aOperationId );
-
-}
-
-// ---------------------------------------------------------------------------
-// From MRemConCoreApiTargetObserver
-// A 'play' command has been received.
-// ---------------------------------------------------------------------------
-//
-void MpMediaKeyHandlerPrivate::MrccatoPlay(
-    TRemConCoreApiPlaybackSpeed aSpeed,
-    TRemConCoreApiButtonAction aButtonAct )
-{
-    MPX_DEBUG2( "MpMediaKeyHandlerPrivate::MrccatoPlay(aButtonAct=%d)", aButtonAct );
-    Q_UNUSED(aSpeed);
-
-    if ( ( aButtonAct == ERemConCoreApiButtonClick ) ||
-        ( aButtonAct == ERemConCoreApiButtonPress ) )
-        {
-        SendCommand( EPbCmdPlay );
-        }
-    iResponseHandler->CompleteAnyKey( ERemConCoreApiPlay );
-
-}
-
-// ---------------------------------------------------------------------------
-// From MRemConCoreApiTargetObserver
-// A 'tune function' command has been received.
-// ---------------------------------------------------------------------------
-//
-void MpMediaKeyHandlerPrivate::MrccatoTuneFunction(
-    TBool aTwoPart,
-    TUint aMajorChannel,
-    TUint aMinorChannel,
-    TRemConCoreApiButtonAction aButtonAct )
-{
-    Q_UNUSED(aTwoPart);
-    Q_UNUSED(aMajorChannel);
-    Q_UNUSED(aMinorChannel);
-    Q_UNUSED(aButtonAct);
-
-    iResponseHandler->CompleteAnyKey( ERemConCoreApiTuneFunction );
-
-}
-
-// ---------------------------------------------------------------------------
-// From MRemConCoreApiTargetObserver
-// A 'select disk function' has been received.
-// ---------------------------------------------------------------------------
-//
-void MpMediaKeyHandlerPrivate::MrccatoSelectDiskFunction(
-    TUint aDisk,
-    TRemConCoreApiButtonAction aButtonAct )
-{
-    Q_UNUSED(aDisk);
-    Q_UNUSED(aButtonAct);
-
-    iResponseHandler->CompleteAnyKey( ERemConCoreApiSelectDiskFunction );
-
-}
-
-// ---------------------------------------------------------------------------
-// From MRemConCoreApiTargetObserver
-// A 'select AV input function' has been received.
-// ---------------------------------------------------------------------------
-//
-void MpMediaKeyHandlerPrivate::MrccatoSelectAvInputFunction(
-    TUint8 aAvInputSignalNumber,
-    TRemConCoreApiButtonAction aButtonAct )
-{
-    Q_UNUSED(aAvInputSignalNumber);
-    Q_UNUSED(aButtonAct);
-
-    iResponseHandler->CompleteAnyKey( ERemConCoreApiSelectAvInputFunction );
-
-}
-
-// ---------------------------------------------------------------------------
-// From MRemConCoreApiTargetObserver
-// A 'select audio input function' has been received.
-// ---------------------------------------------------------------------------
-//
-void MpMediaKeyHandlerPrivate::MrccatoSelectAudioInputFunction(
-    TUint8 aAudioInputSignalNumber,
-    TRemConCoreApiButtonAction aButtonAct )
-{
-    Q_UNUSED(aAudioInputSignalNumber);
-    Q_UNUSED(aButtonAct);
-
-    iResponseHandler->CompleteAnyKey( ERemConCoreApiSelectAudioInputFunction );
-
-}
-
-// ---------------------------------------------------------------------------
-// From MMPXPlaybackCallback
-// Handle playback property.
-// ---------------------------------------------------------------------------
-//
-void MpMediaKeyHandlerPrivate::HandlePropertyL(
-    TMPXPlaybackProperty aProperty,
-    TInt aValue,
-    TInt aError )
-{
-    MPX_FUNC( "MpMediaKeyHandlerPrivate::DoHandlePropertyL" );
-    MPX_DEBUG4( "MpMediaKeyHandlerPrivate::HandlePropertyL - Property(%d); Value(%d); Error(%d)", aProperty, aValue, aError );
-
-    if ( KErrNone == aError ) {
-        switch ( aProperty  ) {
-        case EPbPropertyVolume:
-            q_ptr->emit volumeChanged(aValue);
-            break;
-        case EPbPropertyPosition:
-        case EPbPropertyMaxVolume:
-        case EPbPropertyMute:
-        default:
-            break;
-        }
-    }
-
-}
-
-// ---------------------------------------------------------------------------
-// From MMPXPlaybackCallback
-// HandleSubPlayerNamesL
-// ---------------------------------------------------------------------------
-//
-void MpMediaKeyHandlerPrivate::HandleSubPlayerNamesL(
-    TUid aPlayer,
-    const MDesCArray* aSubPlayers,
-    TBool aComplete,
-    TInt aError )
-{
-    MPX_FUNC( "MpMediaKeyHandlerPrivate::HandleSubPlayerNamesL" );
-    Q_UNUSED(aPlayer);
-    Q_UNUSED(aSubPlayers);
-    Q_UNUSED(aComplete);
-    Q_UNUSED(aError);
-
-}
-
-// ---------------------------------------------------------------------------
-// From MMPXPlaybackCallback
-// Handle media properties.
-// Notes: The client is responsible for delete the object of aMedia.
-// ---------------------------------------------------------------------------
-//
-void MpMediaKeyHandlerPrivate::HandleMediaL(
-    const CMPXMedia& aMedia,
-    TInt aError )
-{
-    MPX_FUNC( "MpMediaKeyHandlerPrivate::DoHandleMediaL" );
-    Q_UNUSED(aMedia);
-    Q_UNUSED(aError);
-
-}
-
-// ---------------------------------------------------------------------------
-// DoInitL()
-// ---------------------------------------------------------------------------
-//
-void MpMediaKeyHandlerPrivate::DoInitL()
-{
-    // Register to remote control framework
-    iInterfaceSelector = CRemConInterfaceSelector::NewL();
-    CRemConCoreApiTarget *coreTarget = CRemConCoreApiTarget::NewL( *iInterfaceSelector, *this );
-    CleanupStack::PushL( coreTarget );
-    iInterfaceSelector->OpenTargetL();
-    iResponseHandler = MpMediaKeyRemConResponse::NewL( *coreTarget );
-    CleanupStack::Pop(coreTarget);
-
-    // Timer for implementing repeat
-    iTimer = CPeriodic::NewL( CActive::EPriorityStandard );
-
-    // Get the playback utility instance from engine.
-    iPlaybackUtility = MMPXPlaybackUtility::UtilityL( TUid::Uid(MpCommon::KMusicPlayerUid) );
-    //iPlaybackUtility->AddObserverL( *this );
-
-    iEnabled = ETrue;
-}
-
-// ---------------------------------------------------------------------------
-// Send command to playback utility.
-// ---------------------------------------------------------------------------
-//
-void MpMediaKeyHandlerPrivate::SendCommand( TMPXPlaybackCommand aCommandId )
-{
-    MPX_FUNC( "MpMediaKeyHandlerPrivate::SendCommand" );
-    TRAP_IGNORE( DoSendCommandL( aCommandId ) );
-
-}
-
-// ---------------------------------------------------------------------------
-// Send command to playback utility.
-// ---------------------------------------------------------------------------
-//
-void MpMediaKeyHandlerPrivate::DoSendCommandL( TMPXPlaybackCommand aCommandId )
-{
-    MPX_FUNC( "MpMediaKeyHandlerPrivate::DoFilterAndSendCommandL" );
-
-    if ( iEnabled )
-    {
-        TMPXPlaybackState playerState( iPlaybackUtility->StateL() );
-
-        switch ( aCommandId ) {
-        case EPbCmdPlayPause:
-            if ( playerState == EPbStatePlaying || playerState == EPbStatePaused 
-                 || playerState == EPbStateStopped ) {
-                iPlaybackUtility->CommandL( EPbCmdPlayPause );
-            }
-            break;
-        case EPbCmdPlay:
-            if ( playerState == EPbStateStopped || playerState == EPbStatePaused ) {
-                iPlaybackUtility->CommandL( EPbCmdPlay );
-            }
-            break;
-        case EPbCmdStop:
-            if ( playerState == EPbStatePlaying || playerState == EPbStatePaused ) {
-                iPlaybackUtility->CommandL( EPbCmdStop );
-            }
-            break;
-        case EPbCmdPause:
-            if ( playerState == EPbStatePlaying ) {
-                iPlaybackUtility->CommandL( EPbCmdPause );
-            }
-            break;
-        case EPbCmdStartSeekBackward:
-            if ( playerState == EPbStatePlaying || playerState == EPbStatePaused ) {
-                iPlaybackUtility->CommandL( EPbCmdStartSeekBackward );
-            }
-            break;
-        case EPbCmdStartSeekForward:
-            if ( playerState == EPbStatePlaying || playerState == EPbStatePaused ) {
-                iPlaybackUtility->CommandL( EPbCmdStartSeekForward );
-            }
-            break;
-        case EPbCmdStopSeeking:
-            if ( playerState == EPbStateSeekingBackward || playerState == EPbStateSeekingForward ) {
-                iPlaybackUtility->CommandL( EPbCmdStopSeeking );
-            }
-            break;
-        case EPbCmdPrevious:
-            if ( playerState == EPbStatePlaying || playerState == EPbStatePaused 
-                 || playerState == EPbStateStopped ) {
-                iPlaybackUtility->CommandL( EPbCmdPrevious );
-            }
-            break;
-        case EPbCmdNext:
-            if ( playerState == EPbStatePlaying || playerState == EPbStatePaused 
-                 || playerState == EPbStateStopped ) {
-                iPlaybackUtility->CommandL( EPbCmdNext );
-            }
-            break;
-        case EPbCmdIncreaseVolume:
-            if ( playerState == EPbStatePlaying || playerState == EPbStatePaused 
-                 || playerState == EPbStateStopped ) {
-                iPlaybackUtility->CommandL( EPbCmdIncreaseVolume );
-            }
-            break;
-        case EPbCmdDecreaseVolume:
-            if ( playerState == EPbStatePlaying || playerState == EPbStatePaused 
-                 || playerState == EPbStateStopped ) {
-                iPlaybackUtility->CommandL( EPbCmdDecreaseVolume );
-            }
-            break;
-        default:
-            break;
-        }
-    }
-}
-
-// ---------------------------------------------------------------------------
-// Callback for timer
-// ---------------------------------------------------------------------------
-//
-TInt MpMediaKeyHandlerPrivate::TimerCallback( TAny* aPtr )
-{
-
-    static_cast<MpMediaKeyHandlerPrivate*>( aPtr )->HandleRepeatEvent();
-
-    return KErrNone;
-}
-
-// ---------------------------------------------------------------------------
-// Handle repeat event
-// ---------------------------------------------------------------------------
-//
-void MpMediaKeyHandlerPrivate::HandleRepeatEvent()
-{
-
-    if ( iIncreaseVol ) {
-        SendCommand( EPbCmdIncreaseVolume );
-    }
-    else {
-        SendCommand( EPbCmdDecreaseVolume );
-    }
-
-}
-
--- a/mpengine/src/mpmediakeyremconresponse.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,176 +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: Music Player media key handler.
-*              Helper class for sending response back to Remote Controller Framework.
-*
-*/
-
-// INCLUDE FILES
-#include "mpmediakeyremconresponse.h"
-#include "mpxlog.h"
-
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// ---------------------------------------------------------------------------
-//
-MpMediaKeyRemConResponse::MpMediaKeyRemConResponse(
-    CRemConCoreApiTarget& aRemConCoreApiTarget )
-    : CActive( CActive::EPriorityStandard ),
-      iRemConCoreApiTarget( aRemConCoreApiTarget )
-    {
-    CActiveScheduler::Add( this );
-    }
-
-// ---------------------------------------------------------------------------
-// Two-phased constructor.
-// ---------------------------------------------------------------------------
-//
-MpMediaKeyRemConResponse* MpMediaKeyRemConResponse::NewL(
-    CRemConCoreApiTarget& aRemConCoreApiTarget )
-    {
-    MpMediaKeyRemConResponse* self =
-        new (ELeave) MpMediaKeyRemConResponse( aRemConCoreApiTarget );
-
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// Destructor
-// ---------------------------------------------------------------------------
-//
-MpMediaKeyRemConResponse::~MpMediaKeyRemConResponse()
-    {
-    Cancel();
-    iResponseArray.Close();
-    }
-
-// ---------------------------------------------------------------------------
-// Send the any key response back to Remcon server
-// ---------------------------------------------------------------------------
-//
-void MpMediaKeyRemConResponse::CompleteAnyKey(
-    TRemConCoreApiOperationId aOperationId )
-    {
-    if ( !IsActive() )
-        {
-        switch ( aOperationId )
-            {
-            case ERemConCoreApiPausePlayFunction:
-                {
-                iRemConCoreApiTarget.PausePlayFunctionResponse( iStatus, KErrNone );
-                SetActive();
-                break;
-                }
-            case ERemConCoreApiPlay:
-                {
-                iRemConCoreApiTarget.PlayResponse( iStatus, KErrNone );
-                SetActive();
-                break;
-                }
-            case ERemConCoreApiStop:
-                {
-                iRemConCoreApiTarget.StopResponse( iStatus, KErrNone );
-                SetActive();
-                break;
-                }
-            case ERemConCoreApiPause:
-                {
-                iRemConCoreApiTarget.PauseResponse( iStatus, KErrNone );
-                SetActive();
-                break;
-                }
-            case ERemConCoreApiRewind:
-                {
-                iRemConCoreApiTarget.RewindResponse( iStatus, KErrNone );
-                SetActive();
-                break;
-                }
-            case ERemConCoreApiFastForward:
-                {
-                iRemConCoreApiTarget.FastForwardResponse( iStatus, KErrNone );
-                SetActive();
-                break;
-                }
-            case ERemConCoreApiBackward:
-                {
-                iRemConCoreApiTarget.BackwardResponse( iStatus, KErrNone );
-                SetActive();
-                break;
-                }
-            case ERemConCoreApiForward:
-                {
-                iRemConCoreApiTarget.ForwardResponse( iStatus, KErrNone );
-                SetActive();
-                break;
-                }
-            case ERemConCoreApiVolumeUp:
-                {
-                iRemConCoreApiTarget.VolumeUpResponse( iStatus, KErrNone );
-                SetActive();
-                break;
-                }
-            case ERemConCoreApiVolumeDown:
-                {
-                iRemConCoreApiTarget.VolumeDownResponse( iStatus, KErrNone );
-                SetActive();
-                break;
-                }
-            default:
-                {
-                TInt error = KErrNone;
-                iRemConCoreApiTarget.SendResponse(
-                    iStatus, aOperationId, error );
-                SetActive();
-                break;
-                }
-            }
-        }
-    // already active. Append to array and complete later.
-    else
-        {
-        iResponseArray.Append( aOperationId );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// Implements cancellation of an outstanding request.
-// ---------------------------------------------------------------------------
-//
-void MpMediaKeyRemConResponse::DoCancel()
-    {
-    }
-
-// ---------------------------------------------------------------------------
-// Handles an active object's request completion event.
-// ---------------------------------------------------------------------------
-//
-void MpMediaKeyRemConResponse::RunL()
-    {
-    MPX_DEBUG2( "MpMediaKeyRemConResponse.RunL() -- iStatus=%d", iStatus.Int() );
-
-    // if any existing -> Send response
-    if ( iResponseArray.Count() )
-        {
-        CompleteAnyKey( iResponseArray[0] );
-        // Remove already completed key
-        iResponseArray.Remove( 0 );
-        iResponseArray.Compress();
-        }
-    }
-
-// End of File
--- a/mpengine/src/mpmpxcollectionframeworkwrapper_p.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpengine/src/mpmpxcollectionframeworkwrapper_p.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -60,8 +60,8 @@
 #include "mpsongdata.h"
 
 const TInt KIncrementalDelayNone = 0;
-const TInt KIncrementalDelayHalfSecond = 1000000;
-const TInt KIncrementalFetchBlockSize = 40;
+const TInt KIncrementalDelayHalfSecond = 500000;
+const TInt KIncrementalFetchBlockSize = 400;
 
 const TInt KMPXChunkSize = 100;  // number of songs added in each chunk, IncAddL
 _LIT( KPlaylistPath, "C:\\Data\\Playlists\\" ); // Todo
@@ -751,7 +751,7 @@
     TArray<TMPXAttribute> ary = attrs.Array();
     iIncrementalOpenUtil->SetDelay( KIncrementalDelayNone );
     iIncrementalOpenUtil->StartL( ary, KIncrementalFetchBlockSize,
-                                  KErrNotFound, CMPXCollectionOpenUtility::EFetchNormal );
+                                  KErrNotFound, CMPXCollectionOpenUtility::EFetchDown );
     iIncrementalOpenUtil->SetDelay( KIncrementalDelayHalfSecond );
     CleanupStack::PopAndDestroy( &attrs );
     TX_EXIT
--- a/mpengine/src/mpmpxplaybackframeworkwrapper.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpengine/src/mpmpxplaybackframeworkwrapper.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -29,6 +29,13 @@
 */
 
 /*!
+    \fn void volumePropertyChanged( MpCommon::MpVolumeProperty, int value );
+
+    This signal is emitted when MPXPlaybackUtility sends a volume related property notification,
+    such as EPbPropertyVolume, EPbPropertyMaxVolume, EPbPropertyMute.
+ */
+
+/*!
  Constructs the utility wrapper.
  */
 MpMpxPlaybackFrameworkWrapper::MpMpxPlaybackFrameworkWrapper( TUid hostUid, MpSongData *songData, QObject *parent )
@@ -71,6 +78,22 @@
 }
 
 /*!
+ Slot to handle play command
+ */
+void MpMpxPlaybackFrameworkWrapper::play()
+{
+    d_ptr->play();
+}
+
+/*!
+ Slot to handle pause command
+ */
+void MpMpxPlaybackFrameworkWrapper::pause()
+{
+    d_ptr->pause();
+}
+
+/*!
  Slot to handle a play pause.
  */
 void MpMpxPlaybackFrameworkWrapper::playPause()
@@ -152,6 +175,73 @@
 }
 
 /*!
+ Slot to handle a request to get the volume level Max.
+ Response will be asynchronously sent through volumePropertyChanged() signal.
+ */
+void MpMpxPlaybackFrameworkWrapper::getMaxVolume()
+{
+    d_ptr->getMaxVolume();
+}
+
+/*!
+ Slot to handle a request to get the current volume level.
+ Response will be asynchronously sent through volumePropertyChanged() signal.
+ */
+void MpMpxPlaybackFrameworkWrapper::getVolume()
+{
+    d_ptr->getVolume();
+}
+
+/*!
+ Slot to handle a request to increase volume.
+ */
+void MpMpxPlaybackFrameworkWrapper::increaseVolume()
+{
+    d_ptr->increaseVolume();
+}
+
+/*!
+ Slot to handle a request to decrease volume.
+ */
+void MpMpxPlaybackFrameworkWrapper::decreaseVolume()
+{
+    d_ptr->decreaseVolume();
+}
+
+/*!
+ Slot to handle a request to set the volume level.
+ */
+void MpMpxPlaybackFrameworkWrapper::setVolume( int value )
+{
+    d_ptr->setVolume( value );
+}
+
+/*!
+ Slot to handle a request to get the current mute state.
+ Response will be asynchronously sent through volumePropertyChanged() signal.
+ */
+void MpMpxPlaybackFrameworkWrapper::getMuteState()
+{
+    d_ptr->getMuteState();
+}
+
+/*!
+ Slot to handle a request to mute.
+ */
+void MpMpxPlaybackFrameworkWrapper::mute()
+{
+    d_ptr->mute();
+}
+
+/*!
+ Slot to handle a request to unmute.
+ */
+void MpMpxPlaybackFrameworkWrapper::unmute()
+{
+    d_ptr->unmute();
+}
+
+/*!
  Slot to close current playback.
  */
 void MpMpxPlaybackFrameworkWrapper::closeCurrentPlayback()
--- a/mpengine/src/mpmpxplaybackframeworkwrapper_p.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpengine/src/mpmpxplaybackframeworkwrapper_p.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -110,6 +110,33 @@
         TX_LOG_ARGS( "Error: " << err << "; should never get here." );
     }
 }
+
+/*!
+ \internal
+ */
+void MpMpxPlaybackFrameworkWrapperPrivate::play()
+{
+    TX_ENTRY
+    TRAPD( err, iPlaybackUtility->CommandL(EPbCmdPlay) );
+    if ( err != KErrNone ) {
+        TX_LOG_ARGS( "Error: " << err << "; should never get here." );
+    }
+    TX_EXIT
+}
+
+/*!
+ \internal
+ */
+void MpMpxPlaybackFrameworkWrapperPrivate::pause()
+{
+    TX_ENTRY
+    TRAPD( err, iPlaybackUtility->CommandL(EPbCmdPause) );
+    if ( err != KErrNone ) {
+        TX_LOG_ARGS( "Error: " << err << "; should never get here." );
+    }
+    TX_EXIT
+}
+
 /*!
  \internal
  */
@@ -280,6 +307,110 @@
 }
 
 /*!
+ \internal
+ */
+void MpMpxPlaybackFrameworkWrapperPrivate::getMaxVolume()
+{
+    TX_ENTRY
+    TRAPD( err, iPlaybackUtility->PropertyL( *this, EPbPropertyMaxVolume ) );
+    if ( err != KErrNone ) {
+        TX_LOG_ARGS("Error: " << err << "; should never get here.");
+    }
+    TX_EXIT
+}
+
+/*!
+ \internal
+ */
+void MpMpxPlaybackFrameworkWrapperPrivate::getVolume()
+{
+    TX_ENTRY
+    TRAPD( err, iPlaybackUtility->PropertyL( *this, EPbPropertyVolume ) );
+    if ( err != KErrNone ) {
+        TX_LOG_ARGS("Error: " << err << "; should never get here.");
+    }
+    TX_EXIT
+}
+
+/*!
+ \internal
+ */
+void MpMpxPlaybackFrameworkWrapperPrivate::increaseVolume()
+{
+    TX_ENTRY
+    TRAPD( err, iPlaybackUtility->CommandL( EPbCmdIncreaseVolume ) );
+    if ( err != KErrNone ) {
+        TX_LOG_ARGS("Error: " << err << "; should never get here.");
+    }
+    TX_EXIT
+}
+
+/*!
+ \internal
+ */
+void MpMpxPlaybackFrameworkWrapperPrivate::decreaseVolume()
+{
+    TX_ENTRY
+    TRAPD( err, iPlaybackUtility->CommandL( EPbCmdDecreaseVolume ) );
+    if ( err != KErrNone ) {
+        TX_LOG_ARGS("Error: " << err << "; should never get here.");
+    }
+    TX_EXIT
+}
+
+/*!
+ \internal
+ */
+void MpMpxPlaybackFrameworkWrapperPrivate::setVolume( int value )
+{
+    TX_ENTRY
+    TRAPD( err, iPlaybackUtility->CommandL( EPbCmdSetVolume, value ) );
+    if ( err != KErrNone ) {
+        TX_LOG_ARGS("Error: " << err << "; should never get here.");
+    }
+    TX_EXIT
+}
+
+/*!
+ \internal
+ */
+void MpMpxPlaybackFrameworkWrapperPrivate::getMuteState()
+{
+    TX_ENTRY
+    TRAPD( err, iPlaybackUtility->PropertyL( *this, EPbPropertyMute ) );
+    if ( err != KErrNone ) {
+        TX_LOG_ARGS("Error: " << err << "; should never get here.");
+    }
+    TX_EXIT
+}
+
+/*!
+ \internal
+ */
+void MpMpxPlaybackFrameworkWrapperPrivate::mute()
+{
+    TX_ENTRY
+    TRAPD( err, iPlaybackUtility->CommandL( EPbCmdMuteVolume ) );
+    if ( err != KErrNone ) {
+        TX_LOG_ARGS("Error: " << err << "; should never get here.");
+    }
+    TX_EXIT
+}
+
+/*!
+ \internal
+ */
+void MpMpxPlaybackFrameworkWrapperPrivate::unmute()
+{
+    TX_ENTRY
+    TRAPD( err, iPlaybackUtility->CommandL( EPbCmdUnMuteVolume ) );
+    if ( err != KErrNone ) {
+        TX_LOG_ARGS("Error: " << err << "; should never get here.");
+    }
+    TX_EXIT
+}
+
+/*!
  \ Closes current playback source.
  */
 void MpMpxPlaybackFrameworkWrapperPrivate::closeCurrentPlayback()
@@ -347,6 +478,18 @@
                 TX_LOG_ARGS("EPbPropertyDuration")
                 iPlaybackData->setDuration(aValue);
                 break;
+            case EPbPropertyVolume:
+                TX_LOG_ARGS("EPbPropertyVolume")
+                q_ptr->emit volumePropertyChanged( MpCommon::Volume, aValue );
+                break;
+            case EPbPropertyMaxVolume:
+                TX_LOG_ARGS("EPbPropertyMaxVolume")
+                q_ptr->emit volumePropertyChanged( MpCommon::MaxVolume, aValue );
+                break;
+            case EPbPropertyMute:
+                TX_LOG_ARGS("EPbPropertyMute")
+                q_ptr->emit volumePropertyChanged( MpCommon::MuteState, aValue );
+                break;
             default:
                 break;
         }
@@ -567,6 +710,7 @@
                 break;
             case TMPXPlaybackMessage::EPlaylistUpdated:
                 TX_LOG_ARGS( "EPlaylistUpdated" )
+                // coverity[fallthrough]
             case TMPXPlaybackMessage::EActivePlayerChanged:
                 TX_LOG_ARGS( "EActivePlayerChanged or fall through from EPlaylistUpdated" )
                 UpdateStateL();
--- a/mpengine/tsrc/tsrc.pro	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpengine/tsrc/tsrc.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -18,7 +18,6 @@
 
 SUBDIRS += unittest_mpaudioeffectsframeworkwrapper \
            unittest_mpequalizerframeworkwrapper \
-           # unittest_mpmediakeyhandler \
            unittest_mpmpxcollectionframeworkwrapper \
            unittest_mpmpxharvesterframeworkwrapper \
            unittest_mpmpxisolatedcollectionhelper \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpengine/inc/unittest_mpengine.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,120 @@
+/*
+* 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 mpengine
+*
+*/
+
+#ifndef TESTMPENGINE_H
+#define TESTMPENGINE_H
+
+#include <QtTest/QtTest>
+
+class MpEngine;
+
+class TestMpEngine : public QObject
+{
+    Q_OBJECT
+
+public:
+
+    TestMpEngine();
+    ~TestMpEngine();
+
+public slots:
+
+    void initTestCase();
+    void cleanupTestCase();
+    void init();
+    void cleanup();
+    
+private slots:
+    void testInitialize();
+    void testVerifyUsbBlocking();
+    void testSongScanner(); 
+    void testRefreshLibrary();
+    void testHandleScanStarted();
+    void testHandleScanEnded();
+    void testHandleDiskEvent(); 
+    void testHandleUsbEvent();
+    void testHandleUsbMassStorageStartEvent();
+    void testHandleUsbMassStorageEndEvent();
+    void testHandleUsbMtpStartEvent(); 
+    void testHandleUsbMtpEndEvent(); 
+    void testHandleUsbMtpNotActive(); 
+    void testChangeUsbBlockingState();
+    void testHandleDeleteStarted(); 
+    void testHandleDeleteEnded(); 
+    void testPlaybackData(); 
+    void testSongData(); 
+    void testBalance();
+    void testLoudness();
+    void testSetBalance();
+    void testSetLoudness();
+    void testApplyPreset();
+    void testDisableEqualizer();
+    void testActivePreset();
+    void testPresetNames();
+    void testHandleEqualizerReady(); 
+
+private:
+    MpEngine *mTest;
+};
+
+
+// to test private functions
+#include <QObject>
+#include "mpcommondefs.h"
+// Do this so we can access all member variables.
+#define private public
+#include "../../inc/mpengine.h"
+#undef private
+
+class MpEngineFactory : QObject
+{
+    Q_OBJECT
+private:
+    explicit MpEngineFactory(){    
+    }
+
+public:
+    virtual ~MpEngineFactory(){
+    
+    }
+    static MpEngineFactory * instance() {
+        static MpEngineFactory instance;
+        return &instance;
+    }
+    static MpEngine *createIsolatedEngine( MpEngine::EngineMode mode ) {
+        instance()->mEngines.append( new MpEngine() );
+        instance()->mEngines.last()->initialize( TUid::Uid( MpCommon::KMusicPlayerUid + instance()->mEngines.count() ), mode );
+        return instance()->mEngines.last();
+    }    
+    static void close() {
+        MpEngine *ptr;
+        foreach ( ptr, instance()->mEngines ) {
+            delete ptr;
+            ptr = 0;
+        }
+    }
+    
+private:    
+    QList<MpEngine *>    mEngines;
+};
+
+
+#endif  // TESTMPENGINE_H
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpengine/src/unittest_mpengine.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,565 @@
+/*
+* 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 mpengine
+*
+*/
+
+#include <QSignalSpy>
+#include <EqualizerConstants.h>
+
+#include "unittest_mpengine.h"
+#include "mpmediakeyhandler.h"
+#include "mpmpxcollectionviewdefs.h"
+
+#define private public
+#include "mpengine.h"
+#undef private
+
+// help to test private function 
+#include "../../src/mpengine.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);
+
+    TestMpEngine 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_mpengine.txt";
+
+        return QTest::qExec(&tv, 3, pass);
+    }
+}
+
+TestMpEngine::TestMpEngine()
+    : mTest(0)
+{
+}
+
+TestMpEngine::~TestMpEngine()
+{
+    delete mTest;
+}
+
+/*!
+ Called before the first testfunction is executed.
+ */
+void TestMpEngine::initTestCase()
+{
+}
+
+/*!
+ Called after the last testfunction was executed.
+ */
+void TestMpEngine::cleanupTestCase()
+{
+    MpEngineFactory::close();
+}
+
+/*!
+ Called before each testfunction is executed.
+ */
+void TestMpEngine::init()
+{
+
+}
+
+/*!
+ Called after every testfunction.
+ */
+void TestMpEngine::cleanup()
+{
+
+}
+
+/*!
+ test initialize
+ */
+void TestMpEngine::testInitialize()
+{
+    mTest = MpEngineFactory::createIsolatedEngine( MpEngine::StandAlone );
+    QVERIFY( mTest->mSongData != 0 );
+    QVERIFY( mTest->mMpxHarvesterWrapper != 0 );
+    QVERIFY( mTest->mMpxCollectionWrapper != 0 );
+    QVERIFY( mTest->mEqualizerWrapper != 0 );
+    QVERIFY( mTest->mMpxPlaybackWrapper != 0 );
+    QVERIFY( mTest->mAudioEffectsWrapper != 0 );
+    
+    mTest = MpEngineFactory::createIsolatedEngine( MpEngine::Fetch );
+    QVERIFY( mTest->mMpxHarvesterWrapper != 0 );
+    QVERIFY( mTest->mMpxCollectionWrapper != 0 );
+    QVERIFY( mTest->mMpxPlaybackWrapper != 0 );
+    QVERIFY( mTest->mEqualizerWrapper == 0 );
+    QVERIFY( mTest->mAudioEffectsWrapper == 0 );
+    
+    mTest = MpEngineFactory::createIsolatedEngine( MpEngine::MediaBrowsing );
+    QVERIFY( mTest->mMpxCollectionWrapper != 0 );
+    QVERIFY( mTest->mMpxHarvesterWrapper == 0 );
+    QVERIFY( mTest->mMpxPlaybackWrapper == 0 );
+    QVERIFY( mTest->mEqualizerWrapper == 0 );
+    QVERIFY( mTest->mAudioEffectsWrapper == 0 );
+    
+    mTest = MpEngineFactory::createIsolatedEngine( MpEngine::Embedded );
+    QVERIFY( mTest->mMpxPlaybackWrapper != 0 );
+    QVERIFY( mTest->mSongData != 0 );
+}
+
+/*!
+ test verifyUsbBlocking
+ */
+void TestMpEngine::testVerifyUsbBlocking() 
+{
+    bool result;
+    QSignalSpy spy( mTest, SIGNAL( unableToCotinueDueUSB() ) );
+    
+    mTest->mUsbBlockingState = MpEngine::USB_Connected;
+    result = mTest->verifyUsbBlocking( true );    
+    QVERIFY( result == true );
+    QVERIFY( spy.count() == 1 ); 
+    spy.clear();
+    
+    mTest->mUsbBlockingState = MpEngine::USB_Connected;
+    result = mTest->verifyUsbBlocking( false );
+    QVERIFY( result == true );
+    QVERIFY( spy.count() == 0 );
+    spy.clear();
+    
+    mTest->mUsbBlockingState = MpEngine::USB_NotConnected;
+    result = mTest->verifyUsbBlocking( true );
+    QVERIFY( result == false );
+    QVERIFY( spy.count() == 0 );
+    spy.clear();
+    
+    mTest->mUsbBlockingState = MpEngine::USB_NotConnected;
+    result = mTest->verifyUsbBlocking( false );
+    QVERIFY( result == false );
+    QVERIFY( spy.count() == 0 );
+    spy.clear();
+    
+    mTest->mUsbBlockingState = MpEngine::USB_Synchronizing;
+    result = mTest->verifyUsbBlocking( true );
+    QVERIFY( result == false );
+    QVERIFY( spy.count() == 0 );
+    spy.clear();
+    
+    mTest->mUsbBlockingState = MpEngine::USB_Synchronizing;
+    result = mTest->verifyUsbBlocking( false );
+    QVERIFY( result == false );
+    QVERIFY( spy.count() == 0 );
+    spy.clear();    
+}
+
+/*!
+ test songScanner
+ */
+void TestMpEngine::testSongScanner() 
+{
+    mTest = MpEngineFactory::createIsolatedEngine( MpEngine::StandAlone );
+    QCOMPARE( mTest->mSongScanner, mTest->songScanner() );
+}
+
+/*!
+ test refreshLibrary
+ */
+void TestMpEngine::testRefreshLibrary() 
+{
+    mTest = MpEngineFactory::createIsolatedEngine( MpEngine::StandAlone );
+    QSignalSpy spy( mTest, SIGNAL( libraryAboutToUpdate() ) );
+    
+    mTest->mUsbBlockingState = MpEngine::USB_Connected;
+    QVERIFY( mTest->verifyUsbBlocking() == true );
+    mTest->refreshLibrary( true );
+    QVERIFY( mTest->mSongScanner == 0 );
+    QVERIFY( spy.count() == 0 );
+    
+    mTest->mUsbBlockingState = MpEngine::USB_NotConnected;
+    QVERIFY( mTest->verifyUsbBlocking() == false );
+    mTest->refreshLibrary( true );
+    QVERIFY( mTest->mSongScanner != 0 );
+    QVERIFY( spy.count() == 1 );
+    spy.clear();
+    
+    mTest->mUsbBlockingState = MpEngine::USB_Synchronizing;
+    QVERIFY( mTest->verifyUsbBlocking() == false );
+    mTest->refreshLibrary( true );
+    QVERIFY( mTest->mSongScanner != 0 );
+    QVERIFY( spy.count() == 1 );
+    spy.clear();
+}
+
+/*!
+ test handleScanStarted 
+ */
+void TestMpEngine::testHandleScanStarted()
+{
+    mTest = MpEngineFactory::createIsolatedEngine( MpEngine::StandAlone );
+    mTest->handleScanStarted();
+    QVERIFY( mTest->mHandleMediaCommands == false );
+}
+
+/*!
+ test handleScanEnded
+ */
+void TestMpEngine::testHandleScanEnded() 
+{
+    mTest = MpEngineFactory::createIsolatedEngine( MpEngine::StandAlone );
+    QSignalSpy spy( mTest, SIGNAL( libraryUpdated() ) );
+    
+    mTest->handleScanEnded( 0, 0 );
+    QVERIFY( mTest->mHandleMediaCommands == true );
+    
+    QVERIFY( spy.count() == 1 );
+    spy.clear();    
+}
+
+/*!
+ test handleDiskEvent
+ */
+void TestMpEngine::testHandleDiskEvent() 
+{
+    mTest = MpEngineFactory::createIsolatedEngine( MpEngine::StandAlone );
+    QSignalSpy spy( mTest, SIGNAL( libraryUpdated() ) );
+    QSignalSpy spyTwo( mTest, SIGNAL( libraryAboutToUpdate() ) );
+    
+    mTest->handleDiskEvent( DiskFormatStarted );
+    QVERIFY( mTest->mHandleMediaCommands == false );
+    
+    mTest->handleDiskEvent( DiskFormatEnded );
+    QVERIFY( mTest->mHandleMediaCommands == true );
+    
+    mTest->mUsbBlockingState = MpEngine::USB_Synchronizing;
+    mTest->handleDiskEvent( DiskRemoved );
+    QVERIFY( spy.count() == 0 );
+    spy.clear();    
+    
+    mTest->mUsbBlockingState = MpEngine::USB_NotConnected;
+    mTest->handleDiskEvent( DiskRemoved );
+    QVERIFY( spy.count() == 1 );
+    spy.clear();   
+    
+    mTest->mUsbBlockingState = MpEngine::USB_Connected;
+    mTest->handleDiskEvent( DiskRemoved );
+    QVERIFY( spy.count() == 1 );
+    spy.clear();   
+    
+    mTest->mUsbBlockingState = MpEngine::USB_NotConnected;
+    mTest->handleDiskEvent( DiskInserted );
+    QVERIFY( mTest->verifyUsbBlocking() == false );
+    QVERIFY( spyTwo.count() == 1 );
+    spyTwo.clear();   
+    
+    mTest->mUsbBlockingState = MpEngine::USB_Connected;
+    mTest->handleDiskEvent( DiskInserted );
+    QVERIFY( spy.count() == 1 );
+    spy.clear();      
+}
+
+/*!
+ test HandleUsbEvent
+ */
+void TestMpEngine::testHandleUsbEvent()
+{
+    // no need to test here 
+}
+
+/*!
+ test handleUsbMassStorageStartEvent
+ */
+void TestMpEngine::testHandleUsbMassStorageStartEvent()
+{
+    mTest = MpEngineFactory::createIsolatedEngine( MpEngine::StandAlone );
+    QSignalSpy spy( mTest, SIGNAL( usbBlocked( bool ) ) );
+    QSignalSpy spyTwo( mTest, SIGNAL( usbSynchronizationStarted() ) );
+    
+    mTest->handleUsbMassStorageStartEvent();
+    QVERIFY( mTest->mHandleMediaCommands == false );
+    QVERIFY( spy.count() == 1 );
+    QList<QVariant> arguments = spy.takeFirst();
+    QVERIFY( arguments.at(0).toBool() == true ); 
+    
+    QVERIFY( spyTwo.count() == 1 );
+}
+
+/*!
+ test handleUsbMassStorageEndEvent
+ */
+void TestMpEngine::testHandleUsbMassStorageEndEvent() 
+{
+    mTest = MpEngineFactory::createIsolatedEngine( MpEngine::StandAlone );
+    QSignalSpy spy( mTest, SIGNAL( usbBlocked( bool ) ) );
+    QSignalSpy spyTwo( mTest, SIGNAL( usbSynchronizationFinished() ) );
+    
+    mTest->handleUsbMassStorageEndEvent();
+    QVERIFY( mTest->mHandleMediaCommands == true );
+    QVERIFY( spy.count() == 1 );
+    QList<QVariant> arguments = spy.takeFirst();
+    QVERIFY(arguments.at(0).toBool() == false ); 
+    
+    QVERIFY( spyTwo.count() == 1 );
+}
+
+/*!
+ test handleUsbMtpStartEvent
+ */
+void TestMpEngine::testHandleUsbMtpStartEvent() 
+{
+    mTest = MpEngineFactory::createIsolatedEngine( MpEngine::StandAlone );
+    QSignalSpy spy( mTest, SIGNAL( usbBlocked( bool ) ) );
+    QSignalSpy spyTwo( mTest, SIGNAL( libraryAboutToUpdate() ) );
+    QSignalSpy spyThree( mTest, SIGNAL( usbSynchronizationStarted() ) );
+    
+    mTest->handleUsbMtpStartEvent();
+    QVERIFY( mTest->mHandleMediaCommands == false );
+    QVERIFY( spy.count() == 1 );
+    QList<QVariant> arguments = spy.takeFirst();
+    QVERIFY( arguments.at(0).toBool() == true ); 
+    QVERIFY( spyTwo.count() == 1 );
+    QVERIFY( spyThree.count() == 1 );
+}
+
+/*!
+ test handleUsbMtpEndEvent
+ */
+void TestMpEngine::testHandleUsbMtpEndEvent() 
+{
+    mTest = MpEngineFactory::createIsolatedEngine( MpEngine::StandAlone );
+    QSignalSpy spy( mTest, SIGNAL( usbBlocked( bool ) ) );
+    QSignalSpy spyTwo( mTest, SIGNAL( usbSynchronizationFinished() ) );
+    QSignalSpy spyThree( mTest, SIGNAL( libraryUpdated() ) );
+    QList<QVariant> arguments;
+    
+    mTest->mUsbBlockingState = MpEngine::USB_Synchronizing;
+    mTest->handleUsbMtpEndEvent();
+    QVERIFY( mTest->mHandleMediaCommands == true );
+    QVERIFY( spy.count() == 1 );
+    arguments = spy.takeFirst();
+    QVERIFY( arguments.at(0).toBool() == false ); 
+    QVERIFY( spyTwo.count() == 1 );
+    QVERIFY( spyThree.count() == 1 );
+    spyTwo.clear();
+    spyThree.clear();
+    arguments.clear();
+    
+    mTest->mPreviousUsbState = MpEngine::USB_NotConnected;
+    mTest->handleUsbMtpEndEvent();
+    QVERIFY( mTest->mHandleMediaCommands == true );
+    QVERIFY( spy.count() == 1 );
+    arguments = spy.takeFirst();
+    QVERIFY( arguments.at(0).toBool() == false ); 
+    QVERIFY( spyTwo.count() == 0 );
+    QVERIFY( spyThree.count() == 0 );
+    spyTwo.clear();
+    spyThree.clear();
+    arguments.clear();
+    
+    mTest->mPreviousUsbState = MpEngine::USB_Connected;
+    mTest->handleUsbMtpEndEvent();
+    QVERIFY( mTest->mHandleMediaCommands == true );
+    QVERIFY( spy.count() == 1 );
+    arguments = spy.takeFirst();
+    QVERIFY( arguments.at(0).toBool() == false ); 
+    QVERIFY( spyTwo.count() == 0 );
+    QVERIFY( spyThree.count() == 0 );
+    spyTwo.clear();
+    spyThree.clear();
+    arguments.clear();
+}
+
+/*!
+ test handleUsbMtpNotActive
+ */
+void TestMpEngine::testHandleUsbMtpNotActive() 
+{   
+    mTest = MpEngineFactory::createIsolatedEngine( MpEngine::StandAlone );
+    QSignalSpy spy( mTest, SIGNAL( usbBlocked( bool ) ) );
+    
+    mTest->handleUsbMtpNotActive();
+    QVERIFY( spy.count() == 1 );
+    QList<QVariant> arguments = spy.takeFirst();
+    QVERIFY( arguments.at(0).toBool() == true ); 
+}
+
+/*!
+ test changeUsbBlockingState
+ */
+void TestMpEngine::testChangeUsbBlockingState()
+{
+    mTest = MpEngineFactory::createIsolatedEngine( MpEngine::StandAlone );
+    
+    MpEngine::UsbBlockingState cState = mTest->mUsbBlockingState;
+    mTest->changeUsbBlockingState( MpEngine::USB_Connected );
+    QCOMPARE( mTest->mPreviousUsbState, cState );
+    QCOMPARE( mTest->mUsbBlockingState, MpEngine::USB_Connected );
+}
+
+/*!
+ test handleDeleteStarted
+ */
+void TestMpEngine::testHandleDeleteStarted() 
+{
+    mTest = MpEngineFactory::createIsolatedEngine( MpEngine::StandAlone );
+    qRegisterMetaType<QModelIndex>("TCollectionContext");
+    QSignalSpy spy( mTest, SIGNAL( deleteStarted( TCollectionContext, int ) ) );
+    
+    TCollectionContext context( ECollectionContextAllSongs );
+    mTest->handleDeleteStarted( context, 0 );
+    QVERIFY( mTest->mHandleMediaCommands == false );
+    QVERIFY( spy.count() == 1 );
+}
+
+/*!
+ test handleDeleteEnded
+ */
+void TestMpEngine::testHandleDeleteEnded() 
+{
+    mTest = MpEngineFactory::createIsolatedEngine( MpEngine::StandAlone );
+    QSignalSpy spy( mTest, SIGNAL( songsDeleted( bool ) ) );
+    QList<QVariant> arguments;
+    
+    mTest->handleDeleteEnded( true );
+    QVERIFY( mTest->mHandleMediaCommands == true );
+    QVERIFY( spy.count() == 1 );
+    arguments = spy.takeFirst();
+    QVERIFY( arguments.at(0).toBool() == true ); 
+    spy.clear();
+    arguments.clear();
+    
+    mTest->handleDeleteEnded( false );
+    QVERIFY( mTest->mHandleMediaCommands == true );
+    QVERIFY( spy.count() == 1 );
+    arguments = spy.takeFirst();
+    QVERIFY( arguments.at(0).toBool() == false );
+    spy.clear();
+    arguments.clear();
+}
+
+/*!
+ test playbackData
+ */
+void TestMpEngine::testPlaybackData() 
+{
+    mTest = MpEngineFactory::createIsolatedEngine( MpEngine::StandAlone );
+    QVERIFY( mTest->mMpxPlaybackWrapper->mPlaybackData == mTest->playbackData() );
+}
+
+/*!
+ test songData
+ */
+void TestMpEngine::testSongData() 
+{
+    mTest = MpEngineFactory::createIsolatedEngine( MpEngine::StandAlone );
+    QVERIFY( mTest->mSongData == mTest->songData() );
+}
+
+/*!
+ test balance
+ */
+void TestMpEngine::testBalance() 
+{
+    mTest = MpEngineFactory::createIsolatedEngine( MpEngine::StandAlone );
+    QVERIFY( mTest->mAudioEffectsWrapper->mBalance == mTest->balance() );
+}
+
+/*!
+ test loudness
+ */
+void TestMpEngine::testLoudness()
+{
+    mTest = MpEngineFactory::createIsolatedEngine( MpEngine::StandAlone );
+    QVERIFY( mTest->mAudioEffectsWrapper->mLoudness == mTest->loudness() );
+}
+
+/*!
+ test setBalance
+ */
+void TestMpEngine::testSetBalance()
+{
+    // nothing to test here
+}
+
+/*!
+ test setLoudness
+ */
+void TestMpEngine::testSetLoudness()
+{
+    // nothing to test here
+}
+
+/*!
+ test applyPreset
+ */
+void TestMpEngine::testApplyPreset()
+{
+    mTest = MpEngineFactory::createIsolatedEngine( MpEngine::StandAlone );
+    mTest->mCurrentPresetIndex = 2;
+    
+    mTest->applyPreset( 4 );
+    QCOMPARE( mTest->mCurrentPresetIndex, 4 );
+}
+
+/*!
+ test disableEqualizer
+ */
+void TestMpEngine::testDisableEqualizer()
+{
+    mTest = MpEngineFactory::createIsolatedEngine( MpEngine::StandAlone );
+    mTest->disableEqualizer();
+    
+    QCOMPARE( mTest->mCurrentPresetIndex, KEqualizerPresetNone );
+}
+
+/*!
+ test activePreset
+ */
+void TestMpEngine::testActivePreset()
+{
+    mTest = MpEngineFactory::createIsolatedEngine( MpEngine::StandAlone );
+    
+    QCOMPARE( mTest->mCurrentPresetIndex, mTest->activePreset() );
+}
+
+/*!
+ test presetNames
+ */
+void TestMpEngine::testPresetNames() 
+{
+    mTest = MpEngineFactory::createIsolatedEngine( MpEngine::StandAlone );
+    
+    QCOMPARE( mTest->mEqualizerWrapper->mList, mTest->presetNames() );
+}
+
+/*!
+ test handleEqualizerReady
+ */
+void TestMpEngine::testHandleEqualizerReady() 
+{
+    mTest = MpEngineFactory::createIsolatedEngine( MpEngine::StandAlone );
+    QSignalSpy spy( mTest, SIGNAL( equalizerReady() ) );
+    
+    mTest->handleEqualizerReady();
+    QCOMPARE( mTest->mCurrentPresetIndex, 1 );
+    QVERIFY( spy.count() == 1 );
+}
+
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpengine/stub/inc/mpaudioeffectsframeworkwrapper.h	Fri Aug 06 16:51:36 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: stub for MpAudioEffectsFrameworkWrapper
+*
+*/
+
+#ifndef MPAUDIOEFFECTSFRAMEWORKWRAPPER_H
+#define MPAUDIOEFFECTSFRAMEWORKWRAPPER_H
+
+#include <QObject>
+
+
+class MpAudioEffectsFrameworkWrapper : public QObject
+{
+    Q_OBJECT
+
+public:
+    
+    explicit MpAudioEffectsFrameworkWrapper();
+    virtual ~MpAudioEffectsFrameworkWrapper();
+    
+    int balance();
+    bool loudness();
+    void setBalance( int balance );
+    void setLoudness( bool mode );   
+
+public:
+    int mBalance;
+    bool mLoudness;
+};
+
+#endif /*MPAUDIOEFFECTSFRAMEWORKWRAPPER_H*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpengine/stub/inc/mpequalizerframeworkwrapper.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,53 @@
+/*
+* 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: stub for equalizer framework
+*
+*/
+
+#ifndef MPEQUALIZERFRAMEWORKWRAPPER_H
+#define MPEQUALIZERFRAMEWORKWRAPPER_H
+
+// System includes
+#include <QObject>
+#include <QStringList>
+
+
+/**
+ *  Wrapper for equalizer framework
+ */
+class MpEqualizerFrameworkWrapper : public QObject
+    {
+    Q_OBJECT
+    Q_PROPERTY(QStringList presetNames READ presetNames)
+    
+public:
+
+    explicit MpEqualizerFrameworkWrapper( QObject *parent = 0 );
+    virtual ~MpEqualizerFrameworkWrapper();
+
+    int getPresetNameKey( int presetIndex );
+    int getPresetIndex( int presetNameKey );
+    QStringList presetNames();
+
+signals:
+    void equalizerReady();
+
+
+public: 
+    QStringList mList;
+
+};
+#endif // MPEQUALIZERFRAMEWORKWRAPPER_H
+
+//End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpengine/stub/inc/mpmediakeyhandler.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,37 @@
+/*
+* 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: stub for media key handler.
+*
+*/
+
+#ifndef MPMEDIAKEYHANDLER_H
+#define MPMEDIAKEYHANDLER_H
+
+#include <QObject>
+
+class MpMediaKeyHandler : public QObject
+{
+    Q_OBJECT
+public:
+
+    explicit MpMediaKeyHandler( QObject *parent = 0 );
+    virtual ~MpMediaKeyHandler();
+
+    void setEnabled( bool enable );
+    
+public: 
+    bool mEnable;
+};
+
+#endif // MPMEDIAKEYHANDLER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpengine/stub/inc/mpmpxcollectiondata.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,60 @@
+/*
+* 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: MpMpxCollectionData stub for testing MpCollectionDataModel
+*
+*/
+
+#ifndef MPMPXCOLLECTIONDATA_H
+#define MPMPXCOLLECTIONDATA_H
+
+#include <QObject>
+
+#include "mpmpxcollectionviewdefs.h"
+
+
+class MpMpxCollectionData : public QObject
+{
+    Q_OBJECT
+
+public:
+
+    enum DataType {
+        Title,
+        Artist,
+        Count,
+        AlbumArtUri
+    };
+
+    // Stub functions
+    explicit MpMpxCollectionData( QObject *parent=0 );
+    virtual ~MpMpxCollectionData();
+
+    TCollectionContext context() const;
+    int count() const;
+    QString itemData( int index, MpMpxCollectionData::DataType type ) const;
+
+signals:
+
+    void contextChanged( TCollectionContext context );
+
+public:
+
+    TCollectionContext      mContext;
+    int                     mCount;
+    bool                    mItemDataReturn;
+
+};
+
+#endif // MPMPXCOLLECTIONDATA_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpengine/stub/inc/mpmpxcollectionframeworkwrapper.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,89 @@
+/*
+* 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 collection framework utilities.
+*
+*/
+
+#ifndef MPMPXCOLLECTIONFRAMEWORKWRAPPER_H
+#define MPMPXCOLLECTIONFRAMEWORKWRAPPER_H
+
+#include <QObject>
+#include "mpmpxcollectionviewdefs.h"
+#include "mpcommondefs.h"
+
+class MpMpxCollectionData;
+class MpSongData;
+class QStringList;
+
+
+class MpMpxCollectionFrameworkWrapper : public QObject
+{
+    Q_OBJECT
+    
+public:
+
+    explicit MpMpxCollectionFrameworkWrapper( TUid hostUid=TUid::Uid(MpCommon::KMusicPlayerUid),
+        MpSongData *songData=0, QObject *parent=0 );
+    virtual ~MpMpxCollectionFrameworkWrapper();
+
+    void openCollection( TCollectionContext context );
+    void openCollectionItem( int index );
+    void back();
+    void findPlaylists( QStringList &playlists );
+    void createPlaylist( QString &playlistName, QList<int> &selection, MpMpxCollectionData* collectionData );
+    void saveToPlaylist( int playlistIndex, QList<int> &selection );
+    void saveToCurrentPlaylist( QList<int> &selection, MpMpxCollectionData *collectionData );    
+    void renamePlaylist( QString &newName, int index );
+    void renamePlaylist( QString &newName );
+    void deleteSongs( QList<int> &selection );
+    void setShuffle( bool active );
+    void cancelRequest();
+    
+    void previewItem( int index );
+    void openIsolatedCollection( TCollectionContext context );
+    void releaseIsolatedCollection();
+
+    void findAlbumSongs( int index );
+    void playAlbumSongs( int albumIndex, int songIndex, MpMpxCollectionData* collectionData );
+
+    MpMpxCollectionData *collectionData();
+    
+    void reopenCollection();
+    void reorderPlaylist( int playlistId, int songId, int originalOrdinal, int newOrdinal );
+    void setRepeatFeatureEnabled( bool enable );
+    void setShuffleFeatureEnabled( bool enable );
+   
+    void openShuffleAllSongsPath();
+
+    void retrieveSongDetails( int index );
+
+    void savePath( QByteArray &data );
+    void restorePath( const QByteArray &data ); 
+    
+signals:
+
+    void collectionPlaylistOpened();
+    void playlistSaved( bool success );
+    void deleteStarted(TCollectionContext context, int Count);
+    void songsDeleted( bool success );
+    void playlistsRenamed( bool success );
+    void aboutToAddSongs( int count );
+    
+    void isolatedCollectionOpened( MpMpxCollectionData* collectionData );
+    
+    void containerContentsChanged();
+    void restorePathFailed();
+};
+
+#endif // MPMPXCOLLECTIONFRAMEWORKWRAPPER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpengine/stub/inc/mpmpxharvesterframeworkwrapper.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,61 @@
+/*
+* 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: Stub class for mpsongscanner unittest.
+*
+*/
+
+#ifndef MPMPXHARVESTERFRAMEWORKWRAPPER_H
+#define MPMPXHARVESTERFRAMEWORKWRAPPER_H
+
+#include <QObject>
+
+#include "mpmpxcommondefs.h"
+#include "mpcommondefs.h"
+
+class MpMpxHarvesterFrameworkWrapper : public QObject
+{
+    Q_OBJECT
+
+public:
+    explicit MpMpxHarvesterFrameworkWrapper( TUid hostUid = TUid::Uid( MpCommon::KMusicPlayerUid ), QObject *parent=0 );
+    virtual ~MpMpxHarvesterFrameworkWrapper();
+
+    // mock functions
+    void scan();
+    void cancelScan();
+    void checkForSystemEvents();
+
+    // unittest specific functions
+    void emitScanStarted();
+    void emitScanEnded( int count, int error );
+    void emitScanCountChanged( int count );
+    void emitDiskEvent();
+
+signals:
+    void scanStarted();
+    void scanEnded( int count, int error );
+    void scanCountChanged( int count );
+
+    void diskEvent( MpxDiskEvents event );
+    void usbEvent( MpxUsbEvents event );
+
+public:
+    bool     mScanRequested;
+    bool     mScanning;
+    int      mScanCount;
+    bool     mCheckSystemEventsRequested;
+
+};
+
+#endif // MPMPXHARVESTERFRAMEWORKWRAPPER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpengine/stub/inc/mpmpxplaybackframeworkwrapper.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,79 @@
+/*
+* 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: stub for MpMpxPlaybackFrameworkWrapper
+*
+*/
+
+#ifndef MPMPXPLAYBACKFRAMEWORKWRAPPER_H
+#define MPMPXPLAYBACKFRAMEWORKWRAPPER_H
+
+#include <QObject>
+#include "mpmpxcommondefs.h"
+#include "mpcommondefs.h"
+#include <xqsharablefile.h>
+
+class MpPlaybackData;
+class MpSongData;
+class QStringList;
+
+
+class MpMpxPlaybackFrameworkWrapper : public QObject
+{
+    Q_OBJECT
+
+    friend class MpMpxPlaybackFrameworkWrapperPrivate;
+
+public:
+
+    explicit MpMpxPlaybackFrameworkWrapper( TUid hostUid=TUid::Uid(MpCommon::KMusicPlayerUid),
+        MpSongData *songData=0, QObject *parent=0 );
+    virtual ~MpMpxPlaybackFrameworkWrapper();
+    
+    MpPlaybackData *playbackData();
+    void setBalance( int balance );
+    void applyAudioEffects();
+    void applyEqualizer();
+
+    void retrieveSongDetails();
+
+public slots:
+    
+    void play( QString aFilename );
+    void play( const XQSharableFile& file );
+    void play();
+    void playPause();
+    void stop();
+    void skipForward();
+    void startSeekForward();
+    void stopSeeking();
+    void skipBackward();
+    void startSeekBackward();
+    void setPosition( int position );
+    void setShuffle( bool mode );
+    void setRepeat( bool mode );
+    void getMaxVolume();
+    void pause();
+    void getVolume();
+    void increaseVolume();
+    void decreaseVolume();
+    void setVolume( int value );
+    void getMuteState();
+    void mute();
+    void unmute();
+    
+public:
+    MpPlaybackData* mPlaybackData;
+};
+
+#endif  // MPMPXPLAYBACKFRAMEWORKWRAPPER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpengine/stub/inc/mpplaybackdata.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,64 @@
+/*
+* 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: mpplaybackdata stub for testing MpNowPlayingWidget
+*
+*/
+
+#ifndef MPPLAYBACKDATA_H
+#define MPPLAYBACKDATA_H
+
+//includes
+#include <QObject>
+#include <QMetaType>
+
+
+class MpPlaybackData : public QObject
+{
+    Q_OBJECT
+
+public:
+
+    enum SimplifiedState {
+        NotPlaying,
+        Playing,
+        Paused,
+        Stopped
+    };
+    // Test utility functions
+    static int getUpdateCounter();
+    static void resetUpdateCounter();
+    void triggerStateUpdate(SimplifiedState state);
+    void triggerLabelsChanged(const QString &title, const QString &artist);
+
+    // Stub functions
+    explicit MpPlaybackData();
+    virtual ~MpPlaybackData();
+
+signals:
+    void playbackStateChanged();
+    void playbackInfoChanged();
+
+public:
+    const QString& title() const;
+    const QString& artist() const;
+    MpPlaybackData::SimplifiedState playbackState() const;
+
+private:
+    QString                  mArtist;
+    QString                  mTitle;
+    SimplifiedState          mPlaybackState;
+
+};
+
+#endif  // MPPLAYBACKDATA_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpengine/stub/inc/mpsettingsmanager.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,49 @@
+/*
+* 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: MpSettingsManager stub for testing MpMtpInfoLink.
+*
+*/
+
+#ifndef MPSETTINGSMANAGER_H
+#define MPSETTINGSMANAGER_H
+
+#include<QObject>
+#include <QtGlobal>
+
+class  MpSettingsManager: public QObject
+{
+    
+Q_OBJECT
+
+private:
+    explicit MpSettingsManager();
+
+public:
+    virtual ~MpSettingsManager();
+    static MpSettingsManager *instance();
+    static void SetUrl( QString url );
+    static QString mtpInfoUrl();
+    static int preset();
+    
+public slots:
+    static void setPreset(int preset);
+
+public:
+    QString mMtpInfoUrl;      
+
+private:
+    Q_DISABLE_COPY(MpSettingsManager)
+};
+
+#endif    // MPSETTINGSMANAGER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpengine/stub/inc/mpsongdata.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,46 @@
+/*
+* 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: mpsongdata stub for testing mpmpxframeworkwrapper.
+*
+*/
+
+#ifndef MPSONGDATA_H
+#define MPSONGDATA_H
+
+#include <QObject>
+
+class CMPXMedia;
+
+class MpSongData : public QObject
+{
+    Q_OBJECT
+
+public:
+    explicit MpSongData( QObject *parent=0 );
+    virtual ~MpSongData();
+
+    void setMpxMedia( const CMPXMedia& aMedia );
+
+signals:
+    void albumArtReady();
+    void playbackInfoChanged();
+	void songDetailInfoChanged();
+
+public:
+
+    bool          iSetMedia;
+
+};
+
+#endif // MPSONGDATA_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpengine/stub/inc/mpsongscanner.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,40 @@
+/*
+* 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: stub for song scanner.
+*
+*/
+
+
+#ifndef MPSONGSCANNER_H
+#define MPSONGSCANNER_H
+
+class MpMpxHarvesterFrameworkWrapper;
+
+#include <QObject>
+
+class MpSongScanner : public QObject
+{
+    Q_OBJECT
+
+public:
+    explicit MpSongScanner( MpMpxHarvesterFrameworkWrapper *wrapper, QObject *parent = 0 );
+    virtual ~MpSongScanner();
+
+    void scan( bool automaticScan );
+
+private:
+};
+
+#endif // MPSONGSCANNER_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpengine/stub/src/mpaudioeffectsframeworkwrapper.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,66 @@
+/*
+* 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: stub for MpAudioEffectsFrameworkWrapper
+*
+*/
+
+#include "mpaudioeffectsframeworkwrapper.h"
+
+/*!
+ Constructor.
+ */
+MpAudioEffectsFrameworkWrapper::MpAudioEffectsFrameworkWrapper()
+{
+}
+
+/*!
+ Destructor.
+ */
+MpAudioEffectsFrameworkWrapper::~MpAudioEffectsFrameworkWrapper()
+{
+
+}
+
+/*!
+ Returns the current persistent balance.
+ */
+int MpAudioEffectsFrameworkWrapper::balance()
+{
+    return mBalance;
+}
+
+/*!
+ Returns the current persistent loudness.
+ */
+bool MpAudioEffectsFrameworkWrapper::loudness()
+{
+    return mLoudness;
+}
+
+/*!
+ Set the \a balance.
+ */
+void MpAudioEffectsFrameworkWrapper::setBalance( int balance )
+{
+    Q_UNUSED(balance);
+}
+
+/*!
+ Set the loudness \a mode.
+ */
+void MpAudioEffectsFrameworkWrapper::setLoudness( bool mode )
+{
+    Q_UNUSED(mode);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpengine/stub/src/mpequalizerframeworkwrapper.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,101 @@
+/*
+* 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: stub for equalizer framework.
+*
+*/
+
+// System includes
+#include <QStringList>
+#include <QDebug>
+
+// User includes
+#include "mpequalizerframeworkwrapper.h"
+
+/*!
+    \class MpEqualizerFrameworkWrapper
+    \ingroup musicplayer
+    \brief Wrapper for equalizer framework.
+    \since 10.1
+    
+    Equalizer wrapper provides Qt style interface to the audio equalizer
+    utilities. Its implementation is hidden using private class data pattern.
+    
+    This class defines several APIs that are needed from \a MpPlaybackView
+    and other components in \a mpplaybackviewplugin.
+
+    \sa MpEqualizerFrameworkWrapperPrivate
+*/
+
+/*!
+    \fn MpEqualizerFrameworkWrapper::equalizerReady()
+
+    This signal will be emitted when Audio Eqalizer is initialized. This is
+    when all APIs, like \a applyPreset, are ready to be used.
+    
+    \sa MpEqualizerFrameworkWrapperPrivate::MapcInitComplete
+*/
+
+/*!
+    Constructs a new MpEqualizerFrameworkWrapper with \a parent and initializes
+    private imaplementation.
+
+*/
+MpEqualizerFrameworkWrapper::MpEqualizerFrameworkWrapper( QObject *parent )
+    : QObject(parent)
+{
+
+}
+
+/*!
+    Destructs the class and its private imaplementation.
+    
+ */
+MpEqualizerFrameworkWrapper::~MpEqualizerFrameworkWrapper()
+{
+
+}
+
+/*!
+    Get the preset name key by giving \a presetIndex. The command then 
+    relays to its private implementation.
+
+ */
+int MpEqualizerFrameworkWrapper::getPresetNameKey( int presetIndex )
+{
+    Q_UNUSED(presetIndex);
+	return 0;
+}
+
+/*!
+    Get the preset index by giving \a presetNameKey. The command then 
+    relays to its private implementation.
+
+ */
+int MpEqualizerFrameworkWrapper::getPresetIndex( int presetNameKey )
+{
+    Q_UNUSED(presetNameKey);
+    return 0;
+}
+
+/*!
+    Returning the list of availale preset names. The command then relays to its 
+    private implementation. 
+
+ */
+ QStringList MpEqualizerFrameworkWrapper::presetNames()
+{
+    return mList;
+}
+
+ //End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpengine/stub/src/mpmediakeyhandler.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,47 @@
+/*
+* 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: stub for media key handler.
+*
+*/
+
+#include "mpmediakeyhandler.h"
+
+// ---------------------------------------------------------------------------
+// MpMediaKeyHandler()
+// ---------------------------------------------------------------------------
+//
+MpMediaKeyHandler::MpMediaKeyHandler( QObject *parent )
+    : QObject(parent)
+{
+
+}
+
+// ---------------------------------------------------------------------------
+// ~MpMediaKeyHandler()
+// ---------------------------------------------------------------------------
+//
+MpMediaKeyHandler::~MpMediaKeyHandler()
+{
+
+}
+
+// ---------------------------------------------------------------------------
+// setEnabled()
+// ---------------------------------------------------------------------------
+//
+void MpMediaKeyHandler::setEnabled( bool enable )
+{
+    mEnable = enable;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpengine/stub/src/mpmpxcollectiondata.cpp	Fri Aug 06 16:51:36 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: MpMpxCollectionData stub for testing MpCollectionDataModel
+*
+*/
+
+#include "mptrace.h"
+#include "stub/inc/mpmpxcollectiondata.h"
+
+/*!
+ Stub function.
+ */
+MpMpxCollectionData::MpMpxCollectionData( QObject *parent )
+    : QObject(parent),
+      mContext(ECollectionContextUnknown),
+      mCount(0),
+      mItemDataReturn(true)
+{
+}
+
+/*!
+ Stub function.
+ */
+MpMpxCollectionData::~MpMpxCollectionData()
+{
+}
+
+/*!
+ Stub function.
+ */
+TCollectionContext MpMpxCollectionData::context() const
+{
+    return mContext;
+}
+
+/*!
+ Stub function.
+ */
+int MpMpxCollectionData::count() const
+{
+    return mCount;
+}
+
+/*!
+ Stub function.
+ */
+QString MpMpxCollectionData::itemData( int index, MpMpxCollectionData::DataType type ) const
+{
+    if ( index < 0 || index > mCount ) {
+        TX_LOG_ARGS("index=" << index);
+        qFatal("MpMpxCollectionData::itemData called with index out of range");
+    }
+    QString data;
+    if ( !mItemDataReturn && (type != MpMpxCollectionData::Count) ) {
+        return data;
+    }
+    switch ( type ) {
+        case MpMpxCollectionData::Title:
+            data = QString("Title");
+            break;
+        case MpMpxCollectionData::Artist:
+            data = QString("Artist");
+            break;
+        case MpMpxCollectionData::Count:
+            data = QString("Count");
+            break;
+        case MpMpxCollectionData::AlbumArtUri:
+            data = QString("AlbumArtUri");
+            break;
+        default:
+            qFatal("MpMpxCollectionData::itemData called with unknown type");
+            break;
+    }
+    return data;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpengine/stub/src/mpmpxcollectionframeworkwrapper.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,269 @@
+/*
+* 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 collection framework utilities.
+*
+*/
+
+#include "mpmpxcollectionframeworkwrapper.h"
+#include "mpmpxcollectiondata.h"
+ 
+/*!
+ Constructs the utility wrapper.
+ */
+MpMpxCollectionFrameworkWrapper::MpMpxCollectionFrameworkWrapper( TUid hostUid, MpSongData *songData, QObject *parent )
+    : QObject( parent )
+{
+    Q_UNUSED(hostUid);
+    Q_UNUSED(songData);
+}
+
+/*!
+ Destructs the utility wrapper.
+ */
+MpMpxCollectionFrameworkWrapper::~MpMpxCollectionFrameworkWrapper()
+{
+
+}
+
+/*!
+ Opens the collection for the given \a context.
+
+ \sa collectionOpened()
+ */
+void MpMpxCollectionFrameworkWrapper::openCollection( TCollectionContext context )
+{
+    Q_UNUSED(context);
+}
+
+/*!
+ Opens the collection at a specific \a index.
+
+ \sa collectionOpened(), playlistOpened()
+ */
+void MpMpxCollectionFrameworkWrapper::openCollectionItem( int index )
+{
+    Q_UNUSED(index);
+}
+
+/*!
+ Navigates back to the container of the current items.
+
+ \sa collectionOpened()
+ */
+void MpMpxCollectionFrameworkWrapper::back()
+{
+
+}
+
+/*!
+ Loads the user created \a playLists.
+
+ */
+void MpMpxCollectionFrameworkWrapper::findPlaylists( QStringList &playlists )
+{
+    Q_UNUSED(playlists);
+}
+
+/*!
+ Creates a new playlist with name \a playlistName and adds \a selection and optionally uses \a collectionData.
+ */
+void MpMpxCollectionFrameworkWrapper::createPlaylist( QString &playlistName, QList<int> &selection, MpMpxCollectionData* collectionData )
+{
+    Q_UNUSED(playlistName);
+    Q_UNUSED(selection);
+    Q_UNUSED(collectionData);
+}
+
+/*!
+ Adds \a selection to the playlist specified in \a playlistIndex.
+ */
+void MpMpxCollectionFrameworkWrapper::saveToPlaylist( int playlistIndex, QList<int> &selection )
+{
+    Q_UNUSED(playlistIndex);
+    Q_UNUSED(selection);
+}
+
+/*!
+ Rename a playlist by \a index with \a name.
+ */
+void MpMpxCollectionFrameworkWrapper::renamePlaylist( QString &newName, int index )
+{
+    Q_UNUSED(newName);
+    Q_UNUSED(index);
+}
+
+/*!
+ Adds \a selection to the current playlist from the specified \a collectionData.
+ */
+void MpMpxCollectionFrameworkWrapper::saveToCurrentPlaylist( QList<int> &selection, MpMpxCollectionData *collectionData )
+{
+    Q_UNUSED(selection);
+    Q_UNUSED(collectionData);
+}
+
+/*!
+ Rename a playlist with \a name.
+ */
+void MpMpxCollectionFrameworkWrapper::renamePlaylist( QString &newName )
+{
+    Q_UNUSED(newName);
+}
+
+/*!
+ Deletes \a selection from the collection.
+ */
+void MpMpxCollectionFrameworkWrapper::deleteSongs( QList<int> &selection )
+{
+    Q_UNUSED(selection);
+}
+
+/*!
+ Sets the suffle according to \a active.
+ */
+void MpMpxCollectionFrameworkWrapper::setShuffle( bool active )
+{
+    Q_UNUSED(active);
+}
+
+/*!
+ Initiate a playback preview for the selected item.
+ */
+void MpMpxCollectionFrameworkWrapper::previewItem( int index )
+{
+    Q_UNUSED(index);
+}
+
+
+/*!
+ Opens the an isolated collection with \a context.
+ \sa isolatedCollectionOpened()
+ */
+void MpMpxCollectionFrameworkWrapper::openIsolatedCollection( TCollectionContext context )
+{
+    Q_UNUSED(context);
+}
+
+/*!
+ Releases the resources used for the isolated collection.
+ */
+void MpMpxCollectionFrameworkWrapper::releaseIsolatedCollection()
+{
+
+}
+
+/*!
+ Finds all songs beloging to the album specified by the \a index.
+ */
+void MpMpxCollectionFrameworkWrapper::findAlbumSongs( int index )
+{
+    Q_UNUSED(index);
+}
+
+/*!
+ Plays album with \a albumIndex starting with the songs with \a songIndex.
+*/
+void MpMpxCollectionFrameworkWrapper::playAlbumSongs( int albumIndex, int songIndex, MpMpxCollectionData* collectionData  )
+{
+    Q_UNUSED(albumIndex);
+    Q_UNUSED(songIndex);
+    Q_UNUSED(collectionData);
+}
+
+/*!
+ Returns pointer to MpMpxCollectionData, which is the collection data.
+ */
+MpMpxCollectionData *MpMpxCollectionFrameworkWrapper::collectionData()
+{
+    MpMpxCollectionData *data = new MpMpxCollectionData();
+    return data;
+}
+
+/*!
+ Called from an engine slot to reopen the collection in its current state.
+
+ \sa collectionOpened()
+ */
+void MpMpxCollectionFrameworkWrapper::reopenCollection()
+{
+
+}
+
+/*!
+ Called from an engine slot to request a reorder operation , indicates that 
+ the item with \a playlistId , \a songId is to be moved from 
+ \a originalOrdinal to \a newOrdinal.
+ */
+void MpMpxCollectionFrameworkWrapper::reorderPlaylist( int playlistId, int songId, int originalOrdinal, int newOrdinal )
+{
+    Q_UNUSED(playlistId);
+    Q_UNUSED(songId);
+    Q_UNUSED(originalOrdinal);
+    Q_UNUSED(newOrdinal);
+}
+
+/*!
+  Called to set the repeat feature to \a enable
+ */
+void MpMpxCollectionFrameworkWrapper::setRepeatFeatureEnabled( bool enable ) 
+{
+    Q_UNUSED(enable);
+}
+
+/*!
+ Called to set the shuffle feature to \a enable
+ */
+void MpMpxCollectionFrameworkWrapper::setShuffleFeatureEnabled( bool enable )
+{
+    Q_UNUSED(enable);
+}
+
+/*!
+ Called to open all songs path and trigger shuffle all songs play
+ */
+void MpMpxCollectionFrameworkWrapper::openShuffleAllSongsPath()
+{
+
+}
+
+/*!
+ Retrieves song details for the specified \a index.
+ */
+void MpMpxCollectionFrameworkWrapper::retrieveSongDetails( int index )
+{
+    Q_UNUSED(index);
+}
+
+/*!
+ Called to save playback data used for publishing activity (i.e. restore path) 
+ */
+void  MpMpxCollectionFrameworkWrapper::savePath( QByteArray &data )
+{
+    Q_UNUSED(data);
+}
+
+/*!
+ Called to load playback data used from returning activity (i.e. restore path) 
+ */
+void MpMpxCollectionFrameworkWrapper::restorePath( const QByteArray &data ) 
+{
+    Q_UNUSED(data);
+}
+/*!
+ Cancels CollectionUiHelper request.
+ */
+void MpMpxCollectionFrameworkWrapper::cancelRequest()
+{
+}
+
+//EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpengine/stub/src/mpmpxharvesterframeworkwrapper.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,97 @@
+/*
+* 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: Stub class for mpsongscanner unittest.
+*
+*/
+
+#include "stub/inc/mpmpxharvesterframeworkwrapper.h"
+
+/*!
+ Stub function.
+ */
+MpMpxHarvesterFrameworkWrapper::MpMpxHarvesterFrameworkWrapper( TUid hostUid, QObject *parent )
+    : QObject( parent ),
+      mScanRequested( false ),
+      mScanning( false ),
+      mScanCount( -1 ),
+      mCheckSystemEventsRequested( false )
+{
+    Q_UNUSED( hostUid );
+}
+
+
+/*!
+ Stub function.
+ */
+MpMpxHarvesterFrameworkWrapper::~MpMpxHarvesterFrameworkWrapper()
+{
+}
+
+/*!
+ Stub function.
+ */
+void MpMpxHarvesterFrameworkWrapper::scan()
+{
+    mScanRequested = true;
+}
+
+/*!
+ Stub function.
+ */
+void MpMpxHarvesterFrameworkWrapper::cancelScan()
+{
+    mScanRequested = false;
+}
+
+/*!
+ Stub function.
+ */
+void MpMpxHarvesterFrameworkWrapper::checkForSystemEvents()
+{
+    mCheckSystemEventsRequested = true;
+}
+
+/*!
+ Stub function.
+ */
+void MpMpxHarvesterFrameworkWrapper::emitScanStarted()
+{
+    mScanning = true;
+    emit scanStarted();
+}
+
+/*!
+ Stub function.
+ */
+void MpMpxHarvesterFrameworkWrapper::emitScanEnded( int count, int error )
+{
+    mScanning = false;
+    emit scanEnded( count, error );
+}
+
+/*!
+ Stub function.
+ */
+void MpMpxHarvesterFrameworkWrapper::emitScanCountChanged( int count )
+{
+    emit scanCountChanged( count );
+}
+
+/*!
+ Stub function.
+ */
+void MpMpxHarvesterFrameworkWrapper::emitDiskEvent()
+{
+    emit diskEvent( DiskInserted );
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpengine/stub/src/mpmpxplaybackframeworkwrapper.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,259 @@
+/*
+* 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: stub for MpMpxPlaybackFrameworkWrapper
+*
+*/
+
+
+#include "mpmpxplaybackframeworkwrapper.h"
+#include "mpplaybackdata.h"
+
+/*!
+    \class MpMpxPlaybackFrameworkWrapper
+    \brief Wrapper for mpx framework utilities.
+
+    MPX framework wrapper provides Qt style interface to the MPX framework
+    utilities. Its implementation is hidden using private class data pattern.
+*/
+
+/*!
+ Constructs the utility wrapper.
+ */
+MpMpxPlaybackFrameworkWrapper::MpMpxPlaybackFrameworkWrapper( TUid hostUid, MpSongData *songData, QObject *parent )
+    : QObject(parent)
+{
+    Q_UNUSED(hostUid);
+    Q_UNUSED(songData);
+}
+
+/*!
+ Destructs the utility wrapper.
+ */
+MpMpxPlaybackFrameworkWrapper::~MpMpxPlaybackFrameworkWrapper()
+{
+
+}
+
+/*!
+ Returns pointer to MpPlaybackData, which is the playback data.
+ */
+MpPlaybackData *MpMpxPlaybackFrameworkWrapper::playbackData()
+{
+    return mPlaybackData;
+}
+
+/*!
+ Slot to handle play from Uri aFilename
+ */
+void MpMpxPlaybackFrameworkWrapper::play( QString aFilename )
+{
+    Q_UNUSED(aFilename);
+}
+
+/*!
+ Slot to handle play from file handle
+ */
+void MpMpxPlaybackFrameworkWrapper::play( const XQSharableFile& file)
+{
+    Q_UNUSED(file);
+}
+
+/*!
+ Slot to handle play command
+ */
+void MpMpxPlaybackFrameworkWrapper::play()
+{
+
+}
+
+/*!
+ Slot to handle a play pause.
+ */
+void MpMpxPlaybackFrameworkWrapper::playPause()
+{
+}
+
+/*!
+ Slot to handle a stop.
+ */
+void MpMpxPlaybackFrameworkWrapper::stop()
+{
+}
+
+/*!
+ Slot to handle a skip forward.
+ */
+void MpMpxPlaybackFrameworkWrapper::skipForward()
+{
+}
+
+/*!
+ Slot to handle seek forward.
+ */
+void MpMpxPlaybackFrameworkWrapper::startSeekForward()
+{
+}
+
+/*!
+ Slot to handle stop seeking.
+ */
+void MpMpxPlaybackFrameworkWrapper::stopSeeking()
+{
+}
+
+/*!
+ Slot to handle a skip backwards.
+ */
+void MpMpxPlaybackFrameworkWrapper::skipBackward()
+{
+}
+
+/*!
+ Slot to handle seek backwards.
+ */
+
+void MpMpxPlaybackFrameworkWrapper::startSeekBackward()
+{
+}
+
+/*!
+ Slot to handle a request to change \a position.
+ */
+void MpMpxPlaybackFrameworkWrapper::setPosition( int position )
+{
+    Q_UNUSED(position);
+}
+
+/*!
+ Slot to handle a request to change shuffle \a mode.
+ */
+void MpMpxPlaybackFrameworkWrapper::setShuffle( bool mode )
+{
+    Q_UNUSED(mode);
+}
+
+/*!
+ Slot to handle a request to change repeat \a mode.
+ */
+void MpMpxPlaybackFrameworkWrapper::setRepeat( bool mode )
+{
+    Q_UNUSED(mode);
+}
+
+/*!
+ Change \a balance.
+ */
+void MpMpxPlaybackFrameworkWrapper::setBalance( int balance )
+{
+    Q_UNUSED(balance);
+}
+
+/*!
+ Send command to apply audio effects.
+ */
+void MpMpxPlaybackFrameworkWrapper::applyAudioEffects()
+{
+
+}
+
+/*!
+ Send command to apply equalizer.
+ */
+void MpMpxPlaybackFrameworkWrapper::applyEqualizer()
+{
+
+}
+
+/*!
+ Retrieves song details for the currently playing song.
+ */
+void MpMpxPlaybackFrameworkWrapper::retrieveSongDetails()
+{
+
+}
+
+/*!
+ Slot to handle a request to get the volume level Max.
+ Response will be asynchronously sent through volumePropertyChanged() signal.
+ */
+void MpMpxPlaybackFrameworkWrapper::getMaxVolume()
+{
+}
+
+/*!
+ Slot to handle pause command
+ */
+void MpMpxPlaybackFrameworkWrapper::pause()
+{
+    
+}
+
+/*!
+ Slot to handle a request to get the current volume level.
+ Response will be asynchronously sent through volumePropertyChanged() signal.
+ */
+void MpMpxPlaybackFrameworkWrapper::getVolume()
+{
+
+}
+
+/*!
+ Slot to handle a request to increase volume.
+ */
+void MpMpxPlaybackFrameworkWrapper::increaseVolume()
+{
+
+}
+
+/*!
+ Slot to handle a request to decrease volume.
+ */
+void MpMpxPlaybackFrameworkWrapper::decreaseVolume()
+{
+
+}
+
+/*!
+ Slot to handle a request to set the volume level.
+ */
+void MpMpxPlaybackFrameworkWrapper::setVolume( int value )
+{
+    Q_UNUSED( value );
+}
+
+/*!
+ Slot to handle a request to get the current mute state.
+ Response will be asynchronously sent through volumePropertyChanged() signal.
+ */
+void MpMpxPlaybackFrameworkWrapper::getMuteState()
+{
+
+}
+
+/*!
+ Slot to handle a request to mute.
+ */
+void MpMpxPlaybackFrameworkWrapper::mute()
+{
+
+}
+
+/*!
+ Slot to handle a request to unmute.
+ */
+void MpMpxPlaybackFrameworkWrapper::unmute()
+{
+
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpengine/stub/src/mpplaybackdata.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,100 @@
+/*
+* 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: MpPlaybackData stub for testing mpnowplayingwidget
+*
+*/
+
+#include "stub/inc/mpplaybackdata.h"
+
+
+int gUpdateCounter = 0;
+
+
+/*!
+ Returns gUpdateCounter.
+ gUpdateCounter counts the number of MpNowPlayingBackEnd::update calls.
+ */
+int MpPlaybackData::getUpdateCounter()
+{
+    return gUpdateCounter;
+}
+
+/*!
+ Resets gUpdateCounter to zero.
+ */
+void MpPlaybackData::resetUpdateCounter()
+{
+    gUpdateCounter = 0;
+}
+
+/*!
+ Causes signal stateUpdate to be emitted.
+ */
+void MpPlaybackData::triggerStateUpdate(SimplifiedState state)
+{
+    mPlaybackState = state;
+    emit playbackStateChanged();
+    
+}
+
+/*!
+ Causes signal titleChanged to be emitted.
+ */
+void MpPlaybackData::triggerLabelsChanged(const QString &title, const QString &artist )
+{
+    mArtist = artist;
+    mTitle = title;
+    emit playbackInfoChanged();;
+}
+
+/*!
+ Stub function.
+ */
+MpPlaybackData::MpPlaybackData()
+    : mPlaybackState(NotPlaying)
+{
+    gUpdateCounter++;
+}
+
+/*!
+ Stub function.
+ */
+MpPlaybackData::~MpPlaybackData()
+{
+}
+
+/*!
+ Stub function.
+ */
+const QString& MpPlaybackData::title() const
+{
+    return mTitle;
+}
+
+/*!
+ Stub function.
+ */
+const QString& MpPlaybackData::artist() const
+{
+    return mArtist;
+}
+
+/*!
+ Stub function.
+ */
+MpPlaybackData::SimplifiedState MpPlaybackData::playbackState() const
+{
+    return mPlaybackState;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpengine/stub/src/mpsettingsmanager.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,72 @@
+/*
+* 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: MpSettingsManager stub for testing MpMtpInfoLink.
+*
+*/
+
+#include "stub/inc/mpsettingsmanager.h"
+
+
+/*!
+ Constructs the MP Settings Manager.
+ */
+MpSettingsManager::MpSettingsManager()
+{
+    mMtpInfoUrl = QString( "http://nokia.com/" );
+}
+
+/*!
+ Destructs the settings manager.
+ */
+MpSettingsManager::~MpSettingsManager()
+{
+}
+
+/*!
+ Returns the singleton instance to the settings manager.
+ */
+MpSettingsManager * MpSettingsManager::instance()
+{
+    static MpSettingsManager instance;
+    return &instance;
+}
+
+void MpSettingsManager::SetUrl( QString url )
+{
+    instance()->mMtpInfoUrl = url;
+}
+
+/*!
+ Returns mtp info url.
+ */
+QString MpSettingsManager::mtpInfoUrl()
+{
+    return instance()->mMtpInfoUrl;
+}
+
+/*!
+ Returns the preset setting.
+ */
+int MpSettingsManager::preset()
+{
+    return 0;
+}
+
+/*!
+ Slot to be called to request an update on the \a preset setting.
+ */
+void MpSettingsManager::setPreset(int preset)
+{
+    Q_UNUSED( preset );
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpengine/stub/src/mpsongdata.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,45 @@
+/*
+* 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: mpsongdata stub for testing mpmpxframeworkwrapper.
+*
+*/
+
+#include <mpxmedia.h>
+#include "stub/inc/mpsongdata.h"
+#include "mptrace.h"
+
+/*!
+ Stub function.
+*/
+MpSongData::MpSongData( QObject *parent )
+    : QObject( parent ),
+      iSetMedia( false )
+{
+    TX_LOG_ARGS("Stub")
+}
+
+/*!
+ Stub function.
+*/
+MpSongData::~MpSongData()
+{
+    TX_LOG_ARGS("Stub")
+}
+
+void MpSongData::setMpxMedia( const CMPXMedia& aMedia )
+{
+    TX_LOG_ARGS("Stub")
+    Q_UNUSED( aMedia );
+    iSetMedia = true;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpengine/stub/src/mpsongscanner.cpp	Fri Aug 06 16:51:36 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: stub for song scanner.
+*
+*/
+
+#include "mpsongscanner.h"
+#include "mpmpxharvesterframeworkwrapper.h"
+
+/*!
+ Constructs the song scanner.
+ */
+MpSongScanner::MpSongScanner( MpMpxHarvesterFrameworkWrapper */*wrapper*/, QObject *parent )
+    : QObject( parent )
+{
+
+}
+
+/*!
+ Destructs the song scanner.
+ */
+MpSongScanner::~MpSongScanner()
+{
+}
+
+/*!
+ Initiates song scanning.
+ */
+void MpSongScanner::scan( bool /*automaticScan*/ )
+{
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpengine/unittest_mpengine.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,60 @@
+#
+# 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: mpengine unit test project file.
+#
+
+TEMPLATE = app
+CONFIG += qtestlib hb symbian_test
+TARGET = unittest_mpengine
+TARGET.CAPABILITY = CAP_APPLICATION
+
+DEPENDPATH += .
+INCLUDEPATH += . \
+               stub/inc \
+               ../../inc \
+               ../../../inc
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE 
+
+LIBS += -lestor.dll \
+        -lfbscli.dll \
+
+HEADERS += inc/unittest_mpengine.h \
+		   ../../../inc/mpengine.h \
+           stub/inc/mpmpxharvesterframeworkwrapper.h \
+		   stub/inc/mpsongdata.h \
+		   stub/inc/mpsongscanner.h \
+		   stub/inc/mpmediakeyhandler.h \     
+		   stub/inc/mpmpxcollectionframeworkwrapper.h \
+		   stub/inc/mpmpxcollectiondata.h \
+		   stub/inc/mpmpxplaybackframeworkwrapper.h \
+		   stub/inc/mpplaybackdata.h \
+		   stub/inc/mpaudioeffectsframeworkwrapper.h \
+		   stub/inc/mpequalizerframeworkwrapper.h \
+	       stub/inc/mpsettingsmanager.h \
+               
+SOURCES += src/unittest_mpengine.cpp \ 		   
+		   stub/src/mpmpxharvesterframeworkwrapper.cpp \ 
+           stub/src/mpsongdata.cpp \
+           stub/src/mpsongscanner.cpp \    
+		   stub/src/mpmediakeyhandler.cpp \
+		   stub/src/mpmpxcollectionframeworkwrapper.cpp \
+		   stub/src/mpmpxcollectiondata.cpp \
+		   stub/src/mpmpxplaybackframeworkwrapper.cpp \
+		   stub/src/mpplaybackdata.cpp \
+		   stub/src/mpaudioeffectsframeworkwrapper.cpp \
+	       stub/src/mpequalizerframeworkwrapper.cpp \
+	       stub/src/mpsettingsmanager.cpp \
+	       
+DEFINES += BUILD_MPENGINE_LIB	       
+	       
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpenginefactory/inc/unittest_mpenginefactory.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,57 @@
+/*
+* 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 mpenginefactory
+*
+*/
+
+#ifndef TESTMPENGINEFACTORY_H
+#define TESTMPENGINEFACTORY_H
+
+#include <QtTest/QtTest>
+
+class MpEngineFactory;
+
+class TestMpEngineFactory : public QObject
+{
+    Q_OBJECT
+
+public:
+
+    TestMpEngineFactory();
+    ~TestMpEngineFactory();
+
+public slots:
+
+    void initTestCase();
+    void cleanupTestCase();
+    void init();
+    void cleanup();
+
+private slots:
+    void testInstance();
+    void testCreateSharedEngine();
+    void testCreateIsolatedEngine();
+    void testSharedEngine();
+    void testClose(); 
+
+private:
+
+    MpEngineFactory *mTest;
+};
+
+#endif  // TESTMPENGINEFACTORY_H
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpenginefactory/src/unittest_mpenginefactory.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,147 @@
+/*
+* 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 mpenginefactory
+*
+*/
+
+#include <QSignalSpy>
+
+#include "unittest_mpenginefactory.h"
+
+// Do this so we can access all member variables.
+#define private public
+#include "mpenginefactory.h"
+#undef private
+
+/*!
+ Make our test case a stand-alone executable that runs all the test functions.
+ */
+int main(int argc, char *argv[])
+{
+    QApplication app(argc, argv);
+
+    TestMpEngineFactory 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_mpenginefactory.txt";
+
+        return QTest::qExec(&tv, 3, pass);
+    }
+}
+
+TestMpEngineFactory::TestMpEngineFactory()
+    : mTest(0)
+{
+}
+
+TestMpEngineFactory::~TestMpEngineFactory()
+{
+}
+
+/*!
+ Called before the first testfunction is executed.
+ */
+void TestMpEngineFactory::initTestCase()
+{
+}
+
+/*!
+ Called after the last testfunction was executed.
+ */
+void TestMpEngineFactory::cleanupTestCase()
+{
+}
+
+/*!
+ Called before each testfunction is executed.
+ */
+void TestMpEngineFactory::init()
+{
+
+}
+
+/*!
+ Called after every testfunction.
+ */
+void TestMpEngineFactory::cleanup()
+{
+
+}
+
+
+void TestMpEngineFactory::testInstance()
+{
+    mTest =  MpEngineFactory::instance();
+    QVERIFY( mTest != 0 );
+    MpEngineFactory *factory = MpEngineFactory::instance();
+    QVERIFY( mTest == factory );
+}
+
+
+void TestMpEngineFactory::testCreateSharedEngine()
+{
+    MpEngine *sharedEngine = MpEngineFactory::createSharedEngine();
+    QVERIFY( sharedEngine != 0 );
+    MpEngine *engine = MpEngineFactory::createSharedEngine();
+    QVERIFY( sharedEngine == engine );
+    
+    delete MpEngineFactory::instance()->mSharedEngine;
+    MpEngineFactory::instance()->mSharedEngine = 0;
+}
+
+void TestMpEngineFactory::testCreateIsolatedEngine()
+{
+    MpEngine *engineOne = MpEngineFactory::createIsolatedEngine( MpEngine::StandAlone );
+    QVERIFY( engineOne != 0 );
+    MpEngine *engineTwo = MpEngineFactory::createIsolatedEngine( MpEngine::StandAlone );
+    QVERIFY( engineTwo != 0 );
+    QVERIFY( engineOne != engineTwo );
+    QVERIFY( MpEngineFactory::instance()->mEngines.count() == 2 );
+        
+    MpEngine *ptr;
+    foreach ( ptr, MpEngineFactory::instance()->mEngines ) {
+        delete ptr;
+        ptr = 0;
+    }
+    // This might be a potential bug in MpEngineFactory, need to call clear in close() function
+    MpEngineFactory::instance()->mEngines.clear();
+}
+
+void TestMpEngineFactory::testSharedEngine() 
+{    
+    MpEngine *sharedEngine = MpEngineFactory::createSharedEngine();
+    QVERIFY( sharedEngine != 0 );
+    MpEngine *engine = MpEngineFactory::sharedEngine();
+    QVERIFY( sharedEngine == engine );
+}
+
+void TestMpEngineFactory::testClose() 
+{
+    MpEngine *sharedEngine = MpEngineFactory::createSharedEngine();
+    MpEngine *engineOne = MpEngineFactory::createIsolatedEngine( MpEngine::StandAlone );
+    MpEngine *engineTwo = MpEngineFactory::createIsolatedEngine( MpEngine::StandAlone );
+       
+    MpEngineFactory::close();
+    MpEngineFactory::instance()->mEngines.clear();
+    QVERIFY( MpEngineFactory::instance()->mSharedEngine == 0 );
+}
+
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpenginefactory/stub/inc/mpengine.h	Fri Aug 06 16:51:36 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: mpengine stub
+*
+*/
+
+#ifndef MPENGINE_H
+#define MPENGINE_H
+
+#include <QObject>
+
+class MpEngine : public QObject
+{
+    Q_OBJECT
+
+public:
+    enum EngineMode{
+        StandAlone,
+        Fetch,
+        Embedded,
+        MediaBrowsing
+    };
+    friend class MpEngineFactory;
+
+private:
+    explicit MpEngine();
+    void initialize( TUid hostUid, EngineMode mode);
+
+public:
+    virtual ~MpEngine();
+};
+
+#endif // MPENGINE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpenginefactory/stub/src/mpengine.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,40 @@
+/*
+* 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 mpengine.
+*
+*/
+
+#include "mpengine.h"
+
+MpEngine::MpEngine()
+{
+
+}
+
+/*!
+ Destructs music player engine.
+ */
+MpEngine::~MpEngine()
+{
+
+}
+
+/*!
+ Initialize engine
+ */
+void MpEngine::initialize( TUid hostUid, EngineMode mode )
+{
+    Q_UNUSED( hostUid );
+    Q_UNUSED( mode );
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpengine/tsrc/unittest_mpenginefactory/unittest_mpenginefactory.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,41 @@
+#
+# 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: mpenginefactory unit test project file.
+#
+
+TEMPLATE = app
+CONFIG += qtestlib hb symbian_test
+TARGET = unittest_mpenginefactory
+TARGET.CAPABILITY = CAP_APPLICATION
+
+DEPENDPATH += .
+INCLUDEPATH += . \
+               stub/inc \
+               ../../inc \
+               ../../../inc
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE 
+
+LIBS += -lestor.dll \
+        -lfbscli.dll \
+        -lmpengine
+
+HEADERS += inc/unittest_mpenginefactory.h \
+		   stub/inc/mpengine.h              
+               
+SOURCES += src/unittest_mpenginefactory.cpp \
+           ../../src/mpenginefactory.cpp \
+           stub/src/mpengine.cpp
+           
+
+
--- a/mpengine/tsrc/unittest_mpmediakeyhandler/inc/unittest_mpmediakeyhandler.h	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +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 mpmediakeyhandler
-*
-*/
-
-#ifndef TESTMPMEDIAKEYHANDLER_H
-#define TESTMPMEDIAKEYHANDLER_H
-
-#include <QtTest/QtTest>
-
-class MpMediaKeyHandler;
-class MpMediaKeyHandlerPrivate;
-
-class TestMpMediaKeyHandler : public QObject
-{
-    Q_OBJECT
-
-public:
-    
-    TestMpMediaKeyHandler();
-    virtual ~TestMpMediaKeyHandler();
-
-// from QtTest
-public slots:
-
-    void initTestCase();
-    void cleanupTestCase();
-    void init();
-    void cleanup();
-
-// internal
-private slots:
-
-    void testConstructor();
-    void testDestructor();
-    void testConstructorFail();
-    void testDestructorFail();
-    void testCommandVolumeUpKey();
-    void testCommandVolumeDownKey();
-    void testCommandPlayKey();
-    void testCommandPauseKey();
-    void testCommandPlayPauseKey();
-    void testCommandStopKey();
-    void testCommandFastForwardKeyPress();
-    void testCommandFastForwardKeyRelease();
-    void testCommandRewindKeyPress();
-    void testCommandRewindKeyRelease();
-    void testCommandForwardKey();
-    void testCommandBackwardKey();
-    
-    void testPlay();
-    void testAudioInputFunction();
-    void testSelectAvInputFunction();
-    void testSelectDiskFunction();
-    void testTuneFunction();
-
-private:
-    
-    MpMediaKeyHandler           *mTest;
-    MpMediaKeyHandlerPrivate    *mTestPrivate;
-
-};
-
-#endif  // TESTMPMEDIAKEYHANDLER_H
-
-
-
-
--- a/mpengine/tsrc/unittest_mpmediakeyhandler/src/unittest_mpmediakeyhandler.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,396 +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 mpmediakeyhandler
-*
-*/
-
-#include <QSignalSpy>
-#include <QMetaType>
-#include <hbapplication.h>
-#include <hbmainwindow.h>
-#include <e32debug.h>
-
-#include "unittest_mpmediakeyhandler.h"
-#include "mpcommondefs.h"
-#include "stub/inc/mpxplaybackutility.h"
-#include "stub/inc/remconcoreapitarget.h"
-#include "stub/inc/remconinterfaceselector.h"
-
-
-// Do this so we can access all member variables.
-#define private public
-#include "mpmediakeyhandler.h"
-#include "mpmediakeyhandler_p.h"
-#undef private
-
-
-/*!
- Make our test case a stand-alone executable that runs all the test functions.
- */
-int main(int argc, char *argv[])
-{
-    HbApplication app(argc, argv);
-    HbMainWindow window;
-
-    TestMpMediaKeyHandler tv;
-
-    char *pass[3];
-    pass[0] = argv[0];
-    pass[1] = "-o";
-    pass[2] = "c:\\data\\unittest_mpmediakeyhandler.txt";
-
-    int res = QTest::qExec(&tv, 3, pass);
-
-    return res;
-}
-
-TestMpMediaKeyHandler::TestMpMediaKeyHandler()
-    : mTest(0)
-{
-}
-
-TestMpMediaKeyHandler::~TestMpMediaKeyHandler()
-{
-    delete mTest;
-}
-
-/*!
- Called before the first testfunction is executed.
- */
-void TestMpMediaKeyHandler::initTestCase()
-{
-    RDebug::Print(_L("initTestCase()"));
-}
-
-/*!
- Called after the last testfunction was executed.
- */
-void TestMpMediaKeyHandler::cleanupTestCase()
-{
-    RDebug::Print(_L("cleanupTestCase()"));
-}
-
-/*!
- Called before each testfunction is executed.
- */
-void TestMpMediaKeyHandler::init()
-{
-    RDebug::Print(_L(">>init()"));
-    mTest = new MpMediaKeyHandler();
-    mTestPrivate = mTest->d_ptr;
-    RDebug::Print(_L("<<init()"));
-}
-
-/*!
- Called after every testfunction.
- */
-void TestMpMediaKeyHandler::cleanup()
-{
-    if (mTest)
-    {
-        delete mTest;
-        mTest = 0;
-        mTestPrivate = 0;
-    }
-}
-
-void TestMpMediaKeyHandler::testConstructor()
-{
-    RDebug::Print(_L(">>testConstructor()"));
-    
-    QVERIFY(mTest != 0);
-    QVERIFY(mTestPrivate != 0);
-    QVERIFY(mTestPrivate->iInterfaceSelector != 0);
-    QVERIFY(mTestPrivate->iResponseHandler != 0);
-    QVERIFY(mTestPrivate->iPlaybackUtility != 0);
-    
-    RDebug::Print(_L("<<testConstructor()"));
-}
-
-void TestMpMediaKeyHandler::testDestructor()
-{
-    RDebug::Print(_L(">>testDestructor()"));
-    
-    // it is been observed that CRemConCoreApiTarget is not being deleted by anyone
-    // the creator claim it does not own it, while others never claim the ownership neither
-    cleanup();
-    QVERIFY(mTest == 0);
-    QCOMPARE(MMPXPlaybackUtility::getCount(), 0);
-    QCOMPARE(CRemConCoreApiTarget::getCount(), 0);
-    QCOMPARE(CRemConInterfaceSelector::getCount(), 0);
-    
-    RDebug::Print(_L("<<testDestructor()"));
-}
-
-void TestMpMediaKeyHandler::testConstructorFail()
-{
-    RDebug::Print(_L(">>testConstructorFail()"));
-
-    // errorOccured signal cannot be connected until mediakeyhandler is created,
-    // and error during construction cannot be feedback.
-    // solution should be to seperate construction/init
-    cleanup();
-    CRemConInterfaceSelector::setNewLLeave();
-    init();
-    QSignalSpy spy1(mTest, SIGNAL(errorOccured(int)));
-    QVERIFY(mTest != 0);
-    //QCOMPARE(spy1.count(), 1);    // failed if comment in
-    
-    cleanup();
-    CRemConInterfaceSelector::setOpenTargetLLeave();
-    init();
-    QSignalSpy spy2(mTest, SIGNAL(errorOccured(int)));
-    QVERIFY(mTest != 0);
-    //QCOMPARE(spy2.count(), 1);    // failed if comment in
-    
-    cleanup();
-    CRemConCoreApiTarget::setNewLLeave();
-    init();
-    QSignalSpy spy3(mTest, SIGNAL(errorOccured(int)));
-    QVERIFY(mTest != 0);
-    //QCOMPARE(spy3.count(), 1);    // failed if comment in
-
-    cleanup();
-    MMPXPlaybackUtility::setNewLLeave();
-    init();
-    QSignalSpy spy4(mTest, SIGNAL(errorOccured(int)));
-    QVERIFY(mTest != 0);
-    //QCOMPARE(spy4.count(), 1);    // failed if comment in
-    
-    cleanup();
-    MMPXPlaybackUtility::setAddObserverLLeave();
-    init();
-    QSignalSpy spy5(mTest, SIGNAL(errorOccured(int)));
-    QVERIFY(mTest != 0);
-    //QCOMPARE(spy5.count(), 1);    // failed if comment in
-    
-    RDebug::Print(_L("<<testConstructorFail()"));
-}
-
-void TestMpMediaKeyHandler::testDestructorFail()
-{
-    RDebug::Print(_L(">>testDestructorFail()"));
-    
-    MMPXPlaybackUtility::setRemoveObserverLLeave();
-    cleanup();
-    QVERIFY(mTest == 0);
-    QCOMPARE(MMPXPlaybackUtility::getCount(), 0);
-    QCOMPARE(CRemConCoreApiTarget::getCount(), 0);
-    QCOMPARE(CRemConInterfaceSelector::getCount(), 0);
-    
-    RDebug::Print(_L("<<testDestructorFail()"));
-}
-
-void TestMpMediaKeyHandler::testCommandVolumeUpKey()
-{
-    RDebug::Print(_L(">>testCommandVolumeUpKey()"));
-    
-    // volumeChanged signal would not emit until mediakeyhandler is not added as an observer to MMPXPlaybackUtility
-    QSignalSpy spy(mTest, SIGNAL(volumeChanged(int)));
-    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
-    MMPXPlaybackUtility::setPlaying();
-    mTestPrivate->MrccatoCommand(ERemConCoreApiVolumeUp, ERemConCoreApiButtonClick);
-    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
-    QCOMPARE(spy.count(), 1);
-    
-    // impossible to stub out the CPeriodic class which is part of the Press/Release handling
-    // hence, those logic could not be tested 
-    
-    RDebug::Print(_L("<<testCommandVolumeUpKey()"));
-}
-
-void TestMpMediaKeyHandler::testCommandVolumeDownKey()
-{
-    RDebug::Print(_L(">>testCommandVolumeDownKey()"));
-    
-    // volumeChanged signal would not emit until mediakeyhandler is not added as an observer to MMPXPlaybackUtility
-    QSignalSpy spy(mTest, SIGNAL(volumeChanged(int)));
-    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
-    MMPXPlaybackUtility::setPlaying();
-    mTestPrivate->MrccatoCommand(ERemConCoreApiVolumeDown, ERemConCoreApiButtonClick);
-    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
-    QCOMPARE(spy.count(), 1);
-    
-    // impossible to stub out the CPeriodic class which is part of the Press/Release handling
-    // hence, those logic could not be tested
-    
-    RDebug::Print(_L("<<testCommandVolumeDownKey()"));
-}
-
-void TestMpMediaKeyHandler::testCommandPlayKey()
-{
-    RDebug::Print(_L(">>testCommandPlayKey()"));
-    
-    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
-    mTestPrivate->MrccatoCommand(ERemConCoreApiPlay, ERemConCoreApiButtonClick);
-    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
-    
-    RDebug::Print(_L("<<testCommandPlayKey()"));
-}
-
-void TestMpMediaKeyHandler::testCommandPauseKey()
-{
-    RDebug::Print(_L(">>testCommandPauseKey()"));
-    
-    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
-    mTestPrivate->MrccatoCommand(ERemConCoreApiPause, ERemConCoreApiButtonClick);
-    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
-        
-    RDebug::Print(_L("<<testCommandPauseKey()"));
-}
-
-void TestMpMediaKeyHandler::testCommandPlayPauseKey()
-{
-    RDebug::Print(_L(">>testCommandPlayPauseKey()"));
-    
-    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
-    mTestPrivate->MrccatoCommand(ERemConCoreApiPausePlayFunction, ERemConCoreApiButtonClick);
-    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
-    
-    RDebug::Print(_L("<<testCommandPlayPauseKey()"));
-}
-
-void TestMpMediaKeyHandler::testCommandStopKey()
-{
-    RDebug::Print(_L(">>testCommandStopKey()"));
-    
-    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
-    mTestPrivate->MrccatoCommand(ERemConCoreApiStop, ERemConCoreApiButtonClick);
-    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
-    
-    RDebug::Print(_L("<<testCommandStopKey()"));
-}
-
-void TestMpMediaKeyHandler::testCommandFastForwardKeyPress()
-{
-    RDebug::Print(_L(">>testCommandFastForwardKeyPress()"));
-    
-    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
-    mTestPrivate->MrccatoCommand(ERemConCoreApiFastForward, ERemConCoreApiButtonPress);
-    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
-    
-    RDebug::Print(_L("<<testCommandFastForwardKeyPress()"));
-}
-
-void TestMpMediaKeyHandler::testCommandFastForwardKeyRelease()
-{
-    RDebug::Print(_L(">>testCommandFastForwardKeyRelease()"));
-    
-    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
-    mTestPrivate->MrccatoCommand(ERemConCoreApiFastForward, ERemConCoreApiButtonRelease);
-    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
-    
-    RDebug::Print(_L("<<testCommandFastForwardKeyRelease()"));
-}
-
-void TestMpMediaKeyHandler::testCommandRewindKeyPress()
-{
-    RDebug::Print(_L(">>testCommandRewindKey()"));
-    
-    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
-    mTestPrivate->MrccatoCommand(ERemConCoreApiRewind, ERemConCoreApiButtonPress);
-    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
-    
-    RDebug::Print(_L("<<testCommandRewindKey()"));
-}
-
-void TestMpMediaKeyHandler::testCommandRewindKeyRelease()
-{
-    RDebug::Print(_L(">>testCommandRewindKeyRelease()"));
-    
-    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
-    mTestPrivate->MrccatoCommand(ERemConCoreApiRewind, ERemConCoreApiButtonRelease);
-    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
-    
-    RDebug::Print(_L("<<testCommandRewindKeyRelease()"));
-}
-
-void TestMpMediaKeyHandler::testCommandForwardKey()
-{
-    RDebug::Print(_L(">>testCommandForwardKey()"));
-    
-    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
-    mTestPrivate->MrccatoCommand(ERemConCoreApiForward, ERemConCoreApiButtonClick);
-    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
-    
-    RDebug::Print(_L("<<testCommandForwardKey()"));
-}
-
-void TestMpMediaKeyHandler::testCommandBackwardKey()
-{
-    RDebug::Print(_L(">>testCommandBackwardKey()"));
-    
-    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
-    mTestPrivate->MrccatoCommand(ERemConCoreApiBackward, ERemConCoreApiButtonClick);
-    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
-    
-    RDebug::Print(_L("<<testCommandBackwardKey()"));
-}
-
-void TestMpMediaKeyHandler::testPlay()
-{
-    RDebug::Print(_L(">>testPlay()"));
-    
-    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
-    mTestPrivate->MrccatoPlay(ERemConCoreApiPlaybackSpeedX1, ERemConCoreApiButtonClick);
-    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
-    
-    RDebug::Print(_L("<<testPlay()"));
-}
-
-void TestMpMediaKeyHandler::testAudioInputFunction()
-{
-    RDebug::Print(_L(">>testAudioInputFunction()"));
-    
-    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
-    mTestPrivate->MrccatoSelectAudioInputFunction(0, ERemConCoreApiButtonClick);
-    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
-        
-    RDebug::Print(_L("<<testAudioInputFunction()"));
-}
-
-void TestMpMediaKeyHandler::testSelectAvInputFunction()
-{
-    RDebug::Print(_L(">>testSelectAvInputFunction()"));
-    
-    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
-    mTestPrivate->MrccatoSelectAvInputFunction(0, ERemConCoreApiButtonClick);
-    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
-
-    RDebug::Print(_L("<<testSelectAvInputFunction()"));
-}
-
-void TestMpMediaKeyHandler::testSelectDiskFunction()
-{
-    RDebug::Print(_L(">>testSelectDiskFunction()"));
-    
-    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
-    mTestPrivate->MrccatoSelectDiskFunction(0, ERemConCoreApiButtonClick);
-    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
-
-    RDebug::Print(_L("<<testSelectDiskFunction()"));
-}
-
-void TestMpMediaKeyHandler::testTuneFunction()
-{
-    RDebug::Print(_L(">>testTuneFunction()"));
-
-    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
-    mTestPrivate->MrccatoTuneFunction(ETrue, 0, 1, ERemConCoreApiButtonClick);
-    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
-
-    RDebug::Print(_L("<<testTuneFunction()"));
-}
-
-// End of file
--- a/mpengine/tsrc/unittest_mpmediakeyhandler/stub/inc/mpxplaybackutility.h	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +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: mpxplaybackutility stub for testing mpmediakeyhandler
-*
-*/
-
-
-#ifndef MMPXPLAYBACKUTILITY_H
-#define MMPXPLAYBACKUTILITY_H
-
-
-#include <mpxplaybackframeworkdefs.h>   // KPbModeDefault, TMPXPlaybackCommand
-#include <e32base.h>                    // CBase
-
-
-class MpMediaKeyHandlerPrivate;
-
-class MMPXPlaybackUtility : public CActive
-    {
-    
-public:
-    
-    static int getCount();
-    static void setNewLLeave();
-    static void NewLLeaveIfDesiredL();
-    static void setAddObserverLLeave();
-    static void AddObserverLLeaveIfDesiredL();
-    static void setRemoveObserverLLeave();
-    static void RemoveObserverLLeaveIfDesiredL();
-    static void setCommandLLeave();
-    static void CommandLLeaveIfDesiredL();
-    static void setStateLLeave();
-    static void StateLLeaveIfDesiredL();
-    static void setPlaying();
-    
-public:
-
-    static MMPXPlaybackUtility* UtilityL(const TUid& aModeId = KPbModeDefault);
-    virtual ~MMPXPlaybackUtility();
-
-    void Close();
-    void AddObserverL(MpMediaKeyHandlerPrivate& aObs);
-    void RemoveObserverL(MpMediaKeyHandlerPrivate& aObs);
-    void CommandL(TMPXPlaybackCommand aCmd, TInt aData = 0);
-    
-    TMPXPlaybackState StateL() const;    
-
-protected:
-
-    // from CActive
-    virtual void DoCancel();
-    virtual void RunL();
-    
-private:
-    
-    MMPXPlaybackUtility();
-    
-private:
-
-    MpMediaKeyHandlerPrivate*   iObserver;
-    TInt                        iVolume;
-    TBool                       iVolumeUp;
-    
-    };
-
-#endif      // MMPXPLAYBACKUTILITY_H
-
-// End of File
--- a/mpengine/tsrc/unittest_mpmediakeyhandler/stub/inc/remconcoreapitarget.h	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +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: remconcoreapitarget stub for testing mpmediakeyhandler
-*
-*/
-
-
-#ifndef REMCONCOREAPITARGET_H
-#define REMCONCOREAPITARGET_H
-
-
-#include <remconcoreapi.h>  // TRemConCoreApiOperationId 
-
-
-class CRemConInterfaceSelector;
-class MRemConCoreApiTargetObserver;
-
-class CRemConCoreApiTarget : public CActive
-    {
-
-public:
-    
-    static int getCount();
-    static void setNewLLeave();
-    static void NewLLeaveIfDesiredL();
-    static int getSendResponseCount();
-    
-public:
-
-    static CRemConCoreApiTarget* NewL(CRemConInterfaceSelector& aInterfaceSelector, MRemConCoreApiTargetObserver& aObserver);
-    virtual ~CRemConCoreApiTarget();
-
-    void VolumeUpResponse(TRequestStatus& aStatus, TInt aError);
-    void VolumeDownResponse(TRequestStatus& aStatus, TInt aError);
-    void SendResponse(TRequestStatus& aStatus, TRemConCoreApiOperationId aOperationId, TInt aError);    
-
-protected:
-
-    // from CActive
-    virtual void DoCancel();
-    virtual void RunL();
-    
-private:
-    
-    CRemConCoreApiTarget();
-    
-private:
-
-    TRequestStatus*             iClientStatus;
-    
-    };
-
-#endif      // REMCONCOREAPITARGET_H
-
-// End of File
--- a/mpengine/tsrc/unittest_mpmediakeyhandler/stub/inc/remconinterfaceselector.h	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +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: remconinterfaceselector stub for testing mpmediakeyhandler
-*
-*/
-
-
-#ifndef REMCONINTERFACESELECTOR_H
-#define REMCONINTERFACESELECTOR_H
-
-
-#include <e32base.h>
-
-
-class CRemConInterfaceSelector : public CBase
-    {
-
-public:
-    
-    static int getCount();
-    static void setNewLLeave();
-    static void NewLLeaveIfDesiredL();
-    static void setOpenTargetLLeave();
-    static void OpenTargetLLeaveIfDesiredL();
-    
-public:
-
-    static CRemConInterfaceSelector* NewL();
-    virtual ~CRemConInterfaceSelector();
-
-    void OpenTargetL();
-
-private:
-    
-    CRemConInterfaceSelector();
-    
-    };
-
-#endif      // REMCONINTERFACESELECTOR_H
-
-// End of File
--- a/mpengine/tsrc/unittest_mpmediakeyhandler/stub/src/mpxplaybackutility.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,230 +0,0 @@
-/*
-* Copyright (c) 2006 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: mpxplaybackutility stub for testing MpNowPlayingBackEnd
-*
-*/
-
-
-#include <mpxplaybackcommanddefs.h>
-#include <e32debug.h>
-
-#include "stub/inc/mpxplaybackutility.h"
-#include "mpmediakeyhandler_p.h"
-
-
-int gMMPXPlaybackUtilityCount = 0;
-bool gMMPXPlaybackUtilityNewLLeave = false;
-bool gMMPXPlaybackUtilityAddObserverLLeave = false;
-bool gMMPXPlaybackUtilityRemoveObserverLLeave = false;
-bool gMMPXPlaybackUtilityCommandLLeave = false;
-bool gMMPXPlaybackUtilityStateLLeave = false;
-TMPXPlaybackState gMMPXPlaybackUtilityState = EPbStateNotInitialised;
-
-
-//static functions start
-
-int MMPXPlaybackUtility::getCount()
-{
-    return gMMPXPlaybackUtilityCount;
-}
-
-void MMPXPlaybackUtility::setNewLLeave()
-{
-    gMMPXPlaybackUtilityNewLLeave = true;
-}
-
-void MMPXPlaybackUtility::NewLLeaveIfDesiredL()
-{
-    if (gMMPXPlaybackUtilityNewLLeave)
-    {
-        RDebug::Print(_L("MMPXPlaybackUtility::NewLLeaveIfDesiredL Leave"));
-        gMMPXPlaybackUtilityNewLLeave = false;
-        User::Leave(KErrGeneral);
-    }
-}
-
-void MMPXPlaybackUtility::setAddObserverLLeave()
-{
-    gMMPXPlaybackUtilityAddObserverLLeave = true;
-}
-
-void MMPXPlaybackUtility::AddObserverLLeaveIfDesiredL()
-{
-    if (gMMPXPlaybackUtilityAddObserverLLeave)
-    {
-        RDebug::Print(_L("MMPXPlaybackUtility::AddObserverLLeaveIfDesiredL Leave"));
-        gMMPXPlaybackUtilityAddObserverLLeave = false;
-        User::Leave(KErrGeneral);
-    }
-}
-
-void MMPXPlaybackUtility::setRemoveObserverLLeave()
-{
-    gMMPXPlaybackUtilityRemoveObserverLLeave = true;
-}
-
-void MMPXPlaybackUtility::RemoveObserverLLeaveIfDesiredL()
-{
-    if (gMMPXPlaybackUtilityRemoveObserverLLeave)
-    {
-        RDebug::Print(_L("MMPXPlaybackUtility::RemoveObserverLLeaveIfDesiredL Leave"));
-        gMMPXPlaybackUtilityRemoveObserverLLeave = false;
-        User::Leave(KErrGeneral);
-    }
-}
-
-void MMPXPlaybackUtility::setCommandLLeave()
-{
-    gMMPXPlaybackUtilityCommandLLeave = true;
-}
-
-void MMPXPlaybackUtility::CommandLLeaveIfDesiredL()
-{
-    if (gMMPXPlaybackUtilityCommandLLeave)
-    {
-        RDebug::Print(_L("MMPXPlaybackUtility::CommandLLeaveIfDesiredL Leave"));
-        gMMPXPlaybackUtilityCommandLLeave = false;
-        User::Leave(KErrGeneral);
-    }
-}
-
-void MMPXPlaybackUtility::setStateLLeave()
-{
-    gMMPXPlaybackUtilityStateLLeave = true;
-}
-
-void MMPXPlaybackUtility::StateLLeaveIfDesiredL()
-{
-    if (gMMPXPlaybackUtilityStateLLeave)
-    {
-        RDebug::Print(_L("MMPXPlaybackUtility::StateLLeaveIfDesiredL Leave"));
-        gMMPXPlaybackUtilityStateLLeave = false;
-        User::Leave(KErrGeneral);
-    }
-}
-
-void MMPXPlaybackUtility::setPlaying()
-{
-    gMMPXPlaybackUtilityState = EPbStatePlaying;
-}
-
-//static functions end
-
-MMPXPlaybackUtility::MMPXPlaybackUtility()
-    : CActive(EPriorityStandard),
-      iObserver(NULL),
-      iVolume(5),
-      iVolumeUp(ETrue)
-{
-    gMMPXPlaybackUtilityState = EPbStateNotInitialised;
-}
-
-MMPXPlaybackUtility::~MMPXPlaybackUtility()
-{
-}
-
-MMPXPlaybackUtility* MMPXPlaybackUtility::UtilityL(const TUid& /*aModeId*/)
-{
-    RDebug::Print(_L("stub MMPXPlaybackUtility::UtilityL"));
-    MMPXPlaybackUtility::NewLLeaveIfDesiredL();
-    gMMPXPlaybackUtilityCount++;
-    static MMPXPlaybackUtility playbackUtilility;
-    return &playbackUtilility;
-}
-
-void MMPXPlaybackUtility::Close()
-{
-    iObserver = NULL;
-    gMMPXPlaybackUtilityCount--;
-}
-
-void MMPXPlaybackUtility::AddObserverL(MpMediaKeyHandlerPrivate& aObs)
-{
-    MMPXPlaybackUtility::AddObserverLLeaveIfDesiredL();
-    iObserver = &aObs;
-}
-
-void MMPXPlaybackUtility::RemoveObserverL(MpMediaKeyHandlerPrivate& /*aObs*/)
-{
-    MMPXPlaybackUtility::RemoveObserverLLeaveIfDesiredL();
-    iObserver = NULL;
-}
-
-void MMPXPlaybackUtility::CommandL(TMPXPlaybackCommand aCmd, TInt /*aData*/)
-{
-    RDebug::Print(_L(">>MMPXPlaybackUtility::CommandL"));
-    
-    MMPXPlaybackUtility::CommandLLeaveIfDesiredL();
-    
-    if (IsActive())
-        User::Leave(KErrNotReady);
-    else
-    {
-        if ((aCmd == EPbCmdIncreaseVolume) || (aCmd == EPbCmdDecreaseVolume))
-        {
-            if (aCmd == EPbCmdIncreaseVolume)
-                iVolumeUp = ETrue;
-            else
-                iVolumeUp = EFalse;
-            
-            // stub should not be async
-            /*TRequestStatus* status = &iStatus;
-            User::RequestComplete(status, KErrNone);
-            SetActive();*/
-            
-            RunL();
-        }
-    }
-    
-    RDebug::Print(_L("<<MMPXPlaybackUtility::CommandL"));
-}
-
-TMPXPlaybackState MMPXPlaybackUtility::StateL() const
-{
-    MMPXPlaybackUtility::StateLLeaveIfDesiredL();
-    return gMMPXPlaybackUtilityState;
-}
-
-void MMPXPlaybackUtility::DoCancel()
-{
-}
-
-void MMPXPlaybackUtility::RunL()
-{
-    RDebug::Print(_L(">>MMPXPlaybackUtility::RunL"));
-    
-    TInt err = KErrNone;
-    
-    if (iVolumeUp)
-    {
-        if (iVolume < 10)
-            iVolume++;
-        else
-            err = KErrArgument;
-    }
-    else
-    {
-        if (iVolume > 0)
-            iVolume--;
-        else
-            err = KErrArgument;
-    }
-    
-    if (iObserver)
-        iObserver->HandlePropertyL(EPbPropertyVolume, iVolume, err);
-    
-    RDebug::Print(_L("<<MMPXPlaybackUtility::RunL"));
-}
-
-//end of file
--- a/mpengine/tsrc/unittest_mpmediakeyhandler/stub/src/remconcoreapitarget.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,143 +0,0 @@
-/*
-* Copyright (c) 2006 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: remconcoreapitarget stub for testing MpNowPlayingBackEnd
-*
-*/
-
-
-#include <e32debug.h>
-
-#include "stub/inc/remconcoreapitarget.h"
-
-
-int gCRemConCoreApiTargetCount = 0;
-bool gCRemConCoreApiTargetNewLLeave = false;
-int gCRemConCoreApiTargetSendResponseCount = 0;
-
-
-//static functions start
-
-int CRemConCoreApiTarget::getCount()
-{
-    return gCRemConCoreApiTargetCount;
-}
-
-void CRemConCoreApiTarget::setNewLLeave()
-{
-    gCRemConCoreApiTargetNewLLeave = true;
-}
-
-void CRemConCoreApiTarget::NewLLeaveIfDesiredL()
-{
-    if (gCRemConCoreApiTargetNewLLeave)
-    {
-        RDebug::Print(_L("CRemConCoreApiTarget::NewLLeaveIfDesiredL Leave"));
-        gCRemConCoreApiTargetNewLLeave = false;
-        User::Leave(KErrGeneral);
-    }
-}
-
-int CRemConCoreApiTarget::getSendResponseCount()
-{
-    return gCRemConCoreApiTargetSendResponseCount;
-}
-
-//static functions end
-
-
-CRemConCoreApiTarget::CRemConCoreApiTarget()
-    : CActive(EPriorityStandard),
-      iClientStatus(NULL)
-{
-    gCRemConCoreApiTargetCount++;
-}
-
-CRemConCoreApiTarget::~CRemConCoreApiTarget()
-{
-    gCRemConCoreApiTargetCount--;
-    gCRemConCoreApiTargetSendResponseCount = 0;
-}
-
-CRemConCoreApiTarget* CRemConCoreApiTarget::NewL(CRemConInterfaceSelector& /*aInterfaceSelector*/, MRemConCoreApiTargetObserver& /*aObserver*/)
-{
-    RDebug::Print(_L("stub CRemConCoreApiTarget::NewL"));
-    CRemConCoreApiTarget::NewLLeaveIfDesiredL();
-    CRemConCoreApiTarget* self = new(ELeave) CRemConCoreApiTarget();
-    return self;
-}
-
-
-void CRemConCoreApiTarget::VolumeUpResponse(TRequestStatus& aStatus, TInt /*aError*/)
-{
-    RDebug::Print(_L(">>CRemConCoreApiTarget::VolumeUpResponse"));
-    
-    iClientStatus = &aStatus;
-    gCRemConCoreApiTargetSendResponseCount++;
-    
-    // stub should not be async
-    /*TRequestStatus* status = &iStatus;
-    User::RequestComplete(status, KErrNone);
-    SetActive();*/
-    
-    RunL();
-    
-    RDebug::Print(_L("<<CRemConCoreApiTarget::VolumeUpResponse"));
-}
-
-void CRemConCoreApiTarget::VolumeDownResponse(TRequestStatus& aStatus, TInt /*aError*/)
-{
-    RDebug::Print(_L(">>CRemConCoreApiTarget::VolumeDownResponse"));
-    
-    iClientStatus = &aStatus;
-    gCRemConCoreApiTargetSendResponseCount++;
-    
-    // stub should not be async
-    /*TRequestStatus* status = &iStatus;
-    User::RequestComplete(status, KErrNone);
-    SetActive();*/
-    
-    RunL();
-    
-    RDebug::Print(_L("<<CRemConCoreApiTarget::VolumeDownResponse"));
-}
-
-void CRemConCoreApiTarget::SendResponse(TRequestStatus& aStatus, TRemConCoreApiOperationId /*aOperationId*/, TInt /*aError*/)
-{
-    RDebug::Print(_L(">>CRemConCoreApiTarget::SendResponse"));
-    
-    iClientStatus = &aStatus;
-    gCRemConCoreApiTargetSendResponseCount++;
-    
-    // stub should not be async
-    /*TRequestStatus* status = &iStatus;
-    User::RequestComplete(status, KErrNone);
-    SetActive();*/
-
-    RunL();
-    
-    RDebug::Print(_L("<<CRemConCoreApiTarget::SendResponse"));
-}
-
-void CRemConCoreApiTarget::DoCancel()
-{
-}
-
-void CRemConCoreApiTarget::RunL()
-{
-    RDebug::Print(_L(">>CRemConCoreApiTarget::RunL"));
-    User::RequestComplete(iClientStatus, KErrNone);
-    RDebug::Print(_L("<<CRemConCoreApiTarget::RunL"));
-}
-
-//end of file
--- a/mpengine/tsrc/unittest_mpmediakeyhandler/stub/src/remconinterfaceselector.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-/*
-* Copyright (c) 2006 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: remconinterfaceselector stub for testing MpNowPlayingBackEnd
-*
-*/
-
-
-#include <e32debug.h>
-
-#include "stub/inc/remconinterfaceselector.h"
-
-
-int gCRemConInterfaceSelectorCount = 0;
-bool gCRemConInterfaceSelectorNewLLeave = false;
-bool gCRemConInterfaceSelectorOpenTargetLLeave = false;
-
-
-//static functions start
-
-int CRemConInterfaceSelector::getCount()
-{
-    return gCRemConInterfaceSelectorCount;
-}
-
-void CRemConInterfaceSelector::setNewLLeave()
-{
-    gCRemConInterfaceSelectorNewLLeave = true;
-}
-
-void CRemConInterfaceSelector::NewLLeaveIfDesiredL()
-{
-    if (gCRemConInterfaceSelectorNewLLeave)
-    {
-        RDebug::Print(_L("CRemConInterfaceSelector::NewLLeaveIfDesiredL Leave"));
-        gCRemConInterfaceSelectorNewLLeave = false;
-        User::Leave(KErrGeneral);
-    }
-}
-
-void CRemConInterfaceSelector::setOpenTargetLLeave()
-{
-    gCRemConInterfaceSelectorOpenTargetLLeave = true;
-}
-
-void CRemConInterfaceSelector::OpenTargetLLeaveIfDesiredL()
-{
-    if (gCRemConInterfaceSelectorOpenTargetLLeave)
-    {
-        RDebug::Print(_L("CRemConInterfaceSelector::NewLLeaveIfDesiredL Leave"));
-        gCRemConInterfaceSelectorOpenTargetLLeave = false;
-        User::Leave(KErrGeneral);
-    }
-}
-
-//static functions end
-
-CRemConInterfaceSelector::CRemConInterfaceSelector()
-{
-    gCRemConInterfaceSelectorCount++;
-}
-
-CRemConInterfaceSelector::~CRemConInterfaceSelector()
-{
-    gCRemConInterfaceSelectorCount--;
-}
-
-CRemConInterfaceSelector* CRemConInterfaceSelector::NewL()
-{
-    RDebug::Print(_L("stub CRemConInterfaceSelector::NewL"));
-    CRemConInterfaceSelector::NewLLeaveIfDesiredL();
-    CRemConInterfaceSelector* self = new(ELeave) CRemConInterfaceSelector();
-    return self;
-}
-
-void CRemConInterfaceSelector::OpenTargetL()
-{
-    CRemConInterfaceSelector::OpenTargetLLeaveIfDesiredL();
-}
-
-//end of file
--- a/mpengine/tsrc/unittest_mpmediakeyhandler/unittest_mpmediakeyhandler.pro	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +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: mpmediakeyhandler unit test project file.
-#
-
-TEMPLATE = app
-CONFIG += qtestlib hb symbian_test
-TARGET = unittest_mpmediakeyhandler
-TARGET.CAPABILITY = CAP_APPLICATION
-
-symbian: { 
-    MMP_RULES += SMPSAFE
-}
-
-DEPENDPATH += .
-INCLUDEPATH += . \
-               stub/inc \
-               ../../../inc \
-INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE 
-
-LIBS += -lestor.dll \
-        -lfbscli.dll \
-        -lmpxcommon.dll \
-        -lremconcoreapi.dll
-
-HEADERS += inc/unittest_mpmediakeyhandler.h \
-           ../../inc/mpmediakeyhandler.h \
-           ../../inc/mpmediakeyhandler_p.h \
-           ../../inc/mpmediakeyremconresponse.h \
-           stub/inc/mpxplaybackutility.h \
-           stub/inc/remconcoreapitarget.h \
-           stub/inc/remconinterfaceselector.h
-               
-SOURCES += src/unittest_mpmediakeyhandler.cpp \
-           ../../src/mpmediakeyhandler.cpp \
-           ../../src/mpmediakeyhandler_p.cpp \
-           ../../src/mpmediakeyremconresponse.cpp \
-           stub/src/mpxplaybackutility.cpp \
-           stub/src/remconcoreapitarget.cpp \
-           stub/src/remconinterfaceselector.cpp
-
--- a/mpengine/tsrc/unittest_mpmpxplaybackframeworkwrapper/inc/unittest_mpmpxplaybackframeworkwrapper.h	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpengine/tsrc/unittest_mpmpxplaybackframeworkwrapper/inc/unittest_mpmpxplaybackframeworkwrapper.h	Fri Aug 06 16:51:36 2010 -0500
@@ -71,6 +71,15 @@
     void testStartSeekBackward();
     void testHandleSubPlayerNamesL();
     void testCloseCurrentPlayback();
+    void testPause();
+    void testGetMaxVolume();
+    void testGetVolume();
+    void testIncreaseVolume();
+    void testDecreaseVolume();
+    void testSetVolume();
+    void testGetMuteState();
+    void testMute();
+    void testUnmute();
 
 private:
 
--- a/mpengine/tsrc/unittest_mpmpxplaybackframeworkwrapper/src/unittest_mpmpxplaybackframeworkwrapper.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpengine/tsrc/unittest_mpmpxplaybackframeworkwrapper/src/unittest_mpmpxplaybackframeworkwrapper.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -495,6 +495,12 @@
     else {
         QWARN("Not able to create RF Session");
     }
+
+    //Play command
+    cleanup();
+    init();
+    mTest->play();
+    QCOMPARE( mTestPrivate->iPlaybackUtility->iCmd, EPbCmdPlay);
 }
 
 /*!
@@ -556,6 +562,89 @@
 }
 
 /*!
+ Tests pause.
+ */
+void TestMpMpxPlaybackFrameworkWrapper::testPause()
+{
+    mTest->pause();
+    QCOMPARE(mTestPrivate->iPlaybackUtility->iCmd, EPbCmdPause);
+}
+
+/*!
+ Tests getMaxVolume.
+ */
+void TestMpMpxPlaybackFrameworkWrapper::testGetMaxVolume()
+{
+    mTest->getMaxVolume();
+    QCOMPARE(mTestPrivate->iPlaybackUtility->iProperty, EPbPropertyMaxVolume);
+}
+
+/*!
+ Tests getVolume.
+ */
+void TestMpMpxPlaybackFrameworkWrapper::testGetVolume()
+{
+    mTest->getVolume();
+    QCOMPARE(mTestPrivate->iPlaybackUtility->iProperty, EPbPropertyVolume);
+}
+
+/*!
+ Tests increaseVolume.
+ */
+void TestMpMpxPlaybackFrameworkWrapper::testIncreaseVolume()
+{
+    mTest->increaseVolume();
+    QCOMPARE(mTestPrivate->iPlaybackUtility->iCmd, EPbCmdIncreaseVolume);
+}
+
+/*!
+ Tests decreaseVolume.
+ */
+void TestMpMpxPlaybackFrameworkWrapper::testDecreaseVolume()
+{
+    mTest->decreaseVolume();
+    QCOMPARE(mTestPrivate->iPlaybackUtility->iCmd, EPbCmdDecreaseVolume);
+}
+
+/*!
+ Tests setVolume.
+ */
+void TestMpMpxPlaybackFrameworkWrapper::testSetVolume()
+{
+    int value = 30;
+    mTest->setVolume( value );
+    QCOMPARE(mTestPrivate->iPlaybackUtility->iCmd, EPbCmdSetVolume);
+    QCOMPARE(mTestPrivate->iPlaybackUtility->iComandData, value);
+}
+
+/*!
+ Tests getMuteState.
+ */
+void TestMpMpxPlaybackFrameworkWrapper::testGetMuteState()
+{
+    mTest->getMuteState();
+    QCOMPARE(mTestPrivate->iPlaybackUtility->iProperty, EPbPropertyMute);
+}
+
+/*!
+ Tests mute.
+ */
+void TestMpMpxPlaybackFrameworkWrapper::testMute()
+{
+    mTest->mute();
+    QCOMPARE(mTestPrivate->iPlaybackUtility->iCmd, EPbCmdMuteVolume);
+}
+
+/*!
+ Tests unmute.
+ */
+void TestMpMpxPlaybackFrameworkWrapper::testUnmute()
+{
+    mTest->unmute();
+    QCOMPARE(mTestPrivate->iPlaybackUtility->iCmd, EPbCmdUnMuteVolume);
+}
+
+/*!
  Used to load test data
  */
 void TestMpMpxPlaybackFrameworkWrapper::loadTestData(TInt aPos)
--- a/mpengine/tsrc/unittest_mpmpxplaybackframeworkwrapper/stub/inc/mpxplaybackutility.h	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpengine/tsrc/unittest_mpmpxplaybackframeworkwrapper/stub/inc/mpxplaybackutility.h	Fri Aug 06 16:51:36 2010 -0500
@@ -54,6 +54,7 @@
     void Close();
     void CommandL(TMPXPlaybackCommand aCmd,TInt aData=0);
     void CommandL(CMPXCommand& aCmd, MMPXPlaybackCallback* aCallback=NULL);
+    void PropertyL(MMPXPlaybackCallback& aCallback, TMPXPlaybackProperty aProperty);
     MMPXSource* Source();
      void SetL(TMPXPlaybackProperty aProperty, TInt aValue);
     TMPXPlaybackState StateL() const;
--- a/mpengine/tsrc/unittest_mpmpxplaybackframeworkwrapper/stub/src/mpxplaybackutility.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpengine/tsrc/unittest_mpmpxplaybackframeworkwrapper/stub/src/mpxplaybackutility.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -103,6 +103,15 @@
 /*!
  Stub function.
 */
+void MMPXPlaybackUtility::PropertyL(MMPXPlaybackCallback& aCallback, TMPXPlaybackProperty aProperty)
+{
+    Q_UNUSED(aCallback);
+    iProperty = aProperty;
+}
+
+/*!
+ Stub function.
+*/
 MMPXSource* MMPXPlaybackUtility::Source()
 {
     if (iReturnSource) {
--- a/mpserviceplugins/m3uplaylistplugin/src/mpxm3uplaylistexporter.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpserviceplugins/m3uplaylistplugin/src/mpxm3uplaylistexporter.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -318,6 +318,8 @@
         // Convert line from Unicode to UTF-8
         // UTF-8 encoded character may consume several bytes =>
         // multiply the descriptor length in order to prevent overflow.
+        // coverity[incorrect_multiplication]
+        // coverity[buffer_alloc]
         HBufC8* line = HBufC8::NewLC(iLine->Length() * KMPXM3UUtf8ConvMultiplier);
 
         TPtr8 ptr = line->Des();
@@ -488,7 +490,7 @@
     CleanupClosePushL(file);
 
     // Calculate the increase in the playlist file size
-    TInt oldSize;
+    TInt oldSize = 0;
     User::LeaveIfError(file.Size(oldSize));
     TInt sizeIncr = iPlaylistBuf->Size() - oldSize;
 
--- a/mpserviceplugins/mpxsqlitedbcommon/src/mpxdbcommonutil.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpserviceplugins/mpxsqlitedbcommon/src/mpxdbcommonutil.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -603,6 +603,8 @@
     MPX_FUNC("MPXDbCommonUtil::ProcessSingleQuotesLC");
 
     // reserve space for all single quotes (double the size)
+    // coverity[incorrect_multiplication]
+    // coverity[buffer_alloc]
     HBufC* value = HBufC::NewLC(aString.Length() * 2);
     TPtr valuePtr(value->Des());
 
@@ -629,6 +631,8 @@
     // reserve space for all percentage signs (triple the size because % should
     // be replaced by %%)
     TInt srcLen(aString.Length());
+    // coverity[incorrect_multiplication]
+    // coverity[buffer_alloc]
     HBufC* targetString = HBufC::NewLC(aString.Length() * 3);
     TPtr targetStringPtr(targetString->Des());
 
--- a/mpserviceplugins/mpxsqlitedbcommon/src/mpxdbmanager.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpserviceplugins/mpxsqlitedbcommon/src/mpxdbmanager.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -505,7 +505,7 @@
     CleanupClosePushL( dstFile );
     
     // resize destination file
-    TInt remainingBytes;
+    TInt remainingBytes = 0;
     User::LeaveIfError( srcFile.Size(remainingBytes) );
     User::LeaveIfError( dstFile.SetSize(remainingBytes) );
 
@@ -1854,6 +1854,8 @@
             {
             delete database.iAliasname;
             database.iAliasname = HBufC::NewL(KAliasName().Length());
+            // coverity[size_error]
+            // coverity[buffer_alloc]
             HBufC* temp = HBufC::NewLC(2); // form of DE, DF, DX,...
             temp->Des().Append(iRAMDrive); // length == 2
             TDriveUnit pdrive( database.iDrive );
@@ -2208,6 +2210,8 @@
     {
     TInt columnCount(GetColumnCountL(aStatement));
     TInt err(KErrNone);
+    // coverity[incorrect_multiplication]
+    // coverity[buffer_alloc]
     HBufC* tableRow = HBufC::NewLC(255 * columnCount);
     TPtr tableRowPtr = tableRow->Des();
 
--- a/mpserviceplugins/mpxsqlitedbcommon/src/mpxdbtable.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpserviceplugins/mpxsqlitedbcommon/src/mpxdbtable.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -419,10 +419,10 @@
         User::Leave(KErrNotFound);
         }
 
-    TUint32 value(recordset.ColumnInt64(KMPXTableDefaultIndex));
+    TInt64 value( recordset.ColumnInt64( KMPXTableDefaultIndex ) );
     CleanupStack::PopAndDestroy(&recordset);
 
-    return value;
+    return value < 0 ? 0: I64LOW( value );
     }
 
 // ----------------------------------------------------------------------------
@@ -456,6 +456,8 @@
 
     // replace single quotes
     // reserve double the value length for single quote duplicates
+    // coverity[incorrect_multiplication]
+    // coverity[buffer_alloc]
     HBufC* value1 = HBufC::NewLC(aValue1.Length() * 2);
     TPtr value1Ptr(value1->Des());
     MPXDbCommonUtil::FindAndReplaceSingleQuote(aValue1, value1Ptr);
@@ -484,6 +486,8 @@
     MPX_FUNC("CMPXDbTable::ExecuteIntQueryL");
 
     // replace single quotes
+    // coverity[incorrect_multiplication]
+    // coverity[buffer_alloc]
     HBufC* value = HBufC::NewLC(aValue.Length() * 2);
     TPtr valuePtr(value->Des());
     MPXDbCommonUtil::FindAndReplaceSingleQuote(aValue, valuePtr);
@@ -640,6 +644,8 @@
 
     // replace single quotes
     // reserve double the value length for single quote duplicates
+    // coverity[incorrect_multiplication]
+    // coverity[buffer_alloc]
     HBufC* value1 = HBufC::NewLC(aValue1.Length() * 2);
     TPtr value1Ptr(value1->Des());
     MPXDbCommonUtil::FindAndReplaceSingleQuote(aValue1, value1Ptr);
@@ -670,10 +676,14 @@
 
     // replace single quotes
     // reserve double the value length for single quote duplicates
+    // coverity[incorrect_multiplication]
+    // coverity[buffer_alloc]
     HBufC* value1 = HBufC::NewLC(aValue1.Length() * 2);
     TPtr value1Ptr(value1->Des());
     MPXDbCommonUtil::FindAndReplaceSingleQuote(aValue1, value1Ptr);
 
+    // coverity[incorrect_multiplication]
+    // coverity[buffer_alloc]
     HBufC* value2 = HBufC::NewLC(aValue2.Length() * 2);
     TPtr value2Ptr(value2->Des());
     MPXDbCommonUtil::FindAndReplaceSingleQuote(aValue2, value2Ptr);
@@ -704,6 +714,8 @@
 
     // replace single quotes
     // reserve double the value length for single quote duplicates
+    // coverity[incorrect_multiplication]
+    // coverity[buffer_alloc]
     HBufC* value = HBufC::NewLC(aValue.Length() * 2);
     TPtr valuePtr(value->Des());
     MPXDbCommonUtil::FindAndReplaceSingleQuote(aValue, valuePtr);
@@ -736,12 +748,16 @@
 
     // replace single quotes
     // reserve double the value length for single quote duplicates
+    // coverity[incorrect_multiplication]
+    // coverity[buffer_alloc]
     HBufC* value1 = HBufC::NewLC(aValue1.Length() * 2);
     TPtr value1Ptr(value1->Des());
     MPXDbCommonUtil::FindAndReplaceSingleQuote(aValue1, value1Ptr);
 
     // replace single quotes
     // reserve double the value length for single quote duplicates
+    // coverity[incorrect_multiplication]
+    // coverity[buffer_alloc]
     HBufC* value3 = HBufC::NewLC(aValue3.Length() * 2);
     TPtr value3Ptr(value3->Des());
     MPXDbCommonUtil::FindAndReplaceSingleQuote(aValue3, value3Ptr);
--- a/mpserviceplugins/mpxsqlitedbhgplugin/inc/mpxcollectiondbdef.h	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpserviceplugins/mpxsqlitedbhgplugin/inc/mpxcollectiondbdef.h	Fri Aug 06 16:51:36 2010 -0500
@@ -28,11 +28,11 @@
 
 // Db filename
 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
-_LIT(KMCDbFile, "mpxv3_0.db");
-_LIT(KMCDbFileEMMC, "mpxv3_0i.db");
-#else 
-_LIT(KMCDbFile, "mpxv3_0n.db");
-_LIT(KMCDbFileEMMC, "mpxv3_0in.db");
+_LIT(KMCDbFile, "mpxv3_1.db");
+_LIT(KMCDbFileEMMC, "mpxv3_1i.db");
+#else
+_LIT(KMCDbFile, "mpxv3_1n.db");
+_LIT(KMCDbFileEMMC, "mpxv3_1in.db");
 #endif // ABSTRACTAUDIOALBUM_INCLUDED
 // Collection Db resource file
 _LIT(KMPXCollectionDbResourceFile,  "mpxcollectiondbhgres.rsc");
--- a/mpserviceplugins/mpxsqlitedbhgplugin/inc/mpxdbpluginqueries.h	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpserviceplugins/mpxsqlitedbhgplugin/inc/mpxdbpluginqueries.h	Fri Aug 06 16:51:36 2010 -0500
@@ -144,6 +144,13 @@
 _LIT(KQueryMusicGetMostPlayed, "SELECT Music.*,Artist.Name,Album.Name,Genre.Name,Composer.Name FROM :dbname.Music,:dbname.Artist,:dbname.Album,:dbname.Genre,:dbname.Composer WHERE Music.Deleted=0 AND Music.PlayCount<>0 AND Music.Album=Album.UniqueId AND Music.Artist=Artist.UniqueId AND Music.Genre=Genre.UniqueId AND Music.Composer=Composer.UniqueId ORDER BY PlayCount DESC, TimePlayed DESC LIMIT %u");
 _LIT(KQueryMusicGetRecentlyAdded, "SELECT Music.*,Artist.Name,Album.Name,Genre.Name,Composer.Name FROM :dbname.Music,:dbname.Artist,:dbname.Album,:dbname.Genre,:dbname.Composer WHERE Music.Deleted=0 AND (julianday(Music.TimeAdded)>julianday('now','-7 days')) AND Music.Album=Album.UniqueId AND Music.Artist=Artist.UniqueId AND Music.Genre=Genre.UniqueId AND Music.Composer=Composer.UniqueId ORDER BY Music.TimeAdded DESC");
 */
+
+#ifdef ABSTRACTAUDIOALBUM_INCLUDED
+_LIT(KQueryMusicGetAllSongsMinimum, "SELECT Music.UniqueId,Music.DbFlag,Music.VolumeId,Music.Title,0,Music.Art,Music.Deleted,Music.Location,0,0,'','',0,0,0,0,0,0,0,0,'','','',0,0,0,0,0,0,'',0,'',0,0,Artist.Name FROM :dbname.Music,:dbname.Artist WHERE Deleted=0 AND Music.Artist=Artist.UniqueId ORDER BY MUSIC.Title");
+#else
+_LIT(KQueryMusicGetAllSongsMinimum, "SELECT Music.UniqueId,Music.DbFlag,Music.VolumeId,Music.Title,0,Music.Art,Music.Deleted,Music.Location,0,0,'','',0,0,0,0,0,0,0,0,'','','',0,0,0,0,0,0,'',0,Artist.Name FROM :dbname.Music,:dbname.Artist WHERE Deleted=0 AND Music.Artist=Artist.UniqueId ORDER BY MUSIC.Title");
+#endif
+
 _LIT(KQueryMusicGetAllSongs, "SELECT Music.*,Artist.Name,Album.Name,Genre.Name,Composer.Name FROM :dbname.Music,:dbname.Artist,:dbname.Album,:dbname.Genre,:dbname.Composer WHERE Music.Deleted=0 AND Music.Album=Album.UniqueId AND Music.Artist=Artist.UniqueId AND Music.Genre=Genre.UniqueId AND Music.Composer=Composer.UniqueId ORDER BY 4");
 _LIT(KQueryMusicGetSongsForArtist, "SELECT Music.*,Artist.Name,Album.Name,Genre.Name,Composer.Name FROM :dbname.Music,:dbname.Artist,:dbname.Album,:dbname.Genre,:dbname.Composer WHERE Music.Deleted=0 AND Music.Artist=%u AND Music.Album=Album.UniqueId AND Music.Artist=Artist.UniqueId AND Music.Genre=Genre.UniqueId AND Music.Composer=Composer.UniqueId ORDER BY 4");
 _LIT(KQueryMusicGetSongsForAlbum, "SELECT Music.*,Artist.Name,Album.Name,Genre.Name,Composer.Name FROM :dbname.Music,:dbname.Artist,:dbname.Album,:dbname.Genre,:dbname.Composer WHERE Music.Deleted=0 AND Music.Album=%u AND Music.Album=Album.UniqueId AND Music.Artist=Artist.UniqueId AND Music.Genre=Genre.UniqueId AND Music.Composer=Composer.UniqueId ORDER BY 9, 4");
@@ -270,9 +277,9 @@
 _LIT(KAuxiliaryDropTable,"DROP TABLE Auxiliary");
 _LIT(KAuxiliaryCheckTable, "SELECT Id,Version,TimeRefreshed,TimeSynced,Corrupt,SaveDeletedRecordCount FROM AUXILIARY");
 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
-_LIT(KQueryAuxiliaryInsert, "INSERT INTO Auxiliary(Id,Version,Corrupt) VALUES(0,'6.6.0',%u)");
+_LIT(KQueryAuxiliaryInsert, "INSERT INTO Auxiliary(Id,Version,Corrupt) VALUES(0,'6.7.0',%u)");
 #else
-_LIT(KQueryAuxiliaryInsert, "INSERT INTO Auxiliary(Id,Version,Corrupt) VALUES(0,'6.6.1',%u)");
+_LIT(KQueryAuxiliaryInsert, "INSERT INTO Auxiliary(Id,Version,Corrupt) VALUES(0,'6.7.1',%u)");
 #endif // ABSTRACTAUDIOALBUM_INCLUDED
 _LIT(KQueryAuxiliarySetTime, "UPDATE :dbname.Auxiliary SET TimeRefreshed='%S', Corrupt=0");
 _LIT(KQueryAuxiliaryGetTime, "SELECT TimeRefreshed FROM :dbname.Auxiliary");
--- a/mpserviceplugins/mpxsqlitedbhgplugin/src/mpxdbmusic.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpserviceplugins/mpxsqlitedbhgplugin/src/mpxdbmusic.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -712,7 +712,7 @@
     // Run query and add result media objects to the cache array.
     MPX_FUNC("CMPXDbMusic::ExecuteQueryAllSongsL");
 
-    RSqlStatement recordset(iDbManager.ExecuteSelectQueryL(KQueryMusicGetAllSongs));
+    RSqlStatement recordset(iDbManager.ExecuteSelectQueryL(KQueryMusicGetAllSongsMinimum));
     CleanupClosePushL(recordset);
 
     TInt err(KErrNone);
@@ -2436,6 +2436,7 @@
 
     // Do not create any other indexes than the one on UniqueId
     // as they only slow down the database overall
+    User::LeaveIfError(aDatabase.Exec(KMusicDeletedTitleIndex));
     }
 
 // ----------------------------------------------------------------------------
--- a/mpserviceplugins/mpxsqlitedbhgplugin/src/mpxdbplugin.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpserviceplugins/mpxsqlitedbhgplugin/src/mpxdbplugin.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -4078,14 +4078,6 @@
     TInt offset = aCmd.ValueTObjectL<TInt>( KMPXCollectionCommandIdIncOpenLOffset );
     TInt numItems = aCmd.ValueTObjectL<TInt>( KMPXCollectionCommandIdIncOpenLNumItems );
 
-    TReadDirection direction(EReadUnknown);
-/*  Ascending and Decending reads are currently not used. We optimized for offset reads.
-    if( aCmd.IsSupported(KMPXCollectionCommandIdIncOpenLAscDsc) &&
-        aCmd.IsSupported(KMPXCollectionCommandIdIncOpenLKeyItem) )
-        {
-        direction = aCmd.ValueTObjectL<TReadDirection>(KMPXCollectionCommandIdIncOpenLAscDsc);
-        }
-*/
     CMPXCollectionPath* path =  aCmd.ValueCObjectL<CMPXCollectionPath>(KMPXCollectionCommandIdIncOpenLPath);
     CleanupStack::PushL( path );
     MPX_DEBUG_PATH( *path );
@@ -4120,21 +4112,7 @@
                     // Array to read data from
                     CMPXMediaArray* array = CMPXMediaArray::NewL();
                     CleanupStack::PushL( array );
-
-                    // Do we have to use offset or can we use asc/dsc
-                    //
-                    if( direction == EReadUnknown )
-                        {
-                        iDbHandler->GetSongsAtOffsetL( array, attrs.Array(), offset, numItems );
-                        }
-                    else
-                        {
-                        iDbHandler->GetSongsInBlockL( array, attrs.Array(),
-                                                      aCmd.ValueText( KMPXCollectionCommandIdIncOpenLKeyItem ),
-                                                      numItems,
-                                                      direction );
-                        }
-
+                    iDbHandler->GetSongsAtOffsetL( array, attrs.Array(), offset, numItems );
                     TInt max( path->Count() );
                     TInt count(0);
                     TInt aryCount( array->Count() );
--- a/mpviewplugins/mpcollectionviewplugin/mpcollectionviewplugin.pro	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpcollectionviewplugin/mpcollectionviewplugin.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -71,3 +71,4 @@
        
 RESOURCES += resources/mpcollectionviewresources.qrc
 
+DOCML += resources/musiccollection.docml
\ No newline at end of file
--- a/mpviewplugins/mpcollectionviewplugin/resources/mpcollectionviewresources.qrc	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpcollectionviewplugin/resources/mpcollectionviewresources.qrc	Fri Aug 06 16:51:36 2010 -0500
@@ -1,7 +1,7 @@
 <RCC>
     
     <qresource prefix="/docml" >
-        <file alias="musiccollection.docml">musiccollection.docml</file>
+        <file alias="musiccollection.docml">musiccollection.docml.bin</file>
     </qresource>
     
     <qresource prefix="/icons" >      
--- a/mpviewplugins/mpcollectionviewplugin/src/mpcollectioncontainerallsongs.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpcollectionviewplugin/src/mpcollectioncontainerallsongs.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -71,7 +71,7 @@
     MpCollectionListContainer::dataReloaded();
     if ( mViewMode != MpCommon::FetchView ) {
         int count = mCollectionData->count();
-        QString details = hbTrId("txt_mus_subhead_ln_songs", count);
+        QString details = hbTrId("txt_mus_subhead_songs_l1").arg( count );
         mInfoBar->setHeading(details);
     }
     if ( mCollectionData->count() > 1 ) {
@@ -113,7 +113,7 @@
         }
         else {
             int count = mCollectionData->count();
-            details = hbTrId("txt_mus_subhead_ln_songs", count);
+            details = hbTrId("txt_mus_subhead_songs_l1").arg( count );
         }
         mInfoBar->setHeading(details);
     }
--- a/mpviewplugins/mpcollectionviewplugin/tsrc/unittest_mpcollectioncontainers/src/unittest_mpcollectioncontainers.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpcollectionviewplugin/tsrc/unittest_mpcollectioncontainers/src/unittest_mpcollectioncontainers.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -245,7 +245,7 @@
     QVERIFY(allSongs->mIndexFeedback->itemView() == allSongs->mList);
 
     // Normal mode. Should see count.
-    QCOMPARE(allSongs->mInfoBar->heading(), hbTrId("txt_mus_subhead_ln_songs", 5));
+    QCOMPARE(allSongs->mInfoBar->heading(), hbTrId("txt_mus_subhead_songs_l1").arg( 5 ) );
 }
 
 /*!
@@ -802,7 +802,7 @@
     mCollectionData->mCurrentAlbumAvailable = false;
     artists->mAlbumIndexOffset = 0;
     artists->mCurrentAlbumIndex = 0;
-    artists->albumCentered();
+    artists->albumCentered( QModelIndex() );
     QCOMPARE(artists->mCurrentAlbumIndex, -1);
     QCOMPARE(spy.count(), 1);
     QCOMPARE(qvariant_cast<int>(spy.at(0).at(0)), -1);
@@ -810,14 +810,14 @@
     mCollectionData->mCurrentAlbumAvailable = true;
     artists->mAlbumIndexOffset = 0;
     artists->mCurrentAlbumIndex = 0;
-    artists->albumCentered();
+    artists->albumCentered( QModelIndex() );
     QCOMPARE(artists->mCurrentAlbumIndex, -1);
     QCOMPARE(spy.count(), 1);
 
     // Re-centered on same item
     artists->mAlbumIndexOffset = 1;
     artists->mCurrentAlbumIndex = 0;
-    artists->albumCentered();
+    artists->albumCentered( QModelIndex() );
     QCOMPARE(spy.count(), 1);
 }
 
@@ -833,20 +833,20 @@
 
     mCollectionData->mCurrentAlbumAvailable = false;
     albums->mCurrentAlbumIndex = 0;
-    albums->albumCentered();
+    albums->albumCentered( QModelIndex() );
     QCOMPARE(albums->mCurrentAlbumIndex, -1);
     QCOMPARE(spy.count(), 1);
     QCOMPARE(qvariant_cast<int>(spy.at(0).at(0)), -1);
 
     mCollectionData->mCurrentAlbumAvailable = true;
     albums->mCurrentAlbumIndex = 0;
-    albums->albumCentered();
+    albums->albumCentered( QModelIndex() );
     QCOMPARE(albums->mCurrentAlbumIndex, -1);
     QCOMPARE(spy.count(), 1);
 
     // Re-centered on same item
     albums->mCurrentAlbumIndex = -1;
-    albums->albumCentered();
+    albums->albumCentered( QModelIndex() );
     QCOMPARE(spy.count(), 1);
 }
 
--- a/mpviewplugins/mpcollectionviewplugin/tsrc/unittest_mpcollectioncontainers/stub/inc/hgmediawall.h	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpcollectionviewplugin/tsrc/unittest_mpcollectioncontainers/stub/inc/hgmediawall.h	Fri Aug 06 16:51:36 2010 -0500
@@ -43,7 +43,9 @@
     virtual void setModel(QAbstractItemModel *model);
     void scrollTo(const QModelIndex &index);
     QModelIndex currentIndex() const;
-
+    QSizeF itemSize() const;
+    void setDefaultImage(QImage defaultImage);
+    
 signals:
 
     void scrollingEnded();
--- a/mpviewplugins/mpcollectionviewplugin/tsrc/unittest_mpcollectioncontainers/stub/inc/mpmpxcollectiondata.h	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpcollectionviewplugin/tsrc/unittest_mpcollectioncontainers/stub/inc/mpmpxcollectiondata.h	Fri Aug 06 16:51:36 2010 -0500
@@ -51,6 +51,7 @@
     QString itemData( int index, MpMpxCollectionData::DataType type ) const;
 
     bool setCurrentAlbum( int index );
+    int albumSongsCount() const;
 
     const CMPXMedia& containerMedia();
 
@@ -60,6 +61,7 @@
     bool                    mMediaSet;
     TCollectionContext      mContext;
     int                     mCount;
+    int                     mAlbumSongsCount;
     int                     mCurrentAlbumIndex;
     bool                    mCurrentAlbumAvailable;
     bool                    mReturnCollectionTitle;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpcollectionviewplugin/tsrc/unittest_mpcollectioncontainers/stub/inc/mpnowplayingwidget.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,33 @@
+/*
+* 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: MpNowPlayingWidget stub for testing mpcollectioncontainers
+*
+*/
+
+#ifndef MPNOWPLAYINGWIDGET_H
+#define MPNOWPLAYINGWIDGET_H
+
+//includes
+#include <QObject>
+
+class MpNowPlayingWidget : public QObject
+{
+    Q_OBJECT
+
+public:
+    explicit MpNowPlayingWidget();
+    virtual ~MpNowPlayingWidget();
+};
+
+#endif    // MPNOWPLAYINGWIDGET_H
--- a/mpviewplugins/mpcollectionviewplugin/tsrc/unittest_mpcollectioncontainers/stub/src/hgmediawall.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpcollectionviewplugin/tsrc/unittest_mpcollectioncontainers/stub/src/hgmediawall.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -65,6 +65,22 @@
     return QModelIndex();
 }
 
+/*!
+ Stub function
+ */
+QSizeF HgWidget::itemSize() const
+{
+    return QSizeF();
+}
+
+/*!
+ Stub function
+ */
+void HgWidget::setDefaultImage(QImage defaultImage)
+{
+    Q_UNUSED(defaultImage);
+}
+
 
 //===========================================================================
 //===========================================================================
--- a/mpviewplugins/mpcollectionviewplugin/tsrc/unittest_mpcollectioncontainers/stub/src/mpmpxcollectiondata.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpcollectionviewplugin/tsrc/unittest_mpcollectioncontainers/stub/src/mpmpxcollectiondata.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -29,9 +29,11 @@
       mMediaSet(false),
       mContext(ECollectionContextUnknown),
       mCount(0),
+      mAlbumSongsCount(0),
       mCurrentAlbumIndex(-1),
       mCurrentAlbumAvailable(false),
       mReturnCollectionTitle(true)
+
 {
 }
 
@@ -102,3 +104,11 @@
     return *mContainerMedia;
 }
 
+/*!
+ Stub function.
+*/
+int MpMpxCollectionData::albumSongsCount() const
+{
+    return 0;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpcollectionviewplugin/tsrc/unittest_mpcollectioncontainers/stub/src/mpnowplayingwidget.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,33 @@
+/*
+* 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: MpNowPlayingWidget stub for testing collecitoncontainers
+*
+*/
+
+#include "mpnowplayingwidget.h"
+
+
+/*!
+ Constructs the now playing widget stub
+ */
+MpNowPlayingWidget::MpNowPlayingWidget( )
+{
+}
+
+/*!
+ Destructs the now playing widget stub.
+ */
+MpNowPlayingWidget::~MpNowPlayingWidget()
+{
+}
--- a/mpviewplugins/mpcollectionviewplugin/tsrc/unittest_mpcollectioncontainers/unittest_mpcollectioncontainers.pro	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpcollectionviewplugin/tsrc/unittest_mpcollectioncontainers/unittest_mpcollectioncontainers.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -43,7 +43,8 @@
            stub/inc/mpcollectiontbonelistdatamodel.h \
            stub/inc/mpmpxcollectiondata.h \
            stub/inc/mpcollectionview.h \
-           stub/inc/hgmediawall.h
+    	   stub/inc/hgmediawall.h \
+	   stub/inc/mpnowplayingwidget.h
 
 SOURCES += src/unittest_mpcollectioncontainers.cpp \
            ../../src/mpcollectioncontainerfactory.cpp \
@@ -58,7 +59,8 @@
            stub/src/mpcollectiontbonelistdatamodel.cpp \
            stub/src/mpmpxcollectiondata.cpp \
            stub/src/mpcollectionview.cpp \
-           stub/src/hgmediawall.cpp
+	   stub/src/hgmediawall.cpp \
+	   stub/src/mpnowplayingwidget.cpp 
 
 RESOURCES += ../../resources/mpcollectionviewresources.qrc
 
--- a/mpviewplugins/mpdetailsviewplugin/inc/mpdetailssharedialog.h	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +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: Header file for share player.
-*
-*/
-
-#ifdef SHARE_FUNC_ENABLED
-#ifndef MPDETAILSSHAREDIALOG_H
-#define MPDETAILSSHAREDIALOG_H
-
-#include <HbDialog>
-#include <QList>
-#include <QSslError>
-#include "mpsharedata.h"
-
-class QGraphicsWebView;
-class QNetworkAccessManager;
-class QNetworkReply;
-class MpShareWebView;
-class MpSongData;
-class HbProgressDialog;
-
-/*!
-    Implements Share Player dialog for music player details view.
-    First, construct an instance of the class, then call initialize method.
-*/
-class MpDetailsShareDialog : public HbDialog
-{
-    Q_OBJECT
-
-public:
-    MpDetailsShareDialog();
-
-    /*!
-      Initializes an instance of the class with given MpSongData.
-      Translation for "unknown" string is passed so that the share
-      dialog can display "unknown" if artist or title are not set.
-      MpSongData object ownership is not transferred,
-      Music Player Engine retains the ownership.
-    */
-    void initialize( MpSongData* aSongData, const QString& aUnknownTr );
-    virtual ~MpDetailsShareDialog();
-    void cachePublishingPlayerFiles();
-    void logoutPlayer();
-    bool isInitialized() const;
-
-public slots:
-    void addContext();
-    void updateSharedData();
-    void onIndexLoad( bool ok );
-    void debugJs( QString s );
-    void errorHandler( QString aError, QString aMessage );
-    void clearCache();
-    void showWindow();
-    void showProgressDialog();
-    void handleRequestSSLErrors( QNetworkReply* aReply, const QList< QSslError >& aErrors );
-    void handleRequestFinished( QNetworkReply* aReply );
-
-signals:
-    void closeShareDialog();
-
-private:
-    void initShareData( MpSongData* aSongData, const QString& aUnknownTr );
-    void initLanguage();
-    void initNetworkAccessManager();
-    void initWebView();
-    void initSignalSlots();
-    bool initUser();
-
-private:
-    MpShareData            mShareData;
-    MpShareWebView*        mShareWebView;   // Owned by HbDialog
-    QNetworkAccessManager* mShareNetAccMan; // Owned
-    HbProgressDialog*      mProgressbar; // Owned
-    bool                   mIsInitialized;
-};
-
-#endif // MPDETAILSSHAREDIALOG_H
-#endif // SHARE_FUNC_ENABLED
--- a/mpviewplugins/mpdetailsviewplugin/inc/mpdetailsview.h	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/inc/mpdetailsview.h	Fri Aug 06 16:51:36 2010 -0500
@@ -36,6 +36,7 @@
 class HbPushButton;
 class HbDocumentLoader;
 class HbListWidget;
+class HbListWidgetItem;
 
 class QGraphicsLinearLayout;
 class HbProgressBar;
@@ -44,18 +45,11 @@
 class MpSongData;
 class MpQueryManager;
 
-#ifdef SHARE_FUNC_ENABLED
-#include <qnetworkconfigmanager.h>
-QTM_USE_NAMESPACE
-class MpDetailsShareDialog;
-#endif
-
 //class declaration
 /*!
   Details view is the "flipside view" of Music Player.
   In addition to displaying song details, details view
-  also provides user the possibility to comment a
-  track (by initiating sharedialog), and to get
+  also provides user the possibility to get
   recommendations based on his playlist (by displaying
   a list of favourites, fetched from OVI music server).
 
@@ -83,33 +77,26 @@
     void albumArtChanged();
     
 private slots:
+    void queryInspireMe(bool storeUpdated = true);
+    void queryLocalMusicStore();
     void handlePlaybackInfoChanged();
     void songDetailInfoChanged();
     
+    void handleListItemSelected( HbListWidgetItem  *item);
     void handleDetailsGroupBoxToggled( bool state );
     void handleInspireMeGroupBoxToggled( bool state );
-    void RenderInspireMeGroupBox();          
-    void handleNetworkError();    
-    void updateSharedData(const QString& url);
-
-#ifdef SHARE_FUNC_ENABLED
-    void share();
-    void closeShareDialog();
-#endif
+    void renderInspireMeMetadata();
+    void renderInspireMeAlbumArts();
+    void abortInspireMeProcess();    
 
 private:
-    bool canQueryRecommendations() const;
-    bool canQuerySharePlayerLink() const;   
+    void startInspireMe();
+    bool isMetadata() const;
     void setupMenu();
-    void clearInspireMe();    
-
-#ifdef SHARE_FUNC_ENABLED
-    void createShareDialog();
-    void preloadShareDialog();
-#endif
+    void saveGroupBoxStates();
 
 private:    
-    MpEngine                *mMpEngine;         // Own
+    MpEngine                *mMpEngine;         // Owned by the factory
     
     MpSongData              *mSongData;
     
@@ -122,7 +109,6 @@
     HbLabel                 *mAlbumArt; //owned
     HbGroupBox              *mSongDetailsGroupBox; //owned
     HbGroupBox              *mInspireMeGroupBox; //owned
-    HbPushButton            *mShareButton; //owned
     HbDocumentLoader        *mDocumentLoader;//owned
     HbListWidget            *mDetailList; // owned by mSongDetailsGroupBox
     HbListWidget            *mInspireList; // owned by mInspireMeGroupBox
@@ -133,13 +119,7 @@
 	
     bool                    mInspireMeQueryOngoing;
     bool                    mInspireMeQueryRendered;
-    bool                    mInspireMeOpen;
-    bool                    mSongDetailsGbOpen;
     
-#ifdef SHARE_FUNC_ENABLED
-    MpDetailsShareDialog*   mSharePopup;            // Own
-#endif
-
     Q_DISABLE_COPY(MpDetailsView)
 };
 
--- a/mpviewplugins/mpdetailsviewplugin/inc/mpquerymanager.h	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/inc/mpquerymanager.h	Fri Aug 06 16:51:36 2010 -0500
@@ -17,11 +17,11 @@
 #ifndef MPQUERYMANAGER_H_
 #define MPQUERYMANAGER_H_
 
-#include <QPixmap>
 #include <QPointer>
 #include <QNetworkReply>
 #include <QDomDocument>
 #include <QMap>
+#include <HbIcon>
 
 #include "mpviewbase.h"
 
@@ -45,66 +45,76 @@
     ~MpQueryManager();
     
 public:
-    void clearNetworkReplies();
+    void reset();
     void queryLocalMusicStore( QString mArtist,QString mAlbum,QString mTitle );
     void queryInspireMeItems( QString mArtist,QString mAlbum,QString mTitle );
-    void clearRecommendations();
+    void queryLocalMusicStore();
+    bool isLocalMusicStore() const;
     
-    QStringList recommendationSongs();
-    QStringList recommendationArtists();
-    QStringList recommendationAlbumArtsLink();
-    QMap<QString, QPixmap>  recommendationAlbumArtsMap(); 
-    void insertMapItem( const QString &uri, const QPixmap &pixmap );    
+    int recommendationsCount() const;
+    QString recommendedSong(int index) const;
+    QString recommendedArtist(int index) const;
+    HbIcon recommendedAlbumArt(int index) const;
 
 private slots:
     void retrieveInformationFinished( QNetworkReply* reply );
     void retrieveInformationNetworkError( QNetworkReply::NetworkError error );
     void retrieveInformationSslErrors( const QList<QSslError> &error );
-    void DownloadFinished( QNetworkReply* reply );    
+    void albumArtDownloaded( QNetworkReply* reply );    
     void setAlbumArtUri( const QString &albumArtUri, const QString &albumArtName );
-    void thumbnailReady( const QPixmap& pixmap, void *data, int id, int error );
+    void thumbnailReady( const QPixmap pixmap, void *data, int id, int error );
                   
 private:
+    void clearThumbnails();
+    void clearRecommendations();    
+    void clearNetworkReplies();    
+    void signalError();    
     void constructRequest( QString &uri );     
     // retrieve URI from Ovi music server
     void retrieveInformation( const QString &urlEncoded );
     
-    void composeAlbumCover( QPixmap albumart );
     QString keyValues( QStringList keys, QStringList values ) const;
     void handleParsedXML();
 
     bool writeImageToFile( const QByteArray &aImageData, const QString &aImageFileName );
     
 signals:
-    void networkError();  
-    void searchUrlRetrieved( const QString& url );
-    void recommendationAlbumArtsReady();
-
+    void inspireMeItemAlbumArtReady();
+    void localMusicStoreRetrieved(bool storeUpdated);
+    void localMusicStoreRetrievalError();
+    void inspireMeItemsRetrievalError();
+    void inspireMeItemsMetadataRetrieved();
+            
 private:    
    
-    QNetworkAccessManager   *mManager;
-    QNetworkAccessManager   *mDownloadManager;
+    QNetworkAccessManager   	*mManager;
+    QNetworkAccessManager   	*mAlbumArtDownloader;
     
-    int                     mDownloadedAlbumArts;
+    int                     	mDownloadedAlbumArts;
   
-    QList<QNetworkReply *>  mReplys;
+    QList<QNetworkReply *>  	mReplys;
+    QList<int>                  mThumbnailRequests;
     
-    QDomDocument            mDomDocument;
-    ThumbnailManager        *mThumbnailManager; //owned    
+    QDomDocument            	mDomDocument;
+    ThumbnailManager        	*mThumbnailManager; //owned    
     
-    QString                 mArtist;
-    QString                 mAlbum;
-    QString                 mTitle;
-    
-    QStringList          mRecommendationAlbumArtsName;
+    QString                 	mArtist;
+    QString                 	mAlbum;
+    QString                 	mTitle;
+    QString                 	mMusicStore;
+    QStringList          		mRecommendationAlbumArtsName;
     
-    QStringList          mRecommendationSongs;
-    QStringList          mRecommendationArtists;
-    QStringList          mRecommendationAlbumArtsLink;
-    QMap<QString, QPixmap>  mRecommendationAlbumArtsMap;
-    int                     mAlbumArtsReadyCount;
-    QPixmap                 mDefaultRecommendationAlbumArt;
+    QStringList          		mRecommendationSongs;
+    QStringList          		mRecommendationArtists;
+    QStringList          		mRecommendationAlbumArtsLink;
+    QMap<QString, HbIcon>  		mRecommendationAlbumArtsMap;
+    int                     	mAlbumArtsReadyCount;
+    HbIcon                 		mDefaultRecommendationAlbumArt;
        
+    enum RequestType { NoRequest, InspireMeItemsMetadataRequest, InspireMeItemsAlbumArtRequest, LocalStoreRequest };
+    RequestType         		mRequestType;
+    int                         mRecommendationCount;
  
 };
 #endif /* MPQUERYMANAGER_H_ */
+
--- a/mpviewplugins/mpdetailsviewplugin/inc/mpsharedata.h	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +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: meta data used by publish player.
-*
-*/
-
-#ifdef SHARE_FUNC_ENABLED
-
-#ifndef MPSHAREDATA_H
-#define MPSHAREDATA_H
-
-#include <QObject>
-#include <QString>
-#include <QPixmap>
-
-class MpSongData;
-class HbIcon;
-
-/*!
-  MpShareData represents the information that is
-  used for sharing purposes. This information includes
-  e.g. song information and user information.
-*/
-class MpShareData : public QObject
-{
-    Q_OBJECT
-
-public:
-    MpShareData();
-    virtual ~MpShareData();
-
-    void setOwner( QObject* aOwner );
-    void setSongData( MpSongData* aSongData );
-    void setErrorMessage( const QString& s );
-	void setLanguage( const QString& s );
-    void setUnknownTr( const QString& s );
-
-public slots:
-    QObject* owner() const;
-    MpSongData* songData() const;
-    QString errorMessage() const;
-    void setUsername( const QString& s );
-    QString username() const;
-    void setPassword( const QString& s );
-    QString password() const;
-    QString objectType() const;
-    QString objectContent() const;
-    int objectReservedLength() const;
-	QString language() const;
-    QString title() const;
-    QString artist() const;
-    QString albumArtBase64() const;
-
-private:
-    QObject*    mOwner;    // NOT owned.
-    MpSongData* mSongData; // NOT owned.
-    QString     mErrorMessage;
-    QString     mUsername;
-    QString     mPassword;
-	QString     mLanguage;
-    QString     mUnknownTr;
-};
-
-#endif // MPSHAREDATA_H
-#endif // SHARE_FUNC_ENABLED
--- a/mpviewplugins/mpdetailsviewplugin/mpdetailsviewplugin.pro	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/mpdetailsviewplugin.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -15,12 +15,12 @@
 #
 
 TEMPLATE = lib
-CONFIG += hb qt ecomplugin mobility SHARE_FUNC_ENABLED
+CONFIG += hb qt ecomplugin
 QT += webkit \
       network \
       xml
 TARGET = mpdetailsviewplugin
-MOBILITY += bearer systeminfo
+MOBILITY += systeminfo
 symbian: { 
     TARGET.UID3 = 0x2002D0AA
     TARGET.CAPABILITY = All -TCB
@@ -42,7 +42,8 @@
         -lthumbnailmanagerqt \
         -lmpsettingsmanager \
         -lmpengine \
-        -lmpdata
+        -lmpdata \
+        -lxqsysinfo
 
 # Input
 HEADERS += ../../inc/mpviewbase.h \
@@ -54,15 +55,6 @@
            src/mpdetailsview.cpp \
            src/mpquerymanager.cpp
 
-# Sharing functionality
-CONFIG(SHARE_FUNC_ENABLED) {
-    SOURCES += src/mpdetailssharedialog.cpp src/mpsharedata.cpp
-    HEADERS += inc/mpdetailssharedialog.h inc/mpsharedata.h
-    DEFINES += SHARE_FUNC_ENABLED
-    debug {
-        DEFINES += SHARE_PLAYER_RND
-    }
-}
-
 RESOURCES += resources/mpdetailsviewresources.qrc
 
+DOCML += resources/mpdetailsview.docml
\ No newline at end of file
--- a/mpviewplugins/mpdetailsviewplugin/resources/index.html	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-    <head>
-        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />        
-        <title>Publish</title>
-
-        <link type="text/css" rel="stylesheet" href="http://hf.ci.wipsl.com/PleiXXPTsup/noheva-be/css/ovi.player.share.ui.css" />
-		<link type="text/css" rel="stylesheet" href="musiccontext.css" />		<!-- CSS for music context area -->
-		
-		<!-- Player scripts -->
-        <script type="text/javascript" src="http://hf.ci.wipsl.com/PleiXXPTsup/noheva-be/js/publishplayer.js"></script>
-		
-		<!-- Local stuff to be implemented by user application to provide the contextual information -->
-		<script type="text/javascript" src="musiccontext.js"></script>
-		
-		<!-- Error recovery in case page player script loading fails -->
-		 <script type="text/javascript">
-		 var mybody = {
-				onLoad: function () {
-					if (window['music'] &&
-						window['ovi'] &&
-						ovi['player'] &&
-						ovi.player['publish'] ) {
-						music.initPlayer();
-						music.updateContextArea();
-					} else {
-						showErrorMessage();
-					}
-				},
-				onFocus: function () {
-					if (window['music']) {
-						music.updateContextArea();
-					}
-				}
-			}
-			function showErrorMessage() {
-				var errorUi = "<H1>" + window.context.errorMessage() + "</H1>";
-				errorUi += "<input type='button' value='Close' onClick='context.owner().closeShareDialog();'>";
-				document.getElementById("ovi.player.share.ui").innerHTML = errorUi;
-			}
-		</script>		
-
-    </head>
-	<!-- onfocus refreshes only the song when publishplayer is set active / deactive -->
-    <body onload="mybody.onLoad();" onfocus="mybody.onFocus();">
-		<div id="ovi.player.share.ui"></div>
-    </body>
-</html>
--- a/mpviewplugins/mpdetailsviewplugin/resources/mpdetailsview.docml	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/resources/mpdetailsview.docml	Fri Aug 06 16:51:36 2010 -0500
@@ -25,6 +25,7 @@
 	    </widget>
         <widget name="songDetails" type="HbGroupBox">
              <widget name="songDetailsListWidget" role="HbGroupBox:contentWidget" type="HbListWidget">
+                <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-secondary)"/>
                 <string name="verticalScrollBarPolicy" value="ScrollBarAlwaysOff"/>
              </widget>
              <bool name="collapsable" value="TRUE"/>
--- a/mpviewplugins/mpdetailsviewplugin/resources/mpdetailsviewresources.qrc	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/resources/mpdetailsviewresources.qrc	Fri Aug 06 16:51:36 2010 -0500
@@ -1,13 +1,5 @@
 <RCC>
     <qresource prefix="/mpdetailsviewdocml">
-        <file alias="mpdetailsview.docml">mpdetailsview.docml</file>
-    </qresource>
-    <qresource prefix="/mpdetailsviewicons">
-        <file alias="qtg_large_music_album.svg">qtg_large_music_album.svg</file>
-    </qresource>
-    <qresource prefix="/shareview">
-        <file alias="index.html">index.html</file>
-        <file alias="musiccontext.js">musiccontext.js</file>
-        <file alias="musiccontext.css">musiccontext.css</file>
+        <file alias="mpdetailsview.docml">mpdetailsview.docml.bin</file>
     </qresource>
 </RCC>
--- a/mpviewplugins/mpdetailsviewplugin/resources/musiccontext.css	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-/* Info */
-table.info-list {
-    padding-top:10px;
-}
-
-table.info-list td {
-    padding: 2px 0;	
-}
-
-.info-list .description .artist {
-    padding-top:10px;
-	color:#ccc;
-}
-
-.info-list .description .title {
-
-}
-
-.info-list .description {	
-	display:inline-block;
-    padding-left:20px;
-    vertical-align:top;
-}
--- a/mpviewplugins/mpdetailsviewplugin/resources/musiccontext.js	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,165 +0,0 @@
-//Logging for QT
-
-// Override the default alert function.
-// TODO remove this when alert in platform is working?
-alert = function(str) {
-    console.log(str);
-    window.context.owner().errorHandler("Alert", str);
-}
-
-function logme(str){
-    console.log(str);
-    if(window['context'] && context['owner']){
-        context.owner().debugJs('debugJs: ' + str);
-    }
-}
-
-function traceme(){
-    var cf = arguments.callee.caller;
-    logme('-------------- Start traceme ' + new Date().toLocaleTimeString() + ' --------------');
-    var arr = new Array();
-    while (cf) {
-      var fn = cf.toString();
-      fn = fn.substr(0,fn.indexOf('{'));
-      arr.push(fn);
-      cf = cf.caller;
-    }
-    //arr.reverse();
-    for(i=0;i<=arr.length -1;i++){
-        logme(arr[i]);
-    }
-    logme('-------------- End traceme --------------');
-}
-
-
-window["music"] = window["music"] ||
-{};
-
-(function(){
-	var musicContext = null;
-	var publishingPlayer = null;
-    
-    music.getPostContent = function(){
-        traceme();
-        return {
-            reservedLength : window.context.objectReservedLength(),
-			type : window.context.objectType(), 
-		    content : window.context.objectContent()
-        };
-    }
-    	
-	/**
-	 * Call this for player to show UI and initialize connection to SNC
-	 */
-	music.initPlayer = function() 
-	{	
-        traceme();
-	    // Initialize player    
-	    publishingPlayer = new ovi.player.publish.Player({
-	        locale : window.context.language(),
-	        credentials : {
-	            type : "",
-	            sso_base_url : "",
-	            token : _getNoa() 
-	        }
-	    });
-	    
-	    // Show UI 
-	    publishingPlayer.create(null, function(status, data){
-            traceme();
-			if (status != publishingPlayer.status.updateservices_ok && status != publishingPlayer.status.show_ok) {
-				// Delegate errors to native side
-                window.context.owner().errorHandler(status, data.message);
-			} 		
-		});	
-		
-	}
-	
-	/** 
-	 * Call this for player to update context area (the song UI).
-	 */
-	music.updateContextArea = function() {
-		// Update artist and title metadata.
-        traceme();
-	    publishingPlayer.setContextObject(_getMusicContext());
-	    if(window['context'] && context['owner']){
-        context.owner().showWindow();
-    }
-}
-	
-	/**
-	 * Call this function to update metadata (called when music player has retrieved the link) 
-	 */
-	music.updateMetadata = function() {
-	    // Update url at bottom of comment field.
-        traceme();
-		musicContext.updateObject(music.getPostContent());
-	}
-	
-	/**
-	 * Call this function to release all resources from player.
-	 */
-	music.teardown = function() {
-        traceme();
-		publishingPlayer.cancel();
-	}
-	
-	// Private functions, read data from native side..
-	function _playerReady() {
-        traceme();
-        return typeof ovi != "undefined" &&
-            typeof ovi.player != "undefined" &&
-			typeof ovi.player.publish != "undefinded";
-	}
-	
-	
-	function _getMusicContext() {
-	    traceme();            
-	    musicContext = new ovi.player.contextobject.Player(); 
-        
-        var attachment = music.getPostContent();
-	
-        logme('music._getMusicContext() | attachment'); 	 
-
-        logme('music._getMusicContext() | musicContext.create');
-
-        var sharePlayerArtImage = "";
-        var sharePlayerArtBase64 = window.context.albumArtBase64();
-        if ( sharePlayerArtBase64.length > 0 ) {
-            // TODO: this is temporary solution until base64 defect in QT is fixed.
-            sharePlayerArtImage = "<td valign='top' width='74px'><img src='" + sharePlayerArtBase64 + "' width='74px' height='74px' /></td>";
-//            sharePlayerArtImage = "<img class='cover' src='data:image/png;base64," + sharePlayerArtBase64 + "' width='74px' height='74px' />";
-        }
-        // Create context object
-	    musicContext.create({
-	        view: "none",
-	        data: { 
-	            miniview: "<table width='100%' class='list info-list'><tr>"
-				/*
-						// TODO REMOVE, for testing only
-						+ "<input type=\"button\" value=\"Clear JS Cache\" onClick=\"window.context.owner().clearCache();\">"
-                */
-                        + sharePlayerArtImage
-						+ "<td align='left' valign='top'>"
-						+ "<span class='description'>"
-						+ "<div class='title'>" + window.context.title() + "</div>"
-						+ "<div class='artist'>" + window.context.artist() + "</div>"
-						+ "</span>"
-					    + "</td></tr></table>",
-	            object: attachment 
-	        }
-	    });
-        return musicContext;
-	}
-	                        
-	function _getNoa() {
-        traceme();
-	    // temporary solution until SSO token get from QT SSO DE (now we fetch username, password and re-authenticate using api.ovi.com)
-	    var token = (window.context.username)? [window.context.username(),window.context.password()] : window.context.token.split(":");
-        logme(token[0] + "/" + token[1]);
-	    return {
-            username: token[0],
-	        password: token[1]
-	    }           
-	}	
-})();
--- a/mpviewplugins/mpdetailsviewplugin/resources/ovicredentials.txt	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-hipsu:hipsupass
--- a/mpviewplugins/mpdetailsviewplugin/resources/qtg_large_music_album.svg	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,101 +0,0 @@
-<?xml version="1.0" ?>
-<!DOCTYPE svg  PUBLIC '-//W3C//DTD SVG 1.1//EN'  'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
-<svg height="60" viewBox="0 0 60 60" width="60" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g>
-<rect fill="none" height="60" width="60"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_1" x1="29.87" x2="30.09" y1="8.18" y2="51.03">
-
-<stop offset="0" stop-color="#D1D7D9"/>
-
-<stop offset="0.69" stop-color="#808A8C"/>
-
-<stop offset="1" stop-color="#A4ACAE"/>
-
-</linearGradient>
-<path d="M29.89,7.958c-11.83,0.062-21.38,9.702-21.32,21.54,0.061,11.83,9.704,21.38,21.54,21.32,11.83-0.06,21.38-9.702,21.32-21.54-0.07-11.84-9.71-21.38-21.54-21.32zm0.13,26.94c-3.043,0.016-5.522-2.438-5.538-5.481-0.014-3.043,2.438-5.522,5.481-5.539,3.042-0.016,5.523,2.439,5.539,5.482s-2.43,5.52-5.48,5.54z" fill="url(#SVGID_1)"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_2" x1="29.93" x2="30.02" y1="20.37" y2="38.59">
-
-<stop offset="0" stop-color="#FFFFFF"/>
-
-<stop offset="1" stop-color="#CFCFCF"/>
-
-</linearGradient>
-<path d="M29.95,20.2c-5.072,0.026-9.163,4.158-9.136,9.23,0.026,5.071,4.157,9.161,9.229,9.135,5.072-0.024,9.162-4.157,9.136-9.229-0.03-5.06-4.16-9.15-9.23-9.13zm0.07,14.08c-2.705,0.014-4.909-2.168-4.923-4.872-0.013-2.705,2.168-4.909,4.873-4.923,2.705-0.012,4.91,2.169,4.923,4.874,0.02,2.7-2.16,4.91-4.87,4.92z" fill="url(#SVGID_2)"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_3" x1="50.84" x2="9.32" y1="39.88" y2="40.09">
-
-<stop offset="0" stop-color="#A0A7A9"/>
-
-<stop offset="0.5" stop-color="#FFFFFF"/>
-
-<stop offset="1" stop-color="#A0A7A9"/>
-
-</linearGradient>
-<path d="M30.1,49.7c-11.32,0.06-20.56-8.95-20.85-20.21-0.002,0.147-0.01,0.295-0.008,0.446,0.059,11.46,9.4,20.71,20.87,20.66,11.47-0.06,20.72-9.401,20.66-20.87-0.002-0.149-0.01-0.297-0.014-0.445-0.19,11.26-9.34,20.37-20.66,20.42z" fill="url(#SVGID_3)" fill-opacity="0.3" stroke-opacity="0.3"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_4" x1="25.09" x2="34.89" y1="31.65" y2="31.6">
-
-<stop offset="0" stop-color="#848C8E"/>
-
-<stop offset="0.5" stop-color="#FFFFFF"/>
-
-<stop offset="1" stop-color="#848C8E"/>
-
-</linearGradient>
-<path d="M30.02,34.28c2.705-0.013,4.885-2.217,4.873-4.922-0.001-0.155-0.011-0.309-0.026-0.459-0.217,2.49-2.301,4.603-4.85,4.615-2.55,0.013-4.654-2.078-4.897-4.565-0.013,0.151-0.022,0.305-0.021,0.459,0.02,2.69,2.23,4.88,4.93,4.86z" fill="url(#SVGID_4)"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_5" x1="30" x2="30" y1="8.88" y2="50.2">
-
-<stop offset="0" stop-color="#36B5FF"/>
-
-<stop offset="1" stop-color="#1B66D8"/>
-
-</linearGradient>
-<path d="M29.89,8.571c-11.49,0.058-20.77,9.429-20.71,20.92,0.06,11.5,9.427,20.76,20.92,20.71,11.5-0.059,20.77-9.424,20.71-20.92s-9.42-20.77-20.92-20.71zm0.15,29.65c-4.877,0.025-8.851-3.908-8.875-8.785h-0.002c-0.025-4.877,3.909-8.85,8.787-8.875s8.85,3.908,8.875,8.785h0.003c0.03,4.88-3.9,8.85-8.78,8.88z" fill="url(#SVGID_5)"/>
-<path d="M10.22,33.47c-2.163-10.42,4.19-20.78,14.45-23.58,1.672-0.457,3.401-0.693,5.133-0.701,8.607-0.044,16.55,5.571,19.31,13.65l0.21,0.617-10.39,2.838-0.205-0.502c-1.441-3.524-4.975-5.879-8.794-5.859-0.819,0.004-1.639,0.116-2.434,0.333-4.6,1.258-7.546,5.759-6.855,10.47l0.079,0.535-10.38,2.841-0.12-0.65z" fill="#FFFFFF" fill-opacity="0.2" stroke-opacity="0.2"/>
-<rect fill="none" height="60" width="60"/>
-</g>
-<g transform="matrix(1 0 0 1 30 30)">
-<rect fill="none" height="30" width="30"/>
-<linearGradient gradientTransform="matrix(0.5 0 0 -0.5 -313.5 -276)" gradientUnits="userSpaceOnUse" id="SVGID_1_" x1="655.1" x2="655.1" y1="-564.3" y2="-603.3">
-
-<stop offset="0" stop-color="#8CFF24"/>
-
-<stop offset="1" stop-color="#15570B"/>
-
-</linearGradient>
-<path d="M24.32,6.54l-1.54-3.749-8.86,3.939,0.014,11.96c-1.356-0.886-3.354-1.177-5.384-0.627-3.203,0.862-5.271,3.476-4.624,5.833,0.65,2.358,3.771,3.57,6.972,2.707,2.706-0.73,4.58-2.662,4.569-4.726-0.009-2.064,0.016-7.669,0-11.72l8.86-3.61z" fill="url(#SVGID_1_)"/>
-<linearGradient gradientTransform="matrix(0.5 0 0 -0.5 -313.5 -276)" gradientUnits="userSpaceOnUse" id="SVGID_2_" x1="654.9" x2="654.9" y1="-561" y2="-570.8">
-
-<stop offset="0" stop-color="#36B5FF"/>
-
-<stop offset="1" stop-color="#1B66D8"/>
-
-</linearGradient>
-<polygon fill="url(#SVGID_2_)" points="13.94,16.63,13.93,6.73,13.92,6.73,13.94,16.63"/>
-<linearGradient gradientTransform="matrix(0.5 0 0 -0.5 -313.5 -276)" gradientUnits="userSpaceOnUse" id="SVGID_3_" x1="666.8" x2="666.8" y1="-561" y2="-570.7">
-
-<stop offset="0" stop-color="#9EFF47"/>
-
-<stop offset="1" stop-color="#11470A"/>
-
-</linearGradient>
-<path d="M15.47,9.54c0.003,0.653,0.005-0.101,0.006,0.611l8.837-3.612-0.218-0.554-8.63,3.556z" fill="url(#SVGID_3_)"/>
-<linearGradient gradientTransform="matrix(0.5 0 0 -0.5 -313.5 -276)" gradientUnits="userSpaceOnUse" id="SVGID_4_" x1="663.6" x2="663.7" y1="-564.2" y2="-588.5">
-
-<stop offset="0" stop-color="#B3FF6E"/>
-
-<stop offset="1" stop-color="#11470A"/>
-
-</linearGradient>
-<polygon fill="url(#SVGID_4_)" points="14.07,19.03,14.07,7.071,22.94,3.207,22.78,2.791,13.73,6.73,13.73,18.69"/>
-<linearGradient gradientTransform="matrix(0.5 0 0 -0.5 -313.5 -276)" gradientUnits="userSpaceOnUse" id="SVGID_5_" x1="646.3" x2="646.3" y1="-589.9" y2="-604.1">
-
-<stop offset="0" stop-color="#B2F56E"/>
-
-<stop offset="0.47" stop-color="#40AD00"/>
-
-<stop offset="1" stop-color="#074D00"/>
-
-</linearGradient>
-<path d="M8.813,26.19c-2.129,0.011-3.827-0.97-4.224-2.442-0.242-0.893,0.014-1.881,0.722-2.777,0.775-0.982,1.972-1.727,3.374-2.096,0.593-0.158,1.193-0.238,1.787-0.242,2.129-0.01,3.825,0.972,4.225,2.443,0.529,1.949-1.309,4.135-4.098,4.873-0.59,0.17-1.196,0.25-1.787,0.25z" fill="url(#SVGID_5_)"/>
-<rect fill="none" height="30" width="30"/>
-</g>
-</svg>
\ No newline at end of file
--- a/mpviewplugins/mpdetailsviewplugin/src/mpdetailssharedialog.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,569 +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: Implementation for share player.
-*
-*/
-
-#ifdef SHARE_FUNC_ENABLED
-
-#include "mpdetailssharedialog.h"
-#include "mpsharedata.h"
-#include "mpsongdata.h"
-#include "mptrace.h"
-#include <QObject>
-#include <QGraphicsWebView>
-#include <QGraphicsScene>
-#include <QWebPage>
-#include <QWebFrame>
-#include <QNetworkAccessManager>
-#include <QNetworkDiskCache>
-#include <QNetworkReply>
-#include <QDesktopServices>
-#include <QNetworkProxyFactory>
-#include <QTimer>
-#include <hbmessagebox.h>
-#include <QFile>
-#include <QTextStream>
-#include <qsysteminfo.h>
-#include <hbmainwindow.h>
-#include <hbstyleloader.h>
-#include <hbprogressdialog.h>
-
-QTM_USE_NAMESPACE
-
-// SHARE_INDEX_FILE defines where the index.html file is loaded from.
-#define SHARE_INDEX_URL "qrc:///shareview/index.html"
-
-#ifdef Q_OS_SYMBIAN
-// Symbian target.
-#ifdef SHARE_PLAYER_RND
-// For R&D testing, index.html may be loaded from E: drive.
-// User must manually place index.html in the correct location.
-// If the RND file does not exist, then SHARE_INDEX_URL will be used.
-#define RND_SHARE_INDEX_URL "file:///f:/index.html"
-#define RND_SHARE_INDEX_FILE "f:\\index.html"
-#define RND_OVI_LOGIN_FILE "f:\\ovicredentials.txt"
-#endif
-#else
-// Assume Windows target.
-#define RND_SHARE_INDEX_URL "file:///c:/temp/index.html"
-#define RND_SHARE_INDEX_FILE "c:\\temp\\index.html"
-#define RND_OVI_LOGIN_FILE "c:\\temp\\ovicredentials.txt"
-
-#endif
-
-// Default language in case QSystemInfo does not work.
-#define DEFAULT_LANGUAGE "en-US"
-
-// Default error message.
-#define ERROR_MESSAGE "An error occured. Sharing is not currently available"
-
-
-/*!
- MpNetworkAccessManager allows local caching of publishing player files
- in order to minimize network traffic.
- The files will be cached to the private directory of the application,
- i.e. in the music player's case, this is C:\Private\10207C62\Cache.
- */
-class MpNetworkAccessManager : public QNetworkAccessManager
-{
-public:
-    MpNetworkAccessManager( QObject* parent = 0 )
-        : QNetworkAccessManager( parent )
-    {
-        proxyFactory()->setUseSystemConfiguration( true );
-        QNetworkDiskCache* diskCache = new QNetworkDiskCache( this );
-        QString location = QDesktopServices::storageLocation( QDesktopServices::CacheLocation );
-        diskCache->setCacheDirectory( location );
-        setCache( diskCache );
-    }
-
-private:
-    QNetworkReply* createRequest( Operation op,
-                                  const QNetworkRequest &request,
-                                  QIODevice* outgoingData = 0 )
-    {
-        TX_ENTRY
-        TX_LOG_ARGS( "share: createRequest URL=" << request.url().toString() )
-
-        QVariant val = request.attribute( QNetworkRequest::CacheLoadControlAttribute );
-
-         // Change the cache load control attrbute!
-        QNetworkRequest req = request;
-        req.setAttribute( QNetworkRequest::CacheLoadControlAttribute,
-                          QVariant( QNetworkRequest::PreferCache ) );
-        QNetworkReply* result = QNetworkAccessManager::createRequest( op, req, outgoingData );
-        TX_EXIT
-        return result;
-    }
-};
-
-/*!
- MpShareWebView derives from QGraphicsWebView in order to override it's
- contextMenuEvent method to prevent the background context menu from
- being displayed when user makes long click in the web view.
- */
-class MpShareWebView : public QGraphicsWebView
-{
-public:
-    MpShareWebView( QGraphicsItem * parent = 0 )
-        : QGraphicsWebView( parent )
-    {
-        settings()->setAttribute( QWebSettings::LocalContentCanAccessRemoteUrls, true );
-        settings()->setAttribute( QWebSettings::LocalStorageDatabaseEnabled, true );
-        settings()->enablePersistentStorage();
-    }
-
-protected:
-    void contextMenuEvent( QGraphicsSceneContextMenuEvent* /*ev*/ ) // Override QGraphicsWebView::contextMenuEvent
-    {
-        // Fix to prevent "Stop" and "Reload" buttons in page background.
-        // Do not respond to the contextMenuEvent.
-    }
-};
-
-
-/*!
- Constructor.
- */
-MpDetailsShareDialog::MpDetailsShareDialog()
-    : mShareWebView( 0 ),
-      mShareNetAccMan( 0 ),
-      mProgressbar ( 0 ),
-      mIsInitialized( false )
-{
-    // DeleteOnClose attribute prevents crash when user presses Cancel
-    // before publishing player is fully loaded.
-    setAttribute( Qt::WA_DeleteOnClose, true );
-}
-
-/*!
- Initialize the share dialog.
- When fully initialized we set our mIsInitialized flag to true.
- Our isInitialized() method can be called to determine whether
- initialization was successful.
- */
-void MpDetailsShareDialog::initialize( MpSongData* aSongData, const QString& aUnknownTr )
-{
-    TX_ENTRY
-    if ( !initUser() )
-    {
-        emit closeShareDialog();
-        return;
-    }
-    initShareData( aSongData, aUnknownTr );
-    initLanguage();
-    initNetworkAccessManager();
-    initWebView();
-    initSignalSlots();
-
-    setDismissPolicy( HbDialog::NoDismiss );
-
-    // No timeout needed for the dialog.
-    setTimeout( HbPopup::NoTimeout );
-
-#ifdef SHARE_PLAYER_RND
-    // Test whether the RND file exists.
-    QFile file( RND_SHARE_INDEX_FILE );
-    if ( file.exists() )
-    {
-        // Load the RND URL from the specified location to the web view.
-        TX_LOG_ARGS( "share: Use RND index.html file " << RND_SHARE_INDEX_FILE )
-        mShareWebView->load( QUrl( RND_SHARE_INDEX_URL ) );
-    }
-    else
-#endif
-    {
-        // Load the production URL from the application resources to the web view.
-        TX_LOG_ARGS( "share: Use QRC index.html file " << SHARE_INDEX_URL )
-        mShareWebView->load( QUrl( SHARE_INDEX_URL ) );
-    }
-
-    // Flag that the dialog is now fully initialized.
-    mIsInitialized = true;
-
-    // Show progress dialog in .3 second if loading not finished.
-    QTimer::singleShot(300, this, SLOT(showProgressDialog()));
-
-    TX_EXIT
-}
-
-/*!
- Destructor.
- */
-MpDetailsShareDialog::~MpDetailsShareDialog()
-{
-    TX_ENTRY
-    if ( mShareData.songData() )
-    {
-        // Ensure that we remove the temporary album art file when we close the dialog.
-        // TODO this should be removed when base64 issue is solved.
-        TX_LOG_ARGS( "share: remove album art file" )
-        mShareData.songData()->removeAlbumArtFile();
-    }
-    logoutPlayer();
-    // Probably mShareNetAccMan should not be deleted but qt documentation
-    // does not indicate whether QWebPage takes ownership of the object or not.
-    // See http://doc.qt.nokia.com/4.6/qwebpage.html
-    //delete mShareNetAccMan;
-    TX_EXIT
-}
-
-/*!
- Initialize share data.
- */
-void MpDetailsShareDialog::initShareData( MpSongData* aSongData, const QString& aUnknownTr )
-{
-    TX_ENTRY
-    // Set information for the share data.
-    mShareData.setOwner( this );
-    mShareData.setSongData( aSongData );
-    mShareData.setErrorMessage( tr( ERROR_MESSAGE ) );
-    mShareData.setUnknownTr( aUnknownTr );
-    TX_EXIT
-}
-
-/*!
- Initialize language.
- Language string is formatted like "en-US", where "en" is the ISO-639-1 language code,
- and "US" is the ISO-3166-1 country code.
- We use the QT Mobility API (systeminfo) to obtain the settings from the device.
- In the event that we cannot construct the QSystemInfo variable then we will fallback
- to some DEFAULT_LANGUAGE setting.
- */
-void MpDetailsShareDialog::initLanguage()
-{
-    TX_ENTRY
-    // Set language string, example "en-US".
-    QString language;
-    QSystemInfo* sysInfo = new QSystemInfo( this );
-    if ( sysInfo )
-    {
-        language += sysInfo->currentLanguage(); // ISO-639-1 language code.
-        language += "-";
-        language += sysInfo->currentCountryCode(); // ISO-3166-1 country code.
-        delete sysInfo;
-    }
-    else
-    {
-        // Fallback to the default language.
-        language = DEFAULT_LANGUAGE;
-    }
-    TX_LOG_ARGS( "share: language '" << language << "'" )
-    mShareData.setLanguage( language );
-    TX_EXIT
-}
-
-/*!
- Initialize network access manager.
- */
-void MpDetailsShareDialog::initNetworkAccessManager()
-{
-    TX_ENTRY
-    // Make our own network access manager to allow file retrieval from local cache,
-    // since configuration for the default network access manager seems to be
-    // to always redownload from network.
-    if ( !mShareNetAccMan )
-    {
-        TX_LOG_ARGS( "share: construct network access manager" )
-        mShareNetAccMan = new MpNetworkAccessManager( this );
-    }
-    TX_EXIT
-}
-
-/*!
- Initialize the web view.
- */
-void MpDetailsShareDialog::initWebView()
-{
-    TX_ENTRY
-    if ( !mShareWebView )
-    {
-        TX_LOG_ARGS( "share: construct share web view" )
-        mShareWebView = new MpShareWebView( this );
-        mShareWebView->page()->setNetworkAccessManager( mShareNetAccMan );
-        mShareWebView->page()->mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff);
-        mShareWebView->page()->mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAsNeeded);
-        setContentWidget( mShareWebView );
-        addContext();
-        mProgressbar = new HbProgressDialog(HbProgressDialog::WaitDialog);
-        mProgressbar->setText(tr("Loading"));
-    }
-    TX_EXIT
-}
-
-/*!
- Initialize signals and slots.
- */
-void MpDetailsShareDialog::initSignalSlots()
-{
-    TX_ENTRY
-    // Connect various signals to slots for networking.
-    connect( mShareNetAccMan, SIGNAL( sslErrors( QNetworkReply*, const QList< QSslError >& ) ),
-             this, SLOT( handleRequestSSLErrors( QNetworkReply*, const QList< QSslError >& ) ) );
-    connect( mShareNetAccMan, SIGNAL( finished( QNetworkReply* ) ), this, SLOT( handleRequestFinished( QNetworkReply* ) ) );
-
-    // Connect various signals to slots for interface to webview.
-    connect( mShareWebView, SIGNAL( loadFinished( bool ) ), SLOT( onIndexLoad( bool ) ) );
-    connect( mShareWebView->page()->mainFrame(), SIGNAL( javaScriptWindowObjectCleared() ), this, SLOT( addContext() ) );
-    connect( mShareWebView->page(), SIGNAL( windowCloseRequested() ), this, SIGNAL( closeShareDialog() ) );
-    connect( mProgressbar, SIGNAL(cancelled()), this, SIGNAL( closeShareDialog() ) );
-    TX_EXIT
-}
-
-/*!
- initUser is used as temporary solution until Single Sign On is implemented in platform.
- */
-bool MpDetailsShareDialog::initUser()
-{
-    TX_ENTRY
-    bool result = false;
-#ifdef SHARE_PLAYER_RND
-    // ovicredentials.txt is used as temporary solution until Single Sign On is implemented in platform.
-    QFile file( RND_OVI_LOGIN_FILE );
-    if ( !file.open( QFile::ReadOnly ) )
-    {
-        // There must be e:ovicredentials.txt in the filesystem but don't show error dialog
-        // otherwise it will appear as soon as detailsview is created.
-        result = false;
-    }
-    else
-    {
-        QTextStream stream ( &file );
-        QString strCred = stream.readLine( 0 );
-        file.close();
-        QStringList slCred = strCred.split( ":" );
-        if ( slCred.length() > 1 )
-        {
-            mShareData.setUsername( slCred[ 0 ] );
-            mShareData.setPassword( slCred[ 1 ] );
-            result = true;
-        }
-        else
-        {
-            errorHandler( "share", QString( RND_OVI_LOGIN_FILE ) + " username:password expected" );
-        }
-    }
-    TX_LOG_ARGS( "share: credentials " << mShareData.username() << " / " << mShareData.password() )
-#else
-    // TODO: Single Sign On stuff.
-#endif // SHARE_PLAYER_RND
-    TX_EXIT
-    return result;
-}
-
-/*!
- Returns true if the dialog has been fully initialized.
-  */
-bool MpDetailsShareDialog::isInitialized() const
-{
-    return mIsInitialized;
-}
-
-/*!
- Attempt to cache the publishing player files from internet
- to improve user experience for first-time use.
- If the files are already in the cache and have not expired,
- then this should not do anything.
- */
-void MpDetailsShareDialog::cachePublishingPlayerFiles()
-{
-    TX_ENTRY
-    // We need the network access manager, so make sure it is initialized.
-    if ( !mShareNetAccMan )
-    {
-        initNetworkAccessManager();
-    }
-    // Attempt to get the required publishing player files from the net in advance.
-    // We don't listen to any signal that the download succeeded or failed
-    // since we will let it silently fail at this stage.
-    // These URLs are also included in index.html resource, and the two must
-    // be kept the same.
-    mShareNetAccMan->get( QNetworkRequest( QUrl(
-            "http://hf.ci.wipsl.com/PleiXXPTsup/noheva-be/css/ovi.player.share.ui.css" ) ) );
-    mShareNetAccMan->get( QNetworkRequest( QUrl(
-            "http://hf.ci.wipsl.com/PleiXXPTsup/noheva-be/js/publishplayer.js" ) ) );
-    TX_EXIT
-}
-
-/*!
- Release resources from share player.
- */
-void MpDetailsShareDialog::logoutPlayer()
-{
-    TX_ENTRY
-    if ( mShareWebView )
-    {
-        mShareWebView->page()->mainFrame()->evaluateJavaScript( "music.teardown();" );
-    }
-    TX_EXIT
-}
-
-/*!
- Adds the shared data context to the javascript of the loaded page.
- */
-void MpDetailsShareDialog::addContext()
-{
-    TX_ENTRY
-    if ( mShareWebView )
-    {
-        mShareWebView->page()->mainFrame()->addToJavaScriptWindowObject( "context", &mShareData );
-    }
-    TX_EXIT
-}
-
-/*!
- Updates the shared data context in the javascript of the loaded page.
- */
-void MpDetailsShareDialog::updateSharedData()
-{
-    TX_ENTRY
-    if ( mShareWebView )
-    {
-        // We don't need to call updateContextArea when the track URL has been updated.
-        //mShareWebView->page()->mainFrame()->evaluateJavaScript( "music.updateContextArea();" );
-        mShareWebView->page()->mainFrame()->evaluateJavaScript( "music.updateMetadata();" );
-    }
-    TX_EXIT
-}
-
-/*!
- Slot to call when index.html loading completes.
- */
-void MpDetailsShareDialog::onIndexLoad( bool aOk )
-{
-    TX_ENTRY
-    if ( !aOk )
-    {
-        // Close the popup window, failed to load index.html.
-        // This is pretty serious and most likely unrecoverable error.
-        // Only thing we can do really is to close the share player
-        // dialog - TODO do we need to show any error message to user?
-        TX_LOG_ARGS( "share: failed to load index.html" )
-        emit closeShareDialog();
-    }
-    TX_EXIT
-}
-
-/*!
- Slot to call for debug output.
- */
-void MpDetailsShareDialog::debugJs( QString s )
-{
-    TX_ENTRY
-    Q_UNUSED(s);
-
-    TX_EXIT
-}
-
-/*!
- Slot to call for displaying an error message to the user.
- */
-void MpDetailsShareDialog::errorHandler( QString aError, QString aMessage )
-{
-    TX_ENTRY
-    // If error argument ends with "_SUCCESS", then this should be an info message.
-    // If error argument ends with "_FAILED" or something else, then this should be a warning message.
-    TX_LOG_ARGS( "share: errorHandler: " << aError << ": " << aMessage )
-    if ( aError.endsWith( "_SUCCESS" ) )
-    {
-        // TODO this method seems to be deprecated?
-        HbMessageBox::information( tr( "%1" ).arg( aError ) + ": " + tr( "%1" ).arg( aMessage ) ); // For week16 hbwidgets
-    }
-    else
-    {
-        // TODO this method seems to be deprecated?
-        HbMessageBox::warning( tr( "%1" ).arg( aError ) + ": " + tr( "%1" ).arg( aMessage ) ); // For week16 hbwidgets
-        // HbMessageBox::launchWarningMessageBox( tr( "%1" ).arg( aError ) + ": " + tr( "%1" ).arg( message ) ); // For week12 hbwidgets
-    }
-    TX_EXIT
-}
-
-/*!
- Slot to call to clear the web view cache.
- */
-void MpDetailsShareDialog::clearCache()
-{
-    TX_ENTRY
-    QAbstractNetworkCache* cache = mShareNetAccMan ? mShareNetAccMan->cache() : NULL;
-    if ( cache )
-    {
-        TX_LOG_ARGS( "share: clearCache: clearing cache" )
-        cache->clear();
-#ifdef SHARE_PLAYER_RND
-        errorHandler( "Cache", "Cleared cache!" );
-#endif
-    }
-    else
-    {
-        TX_LOG_ARGS( "share: clearCache: unable to clear cache" )
-#ifdef SHARE_PLAYER_RND
-        errorHandler( "Cache", "Could not clear cache!" );
-#endif
-    }
-    TX_EXIT
-}
-
-/*!
- Slot to show the publishing window after html elements are created in javascript.
- */
-void MpDetailsShareDialog::showWindow()
-{
-    TX_ENTRY
-    if (mProgressbar)
-        mProgressbar->close();
-    show();
-    TX_EXIT
-}
-
-/*!
- Slot to show progress dialog if the publishing window is not loaded in .3 sec.
- */
-void MpDetailsShareDialog::showProgressDialog()
-{
-    TX_ENTRY
-    if (!isVisible())
-        mProgressbar->show();
-    TX_EXIT
-}
-
-/*!
- Slot to SSL errors in network request. We will ignore any errors.
- */
-void MpDetailsShareDialog::handleRequestSSLErrors( QNetworkReply* aReply, const QList< QSslError >& aErrors )
-{
-    TX_ENTRY
-    aReply->ignoreSslErrors();
-    for( int i = 0; i < aErrors.count(); i++ )
-    {
-        TX_LOG_ARGS( "SSL error " << aErrors.at( i ).errorString() );
-    }
-    TX_EXIT
-}
-
-/*!
- Slot to handle network request completion.
- */
-void MpDetailsShareDialog::handleRequestFinished( QNetworkReply* aReply )
-{
-    TX_ENTRY
-    if ( aReply->error() != QNetworkReply::NoError )
-    {
-        TX_LOG_ARGS( "Network request error " << aReply->error() << aReply->errorString() );
-        // TODO what to do now?
-    }
-    TX_EXIT
-}
-
-#endif // SHARE_FUNC_ENABLED
--- a/mpviewplugins/mpdetailsviewplugin/src/mpdetailsview.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/src/mpdetailsview.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -23,7 +23,7 @@
 #include <QFile>
 #include <QGraphicsLinearLayout>
 #include <QSizeF>
-
+#include <QDesktopServices>
 
 
 #include <hbinstance.h>
@@ -49,12 +49,7 @@
 #include "mpquerymanager.h"
 #include "mptrace.h"
 
-#ifdef SHARE_FUNC_ENABLED
-#include "mpdetailssharedialog.h"
-#endif
 
-
-const int KRecommendationCount = 2;
 const int KOneKiloByteInBytes = 1024;
 const int KOneMegabyteInBytes = 1048576;        
 const int KOneGigaByteInBytes = 134217728;        
@@ -73,19 +68,13 @@
       mAlbumArt( 0 ),
       mSongDetailsGroupBox(0),
       mInspireMeGroupBox(0),
-      mShareButton(0),
       mDocumentLoader( 0 ),
       mDetailList(0),
       mInspireList(0),
       mInspireMeProgressBar(0),
       mMpQueryManager( 0 ),
       mInspireMeQueryOngoing( false ),
-      mInspireMeQueryRendered( false ),
-      mInspireMeOpen(true),
-      mSongDetailsGbOpen(false)
-#ifdef SHARE_FUNC_ENABLED
-      , mSharePopup( 0 )
-#endif
+      mInspireMeQueryRendered( false )
 {
     TX_ENTRY
     bool widgetsOk = false;
@@ -112,10 +101,6 @@
     TX_LOG_ARGS( "MpDetailsView() mDocumentLoader->findWidget for <content>: " << (int)(widget) );
     setWidget(  qobject_cast<HbWidget *>(widget) );
 
-    widget = mDocumentLoader->findWidget( QString("shareButton") );
-    mShareButton = qobject_cast<HbPushButton *>(widget);
-    TX_LOG_ARGS("MpDetailsView() <shareButton> widget found mShareButton: " << (int)(mShareButton) );
-
     widget = mDocumentLoader->findWidget( QString("trackTitle") );
     mSongText = qobject_cast<HbLabel *>(widget);
     TX_LOG_ARGS("MpDetailsView() <trackTitle> widget found mSongText: " << (int)(mSongText) );
@@ -157,7 +142,8 @@
     mDocumentLoader->load( QString(":/mpdetailsviewdocml/mpdetailsview.docml"), QString( "ShowInspireMe" ), &loadingSectionOk );    
     if( loadingSectionOk ) {
         TX_LOG_ARGS( "Loading ShowInspireMe section is successful." );
-    } else {
+    }
+    else {
         TX_LOG_ARGS( "Loading ShowInspireMe section fails." );
     }
 
@@ -170,13 +156,11 @@
 MpDetailsView::~MpDetailsView()
 {
     TX_ENTRY
+    saveGroupBoxStates();
     delete mSoftKeyBack;
     delete mDocumentLoader;
     delete mMpQueryManager;
 
-#ifdef SHARE_FUNC_ENABLED
-    closeShareDialog();
-#endif
     TX_EXIT
 }
 
@@ -201,19 +185,24 @@
     connect( mSongData, SIGNAL( albumArtReady() ), this, SLOT( albumArtChanged() ) );
     connect( mSongData, SIGNAL( playbackInfoChanged() ), this, SLOT( handlePlaybackInfoChanged() ) );
     connect( mSongData, SIGNAL( songDetailInfoChanged() ), this, SLOT( songDetailInfoChanged() ) );
+    connect( mDetailList, SIGNAL( pressed( HbListWidgetItem  * ) ), this, SLOT( handleListItemSelected( HbListWidgetItem  * ) ) );
     connect( mSongDetailsGroupBox, SIGNAL( toggled( bool ) ), this, SLOT( handleDetailsGroupBoxToggled( bool ) ) );
     connect( mInspireMeGroupBox, SIGNAL( toggled( bool ) ), this, SLOT( handleInspireMeGroupBoxToggled( bool ) ) );
-    connect( mMpQueryManager, SIGNAL( networkError() ), this ,SLOT( handleNetworkError() ) );
-    connect( mMpQueryManager, SIGNAL(searchUrlRetrieved(const QString&)), this, SLOT(updateSharedData(const QString&)));
-    connect( mMpQueryManager, SIGNAL(recommendationAlbumArtsReady()), this, SLOT(RenderInspireMeGroupBox()));
+    connect( mMpQueryManager, SIGNAL(inspireMeItemsMetadataRetrieved()), this, SLOT(renderInspireMeMetadata()));
+    connect( mMpQueryManager, SIGNAL(inspireMeItemAlbumArtReady()), this, SLOT(renderInspireMeAlbumArts()));    
+    connect( mMpQueryManager, SIGNAL(localMusicStoreRetrieved(bool)), this, SLOT(queryInspireMe(bool)), Qt::QueuedConnection);
+    connect( mMpQueryManager, SIGNAL(localMusicStoreRetrievalError()), this, SLOT(abortInspireMeProcess()));
+    connect( mMpQueryManager, SIGNAL(inspireMeItemsRetrievalError()), this, SLOT(queryLocalMusicStore()), Qt::QueuedConnection);
 
-#ifdef SHARE_FUNC_ENABLED
-    connect( mShareButton, SIGNAL( clicked() ), this, SLOT( share() ) );
+    TX_EXIT
+}
 
-    // Preload the share popup
-    preloadShareDialog();
-#endif
-    TX_EXIT
+void MpDetailsView::queryLocalMusicStore()
+{
+    TX_ENTRY
+    mMpQueryManager->reset();
+    mMpQueryManager->queryLocalMusicStore(); 
+    TX_EXIT        
 }
 
 /*!
@@ -225,12 +214,10 @@
     setNavigationAction( mSoftKeyBack );
 
     mActivated = true;
-    mInspireMeOpen = MpSettingsManager::inspireMe();
-    mSongDetailsGbOpen = MpSettingsManager::songDetailsGb();
-    TX_LOG_ARGS( "InspireMeVal: " << mInspireMeOpen );
-    TX_LOG_ARGS( "SongDetailsGbVal: " << mSongDetailsGbOpen );
-    mInspireMeGroupBox->setCollapsed(!mInspireMeOpen);
-    mSongDetailsGroupBox->setCollapsed(!mSongDetailsGbOpen);
+    TX_LOG_ARGS( "InspireMeVal: " << MpSettingsManager::inspireMe() );
+    TX_LOG_ARGS( "SongDetailsGbVal: " << MpSettingsManager::songDetailsGb() );
+    mInspireMeGroupBox->setCollapsed(!MpSettingsManager::inspireMe());
+    mSongDetailsGroupBox->setCollapsed(!MpSettingsManager::songDetailsGb());
     TX_EXIT
 }
 
@@ -240,23 +227,31 @@
 void MpDetailsView::deactivateView()
 {
     TX_ENTRY
-    if (mInspireMeGroupBox->isCollapsed() ) {
-      MpSettingsManager::setInspireMe(false);
-      } else {
-      MpSettingsManager::setInspireMe(true);
-      }
-
-    if (mSongDetailsGroupBox->isCollapsed() ) {
-      MpSettingsManager::setSongDetailsGb(false);
-      } else {
-      MpSettingsManager::setSongDetailsGb(true);
-      }
-
+    saveGroupBoxStates();
     setNavigationAction( 0 );
     mActivated = false;
     TX_EXIT
 }
 
+void MpDetailsView::saveGroupBoxStates()
+{
+    TX_ENTRY
+    if (mInspireMeGroupBox->isCollapsed() ) {
+        MpSettingsManager::setInspireMe(false);
+    }
+    else {
+        MpSettingsManager::setInspireMe(true);
+    }
+
+    if (mSongDetailsGroupBox->isCollapsed() ) {
+        MpSettingsManager::setSongDetailsGb(false);
+    }
+    else {
+        MpSettingsManager::setSongDetailsGb(true);
+    }
+    TX_EXIT      
+}
+ 
 /*!
  Setup the menu.
  */
@@ -292,29 +287,33 @@
 /*!
  Slot to handle network error.
  */
-void MpDetailsView::handleNetworkError()
+void MpDetailsView::abortInspireMeProcess()
 {
     TX_ENTRY
+    mInspireMeProgressBar->hide();    
+    mInspireMeGroupBox->setCollapsed( true );    
     mInspireMeQueryOngoing = false;
     mInspireMeQueryRendered = false;
-    clearInspireMe();
-    mInspireMeGroupBox->setCollapsed( true );
+    // ensure that we dont get callbacks from previous queries. Especially true,
+    // if details view is actived with a quick song change again
+    mMpQueryManager->reset();
+    mInspireList->clear();
     TX_EXIT
 }
 
 /*!
  Render inspireme groupbox after album arts downloaded
  */
-void MpDetailsView::RenderInspireMeGroupBox()
+void MpDetailsView::renderInspireMeMetadata()
 {
     TX_ENTRY
     mInspireMeQueryOngoing = false;
     mInspireMeQueryRendered = true;
     mInspireMeProgressBar->hide();
-    if( mMpQueryManager->recommendationAlbumArtsMap().count() ) {
+    if( mMpQueryManager->recommendationsCount() ) {
         TX_LOG_ARGS( "There are recommendations." )
         // we have recommendations
-        for ( int i = 0; i < KRecommendationCount; i++ ) {
+        for ( int i = 0; i < mMpQueryManager->recommendationsCount(); ++i ) {
             // configure the layout properties
             if(!mInspireList->count()) {
                 // we havent configured the prototype before
@@ -323,15 +322,14 @@
             }
             // create the item
             HbListWidgetItem  *inspireMeItem = new HbListWidgetItem();
-            HbIcon icon( QIcon( mMpQueryManager->recommendationAlbumArtsMap().value(mMpQueryManager->recommendationAlbumArtsLink().at( i ) ) ) );
-            inspireMeItem->setIcon( icon );
-            inspireMeItem->setText( mMpQueryManager->recommendationSongs().at( i ) );
-            inspireMeItem->setSecondaryText( mMpQueryManager->recommendationArtists().at( i ) );
+            inspireMeItem->setIcon( mMpQueryManager->recommendedAlbumArt( i ));
+            inspireMeItem->setText( mMpQueryManager->recommendedSong( i ) );
+            inspireMeItem->setSecondaryText( mMpQueryManager->recommendedArtist( i ) );
             mInspireList->addItem( inspireMeItem );
         }
     }
     else {
-        TX_LOG_ARGS( "There is NO recommendation." )
+        TX_LOG_ARGS( "There are NO recommendations" )
         // we dont have recommendations
         // we havent configured the prototype before
         HbListViewItem *prototype = mInspireList->listItemPrototype();
@@ -347,31 +345,33 @@
     TX_EXIT
 }
 
-bool MpDetailsView::canQueryRecommendations() const
+void MpDetailsView::renderInspireMeAlbumArts()
+{
+    TX_ENTRY    
+    for( int i = 0; i < mInspireList->count(); ++i) {
+        mInspireList->item(i)->setIcon( mMpQueryManager->recommendedAlbumArt( i ) );
+    }
+    TX_EXIT    
+}
+   
+bool MpDetailsView::isMetadata() const
 {
     bool result = ( ( !mSongData->album().isEmpty() ) ||
-                    ( !mSongData->artist().isEmpty() ) ) &&
-                  !( mInspireMeGroupBox->isCollapsed() );
-    TX_LOG_ARGS( "Can query recommendations:" << result );
+                    ( !mSongData->artist().isEmpty() ) );
+    TX_LOG_ARGS( "Inspire Me Query metadata available:" << result );
     return result;
 }
 
-bool MpDetailsView::canQuerySharePlayerLink() const
-{
-  bool result = ( !mSongData->title().isEmpty() ) &&
-                ( !mSongData->artist().isEmpty() ) ;
-  TX_LOG_ARGS( "Can query share player link:" << result );
-  return result;
-}
-
 /*!
  Slot to handle basic song information
  */
 void MpDetailsView::handlePlaybackInfoChanged()
 {
     TX_ENTRY
-    mMpQueryManager->clearNetworkReplies();
-    clearInspireMe();
+    // ensure that we dont get callbacks from previous queries. Especially true,
+    // if details view is actived with a quick song change again
+    mMpQueryManager->reset();
+    mInspireList->clear();
     mInspireMeQueryRendered = false;
 
     // Clear the song data link until new query has been made.
@@ -379,50 +379,53 @@
 
     if ( !mSongData->title().isEmpty () ) {
         mSongText->setPlainText( mSongData->title() );
-    } else {
+    }
+    else {
         mSongText->setPlainText( mSongData->fileName() );
     }
 
     if ( !mSongData->album().isEmpty () ) {
         mAlbumText->setPlainText( mSongData->album() );
-    } else {
+    }
+    else {
         mAlbumText->setPlainText( hbTrId( "txt_mus_other_unknown7") );
     }
 
     if ( !mSongData->artist().isEmpty() ) {
         mArtistText->setPlainText( mSongData->artist() );
-    } else {
+    }
+    else {
         mArtistText->setPlainText( hbTrId( "txt_mus_other_unknown6") );
     }
 
-    if (canQuerySharePlayerLink() ) {
-        mMpQueryManager->queryLocalMusicStore(mSongData->artist(),mSongData->album(),mSongData->title());
-    }
-
-    if (canQueryRecommendations()) {
-        // start inspire me area progress bar
-        // TODO: currently, till we get to this callback from MPX the bar not shown
-        // TODO: check if inspireMe is ON, if not, dont show
-        mInspireMeProgressBar->show();
-        mMpQueryManager->queryInspireMeItems(mSongData->artist(),mSongData->album(),mSongData->title());
-        mInspireMeQueryOngoing = true;
-    }
-    else {
-        // metadata to query for inspire me items not available
-        // show information note
-      if (!mInspireMeGroupBox->isCollapsed())
-        RenderInspireMeGroupBox();
+    if(!mInspireMeGroupBox->isCollapsed()) {
+        startInspireMe();
     }
     TX_EXIT
 }
 
-void MpDetailsView::clearInspireMe()
+void MpDetailsView::startInspireMe()
 {
-    TX_ENTRY
-    mInspireList->clear();
-    mMpQueryManager->clearRecommendations();
-    TX_EXIT
+    TX_ENTRY    
+    if(isMetadata()) {
+        // show progress bar, start store query or inspire me query process
+        mInspireMeProgressBar->show();
+        mInspireMeQueryOngoing = true;
+        if( mMpQueryManager->isLocalMusicStore() ) {
+            mMpQueryManager->queryInspireMeItems(mSongData->artist(),mSongData->album(),mSongData->title());
+        }
+        else {
+            // no local store information present
+            mMpQueryManager->queryLocalMusicStore();
+        }
+    }
+    else {
+        // no metadata. show no recommendations
+        renderInspireMeMetadata();
+    }
+    TX_EXIT    
 }
+    
 /*!
  Slot to handle detail song information
  */
@@ -495,7 +498,7 @@
         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 );
     }
@@ -508,7 +511,7 @@
         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 );
     }
@@ -522,15 +525,18 @@
         if( size < KOneKiloByteInBytes) {
             // under 1 KB
             item->setSecondaryText( hbTrId("txt_mus_dblist_size_val_ln_b", size) );
-        } else if( size < KOneMegabyteInBytes ) {
+        }
+        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 ) {
+        }
+        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 {
+        }
+        else {
             // 1 GB or higher
             size /= KOneGigaByteInBytes; // turn size to GB
             item->setSecondaryText( hbTrId("txt_mus_dblist_size_val_ln_gb", size) );            
@@ -592,108 +598,52 @@
         if ( mInspireMeQueryOngoing ) {
             TX_LOG_ARGS( "Query is ongoing " )
             mInspireMeProgressBar->show();
-        } else {
+        }
+        else {
             TX_LOG_ARGS( "Query is NOT ongoing " )
             if ( mInspireMeQueryRendered ) {
                 TX_LOG_ARGS( "InspireMe is rendered already. " )
                 mInspireMeProgressBar->hide();
-            } else {
-                if ( canQueryRecommendations() ) {
-                    TX_LOG_ARGS( "InspireMe is NOT rendered yet but can query for recommendations. " )
-                    mMpQueryManager->queryInspireMeItems(mSongData->artist(),mSongData->album(),mSongData->title());
-                    mInspireMeProgressBar->show();
-                    mInspireMeQueryOngoing = true;
-                } else {
-                    TX_LOG_ARGS( "InspireMe is NOT rendered yet and CANNOT query for recommendations either. " )
-                    RenderInspireMeGroupBox();
-                }
+            }
+            else {
+                startInspireMe();
             }
         }
-    } else {
+    }
+    else {
         TX_LOG_ARGS( "InspireMe is collapsed." )
         mInspireMeProgressBar->hide();
     }
     TX_EXIT
 }
 
-#ifdef SHARE_FUNC_ENABLED
 /*!
- Slot to be called when share button is clicked
- */
-void MpDetailsView::share()
+ Slot to call when URL item in song details is pressed
+*/
+void MpDetailsView::handleListItemSelected( HbListWidgetItem  *item)
 {
-    TX_ENTRY
-    createShareDialog();
-    if (canQuerySharePlayerLink() )
-    {
-        mMpQueryManager->queryLocalMusicStore(mSongData->artist(),mSongData->album(),mSongData->title() );
-    }
-    TX_EXIT
-}
-
-/*!
-  Method to create the share dialog on demand.
-  This will cause the share web view to be created and start loading.
-  */
-void MpDetailsView::createShareDialog()
-{
-    TX_ENTRY
-    if ( !mSharePopup )
-    {
-        mSharePopup = new MpDetailsShareDialog();
-    }
-    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_ENTRY_ARGS( "URL: " << item->secondaryText() );
+    QDesktopServices::openUrl( item->secondaryText() );
     TX_EXIT
 }
 
 /*!
-  Method to create the share dialog on demand and preload publishing player files.
-  This will construct the share dialog but it will still be in "uninitialized" state.
-  */
-void MpDetailsView::preloadShareDialog()
+ Slot to call when MusicStore Info is Received
+*/
+void MpDetailsView::queryInspireMe(bool storeUpdated)
 {
     TX_ENTRY
-    if ( !mSharePopup )
-    {
-        mSharePopup = new MpDetailsShareDialog();
+    // we asked query manager to update its local store information
+    // if that store info didnt change (i.e. from empty string to "fi" or
+    // from "bad old store" to "good new store") then we dont need to pursue a query    
+    if( storeUpdated ) {
+        mMpQueryManager->queryInspireMeItems(mSongData->artist(),mSongData->album(),mSongData->title());
+        mInspireMeQueryOngoing = true;
     }
-    mSharePopup->cachePublishingPlayerFiles();
+    else {
+        mInspireMeQueryOngoing = false;
+        mInspireMeProgressBar->hide();
+    }
     TX_EXIT
 }
 
-/*!
- Slot to be called when ok/close button in share dialog is pressed.
- */
-void MpDetailsView::closeShareDialog()
-{
-    TX_ENTRY
-    if ( mSharePopup )
-    {
-        // Dialog uses WA_DeleteOnClose so no need to delete it explicitely here, just close it.
-        mSharePopup->close();
-        mSharePopup = NULL;
-    }
-    TX_EXIT
-}
-#endif
-
-/*!
- Slot to handle the music store URL retrieval from the query manager.
-*/
-void MpDetailsView::updateSharedData(const QString& url)
-{
-    TX_ENTRY
-    mSongData->setLink( url );
-#ifdef SHARE_FUNC_ENABLED
-    if ( mSharePopup )
-	{
-		mSharePopup->updateSharedData();
-	}
-#endif
-    TX_EXIT
-}
--- a/mpviewplugins/mpdetailsviewplugin/src/mpquerymanager.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/src/mpquerymanager.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -22,7 +22,7 @@
 #include <QNetworkDiskCache>
 #include <QNetworkProxyFactory>
 #include <qmobilityglobal.h>
-#include <qnetworksession.h>
+#include <QNetworkSession>
 #include <QDomElement>
 #include <QList>
 #include <QFile>
@@ -30,12 +30,12 @@
 #include <QSslError>
 #include <QDir>
 #include <QCoreApplication>
+#include <XQSysInfo>
 
 #include <thumbnailmanager_qt.h>
 #include <thumbnaildata.h>
 #include <thumbnailobjectsource.h>
 
-#include "mpdetailssharedialog.h"
 #include "mptrace.h"
 
 const int KUndefined = -1;
@@ -43,8 +43,11 @@
 
 MpQueryManager::MpQueryManager()
     : mManager(0),
-      mDownloadManager(0),
-      mThumbnailManager(0)        
+      mAlbumArtDownloader(0),
+      mThumbnailManager(0),
+      mDefaultRecommendationAlbumArt("qtg_large_album_art"),
+      mRequestType(NoRequest),
+      mRecommendationCount(0)
                                
 {
     TX_ENTRY
@@ -56,56 +59,57 @@
     bool res = dir.mkdir( newDir );
     TX_LOG_ARGS( "New dir creation result: " << res);
 
-    // We're not handling a negative result for directory creation here,
-    // instead it will be escalated in DownloadFinished() method.
+    // TODO: Instead of writing the album art to a file, 
+	// then using Thumbnail Manager to convert it, etc. 
+	// have you considered just loading it directly into QPixmap? 
+	// QPixmap provides a loadFromData() that can load from QByteArray. 
+	// This would not only make the availability of the album art immediate, 
+	// but also save a lot of cleanup in file system, thumbnail manager, etc.    
     privatePathQt = privatePathQt + "/detailsview";
     QString albumArt1( privatePathQt + "/albumOne.png" );
     QString albumArt2( privatePathQt + "/albumTwo.png" );
     mRecommendationAlbumArtsName << albumArt1 << albumArt2;
     TX_LOG_ARGS( "recommendation album art names: " << mRecommendationAlbumArtsName );
 
-    mManager = new QNetworkAccessManager( this );
-      
-    mDownloadManager = new QNetworkAccessManager( this );
-    connect( mDownloadManager, SIGNAL( finished( QNetworkReply * ) ), this, SLOT( DownloadFinished( QNetworkReply * ) ) );
-    
+    mManager = new QNetworkAccessManager( this );      
+    mAlbumArtDownloader = new QNetworkAccessManager( this );    // TODO: check if we can only use mManager
     mThumbnailManager = new ThumbnailManager( this );
     mThumbnailManager->setQualityPreference( ThumbnailManager::OptimizeForQuality );
     mThumbnailManager->setThumbnailSize( ThumbnailManager::ThumbnailSmall );
-    QObject::connect( mThumbnailManager, SIGNAL( thumbnailReady( QPixmap , void * , int , int ) ),
-            this, SLOT( thumbnailReady( QPixmap , void * , int , int  ) ) );
-    // TODO: Use the album art in provided by 10.1 wk16 platform. Current one is in the binary        
-    mDefaultRecommendationAlbumArt = QPixmap( ":/mpdetailsviewicons/qtg_large_music_album.svg" );    
-     
+
     TX_EXIT
 }
 
 MpQueryManager::~MpQueryManager()
 {
     TX_ENTRY
+    reset();
     if ( mManager ) {
        mManager->deleteLater();
-     }
-    if ( mDownloadManager ) {
-       mDownloadManager->deleteLater();
+    }
+    if ( mAlbumArtDownloader ) {
+       mAlbumArtDownloader->deleteLater();
     }
-    delete mThumbnailManager;
+    if( mThumbnailManager ) {
+        mThumbnailManager->deleteLater();
+    }
     TX_EXIT
 }
 
 
 void MpQueryManager::clearNetworkReplies()
 {
+    mRequestType = NoRequest; 
     disconnect( mManager, SIGNAL( finished( QNetworkReply * ) ), this, SLOT( retrieveInformationFinished( QNetworkReply * ) ) );     
     TX_ENTRY_ARGS( "Reply count = " << mReplys.count() );    
-    for ( int i = 0; i < mReplys.count(); i++ ) {
+    for ( int i = 0; i < mReplys.count(); ++i ) {
         QNetworkReply *reply = mReplys.at( i );
         disconnect( reply, SIGNAL( error( QNetworkReply::NetworkError ) ), this, SLOT( retrieveInformationNetworkError( QNetworkReply::NetworkError ) ) );        
         if ( reply != NULL ) {
             reply->close();
             reply->deleteLater();
             reply = NULL;
-        }   
+        }
     }
     mReplys.clear();
     TX_EXIT
@@ -123,6 +127,7 @@
     constructRequest( queryURI );
     TX_LOG_ARGS( "queryURI : " << queryURI );
     retrieveInformation( queryURI );
+    mRequestType = LocalStoreRequest;    
     TX_EXIT    
 }
     
@@ -133,82 +138,89 @@
     mAlbum=album;
     mTitle=title;
     // start querying inspire me items
-    QString queryRecommendation("http://api.music.ovi.com/1.0/gb/releases/recommend/?");
+    QString queryRecommendation("http://api.music.ovi.com/1.0/" + mMusicStore + "/releases/recommend/?");
     constructRequest( queryRecommendation );
-    TX_LOG_ARGS( "queryRecommendation : " << queryRecommendation );
+	// TODO: Store the token to a cenrep key	
+    // TODO: Tokens change per new ovi api release. 
+	//       Need to figure out a way to get them updated on the fly
+    queryRecommendation.append("&Token=03574704-e3d1-4466-9691-e0b34c7abfff");
+
+    TX_LOG_ARGS( queryRecommendation );
     retrieveInformation( queryRecommendation );
+    mRequestType = InspireMeItemsMetadataRequest;
     TX_EXIT
 }
 
 void MpQueryManager::clearRecommendations()
 {
-    TX_ENTRY    
+    TX_ENTRY
+    mRecommendationCount = 0;
     mDownloadedAlbumArts = 0;
     mAlbumArtsReadyCount = 0;
-    for ( int i = 0; i < KRecommendationCount; i++ ) {
-       mRecommendationSongs.clear();
-       mRecommendationArtists.clear();
-       mRecommendationAlbumArtsLink.clear();
-       mRecommendationAlbumArtsMap.clear();      
-       QFile file( mRecommendationAlbumArtsName.at( i ) );        
-       if ( file.exists() ) {
-           if ( file.remove() ) {
-               TX_LOG_ARGS( "File removed - " << file.fileName() );
-           }
-           else {
-               TX_LOG_ARGS( "Cannot remove file - " << file.fileName() );
-           }
-       } else {
-           TX_LOG_ARGS( "File doesn't exist - " << file.fileName() );
+    mRecommendationSongs.clear();
+    mRecommendationArtists.clear();
+    mRecommendationAlbumArtsLink.clear();
+    mRecommendationAlbumArtsMap.clear();
+    for ( int i = 0; i < mRecommendationAlbumArtsName.count(); ++i ) {
+       QFile file( mRecommendationAlbumArtsName.at( i ) );
+       TX_LOG_ARGS( "File " << file.fileName() << " exists: " << file.exists() );
+       if ( file.exists() && file.remove() ) {
+            TX_LOG_ARGS( "File " << file.fileName() << " removed");
        }
     }
     TX_EXIT    
 }
 
+
+
 /*!
- Return recommendation songs
+ Returns the Local Music Store(if available) to be used while querying "Inspire Me" Items
  */
-QStringList MpQueryManager::recommendationSongs()
+void MpQueryManager::queryLocalMusicStore()
 {
-    TX_LOG  
-    return mRecommendationSongs;
+    TX_ENTRY
+    QString imsi,mcc;
+
+    XQSysInfo sysInfo( this );
+    imsi = sysInfo.imsi();
+    mcc= imsi.left(3);
+    TX_LOG_ARGS( "mcc : " << mcc );
+    
+    QString queryLocalMusicStore("http://api.music.cq1.brislabs.com/1.0/?mcc=" + mcc + "&token=06543e34-0261-40a4-a03a-9e09fe110c1f");
+    TX_LOG_ARGS( "queryLocalMusicStore : " << queryLocalMusicStore );
+    retrieveInformation( queryLocalMusicStore );
+    mRequestType = LocalStoreRequest;
+    TX_EXIT
+}
+
+
+int MpQueryManager::recommendationsCount() const
+{
+    TX_LOG_ARGS ("count: " << mRecommendationSongs.count());
+    return mRecommendationSongs.count();
+}
+
+QString MpQueryManager::recommendedSong(int index) const
+{
+    QString result;
+    if( (0 <= index) && (index < mRecommendationSongs.count())) {
+        result = mRecommendationSongs.at(index);
+    }
+    TX_LOG_ARGS ("recommendedSong: " << result);    
+    return result; 
 }
 
 /*!
  Return recommendation artists
  */
-QStringList MpQueryManager::recommendationArtists()
-{
-    TX_LOG  
-    return mRecommendationArtists;
-}
-
-/*!
- Return recommendation album arts links
- */
-QStringList MpQueryManager::recommendationAlbumArtsLink()
+QString MpQueryManager::recommendedArtist(int index) const
 {
-    TX_LOG  
-    return mRecommendationAlbumArtsLink;
-}
-
-/*!
- Return map of name and pixmap
- */
-QMap<QString, QPixmap>  MpQueryManager::recommendationAlbumArtsMap()
-{
-    TX_LOG  
-    return mRecommendationAlbumArtsMap;
-}
-
-/*!
- Insert one uri & pixmap item into map
- */
-void MpQueryManager::insertMapItem( const QString &uri, const QPixmap &pixmap )
-{
-    TX_ENTRY_ARGS( "Map Item URI: " << uri );
-    mRecommendationAlbumArtsMap.insert( uri, pixmap );
-    TX_EXIT
+    QString result;
+    if( (0 <= index) && (index < mRecommendationArtists.count())) {
+        result = mRecommendationArtists.at(index);
+    }
+    TX_LOG_ARGS ("recommendedArtist: " << result);    
+    return result;
 }
 
 /*!
@@ -221,24 +233,49 @@
     int errorLine;
     int errorColumn;
     bool parsingSuccess;
+        
+    if ( reply->error() != QNetworkReply::NoError ) {
+		TX_LOG_ARGS("reply->error(): " << reply->error());
+        signalError();
+        return;
+    }
+        
+    parsingSuccess = mDomDocument.setContent( reply, true, &errorStr, &errorLine, &errorColumn );
+    if ( !parsingSuccess ) {
+		TX_LOG_ARGS("Parsing Received Content Failed");
+        signalError();
+        return;
+    }
+
+    handleParsedXML();  //CodeScanner throws a warning mis-interpreting the trailing 'L' to be a leaving function.
     
-    if ( reply->error() == QNetworkReply::NoError )
-    {
-        parsingSuccess = mDomDocument.setContent( reply, true, &errorStr, &errorLine, &errorColumn );
-        if ( parsingSuccess ) {
-            handleParsedXML();  //CodeScanner throws a warning mis-interpreting the trailing 'L' to be a leaving function.
-        } else {
-            // TODO: agree on error handling            
-            TX_LOG_ARGS( "XML parsing error" );
-        }
+    mReplys.removeAll(reply); // remove it so that we wont process it again
+    reply->deleteLater(); // make sure reply is deleted, as we longer care about it
+    
+    TX_EXIT
+}
+
+void MpQueryManager::signalError()
+{
+    TX_ENTRY; 
+    switch(mRequestType) {
+        case InspireMeItemsMetadataRequest:
+            TX_LOG_ARGS("emit inspireMeItemsRetrievalError");
+            emit inspireMeItemsRetrievalError();
+            break;
+        case InspireMeItemsAlbumArtRequest:
+            TX_LOG_ARGS("Warning: InspireMeItemsAlbumArtRequestError, will keep using the default AA icon");            
+            break;    
+        case LocalStoreRequest:
+            TX_LOG_ARGS("emit localMusicStoreRetrievalError");            
+            emit localMusicStoreRetrievalError();
+            break;
+        case NoRequest:   
+        default:
+            TX_LOG_ARGS("Warning!! Possible uninitialized mRequestType");            
+            break;                                 
     }
-    else
-    {
-        // TODO: agree on error handling
-        TX_LOG_ARGS( "Network error in retrieving Information" );
-        emit networkError();
-    }
-    TX_EXIT
+    TX_EXIT    
 }
 
 /*!
@@ -246,9 +283,13 @@
  */
 void MpQueryManager::retrieveInformationNetworkError( QNetworkReply::NetworkError error )
 {
+    TX_ENTRY_ARGS( "Network error for retrieving Information" << error);    
     // TODO: agree on error handling
+
 	Q_UNUSED(error)
-    TX_ENTRY_ARGS( "Network error for retrieving Information" << error);
+
+    disconnect( mManager, SIGNAL( finished( QNetworkReply * ) ), this, SLOT( retrieveInformationFinished( QNetworkReply * ) ) );     
+    signalError();
     TX_EXIT
 }
 
@@ -256,43 +297,59 @@
  Slot to call when there is ssl error
  */
 void MpQueryManager::retrieveInformationSslErrors( const QList<QSslError> &/*error*/ )
-{   
+{
     // TODO: agree on error handling
     TX_ENTRY_ARGS( "SSL error for retrieving Information" );
+    disconnect( mManager, SIGNAL( finished( QNetworkReply * ) ), this, SLOT( retrieveInformationFinished( QNetworkReply * ) ) );     
+    signalError();    
     TX_EXIT
 }
 
 /*!
  Slot to call when downloading finished
  */
-void MpQueryManager::DownloadFinished( QNetworkReply* reply )
+void MpQueryManager::albumArtDownloaded( QNetworkReply* reply )
 {
     TX_ENTRY_ARGS( "mDownloadedAlbumArts = " << mDownloadedAlbumArts );
-    if ( reply->error() == QNetworkReply::NoError )
-        {
+    TX_ENTRY_ARGS( "QNetworkReply obj " << reply);
+    
+    // It seems we get several finished signals for the same reply obj
+    // do nothing if we get a second signal
+    if( mReplys.indexOf(reply) == -1 ) {
+        TX_LOG_ARGS("Warning: QNetworkReply AA request may have been processed in previous call: " << reply );
+        return;
+    }
+        
+    if ( reply->error() == QNetworkReply::NoError ) {
+        
         QString fileName = mRecommendationAlbumArtsName.at( mDownloadedAlbumArts );
         QByteArray imageData = reply->readAll();
         bool ret = writeImageToFile( imageData, fileName );
 
         // If file writing went OK, emit a signal with the real filename
         // If it failed, use empty filename (since file was removed in any case)
-        if ( ret )
-            {
+        if ( ret ) {
+            // TODO: If album album arts come in different order than they have been asked,
+            // then inspire me items will use swapped album arts. Correct
             setAlbumArtUri( mRecommendationAlbumArtsLink.at( mDownloadedAlbumArts), 
                             mRecommendationAlbumArtsName.at( mDownloadedAlbumArts ) );
-            }
-        else
-            {
+        }
+        else {
             setAlbumArtUri(mRecommendationAlbumArtsLink.at( mDownloadedAlbumArts), "");
-            }
         }
-    else
-    {
-        TX_LOG_ARGS( "Downloading album art failed!" );
-        emit networkError();
+        ++mDownloadedAlbumArts;
+        mReplys.removeAll(reply); // remove it so that we wont process it again
+        reply->deleteLater(); // make sure reply is deleted, as we longer care about it
+    }
+    else {
+        TX_LOG_ARGS( "Error: Downloading album art failed! Will keep using the default AA" );
     }
     
-    mDownloadedAlbumArts++;
+    if( mDownloadedAlbumArts == mRecommendationCount) {
+        // no need to be informed anymore
+        mAlbumArtDownloader->disconnect(this);
+    }
+    
     TX_EXIT
 }
 
@@ -302,48 +359,40 @@
  returns false, otherwise true.
  */
 bool MpQueryManager::writeImageToFile(const QByteArray &aImageData, const QString &aImageFileName )
-    {
+{
     bool ret( false );
     TX_ENTRY_ARGS( "imagefile: " << aImageFileName );
-    if ( aImageFileName.isEmpty() )
-        {
+    if ( aImageFileName.isEmpty() ) {
         TX_LOG_ARGS( "Only store two album arts" );
-        }
-    else
-        {
+    }
+    else {
         QFile file( aImageFileName );
-
-        if ( !file.open( QIODevice::ReadWrite ) )
-            {
+        if ( !file.open( QIODevice::ReadWrite ) ) {
             TX_LOG_ARGS( "Unable to open file" );
-            }
-        else
-            {
+        }
+        else {
             qint64 writtenBytes = file.write( aImageData );
-
             // Verify file write status
-            if ( writtenBytes < aImageData.size() )
-                {
+            if ( writtenBytes < aImageData.size() ) {
                 // If write succeeded only partially, or completely failed,
                 // remove the file from filesystem to remove risk of corruption
                 TX_LOG_ARGS( "Wrote only " << writtenBytes << " bytes, aborting operation!" );
                 file.close();
                 QFile::remove( mRecommendationAlbumArtsName.at( mDownloadedAlbumArts ) );
-                }
-            else
-                {
+            }
+            else {
                 // If write fully succeeded, flush contents
                 TX_LOG_ARGS( "Wrote all the bytes (" << writtenBytes << "), flushing and closing!");
                 file.flush();
                 file.close();
                 ret = true;
-                }
             }
         }
+    }
     TX_LOG_ARGS( "Returning with value: " << ret );
     TX_EXIT
     return ret;
-    }
+}
 
 /*!
  Get Atom response from Ovi server based on query
@@ -351,7 +400,7 @@
 void MpQueryManager::retrieveInformation( const QString &urlEncoded )
 {
     TX_ENTRY_ARGS( "urlEconded = " << urlEncoded)
-    connect( mManager, SIGNAL( finished( QNetworkReply * ) ), this, SLOT( retrieveInformationFinished( QNetworkReply * ) ) );    
+    connect( mManager, SIGNAL( finished( QNetworkReply * ) ), this, SLOT( retrieveInformationFinished( QNetworkReply * ) ), Qt::UniqueConnection );
     QNetworkReply *reply = mManager->get( QNetworkRequest( QUrl( urlEncoded ) ) );
     mReplys.append( reply );
     
@@ -369,71 +418,99 @@
     TX_ENTRY
     QDomElement rootElement = mDomDocument.documentElement();
     
-    if ( rootElement.attribute( "type" ) == "search" ) {
-        TX_LOG_ARGS( "URI response" )
-        QString result;
+    if ( rootElement.attribute( "type" ) == "recommendedTracks" ) {
+        TX_LOG_ARGS( "Recommendation response" )
         QDomElement entry = rootElement.firstChildElement( "entry" );
-        while ( !entry.isNull() )
-        {
+        mRecommendationCount = 0;
+        while ( !entry.isNull() && mRecommendationCount < KRecommendationCount ) {
             if ( entry.attribute( "type" ) == "musictrack" ) {
                 QDomElement link = entry.firstChildElement( "link" );
-                while ( !link.isNull() )
-                {
-                    if ( link.attribute( "rel" ) == "alternate"
-                        && link.attribute( "type" ) == "text/html" ) {
-                        result = link.attribute( "href" );
-                    }
-                    link = link.nextSiblingElement( "link" );
-                }
-            }
-            entry = entry.nextSiblingElement( "entry" );
-        }
-		// Signal that the url was received. Might be empty string.
-		emit searchUrlRetrieved( result );
-    } else if ( rootElement.attribute( "type" ) == "recommendedTracks" ) {
-        TX_LOG_ARGS( "Recommendation response" )
-        QDomElement entry = rootElement.firstChildElement( "entry" );
-        QNetworkReply *reply;
-        int count = 0;
-        while ( !entry.isNull() && count < KRecommendationCount )
-        {
-            if ( entry.attribute( "type" ) == "musictrack" ) {
-                QDomElement link = entry.firstChildElement( "link" );
-                while ( !link.isNull() )
-                {
+                while ( !link.isNull() ) {
                     if ( link.attribute( "title" ) == "albumart100" ) {
                         mRecommendationAlbumArtsLink.append( link.attribute( "href" ) );
+                        // TODO: This may get called twice for one inspire me item. Investigate why
+                        mRecommendationAlbumArtsMap.insert( link.attribute( "href" ), mDefaultRecommendationAlbumArt );                      
                         break;
-                    } else {
+                    }
+                    else {
                         link = link.nextSiblingElement( "link" );
-                    }                    
+                    }
                 }
                 QDomElement metadata = entry.firstChildElement( "metadata" );
                 mRecommendationSongs.append( metadata.firstChildElement( "name" ).text() );
                 mRecommendationArtists.append( metadata.firstChildElement( "primaryartist" ).text() );
-                count++;
+                ++mRecommendationCount;
             }
             entry = entry.nextSiblingElement( "entry" );
-        }          
-        
-        for (int i = 0; i < KRecommendationCount; i++ ) {
+        }
+ 
+        emit inspireMeItemsMetadataRetrieved();
+
+        QNetworkReply *reply = 0;
+        // we need to channel the retrieved album arts to albumArtDownloaded slot only
+        disconnect( mManager, SIGNAL( finished( QNetworkReply * ) ), this, SLOT( retrieveInformationFinished( QNetworkReply * ) ) );        
+        for (int i = 0; i < mRecommendationCount; i++ ) {
             TX_LOG_ARGS( "song name: " << mRecommendationSongs.at(i) );
             TX_LOG_ARGS( "Artist name: " << mRecommendationArtists.at(i) );
             TX_LOG_ARGS( "Album art link: " << mRecommendationAlbumArtsLink.at(i) );
-            
+            mRequestType = InspireMeItemsAlbumArtRequest;
             if ( mRecommendationAlbumArtsLink.at( i ).contains( "http", Qt::CaseInsensitive ) ) {
-                reply = mDownloadManager->get( QNetworkRequest( QUrl( mRecommendationAlbumArtsLink.at(i) ) ) );
+                reply = mAlbumArtDownloader->get( QNetworkRequest( QUrl( mRecommendationAlbumArtsLink.at(i) ) ) );
                 mReplys.append( reply );
                 connect( reply, SIGNAL( error( QNetworkReply::NetworkError ) ), this, SLOT( retrieveInformationNetworkError( QNetworkReply::NetworkError ) ) );
                 connect( reply, SIGNAL( sslErrors( QList<QSslError> ) ), this, SLOT( retrieveInformationSslErrors( QList<QSslError> ) ) );
-            }             
+            }
         }
-    } else {
+       // we have queried for album arts for inspire me items. Now, time to wait for a response        
+       connect( mAlbumArtDownloader, SIGNAL( finished( QNetworkReply * ) ), this, SLOT( albumArtDownloaded( QNetworkReply * ) ) );
+
+    }
+    else if ( rootElement.attribute( "type" ) == "storeList" ) {
+		TX_LOG_ARGS( "Music Store List" )
+        QDomElement entry = rootElement.firstChildElement( "workspace" );
+        QString previousMusicStore = mMusicStore;
+        mMusicStore = entry.attribute( "countryCode" );
+        if(!mMusicStore.isEmpty()) {
+            bool musicStoreUpdated = (previousMusicStore != mMusicStore);
+        	TX_LOG_ARGS("Music Store" << mMusicStore );
+            emit localMusicStoreRetrieved(musicStoreUpdated);
+        }
+        else {
+            emit localMusicStoreRetrievalError();   
+        }		
+    }
+    else {
         TX_LOG_ARGS( "Not supported response" )
     }
     TX_EXIT
 }
 
+void MpQueryManager::clearThumbnails()
+{
+    TX_ENTRY
+    for(int i = 0; i < mThumbnailRequests.count(); ++i ) {
+        mThumbnailManager->cancelRequest(mThumbnailRequests.at(i));
+    }
+    mThumbnailRequests.clear();    
+    for(int i = 0; i < mRecommendationAlbumArtsName.count(); ++i) {
+        mThumbnailManager->deleteThumbnails(mRecommendationAlbumArtsName.at(i)); // async, returns immidiately
+    }
+    TX_EXIT        
+}
+
+void MpQueryManager::reset()
+{
+    TX_ENTRY
+    mManager->disconnect(this);
+    mAlbumArtDownloader->disconnect(this);
+    mThumbnailManager->disconnect(this);
+    clearNetworkReplies();
+    clearRecommendations();
+    clearThumbnails();
+    mRecommendationAlbumArtsMap.clear();
+    TX_EXIT
+}
+    
 /*!
  Construct the query for fetching URI & recommendations
  */
@@ -468,11 +545,11 @@
     QString str;
     if ( keys.length() != values.length() ) {
         TX_LOG_ARGS( "Error: keys length is not equal to values length" ); 
-    } else {
+    }
+    else {
         for ( int i = 0; i < keys.length(); i++ ) {
             QString tValue = values.at( i );
-            if ( 0 != tValue.length() )
-            {
+            if ( 0 != tValue.length() ) {
                 str += keys.at( i ) + "=" + values.at( i ) + "&";
             }
         }
@@ -486,18 +563,28 @@
 */
 void MpQueryManager::setAlbumArtUri( const QString &albumArtUri, const QString &albumArtName )
 {
+    // TODO: rename this function. Doing too many things
     TX_ENTRY_ARGS( "albumArtUri = " << albumArtUri )
     TX_LOG_ARGS( "albumArtName = " << albumArtName )
     if ( !albumArtUri.isEmpty() && !albumArtName.isEmpty() ) {
+        // TODO: this is no good to pass the address of the albumArtUri. It is an item in the list, which can cleaned
         int id = mThumbnailManager->getThumbnail( albumArtName, reinterpret_cast<void *>( const_cast<QString *>( &albumArtUri ) ) );
         if ( id == KUndefined ) {
-            // Request failed. Set default album art.
-            insertMapItem( albumArtUri, mDefaultRecommendationAlbumArt );
+            // Request failed. Set default album art
+            mRecommendationAlbumArtsMap.insert( albumArtUri, mDefaultRecommendationAlbumArt );
+        }
+        else {
+            // Async request went throu
+            TX_LOG_ARGS("Request to thumbnail manager made. Id: " << id)
+            mThumbnailRequests.append(id);
+            mThumbnailManager->disconnect( this ); // to prevent multiple same connections with thumbnailmanager
+            QObject::connect( mThumbnailManager, SIGNAL( thumbnailReady( QPixmap , void * , int , int ) ),
+            this, SLOT( thumbnailReady( QPixmap , void * , int , int  ) ) );
         }
     }
     else {
         // No album art uri. Set default album art.
-        insertMapItem( albumArtUri, mDefaultRecommendationAlbumArt );
+        mRecommendationAlbumArtsMap.insert( albumArtUri, mDefaultRecommendationAlbumArt );
     }
     TX_EXIT
 }
@@ -506,24 +593,42 @@
  Slot to handle the recommendation album art 
 */
 void MpQueryManager::thumbnailReady(
-        const QPixmap& pixmap,
+        const QPixmap pixmap,
         void *data,
-        int /*id*/,
+        int id,
         int error  )
 {
     TX_ENTRY
-    // TODO: Hkn: use qobject_cast
+
+    if( mThumbnailRequests.indexOf(id) == -1 ) {
+        TX_LOG_ARGS("Warning: some old thumbnail request from previous song. Ignoring")
+        return;
+    }
+    
+    // TODO: Using data from array, which can be reset. There must be a safer way    
     QString uri = *( reinterpret_cast<QString *>( data ) );
     TX_LOG_ARGS( "Uri: " << uri );
     
     if ( error == 0 ) {
         TX_LOG_ARGS( "album art link: " << uri );
-        insertMapItem( uri, pixmap );
-    } else {
-        insertMapItem( uri, mDefaultRecommendationAlbumArt );
+        mRecommendationAlbumArtsMap.insert( uri, HbIcon(QIcon(pixmap)) );
     }
-    if(++mAlbumArtsReadyCount == KRecommendationCount) {
-        emit recommendationAlbumArtsReady();
-    }    
+    else {
+        mRecommendationAlbumArtsMap.insert( uri, mDefaultRecommendationAlbumArt );        
+    }
+
+    emit inspireMeItemAlbumArtReady();    
     TX_EXIT
 }
+
+bool MpQueryManager::isLocalMusicStore() const
+{
+    TX_LOG_ARGS( "isLocalMusicStore = " << !mMusicStore.isEmpty() )
+    return !mMusicStore.isEmpty();
+}
+
+HbIcon MpQueryManager::recommendedAlbumArt(int index) const
+{
+    TX_LOG_ARGS( "index = " << index )
+    return mRecommendationAlbumArtsMap.value( mRecommendationAlbumArtsLink.at( index ) );
+}
--- a/mpviewplugins/mpdetailsviewplugin/src/mpsharedata.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,156 +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: 
-*
-*/
-
-#ifdef SHARE_FUNC_ENABLED
-
-#include "mpsharedata.h"
-#include "mpsongdata.h"
-
-
-// TODO OVI_URL needs to come from cenrep
-const QString OVI_URL = "http://music.ovi.com";
-
-// The music note symbol that we post if we do not have music store URL.
-const QString MUSIC_NOTE_SYMBOL = "&#9835;";
-
-
-MpShareData::MpShareData()
-    : mOwner( 0 ),
-      mSongData( 0 )
-{
-}
-
-MpShareData::~MpShareData()
-{
-    // Intentionally empty.
-}
-
-void MpShareData::setOwner( QObject* aOwner )
-{
-    mOwner = aOwner;
-}
-
-QObject* MpShareData::owner() const
-{
-    return mOwner;
-}
-
-void MpShareData::setSongData( MpSongData* aSongData )
-{
-    mSongData = aSongData;
-}
-
-MpSongData* MpShareData::songData() const
-{
-    return mSongData;
-}
-
-void MpShareData::setErrorMessage( const QString& s )
-{
-    mErrorMessage = s;
-}
-
-QString MpShareData::errorMessage() const
-{
-    return mErrorMessage;
-}
-
-void MpShareData::setUsername( const QString& s )
-{
-    mUsername = s;
-}
-
-QString MpShareData::username() const
-{
-    return mUsername;
-}
-
-void MpShareData::setPassword( const QString& s )
-{
-    mPassword = s;
-}
-
-QString MpShareData::password() const
-{
-    return mPassword;
-}
-
-void MpShareData::setLanguage( const QString& s )
-{
-	mLanguage = s;
-}
-
-QString MpShareData::language() const
-{
-	return mLanguage;
-}
-
-void MpShareData::setUnknownTr( const QString& s )
-{
-    mUnknownTr = s;
-}
-
-QString MpShareData::objectType() const
-{
-    if ( !mSongData || mSongData->link().isEmpty() )
-    {
-        return "NOTE-APPEND";
-    }
-    // No link, append artist-song
-    return "URI";
-}
-
-int MpShareData::objectReservedLength() const
-{
-    return objectContent().length();
-}
-
-QString MpShareData::objectContent() const
-{
-    if ( mSongData && !mSongData->link().isEmpty() )
-    {
-        return mSongData->link();
-    }
-    // TODO: do we need to have right-to-left text direction here,
-    // i.e. putting the title before the artist in such a case?
-    return MUSIC_NOTE_SYMBOL + " " + artist() + ": " + title() + " " + OVI_URL;
-}
-
-QString MpShareData::title() const
-{
-    if ( mSongData && !mSongData->title().isEmpty() )
-    {
-        return mSongData->title();
-    }
-    return mUnknownTr;
-}
-
-QString MpShareData::artist() const
-{
-    if ( mSongData && !mSongData->artist().isEmpty() )
-    {
-        return mSongData->artist();
-    }
-    return mUnknownTr;
-}
-
-QString MpShareData::albumArtBase64() const
-{
-    return mSongData ? mSongData->albumArtBase64() : "";
-}
-
-#endif // SHARE_FUNC_ENABLED
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/UT_ALL_mpdetailsviewplugin.pkg	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/tsrc/UT_ALL_mpdetailsviewplugin.pkg	Fri Aug 06 16:51:36 2010 -0500
@@ -27,21 +27,11 @@
 
 ; Executable and default resource files
 
-"/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_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"
 
 "/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"
-
-
-
Binary file mpviewplugins/mpdetailsviewplugin/tsrc/UT_ALL_mpdetailsviewplugin.sisx has changed
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/megapak.pkg	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +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: Metapackage for all unit tests
-;
-; Language
-&EN
-
-; SIS header: name, uid, version
-#{"megapak"},(0xEEEECAFE),1,0,0
-
-; Localised Vendor name
-%{"Vendor"}
-
-; Unique Vendor name
-:"Vendor"
-
-
-; Manual PKG pre-rules from PRO files
-; Default HW/platform dependencies
-;[0x101F7961],0,0,0,{"S60ProductID"}
-;[0x102032BE],0,0,0,{"S60ProductID"}
-;[0x102752AE],0,0,0,{"S60ProductID"}
-;[0x1028315F],0,0,0,{"S60ProductID"}
- 
-; Default dependency to Qt libraries
-;(0x2001E61C), 4, 6, 3, {"Qt"}
-; Dependency to Qt Webkit
-;(0x200267C2), 4, 6, 3, {"QtWebKit"}
-
-; Embedded SIS files
-@"./unittest_mpdetailssharedialog/unittest_mpdetailssharedialog.sisx", (0xE3fe6204)
-@"./unittest_mpdetailsview/UT_detailsview.sisx", (0xE003e880)
-@"./unittest_mpdetailsviewplugin/UT_mpdetailsviewplugin.sisx", (0xE003e881)
-@"./unittest_mpquerymanager/UT_mpquerymanager.sisx", (0xE003e882)
-@"./unittest_mpsharedata/unittest_mpsharedata.sisx", (0xE5d27be8)
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/tsrc.pro	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/tsrc/tsrc.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -16,11 +16,9 @@
 
 TEMPLATE = subdirs
 
-SUBDIRS += unittest_mpdetailssharedialog \
-           unittest_mpdetailsview \
-           unittest_mpdetailsviewplugin \
-           unittest_mpquerymanager \
-           unittest_mpsharedata
+SUBDIRS += unittest_mpdetailsview \
+           unittest_mpdetailsviewplugin
+#           unittest_mpquerymanager
 
 CONFIG += ordered
 
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailssharedialog/UT_mpdetailssharedialog.pkg	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +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: 
-;
-; Language
-&EN
-
-; SIS header: name, uid, version
-#{"unittest_mpdetailssharedialog"},(0xE3fe6204),1,0,0
-
-; Localised Vendor name
-%{"Vendor"}
-
-; Unique Vendor name
-:"Vendor"
-
-
-; Manual PKG pre-rules from PRO files
-; Default HW/platform dependencies
-;[0x101F7961],0,0,0,{"S60ProductID"}
-;[0x102032BE],0,0,0,{"S60ProductID"}
-;[0x102752AE],0,0,0,{"S60ProductID"}
-;[0x1028315F],0,0,0,{"S60ProductID"}
- 
-; Default dependency to Qt libraries
-;(0x2001E61C), 4, 6, 3, {"Qt"}
-; Dependency to Qt Webkit
-;(0x200267C2), 4, 6, 3, {"QtWebKit"}
-
-; Executable and default resource files
-"/epoc32/release/armv5/udeb/unittest_mpdetailssharedialog.exe"    - "!:\sys\bin\unittest_mpdetailssharedialog.exe"
-"/epoc32/data/z/resource/apps/unittest_mpdetailssharedialog.rsc"    - "!:\resource\apps\unittest_mpdetailssharedialog.rsc"
-"/epoc32/data/z/private/10003a3f/import/apps/unittest_mpdetailssharedialog_reg.rsc"    - "!:\private\10003a3f\import\apps\unittest_mpdetailssharedialog_reg.rsc"
-
-; Manual PKG post-rules from PRO files
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailssharedialog/inc/unittest_mpdetailssharedialog.h	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-/*
-* 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 mpdetailssharedialog
-*
-*/
-
-#ifndef UNITTEST_MPDETAILSSHAREDIALOG_H_
-#define UNITTEST_MPDETAILSSHAREDIALOG_H_
-
-#include <QtTest/QtTest>
-
-class MpDetailsShareDialog;
-class MpSongData;
-
-class TestMpDetailsShareDialog : public QObject
-{
-    Q_OBJECT
-
-public:
-
-    TestMpDetailsShareDialog();
-    virtual ~TestMpDetailsShareDialog();
-
-signals:
-
-public slots:
-    void initTestCase();
-    void cleanupTestCase();
-    void init();
-    void cleanup();
-
-private slots:
-    void testIndexLoadOk();
-    void testConstruction();
-
-private:
-    MpDetailsShareDialog *mTest;
-    MpSongData* mSongData;
-
-};
-
-
-#endif /* UNITTEST_MPDETAILSSHAREDIALOG_H_ */
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailssharedialog/sis.bat	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-@rem
-@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-@rem All rights reserved.
-@rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
-@rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
-@rem
-@rem Initial Contributors:
-@rem Nokia Corporation - initial contribution.
-@rem
-@rem Contributors:
-@rem
-@rem Description: 
-@rem
-
-@echo off
-del *.sisx
-makesis UT_mpdetailssharedialog.pkg
-signsis UT_mpdetailssharedialog.sis UT_mpdetailssharedialog.sisx %RNDCERTS_PATH%\Nokia_RnDCert_02.der %RNDCERTS_PATH%\Nokia_RnDCert_02.key
-del UT_mpdetailssharedialog.sis
\ No newline at end of file
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailssharedialog/src/unittest_mpdetailssharedialog.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,139 +0,0 @@
-/*
-* 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 MpDetailsShareDialog
-*
-*/
-#include <QSignalSpy>
-#ifdef Q_OS_SYMBIAN
-#include <hbapplication.h>
-#include <hbmainwindow.h>
-#include <hbicon.h>
-#endif
-#include"unittest_mpdetailssharedialog.h"
-#include "hbmessagebox.h"
-
-// Do this so we can access all member variables.
-#define private public
-#include "mpdetailssharedialog.h"
-#undef private
-#include "mpsharedata.h"
-#include "mpsongdata.h"
-
-/*!
- Make our test case a stand-alone executable that runs all the test functions.
- */
-#ifdef Q_OS_SYMBIAN
-int main(int argc, char *argv[])
-{
-
-    HbApplication app(argc, argv);
-    HbMainWindow window;
-
-    TestMpDetailsShareDialog 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_testmpdetailssharedialog.txt";
-
-        return QTest::qExec(&tv, 3, pass);
-    }
-}
-#endif
-
-#ifdef Q_OS_WIN32
-QTEST_MAIN(TestMpDetailsShareDialog)
-#endif
-//Constructor
-TestMpDetailsShareDialog::TestMpDetailsShareDialog()
-    : mTest(0)
-{
-
-}
-
-//Destructor
-TestMpDetailsShareDialog::~TestMpDetailsShareDialog()
-{
-    if (mTest) delete mTest;
-}
-
-/*!
- Called before the first testfunction is executed.
- */
-void TestMpDetailsShareDialog::initTestCase()
-{
-    qDebug() << "unit test for mpdetailssharedialog begin.";
-}
-
-/*!
- Called after the last testfunction was executed.
- */
-void TestMpDetailsShareDialog::cleanupTestCase()
-{
-    qDebug() << "unit test for mpdetailssharedialog end.";
-    QCoreApplication::processEvents();
-}
-
-/*!
- Called before each testfunction is executed.
- */
-void TestMpDetailsShareDialog::init()
-{
-    mSongData = new MpSongData();
-    mTest = new MpDetailsShareDialog();
-    mTest->initialize(mSongData, "unknown");
-}
-
-/*!
- Called after every testfunction.
- */
-void TestMpDetailsShareDialog::cleanup()
-{
-    delete mTest;
-    delete mSongData;
-    mTest = 0;
-    mSongData = 0;
-}
-
-void TestMpDetailsShareDialog::testConstruction()
-{
-    mTest->updateSharedData();
-    mTest->debugJs("Test");
-    mTest->errorHandler("Test error", "Test message");
-    mTest->clearCache();
-    mTest->addContext();
-
-    mTest->mShareNetAccMan = NULL;
-    mTest->mShareWebView = NULL;
-    mTest->updateSharedData();
-    mTest->debugJs("Test");
-    mTest->errorHandler("Test error", "Test message");
-    mTest->clearCache();
-    mTest->addContext();
-    //nothing to verify
-    QCOMPARE(true, true);
-}
-
-void TestMpDetailsShareDialog::testIndexLoadOk()
-{
-    mTest->onIndexLoad(true);
-    mTest->onIndexLoad(false);
-    //nothing to verify
-    QCOMPARE(true, true);
-}
-
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailssharedialog/stub/inc/hbmessagebox.h	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +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: stub file for hbmessagebox class.
-*
-*/
-#ifndef HBMESSAGEBOX_H
-#define HBMESSAGEBOX_H
-
-#include <QObject>
-
-class HbMessageBox : public QObject
-{
-    Q_OBJECT
-public:
-    explicit HbMessageBox();
-    virtual ~HbMessageBox();
-
-public:
-    static void information(const QString &warningText);
-    static void warning(const QString &warningText);
-};
-
-#endif // HB_MESSAGEBOX_H
-
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailssharedialog/stub/inc/mpsongdata.h	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,95 +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: Stub of Metadata of song
-*
-*/
-
-#ifndef MPSONGDATA_H
-#define MPSONGDATA_H
-
-#include <QObject>
-#include <QString>
-#include <QPixmap>
-
-
-//forward declartions
-class QIcon;
-
-//class declaration
-class MpSongData : public QObject
-{
-    Q_OBJECT
-
-public:
-    explicit MpSongData( QObject *parent=0 );
-    virtual ~MpSongData();
-    
-    bool setTitle( const QString &title );
-    bool setAlbum( const QString &album );
-    bool setArtist( const QString &artist );
-    bool setComment( const QString &comment );
-    void setAlbumArtUri( const QString &albumArtUri );
-    bool setYear( int date );
-    bool setGenre( const QString &genre );
-    bool setComposer( const QString &compoer );
-    bool setAlbumTrack( const QString &albumtrack );
-    void setLink( const QString &link );
-
-    // inform details view when basic information is ready to accelerate UI update
-    void commitPlaybackInfo();
-    // inform details view when details information is ready
-    void commitSongDetailInfo();
-    void removeAlbumArtFile() const; //TODO: Remove when base64 starts to work
-
-public slots:
-    void thumbnailReady( const QPixmap& pixmap, void *data, int id, int error );
-    
-    int reservedLength() const { return mLink.length() + mTitle.length() + mArtist.length(); }
-
-    QString title() const;
-    QString album() const;
-    QString artist() const;
-    QString comment() const;
-    void albumArt( QPixmap& pixmap );
-    QString year() const;
-    QString genre() const;
-    QString composer() const;
-    QString albumTrack() const;
-    QString link() const;
-    QString albumArtBase64() const;
-
-signals:
-    void albumArtReady();
-    void playbackInfoChanged();
-	void songDetailInfoChanged();	
-
-private:
-    QString                  mTitle;
-    QString                  mAlbum;
-    QString                  mArtist;
-    QString                  mComment;
-    QString                  mComposer;
-    QString                  mGenre;
-    QString                  mYear;
-    QString                  mAlbumTrack;
-    QPixmap                  mAlbumArt;
-    int                      mReqId;
-    QString                  currentAAUri; 
-    QPixmap                  mDefaultAlbumArt;
-    QString                  mLink;
-    
-    Q_DISABLE_COPY(MpSongData)
-};
-
-#endif // MPSONGDATA_H
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailssharedialog/stub/inc/qsysteminfo.h	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +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: Stub of QSystemInfo
-*
-*/
-
-#ifndef QSYSTEMINFO_H
-#define QSYSTEMINFO_H
-
-#include <QObject>
-#include <QString>
-
-
-//class declaration
-class QSystemInfo : public QObject
-{
-    Q_OBJECT
-
-public:
-    QSystemInfo( QObject *parent = 0 );
-    ~QSystemInfo();
-    
-    QString currentLanguage();
-    QString currentCountryCode();    
-};
-
-#define QTM_USE_NAMESPACE ;
-
-#endif // QSYSTEMINFO_H
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailssharedialog/stub/src/hbmessagebox.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +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: Stub
-*
-*/
-
-#include "hbmessagebox.h"
-
-HbMessageBox::HbMessageBox()
-{
-
-}
-
-HbMessageBox::~HbMessageBox()
-{
-
-}
-
-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 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,337 +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: Playback Data provider for playback view.
-*
-*/
-
-
-#include <QString>
-#include <QPixmap>
-
-#include "mpsongdata.h"
-#include "mptrace.h"
-
-
-const int KUndefined = -1;
-
-/*!
-    \class MpSongData
-    \brief Music Player song metadata.
-
-    Song data provide acces to current playing song metadata
-*/
-    
-/*!
-    \fn void albumArtReady()
-
-    This signal is albuma alrt is ready.
- */
-
-/*!
-    \fn void playbackInfoChanged()
-
-    This signal is emitted when basic information is available
- */
-    
-/*!
-    \fn void songDetailInfoChanged()
-
-    This signal is emitted when detail information is available
- */
-    
-       
-
-/*!
-    Constructs a new MpSongData.
- */
-MpSongData::MpSongData( QObject *parent )
-    : QObject( parent ),
-      mTitle( NULL ),
-      mAlbum( NULL ),
-      mArtist( NULL ),
-      mComposer( NULL),
-      mGenre( NULL ),
-      mYear( NULL ),
-      mAlbumTrack( NULL ),
-      mAlbumArt(),
-      mReqId( KUndefined )
-{
-    TX_ENTRY_ARGS("Stub")
-}
-
-/*!
- Constructs a new MpSongData.
- */
-MpSongData::~MpSongData()
-{
-    TX_ENTRY_ARGS("Stub")
-}
-
-/*!
- Returns the song album art on \a pixmap.
-*/
-void MpSongData::albumArt( QPixmap& pixmap )
-{
-     if ( !mAlbumArt.isNull() ) {
-        pixmap = mAlbumArt;
-     }
-     else {
-         pixmap = QPixmap();
-     }
-}
-
-
-/*!
- Returns the song title.
-*/
-QString MpSongData::title() const
-{
-    return mTitle;
-}
-
-/*!
- Returns the song album.
-*/
-QString MpSongData::album() const
-{
-    return mAlbum;
-}
-
-/*!
- Returns the song artist.
-*/
-QString MpSongData::artist() const
-{
-    return mArtist;
-}
-
-/*!
- Returns comment
-*/
-QString MpSongData::comment() const
-{
-    return mComment;
-}
-
-/*!
- Returns the song composer.
-*/
-QString MpSongData::composer() const
-{
-    return mComposer;
-}
-
-
-/*!
- Returns the song genre.
-*/
-QString MpSongData::genre() const
-{
-    return mGenre;
-}
-
-
-/*!
- Returns the album track.
-*/
-QString MpSongData::albumTrack() const
-{
-    return mAlbumTrack;
-}
-
-/*!
- Returns link
-*/
-QString MpSongData::link() const
-{
-    return mLink;
-}
-
-/*!
- Returns the release date.
-*/
-QString MpSongData::year() const
-{
-    return mYear;
-}
-
-
-/*!
- Sets the song \a title, returns true if the value is new.
-*/
-bool MpSongData::setTitle( const QString &title )
-{
-    bool change = false;
-    if ( title != mTitle ) {
-        change = true;
-        mTitle = title;
-    }
-    return change;
-}
-
-/*!
- Sets the song \a album, returns true if the value is new.
-*/
-bool MpSongData::setAlbum( const QString &album )
-{
-    bool change = false;
-    if ( album != mAlbum ) {
-        change = true;
-        mAlbum = album;
-    }
-    return change;
-}
-
-/*!
- Sets the song \a artist, returns true if the value is new.
-*/
-bool MpSongData::setArtist( const QString &artist )
-{
-    bool change = false;
-    if ( artist != mArtist ) {
-        change = true;
-        mArtist = artist;
-    }
-    return change;
-}
-
-/*!
- Sets the song \a comment, returns true if the value is new.
-*/
-bool MpSongData::setComment( const QString &comment)
-{
-    bool change = false;
-    if ( comment != mComment ) {
-        change = true;
-        mComment = comment;
-    }
-    return change;
-}
-
-
-/*!
- Sets the song \a composer, returns true if the value is new.
-*/
-bool MpSongData::setComposer( const QString &composer )
-{
-    bool change = false;
-    if ( composer != mComposer ) {
-        change = true;
-        mComposer = composer;
-    }
-    return change;
-}
-
-/*!
- Sets the song \a genre, returns true if the value is new.
-*/
-bool MpSongData::setGenre( const QString &genre )
-{
-    bool change = false;
-    if ( genre != mGenre ) {
-        change = true;
-        mGenre = genre;
-    }
-    return change;
-}
-
-
-/*!
- Sets the song \a date, returns true if the value is new.
-*/
-bool MpSongData::setYear( int year )
-{
-    bool change = false;
-    if ( QString::number(year) != mYear ) {
-        change = true;
-        if ( year >= 0 && year < 9999 ) {
-            mYear = QString::number(year);
-        }
-    }
-    return change;
-}
-
-/*!
- Sets the \a album track, returns true if the value is new.
-*/
-bool MpSongData::setAlbumTrack( const QString &track )
-{
-    bool change = false;
-    if ( track != mAlbumTrack ) {
-        change = true;
-        mAlbumTrack = track;
-    }
-    return change;
-}
-
-/*!
- Sets the \a link
-*/
-void MpSongData::setLink( const QString &link )
-{
-    mLink = link;
-}
-
-/*!
- Sets the song \a albumArtUri.
-*/
-void MpSongData::setAlbumArtUri( const QString &albumArtUri)
-{
-    Q_UNUSED(albumArtUri);
-    mAlbumArt = mDefaultAlbumArt;
-    emit albumArtReady();
-}
-
-
-/*!
- Slot to handle the album art thumb.
-*/
-void MpSongData::thumbnailReady(
-        const QPixmap& pixmap,
-        void *data,
-        int id,
-        int error  )
-{
-    Q_UNUSED( pixmap );
-    Q_UNUSED( data );
-    Q_UNUSED( id );
-    Q_UNUSED( error );
-}
-
-/*!
- Emit signal when playback information changed, such as artist, track name
-*/
-void MpSongData::commitPlaybackInfo()
-{
-    emit playbackInfoChanged();
-}
-
-/*!
- Emit signal when song detail information changed
-*/
-void MpSongData::commitSongDetailInfo()
-{
-    emit songDetailInfoChanged();
-}
-
-QString MpSongData::albumArtBase64() const
-{
-
-    return QString("");
-}
-
-void MpSongData::removeAlbumArtFile() const
-{
-
-}
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailssharedialog/stub/src/qsysteminfo.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +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: Stub of QSystemInfo
-*
-*/
-
-
-#include "qsysteminfo.h"
-
-QSystemInfo::QSystemInfo( QObject *parent )
-    : QObject( parent )
-{
-    //TX_ENTRY
-    //TX_EXIT
-}
-
-QSystemInfo::~QSystemInfo()
-{
-    //TX_ENTRY
-    //TX_EXIT
-}
-
-QString QSystemInfo::currentLanguage() { return "fi"; };
-QString QSystemInfo::currentCountryCode() { return "Fi"; };
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailssharedialog/unittest_mpdetailssharedialog.pro	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +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: 
-#
-TEMPLATE = app
-CONFIG += qtestlib \
-          symbian_test \
-          hb \
-          mobility
-
-QT += webkit \
-    network \
-    xml
-
-MOBILITY += bearer systeminfo
-
-TARGET = unittest_mpdetailssharedialog
-
-TARGET.CAPABILITY = All -TCB
-
-DEPENDPATH += .
-INCLUDEPATH += ./inc \
-    ./stub/inc \
-    ../../inc \
-    ../../../../inc
-INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
-
-DEFINES += SHARE_FUNC_ENABLED SHARE_PLAYER_RND
-
-# Input
-HEADERS += inc/unittest_mpdetailssharedialog.h \
-    ../../inc/mpdetailssharedialog.h \
-    ../../inc/mpsharedata.h \
-    stub/inc/mpsongdata.h \
-    stub/inc/hbmessagebox.h
-win32:{
-HEADERS += stub/inc/qsysteminfo.h
-}
-SOURCES += src/unittest_mpdetailssharedialog.cpp \
-    ../../src/mpdetailssharedialog.cpp \
-    ../../src/mpsharedata.cpp \
-    stub/src/mpsongdata.cpp \
-    stub/src/hbmessagebox.cpp
-
-win32:{
-SOURCES += stub/src/qsysteminfo.cpp
-}
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/inc/unittest_mpdetailsview.h	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/inc/unittest_mpdetailsview.h	Fri Aug 06 16:51:36 2010 -0500
@@ -53,11 +53,7 @@
     void testdeactivateView();
     void testbackSlot();
     void testAlbumArtChanged();
-    void testHandleNetworkError();
-    void testCanQueryRecommendations();
-    void testCanQuerySharePlayerLink();
     void testHandlePlaybackInfoChanged();
-    void testClearInspireMe();
     void testHandleDetailsGroupBoxToggled();
     void testHandleInspireMeGroupBoxToggled();
     
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/src/unittest_mpdetailsview.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/src/unittest_mpdetailsview.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -134,9 +134,6 @@
 {
     mTest->activateView();
     QCOMPARE( mTest->mActivated, true );
-
-    QCOMPARE( mTest->mInspireMeOpen, MpSettingsManager::inspireMe() );
-    QCOMPARE( mTest->mSongDetailsGbOpen, MpSettingsManager::songDetailsGb() );
 }
 
 void TestMpDetailsView::testdeactivateView()
@@ -164,77 +161,6 @@
     QVERIFY( mTest->mAlbumArt->icon().isNull() == false );
 }
 
-void TestMpDetailsView::testHandleNetworkError()
-{
-    mTest->handleNetworkError();
-    QVERIFY( mTest->mInspireMeQueryOngoing == false );
-    QVERIFY( mTest->mInspireMeQueryRendered == false );
-}
-
-void TestMpDetailsView::testCanQueryRecommendations()
-{
-    mTest->mSongData = new MpSongData();
-    mTest->mSongData->mAlbum = QString( "album" );
-    mTest->mSongData->mArtist = QString( "artist" );
-    mTest->mInspireMeGroupBox->setCollapsed( true );
-    QVERIFY( mTest->canQueryRecommendations() == false );
-
-    mTest->mSongData->mAlbum = QString( "album" );
-    mTest->mSongData->mArtist = QString();
-    mTest->mInspireMeGroupBox->setCollapsed( true );
-    QVERIFY( mTest->canQueryRecommendations() == false );
-
-    mTest->mSongData->mAlbum = QString();
-    mTest->mSongData->mArtist = QString( "artist" );
-    mTest->mInspireMeGroupBox->setCollapsed( true );
-    QVERIFY( mTest->canQueryRecommendations() == false );
-
-    mTest->mSongData->mAlbum = QString();
-    mTest->mSongData->mArtist = QString();
-    mTest->mInspireMeGroupBox->setCollapsed( true );
-    QVERIFY( mTest->canQueryRecommendations() == false );
-
-    mTest->mSongData->mAlbum = QString( "album" );
-    mTest->mSongData->mArtist = QString( "artist" );
-    mTest->mInspireMeGroupBox->setCollapsed( false );
-    QVERIFY( mTest->canQueryRecommendations() == true );
-
-    mTest->mSongData->mAlbum = QString( "album" );
-    mTest->mSongData->mArtist = QString();
-    mTest->mInspireMeGroupBox->setCollapsed( false );
-    QVERIFY( mTest->canQueryRecommendations() == true );
-
-    mTest->mSongData->mAlbum = QString();
-    mTest->mSongData->mArtist = QString( "artist" );
-    mTest->mInspireMeGroupBox->setCollapsed( false );
-    QVERIFY( mTest->canQueryRecommendations() == true );
-
-    mTest->mSongData->mAlbum = QString();
-    mTest->mSongData->mArtist = QString();
-    mTest->mInspireMeGroupBox->setCollapsed( false );
-    QVERIFY( mTest->canQueryRecommendations() == false );
-}
-
-void TestMpDetailsView::testCanQuerySharePlayerLink()
-{
-    mTest->mSongData = new MpSongData();
-    mTest->mSongData->mTitle = QString( "title" );
-    mTest->mSongData->mArtist = QString( "artist" );
-    QVERIFY( mTest->canQuerySharePlayerLink() == true );
-
-    mTest->mSongData->mTitle = QString();
-    mTest->mSongData->mArtist = QString( "artist" );
-    QVERIFY( mTest->canQuerySharePlayerLink() == false );
-
-    mTest->mSongData->mTitle = QString( "title" );
-    mTest->mSongData->mArtist = QString();
-    QVERIFY( mTest->canQuerySharePlayerLink() == false );
-
-    mTest->mSongData->mTitle = QString();
-    mTest->mSongData->mArtist = QString();
-    QVERIFY( mTest->canQuerySharePlayerLink() == false );
-}
-
 void TestMpDetailsView::testHandlePlaybackInfoChanged()
 {
     mTest->mSongData = new MpSongData();
@@ -257,12 +183,6 @@
     QCOMPARE( mTest->mArtistText->plainText(), QString( "txt_mus_other_unknown6" ) );
 }
 
-void TestMpDetailsView::testClearInspireMe()
-{
-    mTest->clearInspireMe();
-    QVERIFY( mTest->mInspireList->count() == 0 );
-}
-
 void TestMpDetailsView::testHandleDetailsGroupBoxToggled()
 {
     mTest->handleDetailsGroupBoxToggled( false );
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/stub/inc/mpdetailssharedialog.h	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +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: 
-*
-*/
-
-#ifndef MPDETAILSSHAREDIALOG_H
-#define MPDETAILSSHAREDIALOG_H
-
-#include <HbDialog>
-
-class QGraphicsWebView;
-class QNetworkAccessManager;
-class MpSongData;
-
-class MpDetailsShareDialog : public HbDialog
-{
-    Q_OBJECT
-
-public:
-    MpDetailsShareDialog();
-    void initialize( MpSongData* aSongData );
-    virtual ~MpDetailsShareDialog();
-    void reload();
-
-public slots:
-    void updateSharedData();
-    void onIndexLoad( bool ok );
-
-private:
-    QObject*               mSharedData;     // NOT owned.
-    QGraphicsWebView*      mShareWebView;   // Owned by HbDialog
-    QNetworkAccessManager* mShareNetAccMan; // Owned
-};
-
-#endif // MPDETAILSSHAREDIALOG_H
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/stub/inc/mpquerymanager.h	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/stub/inc/mpquerymanager.h	Fri Aug 06 16:51:36 2010 -0500
@@ -19,12 +19,11 @@
 
 #include <qnetworkconfigmanager.h>
 #include <qnetworksession.h>
-#include <QPixmap>
+#include <HbIcon>
 #include <QPointer>
 #include "mpviewbase.h"
 
 class MpSongData;
-class MpDetailsShareDialog;
 class MpEngine;
 
 
@@ -37,18 +36,21 @@
     ~MpQueryManager();
     
 public:
+    void reset();
+    bool isLocalMusicStore() const;
     void clearNetworkReplies();
     void queryLocalMusicStore( QString mArtist,QString mAlbum,QString mTitle );
+    void queryLocalMusicStore();
     void queryInspireMeItems( QString mArtist,QString mAlbum,QString mTitle );
     void clearRecommendations();
     
-    QStringList recommendationSongs();
-    QStringList recommendationArtists();
+    int recommendationsCount() const;
+    QString recommendedSong(int index) const;
+    QString recommendedArtist(int index) const;
     QStringList recommendationAlbumArtsLink();
-    QMap<QString, QPixmap>  recommendationAlbumArtsMap();
+    HbIcon recommendedAlbumArt(int index) const;
     int &albumArtsReadyCount();
-    
-    void insertMapItem( const QString &uri, const QPixmap &pixmap );    
+       
 
 signals:
     void onlineStatusChanged( bool state );
@@ -57,7 +59,6 @@
 private:    
    
     int                     mDownloadedAlbumArts;  
-    MpDetailsShareDialog*   mSharePopup;
     
     QString                 mArtist;
     QString                 mAlbum;
@@ -68,7 +69,7 @@
     QStringList          mRecommendationSongs;
     QStringList          mRecommendationArtists;
     QStringList          mRecommendationAlbumArtsLink;
-    QMap<QString, QPixmap>  mRecommendationAlbumArtsMap;
+    QMap<QString, HbIcon>  mRecommendationAlbumArtsMap;
     int                     mAlbumArtsReadyCount;
        
 };
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/stub/src/mpdetailssharedialog.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +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: 
-*
-*/
-
-#include "mpdetailssharedialog.h"
-#include "mptrace.h"
-#include <QObject>
-#include <QGraphicsWebView>
-#include <QGraphicsScene>
-#include <QWebPage>
-#include <QWebFrame>
-#include <QNetworkAccessManager>
-#include <QNetworkDiskCache>
-#include <QDesktopServices>
-#include <QNetworkProxyFactory>
-
-
-// For allowing local caching of javascript files loaded by popup
-class MpNetworkAccessManager : public QNetworkAccessManager
-{
-public:
-    MpNetworkAccessManager() { };
-
-private:
-    QNetworkReply *createRequest( Operation /*op*/,
-                                 const QNetworkRequest &/*request*/,
-                                 QIODevice */*outgoingData = 0*/ ) { return 0; }
-};
-
-
-MpDetailsShareDialog::MpDetailsShareDialog(  )
-    : mSharedData(  ),
-      mShareWebView( 0 ),
-      mShareNetAccMan( 0 )
-{
-    TX_ENTRY_ARGS("STUB")
-    TX_EXIT_ARGS("STUB")
-}
-
-MpDetailsShareDialog::~MpDetailsShareDialog()
-{
-    TX_ENTRY_ARGS("STUB")
-    TX_EXIT_ARGS("STUB")
-}
-
-void MpDetailsShareDialog::initialize( MpSongData* aSongData )
-{
-    Q_UNUSED(aSongData)
-    TX_ENTRY_ARGS("STUB")
-    TX_EXIT_ARGS("STUB")
-}
-
-void MpDetailsShareDialog::updateSharedData()
-{
-    TX_ENTRY_ARGS("STUB")
-    TX_EXIT_ARGS("STUB")
-}
-
-void MpDetailsShareDialog::reload()
-{
-    TX_ENTRY_ARGS("STUB")
-    TX_EXIT_ARGS("STUB")
-}
-
-void MpDetailsShareDialog::onIndexLoad( bool aOk )
-{
-    Q_UNUSED(aOk)
-    TX_ENTRY_ARGS("STUB")
-    TX_EXIT_ARGS("STUB")
-}
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/stub/src/mpquerymanager.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/stub/src/mpquerymanager.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -21,7 +21,6 @@
 #include <QFile>
 #include <QUrl>
 
-#include "mpdetailssharedialog.h"
 #include "mptrace.h"
 
 const int KRecommendationNum = 2;
@@ -56,6 +55,26 @@
     mTitle=title;
     TX_EXIT_ARGS("STUB")    
 }
+
+void MpQueryManager::queryLocalMusicStore()
+{
+    TX_ENTRY_ARGS("STUB")
+    TX_EXIT_ARGS("STUB")    
+}
+
+void MpQueryManager::reset()
+{
+    TX_ENTRY_ARGS("STUB")
+    TX_EXIT_ARGS("STUB")    
+}
+
+bool MpQueryManager::isLocalMusicStore() const
+{
+    TX_ENTRY_ARGS("STUB - will always return TRUE")
+    TX_EXIT_ARGS("STUB") 
+    return true;
+}
+
     
 void MpQueryManager::queryInspireMeItems(QString artist,QString album,QString title)
 {
@@ -91,40 +110,18 @@
     TX_EXIT_ARGS("STUB")    
 }
 
-/*!
- Return recommendation songs
- */
-QStringList MpQueryManager::recommendationSongs()
-{
-    TX_LOG  
-    return mRecommendationSongs;
-}
 
 /*!
  Return recommendation artists
  */
-QStringList MpQueryManager::recommendationArtists()
-{
-    TX_LOG  
-    return mRecommendationArtists;
-}
-
-/*!
- Return recommendation album arts links
- */
-QStringList MpQueryManager::recommendationAlbumArtsLink()
+QString MpQueryManager::recommendedArtist(int index) const
 {
-    TX_LOG  
-    return mRecommendationAlbumArtsLink;
-}
-
-/*!
- Return map of name and pixmap
- */
-QMap<QString, QPixmap>  MpQueryManager::recommendationAlbumArtsMap()
-{
-    TX_LOG  
-    return mRecommendationAlbumArtsMap;
+    QString result;
+    if( (0 <= index) && (index < mRecommendationArtists.count())) {
+        result = mRecommendationArtists.at(index);
+    }
+    TX_LOG_ARGS ("recommendedArtist: " << result);    
+    return result;
 }
 
 /*!
@@ -136,13 +133,23 @@
     return mAlbumArtsReadyCount;
 }
 
-/*!
- Insert one uri & pixmap item into map
- */
-void MpQueryManager::insertMapItem( const QString &uri, const QPixmap &pixmap )
+int MpQueryManager::recommendationsCount() const
 {
-    TX_ENTRY_ARGS("STUB Map Item URI: " << uri );
-    mRecommendationAlbumArtsMap.insert( uri, pixmap );
-    TX_EXIT_ARGS("STUB")
+    TX_LOG_ARGS ("count: " << mRecommendationSongs.count());
+    return mRecommendationSongs.count();
 }
 
+QString MpQueryManager::recommendedSong(int index) const
+{
+    QString result;
+    if( (0 <= index) && (index < mRecommendationSongs.count())) {
+        result = mRecommendationSongs.at(index);
+    }
+    return result; 
+}
+
+HbIcon MpQueryManager::recommendedAlbumArt(int index) const
+{
+    TX_LOG_ARGS( "index = " << index )
+    return mRecommendationAlbumArtsMap.value( mRecommendationAlbumArtsLink.at( index ) );
+}
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/unittest_mpdetailsview.pro	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpdetailsview/unittest_mpdetailsview.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -45,7 +45,6 @@
 		   stub/inc/mpenginefactory.h \
            stub/inc/mpsongdata.h \
            stub/inc/thumbnailmanager_qt.h \
-           stub/inc/mpdetailssharedialog.h \
            ../../../../inc/mpviewbase.h
            
 
@@ -56,6 +55,5 @@
 		   stub/src/mpenginefactory.cpp \		       
            stub/src/mpsongdata.cpp \
            stub/src/thumbnailmanager_qt.cpp \
-           stub/src/mpdetailssharedialog.cpp
 
 RESOURCES += ../../resources/mpdetailsviewresources.qrc
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpquerymanager/src/unittest_mpquerymanager.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpquerymanager/src/unittest_mpquerymanager.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -142,17 +142,26 @@
 void TestMpQueryManager::testrecommendationArtists()
 {
     QStringList recommendedArtists;
+    QStringList recommendedSongs;
     QStringList recommendedArtistsRecd;
         
     QString recommendedArtist1("Artist1");
     QString recommendedArtist2("Artist2");
+    QString song1("Song1");
+    QString song2("Song2");
            
     recommendedArtists.append(recommendedArtist1);
     recommendedArtists.append(recommendedArtist2);
+    
+    recommendedSongs.append(song1);
+    recommendedSongs.append(song2);
         
     mTest->mRecommendationArtists.append(recommendedArtists);
-        
-    recommendedArtistsRecd << mTest->recommendationArtists();
+    mTest->mRecommendationSongs.append(recommendedSongs);
+    
+    for(int i = 0; i < mTest->recommendationsCount(); ++i) {
+        recommendedArtistsRecd << mTest->recommendedArtist(i);
+    }    
         
     QCOMPARE(recommendedArtists,recommendedArtistsRecd);
 }
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpquerymanager/stub/inc/thumbnailmanager_qt.h	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpquerymanager/stub/inc/thumbnailmanager_qt.h	Fri Aug 06 16:51:36 2010 -0500
@@ -112,6 +112,7 @@
     int getThumbnail( const QString& fileName, void * clientData = NULL,
             int priority = tnmWrapperPriorityIdle );
     bool cancelRequest( int id );
+    void deleteThumbnails( const QString& fileName );
 
 signals:
 
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpquerymanager/stub/src/thumbnailmanager_qt.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpquerymanager/stub/src/thumbnailmanager_qt.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -107,3 +107,8 @@
     mCancelCounter++;
     return true;
 }
+
+void ThumbnailManager::deleteThumbnails( const QString& fileName )
+{
+    TX_ENTRY_ARGS("Stub (NOP)")
+}
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpquerymanager/unittest_mpquerymanager.pro	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpquerymanager/unittest_mpquerymanager.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -31,7 +31,8 @@
 
 INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
 
-LIBS += -lqtbearer.dll
+LIBS += -lqtbearer.dll \
+        -lxqsysinfo
 
 # Input
 HEADERS += inc/unittest_mpquerymanager.h \
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpsharedata/UT_mpsharedata.pkg	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +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: 
-;
-; Language
-&EN
-
-; SIS header: name, uid, version
-#{"unittest_mpsharedata"},(0xE5d27be8),1,0,0
-
-; Localised Vendor name
-%{"Vendor"}
-
-; Unique Vendor name
-:"Vendor"
-
-
-; Manual PKG pre-rules from PRO files
-; Default HW/platform dependencies
-; [0x101F7961],0,0,0,{"S60ProductID"}
-; [0x102032BE],0,0,0,{"S60ProductID"}
-; [0x102752AE],0,0,0,{"S60ProductID"}
-; [0x1028315F],0,0,0,{"S60ProductID"}
- 
-; Default dependency to Qt libraries
-; (0x2001E61C), 4, 6, 3, {"Qt"}
-
-; Executable and default resource files
-"/epoc32/release/armv5/udeb/unittest_mpsharedata.exe"    - "!:\sys\bin\unittest_mpsharedata.exe"
-"/epoc32/data/z/resource/apps/unittest_mpsharedata.rsc"    - "!:\resource\apps\unittest_mpsharedata.rsc"
-"/epoc32/data/z/private/10003a3f/import/apps/unittest_mpsharedata_reg.rsc"    - "!:\private\10003a3f\import\apps\unittest_mpsharedata_reg.rsc"
-
-; Manual PKG post-rules from PRO files
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpsharedata/inc/unittest_mpsharedata.h	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-/*
-* 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 mpsongdata
-*
-*/
-
-#ifndef UNITTEST_MPSHAREDATA_H_
-#define UNITTEST_MPSHAREDATA_H_
-
-#include <QtTest/QtTest>
-
-class MpShareData;
-
-class TestMpShareData : public QObject
-{
-    Q_OBJECT
-
-public:
-
-    TestMpShareData();
-    virtual ~TestMpShareData();
-
-signals:
-
-public slots:
-    void initTestCase();
-    void cleanupTestCase();
-    void init();
-    void cleanup();
-
-private slots:
-    void testOwner();
-    void testSongData();
-    void testErrorMessage();
-    void testUserName();
-    void testPassword();
-    void testObjectTypeWithLink();
-    void testObjectTypeWithoutLink();
-    void testObjectContentWithLink();
-    void testObjectContentWithTitleAndArtist();
-    void testObjectContentWithTitleOnly();
-    void testObjectContentWithArtistOnly();
-    void testObjectContentWithoutMetaInfo();
-    void testSongTitle();
-//    void testSongAlbum();
-    void testSongArtist();
-    void testAlbumArt();
-    void testLanguage();
-//    void testSongComment();
-//    void testSongAlbumArt();
-//    void testSongYear();
-//    void testSongGenre();
-//    void testSongComposer();
-//    void testSongAlbumTrack();
-//    void testSongLink();
-    void testSongNoInfo();
-
-private:
-    MpShareData *mTest;
-
-};
-
-
-#endif /* UNITTEST_MPSHAREDATA_H_ */
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpsharedata/sis.bat	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-@rem
-@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-@rem All rights reserved.
-@rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
-@rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
-@rem
-@rem Initial Contributors:
-@rem Nokia Corporation - initial contribution.
-@rem
-@rem Contributors:
-@rem
-@rem Description: 
-@rem
-
-@echo off
-del *.sisx
-makesis UT_mpsharedata.pkg
-signsis UT_mpsharedata.sis UT_mpsharedata.sisx %RNDCERTS_PATH%\Nokia_RnDCert_02.der %RNDCERTS_PATH%\Nokia_RnDCert_02.key
-del UT_mpsharedata.sis
\ No newline at end of file
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpsharedata/src/unittest_mpsharedata.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,272 +0,0 @@
-/*
-* 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 MpShareData
-*
-*/
-#include <QSignalSpy>
-#ifdef Q_OS_SYMBIAN
-#include <hbapplication.h>
-#include <hbmainwindow.h>
-#include <hbicon.h>
-#endif
-#include"unittest_mpsharedata.h"
-
-// Do this so we can access all member variables.
-#define private public
-#include "mpsharedata.h"
-#undef private
-#include "mpsongdata.h"
-
-/*!
- Make our test case a stand-alone executable that runs all the test functions.
- */
-#ifdef Q_OS_SYMBIAN
-int main(int argc, char *argv[])
-{
-
-    HbApplication app(argc, argv);
-    HbMainWindow window;
-
-    TestMpShareData 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_mpsharedata.txt";
-
-        return QTest::qExec(&tv, 3, pass);
-    }    
-}
-#endif
-
-#ifdef Q_OS_WIN32
-QTEST_MAIN(TestMpShareData)
-#endif
-//Constructor
-TestMpShareData::TestMpShareData()
-    : mTest(0)
-{
-
-}
-
-//Destructor
-TestMpShareData::~TestMpShareData()
-{
-    if (mTest) delete mTest;
-}
-
-/*!
- Called before the first testfunction is executed.
- */
-void TestMpShareData::initTestCase()
-{
-    qDebug() << "unit test for mpsharedata begin.";
-}
-
-/*!
- Called after the last testfunction was executed.
- */
-void TestMpShareData::cleanupTestCase()
-{
-    qDebug() << "unit test for mpsharedata end.";
-    QCoreApplication::processEvents();
-}
-
-/*!
- Called before each testfunction is executed.
- */
-void TestMpShareData::init()
-{
-    mTest = new MpShareData();
-    mTest->setUnknownTr("Unknown");
-}
-
-/*!
- Called after every testfunction.
- */
-void TestMpShareData::cleanup()
-{
-    delete mTest;
-    mTest = 0;
-}
-
-void TestMpShareData::testOwner()
-{
-    mTest->setOwner(this);
-    QCOMPARE(mTest->owner(), (QObject*) this);
-}
-
-void TestMpShareData::testSongData()
-{
-    MpSongData *song = new MpSongData();
-    mTest->setSongData(song);
-    QCOMPARE(mTest->songData(), song);
-    delete song;
-}
-
-void TestMpShareData::testErrorMessage()
-{
-    QString msg("Test error message.");
-    mTest->setErrorMessage(msg);
-    QCOMPARE(mTest->errorMessage(), msg);
-}
-
-void TestMpShareData::testUserName()
-{
-    QString name("testname");
-    mTest->setUsername(name);
-    QCOMPARE(mTest->username(), name);
-}
-
-void TestMpShareData::testPassword()
-{
-    QString password("testpassword");
-    mTest->setPassword(password);
-    QCOMPARE(mTest->password(), password);
-}
-
-void TestMpShareData::testObjectTypeWithLink()
-{
-    MpSongData *song = new MpSongData();
-    song->setLink("http://www.nokia.com");
-    mTest->setSongData(song);
-    QCOMPARE(mTest->objectType(), QString("URI"));
-}
-
-void TestMpShareData::testObjectTypeWithoutLink()
-{
-    MpSongData *song = new MpSongData();
-    song->setLink("");
-    mTest->setSongData(song);
-    QCOMPARE(mTest->objectType(), QString("NOTE-APPEND"));
-    delete song;
-}
-
-void TestMpShareData::testObjectContentWithLink()
-{
-    MpSongData *song = new MpSongData();
-    song->setLink("http://www.nokia.com");
-    song->setTitle("TestTitle");
-    song->setArtist("TestArtist");
-    song->setAlbum("TestAlbum");
-    song->setAlbumArtUri("http://www.nokia.com/notexist.png");
-    mTest->setSongData(song);
-    QCOMPARE(mTest->objectContent(), QString("http://www.nokia.com"));
-    QCOMPARE(mTest->objectReservedLength(), QString("http://www.nokia.com").length());
-    delete song;
-}
-
-void TestMpShareData::testObjectContentWithTitleAndArtist()
-{
-    MpSongData *song = new MpSongData();
-    song->setTitle("TestTitle");
-    song->setArtist("TestArtist");
-    song->setAlbum("TestAlbum");
-    song->setAlbumArtUri("http://www.nokia.com/notexist.png");
-    mTest->setSongData(song);
-    QCOMPARE(mTest->objectContent(), QString("&#9835; TestArtist: TestTitle http://music.ovi.com"));
-    QCOMPARE(mTest->objectReservedLength(), QString("&#9835; TestArtist: TestTitle http://music.ovi.com").length());
-    delete song;
-}
-
-
-void TestMpShareData::testObjectContentWithTitleOnly()
-{
-    MpSongData *song = new MpSongData();
-    song->setTitle("TestTitle");
-    song->setAlbum("TestAlbum");
-    song->setAlbumArtUri("http://www.nokia.com/notexist.png");
-    mTest->setSongData(song);
-    QCOMPARE(mTest->objectContent(), QString("&#9835; Unknown: TestTitle http://music.ovi.com"));
-    QCOMPARE(mTest->objectReservedLength(), QString("&#9835; Unknown: TestTitle http://music.ovi.com").length());
-    delete song;
-}
-
-
-void TestMpShareData::testObjectContentWithArtistOnly()
-{
-    MpSongData *song = new MpSongData();
-    song->setArtist("TestArtist");
-    song->setAlbum("TestAlbum");
-    song->setAlbumArtUri("http://www.nokia.com/notexist.png");
-    mTest->setSongData(song);
-    QCOMPARE(mTest->objectContent(), QString("&#9835; TestArtist: Unknown http://music.ovi.com"));
-    QCOMPARE(mTest->objectReservedLength(), QString("&#9835; TestArtist: Unknown http://music.ovi.com").length());
-    delete song;
-}
-
-
-void TestMpShareData::testObjectContentWithoutMetaInfo()
-{
-    MpSongData *song = new MpSongData();
-    mTest->setSongData(song);
-    QCOMPARE(mTest->objectContent(), QString("&#9835; Unknown: Unknown http://music.ovi.com"));
-    QCOMPARE(mTest->objectReservedLength(), QString("&#9835; Unknown: Unknown http://music.ovi.com").length());
-    delete song;
-}
-
-void TestMpShareData::testSongTitle()
-{
-    MpSongData *song = new MpSongData();
-    song->setTitle("TestTitle");
-    mTest->setSongData(song);
-    QCOMPARE(mTest->title(), QString("TestTitle"));
-    delete song;
-}
-
-
-void TestMpShareData::testSongArtist()
-{
-    MpSongData *song = new MpSongData();
-    song->setArtist("TestArtist");
-    mTest->setSongData(song);
-    QCOMPARE(mTest->artist(), QString("TestArtist"));
-    delete song;
-}
-
-void TestMpShareData::testAlbumArt()
-{
-    MpSongData *song = new MpSongData();
-    mTest->setSongData(song);
-    QCOMPARE(mTest->albumArtBase64(), QString("e:\\album_art.png"));
-    delete song;
-}
-
-void TestMpShareData::testLanguage()
-{
-    MpSongData *song = new MpSongData();
-    mTest->setSongData(song);
-    mTest->setLanguage("fi");
-    QCOMPARE(mTest->language(), QString("fi"));
-    delete song;
-}
-
-void TestMpShareData::testSongNoInfo()
-{
-    QCOMPARE(mTest->title(), QString("Unknown"));
-//    QCOMPARE(mTest->album(), QString(""));
-    QCOMPARE(mTest->artist(), QString("Unknown"));
-    QCOMPARE(mTest->albumArtBase64(), QString(""));
-    QCOMPARE(mTest->objectContent(), QString("&#9835; Unknown: Unknown http://music.ovi.com"));
-//    QCOMPARE(mTest->comment(), QString(""));
-//    QCOMPARE(mTest->year(), QString(""));
-//    QCOMPARE(mTest->genre(), QString(""));
-//    QCOMPARE(mTest->composer(), QString(""));
-//    QCOMPARE(mTest->albumTrack(), QString(""));
-//    QCOMPARE(mTest->link(), QString(""));
-}
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpsharedata/stub/inc/mpsongdata.h	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,97 +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: Stub of Metadata of song
-*
-*/
-
-#ifndef MPSONGDATA_H
-#define MPSONGDATA_H
-
-#include <QObject>
-#include <QString>
-#include <QPixmap>
-
-
-//forward declartions
-class QIcon;
-
-//class declaration
-class MpSongData : public QObject
-{
-    Q_OBJECT
-
-public:
-    explicit MpSongData( QObject *parent=0 );
-    virtual ~MpSongData();
-    
-    bool setTitle( const QString &title );
-    bool setAlbum( const QString &album );
-    bool setArtist( const QString &artist );
-    bool setComment( const QString &comment );
-    void setAlbumArtUri( const QString &albumArtUri );
-    bool setYear( int date );
-    bool setGenre( const QString &genre );
-    bool setComposer( const QString &compoer );
-    bool setAlbumTrack( const QString &albumtrack );
-    void setLink( const QString &link );
-    bool setMusicURL( const QString &musicURL );
-
-    // inform details view when basic information is ready to accelerate UI update
-    void commitPlaybackInfo();
-    // inform details view when details information is ready
-    void commitSongDetailInfo();
-
-public slots:
-    void thumbnailReady( const QPixmap& pixmap, void *data, int id, int error );
-    
-    int reservedLength() const { return mLink.length() + mTitle.length() + mArtist.length(); }
-
-    QString title() const;
-    QString album() const;
-    QString artist() const;
-    QString comment() const;
-    void albumArt( QPixmap& pixmap );
-    QString year() const;
-    QString genre() const;
-    QString composer() const;
-    QString albumTrack() const;
-    QString musicURL() const;
-    QString link() const;
-    QString albumArtBase64() const;
-
-signals:
-    void albumArtReady();
-    void playbackInfoChanged();
-	void songDetailInfoChanged();	
-
-private:
-    QString                  mTitle;
-    QString                  mAlbum;
-    QString                  mArtist;
-    QString                  mComment;
-    QString                  mComposer;
-    QString                  mGenre;
-    QString                  mYear;
-    QString                  mAlbumTrack;
-    QPixmap                  mAlbumArt;
-    int                      mReqId;
-    QString                  currentAAUri; 
-    QPixmap                  mDefaultAlbumArt;
-    QString                  mLink;
-    QString                  mMusicURL;
-    
-    Q_DISABLE_COPY(MpSongData)
-};
-
-#endif // MPSONGDATA_H
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpsharedata/stub/src/mpsongdata.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,402 +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: Playback Data provider for playback view.
-*
-*/
-
-
-#include <QString>
-#include <QPixmap>
-
-#include "mpsongdata.h"
-#include "mptrace.h"
-
-
-const int KUndefined = -1;
-
-/*!
-    \class MpSongData
-    \brief Music Player song metadata.
-
-    Song data provide acces to current playing song metadata
-*/
-    
-/*!
-    \fn void albumArtReady()
-
-    This signal is albuma alrt is ready.
- */
-
-/*!
-    \fn void playbackInfoChanged()
-
-    This signal is emitted when basic information is available
- */
-    
-/*!
-    \fn void songDetailInfoChanged()
-
-    This signal is emitted when detail information is available
- */
-    
-       
-
-/*!
-    Constructs a new MpSongData.
- */
-MpSongData::MpSongData( QObject *parent )
-    : QObject( parent ),
-      mTitle( NULL ),
-      mAlbum( NULL ),
-      mArtist( NULL ),
-      mComposer( NULL),
-      mGenre( NULL ),
-      mYear( NULL ),
-      mAlbumTrack( NULL ),
-      mAlbumArt(),
-      mReqId( KUndefined )
-{
-    //TX_ENTRY
-    //TX_EXIT
-}
-
-/*!
- Constructs a new MpSongData.
- */
-MpSongData::~MpSongData()
-{
-    //TX_ENTRY
-    //TX_EXIT
-}
-
-/*!
- Returns the song album art on \a pixmap.
-*/
-void MpSongData::albumArt( QPixmap& pixmap )
-{
-    //TX_ENTRY
-     if ( !mAlbumArt.isNull() ) {
-        pixmap = mAlbumArt;
-     }
-     else {
-         pixmap = QPixmap();
-     }
-    //TX_EXIT
-}
-
-
-/*!
- Returns the song title.
-*/
-QString MpSongData::title() const
-{
-    //TX_LOG
-    return mTitle;
-}
-
-/*!
- Returns the song album.
-*/
-QString MpSongData::album() const
-{
-    //TX_LOG
-    return mAlbum;
-}
-
-/*!
- Returns the song artist.
-*/
-QString MpSongData::artist() const
-{
-    //TX_LOG
-    return mArtist;
-}
-
-/*!
- Returns comment
-*/
-QString MpSongData::comment() const
-{
-    //TX_LOG
-    return mComment;
-}
-
-/*!
- Returns the song composer.
-*/
-QString MpSongData::composer() const
-{
-    //TX_LOG
-    return mComposer;
-}
-
-
-/*!
- Returns the song genre.
-*/
-QString MpSongData::genre() const
-{
-    //TX_LOG
-    return mGenre;
-}
-
-
-/*!
- Returns the album track.
-*/
-QString MpSongData::albumTrack() const
-{
-    //TX_LOG
-    return mAlbumTrack;
-}
-
-/*!
- Returns link
-*/
-QString MpSongData::musicURL() const
-{
-    //TX_LOG
-    return mMusicURL;
-}
-
-/*!
- Returns link
-*/
-QString MpSongData::link() const
-{
-    //TX_LOG
-    return mLink;
-}
-
-/*!
- Returns the release date.
-*/
-QString MpSongData::year() const
-{
-    //TX_LOG    
-    return mYear;
-}
-
-
-/*!
- Sets the song \a title, returns true if the value is new.
-*/
-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;
-}
-
-/*!
- Sets the song \a album, returns true if the value is new.
-*/
-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;
-}
-
-/*!
- Sets the song \a artist, returns true if the value is new.
-*/
-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;
-}
-
-/*!
- Sets the song \a comment, returns true if the value is new.
-*/
-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;
-}
-
-
-/*!
- Sets the song \a composer, returns true if the value is new.
-*/
-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;
-}
-
-/*!
- Sets the song \a genre, returns true if the value is new.
-*/
-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;
-}
-
-
-/*!
- Sets the song \a date, returns true if the value is new.
-*/
-bool MpSongData::setYear( int year )
-{
-    //TX_ENTRY_ARGS( "year =" << year )
-    bool change = false;
-    if ( QString::number(year) != mYear ) {
-        change = true;
-        if ( year >= 0 && year < 9999 ) {
-            mYear = QString::number(year);
-        }
-    }
-    //TX_EXIT
-    return change;
-}
-
-/*!
- Sets the \a album track, returns true if the value is new.
-*/
-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;
-}
-
-/*!
- Sets the \a link
-*/
-void MpSongData::setLink( const QString &link )
-{
-    //TX_ENTRY_ARGS( "Link =" << link )
-    mLink = link;
-    //TX_EXIT
-}
-
-/*!
- Sets the \a Music URL
-*/
-bool MpSongData::setMusicURL( const QString &link )
-{
-    //TX_ENTRY_ARGS( "MusicURL =" << link )
-    mMusicURL = link;
-    return true;
-    //TX_EXIT
-}
-
-
-
-/*!
- Sets the song \a albumArtUri.
-*/
-void MpSongData::setAlbumArtUri( const QString &albumArtUri)
-{
-    //TX_ENTRY
-    Q_UNUSED(albumArtUri)
-    mAlbumArt = mDefaultAlbumArt;
-    emit albumArtReady();
-    //TX_EXIT
-}
-
-
-/*!
- Slot to handle the album art thumb.
-*/
-void MpSongData::thumbnailReady(
-        const QPixmap& pixmap,
-        void *data,
-        int id,
-        int error  )
-{
-    //TX_ENTRY
-    Q_UNUSED( pixmap );
-    Q_UNUSED( data );
-    Q_UNUSED( id );
-    Q_UNUSED( error );
-    //TX_EXIT
-}
-
-/*!
- Emit signal when playback information changed, such as artist, track name
-*/
-void MpSongData::commitPlaybackInfo()
-{
-    //TX_ENTRY
-    emit playbackInfoChanged();
-    //TX_EXIT
-}
-
-/*!
- Emit signal when song detail information changed
-*/
-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("e:\\album_art.png");
-}
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_mpsharedata/unittest_mpsharedata.pro	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +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: 
-#
-TEMPLATE = app
-CONFIG += qtestlib \
-          symbian_test \
-          hb
-TARGET = unittest_mpsharedata
-DEPENDPATH += .
-INCLUDEPATH += ./inc \
-    ./stub/inc \
-    ../../inc \
-    ../../../../inc
-INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
-
-DEFINES += SHARE_FUNC_ENABLED
-
-# Input
-HEADERS += inc/unittest_mpsharedata.h \
-    ../../inc/mpsharedata.h \
-    stub/inc/mpsongdata.h
-SOURCES += src/unittest_mpsharedata.cpp \
-    ../../src/mpsharedata.cpp \
-    stub/src/mpsongdata.cpp
Binary file mpviewplugins/mpdetailsviewplugin/tsrc/unittest_resources/JsTestDriver-1.2.1.jar has changed
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_resources/JsTestDriver.conf	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-server: http://localhost:12121
-
-load:
-  - ../../resources/*.js
-  - test-src/oviapi.js
-  - test-src/publishplayer.js
-  - test-src/musictest.js
-
-exclude: 
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_resources/readme.txt	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-This is the unit test for javascript in resource folder.
-
-The test could only run on windows, NOT on phone!
-
-To execute the test, first run this command in command window to start the server:
-java.exe -jar JsTestDriver-1.2.1.jar --port 12121  --browser "C:\Program Files\Mozilla Firefox\firefox.exe"
-
-Then run this command to run the tests:
-java.exe -jar JsTestDriver-1.2.1.jar --config jsTestDriver.conf --verbose --tests all --captureConsole
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_resources/test-src/MusicTest.js	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-MusicTest = TestCase('MusicTest');
-
-MusicTest.prototype.testMusicContext = function() {
-    var context = music.privateFunctions.getMusicContext();
-	assertTrue(context.object.data.miniview.indexOf("London Calling") != -1);
-	assertTrue(context.object.data.miniview.indexOf("The Clash") != -1);
-};
-
-MusicTest.prototype.testNoa = function() {
-    var context = music.privateFunctions.getNoa();
-    assertTrue(context.username.indexOf("lcoubert10") != -1);
-    assertTrue(context.password.indexOf("lcoubert01") != -1);
-};
-
-MusicTest.prototype.testInitPlayer = function() {
-//    document.createElement('div').setAttribute("id", "ovi.player.share.ui");
-    /*:DOC += <div id="ovi.player.share.ui"></div>*/
-    music.initPlayer();
-	var ui = document.getElementById("ovi.player.share.ui");
-    assertTrue(ui.innerHTML.indexOf('player') >= 0);
-};
-
-MusicTest.prototype.setUp = function() {
-    window.context = {
-        username: function(){
-            return "lcoubert10"
-        },
-        password: function(){
-            return "lcoubert01"
-        },
-        title: function(){
-            return "London Calling"
-        },
-        album: function(){
-            return "dummyuri"
-        },
-        artist: function(){
-            return "The Clash"
-        },
-        link: function(){
-            return "http://music.ovi.com/ru/ru/pc/Product/Queen/Bohemian-Rhapsody/8019069"
-        },
-        albumArtBase64: function(){return 0;}
-    }
-};
-
-MusicTest.prototype.tearDown = function() { };
-
-
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_resources/test-src/oviapi.js	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,408 +0,0 @@
-// The following identifier turns the IE conditional pre-compilation on.
-/*@cc_on @*/
-
-/**
- * @namespace Parent namespace for the api.ovi.com project.
- */
-if (typeof ovi == 'undefined') {
-    ovi = {};
-};
-
-(function (ovi) {
-// ovi = function() {
-    var that = {};
-    
-    ovi.description = {
-            proxy_url: window.location.protocol + "//" + window.location.host + "/ovi-api",
-            sourceLocation: "/js",
-            urlSeperator: "/",
-            libFileExtension: ".js",
-            minified: false,
-            sign_method : "method-delegate-oauth",
-            env_path : "/alpha",
-            dispatch_path : "/api",
-            proxy_prefix : "", //useful during dev, so same consumer key can be reused for multiple instances of ovi-api
-            request_timeout : 30, // Network request timeout lapse (in seconds).
-            caller_id : "", //random id used for caller authentication
-            env_device : true // Do not change anything in this line, even the spacing. Else the project won't build properly for SPB.
-    };
-    // that.description = description;
-    
-    //Ignore console calls, in case it is not imported
-    ovi.console = {init:function(){},log:function(){},error:function(){},debug:function(){},info:function(){}}; 
-
-    //Ignore config calls, in case config.js is not imported
-    ovi.config = {setenv:function(){},setServiceEndPoint:function(){}}; 
-
-    var _loaded = {}; //Mapping from script source URL to status (0 - not loaded, 1 - loaded)
-    var _libMappings = {}; //Mapping from script source URL to libName 
-    var _pending_callbacks = []; //Used to delay callbacks, until all dependencies are loaded 
-
-    /**
-     * Method to initialize source URL using location of path from where oviapi.js was loaded
-     * 
-     */
-    var _initSourceURL = function() {
-        var scripts = document.getElementsByTagName('script');
-        if (!scripts) return; // TODO Throw an exception instead.
-        
-        var srcFilePattern = new RegExp("/js/ovi/(oviapi|oviapi-min|oviapi_(.+)|oviapi_(.+)-min).js$", "gi");
-        for(var index = 0; index < scripts.length; index++) {
-            
-            var ssrc = scripts.item(index).src;
-            if (typeof ssrc !== 'undefined') {
-                ssrc = ssrc.replace(/^\s*|\s*$/g,''); // To remove any white spaces.
-                
-                var startIndex = ssrc.search(srcFilePattern);
-                if (startIndex > 0) {
-                    
-                    // To determine whether the minified version of ovi libraries are used.
-                    if (ssrc.indexOf("min") > 0) {
-                        ovi.description.minified = true;
-                    }
-                    
-                    // If only relative src can be accessed, then use window.location ro create sourceURL                    
-                    if (ssrc.substr(0,6) !== 'http:/' && ssrc.substr(0,7) !== 'https:/') {
-                        var rootdir = window.location.pathname.split('/');
-                        if (rootdir.length > 1) 
-                            ovi.description.proxy_url = window.location.protocol + "//" + window.location.host + "/" + rootdir[1];
-                        break;
-                    } else {
-                        ovi.description.proxy_url = ssrc.substring(0, startIndex);
-                        break;
-                    }
-                }
-            }
-        }
-    };
-    _initSourceURL();
-     
-    /**
-     * Get an array of the loaded libs 
-     * @param {Integer} Optional param to specify the status of the loaded library.
-     * @return Array of libNames
-     */
-    var _getLoadedLibNames = function(status){
-      var loadedLibs = [];  
-      if (typeof status === 'undefined') status = -1; 
-      for (var item in _loaded){
-          if ((status === -1) || (_loaded[item] === status)){
-              loadedLibs.push(_libMappings[item]);
-          }
-      }
-      return loadedLibs;
-    };
-    
-    /**
-     * Get an object with loaded lib name as key and load status as value (1 - loaded, 0 - not loaded) 
-     * @param {Integer} Optional param to specify the status of the loaded library.
-     * @return Object with libNames as key and load status as value
-     */
-    var _getLoadedLibNamesAsObject = function(status){
-        var loadedLibs = {};  
-        if (typeof status === 'undefined') status = -1; 
-        for (var item in _loaded){
-            if ((status === -1) || (_loaded[item] === status)){
-                loadedLibs[_libMappings[item]] = _loaded[item];
-            }
-        }
-        return loadedLibs;
-    };
-    
-    /**
-     * Test if script was already loaded
-     * @param {String} scriptSrcURL source URL of script
-     * @return {Boolean} 
-     */
-    var _isExistingScript = function(scriptSrcURL){
-        for (var item in _loaded){
-            if (scriptSrcURL === item){
-                return true;
-            }
-        }
-        return false;
-    };
-    
-    /**
-     * Method to verify if a library object has already been loaded. In case of packaged/minified 
-     * version of ovi libraries all the libraries would reside in one single JS file.
-     * 
-     * @param {String} libraryName Name of the library object to check.
-     * @return {Boolean} Based on whether the check is true/false. 
-     */
-    var _isExistingLib = function(libraryName) {
-        for (var lib in ovi.libName) {
-            if (libraryName == lib) {
-                return true;
-            }
-        }
-        return false;
-    }
-    
-    var _determineScriptSrc = function(libName, options){
-        var fileName = libName;
-        var scriptSrcURL = ovi.description.proxy_url;
-        
-        // This helps while using this on a widget.
-        if (options != undefined && options.sourceURL != undefined) {
-            scriptSrcURL = options.sourceURL;
-        }
-        
-        var fileExt = "";
-        // If not using slash path, then use ".js" file extension and replace dot with slash.
-        if(fileName.indexOf('/') == -1){
-            fileExt = ovi.description.libFileExtension;
-            fileName = fileName.replace(/\./g,'/');
-        }
-        
-        var rootDir = "";
-        //If ovi package, then use source location as root dir
-        if (fileName.substr(0,3) === "ovi")
-            rootDir = ovi.description.sourceLocation;
-        
-        scriptSrcURL = scriptSrcURL + rootDir + "/" + fileName 
-                            + ((ovi.description.minified) ? "-min" : "") 
-                            + fileExt;
-        return scriptSrcURL;
-    };
-    
-    var _loadScript = function(scriptSrcURL, srcLib, options){
-        
-        function _loadedcallback(){
-            
-            //console.log(new Date().getTime()+" Loaded script:"+scriptSrcURL+" "+_getLoadedLibNames(1));
-            //console.log("not loaded:"+_getLoadedLibNames(0));
-            
-            //Mark script as loaded
-            _loaded[scriptSrcURL] = 1;
-            
-            //If callback exists, then add to pending callbacks
-            if (options && options.callback != null)
-                _pending_callbacks.push(options.callback);
-            
-            //If 1 or more items are pending, then don't call callbacks
-            var done = true;
-            for (var item in _loaded){
-                if (_loaded[item] === 0){
-                    done = false;
-                    break;
-                }
-            }
-
-            //If all libs are loaded, then call callbacks for all includes, if any
-            if (done == true){
-                //console.log(new Date().getTime()+" DONE AT LAST\n");
-                //Call all pending callbacks
-                for (var index = 0; index < _pending_callbacks.length; index++){
-                    try{
-                        _pending_callbacks[index].call();
-                    }catch(err){
-                        //console.log("failed to exec callback");
-                    }
-                }
-                _pending_callbacks = []; //Reset pending callbacks list
-                ovi.onReady(_getLoadedLibNamesAsObject(1)); //call onReady
-            }
-        }
-        
-        // If the library is already loaded (throug packaged/minified source file) then skip the download process.
-        if (!_isExistingLib(srcLib)) {
-            var scriptTag = document.createElement('script');
-            scriptTag.type = 'text/javascript';
-            scriptTag.src = scriptSrcURL; 
-            
-            if(window.opera){
-                scriptTag.onload = function(){
-                    scriptTag.onload = null;
-                    _loadedcallback();
-                };
-            }
-            //From Nicholas C. Zakas (http://www.nczonline.net/blog/2009/06/23/loading-javascript-without-blocking/)
-            else if (scriptTag.readyState){  //IE
-                scriptTag.onreadystatechange = function(){
-                    if (scriptTag.readyState == "loaded" || scriptTag.readyState == "complete"){
-                        scriptTag.onreadystatechange = null;
-                        _loadedcallback();
-                    }
-                };
-            } else {  //Others
-                scriptTag.onload = function(){
-                     _loadedcallback();
-                };
-            }
-            
-            var documentHead = document.getElementsByTagName("head")[0];
-            var newScriptTag = documentHead.appendChild(scriptTag);
-            if (newScriptTag) return true;
-        } else {
-            _loadedcallback();
-            return true;
-        }
-        return false;
-    };
-    
-    /**
-     * ovi.include - Method to dynamically include JS libraries from "api.ovi.com".<br/><br/>
-     * The ovi.onReady(libs) function is triggered once the library and its
-     * dependencies are loaded. See documentation of ovi.onReady.
-     * 
-     * @param {String,Array}
-     *            libNames Names of one or more libraries to be included, specified as an 
-     *            array of strings or as a comma separated string.
-     *            Library name can be specified in dot notation or as a relative path. <span
-     *            style="color:blue">e.g., "ovi.api.people",
-     *            "ovi/api/people.1.0.js".</span> External libraries must start
-     *            with "lib" <span style="color:blue">e.g., "lib.jquery",
-     *            "lib/jquery.json.js".</span>
-     * @param {Object}
-     *            options Name/Value object to hold other optional parameters.
-     * @param {Function}
-     *            options.callback Function to be called after a library has
-     *            been loaded.
-     * 
-     * @example 
-     *          ovi.include("ovi.api.maps");
-     *          ovi.include("ovi.api.people",{callback:function(){callMeBack()}}); 
-     *          ovi.include("ovi.api.people, ovi.api.share", {callback:function(){callMeBack()}});
-     *          
-     * 
-     * 
-     * @function
-     * @methodOf ovi
-     */
-    ovi.include = function(libNames, options) {
-        var importStatus = true;
-        try {
-            if (libNames != undefined) {
-                if (typeof libNames === 'string')
-                    libNames = libNames.split(',');
-                
-                // Determine which scripts (and also libraries) need to be loaded
-                var toLoadScript = [];
-                for (var index = 0; index < libNames.length; index++){
-                    var libName = libNames[index].replace(/^\s*|\s*$/g,''); // Remove any white spaces.
-                    
-                    // Determine script source URL from libName
-                    var scriptSrcURL = _determineScriptSrc(libName, options);
-                    if (!_isExistingScript(scriptSrcURL)) {
-                        _loaded[scriptSrcURL] = 0;  //Mark script as pending
-                        _libMappings[scriptSrcURL] = libName;
-                        toLoadScript.push(scriptSrcURL);
-                        
-                    } else {
-                        if (options && options.callback) 
-                            toLoadScript.push(scriptSrcURL);
-                    }
-                    //console.log("o================o");
-               }
-
-               var lstatus;
-               //Load scripts that need to be loaded. Pass optional callback only for last script (since callback should be called only once).
-               for (var index = 0; index < toLoadScript.length; index ++){
-                   if (index == (toLoadScript.length-1)) // if last lib, then pass optional callback
-                       lstatus = _loadScript(toLoadScript[index], _libMappings[toLoadScript[index]], options);
-                   else
-                       lstatus = _loadScript(toLoadScript[index], _libMappings[toLoadScript[index]]);
-                   if (!lstatus) importStatus = false; 
-               }
-            }
-        } catch (exception) {
-            importStatus = false;
-        }
-        return importStatus;
-    };
-    // that.include = include;
-  
-    /**
-     * ovi.onReady - Callback function triggered after calling ovi.include,
-     * once the library and its dependencies are loaded. Developers can override the default
-     * implementation, with their own ovi.onReady function. If successive calls to ovi.include are made,
-     * ovi.onReady may be triggered only once.
-     * 
-     * @param {Object}
-     *            libs - library name as key and load status as value (0 - not
-     *            loaded, 1 - loaded). Developer must check if the libraries
-     *            they need are loaded before using them using the ovi.testIfLoaded function.
-     * 
-     * @function
-     * @methodOf ovi
-     */
-    ovi.onReady = function(libs) {
-        //default, do nothing
-        //console.log("onReady:");
-        //console.log(libs);
-    };
-    // that.onReady = onReady;
-    
-    /**
-     * ovi.testIfLoaded - Utility function to test if the specified lib names are marked as loaded in the specified loaded libs object. 
-     *                    Used to test the status of libs in ovi.onReady. 
-     * 
-     * @param {String,Array}
-     *            libNames Names of one or more libraries to be included, specified as an 
-     *            array of strings or as a comma separated string.
-     * 
-     * @param {Object}
-     *            loadedLibs A mapping of lib name string to load status (0 - not loaded, 1 - loaded)
-     * 
-     * @return {Boolean}
-     * 
-     * @function
-     * @methodOf ovi
-     */
-    ovi.testIfLoaded = function(libNames, loadedLibs){
-        var reqdlibs = libNames;
-        if (typeof libNames === 'string')
-            reqdlibs = libNames.split(',');
-        for (var index = 0; index < reqdlibs.length; index ++){
-            var libName = reqdlibs[index].replace(/\s/g,'');
-            if ((libName in loadedLibs) && (loadedLibs[libName] == 1))
-                continue;
-            else
-                return false;
-        }
-        return true;
-    };
-    // that.testIfLoaded = testIfLoaded;
-    
-    /**
-     * ovi.setCallerId - Sets caller id required to authenticate API caller with Ovi API backend.
-     * 
-     * @param {String} 
-     *          cid - Caller id string
-     *          
-     * @function
-     * @methodOf ovi                   
-     */
-    ovi.setCallerId = function(cid){
-        ovi.description.caller_id = cid;
-    };
-    
-    // return that;
-// }();
-})(ovi);
-    
-
-/**
- * @property {Object} services Object that holds configurable parameters of all the libraries.
- * @memberOf ovi
- */
-ovi.services = {};
-ovi.services["import"] = ovi.description;
-
-/**
- * @property {Object} libName Object that holds the identified name of all the OVI API libraries.
- * @memberOf ovi
- */
-ovi.libName = {};
-ovi.libName["ovi.oviapi"] = ovi;
-
-ovi.include('ovi.config');
-
-/*
-@@todo:
-
-- if one include inside of another fails to load, then failure is silent
-- file imports will fail silently if the path is wrong
-- Safari reinclude doesn't work (seems that DOM removeChild doesn't really remove the script)
-*/
\ No newline at end of file
--- a/mpviewplugins/mpdetailsviewplugin/tsrc/unittest_resources/test-src/publishplayer.js	Fri Jul 23 17:31:12 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1312 +0,0 @@
-window["ovi"] = window["ovi"] ||
-{};
-ovi.player = ovi.player ||
-{};
-ovi.player.contextobject = ovi.player.contextobject ||
-{};
-
-ovi.player.contextobject.getInstance = function(config) {
-    var player = {};
-    player._create = function(options, handler, context) {
-        var callable = (typeof handler === "function");
-        if (callable) {
-            handler.call(context, "CREATE_PENDING");
-        }
-        // TODO: add context object to player store
-        // TODO: store options.miniview to be returned with view as HTML
-        // TODO: store other properties of options to be returned with view as JSON
-        // TODO: return uri (unique id in this player's store) in callback
-    };
-    player._cancel = function(options, handler, context) {
-        var callable = (typeof handler === "function");
-        if (callable) {
-            handler.call(context, "CANCEL_PENDING");
-        }
-        // TODO: cancel pending tasks
-        // TODO: cancel Player
-    };
-    player._delete = function(options, handler, context) {
-        var callable = (typeof handler === "function");
-        if (callable) {
-            handler.call(context, "DELETE_PENDING");
-        }
-        // TODO: delete object defined in options.uri from store
-    };
-    player._edit = function(options, handler, context) {
-        var callable = (typeof handler === "function");
-        if (callable) {
-            handler.call(context, "EDIT_PENDING");
-        }
-        // TODO: update object defined in options.uri
-    };
-    player._pick = function(options, handler, context) {
-        var callable = (typeof handler === "function");
-        if (callable) {
-            handler.call(context, "PICK_PENDING");
-        }
-        // TODO: return list of all objects, or object defined in options.uri, fork with options.view
-    };
-    player._view = function(options, handler, context) {
-        var callable = (typeof handler === "function");
-        if (callable) {
-            handler.call(context, "VIEW_PENDING");
-        }
-        // TODO: return object defined in options.uri, JSON if options.view == "none", HTML if "mini"
-    };
-    ovi.player._getInstance.call(player, config);
-};
-
-ovi.player.contextobject.Player = ovi.player.contextobject.getInstance;
-/*
- * Basic namespaces & common Player functions
- */
-
-
-
-window["ovi"] = window["ovi"] ||
-{};
-ovi.player = ovi.player ||
-{};
-
-
-
-/**
- * A function for creating a callback chain
- * @param {Object} options
- * @param {Object} handler
- * @param {Object} context
- * @return {Function}
- */
-ovi.player._notImplemented = function(functionId) {
-    return function() {
-        var status = ovi.player._status;
-        handler.call(context, status["NOT_IMPLEMENTED"], null);
-        handler.call(context, status[functionId + "_FAILURE"], null); // TODO: return description, too?
-    };
-};
-
-
-
-/**
- * A method for returning an instance of a singleton
- * @param {Object} options A configuration object for the player
- */
-ovi.player._getInstance = function(options) {
-    // TODO: store the configuration options
-    return (function() {
-        return (this.instance ||
-        (function() {
-            this.instance = {
-                // Public interface
-                cancel: (this._cancel || ovi.player._notImplemented("CANCEL")),
-                create: (this._create || ovi.player._notImplemented("CREATE")),
-                "delete": (this._delete || ovi.player._notImplemented("DELETE")), // delete is a keyword
-                edit: (this._edit || ovi.player._notImplemented("EDIT")),
-                pick: (this._pick || ovi.player._notImplemented("PICK")),
-                show: (this._view || ovi.player._notImplemented("VIEW")), // show is the same function as view, included in API for compatibility
-                sync: (this._sync || ovi.player._notImplemented("SYNC")),
-                view: (this._view || ovi.player._notImplemented("VIEW"))
-            };
-            return this.instance;
-        }()));
-    }());
-};
-
-
-
-ovi.player._status = {
-    USER_CANCEL: "USER_CANCEL",
-    
-    CANCEL_PENDING: "CANCEL_PENDING",
-    CANCEL_FAILURE: "CANCEL_FAILURE",
-    CANCEL_SUCCESS: "CANCEL_SUCCESS",
-    
-    CREATE_PENDING: "CREATE_PENDING",
-    CREATE_FAILURE: "CREATE_FAILURE",
-    CREATE_SUCCESS: "CREATE_SUCCESS",
-    
-    DELETE_PENDING: "DELETE_PENDING",
-    DELETE_FAILURE: "DELETE_FAILURE",
-    DELETE_SUCCESS: "DELETE_SUCCESS",
-    
-    EDIT_PENDING: "EDIT_PENDING",
-    EDIT_FAILURE: "EDIT_FAILURE",
-    EDIT_SUCCESS: "EDIT_SUCCESS",
-    
-    PICK_PENDING: "PICK_PENDING",
-    PICK_FAILURE: "PICK_FAILURE",
-    PICK_SUCCESS: "PICK_SUCCESS",
-    
-    SYNC_PENDING: "SYNC_PENDING",
-    SYNC_FAILURE: "SYNC_FAILURE",
-    SYNC_SUCCESS: "SYNC_SUCCESS",
-    SYNC_CONNECT_PENDING: "SYNC_CONNECT_PENDING",
-    SYNC_CONNECT_FAILED: "SYNC_CONNECT_FAILED",
-    SYNC_CONNECT_SUCCEEDED: "SYNC_CONNECT_SUCCEEDED",
-    SYNC_LOGIN_PENDING: "SYNC_LOGIN_PENDING",
-    SYNC_LOGIN_FAILED: "SYNC_LOGIN_FAILED",
-    SYNC_LOGIN_SUCCEEDED: "SYNC_LOGIN_SUCCEEDED",
-    SYNC_UPDATE_PENDING: "SYNC_UPDATE_PENDING",
-    SYNC_UPDATE_FAILED: "SYNC_UPDATE_FAILED",
-    SYNC_UPDATE_SUCCEEDED: "SYNC_UPDATE_SUCCEEDED",
-    
-    VIEW_PENDING: "VIEW_PENDING",
-    VIEW_FAILURE: "VIEW_FAILURE",
-    VIEW_SUCCESS: "VIEW_SUCCESS",
-    
-    NOT_IMPLEMENTED: "NOT_IMPLEMENTED"
-};
-window["ovi"] = window["ovi"] ||
-{};
-ovi.player = ovi.player ||
-{};
-ovi.player.publish = ovi.player.publish ||
-{};
-
-ovi.player.publish.getInstance = function(config) {
-    var player = {};
-    player._create = function(options, handler, context) {
-        var callable = (typeof handler === "function");
-        if (callable) {
-            handler.call(context, "CREATE_PENDING");
-        }
-        // TODO: create UI
-        // TODO: get the sub-players, sync them
-    };
-    player._cancel = function(options, handler, context) {
-        var callable = (typeof handler === "function");
-        if (callable) {
-            handler.call(context, "CANCEL_PENDING");
-        }
-        // TODO: cancel sub-players
-        // TODO: cancel pending tasks
-        // TODO: cancel Player
-    };
-    ovi.player._getInstance.call(player, config);
-};
-
-ovi.player.publish.Player = ovi.player.publish.getInstance;
-window["ovi"] = (window["ovi"] || {});
-ovi.player = (ovi.player || {});
-ovi.player.snc = (ovi.player.snc || {});
-ovi.player.snc.engine = (ovi.player.snc.engine || {});
-
-
-(function(){
-
-    var engine = ovi.player.snc.engine;
-	
-	
-	engine.status = {
-		SUCCESS : "SUCCESS",
-		FAILED : "FAILED",
-	}
-	
-	
-	var _callback = function(status, data, callback, context) {
-        if (typeof callback == "function") {
-            callback.call(context, status, data);
-        }
-	}
-    
-    // External functions	
-    
-    /**
-     * Publish the given object to the social networks.
-     * @param {Object} object Published data
-     * @param {String} object.text Free text
-     * @param {String} object.context.artist Artist name
-     * @param {String} object.context.title Song title
-     * @param {Array} object.networks Array of social networks ids where to publish
-     * @param {Object} [callback] Called when publish is ready.
-     * @param {Object} [context]
-     */
-    engine.publish = function(data, callback, context){
-        
-        // Just concatenate some status text from received data
-        var status = data.text;
-        
-		// Add attached objects (temporarily just append to end of text)
-        // TODO : object.type == "URI" ... etc., add as attachment when supported by SNC 		
-        if (typeof data.object != "undefined") {
-	         // Get URL to song before publishing and to status text
-            var link = data.object.content;
-            if (link.length > 0) {
-                status += " - " + link;
-            }
-        }
-		 
-        // Update to services 		
-        ovi.activities.updateStatus(status, {networkId: data.networks }, function(response){
-            
-			if (response.status == "success") {
-                _callback(engine.status.SUCCESS, null, callback, context);
-			}
-			else {
-				// TODO : Implement finer error handling
-				_callback(engine.status.FAILED, { message : "Status update failed" }, callback, context);
-			}										
-        });
-    }
-
-	/**
-	 * 
-	 * @param {Object} data
-	 * @param {Object} callback
-	 * @param {Object} context
-	 */
-    engine.cancelPublish = function(data, callback, context){
-		_callback(engine.status.SUCCESS, null, callback, context);
-    }
-    
-	
-	/**
-	 * Reload social networks from SNC backend to the local store. Use getServices() to retrieve the 
-	 * list of loaded services.
-	 * @param {Object} options Object containing Noa account information. Can be user, password or already
-	 * autheticated session token to be used. { username : "", password : "" } or { token : "" }
-	 * @param {Object} callback
-	 * @param {Object} context
-	 */
-    engine.sync = function(options, callback, context) {
-
-        // TODO : Seperate init and login from sync (we need both for publish also...)
-
-        // Do service didscovery
-		
-        // 1. Init APIs
-        requests.initOviApi(function(response){
-        
-		    if(response.status != engine.status.SUCCESS) {
-				_callback(engine.status.FAILED, response.data, callback, context);
-				return;
-			}
-		
-            // 2. Login noa     
-            requests.noaLogin(options, function(response){
-
-	            if(response.status != engine.status.SUCCESS) {
-	                _callback(engine.status.FAILED, { message: response.message }, callback, context);
-					return;
-	            }
-            
-                // 3. Service discover
-                requests.discover(function(response){
-
-                    // Store to player store
-					store.clear();
-					store.append(response.networks);
-					store.commit(); 
-					
-					// Callback function
-					if (response.status == engine.status.SUCCESS) {
-                        _callback(engine.status.OK, { networks: response.networks }, callback, context);	
-					}
-					else {
-						_callback(engine.status.FAILED, { message: response.message }, callback, context);
-					}					
-                });
-            });            
-        });
-    }		
-	
-	/**
-	 * Get list of services (social networks). Data is loaded from local 
-	 * player store. To synchronize data social networks from SNC call sync().
-	 */
-	engine.getServices = function() {
-		// Get list of services from store
-		return store.getList();
-	}
-	
-	/**
-	 * Mark service as selected / unselected. Saves the selection to the persistent 
-	 * local storage to save data over sessions.
-	 * @param {Object} id
-	 * @param {Object} enable
-	 */
-	engine.selectService = function(id, enable) {
-		// Select / unselect service in player store
-		store.select(id, enable);		
-	}
-		
-	// Player store	
-    var STORE_KEY_SERVICES = "ovi.player.snc.services";
-    var STORE_KEY_SELECTED = "ovi.player.snc.services.selected";	
-	
-	/**
-	 * Player store implementation. Persists the social networks (services) and selections 
-	 * to the HTML5 local storage, which provides over sessions caching.
-	 */
-	var store = {
-
-		_services : {},
-		_selected : {},
-				
-        /**
-         * Add new server or services to the store.
-         * @param {Object} service
-         */
-		append : function(service) {
-			if (service.length) {
-	            for(var i=0; i < service.length; i++) {
-	                var s = service[i];
-	                this._services[s.id] = s;      
-	            }
-			} else {
-				this._services[service.id] = service;
-			}
-		},
-		
-		/**
-		 * Mark service selected or unselected in the store. Also commits changes in 
-		 * selections to the store.
-		 * @param {Object} id
-		 * @param {Object} enable
-		 */
-		select : function(id, enable) {
-			this._selected[id] = enable;
-			localStorage.setItem(STORE_KEY_SELECTED, JSON.stringify(this._selected));
-		},
-		
-		/**
-		 * Clear services.
-		 */
-	    clear : function() {
-	   	    this._services = {};
-	    },
-		
-		/**
-		 * Get list (array) of services in the store.
-		 */
-		getList : function() {
-			// Convert to array
-			var res = [];
-			for(var o in this._services) {				
-				var serv = this._services[o];
-				serv.selected = typeof this._selected[o] != "undefined" ? this._selected[o] : false;
-				res.push(serv);
-			}			
-			return res;
-		},
-		
-		/**
-		 * Commit services to the store.
-		 */
-		commit : function() {
-			localStorage.setItem(STORE_KEY_SERVICES, JSON.stringify(this._services));
-		},
-		
-		/**
-		 * Retrieve services and selections in the store.
-		 */
-		load : function() {
-			this._services = JSON.parse(localStorage.getItem(STORE_KEY_SERVICES));
-			this._selected = JSON.parse(localStorage.getItem(STORE_KEY_SELECTED));
-
-			if (this._services == null) this._services = {};
-			if (this._selected == null) this._selected = {};			
-		}
-	}
-		
-	
-    // SNC Request implementation
-    var requests = {
-    
-        /**
-         *
-         * @param {Object} callback
-         */
-        initOviApi: function(callback){
-            var myincludes = "ovi.auth.noa_login, ovi.api.snc, ovi.api.activities, ovi.net.xss";
-            ovi.onReady = function(libs){
-                if (ovi.testIfLoaded(myincludes, libs)) {
-                
-                    // Successful, set environment for NCIM              
-                    ovi.config.setenv("st-account", "delegate");
-                    
-                    // Allow cross-domain scripting
-                    function xssInitCallback(data){
-                        if (data.event === "InitializeOk") {
-                            callback( { status : engine.status.SUCCESS });
-                        }
-                    }
-                    
-                    ovi.net.XssInit({
-                        back_url: "http://spb.ci.wipsl.com/ovi-api/js/ovi/net/",
-                        callback: xssInitCallback
-                    });
-                    
-                }
-            }
-            
-            ovi.include(myincludes);
-        },
-        
-        /**
-         *
-         * @param {Object} callback
-         */
-        noaLogin: function(options, callback){
-			
-			var noa = {};			
-			if (typeof options.token != "undefined") {   // This propably is not supported yet..
-				noa = { token : options.token };
-			}
-			else {
-				noa = { username : options.username, password : options.password };
-			}
-			
-			// Login
-            ovi.noa.login(noa, function(state){
-				            
-                // Callback
-                if (state.status == "success") {
-                    callback( {
-						status: engine.status.SUCCESS
-                    } );
-                }
-                else {
-					callback( {
-						status: engine.status.FAILED,
-						message: "NOA login failed - " + state.statusCode + " - " + state.status
-					} );
-                }
-            });
-        },
-        
-        /**
-         *
-         * @param {Object} callback
-         */
-        discover: function(callback){
-        
-            // Discover service available
-            ovi.snc.discoverSocialNetworks(function(response){
-            
-                if (response.status != "success") {
-                    callback( {
-						status: engine.status.FAILED,
-						message : "Service discovery failed - " + response.statusCode + " - " + response.responseText 
-                    } );
-                    return;
-                }
-				
-                var netw = response.data.network;
-                
-                // And get activated
-                ovi.snc.getActivatedSocialNetworks(function(response){                    
-
-                    if (response.status != "success") {
-	                    callback( {
-	                        status: engine.status.FAILED,
-	                        message : "Service discovery failed - " + response.statusCode + " - " + response.responseText 
-	                    } );
-												
-                        return;
-                    }
-					else if (response.statusCode == 204) { // Not an error, no active networks
-                        callback( {
-                            status: engine.status.SUCCESS,
-                            networks : [] 
-                        } );
-						
-						return;
-					}
-                    
-					var active = response.data.network;
-                    
-                    // Now we have finally the service discovery ready, create final response										
-					// Remove all not-active networks from supported networks					
-                    var results = [];					
-					for(var i=0; i < netw.length; i++) {
-						var id = netw[i].id;
-						
-						for(var j=0; j < active.length; j++) {
-							if (active[j].id == id) {								
-								// We have a winner
-								results.push({ name : netw[i].name, id : netw[i].id, maxTextInput : netw[i].maxTextInput });
-								break;
-							}
-						}
-					}					
-                    
-                    callback( { 
-					   status: engine.status.SUCCESS, 
-					   networks : results 
-                    } );                    
-                });
-            });
-        }
-    }
-    
-	// Restore data from store
-    store.load();
-    
-})();
-// Create needed namespace ovi.player.share.ui
-window["ovi"] = window["ovi"] ||
-{};
-ovi.player = ovi.player ||
-{};
-ovi.player.share = ovi.player.share ||
-{};
-ovi.player.share.ui = ovi.player.share.ui ||
-{};
-
-/**
- * TODO
- * 
- * This API tries to imitate medos framework UI controls for future compability.
- * @param {Object} params
- * @param {Object} target
- */
-ovi.player.share.ui.Button = function(params, target) {
-    
-	var CLICK_EVENT = "selected";
-	var that = this;
-
-    function createHtml() {
-	    var template = '<button class="ovi_Button ovi_unselectable ovi_clip">' +
-	       params.text + '</button>';
-	
-	    var node = document.createElement("div");  // Do we need this ??
-	    node.innerHTML = template;
-		return node;		
-	}
-
-    var _root = createHtml();
-	var _button = _root.firstChild;
- 
-    target.appendChild(_root);
-	
-	// Interface functions
-	this.addEventHandler = function(event, callback) {
-		// selected = click (comes from medos...)		
-		if (event == CLICK_EVENT) {
-            _root.addEventListener("click", function(e) { callback.call(that, e); }, that);	
-		}		 
-	} 	
-		
-    this.setProperty = function(name, value) {
-		_button[name] = value;
-	}
-	
-    this.getProperty = function(name) {
-        return _button[name];
-    }	
-}
-// Create needed namespace ovi.player.share.ui
-window["ovi"] = window["ovi"] ||
-{};
-ovi.player = ovi.player ||
-{};
-ovi.player.share = ovi.player.share ||
-{};
-ovi.player.share.ui = ovi.player.share.ui ||
-{};
-
-/**
- * Checkbox UI control implementation. TODO
- * 
- * This API tries to imitate medos framework UI controls for future compability.
- * @param {Object} params
- * @param {Object} target
- */
-ovi.player.share.ui.CheckBox = function(params, target) {
-    
-	var that = this;
-
-    function createHtml() {
-		      
-        var template = '<div class="ovi_CheckBox ovi_unselectable ovi_clip">' +
-		                  '<input type="checkbox"></input>' +
-		                  '<span data-bind-text="label">' + params.label + '</span>' +
-					   '</div>';
-		
-	    var node = document.createElement("div");  // Do we need this ??
-	    node.innerHTML = template;
-		return node;		
-	}
-
-    var _root = createHtml();
-	var _checkBox = _root.firstChild.firstChild;
- 
-    target.appendChild(_root);	
-	
-    this.setProperty = function(name, value) {
-		
-		if (name == "selected") { // Use medos property name mappings
-            _checkBox["checked"] = value;	
-		} 
-		else {
-			_checkBox = value;
-		}        
-    }
-	
-	this.getProperty = function(name) {
-		if (name == "selected") {
-			return _checkBox["checked"];
-		}
-		return _checkBox[name];
-	}
-	
-	for(var v in params) {
-		this.setProperty(v, params[v]);
-	}
-}
-// Create needed namespace ovi.player.share.ui
-window["ovi"] = window["ovi"] ||
-{};
-ovi.player = ovi.player ||
-{};
-
-
-/**
- * Context object player poc implementation
- */
-ovi.player.contextobject = ovi.player.contextobject ||
-{};
-
-
-ovi.player.contextobject.Player = function() {
-	
-	var targetNS = this;	
-	targetNS.create = function(params) {
-		targetNS.object = params;		
-	}
-}
-
-
-
-/**
- * Publish player poc implementation 
- */
-ovi.player.publish = ovi.player.publish ||
-{};
-
-// Extend the namespace
-ovi.player.publish.Player = function(params) {
-
-    // TODO : MAKE THIS SINGLETON SOMEHOW ??
-    var targetNS = this;    
-
-    // Utils
-    var _id = function(id) {
-        return document.getElementById(id);
-    };
-	
-    var _addClass = function(target, className) {
-        var classes = target.className;
-        if (!classes.match(new RegExp("\\b" + className + "\\b"))) {
-            if (classes != "" && classes.substr(-1) != " ") {
-                target.className += " ";
-            }
-            target.className += className;
-        }
-    };
-    var _removeClass = function(target, className) {
-        target.className = target.className.replace(new RegExp("\\b" + className + "\\b", "g"), "");
-        //TODO: clean extra spaces?
-    
-    };
-    var _toggleClass = function(target, className) {
-        if (target.className.indexOf(className) == -1) {
-            _addClass(target, className);
-            return true;
-        } else {
-            _removeClass(target, className);
-            return false;
-        }
-        
-    };
-    
-    
-    
-    /**
-     * "State engine"
-     */
-    var _state = {
-        visible: false,
-        services: {}
-    };
-    
-    
-    
-    /**
-     * HTML templates for ui
-     */
-    var _templates = {
-        // TODO: localization
-        "share.ui": '<div class="player">\
-			<div class="panel header">Publish</div>\
-			<div class="panel panel-message">\
-				<div class="info hidden" id="comment-limit"><span id="comment-length">0</span>/<span id="comment-maxlength">0</span></div>\
-				<div class="comment" id="comment-area">\
-					<div class="hint">Write message here</div>\
-					<textarea id="message"></textarea>\
-				</div>\
-				<hr/><div class="info" id="shared-object"></div><hr/>\
-			</div>\
-			<div class="panel networks-panel"><ul class="list checked" id="available-services"></ul></div>\
-			<div class="panel panel-buttons">\
-				<ul class="list button-bar">\
-					<li id="action-ok" class="disabled"><span>OK</span></li>\
-					<li id="action-cancel"><span>Cancel</span></li>\
-				</ul>\
-			</div>\
-		</div>'
-    };
-    
-    
-    
-    /**
-     * Generic callback invoker
-     *
-     * @param {Object} notification
-     * @param {Object} data
-     * @param {Object} callback
-     * @param {Object} context
-     */
-    var _callback = function(notification, data, callback, context) {
-        if (typeof callback == "function") {
-            callback.call(context, notification, data);
-        }
-    };
-    
-    
-    
-    /**
-     * status messages
-     */
-    var _status = {
-    
-        show: "SHOW",
-        show_ok: "SHOW_SUCCEEDED",
-        show_fail: "SHOW_FAILED",
-        
-        updateobject: "UPDATEOBJECT",
-        updateobject_ok: "UPDATEOBJECT_SUCCEEDED",
-        updateobject_fail: "UPDATEOBJECT_FAILED",
-        
-        updateservices: "UPDATESERVICES",
-        updateservices_ok: "UPDATESERVICES_SUCCEEDED",
-        updateservices_fail: "UPDATESERVICES_FAILED",
-		updateservices_nonetworks : "UPDATESERVICES_NONETWORKS"
-    
-    };
-    
-    
-    
-    /**
-     * Invokes the ui for the player
-     *
-     * @param {Object} [options]
-     * @param {Object} [options.target] the dom node or id where the ui should be inserted
-     * @param {Object} [options.template] the html for the ui
-     * @param {Object} [callback]
-     * @param {Object} [context]
-     */
-    var _show = function(options, callback, context) {
-    
-        var target = (options && options.target) || _id("ovi.player.share.ui"), template = (options && options.template) || _templates["share.ui"];
-
-        // Find target node if id was given
-        if (typeof target == "string") {
-            target = _id(_target);
-        }
-        if (target) {
-            if (template) {
-                if (_state.visible && target.innerHTML.indexOf('"player"') >= 0) {
-                    // _show was already called earlier, and player is shown
-                    _callback(_status.show, {
-                        message: "Player is already visible"
-                    }, callback, context);
-                } else {
-                    target.innerHTML = template;
-                    
-                    // add handler for textarea
-                    var message = _id("message");
-                    _id("message").onkeyup = _handleMessageChange;
-                    message.style.backgroundColor = "transparent";
-                    
-                    // add handlers for buttons
-                    _id("action-ok").onclick = _handleSubmit;
-                    _id("action-cancel").onclick = _handleSubmit;
-                    
-                    // Update state
-                    _state.visible = true;
-                    _callback(_status.show_ok, null, callback, context);
-                }
-            } else {
-                _callback(_status.show_fail, {
-                    message: "Template not found",
-                    data: {
-                        template: template
-                    }
-                }, callback, context);
-            }
-        } else {
-            _callback(_status.show_fail, {
-                message: "Target container not found",
-                data: {
-                    target: target
-                }
-            }, callback, context);
-        }
-		
-		onResize();   // Initial resize
-		
-		// If we would like to show the services stored in local storage, uncommenting the following would do 
-		// the job..
-		/*
-		var services = ovi.player.share.engine.getServices();
-		targetNS.updateServices(services);*/ 		
-    };
-    
-    /**
-     * Removes all the handlers from the ui and the ui
-     *
-     * @param {Object} options
-     * @param {Object} callback
-     * @param {Object} context
-     */
-    var _teardown = function(options, callback, context) {
-        //TODO: clear handlers
-        //TODO: destroy html
-        //TODO: update status
-    };
-
-    
-    var _updateServices = function(data, callback, context) {
-    
-        var target = _id("available-services");
-        
-        if (target) {
-            if (data.length) {
-                var listToCheck = [], i;
-                // TODO: add loading animation?
-                for (i = 0; i < data.length; i++) {
-                    var id = data[i].id, label = data[i].name;
-                    if (id && label) {
-                        id = "service-" + id;
-                        listToCheck.push(id);
-                        if (!_id(id)) {
-                            // We don't have the network in our list yet, create one
-                            var item = document.createElement("LI"), checkbox = document.createElement("SPAN");
-                            checkbox.setAttribute("class", "checkbox");
-                            checkbox.appendChild(document.createTextNode(label));
-                            item.appendChild(checkbox);
-                            item.setAttribute("id", id);
-                            item.onclick = _handleServiceListClick;
-                            target.appendChild(item);
-                            // store object to the state
-							if (data[i].selected) {
-                                data[i].checked = _toggleClass(item, "checked");
-							}							
-                            _state.services[id] = data[i];
-                        }
-                    } else {
-                        _callback(_status.updateservices, {
-                            message: "Service object formatted badly",
-                            data: data[i]
-                        }, callback, context);
-                    }
-                }
-                //make a searchable string
-                listToCheck = listToCheck.join();
-                //remove obsolete networks
-                for (i = 0; i < target.childNodes.length; i++) {
-                    var node = target.childNodes[i], id = node.getAttribute("id");
-                    if (listToCheck.indexOf(id) == -1) {
-                        node.onclick = null;
-                        target.removeChild(node);
-                    }
-                    // TODO: update _state?
-                }
-				_updateServiceLimits();
-                _callback(_status.updateservices_ok, null, callback, context);				
-            } else {
-                _callback(_status.updateservices_fail, {
-                    message: "Received data was not an array",
-                    data: data
-                }, callback, context);
-            }
-        } else {
-            _callback(_status.updateservices_fail, {
-                message: "Target container not found"
-            }, callback, context);
-        }
-    };
-    
-    /**
-     * Handler for message changes
-     * @param {Object} e
-     */
-    var _handleMessageChange = function(e) {
-        _id("comment-length").innerHTML = this.value.length;
-        _checkMessageLength();
-    }
-    
-    
-    
-    /**
-     * Handler for service selection
-     * @param {Object} e
-     */
-    var _handleServiceListClick = function(e) {
-        _state.services[this.id].checked = _toggleClass(this, "checked");
-		ovi.player.snc.engine.selectService(_state.services[this.id].id, _state.services[this.id].checked);
-        _updateServiceLimits();
-    };
-    
-    
-    
-    /**
-     * Check limits and if the OK button can be clicked
-     */
-    var _updateServiceLimits = function() {
-        var bigNumber = 9999999, maxTextInput = bigNumber, min = Math.min, services = _state.services, service;
-        for (sid in services) {
-            service = services[sid];
-            if (service.checked && service.maxTextInput && service.maxTextInput > 0) {
-                maxTextInput = min(maxTextInput, service.maxTextInput);
-            }
-        }
-		
-        if (maxTextInput < bigNumber) {
-            // Reduce the link and context reserved size from input (data that will be allocated 
-			// from maxTextInput for context)
-			var contextData = _state.contextPlayer.object.data;
-            maxTextInput -= contextData.object.reservedLength;
-			     			
-            _id("comment-maxlength").innerHTML = maxTextInput;
-            _removeClass(_id("comment-limit"), "hidden");
-            //TODO: alter size of elements to make space for the limit?
-        } else {
-            _id("comment-maxlength").innerHTML = maxTextInput;
-            _addClass(_id("comment-limit"), "hidden");
-        }
-        _checkMessageLength();
-    };
-    
-    
-    
-    var _checkMessageLength = function() {
-        var length = parseInt(_id("comment-length").innerHTML), maxLength = parseInt(_id("comment-maxlength").innerHTML), message = _id("message");
-        if (length == 0) {
-            message.style.backgroundColor = "transparent";
-        } else {
-            message.style.backgroundColor = "";
-        }
-        if ((maxLength > 0) && (length > maxLength)) {
-            _addClass(_id("comment-limit"), "error");
-            _addClass(message, "error");
-        } else {
-            _removeClass(_id("comment-limit"), "error");
-            _removeClass(message, "error");
-        }
-        _updateActions();
-    };
-    
-    
-    
-    var _updateActions = function() {
-        if (_canSubmit()) {
-            _removeClass(_id("action-ok"), "disabled");
-        } else {
-            _addClass(_id("action-ok"), "disabled");
-        }
-    };
-    var _canSubmit = function() {
-        var length = parseInt(_id("comment-length").innerHTML), maxLength = parseInt(_id("comment-maxlength").innerHTML), services = _state.services, service;
-        if ((maxLength > 0) && (length > maxLength)) {
-            return false;
-        }
-        for (sid in services) {
-            service = services[sid];
-            if (service.checked && service.maxTextInput && service.maxTextInput > 0) {
-                return true;
-            }
-        }
-        return false;
-    }
-    
-    
-    var _handleSubmit = function(e) {
-        // don't accept clicks from elements with class "disabled"
-        if (/\bdisabled\b/.test(this.className)) {
-            return;
-        }
-        if (this.id == "action-ok") {
-            _addClass(this, "disabled");
-            _addClass(_id("action-cancel"), "disabled");
-            //TODO: disable testarea and service list?
-            
-            var services = _state.services, service, networks = [];
-            for (sid in services) {
-                service = services[sid];
-                if (service.checked) {
-                    networks.push(service.id);
-                }
-            }
-			
-			var contextData = _state.contextPlayer.object.data;
-			
-            var data = {
-                text: _id("message").value,				
-                object : contextData.object,
-                networks: networks
-            };
-			
-            ovi.player.snc.engine.publish(data, function(status, data) {
-				if (status == ovi.player.snc.engine.status.FAILED) {
-					alert(data.message);
-				}
-                _reset();
-            });
-            // TODO: call window.close here? teardown first? window.close in teardown?
-        } else {
-            ovi.player.snc.engine.cancelPublish(null, function(status, data) {
-                _reset();
-            });
-        }
-    };
-    
-    var _reset = function() {
-        _id("shared-object").innerHTML = "";
-        _id("message").value = "";
-		_handleMessageChange.call(_id("message"));
-        _removeClass(_id("action-cancel"), "disabled");
-		
-		// Request window to be closed
-		window.close();		
-    };
-    
-	var _sync = function(contextPlayer, handler, context) {    
-        // Sync context to UI
-        _state.contextPlayer = contextPlayer; // Store context object for publishing
-        _id("shared-object").innerHTML = _state.contextPlayer.object.data.miniview;          
-    }	
-	
-	
-	var _sncInit = function(credentials, handler, context) {
-        // Sync SNC stuff
-        ovi.player.snc.engine.sync(credentials.token, function(status, data) {
-            if (status == ovi.player.snc.engine.status.FAILED) {
-                _callback(_status.updateservices_fail, 
-				    { message: data.message }, 
-					handler, context);				    
-            }
-            else if (data.networks.length == 0) {
-                _callback(_status.updateservices_nonetworks, 
-				          { message: "No networks" }, 
-						  handler, context);
-            }
-            else {
-                var services = ovi.player.snc.engine.getServices();
-                _updateServices(services, handler, context); 
-            }               
-        } );           		
-	}
-		   
-
-
-    // Register onResize for landscape / portrait mode changes
-    window.addEventListener("resize", onResize, true);
-    
-    function onResize(e) {
-        
-        function isLandscape(){
-            return window.innerWidth > window.innerHeight;
-        }   
-		
-		function _setMode(mode) {
-            _changeMode(_id("comment-area"), mode);
-            
-            var services = _id("available-services").children;                      
-            for(var i=0; i < services.length; i++) {
-                _changeMode(services[i], mode);  
-            }           			
-		}
-		        
-        // Determine - landscape or portrait mode
-        if (isLandscape()) {		
-			_setMode("landscape");						
-        }
-        else {
-            _setMode("portrait");			
-        }       
-    }
-	
-	function _changeMode(id, mode) {
-		if (mode == "portrait") {
-            _removeClass(id, "landscape");
-			_addClass(id, "portrait");				
-		} else {
-            _removeClass(id, "portrait");
-			_addClass(id, "landscape");              			
-		}	   	
-	}
-	
-    /**
-     * Assign needed functions to the target namespace => defined public API.
-     */
-    targetNS.view = _show;
-    targetNS.teardown = _teardown;
-    targetNS.reset = _reset;    
-    
-    /**
-     * Synchronize context data from context object
-     */
-    targetNS.sync = _sync;
-    
-    /**
-     * Launch UI and initialize SNC
-     */
-    targetNS.create = function(options, handler, context) {
-        
-        // Show UI
-        _show(options, handler, context);
-        
-        // Start loading SNC networks
-        _sncInit(params.credentials, handler, context);
-    }			
-	
-	targetNS.status = _status;
-};
-// Create needed namespace ovi.player.share.ui
-window["ovi"] = window["ovi"] ||
-{};
-ovi.player = ovi.player ||
-{};
-ovi.player.share = ovi.player.share ||
-{};
-ovi.player.share.ui = ovi.player.share.ui ||
-{};
-
-/**
- * Label UI control implementation. TODO
- * 
- * This API tries to imitate medos framework UI controls for future compability.
- * @param {Object} params
- * @param {Object} target
- */
-ovi.player.share.ui.Label = function(params, target) {
-    
-	var CLICK_EVENT = "selected";
-	var that = this;
-
-    function createHtml() {
-	    var template = '<span class="ovi_Label">' + params.text + '</span>';
-	
-	    var node = document.createElement("div");  // Do we need this ??
-	    node.innerHTML = template;
-		return node;		
-	}
-
-    var _root = createHtml();
-	var _label = _root.firstChild;
- 
-    target.appendChild(_root);
-	
-    this.setProperty = function(name, value) {
-		_label[name] = value;
-	}
-	
-    this.getProperty = function(name) {
-        return _label[name];
-    }
-	
-    for(var v in params) {
-        this.setProperty(v, params[v]);
-    }
-}
-// Create needed namespace ovi.player.share.ui
-window["ovi"] = window["ovi"] ||
-{};
-ovi.player = ovi.player ||
-{};
-ovi.player.share = ovi.player.share ||
-{};
-ovi.player.share.ui = ovi.player.share.ui ||
-{};
-
-/**
- * Textarea UI control implementation. TODO
- * 
- * This API tries to imitate medos framework UI controls for future compability.
- * @param {Object} params
- * @param {Object} target
- */
-ovi.player.share.ui.TextArea = function(params, target) {
-    
-	var CLICK_EVENT = "selected";
-	var that = this;
-
-    function createHtml() {
-	    var template = '<textarea class="ovi_TextInput ovi_Textarea" rows="2"></textarea>';
-	
-	    var node = document.createElement("div");  // Do we need this ??
-	    node.innerHTML = template;
-		return node;		
-	}
-
-    var _root = createHtml();
-	var _textarea = _root.firstChild;
- 
-    target.appendChild(_root);
-	
-    this.setProperty = function(name, value) {
-		_textarea[name] = value;
-	}
-	
-	this.getProperty = function(name) {
-		return _textarea[name];
-	}
-	
-    for(var v in params) {
-        this.setProperty(v, params[v]);
-    }	
-}
-window["ovi"] = window["ovi"] ||
-{};
-ovi.player = ovi.player ||
-{};
-ovi.player.snc = ovi.player.snc ||
-{};
-
-ovi.player.snc.getInstance = function(config) {
-    var player = {};
-    player._cancel = function(options, handler, context) {
-        var callable = (typeof handler === "function");
-        if (callable) {
-            handler.call(context, "CANCEL_PENDING");
-        }
-        // TODO: cancel Player
-    };
-    player._pick = function(options, handler, context) {
-        var callable = (typeof handler === "function");
-        if (callable) {
-            handler.call(context, "PICK_PENDING");
-        }
-        // TODO: offer list of configured networks
-    };
-    player._view = function(options, handler, context) {
-        var callable = (typeof handler === "function");
-        if (callable) {
-            handler.call(context, "VIEW_PENDING");
-        }
-        // TODO: offer miniviews for networks list
-    };
-    player._sync = function(options, handler, context) {
-        var callable = (typeof handler === "function");
-        if (callable) {
-            handler.call(context, "SYNC_PENDING");
-        }
-        // TODO: connect to the Ovi API and SNC
-    };
-    ovi.player._getInstance.call(player, config);
-};
-
-ovi.player.snc.Player = ovi.player.snc.getInstance;
--- a/mpviewplugins/mpmediawallviewplugin/mpmediawallviewplugin.pro	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpmediawallviewplugin/mpmediawallviewplugin.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -56,3 +56,4 @@
            src/mpreflectioneffect.cpp
 RESOURCES += resources/mpmediawallviewresources.qrc
 
+DOCML += resources/mediawall.docml
--- a/mpviewplugins/mpmediawallviewplugin/resources/mpmediawallviewresources.qrc	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpmediawallviewplugin/resources/mpmediawallviewresources.qrc	Fri Aug 06 16:51:36 2010 -0500
@@ -1,7 +1,7 @@
 <RCC>
     
     <qresource prefix="/mediawallviewdocml" >
-        <file alias="mediawall.docml">mediawall.docml</file>
+        <file alias="mediawall.docml">mediawall.docml.bin</file>
     </qresource>
     
     <qresource prefix="/css">
--- a/mpviewplugins/mpmediawallviewplugin/src/mptracklistwidget.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpmediawallviewplugin/src/mptracklistwidget.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -18,7 +18,12 @@
 
 #include <QGraphicsSceneMouseEvent>
 
+#ifndef UNIT_TESTING
 #include <hbinstance.h>
+#else
+#include "hbinstancestub.h"
+#endif
+
 #include <hblistview.h>
 #include <hbframeitem.h>
 #include <hbmainwindow.h>
--- a/mpviewplugins/mpmediawallviewplugin/tsrc/tsrc.pro	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/tsrc.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -17,6 +17,8 @@
 TEMPLATE = subdirs
 
 SUBDIRS += unittest_mpmediawalldocumentloader
+SUBDIRS += unittest_mpmediawallview
+SUBDIRS += unittest_mpmediawallviewplugin
 
 CONFIG += ordered
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/inc/unittest_mpmediawallview.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,59 @@
+/*
+* 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 mpdetailsview.
+*
+*/
+
+#ifndef UNITTEST_MPMEDIAWALLVIEW_H_
+#define UNITTEST_MPMEDIAWALLVIEW_H_
+
+#include <QtTest/QtTest>
+
+//Forward Declaration
+class MpMediaWallView;
+
+
+
+class TestMpMediaWallView : public QObject
+{
+    Q_OBJECT
+
+public:
+
+    TestMpMediaWallView();
+    virtual ~TestMpMediaWallView();
+
+public slots:
+    void initTestCase();
+    void cleanupTestCase();
+    void init();
+    void cleanup();
+    
+private slots:
+
+    void testInitializeView();
+    void testActivateView();
+    void testDeactivateView();
+    void testSendToBackground();    
+    void testContextOpened();
+    void testContainerContentsChanged();
+    void testLibraryUpdated();
+    void testUpdatePlayPauseAction();
+
+private:
+    MpMediaWallView *mTest;
+    
+};
+
+#endif /* UNITTEST_MPMEDIAWALLVIEW_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/src/unittest_mpmediawallview.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,262 @@
+/*
+* 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 mpmediawallview.
+*
+*/
+
+#include <hbmainwindow.h>
+#include <hbapplication.h>
+#include <hbview.h>
+#include <QSignalSpy>
+
+#include "unittest_mpmediawallview.h"
+#include "stub/inc/mpplaybackdata.h"
+
+// Do this so we can access all member variables.
+#define private public
+#include "mpmediawallview.h"
+#undef private
+
+// Do this so we can access all memeber functions
+#include "../../src/mpmediawallview.cpp"
+
+/*!
+ Make our test case a stand-alone executable that runs all the test functions.
+ */
+int main(int argc, char *argv[])
+{
+    HbApplication app(argc, argv);
+    HbMainWindow window;
+
+    TestMpMediaWallView 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_mpmediawallview.txt";
+
+        return QTest::qExec(&tv, 3, pass);
+    }
+}
+
+//Constructor
+TestMpMediaWallView::TestMpMediaWallView()
+    : mTest(0)
+{
+
+}
+
+//Destructor
+TestMpMediaWallView::~TestMpMediaWallView()
+{
+    delete mTest;
+}
+
+/*!
+ Called before the first testfunction is executed.
+ */
+void TestMpMediaWallView::initTestCase()
+{
+
+}
+
+/*!
+ Called after the last testfunction was executed.
+ */
+void TestMpMediaWallView::cleanupTestCase()
+{
+QCoreApplication::processEvents();
+}
+
+/*!
+ Called before each testfunction is executed.
+ */
+void TestMpMediaWallView::init()
+{
+    mTest = new MpMediaWallView();
+}
+
+/*!
+ Called after every testfunction.
+ */
+void TestMpMediaWallView::cleanup()
+{
+    delete mTest;
+    mTest = 0;
+}
+
+/*!
+ Test InitializeView
+ */
+void TestMpMediaWallView::testInitializeView()
+{
+
+    QVERIFY(!mTest->mEngine);
+    QVERIFY(!mTest->mCollectionData);
+    QVERIFY(!mTest->mModel);
+    QVERIFY(!mTest->mAlbumCover);
+    QVERIFY(!mTest->mTrackList);
+    QVERIFY(!mTest->mPlaybackData);
+    QVERIFY(!mTest->mPauseIcon);
+    QVERIFY(!mTest->mPlayIcon);
+    QVERIFY(!mTest->mPlayPauseContainer);
+
+    //test member variables are initialized
+    mTest->initializeView();
+    QVERIFY(mTest->mEngine);
+    QVERIFY(mTest->mCollectionData);
+    QVERIFY(mTest->mModel);
+    QVERIFY(mTest->mAlbumCover);
+    QVERIFY(mTest->mTrackList);
+    QVERIFY(mTest->mPlaybackData);
+    QVERIFY(mTest->mPauseIcon);
+    QVERIFY(mTest->mPlayIcon);
+    QVERIFY(mTest->mPlayPauseContainer);
+
+}
+
+/*!
+ Test ActivateView
+ */
+void TestMpMediaWallView::testActivateView()
+{
+
+    //Create playbackdata and set to playing state
+    mTest->mPlaybackData = new MpPlaybackData();    
+    mTest->mPlaybackData->setPlaybackState(MpPlaybackData::Playing);
+
+    mTest->mIconUpdateNedded=false;
+    mTest->mActivated=false;
+
+    mTest->activateView();
+    QCOMPARE(mTest->mActivated, true );
+}
+
+/*!
+ Test DeActivateView
+ */
+void TestMpMediaWallView::testDeactivateView()
+{
+    mTest->initializeView();
+    mTest->mActivated = true;
+    mTest->mShowingSongsList = true;
+    mTest->setUpListAnimation();
+    mTest->deactivateView();
+    QCOMPARE(mTest->mActivated, false);
+    QCOMPARE(mTest->mShowingSongsList, false);
+
+}
+
+/*!
+  Test SendToBackground
+  */
+void TestMpMediaWallView::testSendToBackground()
+{
+    //test that signal gets emitted
+    QSignalSpy spy( mTest, SIGNAL(command(int)) );
+    mTest->sendToBackground();
+    QCOMPARE(spy.count(), 1);
+    QCOMPARE(spy.at(0).at(0), QVariant(MpCommon::SendToBackground));
+
+}
+
+/*!
+  Test ContextOpened
+  */
+/*  test case fails because potential problem in docml
+void TestMpMediaWallView::testContextOpened()
+{
+
+    mTest->mCollectionData = new MpMpxCollectionData();
+    mTest->mDocumentLoader = new MpMediaWallDocumentLoader();
+
+    QVERIFY(mTest->mCollectionData->context() == QVariant(ECollectionContextUnknown));
+    mTest->contextOpened(ECollectionContextArtists);
+    QVERIFY(mTest->mCollectionData->context() == QVariant(ECollectionContextAlbumsMediaWall));
+
+    //test loading 'empty' section, docml loading fails because initialize not called
+    QVERIFY(!mTest->mNoMusic);  
+    mTest->contextOpened(ECollectionContextAlbumsMediaWall);
+    QVERIFY(mTest->mNoMusic);  
+}
+*/
+
+/*!
+  Test ContextOpened
+  */
+void TestMpMediaWallView::testContextOpened()
+{
+    //test loading 'empty'
+    mTest->initializeView();
+    mTest->contextOpened(ECollectionContextAlbumsMediaWall);
+    //test loading 'mediawall'
+    mTest->mCollectionData->setCount(3);    
+    mTest->contextOpened(ECollectionContextAlbumsMediaWall);
+}
+
+/*!
+  Test ContainerContentsChanged
+  */
+void TestMpMediaWallView::testContainerContentsChanged()
+{
+    //test containerContetstsChanged calls opencallection when library not updating
+    mTest->initializeView();
+    QVERIFY(mTest->mEngine->mOpenCollectionCalled == 1);
+    mTest->containerContentsChanged();
+    QVERIFY(mTest->mEngine->mOpenCollectionCalled == 2);
+    mTest->libraryAboutToUpdate();
+    mTest->containerContentsChanged();
+    QVERIFY(mTest->mEngine->mOpenCollectionCalled == 2);
+}
+
+/*!
+  Test LibraryUpdated
+  */
+void TestMpMediaWallView::testLibraryUpdated()
+{
+   //test libraryupdated changes flag and calls opencallection
+    mTest->initializeView();
+    mTest->mEngine->mOpenCollectionCalled=0;    
+    mTest->mLibraryUpdating=true;
+    mTest->libraryUpdated();
+    QVERIFY(mTest->mLibraryUpdating == false);
+    QVERIFY(mTest->mEngine->mOpenCollectionCalled == 1);
+}
+
+/*!
+  Test UpdatePlayPauseAction
+  */
+void TestMpMediaWallView::testUpdatePlayPauseAction()
+{
+    //test icon gets updated correctly
+    mTest->initializeView();
+    mTest->mActivated = true;
+    
+    mTest->mPlaybackData->setPlaybackState( MpPlaybackData::Paused );
+    mTest->updatePlayPauseAction();
+    HbIcon temp = mTest->mPlayPauseAction->icon();
+    QVERIFY( mTest->mPlayPauseAction->icon() ==  HbIcon( "qtg_mono_play" ));
+
+    mTest->mPlaybackData->setPlaybackState( MpPlaybackData::Playing );
+    mTest->updatePlayPauseAction();
+    QVERIFY( mTest->mPlayPauseAction->icon() ==  HbIcon( "qtg_mono_pause" ));
+
+    mTest->mPlaybackData->setPlaybackState( MpPlaybackData::Stopped );
+    mTest->updatePlayPauseAction();
+    QVERIFY( mTest->mPlayPauseAction->icon() ==  HbIcon( "qtg_mono_play" ));
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/inc/hgmediawall.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,98 @@
+/*
+* 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: HgMediawall stub for testing mpmediawallview
+*
+*/
+
+#ifndef HGMEDIAWALL_H
+#define HGMEDIAWALL_H
+
+//includes
+#include <hbglobal.h>
+#include <hbnamespace.h>
+#include <hbwidget.h>
+#include <hbscrollbar.h>
+
+class HgWidget : public HbWidget
+{
+    Q_OBJECT
+    Q_PROPERTY(QSizeF itemSize READ itemSize WRITE setItemSize)
+
+public:
+
+    enum ScrollBarPolicy {
+        ScrollBarAsNeeded = Qt::ScrollBarAsNeeded,
+        ScrollBarAlwaysOff = Qt::ScrollBarAlwaysOff,
+        ScrollBarAlwaysOn = Qt::ScrollBarAlwaysOn,
+        ScrollBarAutoHide
+    };
+
+    enum IndexFeedbackPolicy {
+        IndexFeedbackNone = 0,
+        IndexFeedbackSingleCharacter,
+        IndexFeedbackThreeCharacter,
+        IndexFeedbackString
+    };
+
+    explicit HgWidget ( QGraphicsItem *parent = 0 );
+    virtual ~HgWidget ();
+
+    void setScrollBarPolicy( ScrollBarPolicy policy );
+    virtual void setModel(QAbstractItemModel *model);
+    void scrollTo(const QModelIndex &index);
+    QModelIndex currentIndex() const;
+
+    void setItemSize(const QSizeF& size);
+    QSizeF itemSize() const;
+    void setDefaultImage(QImage defaultImage);
+    void setIndexFeedbackPolicy( IndexFeedbackPolicy policy);
+    HbScrollBar *scrollBar() const;
+    bool getItemOutline(const QModelIndex& index, QPolygonF& points);
+
+signals:
+
+    void scrollingEnded();
+
+};
+
+class HgMediawall : public HgWidget
+{
+    Q_OBJECT
+
+public:
+
+    enum LabelPosition {
+        PositionNone = 0,
+        PositionAboveImage,
+        PositionBelowImage
+    };
+
+    explicit HgMediawall( QGraphicsItem *parent = 0 );
+    virtual ~HgMediawall();
+
+    void setTitlePosition( LabelPosition position );
+    void setDescriptionPosition( LabelPosition position );
+    void setTitleFontSpec( const HbFontSpec &fontSpec );
+    void setDescriptionFontSpec( const HbFontSpec &fontSpec );
+
+    void enableReflections( bool enabled );
+    bool reflectionsEnabled() const;
+
+public:
+
+    bool        mReflectionEnabled;
+
+};
+
+#endif    // HGMEDIAWALL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/inc/mpalbumcoverwidget.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,40 @@
+/*
+* 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: MpAlbumCoverWidget stub for testing mpmediawallview
+*
+*/
+
+#ifndef MPALBUMCOVERWIDGET_H
+#define MPALBUMCOVERWIDGET_H
+
+//includes
+#include <QObject>
+#include <HbWidget>
+#include <QGraphicsItem>
+
+class HbIcon;
+
+class MpAlbumCoverWidget : public HbWidget
+{
+    Q_OBJECT
+
+public:
+
+    explicit MpAlbumCoverWidget( QGraphicsItem *parent = 0 );
+    virtual ~MpAlbumCoverWidget();
+    void setIcon(const HbIcon &icon );
+    void setDefaultIcon( const HbIcon &icon );
+};
+
+#endif    // MPALBUMCOVERWIDGET_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/inc/mpcollectiondatamodel.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,47 @@
+/*
+* 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 collection abstract data model stub for testing mpmediawallview.
+*
+*
+*/
+
+#ifndef MPCOLLECTIONDATAMODEL_H
+#define MPCOLLECTIONDATAMODEL_H
+
+#include <QAbstractListModel>
+
+class MpMpxCollectionData;
+class MpCollectionAlbumArtManager;
+
+
+class MpCollectionDataModel : public QAbstractListModel
+{
+    Q_OBJECT
+
+public:
+
+    explicit MpCollectionDataModel( MpMpxCollectionData *data, QObject *parent=0 );
+    virtual ~MpCollectionDataModel();
+
+    int rowCount(const QModelIndex &parent=QModelIndex()) const;
+    QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const;
+    void setItemVisibility(const QModelIndex &index, bool visible);
+
+    void refreshModel();
+    MpMpxCollectionData *collectionData();
+
+};
+
+#endif // MPCOLLECTIONDATAMODEL_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/inc/mpcollectiontbonelistdatamodel.h	Fri Aug 06 16:51:36 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 collection abstract data model (for TBone) stub
+*              for testing mpmediawallview.
+*
+*/
+
+#ifndef MPCOLLECTIONTBONELISTDATAMODEL_H
+#define MPCOLLECTIONTBONELISTDATAMODEL_H
+
+#include <QAbstractListModel>
+
+class MpMpxCollectionData;
+class MpPlaybackData;
+
+class MpCollectionTBoneListDataModel : public QAbstractListModel
+{
+    Q_OBJECT
+
+public:
+
+    explicit MpCollectionTBoneListDataModel( MpMpxCollectionData *collectionData,
+                MpPlaybackData *playbackData = 0, QObject *parent = 0 );
+    virtual ~MpCollectionTBoneListDataModel();
+
+    int rowCount(const QModelIndex &parent=QModelIndex()) const;
+    QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const;
+
+
+};
+
+#endif // MPCOLLECTIONTBONELISTDATAMODEL_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/inc/mpengine.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,121 @@
+/*
+* 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 stub for testing mpmediawallview
+*
+*/
+
+#ifndef MPENGINE_H
+#define MPENGINE_H
+
+#include <QObject>
+#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:
+
+    enum UsbBlockingState {
+        USB_NotConnected,          // Not connected
+        USB_Connected,             // Connected in MTP mode but not synchronizing
+        USB_Synchronizing          // Connected in MassStorage mode or MTP mode and synchronizing
+    };
+
+private:
+    explicit MpEngine();
+
+public:
+
+    virtual ~MpEngine();
+
+    // Harvester related
+    void refreshLibrary();
+    bool verifyUsbBlocking( bool showMessage = false );
+    void checkForSystemEvents();
+    
+    // Collection related
+
+    void openCollection( TCollectionContext context );
+    void openCollectionItem( int index );
+    void back();
+    void findPlaylists( QStringList &playlists );
+    void createPlaylist( QString &playlistName, QList<int> &selection, MpMpxCollectionData* collectionData = 0  );
+    void saveToPlaylist( int playlistIndex, QList<int> &selection );
+    void saveToCurrentPlaylist( QList<int> &selection, MpMpxCollectionData *collectionData );    
+    void renamePlaylist( QString &newName, int index );
+    void renamePlaylist( QString &newName );
+    void deleteSongs( QList<int> &selection );
+
+    void previewItem( int index );
+    void openIsolatedCollection( TCollectionContext context );
+    void releaseIsolatedCollection();
+
+    void findAlbumSongs( int index );
+    void playAlbumSongs( int albumIndex, int songIndex, MpMpxCollectionData* collectionData = 0 );
+
+    MpMpxCollectionData *collectionData();
+    
+    // Playback related  
+    MpPlaybackData *playbackData();
+    
+    // Details related
+    MpSongData *songData();
+    void retrieveSong();
+
+
+public slots:
+
+    // Collection related
+    void reopenCollection();
+    void reorderPlaylist( int playlistId, int songId, int originalOrdinal, int newOrdinal );
+
+    // Playback related
+    void playEmbedded( QString aFilename );
+    void playEmbedded( const XQSharableFile&  file );
+    void playPause();
+    void stop();
+    void skipForward();
+    void skipBackward();
+    void setPosition( int position );
+    void setShuffle( bool mode );
+    void setRepeat( bool mode );
+
+public:
+    //for stubs
+    int mOpenCollectionCalled;
+
+private:
+
+    Q_DISABLE_COPY( MpEngine )
+
+};
+
+#endif // MPENGINE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/inc/mpenginefactory.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,46 @@
+/*
+* 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 enginefactory stub for testing mpmediawallview
+*
+*/
+
+#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 MpEngine *createIsolatedEngine( MpEngine::EngineMode mode );
+    static void close();
+	
+private:       
+    MpEngine    *mSharedEngine;
+    QList<MpEngine *>    mEngines;
+};
+
+#endif // MPENGINEFACTORY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/inc/mpmediawalldocumentloader.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,32 @@
+/*
+* 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 media wall view custom document loader stub for testing mpmediawallview.
+*
+*/
+
+#ifndef MPMEDIAWALLDOCUMENTLOADER_H
+#define MPMEDIAWALLDOCUMENTLOADER_H
+
+
+#include <hbdocumentloader.h>
+
+
+class MpMediaWallDocumentLoader : public HbDocumentLoader
+{
+public:
+    virtual QObject *createObject(const QString& type, const QString &name);
+};
+
+#endif  // MPMEDIAWALLDOCUMENTLOADER_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/inc/mpmpxcollectiondata.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,72 @@
+/*
+* 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: MpMpxCollectionData stub for testing mpmediawallview
+*
+*/
+
+#ifndef MPMPXCOLLECTIONDATA_H
+#define MPMPXCOLLECTIONDATA_H
+
+#include <QObject>
+#include "mpmpxcollectionviewdefs.h"
+
+class CMPXMedia;
+
+class MpMpxCollectionData : public QObject
+{
+
+public:
+
+    enum DataType {
+        Title,
+        Uri,
+        Duration,
+        Count,
+        Artist,
+        Album,
+        Genre,
+        Rating,
+        AlbumArtUri
+    };
+
+    // Stub functions
+    explicit MpMpxCollectionData( QObject *parent=0 );
+    virtual ~MpMpxCollectionData();
+    void setCount(int count);
+
+    TCollectionContext context();
+
+    int count() const;
+    QString collectionTitle() const;
+    QString itemData( int index, MpMpxCollectionData::DataType type ) const;
+    void setContext( TCollectionContext context );
+    int itemIndex( int itemUniqueId );    
+    bool setCurrentAlbum( int index );
+
+    const CMPXMedia& containerMedia();
+
+public:
+
+    CMPXMedia               *mContainerMedia;
+    bool                    mMediaSet;
+    TCollectionContext      mContext;
+    int                     mCount;
+    int                     mCurrentAlbumIndex;
+    bool                    mCurrentAlbumAvailable;
+    bool                    mReturnCollectionTitle;
+
+};
+
+#endif // MPMPXCOLLECTIONDATA_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/inc/mpplaybackdata.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,66 @@
+/*
+* 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: mpplaybackdata stub for testing mpmediawallview
+*
+*/
+
+#ifndef MPPLAYBACKDATA_H
+#define MPPLAYBACKDATA_H
+
+//includes
+#include <QObject>
+#include <QMetaType>
+
+
+class MpPlaybackData : public QObject
+{
+    Q_OBJECT
+
+public:
+
+    enum SimplifiedState {
+        NotPlaying,
+        Playing,
+        Paused,
+        Stopped
+    };
+
+
+
+    explicit MpPlaybackData();
+    virtual ~MpPlaybackData();
+
+    // Stub functions
+    void emitPlaybackStateChanged();
+    void setPlaybackState(MpPlaybackData::SimplifiedState state);
+
+signals:
+    void playbackStateChanged();
+    void playbackInfoChanged();
+
+public:
+    int albumId();
+    const QString& title() const;
+    const QString& artist() const;
+    MpPlaybackData::SimplifiedState playbackState() const;
+
+
+private:
+    QString                  mArtist;
+    QString                  mTitle;
+    SimplifiedState          mPlaybackState;
+
+};
+
+#endif  // MPPLAYBACKDATA_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/inc/mpreflectioneffect.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,41 @@
+/*
+* 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:  stub for mpreflectioneffect
+*
+*/
+#ifndef MPREFLECTIONEFFECT_H
+#define MPREFLECTIONEFFECT_H
+
+#include <QGraphicsEffect>
+
+class MpReflectionEffect: public QGraphicsEffect
+{
+    Q_OBJECT
+
+public:
+    MpReflectionEffect(QObject *parent = 0);
+    ~MpReflectionEffect();
+
+    QRectF boundingRectFor(const QRectF &rect) const;
+
+protected:
+    void draw(QPainter *painter);
+
+private:
+    Q_DISABLE_COPY(MpReflectionEffect)
+};
+
+#endif // MPREFLECTIONEFFECT_H
+
+// EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/inc/mptracklistwidget.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,38 @@
+/*
+* 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:  Track List Widget  stub for testing mpmediawallview
+*
+*/
+#ifndef MPTRACKLISTWIDGET_H
+#define MPTRACKLISTWIDGET_H
+
+#include <hbwidget.h>
+
+class HbListView;
+
+class MpTrackListWidget : public HbWidget
+{
+    Q_OBJECT
+  
+public:
+    
+    MpTrackListWidget( QGraphicsItem *parent = 0 );
+    virtual ~MpTrackListWidget();
+    HbListView *list(); 
+
+};
+
+#endif // MPTRACKLISTWIDGET_H
+
+// EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/src/hgmediawall.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,164 @@
+/*
+* 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: HgMediawall stub for testing mpcollectioncontainers
+*
+*/
+
+#include "hgmediawall.h"
+
+
+/*!
+ Constructs the mediawall widget stub.
+ */
+HgWidget::HgWidget( QGraphicsItem *parent )
+{
+    Q_UNUSED(parent);
+}
+
+/*!
+ Destructs the mediawall widget stub.
+ */
+HgWidget::~HgWidget()
+{
+}
+
+/*!
+ Stub function
+ */
+void HgWidget::setScrollBarPolicy( ScrollBarPolicy policy )
+{
+    Q_UNUSED(policy);
+}
+
+/*!
+ Stub function
+ */
+void HgWidget::setModel( QAbstractItemModel *model )
+{
+    Q_UNUSED(model);
+}
+
+/*!
+ Stub function
+ */
+void HgWidget::scrollTo( const QModelIndex &index )
+{
+    Q_UNUSED(index);
+}
+
+/*!
+ Stub function
+ */
+QModelIndex HgWidget::currentIndex() const
+{
+    return QModelIndex();
+}
+
+void HgWidget::setItemSize(const QSizeF& size)
+{
+    Q_UNUSED(size);
+}
+
+QSizeF HgWidget::itemSize() const
+{
+    return QSizeF();
+}
+
+void HgWidget::setDefaultImage(QImage defaultImage)
+{
+    Q_UNUSED(defaultImage);
+}
+
+void HgWidget::setIndexFeedbackPolicy( IndexFeedbackPolicy policy)
+{
+    Q_UNUSED(policy);
+}
+HbScrollBar *HgWidget::scrollBar() const
+{
+    return new HbScrollBar();
+}
+bool HgWidget::getItemOutline(const QModelIndex& index, QPolygonF& points)
+{
+    Q_UNUSED(index);
+    Q_UNUSED(points);
+    return false;
+}
+
+//===========================================================================
+//===========================================================================
+
+/*!
+ Constructs the mediawall widget stub.
+ */
+HgMediawall::HgMediawall( QGraphicsItem *parent )
+{
+    Q_UNUSED(parent);
+    mReflectionEnabled = true;
+}
+
+/*!
+ Destructs the mediawall widget stub.
+ */
+HgMediawall::~HgMediawall()
+{
+}
+
+/*!
+ Stub function
+ */
+void HgMediawall::setTitlePosition( LabelPosition position )
+{
+    Q_UNUSED(position);
+}
+
+/*!
+ Stub function
+ */
+void HgMediawall::setDescriptionPosition( LabelPosition position )
+{
+    Q_UNUSED(position);
+}
+
+/*!
+ Stub function
+ */
+void HgMediawall::setTitleFontSpec( const HbFontSpec &fontSpec )
+{
+    Q_UNUSED(fontSpec);
+}
+
+/*!
+ Stub function
+ */
+void HgMediawall::setDescriptionFontSpec( const HbFontSpec &fontSpec )
+{
+    Q_UNUSED(fontSpec);
+}
+
+/*!
+ Stub function
+ */
+void HgMediawall::enableReflections( bool enabled )
+{
+    mReflectionEnabled = enabled;
+}
+
+/*!
+ Stub function
+ */
+bool HgMediawall::reflectionsEnabled() const
+{
+    return mReflectionEnabled;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/src/mpalbumcoverwidget.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,52 @@
+/*
+* 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: MpAlbumCoverWidget stub for testing MpPlaybackDocumentLoader
+*
+*/
+
+#include "mpalbumcoverwidget.h"
+
+
+/*!
+Stub
+ */
+MpAlbumCoverWidget::MpAlbumCoverWidget( QGraphicsItem *parent ):
+            HbWidget(parent)
+
+{
+       Q_UNUSED(parent);
+}
+
+/*!
+ Stub function
+ */
+MpAlbumCoverWidget::~MpAlbumCoverWidget()
+{
+}
+
+/*!
+ Stub function
+ */
+void MpAlbumCoverWidget::setIcon(const HbIcon &icon )
+{
+    Q_UNUSED(icon);
+}
+
+/*!
+ Stub function
+ */
+void MpAlbumCoverWidget::setDefaultIcon( const HbIcon &icon )
+{
+        Q_UNUSED(icon);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/src/mpcollectiondatamodel.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,81 @@
+/*
+* 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 collection abstract data model stub for testing
+*              mpcollectioncontainers.
+*
+*/
+
+
+#include "stub/inc/mpcollectiondatamodel.h"
+#include "stub/inc/mpmpxcollectiondata.h"
+
+
+/*!
+ Stub function
+ */
+MpCollectionDataModel::MpCollectionDataModel( MpMpxCollectionData *data, QObject *parent )
+    : QAbstractListModel(parent)
+{
+    Q_UNUSED(data);
+}
+
+/*!
+ Stub function
+ */
+MpCollectionDataModel::~MpCollectionDataModel()
+{
+}
+
+/*!
+ Stub function
+ */
+int MpCollectionDataModel::rowCount( const QModelIndex &parent ) const
+{
+    Q_UNUSED(parent);
+    return 0;
+}
+
+/*!
+ Stub function
+ */
+QVariant MpCollectionDataModel::data(const QModelIndex &index, int role) const
+{
+    Q_UNUSED(index);
+    Q_UNUSED(role);
+    return QVariant();
+}
+
+/*!
+ Stub function
+ */
+void MpCollectionDataModel::refreshModel()
+{
+}
+
+/*!
+ Stub function
+ */
+MpMpxCollectionData *MpCollectionDataModel::collectionData()
+{
+    return new MpMpxCollectionData();
+}
+
+/*!
+ Stub function
+ */
+void MpCollectionDataModel::setItemVisibility(const QModelIndex &index, bool visible)
+{
+    Q_UNUSED(index);
+    Q_UNUSED(visible);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/src/mpcollectiontbonelistdatamodel.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,59 @@
+/*
+* 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 collection abstract data model (for TBone) stub
+*              for testing mpcollectioncontainers.
+*
+*/
+
+#include "stub/inc/mpcollectiontbonelistdatamodel.h"
+#include "stub/inc/mpmpxcollectiondata.h"
+#include "mptrace.h"
+
+/*!
+ Stub function
+ */
+MpCollectionTBoneListDataModel::MpCollectionTBoneListDataModel(MpMpxCollectionData *collectionData,
+                                                               MpPlaybackData *playbackData, QObject *parent )
+    : QAbstractListModel(parent)
+{
+    Q_UNUSED(collectionData);
+    Q_UNUSED(playbackData);
+}
+
+/*!
+ Stub function
+ */
+MpCollectionTBoneListDataModel::~MpCollectionTBoneListDataModel()
+{
+}
+
+/*!
+ Stub function
+ */
+int MpCollectionTBoneListDataModel::rowCount( const QModelIndex &parent ) const
+{
+    Q_UNUSED(parent);
+    return 0;
+}
+
+/*!
+ Stub function
+ */
+QVariant MpCollectionTBoneListDataModel::data(const QModelIndex &index, int role) const
+{
+    Q_UNUSED(index);
+    Q_UNUSED(role);    
+    return QVariant();;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/src/mpengine.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,238 @@
+/*
+* 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: Stub for MpEngine for testing mpmediawallview
+*
+*/
+
+#include "mpengine.h"
+#include "mpplaybackdata.h"
+#include "mptrace.h"
+#include "mpmpxcollectiondata.h"
+
+
+MpEngine::MpEngine() : mOpenCollectionCalled(0)
+{
+    TX_LOG_ARGS("Stub")
+}
+
+/*!
+ Destructs music player engine.
+ */
+MpEngine::~MpEngine()
+{
+    TX_ENTRY_ARGS("Stub")
+}
+
+void MpEngine::refreshLibrary()
+{
+    TX_ENTRY_ARGS("Stub")
+}
+
+bool MpEngine::verifyUsbBlocking( bool showMessage )
+{
+    Q_UNUSED(showMessage)
+    TX_ENTRY_ARGS("Stub")
+    return false;
+}
+
+void MpEngine::checkForSystemEvents()
+{
+    TX_ENTRY_ARGS("Stub")
+}
+
+
+void MpEngine::openCollection( TCollectionContext context )
+{
+    Q_UNUSED(context)
+    mOpenCollectionCalled++;
+    TX_ENTRY_ARGS("Stub")
+}
+
+void MpEngine::openCollectionItem( int index )
+{
+    Q_UNUSED(index)
+    TX_ENTRY_ARGS("Stub")
+}
+
+void MpEngine::back()
+{
+    TX_ENTRY_ARGS("Stub")
+}
+
+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")
+}
+
+void MpEngine::releaseIsolatedCollection()
+{
+    TX_ENTRY_ARGS("Stub")
+}
+
+void MpEngine::findAlbumSongs( int index )
+{
+    Q_UNUSED(index)
+    TX_ENTRY_ARGS("Stub")
+}
+
+void MpEngine::playAlbumSongs( int albumIndex, int songIndex, MpMpxCollectionData* collectionData )
+{
+    Q_UNUSED(albumIndex)
+    Q_UNUSED(songIndex)
+    Q_UNUSED(collectionData)
+    TX_ENTRY_ARGS("Stub")
+}
+
+MpMpxCollectionData *MpEngine::collectionData()
+{
+    TX_ENTRY_ARGS("Stub")
+    return new MpMpxCollectionData();
+}
+
+void MpEngine::reopenCollection()
+{
+    TX_ENTRY_ARGS("Stub")
+}
+
+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")
+}
+
+MpPlaybackData *MpEngine::playbackData()
+{
+    TX_ENTRY_ARGS("Stub")
+    return new MpPlaybackData();
+}
+
+
+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")
+}
+
+void MpEngine::playPause()
+{
+    TX_ENTRY_ARGS("Stub")
+}
+
+void MpEngine::stop()
+{
+    TX_ENTRY_ARGS("Stub")
+}
+
+void MpEngine::skipForward()
+{
+    TX_ENTRY_ARGS("Stub")
+}
+
+void MpEngine::skipBackward()
+{
+    TX_ENTRY_ARGS("Stub")
+}
+
+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")
+}
+
+MpSongData *MpEngine::songData()
+{
+    TX_ENTRY_ARGS("Stub")
+    return 0;
+}
+
+void MpEngine::retrieveSong()
+{
+    TX_ENTRY_ARGS("Stub")
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/src/mpenginefactory.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,100 @@
+/*
+* 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()
+{
+    TX_ENTRY_ARGS("Stub")
+}
+
+/*!
+ Returns the singleton instance of music player engine factory.
+ */
+MpEngineFactory * MpEngineFactory::instance()
+{
+    TX_LOG_ARGS("MpEngineFactory::instance() Stub")
+    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*/ )
+{
+    TX_LOG_ARGS("MpEngineFactory::createSharedEngine() Stub")
+    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;        
+    }
+    MpEngine *ptr;
+    foreach ( ptr, instance()->mEngines ) {
+        delete ptr;
+        ptr = 0;
+    }
+}
+
+/*!
+ Returns an instance to an isolated engine with \a mode.
+ */
+MpEngine *MpEngineFactory::createIsolatedEngine( MpEngine::EngineMode /*mode*/ )
+{
+    instance()->mEngines.append( new MpEngine() );    
+    return instance()->mEngines.last();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/src/mpmediawalldocumentloader.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,49 @@
+/*
+* 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: Stub for Music Player media wall view custom document loader.
+*
+*/
+
+#include "mpmediawalldocumentloader.h"
+#include "mpcommondefs.h"
+#include "hgmediawall.h"
+#include "mptrace.h"
+
+#include <HbToolButton>
+
+/*!
+Stub implementation - load real widgets
+ */
+QObject *MpMediaWallDocumentLoader::createObject(const QString& type, const QString &name)
+{
+    TX_LOG_ARGS("MpMediaWallDocumentLoader::createObject() Stub");
+    TX_ENTRY_ARGS("type=" << type << ", name=" << name);
+
+    if ( type == HgMediawall::staticMetaObject.className() ) {
+        QObject *object = new HgMediawall();
+        object->setObjectName(name);
+        TX_EXIT
+        return object;
+    }
+    else if ( type == HbToolButton::staticMetaObject.className() ) {
+        QObject *object = new HbToolButton();
+        object->setObjectName(name);
+        TX_EXIT
+        return object;
+    }
+
+    TX_EXIT
+    return HbDocumentLoader::createObject(type, name);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/src/mpmpxcollectiondata.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,120 @@
+/*
+* 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: MpMpxCollectionData stub for testing mpcollectioncontainers
+*
+*/
+
+#include "mptrace.h"
+#include "stub/inc/mpmpxcollectiondata.h"
+#include <mpxmedia.h>
+
+
+/*!
+ Stub function.
+ */
+MpMpxCollectionData::MpMpxCollectionData( QObject *parent )
+    : QObject(parent),
+      mContainerMedia(0),
+      mMediaSet(false),
+      mContext(ECollectionContextUnknown),
+      mCount(0),
+      mCurrentAlbumIndex(-1),
+      mCurrentAlbumAvailable(false),
+      mReturnCollectionTitle(true)
+{
+}
+
+/*!
+ Stub function.
+*/
+MpMpxCollectionData::~MpMpxCollectionData()
+{
+}
+
+/*!
+ Stub function.
+*/
+TCollectionContext MpMpxCollectionData::context()
+{
+    return mContext;
+}
+
+/*!
+ Stub function.
+ */
+int MpMpxCollectionData::count() const
+{
+    return mCount;
+}
+
+/*!
+ Stub function.
+ */
+QString MpMpxCollectionData::collectionTitle() const
+{
+    if ( mReturnCollectionTitle ) {
+        return QString("Title");
+    }
+    else {
+        return QString();
+    }
+}
+
+/*!
+ Stub function.
+*/
+QString MpMpxCollectionData::itemData( int index, MpMpxCollectionData::DataType type ) const
+{
+    Q_UNUSED(index);
+    if ( type == MpMpxCollectionData::Uri ) {
+        return QString("Uri");
+    }
+    else {
+        return QString();
+    }
+}
+
+/*!
+ Stub function.
+*/
+bool MpMpxCollectionData::setCurrentAlbum( int index )
+{
+    mCurrentAlbumIndex = index;
+    return mCurrentAlbumAvailable;
+}
+
+/*!
+ Stub function.
+*/
+const CMPXMedia& MpMpxCollectionData::containerMedia()
+{
+    return *mContainerMedia;
+}
+
+void MpMpxCollectionData::setContext( TCollectionContext context )
+{
+    TX_LOG_ARGS("MpMpxCollectionData::setContext() Stub" << context)
+    mContext=context;
+}
+
+int MpMpxCollectionData::itemIndex( int itemUniqueId )
+{
+    Q_UNUSED(itemUniqueId);
+    return 0;
+}
+
+void MpMpxCollectionData::setCount(int count)
+    {
+    mCount=count;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/src/mpplaybackdata.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,83 @@
+/*
+* 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: MpPlaybackData stub for testing mpnowplayingwidget
+*
+*/
+
+#include "stub/inc/mpplaybackdata.h"
+
+
+int gUpdateCounter = 0;
+
+
+/*!
+ Stub function.
+ */
+MpPlaybackData::MpPlaybackData()
+    : mPlaybackState(NotPlaying)
+{
+    gUpdateCounter++;
+}
+
+/*!
+ Stub function.
+ */
+MpPlaybackData::~MpPlaybackData()
+{
+}
+
+/*!
+ Stub function.
+ */
+const QString& MpPlaybackData::title() const
+{
+    return mTitle;
+}
+
+/*!
+ Stub function.
+ */
+const QString& MpPlaybackData::artist() const
+{
+    return mArtist;
+}
+
+/*!
+ Stub function.
+ */
+MpPlaybackData::SimplifiedState MpPlaybackData::playbackState() const
+{
+    return mPlaybackState;
+}
+
+/*!
+ Stub function.
+ */
+int MpPlaybackData::albumId()
+{
+    return 0;
+}
+
+/*!
+ Stub function.
+ */
+void MpPlaybackData::emitPlaybackStateChanged()
+{
+   emit playbackStateChanged();
+}
+
+ void MpPlaybackData::setPlaybackState(MpPlaybackData::SimplifiedState state)
+ {
+     mPlaybackState=state;
+ }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/src/mpreflectioneffect.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,52 @@
+/*
+* 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: stub for mpreflectioneffects
+*
+*/
+
+#include "mpreflectioneffect.h"
+
+/*!
+    Stub
+*/
+MpReflectionEffect::MpReflectionEffect(QObject *parent)
+    : QGraphicsEffect( parent )
+{
+}
+
+/*!
+    Stub
+*/
+MpReflectionEffect::~MpReflectionEffect()
+{
+}
+
+/*!
+    Stub
+*/
+QRectF MpReflectionEffect::boundingRectFor(const QRectF &rect) const
+{
+    Q_UNUSED(rect)
+    return QRectF();
+}
+
+/*!
+    Stub
+*/
+void MpReflectionEffect::draw(QPainter *painter)
+{
+    Q_UNUSED(painter)
+}
+
+// EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/stub/src/mptracklistwidget.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,54 @@
+/*
+* 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: Track List Widget for Music Player Media Wall.
+*
+*/
+
+
+#include <QGraphicsSceneMouseEvent>
+
+#include <hbinstance.h>
+#include <hblistview.h>
+#include <hbframeitem.h>
+#include <hbmainwindow.h>
+#include <hbstyleloader.h>
+
+
+#include "mptracklistwidget.h"
+#include "mpreflectioneffect.h"
+
+/*!
+    Stub.
+ */
+MpTrackListWidget::MpTrackListWidget( QGraphicsItem *parent ) : HbWidget( parent ) 
+{
+
+}
+
+/*!
+    Stub
+ */
+MpTrackListWidget::~MpTrackListWidget()
+{
+}
+
+/*!
+    Stub
+ */
+HbListView *MpTrackListWidget::list()
+{
+    return new HbListView();
+} 
+
+//EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallview/unittest_mpmediawallview.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,65 @@
+#
+# 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: 
+#
+
+TEMPLATE = app
+CONFIG += qtestlib hb symbian_test
+TARGET = unittest_mpmediawallview
+TARGET.CAPABILITY = CAP_APPLICATION
+
+DEPENDPATH += . 
+INCLUDEPATH += ./stub/inc \
+	       ../../inc \
+	       ../../../../inc
+	       
+
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+INCLUDEPATH += $$MW_LAYER_PUBLIC_EXPORT_PATH(hgwidgets)
+
+LIBS += -lmpxviewframeworkqt.dll \
+        -lmpsettingsmanager.dll
+
+
+# Input
+HEADERS += inc/unittest_mpmediawallview.h \
+            ../../inc/mpmediawallview.h \            
+           ../../../../inc/mpviewbase.h \
+           stub/inc/hgmediawall.h \
+            stub/inc/mpengine.h \
+            stub/inc/mpenginefactory.h \
+            stub/inc/mpmpxcollectiondata.h \
+            stub/inc/mpcollectiondatamodel.h \
+            stub/inc/mpplaybackdata.h \
+            stub/inc/mpalbumcoverwidget.h \
+            stub/inc/mpmediawalldocumentloader.h \
+            stub/inc/mptracklistwidget.h \
+            stub/inc/mpcollectiontbonelistdatamodel.h \
+            stub/inc/mpreflectioneffect.h
+
+SOURCES += src/unittest_mpmediawallview.cpp \               
+                stub/src/hgmediawall.cpp \
+                stub/src/mpengine.cpp \
+                stub/src/mpenginefactory.cpp \
+                stub/src/mpmpxcollectiondata.cpp \
+                stub/src/mpcollectiondatamodel.cpp \
+                stub/src/mpplaybackdata.cpp \
+                stub/src/mpalbumcoverwidget.cpp \
+                stub/src/mpmediawalldocumentloader.cpp \
+                stub/src/mptracklistwidget.cpp \
+                stub/src/mpcollectiontbonelistdatamodel.cpp \
+                stub/src/mpreflectioneffect.cpp
+
+
+RESOURCES += ../../resources/mpmediawallviewresources.qrc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallviewplugin/inc/unittest_mpmediawallviewplugin.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,54 @@
+/*
+* 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 mpmediawallplugin
+*
+*/
+
+#ifndef TESTMPMEDIAWALLVIEWPLUGIN_H
+#define TESTMPMEDIAWALLVIEWPLUGIN_H
+
+#include <QtTest/QtTest>
+
+class MpMediaWallViewPlugin;
+
+class TestMpMediaWallViewPlugin : public QObject
+{
+    Q_OBJECT
+
+public:
+
+    TestMpMediaWallViewPlugin();
+    virtual ~TestMpMediaWallViewPlugin();
+
+public slots:
+    void initTestCase();
+    void cleanupTestCase();
+    void init();
+    void cleanup();
+
+private slots:
+    void testConstructor();
+    void testCreateView();
+    void testdestroyView();
+    void testActivateView();
+    void testDeactivateView();
+    void testGetView();
+
+private:
+
+    MpMediaWallViewPlugin          *mTest;
+
+};
+
+#endif  // TESTMPMEDIAWALLVIEWPLUGIN_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallviewplugin/src/unittest_mpmediawallviewplugin.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,262 @@
+/*
+* 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 MpMediaWallViewPlugin
+*
+*/
+
+#include <QSignalSpy>
+#include <qnamespace.h>
+
+#include "stub/inc/mpmediawallview.h"
+#include "stub/inc/xqplugin.h"
+#include "unittest_mpmediawallviewplugin.h"
+
+
+// Do this so we can access all member variables.
+#define private public
+#include "mpmediawallviewplugin.h"
+#undef private
+
+//This so MpMediaWallViewPlugin.cpp can load qt stub items
+#include "../../src/mpmediawallviewplugin.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);
+    TestMpMediaWallViewPlugin 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_mpmediawallviewplugin.txt";
+
+        return QTest::qExec(&tv, 3, pass);
+    }
+}
+
+TestMpMediaWallViewPlugin::TestMpMediaWallViewPlugin()
+    : mTest(0)
+{
+}
+
+TestMpMediaWallViewPlugin::~TestMpMediaWallViewPlugin()
+{
+    delete mTest;
+}
+
+/*!
+ Called before the first testfunction is executed.
+ */
+void TestMpMediaWallViewPlugin::initTestCase()
+{
+}
+
+/*!
+ Called after the last testfunction was executed.
+ */
+void TestMpMediaWallViewPlugin::cleanupTestCase()
+{
+}
+
+/*!
+ Called before each testfunction is executed.
+ */
+void TestMpMediaWallViewPlugin::init()
+{
+    mTest = new MpMediaWallViewPlugin();
+}
+
+/*!
+ Called after every testfunction.
+ */
+void TestMpMediaWallViewPlugin::cleanup()
+{
+    delete mTest;
+    mTest = 0;
+}
+
+/*!
+ testConstructor
+ */
+void TestMpMediaWallViewPlugin::testConstructor()
+{
+    QVERIFY(!mTest->mView);
+    QCOMPARE(mTest->mState, MpMediaWallViewPlugin::NullView);
+}
+
+/*!
+ testCreateView
+ */
+void TestMpMediaWallViewPlugin::testCreateView()
+{
+
+    mTest->createView();
+    QVERIFY(mTest->mView);
+    QCOMPARE(mTest->mState, MpMediaWallViewPlugin::Created);
+    /*
+    QSignalSpy spy( mTest, SIGNAL(command(int)) );
+    mTest->mView->emitCommand(123);
+    QCOMPARE(spy.count(), 1);
+    QCOMPARE(spy.at(0).at(0), QVariant(123));
+    */
+    QCOMPARE(mTest->mView->mInitializeViewCount,0);
+    QCOMPARE(mTest->mView->mActivateViewCount,0);
+    QCOMPARE(mTest->mView->mDeactivateViewCount,0);
+    
+    delete mTest->mView; 
+    //mTest->mView = 0; intentionally not = 0 to prevent unecesary double delete.
+
+}
+
+
+/*!
+ testdestroyView
+ */
+void TestMpMediaWallViewPlugin::testdestroyView()
+{
+
+    mTest->mView = new MpMediaWallView();
+    mTest->mState = MpMediaWallViewPlugin::Created;
+    mTest->destroyView();
+    QVERIFY(!mTest->mView);
+    mTest->mView = new MpMediaWallView();
+    mTest->mState = MpMediaWallViewPlugin::NullView;
+    mTest->destroyView();
+    QVERIFY(mTest->mView);
+    
+    QCOMPARE(mTest->mView->mInitializeViewCount,0);
+    QCOMPARE(mTest->mView->mActivateViewCount,0);
+    QCOMPARE(mTest->mView->mDeactivateViewCount,0);
+    
+    delete mTest->mView; 
+    //mTest->mView = 0; intentionally not = 0 to prevent unecesary double delete.
+
+}
+
+
+/*!
+ testActivateView
+ */
+void TestMpMediaWallViewPlugin::testActivateView()
+{
+
+    mTest->mState = MpMediaWallViewPlugin::NullView;
+    mTest->activateView(); // we should be able to call activate without a view and not crash.
+
+    
+    mTest->mView = new MpMediaWallView();
+    mTest->mState = MpMediaWallViewPlugin::NullView;
+    mTest->activateView();
+    QCOMPARE(mTest->mState, MpMediaWallViewPlugin::NullView);
+    QCOMPARE(mTest->mView->mInitializeViewCount,0);
+    QCOMPARE(mTest->mView->mActivateViewCount,0);
+    QCOMPARE(mTest->mView->mDeactivateViewCount,0);
+
+    mTest->mView->resetCounters();
+    mTest->mState = MpMediaWallViewPlugin::Activated;
+    mTest->activateView();
+    QCOMPARE(mTest->mState, MpMediaWallViewPlugin::Activated);
+    QCOMPARE(mTest->mView->mInitializeViewCount,0);
+    QCOMPARE(mTest->mView->mActivateViewCount,0);
+    QCOMPARE(mTest->mView->mDeactivateViewCount,0);
+           
+    mTest->mView->resetCounters();
+    mTest->mState = MpMediaWallViewPlugin::Created;
+    mTest->activateView();
+    QCOMPARE(mTest->mState, MpMediaWallViewPlugin::Activated);
+    QCOMPARE(mTest->mView->mInitializeViewCount,1);
+    QCOMPARE(mTest->mView->mActivateViewCount,1);
+    QCOMPARE(mTest->mView->mDeactivateViewCount,0);
+       
+    mTest->mView->resetCounters();
+    mTest->mState = MpMediaWallViewPlugin::Initialized;
+    mTest->activateView();
+    QCOMPARE(mTest->mState, MpMediaWallViewPlugin::Activated);
+    QCOMPARE(mTest->mView->mInitializeViewCount,0);
+    QCOMPARE(mTest->mView->mActivateViewCount,1);
+    QCOMPARE(mTest->mView->mDeactivateViewCount,0);
+       
+
+    delete mTest->mView; 
+    //mTest->mView = 0; intentionally not = 0 to prevent unecesary double delete.
+
+}
+
+    
+/*!
+ testDeactivateView
+ */
+void TestMpMediaWallViewPlugin::testDeactivateView()
+{
+
+    mTest->mState = MpMediaWallViewPlugin::NullView;
+    mTest->deactivateView(); // we should be able to call deactivate without a view and not crash.
+    
+    mTest->mView = new MpMediaWallView();
+    mTest->mState = MpMediaWallViewPlugin::NullView;
+    mTest->deactivateView();
+    QCOMPARE(mTest->mState, MpMediaWallViewPlugin::NullView);
+    QCOMPARE(mTest->mView->mInitializeViewCount,0);
+    QCOMPARE(mTest->mView->mActivateViewCount,0);
+    QCOMPARE(mTest->mView->mDeactivateViewCount,0);
+
+    mTest->mView->resetCounters();
+    mTest->mState = MpMediaWallViewPlugin::Activated;
+    mTest->deactivateView();
+    QCOMPARE(mTest->mState, MpMediaWallViewPlugin::Initialized);
+    QCOMPARE(mTest->mView->mInitializeViewCount,0);
+    QCOMPARE(mTest->mView->mActivateViewCount,0);
+    QCOMPARE(mTest->mView->mDeactivateViewCount,1);
+           
+    mTest->mView->resetCounters();
+    mTest->mState = MpMediaWallViewPlugin::Created;
+    mTest->deactivateView();
+    QCOMPARE(mTest->mState, MpMediaWallViewPlugin::Created);
+    QCOMPARE(mTest->mView->mInitializeViewCount,0);
+    QCOMPARE(mTest->mView->mActivateViewCount,0);
+    QCOMPARE(mTest->mView->mDeactivateViewCount,0);
+       
+    mTest->mView->resetCounters();
+    mTest->mState = MpMediaWallViewPlugin::Initialized;
+    mTest->deactivateView();
+    QCOMPARE(mTest->mState, MpMediaWallViewPlugin::Initialized);
+    QCOMPARE(mTest->mView->mInitializeViewCount,0);
+    QCOMPARE(mTest->mView->mActivateViewCount,0);
+    QCOMPARE(mTest->mView->mDeactivateViewCount,0);
+    
+    delete mTest->mView; 
+    //mTest->mView = 0; intentionally not = 0 to prevent unecesary double delete.
+
+}
+
+void TestMpMediaWallViewPlugin::testGetView()
+{
+    MpMediaWallView* tmpView;
+    mTest->mView = new MpMediaWallView();
+    tmpView = mTest->mView;
+    mTest->getView();
+    QCOMPARE(int(tmpView),int(mTest->getView()));
+    delete mTest->mView; 
+    //mTest->mView = 0; intentionally not = 0 to prevent unecesary double delete.
+
+}
+    
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallviewplugin/stub/inc/mpmediawallview.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,49 @@
+/*
+* 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:  Stub Music Player Media Wall view.
+*
+*/
+
+#ifndef MPMEDIAWALLVIEW_H
+#define MPMEDIAWALLVIEW_H
+
+#include <QGraphicsWidget>
+
+class MpMediaWallView : public QGraphicsWidget
+{
+    Q_OBJECT
+
+public:
+    explicit MpMediaWallView();
+    virtual ~MpMediaWallView();
+    
+    void initializeView();
+    void activateView();
+    void deactivateView();
+    void resetCounters();
+
+signals:
+    void command( int aCommand );
+
+public:
+    int mInitializeViewCount;
+    int mActivateViewCount;
+    int mDeactivateViewCount;
+
+
+//    Q_DISABLE_COPY(MpMediaWallView)
+};
+
+
+#endif //MPMEDIAWALLVIEW_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallviewplugin/stub/inc/xqplugin.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,26 @@
+/*
+* 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: Stub for testing MpSettingsViewPlugin
+*
+*/
+
+#ifndef XQPLUGIN_H
+#define XQPLUGIN_H
+
+// convenience macro
+#define XQ_EXPORT_PLUGIN(PLUGIN, PLUGINCLASS)
+
+#define XQ_EXPORT_PLUGIN2(PLUGIN, PLUGINCLASS)
+
+#endif // XQ_PLUGIN_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallviewplugin/stub/src/mpmediawallview.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,68 @@
+/*
+* 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 Settings view Stub.
+*
+*/
+
+#include "stub/inc/mpmediawallview.h"
+
+
+MpMediaWallView::MpMediaWallView() :
+    mInitializeViewCount(0),
+    mActivateViewCount(0),
+    mDeactivateViewCount(0)
+{
+}
+    
+/*!
+ Destructs the media wall view.
+ */
+MpMediaWallView::~MpMediaWallView()
+{
+}
+
+/*!
+ Initializes the media wall view.
+ */
+void MpMediaWallView::initializeView()
+{
+    mInitializeViewCount++;
+}
+
+/*!
+ Activates the media wall view.
+ */
+void MpMediaWallView::activateView()
+{
+    mActivateViewCount++;
+}
+
+/*!
+ Deactivates the media wall view.
+ */
+void MpMediaWallView::deactivateView()
+{
+    mDeactivateViewCount++;
+}
+
+/*!
+ Resets counters
+ */
+void MpMediaWallView::resetCounters()
+{
+    mInitializeViewCount = 0;
+    mActivateViewCount = 0;
+    mDeactivateViewCount = 0;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpmediawallviewplugin/unittest_mpmediawallviewplugin.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,38 @@
+#
+# 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: 
+#
+
+TEMPLATE = app
+CONFIG += qtestlib
+CONFIG += symbian_test
+TARGET = unittest_mpmediawallviewplugin
+TARGET.CAPABILITY = CAP_APPLICATION
+
+DEPENDPATH += .
+INCLUDEPATH += . \
+    ../../inc \
+    ../../../../inc
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE 
+
+LIBS += -lmpxviewframeworkqt.dll
+
+HEADERS += inc/unittest_mpmediawallviewplugin.h \
+           stub/inc/xqplugin.h \
+           stub/inc/mpmediawallview.h \
+           ../../inc/mpmediawallviewplugin.h
+
+SOURCES += src/unittest_mpmediawallviewplugin.cpp \
+           stub/src/mpmediawallview.cpp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpreflectioneffect/inc/unittest_mpreflectioneffect.h	Fri Aug 06 16:51:36 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: Unit test for MpReflectionEffect
+*
+*/
+
+#ifndef TESTMPREFLECTIONEFFECT_H
+#define TESTMPREFLECTIONEFFECT_H
+
+#include <QtTest/QtTest>
+
+class MpReflectionEffect;
+
+class TestMpReflectionEffect : public QObject
+{
+    Q_OBJECT
+
+public:
+
+    TestMpReflectionEffect();
+    virtual ~TestMpReflectionEffect();
+
+public slots:
+    void initTestCase();
+    void cleanupTestCase();
+    void init();
+    void cleanup();
+
+private:
+    MpReflectionEffect          *mTest;
+};
+
+#endif  // TESTMPREFLECTIONEFFECT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpreflectioneffect/src/unittest_mpreflectioneffect.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,96 @@
+/*
+* 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 MpReflectionEffect
+*
+*/
+
+#include <hbinstance.h>
+#include "unittest_mpreflectioneffect.h"
+
+/*!
+ * Nothing valuable to test for following functions
+ * boundingRectFor() 
+ * draw()
+ * 
+ */
+
+// Do this so we can access all member variables.
+#define private public
+#include "mpreflectioneffect.h"
+#undef private
+
+/*!
+ Make our test case a stand-alone executable that runs all the test functions.
+ */
+int main(int argc, char *argv[])
+{
+    QApplication app(argc, argv);
+    TestMpReflectionEffect 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_mpreflectioneffect.txt";
+
+        return QTest::qExec(&tv, 3, pass);
+    }
+}
+
+TestMpReflectionEffect::TestMpReflectionEffect()
+    : mTest(0)
+{
+}
+
+TestMpReflectionEffect::~TestMpReflectionEffect()
+{
+    delete mTest;
+}
+
+/*!
+ Called before the first testfunction is executed.
+ */
+void TestMpReflectionEffect::initTestCase()
+{
+}
+
+/*!
+ Called after the last testfunction was executed.
+ */
+void TestMpReflectionEffect::cleanupTestCase()
+{
+}
+
+/*!
+ Called before each testfunction is executed.
+ */
+void TestMpReflectionEffect::init()
+{
+    mTest = new MpReflectionEffect( new QObject() ); 
+}
+
+/*!
+ Called after every testfunction.
+ */
+void TestMpReflectionEffect::cleanup()
+{
+    delete mTest;
+    mTest = 0;
+}
+
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mpreflectioneffect/unittest_mpreflectioneffect.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,34 @@
+#
+# 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: mpreflectioneffect unit test project file.
+#
+
+TEMPLATE = app
+CONFIG += qtestlib hb symbian_test
+TARGET = unittest_mpreflectioneffect
+TARGET.CAPABILITY = CAP_APPLICATION
+
+DEPENDPATH += .
+INCLUDEPATH += . \
+			   ../../inc \
+               ../../../../inc
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE 
+
+HEADERS += inc/unittest_mpreflectioneffect.h \
+		   ../../inc/mpreflectioneffect.h \	
+
+
+SOURCES += src/unittest_mpreflectioneffect.cpp \
+		   ../../src/mpreflectioneffect.cpp \
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mptracklistwidget/inc/unittest_mptracklistwidget.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,48 @@
+/*
+* 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 MpTrackListWidget
+*
+*/
+
+#ifndef TESTMPREFLECTIONEFFECT_H
+#define TESTMPREFLECTIONEFFECT_H
+
+#include <QtTest/QtTest>
+
+class MpTrackListWidget;
+
+class TestMpTrackListWidget : public QObject
+{
+    Q_OBJECT
+
+public:
+
+    TestMpTrackListWidget();
+    virtual ~TestMpTrackListWidget();
+
+public slots:
+    void initTestCase();
+    void cleanupTestCase();
+    void init();
+    void cleanup();
+
+private slots:
+    void testConstructor();
+    void testSwipeAngleToDirection();
+
+private:
+    MpTrackListWidget          *mTest;
+};
+
+#endif  // TESTMPREFLECTIONEFFECT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mptracklistwidget/src/unittest_mptracklistwidget.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,147 @@
+/*
+* 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 MpTrackListWidget
+*
+*/
+
+/*
+* there are no valuable test cases for following functions 
+* resizeEvent()
+* gestureEvent()
+* mousePressEvent()
+*
+*/
+
+#include "unittest_mptracklistwidget.h"
+#include "hbinstancestub.h"
+#include <hblistview.h>
+
+// Do this so we can access all member variables.
+#define private public
+#include "mptracklistwidget.h"
+#undef private
+
+//This so we can test private functions
+#include "../../src/mptracklistwidget.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);
+    TestMpTrackListWidget 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_mptracklistwidget.txt";
+
+        return QTest::qExec(&tv, 3, pass);
+    }
+}
+
+TestMpTrackListWidget::TestMpTrackListWidget()
+    : mTest(0)
+{
+}
+
+TestMpTrackListWidget::~TestMpTrackListWidget()
+{
+    delete mTest;
+}
+
+/*!
+ Called before the first testfunction is executed.
+ */
+void TestMpTrackListWidget::initTestCase()
+{
+}
+
+/*!
+ Called after the last testfunction was executed.
+ */
+void TestMpTrackListWidget::cleanupTestCase()
+{
+}
+
+/*!
+ Called before each testfunction is executed.
+ */
+void TestMpTrackListWidget::init()
+{
+    mTest = new MpTrackListWidget();
+}
+
+/*!
+ Called after every testfunction.
+ */
+void TestMpTrackListWidget::cleanup()
+{
+    delete mTest;
+    mTest = 0;
+}
+
+/*!
+ test constructor.
+*/
+void TestMpTrackListWidget::testConstructor()
+{
+    QVERIFY( mTest->mList->layoutName() == "mpmwtracklist" );
+}
+
+/*!
+ test swipeAngleToDirection
+ */
+void TestMpTrackListWidget::testSwipeAngleToDirection() 
+{
+    hbInstance->allMainWindows()[0]->mOrientation = Qt::Vertical;
+    QSwipeGesture::SwipeDirection direction;
+    
+    direction = mTest->swipeAngleToDirection( 70 );
+    QVERIFY( direction == QSwipeGesture::Up );
+    
+    direction = mTest->swipeAngleToDirection( 250 );
+    QVERIFY( direction == QSwipeGesture::Down );
+    
+    direction = mTest->swipeAngleToDirection( 20 );
+    QVERIFY( direction == QSwipeGesture::Right );
+    
+    direction = mTest->swipeAngleToDirection( 340 );
+    QVERIFY( direction == QSwipeGesture::Right );
+    
+    direction = mTest->swipeAngleToDirection( 160 );
+    QVERIFY( direction == QSwipeGesture::Left );
+    
+    hbInstance->allMainWindows()[0]->mOrientation = Qt::Horizontal;
+#ifdef __WINS__ 
+    direction = mTest->swipeAngleToDirection( 70 );
+    QVERIFY( direction == QSwipeGesture::Right );
+    
+    direction = mTest->swipeAngleToDirection( 100 );
+    QVERIFY( direction == QSwipeGesture::Right );
+#else
+    direction = mTest->swipeAngleToDirection( 70 );
+    QVERIFY( direction == QSwipeGesture::Left );
+    
+    direction = mTest->swipeAngleToDirection( 340 );
+    QVERIFY( direction == QSwipeGesture::Up );    
+#endif    
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mptracklistwidget/stub/inc/hbinstancestub.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,41 @@
+/*
+* 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: stub for hbinstance
+*
+*/
+
+#ifndef HBINSTANCESTUB_H_
+#define HBINSTANCESTUB_H_
+
+#include "stub/inc/hbmainwindowstub.h"
+
+#define hbInstance (HbInstanceStub::instance())
+
+class HbInstanceStub
+{
+public:
+    static HbInstanceStub *instance();
+
+    QList<HbMainWindowStub *> allMainWindows() const;
+  
+private:
+    HbInstanceStub();
+    ~HbInstanceStub();
+    
+public:
+    QList<HbMainWindowStub *> mList;
+};
+
+
+#endif /* HBINSTANCESTUB_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mptracklistwidget/stub/inc/hbmainwindowstub.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,35 @@
+/*
+* 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: stub for hbmainwindow
+*
+*/
+
+#ifndef HBMAINWINDOWSTUB_H_
+#define HBMAINWINDOWSTUB_H_
+
+#include <hbnamespace.h>
+
+class HbMainWindowStub
+{
+public:
+    Qt::Orientation orientation() const {
+        return mOrientation;
+    }
+    
+public:
+    Qt::Orientation mOrientation;
+};
+
+
+#endif /* HBMAINWINDOWSTUB_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mptracklistwidget/stub/src/hbinstancestub.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,46 @@
+/*
+* 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: stub for hbinstance
+*
+*/
+
+#include "stub/inc/hbinstancestub.h"
+
+/*!
+ Constructor
+ */
+HbInstanceStub::HbInstanceStub()
+{    
+    HbMainWindowStub *mainwindowStub = new HbMainWindowStub();
+    mList.append( mainwindowStub );
+}
+
+/*!
+ Destructor
+ */
+HbInstanceStub::~HbInstanceStub()
+{
+    mList.clear();
+}
+
+HbInstanceStub *HbInstanceStub::instance() 
+{
+    static HbInstanceStub hbInstanceStub;
+    return &hbInstanceStub;    
+}
+
+QList<HbMainWindowStub *> HbInstanceStub::allMainWindows() const 
+{
+    return mList;    
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpmediawallviewplugin/tsrc/unittest_mptracklistwidget/unittest_mptracklistwidget.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,37 @@
+#
+# 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: mptracklistwidget unit test project file.
+#
+
+TEMPLATE = app
+CONFIG += qtestlib hb symbian_test
+TARGET = unittest_mptracklistwidget
+TARGET.CAPABILITY = CAP_APPLICATION
+
+DEPENDPATH += .
+INCLUDEPATH += . \
+			   ../../inc \
+               ../../../../inc
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE 
+
+HEADERS += inc/unittest_mptracklistwidget.h \
+		   ../../inc/mptracklistwidget.h \
+		   stub/inc/hbinstancestub.h \	
+		   stub/inc/hbmainwindownstub.h \
+
+
+SOURCES += src/unittest_mptracklistwidget.cpp \
+	 	   stub/src/hbinstancestub.cpp \	
+
+DEFINES += UNIT_TESTING
\ No newline at end of file
--- a/mpviewplugins/mpplaybackviewplugin/mpplaybackviewplugin.pro	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpplaybackviewplugin/mpplaybackviewplugin.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -59,3 +59,4 @@
        
 RESOURCES += resources/mpplaybackviewpluginresources.qrc
 
+DOCML += resources/playbackwidget.docml
--- a/mpviewplugins/mpplaybackviewplugin/resources/mpplaybackviewpluginresources.qrc	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpplaybackviewplugin/resources/mpplaybackviewpluginresources.qrc	Fri Aug 06 16:51:36 2010 -0500
@@ -5,7 +5,7 @@
     </qresource>
     
     <qresource prefix="/playbackviewdocml" >
-        <file alias="playbackwidget.docml">playbackwidget.docml</file>
+        <file alias="playbackwidget.docml">playbackwidget.docml.bin</file>
     </qresource>
 
 </RCC>
--- a/mpviewplugins/mpplaybackviewplugin/tsrc/tsrc.pro	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpplaybackviewplugin/tsrc/tsrc.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -18,7 +18,8 @@
 
 SUBDIRS += unittest_mpequalizerwidget \
            unittest_mpplaybackdocumentloader \
-           unittest_mpplaybackviewplugin
+           unittest_mpplaybackviewplugin \
+           unittest_mpplaybackview
 
 CONFIG += ordered
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/inc/unittest_mpplaybackview.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,84 @@
+/*
+* 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 mpplaybackview
+*
+*/
+
+#ifndef TESTMPPLAYBACKVIEW_H
+#define TESTMPPLAYBACKVIEW_H
+
+#include <QtTest/QtTest>
+#include "mpengine.h"
+#include "mpviewbase.h"
+#include "mpequalizerwidget.h"
+
+
+class MpPlaybackView;
+
+class TestMpPlaybackView: public QObject
+{
+    Q_OBJECT
+
+public:
+
+    TestMpPlaybackView();
+    virtual ~TestMpPlaybackView();
+
+signals:
+
+public slots:
+    void initTestCase();
+    void cleanupTestCase();
+    void init();
+    void cleanup();
+
+private slots:
+//Test Cases
+    void testActivateView();
+    void testDeactivateView();
+    void testShuffleEnabled();
+    void testRepeatEnabled();
+    void testPlaybackStatus();
+
+    void testStartSettingsView();
+    void testBack();
+    void testExit();
+
+    void testPlaybackStateChanged();
+    void testFlip();
+    void testShuffle();
+    void testRepeat();
+
+    void testHandleSongSelected();
+    void testShowEqualizerDialog();
+    void testCloseEqualizerDialog();
+
+    void testSeekForward();
+    void testSeekRewind();
+    void testEndRewind();
+    void testEndForward();
+
+private:
+   MpPlaybackView *mTest;
+   MpPlaybackData *mPlaybackData;
+   MpViewBase     *mViewBase;
+   MpEqualizerWidget *mEqualizerWidget;
+
+};
+
+#endif  // TESTMPPLAYBACKVIEW_H
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/src/unittest_mpplaybackview.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,386 @@
+/*
+* 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 mpplaybackview
+*
+*/
+
+#include <QMetaType>
+#include <QtGui>
+#include <hbradiobuttonlist.h>
+#include <QTranslator>
+#include <QLocale>
+
+#include "stub/inc/mpequalizerwidget.h"
+#include "mpcommondefs.h"
+#include "stub/inc/mpviewbase.h"
+#include "stub/inc/mpsettingsmanager.h"
+#include "unittest_mpplaybackview.h"
+
+// Do this so we can access all member variables.
+#define private public
+#include "mpplaybackview.h"
+#undef private
+
+//This so we can test private functions
+#include "../../src/mpplaybackview.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);
+    TestMpPlaybackView 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_mpplaybackview.txt";
+
+        return QTest::qExec(&tv, 3, pass);
+    }
+}
+
+TestMpPlaybackView::TestMpPlaybackView()
+        : mTest(0)
+{
+
+}
+
+TestMpPlaybackView::~TestMpPlaybackView()
+{
+    delete mTest;
+}
+
+/*!
+ Called before the first testfunction is executed.
+ */
+void TestMpPlaybackView::initTestCase()
+{
+
+}   
+
+/*!
+ Called after the last testfunction was executed.
+ */
+void TestMpPlaybackView::cleanupTestCase()
+{
+QCoreApplication::processEvents();
+}
+
+/*!
+ Called before each testfunction is executed.
+ */
+void TestMpPlaybackView::init()
+{
+    mTest = new MpPlaybackView();
+    mTest->initializeView();
+}
+
+/*!
+ Called after every testfunction.
+ */
+void TestMpPlaybackView::cleanup()
+{
+    mTest->mMpEngine->retrieveSongDetailsCount = 0;
+    mTest->mMpEngine->stopCount = 0;
+    mTest->mEqualizerWidget->showEqualizerWidgetCount = 0;
+    mTest->mEqualizerWidget->closeEqualizerWidgetCount = 0;
+    mTest->mMpEngine->startSeekBackwardCount = 0;
+    mTest->mMpEngine->startSeekForwardCount = 0;
+    mTest->mMpEngine->stopSeekingCount = 0;
+    mTest->mMpEngine->skipBackwardCount = 0;
+    mTest->mMpEngine->skipForwardCount = 0;
+    delete mTest;
+    mTest = 0;
+}
+
+
+/*!
+Test ActivateView
+ */
+void TestMpPlaybackView::testActivateView()
+{
+    QCOMPARE( mTest->mActivated, false );
+    mTest->activateView();    
+    QCOMPARE( mTest->mActivated, true );
+    QVERIFY( mTest->navigationAction() == mTest->mSoftKeyBack );
+
+}
+
+/*!
+ Test DeactivateView
+ */
+void TestMpPlaybackView::testDeactivateView()
+{
+    mTest->mActivated = true;
+    mTest->deactivateView();
+    QCOMPARE( mTest->mActivated, false );
+}
+
+/*!
+ Test ShuffleEnabled
+ */
+void TestMpPlaybackView::testShuffleEnabled()
+{
+    mTest->mShuffle = false;
+    QCOMPARE(mTest->shuffleEnabled(), false);
+    mTest->mShuffle = true;
+    QCOMPARE(mTest->shuffleEnabled(), true);
+}
+
+/*!
+ Test RepeatEnabled
+  */
+void TestMpPlaybackView::testRepeatEnabled()
+{
+    mTest->mRepeat = false;
+    QCOMPARE(mTest->repeatEnabled(), false);
+    mTest->mRepeat = true;
+    QCOMPARE(mTest->repeatEnabled(), true);
+}
+
+/*!
+  Test PlaybackStatus
+  */
+void TestMpPlaybackView::testPlaybackStatus()
+{
+    mTest->mPlaybackData->setPlaybackState(MpPlaybackData::NotPlaying);
+    QCOMPARE(mTest->playbackStatus(),QString("NotPlaying"));
+
+    mTest->mPlaybackData->setPlaybackState(MpPlaybackData::Playing);
+    QCOMPARE(mTest->playbackStatus(),QString("Playing"));
+
+    mTest->mPlaybackData->setPlaybackState(MpPlaybackData::Paused);
+    QCOMPARE(mTest->playbackStatus(),QString("Paused"));
+
+    mTest->mPlaybackData->setPlaybackState(MpPlaybackData::Stopped);
+    QCOMPARE(mTest->playbackStatus(),QString("Stopped"));
+}
+
+/*!
+  Test StartSettingsView
+  */
+void TestMpPlaybackView::testStartSettingsView()
+{
+    QSignalSpy spy(mTest, SIGNAL(command(int)));
+
+    mTest->startSettingsView();
+    QCOMPARE(spy.count(), 1);
+    QCOMPARE(spy.at(0).at(0), QVariant(MpCommon::ActivateSettingsView));
+}
+
+/*!
+  Test Back
+  */
+void TestMpPlaybackView::testBack()
+{
+    //test Stop() gets called in MpEngine
+    mTest->mMpEngine->stopCount=0;
+    mTest->mViewMode = MpCommon::EmbeddedView;
+    mTest->back();
+    QCOMPARE(mTest->mMpEngine->stopCount,1);
+
+    mTest->mViewMode = MpCommon::FetchView;
+    mTest->back();
+    QCOMPARE(mTest->mMpEngine->stopCount,2);
+
+    QSignalSpy spy(mTest, SIGNAL(command(int)));
+    mTest->mMpEngine->stopCount = 0;   
+    mTest->mViewMode = MpCommon::DefaultView;
+
+    mTest->back();
+    QCOMPARE(spy.count(), 1);
+    QCOMPARE(spy.at(0).at(0), QVariant(MpCommon::ActivateCollectionView));
+    QCOMPARE(mTest->mMpEngine->stopCount,0);
+}
+
+/*!
+  Test Exit
+  */
+void TestMpPlaybackView::testExit()
+{
+    QSignalSpy spy(mTest, SIGNAL(command(int)));
+    mTest->exit();
+    QCOMPARE(spy.count(), 1);
+    QCOMPARE(spy.at(0).at(0), QVariant(MpCommon::Exit));
+}
+
+/*!
+  Test PlaybackStateChanged
+  */
+void TestMpPlaybackView::testPlaybackStateChanged()
+{
+    //test signal slot connection
+    mTest->mMpEngine->stopCount=0;
+    mTest->mViewMode = MpCommon::FetchView;
+    mTest->mPlaybackData->setPlaybackState(MpPlaybackData::Stopped);
+
+    mTest->mPlaybackData->triggerStateUpdate(MpPlaybackData::Stopped);
+    QCOMPARE(mTest->mMpEngine->stopCount,1);
+}
+
+/*!
+  Test Flip
+  */
+void TestMpPlaybackView::testFlip()
+{        
+    QSignalSpy spy(mTest, SIGNAL(command(int)));
+    mTest->flip();
+    QCOMPARE(spy.count(), 1);
+    QCOMPARE(spy.at(0).at(0), QVariant(MpCommon::ActivateDetailsView));
+    QCOMPARE(mTest->mMpEngine->retrieveSongDetailsCount,1);
+}
+
+/*!
+  Test ToggleShuffle and Shuffle changed
+  */
+void TestMpPlaybackView::testShuffle()
+{
+    mTest->mShuffle = false;
+    QCOMPARE(mTest->shuffleEnabled(), false);
+
+    mTest->toggleShuffle();
+    mTest->shuffleChanged(true); //simulate signal
+    QCOMPARE(mTest->shuffleEnabled(), true);
+    QVERIFY(mTest->mShuffleAction->icon() == *mTest->mShuffleOnIcon);
+
+    mTest->toggleShuffle();
+    mTest->shuffleChanged(false);
+    QCOMPARE(mTest->shuffleEnabled(), false);
+    QVERIFY(mTest->mShuffleAction->icon() == *mTest->mShuffleOffIcon);
+}
+
+/*!
+  Test ToggleRepeat and RepeatChanged
+  */
+void TestMpPlaybackView::testRepeat()
+{
+    mTest->mRepeat = false;
+    QCOMPARE(mTest->repeatEnabled(),false);
+
+    mTest->toggleRepeat();
+    mTest->repeatChanged(true);
+    QCOMPARE(mTest->repeatEnabled(),true);    
+    QCOMPARE(mTest->mRepeatAction->text(),hbTrId( "txt_mus_opt_repeat_off" ));
+
+    mTest->toggleRepeat();
+    mTest->repeatChanged(false);
+    QCOMPARE(mTest->repeatEnabled(),false);
+    QCOMPARE(mTest->mRepeatAction->text(),hbTrId( "txt_mus_opt_repeat_on" ));
+}
+
+/*!
+  Test HandleSongSelected
+  */
+void TestMpPlaybackView::testHandleSongSelected()
+{
+    mTest->mMpEngine->stopCount=0;
+    mTest->mPlaybackData->setUri("testUri");
+
+    QSignalSpy spy(mTest, SIGNAL(songSelected(QString)));
+    mTest->handleSongSelected();
+    QCOMPARE(spy.count(), 1);
+    QCOMPARE(spy.at(0).at(0), QVariant("testUri"));
+    QCOMPARE(mTest->mMpEngine->stopCount,1);
+}
+
+/*!
+  Test ShowEqualizerDialog
+  */
+void TestMpPlaybackView::testShowEqualizerDialog()
+{
+    mTest->mEqualizerWidget->showEqualizerWidgetCount = 0;
+    mTest->showEqualizerDialog();
+    QCOMPARE(mTest->mEqualizerWidget->showEqualizerWidgetCount,1);
+}
+
+/*!
+    TestCloseEqualizerDialog
+  */
+void TestMpPlaybackView::testCloseEqualizerDialog()
+{
+    mTest->mEqualizerWidget->closeEqualizerWidgetCount = 0;
+    mTest->closeEqualizerDialog();
+    QCOMPARE(mTest->mEqualizerWidget->closeEqualizerWidgetCount,1);
+}
+
+
+/*!
+    Test StartRewindTimer and startSeekRewind
+  */
+void TestMpPlaybackView::testSeekRewind()
+{    
+    mTest->mMpEngine->startSeekBackwardCount = 0;
+    mTest->mSeeking = false;
+
+    mTest->startRewindTimer();
+    QTest::qWait(2000); // wait for timer to fire and call startSeekRewind()
+
+    QCOMPARE(mTest->mMpEngine->startSeekBackwardCount,1);
+    QCOMPARE(mTest->mSeeking,true);
+}
+
+/*!
+    Test StartForwardTimer and startSeekForward
+  */
+void TestMpPlaybackView::testSeekForward()
+{
+    mTest->mMpEngine->startSeekForwardCount = 0;
+    mTest->mSeeking = false;
+
+    mTest->startForwardTimer();
+    QTest::qWait(2000); // wait for timer to fire and call startSeekForward()
+
+    QCOMPARE(mTest->mMpEngine->startSeekForwardCount,1);
+    QCOMPARE(mTest->mSeeking,true);
+}
+
+/*!
+    Test EndRewind
+  */
+void TestMpPlaybackView::testEndRewind()
+{
+    mTest->mSeeking = true;
+    mTest->endRewind();
+    QCOMPARE(mTest->mMpEngine->stopSeekingCount,1);
+    QCOMPARE(mTest->mSeeking,false);
+    
+    mTest->endRewind();
+    QCOMPARE(mTest->mMpEngine->skipBackwardCount,1);
+    QCOMPARE(mTest->mSeeking,false);
+}
+
+/*!
+    Test EndForward
+  */
+void TestMpPlaybackView::testEndForward()
+{
+    mTest->mSeeking = true;
+    mTest->endForward();
+    QCOMPARE(mTest->mMpEngine->stopSeekingCount,1);
+    QCOMPARE(mTest->mSeeking,false);
+    
+    mTest->endForward();
+    QCOMPARE(mTest->mMpEngine->skipForwardCount,1);
+    QCOMPARE(mTest->mSeeking,false);    
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/stub/inc/mpengine.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,92 @@
+/*
+* 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 stub for mpplaybackview.
+*
+*/
+
+#ifndef MPENGINE_H
+#define MPENGINE_H
+
+#include <QObject>
+#include <QStringList>
+
+
+class MpPlaybackData;
+
+class MpEngine : public QObject
+{
+    Q_OBJECT
+
+  friend class MpEngineFactory;
+
+public:
+    enum EngineMode{
+        StandAlone,
+        Fetch,
+        Embedded,
+        MediaBrowsing
+    };
+    
+private:
+    explicit MpEngine();
+
+public:
+
+    virtual ~MpEngine();
+
+    MpPlaybackData *playbackData();
+    void retrieveSongDetails();
+   
+    // Equalizer related
+    void applyPreset( int preset );
+    void disableEqualizer();
+    int activePreset();
+    QStringList presetNames();
+
+public slots:
+    // Playback related
+    void stop();
+    void setShuffle(bool mode);
+    void setRepeat( bool mode);
+    void startSeekBackward();
+    void startSeekForward();
+    void stopSeeking();
+    void skipBackward();
+    void skipForward();
+    void playPause();
+    void setPosition( int position );
+
+signals:
+
+    // Equalizer related
+    void libraryUpdated();
+
+private:
+    Q_DISABLE_COPY( MpEngine )
+
+public:
+    int mActivePreset;
+    int mApplyPresetCount;
+    int mDisableEquqlizerCount;
+    int retrieveSongDetailsCount;
+    int stopCount;
+    int startSeekBackwardCount;
+    int startSeekForwardCount;
+    int stopSeekingCount;
+    int skipBackwardCount;
+    int skipForwardCount;
+
+};
+
+#endif // MPENGINE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/stub/inc/mpenginefactory.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,48 @@
+/*
+* 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: MpEngineFactory stub for testing mpplaybackview
+*
+*/
+
+#ifndef MPENGINEFACTORY_H
+#define MPENGINEFACTORY_H
+
+#include <hbglobal.h>
+
+
+class MpPlaybackData;
+class MpEngine;
+
+class MpEngineFactory
+{
+    
+public:
+    // Stub functions
+private:
+    explicit MpEngineFactory();
+
+public:
+    virtual ~MpEngineFactory();
+    static MpEngineFactory * instance(); 
+    static MpEngine * sharedEngine();
+    
+private:
+    Q_DISABLE_COPY( MpEngineFactory )
+    
+    MpEngine *mSharedEngine;
+  
+};
+
+
+#endif // MPENGINEFACTORY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/stub/inc/mpequalizerwidget.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,64 @@
+/*
+* 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: Equalizer dialog widget stub.
+*
+*/
+
+#ifndef MPEQUALIZERWIDGET_H
+#define MPEQUALIZERWIDGET_H
+
+//includes
+#include <hbdialog.h>
+
+//forward declartions
+class HbRadioButtonList;
+class MpEngine;
+
+//class declaration
+class MpEqualizerWidget : public HbDialog
+{
+
+    Q_OBJECT
+
+public:
+    explicit MpEqualizerWidget();
+    virtual ~MpEqualizerWidget();
+
+public:
+    void initialize();
+    void prepareDialog();
+    void show();
+    void close();
+    
+public slots:
+    void presetSelected(int index);
+    void cancelSelected(bool checked);
+    void okSelected(bool checked);
+
+private: // functions
+    QString getLocalizedString( QString name );
+public:
+    int                showEqualizerWidgetCount;
+    int                closeEqualizerWidgetCount;
+private:
+    
+    MpEngine           *mMpEngine;         // Own
+
+    Q_DISABLE_COPY(MpEqualizerWidget)
+    
+};
+
+#endif //MPEQUALIZERWIDGET_H
+
+//End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/stub/inc/mpplaybackdata.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,72 @@
+/*
+* 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: mpplaybackdata stub for testing mpplaybackview
+*
+*/
+
+#ifndef MPPLAYBACKDATA_H
+#define MPPLAYBACKDATA_H
+
+//includes
+#include <QObject>
+#include <QMetaType>
+
+
+class MpPlaybackData : public QObject
+{
+    Q_OBJECT
+
+public:
+
+const QString& uri() const;
+
+
+
+    enum SimplifiedState {
+        NotPlaying,
+        Playing,
+        Paused,
+        Stopped
+    };
+    // Test utility functions
+    static int getUpdateCounter();
+    static void resetUpdateCounter();
+    void triggerStateUpdate(SimplifiedState state);
+    void triggerLabelsChanged(const QString &title, const QString &artist);
+    void setPlaybackState(MpPlaybackData::SimplifiedState state);
+    void setUri( QString uri );
+
+    // Stub functions
+    explicit MpPlaybackData();
+    virtual ~MpPlaybackData();
+
+
+signals:
+    void playbackStateChanged();
+    void playbackInfoChanged();
+
+public:
+    const QString& title() const;
+    const QString& artist() const;
+    MpPlaybackData::SimplifiedState playbackState() const;
+
+public:
+    QString                  mArtist;
+    QString                  mTitle;
+    SimplifiedState          mPlaybackState;
+    QString                  mUri;
+
+};
+
+#endif  // MPPLAYBACKDATA_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/stub/inc/mpplaybackwidget.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,65 @@
+/*
+* 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: Playback widget for Music Player playback view.
+*
+*/
+
+#ifndef MPPLAYBACKWIDGET_H
+#define MPPLAYBACKWIDGET_H
+
+#include <hbwidget.h>
+
+class MpPlaybackData;
+class HbStackedLayout;
+class QString;
+class HbTextItem;
+class HbProgressSlider;
+class HbLabel;
+class MpPlaybackDocumentLoader;
+class MpAlbumCoverWidget;
+
+class MpPlaybackWidget : public HbWidget
+{
+    Q_OBJECT
+
+public:
+
+    MpPlaybackWidget( MpPlaybackData *data, QGraphicsItem *parent=0 );
+    virtual ~MpPlaybackWidget();
+    void repeatChanged( bool);
+
+signals:
+
+    void setPlaybackPosition( int value );
+
+private:
+
+    MpPlaybackData           *mPlaybackData;        // Not own
+    MpPlaybackDocumentLoader *mDocumentLoader;      // Own
+
+    HbStackedLayout          *mLayout;              // Not own
+    HbLabel                  *mSongTitle;           // Not own
+    HbLabel                  *mArtistName;          // Not own
+    HbLabel                  *mAlbumName;           // Not own
+    MpAlbumCoverWidget       *mAlbumArt;            // Not own
+    HbProgressSlider         *mProgressBar;         // Not own
+    HbLabel                  *mRealAudioIndicator;  // Not own
+    HbLabel                  *mRepeatIndicator;     // Not own
+    bool                     mProgreesBarDragging;
+    int                      mDuration;
+
+    Q_DISABLE_COPY(MpPlaybackWidget)
+};
+
+#endif  // MPPLAYBACKWIDGET_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/stub/inc/mpsettingsmanager.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,54 @@
+/*
+* 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: MpSettingsManager stub for testing MpMtpInfoLink.
+*
+*/
+
+#ifndef MPSETTINGSMANAGER_H
+#define MPSETTINGSMANAGER_H
+
+#include<QObject>
+#include <QtGlobal>
+
+class  MpSettingsManager: public QObject
+{
+    
+Q_OBJECT
+
+private:
+    explicit MpSettingsManager();
+
+public:
+    virtual ~MpSettingsManager();
+    static MpSettingsManager *instance();
+    static bool shuffle();
+    static bool repeat();
+
+public slots:
+    static void setShuffle(bool shuffle);
+    static void setRepeat(bool repeat);    
+        
+signals:
+    void shuffleChanged(bool shuffle);
+    void repeatChanged(bool repeat);
+
+public:
+    bool mShuffle;
+    bool mRepeat;
+
+private:
+    Q_DISABLE_COPY(MpSettingsManager)
+};
+
+#endif    // MPSETTINGSMANAGER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/stub/inc/mpviewbase.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,50 @@
+/*
+* 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: Base class for all Music Player views.
+*
+*/
+
+#ifndef MPVIEWBASE_H
+#define MPVIEWBASE_H
+
+#include <QString>
+#include <hbview.h>
+#include "mpcommondefs.h"
+
+class MpViewBase : public HbView
+{
+    Q_OBJECT
+
+public:
+
+    void setViewMode(MpCommon::MpViewMode viewMode) { mViewMode = viewMode; }
+    MpCommon::MpViewMode viewMode() { return mViewMode; }
+    virtual void setDefaultView() { }
+
+signals:
+
+    void songSelected( QString songPath );
+
+protected:
+
+    MpViewBase() : mViewMode(MpCommon::DefaultView) {}
+
+public:
+
+    MpCommon::MpViewMode    mViewMode;
+
+};
+
+#endif  // MPVIEWBASE_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/stub/src/mpengine.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,170 @@
+/*
+* 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: Stub for MpEngine
+*
+*/
+
+#include "mpengine.h"
+#include "stub\inc\mpplaybackdata.h"
+#include "mptrace.h"
+
+
+/*!
+  Stub
+  */
+MpEngine::MpEngine()
+{
+    TX_LOG_ARGS("Stub")
+}
+
+/*!
+  Stub
+  */
+MpEngine::~MpEngine()
+{
+    TX_ENTRY_ARGS("Stub")
+}
+
+
+/*!
+  Stub
+  */
+void MpEngine::applyPreset( int preset )
+{
+    mApplyPresetCount++;
+    mActivePreset = preset;
+}
+
+/*!
+  Stub
+  */
+void MpEngine::disableEqualizer()
+{
+    mDisableEquqlizerCount++;
+    mActivePreset = -1;
+}
+
+/*!
+  Stub
+  */
+int MpEngine::activePreset()
+{
+    return mActivePreset;
+}
+
+/*!
+  Stub
+  */
+QStringList MpEngine::presetNames()
+{
+    QStringList presets;
+    presets << "Bass Booster" << "Classic" << "Jazz" << "Pop" << "Rock" << "New Preset";
+    return presets;
+}
+
+
+/*!
+  Stub
+  */
+MpPlaybackData *MpEngine::playbackData()
+{
+    return new MpPlaybackData();
+}
+
+/*!
+  Stub
+  */
+void MpEngine::stop()
+{
+    stopCount++;
+}
+
+/*!
+  Stub
+  */
+void MpEngine::retrieveSongDetails()
+{
+    retrieveSongDetailsCount++;
+}
+
+/*!
+  Stub
+  */
+void MpEngine::setShuffle( bool mode )
+{
+    Q_UNUSED(mode)
+}
+/*!
+  Stub
+  */
+void MpEngine::setRepeat( bool mode )
+{
+    Q_UNUSED(mode)
+}
+
+/*!
+  Stub
+  */
+void MpEngine::startSeekBackward()
+{
+    startSeekBackwardCount++;
+}
+
+/*!
+  Stub
+  */
+void MpEngine::startSeekForward()
+{
+    startSeekForwardCount++;
+}
+
+/*!
+  Stub
+  */
+void MpEngine::stopSeeking()
+{
+    stopSeekingCount++;
+}
+
+/*!
+  Stub
+  */
+void MpEngine::skipBackward()
+{
+    skipBackwardCount++;
+}
+
+/*!
+  Stub
+  */
+void MpEngine::skipForward()
+{
+    skipForwardCount++;
+}
+
+/*!
+  Stub
+  */
+void MpEngine::playPause()
+{
+
+}
+
+/*!
+  Stub
+  */
+void MpEngine::setPosition(int position)
+{
+    Q_UNUSED(position)
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/stub/src/mpenginefactory.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,62 @@
+/*
+* 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: MpEngineFactory stub for testing mpplaybackview
+*
+*/
+
+
+#include "stub/inc/mpenginefactory.h"
+#include "stub/inc/mpplaybackdata.h"
+#include "stub/inc/mpengine.h"
+
+
+
+/*!
+ *  Stub function
+ */
+
+/*!
+ *  Stub function
+ */
+MpEngineFactory::MpEngineFactory()
+    : mSharedEngine( 0 )
+{
+}
+
+/*!
+ *  Stub function
+ */
+MpEngineFactory::~MpEngineFactory()
+{
+}
+
+/*!
+ *  Stub function
+ */
+MpEngineFactory * MpEngineFactory::instance()
+{
+    static MpEngineFactory instance;
+    return &instance;
+}
+
+/*!
+ *  Stub function
+ */
+MpEngine *MpEngineFactory::sharedEngine()
+{
+    if ( !instance()->mSharedEngine ) {
+        instance()->mSharedEngine = new MpEngine();
+    }
+    return instance()->mSharedEngine;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/stub/src/mpequalizerwidget.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,113 @@
+/*
+* 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: Equalizer widget stub for Music Player playback view.
+*
+*/
+
+// System includes
+#include <QStringList>
+#include <EqualizerConstants.h>
+
+// User includes
+#include "..\inc\mpequalizerwidget.h"
+#include "..\inc\mpenginefactory.h"
+#include "..\inc\mpengine.h"
+#include "mptrace.h"
+
+
+/*!
+ Constructs the Equalizer widget.
+ */
+MpEqualizerWidget::MpEqualizerWidget() :
+    mMpEngine(0)
+{
+    TX_ENTRY    
+    initialize();    
+    TX_EXIT
+}
+
+/*!
+ Destructs the widget.
+ */
+MpEqualizerWidget::~MpEqualizerWidget()
+{
+	TX_LOG
+}
+
+/*!
+ Stub
+ */
+void MpEqualizerWidget::initialize()
+{    
+    mMpEngine = MpEngineFactory::sharedEngine();  
+}
+
+/*!
+ Stub
+ */
+void MpEqualizerWidget::prepareDialog()
+{
+}
+
+/*!
+ Stub
+ */
+void MpEqualizerWidget::presetSelected(int index)
+{
+    Q_UNUSED(index)
+}
+
+/*!
+Stub
+ */
+void MpEqualizerWidget::cancelSelected(bool checked)
+{
+    TX_ENTRY
+    Q_UNUSED(checked);
+}
+
+/*!
+Stub
+ */
+void MpEqualizerWidget::okSelected(bool checked)
+{
+    Q_UNUSED(checked);
+}
+
+/*!
+Stub
+ */
+void MpEqualizerWidget::show()
+{
+ showEqualizerWidgetCount++;
+}
+
+/*!
+Stub
+ */
+void MpEqualizerWidget::close()
+{
+ closeEqualizerWidgetCount++;
+}
+
+/*!
+  Return the localized string base on preset name.
+ */
+QString MpEqualizerWidget::getLocalizedString( QString name )
+{
+    Q_UNUSED(name)
+    return QString();
+}
+
+//End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/stub/src/mpplaybackdata.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,115 @@
+/*
+* 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: MpPlaybackData stub for testing mpnowplayingwidget
+*
+*/
+
+#include "../inc/mpplaybackdata.h"
+
+
+int gUpdateCounter = 0;
+
+
+/*!
+ Returns gUpdateCounter.
+ gUpdateCounter counts the number of MpNowPlayingBackEnd::update calls.
+ */
+int MpPlaybackData::getUpdateCounter()
+{
+    return gUpdateCounter;
+}
+
+/*!
+ Resets gUpdateCounter to zero.
+ */
+void MpPlaybackData::resetUpdateCounter()
+{
+    gUpdateCounter = 0;
+}
+
+/*!
+ Causes signal stateUpdate to be emitted.
+ */
+void MpPlaybackData::triggerStateUpdate(SimplifiedState state)
+{
+    mPlaybackState = state;
+    emit playbackStateChanged();
+    
+}
+
+/*!
+ Causes signal titleChanged to be emitted.
+ */
+void MpPlaybackData::triggerLabelsChanged(const QString &title, const QString &artist )
+{
+    mArtist = artist;
+    mTitle = title;
+    emit playbackInfoChanged();;
+}
+
+/*!
+ Stub function.
+ */
+MpPlaybackData::MpPlaybackData()
+    : mPlaybackState(NotPlaying)
+{
+    gUpdateCounter++;
+}
+
+/*!
+ Stub function.
+ */
+MpPlaybackData::~MpPlaybackData()
+{
+}
+
+/*!
+ Stub function.
+ */
+const QString& MpPlaybackData::title() const
+{
+    return mTitle;
+}
+
+/*!
+ Stub function.
+ */
+const QString& MpPlaybackData::artist() const
+{
+    return mArtist;
+}
+
+/*!
+ Stub function.
+ */
+
+MpPlaybackData::SimplifiedState MpPlaybackData::playbackState() const
+{
+    return mPlaybackState;
+}
+
+const QString& MpPlaybackData::uri() const
+{
+    return mUri;
+}
+
+void MpPlaybackData::setPlaybackState(MpPlaybackData::SimplifiedState state)
+{
+    mPlaybackState=state;
+}
+
+void MpPlaybackData::setUri(QString uri)
+{
+    mUri = uri;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/stub/src/mpplaybackwidget.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,60 @@
+/*
+* 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: Playback widget stub for Music Player playback view.
+*
+*/
+
+#include <QTime>
+
+#include <hbprogressslider.h>
+#include <hbinstance.h>
+#include <hblabel.h>
+#include <hbfontspec.h>
+#include <hbstackedlayout.h>
+
+#include "..\inc\mpplaybackwidget.h"
+#include "mpplaybackdata.h"
+#include "mpalbumcoverwidget.h"
+#include "mpplaybackdocumentloader.h"
+#include "mptrace.h"
+
+
+
+
+/*!
+ Constructs the collection view plugin.
+ */
+MpPlaybackWidget::MpPlaybackWidget(MpPlaybackData *data, QGraphicsItem *parent )
+    : HbWidget(parent),
+      mPlaybackData(data),
+      mDocumentLoader(0),
+      mProgreesBarDragging(false),
+      mDuration(0)
+{
+}
+
+/*!
+ Constructs the collection view plugin.
+ */
+MpPlaybackWidget::~MpPlaybackWidget()
+{
+
+}
+
+/*!
+ Handle Repeat changed.
+ */
+void MpPlaybackWidget::repeatChanged( bool )
+{ 
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/stub/src/mpsettingsmanager.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,76 @@
+/*
+* 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: MpSettingsManager stub for testing mpplaybackview.
+*
+*/
+
+#include "../inc/mpsettingsmanager.h"
+
+
+/*!
+ Constructs the MP Settings Manager.
+ */
+MpSettingsManager::MpSettingsManager() :
+    mShuffle(true),
+    mRepeat(true)
+{
+}
+
+/*!
+ Destructs the settings manager.
+ */
+MpSettingsManager::~MpSettingsManager()
+{
+}
+
+/*!
+ Returns the singleton instance to the settings manager.
+ */
+MpSettingsManager * MpSettingsManager::instance()
+{
+    static MpSettingsManager instance;
+    return &instance;
+}
+
+/*!
+ Stub function.
+ */
+void MpSettingsManager::setShuffle( bool shuffle )
+{
+    instance()->mShuffle = shuffle;        
+}
+/*!
+ Stub function.
+ */
+void MpSettingsManager::setRepeat( bool repeat )
+{
+    instance()->mRepeat = repeat;
+}
+
+/*!
+ Stub function.
+ */
+bool MpSettingsManager::shuffle()
+{
+    return instance()->mShuffle;
+}
+
+/*!
+ Stub function.
+ */
+bool MpSettingsManager::repeat()
+{
+   return instance()->mRepeat;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackview/unittest_mpplaybackview.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,52 @@
+# 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: mpplaybackview unit test project file.
+
+TEMPLATE = app
+
+CONFIG += qtestlib \
+    hb \
+    symbian_test
+
+TARGET = unittest_mpplaybackview
+TARGET.CAPABILITY = CAP_APPLICATION
+DEPENDPATH += .
+
+
+INCLUDEPATH += . \
+    stub/inc \
+    ../../inc \
+    ../../../../inc
+
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+LIBS += -lestor.dll \
+    -lfbscli.dll
+
+
+
+HEADERS += inc/unittest_mpplaybackview.h \
+    ../../inc/mpplaybackview.h \
+    ../../../../inc/mpviewbase.h \
+    stub\inc\mpengine.h \
+    stub\inc\mpenginefactory.h \
+    stub\inc\mpplaybackwidget.h \
+    stub\inc\mpequalizerwidget.h \
+    stub\inc\mpsettingsmanager.h \
+    stub\inc\mpplaybackdata.h
+
+
+SOURCES += src/unittest_mpplaybackview.cpp \
+    stub\src\mpengine.cpp \
+    stub\src\mpenginefactory.cpp \
+    stub\src\mpplaybackwidget.cpp \
+    stub\src\mpequalizerwidget.cpp \
+    stub\src\mpsettingsmanager.cpp \
+    stub\src\mpplaybackdata.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackwidget/inc/unittest_mpplaybackwidget.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,52 @@
+/*
+* 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 MpPlaybackWidget
+*
+*/
+
+#ifndef TESTMPPLAYBACKWIDGET_H
+#define TESTMPPLAYBACKWIDGET_H
+
+#include <QtTest/QtTest>
+
+class MpPlaybackWidget;
+
+class TestMpPlaybackWidget : public QObject
+{
+    Q_OBJECT
+
+public:
+
+    TestMpPlaybackWidget();
+    virtual ~TestMpPlaybackWidget();
+
+public slots:
+    void initTestCase();
+    void cleanupTestCase();
+    void init();
+    void cleanup();
+
+private slots:
+    void testRepeatChanged();
+    void testPlaybackInfoChanged();
+    void testDurationChanged();
+    void testPositionChanged();
+    void testAlbumArtChanged();
+
+private:
+    MpPlaybackWidget          *mTest;
+
+};
+
+#endif  // TESTMPPLAYBACKWIDGET_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackwidget/src/unittest_mpplaybackwidget.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,162 @@
+/*
+* 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 MpPlaybackWidget
+*
+*/
+#include <QSignalSpy>
+#include <QTime>
+#include "unittest_mpplaybackwidget.h"
+#include "mpplaybackdata.h"
+#include "mpalbumcoverwidget.h"
+#include <hblabel.h>
+#include <hbprogressslider.h>
+
+/*
+ * formatDuration() cannot be tested as it is private slot
+ */
+
+// Do this so we can access all member variables.
+#define private public
+#include "mpplaybackwidget.h"
+#undef private
+
+/*!
+ Make our test case a stand-alone executable that runs all the test functions.
+ */
+int main(int argc, char *argv[])
+{
+    QApplication app(argc, argv);
+    TestMpPlaybackWidget 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_mpplaybackwidget.txt";
+
+        return QTest::qExec(&tv, 3, pass);
+    }
+}
+
+TestMpPlaybackWidget::TestMpPlaybackWidget()
+    : mTest(0)
+{
+}
+
+TestMpPlaybackWidget::~TestMpPlaybackWidget()
+{
+    delete mTest;
+}
+
+/*!
+ Called before the first testfunction is executed.
+ */
+void TestMpPlaybackWidget::initTestCase()
+{
+}
+
+/*!
+ Called after the last testfunction was executed.
+ */
+void TestMpPlaybackWidget::cleanupTestCase()
+{
+}
+
+/*!
+ Called before each testfunction is executed.
+ */
+void TestMpPlaybackWidget::init()
+{
+    mTest = new MpPlaybackWidget( new MpPlaybackData() );
+}
+
+/*!
+ Called after every testfunction.
+ */
+void TestMpPlaybackWidget::cleanup()
+{
+    delete mTest;
+    mTest = 0;
+}
+
+/*!
+ test repeatChanged
+ */
+void TestMpPlaybackWidget::testRepeatChanged() 
+{
+    mTest->repeatChanged( true );    
+    QVERIFY( mTest->mRepeatIndicator->isVisible() == true );
+    
+    mTest->repeatChanged( false );    
+    QVERIFY( mTest->mRepeatIndicator->isVisible() == false );
+}
+
+/*!
+ test playbackInfoChanged
+ */
+void TestMpPlaybackWidget::testPlaybackInfoChanged()
+{
+    QSignalSpy spy( mTest, SIGNAL( signalPlaybackInfoChanged() ) );
+    mTest->playbackInfoChanged();
+    
+    QVERIFY( mTest->mSongTitle->plainText() == "title" );
+    QVERIFY( mTest->mArtistName->plainText() == "artist" );
+    QVERIFY( mTest->mAlbumName->plainText() == "album" );
+    QVERIFY( mTest->mRealAudioIndicator->isVisible() == false );
+    QVERIFY( spy.count() == 1 );
+    spy.clear();
+}
+
+/*!
+ test durationChanged
+ */
+void TestMpPlaybackWidget::testDurationChanged()
+{
+    mTest->durationChanged();
+    
+    QVERIFY( mTest->mProgressBar->maximum() == 20 );
+    QVERIFY( mTest->mProgressBar->progressValue() == 0 );
+    QVERIFY( mTest->mProgressBar->sliderValue() == 0 );
+    QVERIFY( mTest->mProgressBar->isEnabled() == true );
+}
+
+/*!
+ test positionChanged
+ */
+void TestMpPlaybackWidget::testPositionChanged()
+{
+    mTest->positionChanged();
+    mTest->mProgreesBarDragging = false;
+    
+    QVERIFY( mTest->mProgressBar->progressValue() == 10 );
+    QVERIFY( mTest->mProgressBar->sliderValue() == 10 );
+    // formatDuration is tested seperately 
+}
+
+/*!
+ test albumArtChanged
+ */
+void TestMpPlaybackWidget::testAlbumArtChanged()
+{
+    mTest->albumArtChanged();
+    
+    QVERIFY( mTest->mAlbumArt->mIcon == mTest->mPlaybackData->mAlbumArt );
+    QVERIFY( mTest->mAlbumArt->isEnabled() == true );
+}
+
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackwidget/stub/inc/mpalbumcoverwidget.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,48 @@
+/*
+* 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:  Album Cover Widget for Music Player Media Wall.
+*
+*/
+#ifndef MPALBUMCOVERWIDGET_H
+#define MPALBUMCOVERWIDGET_H
+
+#include <QPixmap>
+#include <QGesture>
+
+#include <hbwidget.h>
+#include <hbicon.h>
+
+class MpAlbumCoverWidget : public HbWidget
+
+{
+    Q_OBJECT
+
+public:
+
+    MpAlbumCoverWidget( QGraphicsItem *parent = 0 );
+    virtual ~MpAlbumCoverWidget();
+    void setIcon(const HbIcon &icon );
+    void setDefaultIcon( const HbIcon &icon );
+     
+public:
+    
+    HbIcon    mIcon;
+    HbIcon    mDefaultIcon;
+    QPixmap   mPixmap;
+};
+
+
+#endif //MPALBUMCOVERWIDGET_H
+
+// EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackwidget/stub/inc/mpplaybackdata.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,87 @@
+/*
+* 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: Playback Data provider for playback view.
+*
+*/
+
+#ifndef MPPLAYBACKDATA_H
+#define MPPLAYBACKDATA_H
+
+#include <QObject>
+#include <QString>
+#include <QPixmap>
+
+#include <hbicon.h>
+
+//forward declartions
+
+class MpPlaybackData : public QObject
+{
+    Q_OBJECT
+
+public:
+
+    enum SimplifiedState {
+        NotPlaying,
+        Playing,
+        Paused,
+        Stopped
+    };
+
+    explicit MpPlaybackData( QObject *parent=0 );
+    virtual ~MpPlaybackData();
+
+    int duration() const;
+    int position() const;
+
+    const QString& title() const;
+    const QString& artist() const;
+    const QString& album() const;
+    const QString& uri() const;
+    void albumArt( HbIcon& icon ) const;
+    int albumId();
+    bool setId( int id );
+    int id();
+    bool realAudio();
+    MpPlaybackData::SimplifiedState playbackState() const;
+
+    void commitPlaybackInfo();
+    void resetData();
+    
+signals:
+
+    void durationChanged();
+    void positionChanged();
+    void albumArtReady();
+    void playbackStateChanged();
+    void playbackInfoChanged();
+    
+public:
+
+    int                      mReqId;
+
+    int                      mDuration;
+    int                      mPosition;
+    QString                  mTitle;
+    QString                  mAlbum;
+    QString                  mArtist;
+    QString                  mUri;
+    int                      mAlbumId;
+    int                      mId;
+    HbIcon                   mAlbumArt;
+    SimplifiedState          mPlaybackState;
+    bool                     mRealAudio;
+};
+
+#endif // MPPLAYBACKDATA_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackwidget/stub/inc/mpplaybackdocumentloader.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,32 @@
+/*
+* 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: stub for Music Player playback view custom document loader.
+*
+*/
+
+#ifndef MPPLAYBACKDOCUMENTLOADER_H
+#define MPPLAYBACKDOCUMENTLOADER_H
+
+
+#include <hbdocumentloader.h>
+
+
+class MpPlaybackDocumentLoader : public HbDocumentLoader
+{
+public:
+    virtual QObject *createObject(const QString& type, const QString &name);
+};
+
+#endif  // MPPLAYBACKDOCUMENTLOADER_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackwidget/stub/src/mpalbumcoverwidget.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,62 @@
+/*
+* 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:  Album Cover Widget.
+*
+*/
+#include <QPainter>
+#include <QGraphicsSceneMouseEvent>
+
+
+#include "mpalbumcoverwidget.h"
+
+
+/*!
+    Constructs the album cover widget
+ */
+MpAlbumCoverWidget::MpAlbumCoverWidget( QGraphicsItem *parent ) : 
+    HbWidget( parent )
+{
+    setFlag( QGraphicsItem::ItemHasNoContents, false );
+    grabGesture(Qt::TapGesture);
+}
+
+/*!
+ Destructs the album cover widget.
+ */
+MpAlbumCoverWidget::~MpAlbumCoverWidget()
+{
+}
+
+/*!
+    Sets the \a icon as current album cover.
+ */
+void MpAlbumCoverWidget::setIcon( const HbIcon &icon )
+{
+    if (icon != mIcon) {
+        mIcon = icon;
+        mPixmap = QPixmap();
+        update();
+    }
+}
+
+/*!
+    Sets the \a icon as default cover, to be used in case the album cover is null icon.
+ */
+void MpAlbumCoverWidget::setDefaultIcon( const HbIcon &icon )
+{
+    mDefaultIcon = icon;
+    update();
+}
+
+//EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackwidget/stub/src/mpplaybackdata.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,172 @@
+/*
+* 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: Playback Data provider for playback view.
+*
+*/
+
+#include <QIcon>
+#include <QString>
+#include <QPixmap>
+#include <QPainter>
+#include <hbicon.h>
+
+#include "mpplaybackdata.h"
+#include "mptrace.h"
+
+const int KUndefined = -1;
+
+
+/*!
+    Constructs a new MpPlaybackData.
+ */
+MpPlaybackData::MpPlaybackData( QObject *parent )
+    : QObject( parent ),
+      mReqId( KUndefined ),
+      mDuration(20000),
+      mPosition(10000),
+      mTitle( QString( "title" ) ),      
+      mAlbum( QString( "album" ) ),
+      mArtist( QString( "artist" ) ),
+      mAlbumId(0),
+      mId(0),
+      mAlbumArt( "qtg_large_music_album" ),
+      mPlaybackState( NotPlaying ),
+      mRealAudio( false )
+{
+    TX_ENTRY
+
+    TX_EXIT
+}
+
+/*!
+ Constructs a new MpPlaybackData.
+ */
+MpPlaybackData::~MpPlaybackData()
+{
+    TX_ENTRY
+    TX_EXIT
+}
+
+
+
+/*!
+ Returns the song duration.
+*/
+int MpPlaybackData::duration() const
+{
+    TX_LOG_ARGS( "mDuration = " << mDuration )
+    return mDuration;
+}
+
+
+/*!
+ Returns the song position.
+*/
+int MpPlaybackData::position() const
+{
+    TX_ENTRY_ARGS( "mPosition = " << mPosition )
+    return mPosition;
+}
+
+/*!
+ Returns the song title.
+*/
+const QString& MpPlaybackData::title() const
+{
+    TX_ENTRY_ARGS( "mTitle = " << mTitle )
+    return mTitle;
+}
+
+
+
+/*!
+ Returns the song artist.
+*/
+const QString& MpPlaybackData::artist() const
+{
+    TX_ENTRY_ARGS( "mArtist = " << mArtist )
+    return mArtist;
+}
+
+
+
+/*!
+ Returns the song album.
+*/
+const QString& MpPlaybackData::album() const
+{
+    TX_ENTRY_ARGS( "mAlbum = " << mAlbum )
+    return mAlbum;
+}
+
+
+/*!
+ Returns the song uri.
+*/
+const QString& MpPlaybackData::uri() const
+{
+    TX_ENTRY_ARGS( "mUri = " << mUri )
+    return mUri;
+}
+
+
+/*!
+ Returns the song album art on \a icon.
+*/
+void MpPlaybackData::albumArt( HbIcon& icon ) const
+{
+    TX_ENTRY
+    icon = mAlbumArt ;
+    TX_EXIT
+}
+
+
+/*!
+ Returns the id of the album to which the song belongs.
+*/
+int MpPlaybackData::albumId()
+{
+    return mAlbumId;
+}
+
+
+
+/*!
+ Returns the id the song.
+*/
+int MpPlaybackData::id()
+{
+    return mId;
+}
+
+
+/*!
+ Returns the mode of Real Audio.
+*/
+bool MpPlaybackData::realAudio()
+{
+    return mRealAudio;
+}
+
+
+
+/*!
+ Returns the playback state.
+*/
+MpPlaybackData::SimplifiedState MpPlaybackData::playbackState() const
+{
+    TX_LOG_ARGS( "mPlaybackState = " << mPlaybackState )
+    return mPlaybackState;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackwidget/stub/src/mpplaybackdocumentloader.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,51 @@
+/*
+* 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 Playback view custom document loader.
+*
+*/
+
+
+#include "mpplaybackdocumentloader.h"
+#include "mpalbumcoverwidget.h"
+#include "mptrace.h"
+
+
+/*!
+    \class MpPlaybackDocumentLoader
+    \brief Music Player playback view custom document loader.
+
+    Playback view document loader extends Orbit document loader to enable
+    loading of custom widgets.
+*/
+
+/*!
+ Creates and returns the object of the given \a type.
+
+ \reimp
+ */
+QObject *MpPlaybackDocumentLoader::createObject(const QString& type, const QString &name)
+{
+    TX_ENTRY_ARGS("type=" << type << ", name=" << name);
+
+    if ( type == MpAlbumCoverWidget::staticMetaObject.className() ) {
+        QObject *object = new MpAlbumCoverWidget();
+        object->setObjectName(name);
+        TX_EXIT
+        return object;
+    }
+
+    TX_EXIT
+    return HbDocumentLoader::createObject(type, name);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpplaybackviewplugin/tsrc/unittest_mpplaybackwidget/unittest_mpplaybackwidget.pro	Fri Aug 06 16:51:36 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: mpplaybackwidget unit test project file.
+#
+
+TEMPLATE = app
+CONFIG += qtestlib hb symbian_test
+TARGET = unittest_mpplaybackwidget
+TARGET.CAPABILITY = CAP_APPLICATION
+
+DEPENDPATH += .
+INCLUDEPATH += . \
+               stub/inc \
+               ../../inc \
+               ../../../../inc
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE 
+
+LIBS += -lmpxviewframeworkqt.dll
+
+HEADERS += inc/unittest_mpplaybackwidget.h \
+		   stub/inc/mpplaybackdata.h \
+		   stub/inc/mpalbumcoverwidget.h \
+		   stub/inc/mpplaybackdocumentloader.h \
+           ../../inc/mpplaybackwidget.h
+           
+
+SOURCES += src/unittest_mpplaybackwidget.cpp \
+  		   stub/src/mpplaybackdata.cpp \
+  		   stub/src/mpalbumcoverwidget.cpp \
+  		   stub/src/mpplaybackdocumentloader.cpp \
+		   ../../src/mpplaybackwidget.cpp
+
+RESOURCES += ../../resources/mpplaybackviewpluginresources.qrc
\ No newline at end of file
--- a/mpviewplugins/mpsettingsviewplugin/mpsettingsviewplugin.pro	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpsettingsviewplugin/mpsettingsviewplugin.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -50,3 +50,4 @@
        
 RESOURCES += resources/mpsettingsview.qrc
 
+DOCML += resources/settingsview.docml
--- a/mpviewplugins/mpsettingsviewplugin/resources/mpsettingsview.qrc	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpsettingsviewplugin/resources/mpsettingsview.qrc	Fri Aug 06 16:51:36 2010 -0500
@@ -2,7 +2,7 @@
 
     
     <qresource prefix="/settingsviewdocml" >
-        <file alias="settingsview.docml">settingsview.docml</file>
+        <file alias="settingsview.docml">settingsview.docml.bin</file>
     </qresource>
 
 </RCC>
--- a/mpviewplugins/mpsettingsviewplugin/tsrc/tsrc.pro	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpsettingsviewplugin/tsrc/tsrc.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -17,7 +17,8 @@
 TEMPLATE = subdirs
 
 SUBDIRS += unittest_mpsettingsviewplugin \
-           unittest_mpsettingsaudioeffectswidget
-
+           unittest_mpsettingsaudioeffectswidget \
+	   unittest_mpsettingsview
+					 
 CONFIG += ordered
 
--- a/mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsaudioeffectswidget/inc/unittest_mpsettingsaudioeffectswidget.h	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsaudioeffectswidget/inc/unittest_mpsettingsaudioeffectswidget.h	Fri Aug 06 16:51:36 2010 -0500
@@ -15,8 +15,8 @@
 *
 */
 
-#ifndef TestMpSettingsAudioEffectsWidget_H
-#define TestMpSettingsAudioEffectsWidget_H
+#ifndef TESTMPSETTINGSAUDIOEFFECTSWIDGET_H
+#define TESTMPSETTINGSAUDIOEFFECTSWIDGET_H
 
 #include <QtTest/QtTest>
 
@@ -53,7 +53,7 @@
 
 };
 
-#endif  // MpSettingsAudioEffectsWidget_H
+#endif  // TESTMPSETTINGSAUDIOEFFECTSWIDGET_H
 
 
 
--- a/mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsaudioeffectswidget/src/unittest_mpsettingsaudioeffectswidget.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsaudioeffectswidget/src/unittest_mpsettingsaudioeffectswidget.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -29,11 +29,6 @@
 #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.
  */
@@ -110,10 +105,11 @@
 }
 
 /*!
- Tests constructor.
+ Tests InitializeSlider.
  */
 void TestMpSettingsAudioEffectsWidget::testInitializeSlider()
 {
+    //test slider widget is set up correctly in initialize()
     mTest->initialize();
     QVERIFY(mTest->mMpEngine != 0 );
 
@@ -122,7 +118,6 @@
     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 );
 
@@ -140,8 +135,12 @@
 
 }
 
+/*!
+ Tests InitializeLoudnessOff.
+ */
 void TestMpSettingsAudioEffectsWidget::testInitializeLoudnessOff()
 {
+    //test loudness HbDataFormModelItem is set up correctly in initialize()
     MpEngineFactory::sharedEngine()->setLoudness( false );
     mTest->initialize();
     QVERIFY(  mTest->mModel->item( 1 )->type() == HbDataFormModelItem::ToggleValueItem );
@@ -149,8 +148,12 @@
     QCOMPARE(  mTest->mModel->item( 1 )->contentWidgetData("additionalText"), QVariant(hbTrId( "txt_mus_setlabel_loudness_val_on" )) );
 }
 
+/*!
+ Tests InitializeLoudnessOn.
+ */
 void TestMpSettingsAudioEffectsWidget::testInitializeLoudnessOn()
 {
+    //test loudness HbDataFormModelItem is set up correctly in initialize()
     MpEngineFactory::sharedEngine()->setLoudness( true );
     mTest->initialize();
     QVERIFY(  mTest->mModel->item( 1 )->type() == HbDataFormModelItem::ToggleValueItem );
@@ -159,17 +162,21 @@
 
 }
 
-
+/*!
+ Tests FilterSignals.
+ */
 void TestMpSettingsAudioEffectsWidget::testFilterSignals()
-{
+{   
+    //filtersignals should not change loudness value
     MpEngineFactory::sharedEngine()->setLoudness( false );
-    mTest->initialize();
-    QCOMPARE(MpEngineFactory::sharedEngine()->loudness(), false);
+    mTest->initialize();    
     QModelIndex index1 = mTest->mModel->indexFromItem((mTest->mModel->item(1)));
     mTest->filterSignals(index1,index1);
-    QCOMPARE(MpEngineFactory::sharedEngine()->loudness(), true);
+    QCOMPARE(MpEngineFactory::sharedEngine()->loudness(), false);
+   
 }
 
 
 
+
 // End of file
--- a/mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsaudioeffectswidget/stub/src/mpengine.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsaudioeffectswidget/stub/src/mpengine.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description: Wrapper for mpx framework utilities.
+* Description: Stub for MpEngine for testing mpsettingsaudioeffecswidget
 *
 */
 
@@ -19,6 +19,9 @@
 #include "mptrace.h"
 
 
+/*!
+ Stub
+ */
 MpEngine::MpEngine()
     : mBalance(0),
     mLoudness(0)
@@ -27,7 +30,7 @@
 }
 
 /*!
- Destructs music player engine.
+ Stub
  */
 MpEngine::~MpEngine()
 {
@@ -36,7 +39,7 @@
 
 // Audio Effects related
 /*!
- Destructs music player engine.
+ Stub
  */
 int MpEngine::balance()
 {
@@ -44,7 +47,7 @@
 }
 
 /*!
- Destructs music player engine.
+Stub
  */
 bool MpEngine::loudness()
 {
@@ -52,9 +55,8 @@
 }
 
 
-//slots:
 /*!
- Destructs music player engine.
+Stub
  */
 void MpEngine::setBalance( int balance )
 {
@@ -62,7 +64,7 @@
 }
 
 /*!
- Destructs music player engine.
+Stub
  */
 void MpEngine::setLoudness( bool mode )
 {
--- a/mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsaudioeffectswidget/stub/src/mpenginefactory.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsaudioeffectswidget/stub/src/mpenginefactory.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description: mp engine factory.
+* Description: mp engine factory stub for testing mpsettingsaudioeffectswidget
 *
 */
 
@@ -20,10 +20,7 @@
 #include "mptrace.h"
 
 /*!
-    \class MpEngineFactory
-    \brief Music Player engine factory.
-
-    MP Engine factory is responsible to create and mantain ownership of MP engines.
+Stub
 */
 
 /*!
--- a/mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsaudioeffectswidget/unittest_mpsettingsaudioeffectswidget.pro	Fri Jul 23 17:31:12 2010 -0500
+++ b/mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsaudioeffectswidget/unittest_mpsettingsaudioeffectswidget.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -28,8 +28,6 @@
 LIBS += -lestor.dll \
         -lfbscli.dll
 
-symbian: TARGET.EPOCALLOWDLLDATA = 1
-
 HEADERS += stub/inc/mpengine.h \
            stub/inc/mpenginefactory.h \
            inc/unittest_mpsettingsaudioeffectswidget.h \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsview/inc/unittest_mpsettingsview.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,60 @@
+/*
+* 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 mpsettingsview
+*
+*/
+
+#ifndef UNITTEST_MPSETTINGSVIEW_H_
+#define UNITTEST_MPSETTINGSVIEW_H_
+
+#include <QtTest/QtTest>
+#include <QObject>
+
+//Forward Declaration
+class MpSettingsView;
+
+class TestMpSettingsView : public QObject
+{
+    Q_OBJECT
+
+public:
+
+    TestMpSettingsView();
+    virtual ~TestMpSettingsView();
+    
+
+signals:
+    void back ();    
+    void albumArtChanged();
+ 
+public slots:
+    void initTestCase();
+    void cleanupTestCase();
+    void init();
+    void cleanup();
+    
+private slots:
+
+    void testInitializeView();
+
+    void testActivateView();
+    void testDeactivateView();
+    void testBack();
+
+private:
+    MpSettingsView *mTest;
+    
+};
+
+#endif /* UNITTEST_MPSETTINGSVIEW_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsview/src/unittest_mpsettingsview.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,150 @@
+/*
+* 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 mpsettingsview.
+*
+*/
+
+#include <hbmainwindow.h>
+#include <hbapplication.h>
+#include <QSignalSpy>
+
+#include "unittest_mpsettingsview.h"
+
+// Do this so we can access all member variables.
+#define private public
+#include "mpsettingsview.h"
+#undef private
+
+/*!
+ Make our test case a stand-alone executable that runs all the test functions.
+ */
+int main(int argc, char *argv[])
+{
+    HbApplication app(argc, argv);
+    HbMainWindow window;
+
+    TestMpSettingsView 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_mpsettingsview.txt";
+
+        return QTest::qExec(&tv, 3, pass);
+    }
+}
+
+//Constructor
+TestMpSettingsView::TestMpSettingsView()
+    : mTest(0)
+{
+
+}
+
+//Destructor
+TestMpSettingsView::~TestMpSettingsView()
+{
+    delete mTest;
+}
+
+/*!
+ Called before the first testfunction is executed.
+ */
+void TestMpSettingsView::initTestCase()
+{
+
+}
+
+/*!
+ Called after the last testfunction was executed.
+ */
+void TestMpSettingsView::cleanupTestCase()
+{
+QCoreApplication::processEvents();
+}
+
+/*!
+ Called before each testfunction is executed.
+ */
+void TestMpSettingsView::init()
+{
+    mTest = new MpSettingsView();
+}
+
+/*!
+ Called after every testfunction.
+ */
+void TestMpSettingsView::cleanup()
+{
+    delete mTest;
+    mTest = 0;
+}
+
+/*!
+ Called before each testfunction is executed.
+ */
+void TestMpSettingsView::testInitializeView()
+{
+    //test widget initialization
+    QVERIFY(mTest->mAudioEffectsWidget == 0);
+    QVERIFY(mTest->mSoftKeyBack == 0);
+    QVERIFY(mTest->mWindow == 0);
+
+    mTest->initializeView();
+    QVERIFY(mTest->mAudioEffectsWidget != 0);
+    QVERIFY(mTest->mSoftKeyBack != 0);
+
+}
+
+/*!
+ Test ActivateView
+*/
+void TestMpSettingsView::testActivateView()
+{
+    //test navigation action is set
+    mTest->initializeView();    
+    mTest->activateView();
+    QCOMPARE(mTest->navigationAction(), mTest->mSoftKeyBack );
+
+}
+
+/*!
+test DecativateView
+ */
+void TestMpSettingsView::testDeactivateView()
+{
+    //test navigation action is set to 0
+    mTest->initializeView();
+    mTest->activateView();
+    mTest->deactivateView();    
+    QVERIFY(mTest->navigationAction()== 0 );
+    mTest->deactivateView();
+
+
+}
+/*!
+test Back()
+ */
+void TestMpSettingsView::testBack()
+{
+    QSignalSpy spy(mTest, SIGNAL(command(int)));
+    mTest->back();
+    QCOMPARE(spy.count(), 1);
+
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsview/stub/inc/mpsettingsaudioeffectswidget.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,55 @@
+/*
+* 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 Settings view - audio settings -stub.
+*
+*/
+
+#ifndef MPSETTINGSAUDIOEFFECTSWIDGET_H
+#define MPSETTINGSAUDIOEFFECTSWIDGET_H
+
+
+// INCLUDES
+#include <QObject>
+#include <hbwidget.h>
+
+
+// CLASS DECLARATION
+class MpEngine;
+class HbSlider;
+
+/**
+ *  Audio Effects widget definition.
+ *
+ */
+class MpSettingsAudioEffectsWidget : public HbWidget
+    {
+    Q_OBJECT
+    
+public:
+    explicit MpSettingsAudioEffectsWidget( QGraphicsItem *parent=0  );
+    virtual ~MpSettingsAudioEffectsWidget();
+    
+    void initialize();
+
+public slots:
+    
+    void filterSignals( QModelIndex startIn, QModelIndex endIn );
+    
+private:
+
+    };
+
+#endif  // MPSETTINGSAUDIOEFFECTSWIDGET_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsview/stub/src/mpsettingsaudioeffectswidget.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,45 @@
+/*
+* 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: Stub for MpSettingsAudioEffectsWidget.
+*
+*/
+
+// User includes
+#include "mpsettingsaudioeffectswidget.h"
+#include "mptrace.h"
+
+
+MpSettingsAudioEffectsWidget::MpSettingsAudioEffectsWidget( QGraphicsItem *parent  )
+    : HbWidget( parent )
+{
+    TX_LOG
+}
+
+
+MpSettingsAudioEffectsWidget::~MpSettingsAudioEffectsWidget()
+{
+
+    TX_LOG
+}
+
+
+void MpSettingsAudioEffectsWidget::initialize()
+{
+}
+
+void MpSettingsAudioEffectsWidget::filterSignals( QModelIndex startIn, QModelIndex endIn )
+{
+    Q_UNUSED(startIn);
+    Q_UNUSED(endIn);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpviewplugins/mpsettingsviewplugin/tsrc/unittest_mpsettingsview/unittest_mpsettingsview.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,46 @@
+#
+# 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: 
+#
+
+TEMPLATE = app
+CONFIG += qtestlib hb symbian_test
+TARGET = unittest_mpsettingsview
+TARGET.CAPABILITY = CAP_APPLICATION
+
+
+DEPENDPATH += . 
+INCLUDEPATH += ./stub/inc \
+	       ../../inc \
+	       ../../../../inc
+	       
+
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+LIBS += -lmpxviewframeworkqt.dll \
+        -lmpsettingsmanager.dll
+
+
+# Input
+HEADERS += inc/unittest_mpsettingsview.h \
+            ../../inc/mpsettingsview.h \
+            stub/inc/mpsettingsaudioeffectswidget.h \
+           ../../../../inc/mpviewbase.h
+           
+
+SOURCES += src/unittest_mpsettingsview.cpp \
+               ../../src/mpsettingsview.cpp \
+            stub/src/mpsettingsaudioeffectswidget.cpp \
+
+RESOURCES += ../../resources/mpsettingsview.qrc
--- a/musicwidgetplugin/musicwidgetplugin.pro	Fri Jul 23 17:31:12 2010 -0500
+++ b/musicwidgetplugin/musicwidgetplugin.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -57,4 +57,6 @@
     
     DEPLOYMENT += plugins \
                   widgetResources
-}
\ No newline at end of file
+}
+
+DOCML += resource/music_widget.docml
\ No newline at end of file
--- a/musicwidgetplugin/resource/music_widget.docml	Fri Jul 23 17:31:12 2010 -0500
+++ b/musicwidgetplugin/resource/music_widget.docml	Fri Aug 06 16:51:36 2010 -0500
@@ -10,7 +10,7 @@
         </widget>
         <widget name="shortcut_icon" type="HbPushButton">
             <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
-            <!--  <icon iconName="qtg_large_music_player" name="icon" width="11un" height="11un"/>  -->
+            <!--  <icon iconName="qtg_large_music" name="icon" width="11un" height="11un"/>  -->
             <enums name="aspectRatioMode" value="IgnoreAspectRatio"/>
             <real name="z" value="4"/>
             <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
--- a/musicwidgetplugin/resource/musicwidgetui.qrc	Fri Jul 23 17:31:12 2010 -0500
+++ b/musicwidgetplugin/resource/musicwidgetui.qrc	Fri Aug 06 16:51:36 2010 -0500
@@ -1,6 +1,6 @@
 <RCC>
     <qresource prefix="/gfx">
-        <file>music_widget.docml</file>
+        <file alias="music_widget.docml">music_widget.docml.bin</file>
         <file>musicwidgeticon.png</file>
     </qresource>
 </RCC>
--- a/musicwidgetplugin/src/musicwidget.cpp	Fri Jul 23 17:31:12 2010 -0500
+++ b/musicwidgetplugin/src/musicwidget.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -56,7 +56,7 @@
 const QLatin1String ICON_PLAY ("qtg_mono_play");
 const QLatin1String ICON_PAUSE ("qtg_mono_pause");
 /**  Music Player shortcut icon */
-const QLatin1String ICON_LARGE_MUSIC_PLAYER ("qtg_large_music_player");
+const QLatin1String ICON_LARGE_MUSIC_PLAYER ("qtg_large_music");
 /**  Music Player shortcut icon */
 const QLatin1String ICON_FIRST_TIME_USE ("qtg_large_music_empty");
 const QLatin1String ICON_DEFAULT_ART ("qtg_large_album_art");
@@ -664,7 +664,7 @@
     TX_ENTRY
     HbIcon icon;
     
-    if ( mMusicPlayerNoSongData )
+    if ( mMpPlaybackData->playbackState() == MpPlaybackData::NotPlaying )
         {
         TX_LOG_ARGS("1st time album art")
         icon = HbIcon(ICON_FIRST_TIME_USE);    
--- a/qtmusicplayer.pro	Fri Jul 23 17:31:12 2010 -0500
+++ b/qtmusicplayer.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -24,6 +24,7 @@
     include(utilities/mpsettingsmanager/rom/rom.pri)
     include(utilities/mpnowplayingbanner/rom/rom.pri)
     include(utilities/mpalbumcoverwidget/rom/rom.pri)
+    include(utilities/mpmediacontroller/rom/rom.pri)
     include(mpviewplugins/mpcollectionviewplugin/rom/rom.pri)
     include(mpviewplugins/mpplaybackviewplugin/rom/rom.pri)
     include(mpviewplugins/mpsettingsviewplugin/rom/rom.pri)
--- a/sis/musicplayer_stub.pkg	Fri Jul 23 17:31:12 2010 -0500
+++ b/sis/musicplayer_stub.pkg	Fri Aug 06 16:51:36 2010 -0500
@@ -36,6 +36,7 @@
 ""-"z:\sys\bin\mpnowplayingbanner.dll"
 ""-"z:\sys\bin\mpsettingsmanager.dll"
 ""-"z:\sys\bin\mpalbumcoverwidget.dll"
+""-"z:\sys\bin\mpmediacontroller.dll"
 ""-"z:\sys\bin\mpdata.dll"
 ""-"z:\sys\bin\mpengine.dll"
 ""-"z:\sys\bin\musicservices.dll"
Binary file sis/musicplayer_stub.sis has changed
--- a/sis/musicplayer_udeb.pkg	Fri Jul 23 17:31:12 2010 -0500
+++ b/sis/musicplayer_udeb.pkg	Fri Aug 06 16:51:36 2010 -0500
@@ -245,7 +245,8 @@
 ; DLLs
 "\epoc32\release\armv5\udeb\mpnowplayingbanner.dll"   - "!:\sys\bin\mpnowplayingbanner.dll"
 "\epoc32\release\armv5\udeb\mpsettingsmanager.dll"    - "!:\sys\bin\mpsettingsmanager.dll"
-"\epoc32\release\armv5\udeb\mpalbumcoverwidget.dll"    - "!:\sys\bin\mpalbumcoverwidget.dll"
+"\epoc32\release\armv5\udeb\mpalbumcoverwidget.dll"   - "!:\sys\bin\mpalbumcoverwidget.dll"
+"\epoc32\release\armv5\udeb\mpmediacontroller.dll"    - "!:\sys\bin\mpmediacontroller.dll"
 "\epoc32\release\armv5\udeb\mpdata.dll"               - "!:\sys\bin\mpdata.dll"
 "\epoc32\release\armv5\udeb\mpengine.dll"             - "!:\sys\bin\mpengine.dll"
 "\epoc32\release\armv5\udeb\musicservices.dll"        - "!:\sys\bin\musicservices.dll"
--- a/sis/musicplayer_urel.pkg	Fri Jul 23 17:31:12 2010 -0500
+++ b/sis/musicplayer_urel.pkg	Fri Aug 06 16:51:36 2010 -0500
@@ -246,6 +246,7 @@
 "\epoc32\release\armv5\urel\mpnowplayingbanner.dll"   - "!:\sys\bin\mpnowplayingbanner.dll"
 "\epoc32\release\armv5\urel\mpsettingsmanager.dll"    - "!:\sys\bin\mpsettingsmanager.dll"
 "\epoc32\release\armv5\urel\mpalbumcoverwidget.dll"   - "!:\sys\bin\mpalbumcoverwidget.dll"
+"\epoc32\release\armv5\urel\mpmediacontroller.dll"    - "!:\sys\bin\mpmediacontroller.dll"
 "\epoc32\release\armv5\urel\mpdata.dll"               - "!:\sys\bin\mpdata.dll"
 "\epoc32\release\armv5\urel\mpengine.dll"             - "!:\sys\bin\mpengine.dll"
 "\epoc32\release\armv5\urel\musicservices.dll"        - "!:\sys\bin\musicservices.dll"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpalbumcoverwidget/tsrc/tsrc.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,22 @@
+#
+# 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 mpalbumcoverwidget unit test project file.
+#
+
+TEMPLATE = subdirs
+
+SUBDIRS += unittest_mpalbumcoverwidget
+
+CONFIG += ordered
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpalbumcoverwidget/tsrc/unittest_mpalbumcoverwidget/inc/unittest_mpalbumcoverwidget.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,53 @@
+/*
+* 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 mpalbumcoverwidget
+*
+*/
+
+#ifndef TESTMPALBUMCOVERWIDGET_H
+#define TESTMPALBUMCOVERWIDGET_H
+
+#include <QtTest/QtTest>
+
+class MpAlbumCoverWidget;
+
+class TestMpAlbumCoverWidget : public QObject
+{
+    Q_OBJECT
+
+public:
+
+    TestMpAlbumCoverWidget();
+    virtual ~TestMpAlbumCoverWidget();
+
+public slots:
+    void initTestCase();
+    void cleanupTestCase();
+    void init();
+    void cleanup();
+
+private slots:
+    void testSetIcon();
+    void testSetDefaultIcon();
+
+private:
+
+    MpAlbumCoverWidget          *mTest;
+};
+
+#endif  // TESTMPALBUMCOVERWIDGET_H
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpalbumcoverwidget/tsrc/unittest_mpalbumcoverwidget/src/unittest_mpalbumcoverwidget.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,117 @@
+/*
+* 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 mpalbumcoverwidget
+*
+*/
+
+
+#include <hbicon.h>
+
+#include "unittest_mpalbumcoverwidget.h"
+
+// Do this so we can access all member variables.
+#define private public
+#include "mpalbumcoverwidget.h"
+#undef private
+
+/*!
+ Make our test case a stand-alone executable that runs all the test functions.
+ */
+int main(int argc, char *argv[])
+{
+    QApplication app(argc, argv);
+
+    TestMpAlbumCoverWidget 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_mpalbumcoverwidget.txt";
+
+        return QTest::qExec(&tv, 3, pass);
+    }
+}
+
+TestMpAlbumCoverWidget::TestMpAlbumCoverWidget()
+    : mTest(0)
+{
+}
+
+TestMpAlbumCoverWidget::~TestMpAlbumCoverWidget()
+{
+    delete mTest;
+}
+
+/*!
+ Called before the first testfunction is executed.
+ */
+void TestMpAlbumCoverWidget::initTestCase()
+{
+}
+
+/*!
+ Called after the last testfunction was executed.
+ */
+void TestMpAlbumCoverWidget::cleanupTestCase()
+{
+}
+
+/*!
+ Called before each testfunction is executed.
+ */
+void TestMpAlbumCoverWidget::init()
+{
+    mTest = new MpAlbumCoverWidget();
+}
+
+/*!
+ Called after every testfunction.
+ */
+void TestMpAlbumCoverWidget::cleanup()
+{
+    delete mTest;
+    mTest = 0;
+}
+
+/*!
+ test setIcon
+ */
+void TestMpAlbumCoverWidget::testSetIcon()
+{
+    HbIcon *icon = new HbIcon();
+    mTest->setIcon( *icon );
+    
+    QVERIFY( *icon == mTest->mIcon );
+    delete icon;
+}
+
+/*!
+ test setDefaultIcon
+ */
+void TestMpAlbumCoverWidget::testSetDefaultIcon()
+{
+    HbIcon *icon = new HbIcon();
+    mTest->setDefaultIcon( *icon );
+    
+    QVERIFY( *icon == mTest->mDefaultIcon);
+    delete icon;
+}
+
+
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpalbumcoverwidget/tsrc/unittest_mpalbumcoverwidget/unittest_mpalbumcoverwidget.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,39 @@
+#
+# 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: mpalbumcoverwidget unit test project file.
+#
+
+TEMPLATE = app
+CONFIG += qtestlib hb symbian_test
+TARGET = unittest_mpalbumcoverwidget
+TARGET.CAPABILITY = CAP_APPLICATION
+
+DEPENDPATH += .
+INCLUDEPATH += . \
+               ../../inc \
+               ../../../../inc
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE 
+
+LIBS += -lestor.dll \
+        -lfbscli.dll
+
+HEADERS += inc/unittest_mpalbumcoverwidget.h \
+		   ../../../../inc/mpalbumcoverwidget.h \
+
+               
+SOURCES += src/unittest_mpalbumcoverwidget.cpp \
+           ../../src/mpalbumcoverwidget.cpp \
+
+DEFINES += BUILD_MPALBUMCOVERWIDGET
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/bwins/mpmediacontrolleru.def	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,14 @@
+EXPORTS
+	?staticMetaObject@MpMediaController@@2UQMetaObject@@B @ 1 NONAME ; struct QMetaObject const MpMediaController::staticMetaObject
+	?qt_metacall@MpMediaController@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 2 NONAME ; int MpMediaController::qt_metacall(enum QMetaObject::Call, int, void * *)
+	??1MpMediaController@@UAE@XZ @ 3 NONAME ; MpMediaController::~MpMediaController(void)
+	?tr@MpMediaController@@SA?AVQString@@PBD0H@Z @ 4 NONAME ; class QString MpMediaController::tr(char const *, char const *, int)
+	?trUtf8@MpMediaController@@SA?AVQString@@PBD0H@Z @ 5 NONAME ; class QString MpMediaController::trUtf8(char const *, char const *, int)
+	?trUtf8@MpMediaController@@SA?AVQString@@PBD0@Z @ 6 NONAME ; class QString MpMediaController::trUtf8(char const *, char const *)
+	??0MpMediaController@@QAE@PAVQObject@@@Z @ 7 NONAME ; MpMediaController::MpMediaController(class QObject *)
+	?tr@MpMediaController@@SA?AVQString@@PBD0@Z @ 8 NONAME ; class QString MpMediaController::tr(char const *, char const *)
+	?metaObject@MpMediaController@@UBEPBUQMetaObject@@XZ @ 9 NONAME ; struct QMetaObject const * MpMediaController::metaObject(void) const
+	?getStaticMetaObject@MpMediaController@@SAABUQMetaObject@@XZ @ 10 NONAME ; struct QMetaObject const & MpMediaController::getStaticMetaObject(void)
+	??_EMpMediaController@@UAE@I@Z @ 11 NONAME ; MpMediaController::~MpMediaController(unsigned int)
+	?qt_metacast@MpMediaController@@UAEPAXPBD@Z @ 12 NONAME ; void * MpMediaController::qt_metacast(char const *)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/eabi/mpmediacontrolleru.def	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,14 @@
+EXPORTS
+	_ZN17MpMediaController11qt_metacallEN11QMetaObject4CallEiPPv @ 1 NONAME
+	_ZN17MpMediaController11qt_metacastEPKc @ 2 NONAME
+	_ZN17MpMediaController16staticMetaObjectE @ 3 NONAME DATA 16
+	_ZN17MpMediaController19getStaticMetaObjectEv @ 4 NONAME
+	_ZN17MpMediaControllerC1EP7QObject @ 5 NONAME
+	_ZN17MpMediaControllerC2EP7QObject @ 6 NONAME
+	_ZN17MpMediaControllerD0Ev @ 7 NONAME
+	_ZN17MpMediaControllerD1Ev @ 8 NONAME
+	_ZN17MpMediaControllerD2Ev @ 9 NONAME
+	_ZNK17MpMediaController10metaObjectEv @ 10 NONAME
+	_ZTI17MpMediaController @ 11 NONAME
+	_ZTV17MpMediaController @ 12 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/inc/mpmediakeyhandler.h	Fri Aug 06 16:51:36 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: Music Player media key handler.
+*
+*/
+
+#ifndef MPMEDIAKEYHANDLER_H
+#define MPMEDIAKEYHANDLER_H
+
+#include <QObject>
+
+class MpMediaKeyHandlerPrivate;
+
+class MpMediaKeyHandler : public QObject
+{
+    Q_OBJECT
+
+    friend class MpMediaKeyHandlerPrivate;
+
+public:
+
+    explicit MpMediaKeyHandler( QObject *parent = 0 );
+    virtual ~MpMediaKeyHandler();
+
+private:
+
+    Q_DISABLE_COPY(MpMediaKeyHandler)
+    MpMediaKeyHandlerPrivate *d_ptr;
+
+};
+
+#endif // MPMEDIAKEYHANDLER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/inc/mpmediakeyhandler_p.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,124 @@
+/*
+* 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 media key handler - private implementation.
+*
+*/
+
+#ifndef MPMEDIAKEYHANDLER_P_H
+#define MPMEDIAKEYHANDLER_P_H
+
+
+#include <remconcoreapitargetobserver.h>
+
+class CRemConInterfaceSelector;
+class MpMediaKeyHandler;
+class MpMediaKeyRemConResponse;
+class MpEngine;
+
+class MpMediaKeyHandlerPrivate : public MRemConCoreApiTargetObserver
+{
+public:
+
+    MpMediaKeyHandlerPrivate( MpMediaKeyHandler *wrapper );
+    virtual ~MpMediaKeyHandlerPrivate();
+
+    void init();
+
+// From MRemConCoreApiTargetObserver
+
+    /**
+     * From MRemConCoreApiTargetObserver
+     * A command has been received.
+     *
+     * @param aOperationId The operation ID of the command.
+     * @param aButtonAct The button action associated with the command.
+     */
+    void MrccatoCommand(
+        TRemConCoreApiOperationId aOperationId,
+        TRemConCoreApiButtonAction aButtonAct );
+
+    /**
+     * From MRemConCoreApiTargetObserver
+     * A 'play' command has been received.
+     *
+     * @param aSpeed The playback speed.
+     * @param aButtonAct The button action associated with the command.
+     */
+    void MrccatoPlay(
+        TRemConCoreApiPlaybackSpeed aSpeed,
+        TRemConCoreApiButtonAction aButtonAct );
+
+    /**
+     * From MRemConCoreApiTargetObserver
+     * A 'tune function' command has been received.
+     *
+     * @param aTwoPart Determine which channel to be used.
+     * @param aMajorChannel The major channel number.
+     * @param aMinorChannel The minor channel number.
+     * @param aButtonAct The button action associated with the command.
+     */
+    void MrccatoTuneFunction(
+        TBool aTwoPart,
+        TUint aMajorChannel,
+        TUint aMinorChannel,
+        TRemConCoreApiButtonAction aButtonAct );
+
+    /**
+     * From MRemConCoreApiTargetObserver
+     * A 'select disk function' has been received.
+     *
+     * @param aDisk The disk.
+     * @param aButtonAct The button action associated with the command.
+     */
+    void MrccatoSelectDiskFunction(
+        TUint aDisk,
+        TRemConCoreApiButtonAction aButtonAct );
+
+    /**
+     * From MRemConCoreApiTargetObserver
+     * A 'select AV input function' has been received.
+     *
+     * @param aAvInputSignalNumber The AV input.
+     * @param aButtonAct The button action associated with the command.
+     */
+    void MrccatoSelectAvInputFunction(
+        TUint8 aAvInputSignalNumber,
+        TRemConCoreApiButtonAction aButtonAct );
+
+    /**
+     * From MRemConCoreApiTargetObserver
+     * A 'select audio input function' has been received.
+     *
+     * @param aAudioInputSignalNumber The audio input.
+     * @param aButtonAct The button action associated with the command.
+     */
+    void MrccatoSelectAudioInputFunction(
+        TUint8 aAudioInputSignalNumber,
+        TRemConCoreApiButtonAction aButtonAct );
+
+private:
+
+    void DoInitL();
+
+private:
+
+    MpMediaKeyHandler *q_ptr;
+
+    CRemConInterfaceSelector    *iInterfaceSelector;   // owned
+    MpMediaKeyRemConResponse    *iResponseHandler;     // owned
+    MpEngine                    *iMpEngine;            // not owned
+    bool                        iSideKeyAlreadyClicked;
+};
+
+#endif // MPMEDIAKEYHANDLER_P_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/inc/mpmediakeyremconresponse.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,82 @@
+/*
+* 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 media key handler.
+*              Helper class for sending response back to Remote Controller Framework.
+*
+*/
+
+#ifndef MPMEDIAKEYREMCONKEYRESPONSE_H
+#define MPMEDIAKEYREMCONKEYRESPONSE_H
+
+#include <remconcoreapitarget.h>
+
+
+NONSHARABLE_CLASS( MpMediaKeyRemConResponse ) : public CActive
+{
+public:
+
+    /**
+     * Two-phased constructor.
+     *
+     * @since 3.0
+     * @param aRemConCoreApiTarget RemCon core target object.
+     * @return Pointer to newly created object.
+     */
+    static MpMediaKeyRemConResponse* NewL( CRemConCoreApiTarget& aRemConCoreApiTarget );
+
+    /**
+     * Destructor.
+     */
+    virtual ~MpMediaKeyRemConResponse();
+
+    /**
+     * Send the any key response back to Remcon server
+     *
+     * @since 3.0
+     * @param aOperationId RemCon operation Id.
+     */
+    void CompleteAnyKey( TRemConCoreApiOperationId aOperationId );
+
+private:
+
+    /**
+     * C++ default constructor.
+     */
+    MpMediaKeyRemConResponse( CRemConCoreApiTarget& aRemConCoreApiTarget );
+
+// from base class CActive
+
+    /**
+     * From CActive
+     * Handles an active object's request completion event.
+     */
+    void RunL();
+
+    /**
+     * From CActive
+     * Implements cancellation of an outstanding request.
+     */
+    void DoCancel();
+
+private:    // Data
+
+    // Response array.
+    RArray<TRemConCoreApiOperationId> iResponseArray;   // Own
+    CRemConCoreApiTarget& iRemConCoreApiTarget;         // Not own
+};
+
+#endif  // MPMEDIAKEYREMCONKEYRESPONSE_H
+
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/inc/mpvolumeslider.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,65 @@
+/*
+* 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 volume slider.
+*
+*/
+
+#ifndef MPVOLUMESLIDER_H
+#define MPVOLUMESLIDER_H
+
+#include <QObject>
+#include "mpcommondefs.h"
+
+class MpEngine;
+class HbVolumeSliderPopup;
+
+class MpVolumeSlider : public QObject
+{
+    Q_OBJECT
+
+public:
+
+    explicit MpVolumeSlider( QObject *parent = 0 );
+    virtual ~MpVolumeSlider();
+    void showVolumeSlider();
+
+public slots:
+
+    // To handle Engine signals
+    void handleVolumeProperty( MpCommon::MpVolumeProperty property, int value );
+
+    // To handle VolumeSlider signals
+    void sliderPressed();
+    void sliderReleased();
+    void muteIconClicked();
+    void volumeSliderChanged( int value );
+
+private:
+
+    void initializeVolumeSliderPopup();
+
+private:
+    Q_DISABLE_COPY(MpVolumeSlider)
+
+    MpEngine                    *mMpEngine;             // not owned
+    HbVolumeSliderPopup         *mVolumeSliderPopup;    // owned
+    int                          mEngineVolumeMax;
+    int                          mEngineVolumeLevel;
+    bool                         mEngineMuted;
+    int                          mEngineDataCompleted;  // 0x01 volume max, 0x02 volume level, 0x04 volume mute
+    bool                         mSliderPressed;
+    int                          mSliderStep;           // VolumeLevelMax / DefaultSteps
+};
+
+#endif // MPVOLUMESLIDER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/mpmediacontroller.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,50 @@
+#
+# 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: 
+#
+
+TEMPLATE = lib
+CONFIG += hb qt
+TARGET = mpmediacontroller
+symbian: { 
+    TARGET.UID3 = 0x10207C97
+    MMP_RULES += "DEFFILE mpmediacontroller.def"
+    defFilePath = .
+    TARGET.CAPABILITY = CAP_GENERAL_DLL
+    TARGET.EPOCALLOWDLLDATA = 1
+}
+DEFINES += BUILD_MPMEDIACONTROLLER
+
+INCLUDEPATH += . \
+      inc \
+      ../../inc
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE 
+     
+LIBS += -lmpengine \
+        -lremconcoreapi \
+        -lremconinterfacebase
+
+# Input
+HEADERS += ../../inc/mpmediacontroller.h \
+           inc/mpmediakeyhandler.h \
+           inc/mpmediakeyhandler_p.h \
+           inc/mpmediakeyremconresponse.h \
+           inc/mpvolumeslider.h
+
+SOURCES += src/mpmediacontroller.cpp \
+           src/mpmediakeyhandler.cpp \
+           src/mpmediakeyhandler_p.cpp \
+           src/mpmediakeyremconresponse.cpp \
+           src/mpvolumeslider.cpp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/rom/mpmediacontroller.iby	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,25 @@
+/*
+* 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: 
+*
+*/
+
+#ifndef __MPMEDIACONTROLLER_IBY__
+#define __MPMEDIACONTROLLER_IBY__
+
+#include <bldvariant.hrh>
+
+file=ABI_DIR\BUILD_DIR\mpmediacontroller.dll                          SHARED_LIB_DIR\mpmediacontroller.dll
+
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/rom/rom.pri	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,21 @@
+#
+# 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: 
+#
+
+symbian {
+MP_IBY_DIR = $$section(PWD,":",1)
+
+BLD_INF_RULES.prj_exports += "$$MP_IBY_DIR/mpmediacontroller.iby CORE_APP_LAYER_IBY_EXPORT_PATH(mpmediacontroller.iby)"
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/src/mpmediacontroller.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,47 @@
+/*
+* 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 Media Controller.
+*
+*/
+
+
+#include "mpmediacontroller.h"
+#include "mpmediakeyhandler.h"
+#include "mpvolumeslider.h"
+#include "mptrace.h"
+
+
+/*!
+ Constructs the MpMediaController.
+ */
+MpMediaController::MpMediaController( QObject *parent )
+    : QObject( parent ),
+      mMpMediaKeyHandler( 0 ),
+      mMpVolumeSlider( 0 )
+{
+    TX_ENTRY
+    mMpMediaKeyHandler = new MpMediaKeyHandler();
+    mMpVolumeSlider = new MpVolumeSlider();
+    TX_EXIT
+}
+
+/*!
+ Destructs MpMediaController.
+ */
+MpMediaController::~MpMediaController()
+{
+    delete mMpMediaKeyHandler;
+    delete mMpVolumeSlider;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/src/mpmediakeyhandler.cpp	Fri Aug 06 16:51:36 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: Music Player media key handler.
+*
+*/
+
+#include "mpmediakeyhandler.h"
+#include "mpmediakeyhandler_p.h"
+#include "mptrace.h"
+
+/*!
+ Constructs MpMediaKeyHandler.
+ */
+MpMediaKeyHandler::MpMediaKeyHandler( QObject *parent )
+    : QObject(parent)
+{
+    TX_ENTRY
+    d_ptr = new MpMediaKeyHandlerPrivate(this);
+    d_ptr->init();
+    TX_EXIT
+}
+
+/*!
+ Destructs MpMediaKeyHandler.
+ */
+MpMediaKeyHandler::~MpMediaKeyHandler()
+{
+    TX_ENTRY
+    delete d_ptr;
+    TX_EXIT
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/src/mpmediakeyhandler_p.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,264 @@
+/*
+* 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 media key handler - private implementation.
+*
+*/
+
+
+//symbian header files
+#include <remconcoreapitarget.h>
+#include <remconinterfaceselector.h>
+
+#include "mpmediakeyhandler_p.h"
+#include "mpmediakeyhandler.h"
+#include "mpmediakeyremconresponse.h"
+#include "mpenginefactory.h"
+#include "mpcommondefs.h"
+#include "mptrace.h"
+
+
+/*!
+ \internal
+ */
+MpMediaKeyHandlerPrivate::MpMediaKeyHandlerPrivate( MpMediaKeyHandler *wrapper )
+    : q_ptr( wrapper ),
+      iInterfaceSelector(NULL),
+      iResponseHandler(NULL),
+      iMpEngine(NULL),
+      iSideKeyAlreadyClicked(false)
+{
+    TX_LOG
+}
+
+/*!
+ \internal
+ */
+MpMediaKeyHandlerPrivate::~MpMediaKeyHandlerPrivate()
+{
+    TX_ENTRY
+    delete iResponseHandler;
+    delete iInterfaceSelector;
+    TX_EXIT
+}
+
+/*!
+ \internal
+ */
+void MpMediaKeyHandlerPrivate::init()
+{
+    TX_ENTRY
+    TRAPD(err, DoInitL());
+    if ( err != KErrNone ) {
+        TX_LOG_ARGS("Error: " << err << "; should never get here.");
+    }
+    TX_EXIT
+
+}
+
+/*!
+ From MRemConCoreApiTargetObserver
+ A command has been received.
+ */
+void MpMediaKeyHandlerPrivate::MrccatoCommand(
+    TRemConCoreApiOperationId aOperationId,
+    TRemConCoreApiButtonAction aButtonAct )
+{
+    TX_ENTRY_ARGS( " aOperationId=" << aOperationId << " aButtonAct=" << aButtonAct );
+
+    switch ( aOperationId ) {
+    case ERemConCoreApiPausePlayFunction:
+        if ( aButtonAct == ERemConCoreApiButtonClick ) {
+            iMpEngine->playPause();
+        }
+        break;
+    case ERemConCoreApiPlay:
+        if ( aButtonAct == ERemConCoreApiButtonClick
+             || aButtonAct == ERemConCoreApiButtonPress ) {
+            iMpEngine->play();
+        }
+        break;
+    case ERemConCoreApiStop:
+        if ( aButtonAct == ERemConCoreApiButtonClick
+             || aButtonAct == ERemConCoreApiButtonPress ) {
+            iMpEngine->stop();
+        }
+        break;
+    case ERemConCoreApiPause:
+        if ( aButtonAct == ERemConCoreApiButtonClick
+             || aButtonAct == ERemConCoreApiButtonPress ) {
+            iMpEngine->pause();
+        }
+        break;
+    case ERemConCoreApiRewind:
+        switch ( aButtonAct ) {
+        case ERemConCoreApiButtonPress:
+            iMpEngine->startSeekBackward();
+            break;
+        case ERemConCoreApiButtonRelease:
+            iMpEngine->stopSeeking();
+            break;
+        default:
+            break;
+        }
+        break;
+    case ERemConCoreApiFastForward:
+        switch ( aButtonAct ) {
+        case ERemConCoreApiButtonPress:
+            iMpEngine->startSeekForward();
+            break;
+        case ERemConCoreApiButtonRelease:
+            iMpEngine->stopSeeking();
+            break;
+        default:
+            break;
+        }
+        break;
+    case ERemConCoreApiBackward:
+        if ( aButtonAct == ERemConCoreApiButtonClick ) {
+            iMpEngine->skipBackward();
+        }
+        break;
+    case ERemConCoreApiForward:
+        if ( aButtonAct == ERemConCoreApiButtonClick ) {
+            iMpEngine->skipForward();
+        }
+        break;
+    // Pressing headset volume key only generates ButtonPress, however pressing and holding hardware side key
+    // generates ButtonClick and after a while ButtonPressed, we should make sure increase/decrease only once
+    case ERemConCoreApiVolumeUp:
+        if ( aButtonAct == ERemConCoreApiButtonClick || 
+             ( aButtonAct == ERemConCoreApiButtonPress && !iSideKeyAlreadyClicked ) ) {
+            iSideKeyAlreadyClicked = true;
+            iMpEngine->increaseVolume();
+        }
+        else if ( aButtonAct == ERemConCoreApiButtonRelease ) {
+            iSideKeyAlreadyClicked = false;
+        }
+        break;
+    case ERemConCoreApiVolumeDown:
+        if ( aButtonAct == ERemConCoreApiButtonClick || 
+             ( aButtonAct == ERemConCoreApiButtonPress && !iSideKeyAlreadyClicked ) ) {
+            iSideKeyAlreadyClicked = true;
+            iMpEngine->decreaseVolume();
+        }
+        else if ( aButtonAct == ERemConCoreApiButtonRelease ) {
+            iSideKeyAlreadyClicked = false;
+        }
+        break;
+    default:
+        break;
+    }
+    iResponseHandler->CompleteAnyKey( aOperationId );
+    TX_EXIT
+}
+
+/*!
+ From MRemConCoreApiTargetObserver
+ A 'play' command has been received.
+ */
+void MpMediaKeyHandlerPrivate::MrccatoPlay(
+    TRemConCoreApiPlaybackSpeed aSpeed,
+    TRemConCoreApiButtonAction aButtonAct )
+{
+    TX_ENTRY_ARGS( "aButtonAct=" << aButtonAct );
+    Q_UNUSED(aSpeed);
+
+    if ( ( aButtonAct == ERemConCoreApiButtonClick ) ||
+        ( aButtonAct == ERemConCoreApiButtonPress ) ) {
+            iMpEngine->play();
+        }
+    iResponseHandler->CompleteAnyKey( ERemConCoreApiPlay );
+    TX_EXIT
+}
+
+/*!
+ From MRemConCoreApiTargetObserver
+ A 'tune function' command has been received.
+ */
+void MpMediaKeyHandlerPrivate::MrccatoTuneFunction(
+    TBool aTwoPart,
+    TUint aMajorChannel,
+    TUint aMinorChannel,
+    TRemConCoreApiButtonAction aButtonAct )
+{
+    Q_UNUSED(aTwoPart);
+    Q_UNUSED(aMajorChannel);
+    Q_UNUSED(aMinorChannel);
+    Q_UNUSED(aButtonAct);
+
+    iResponseHandler->CompleteAnyKey( ERemConCoreApiTuneFunction );
+}
+
+/*!
+ From MRemConCoreApiTargetObserver
+ A 'select disk function' has been received.
+ */
+void MpMediaKeyHandlerPrivate::MrccatoSelectDiskFunction(
+    TUint aDisk,
+    TRemConCoreApiButtonAction aButtonAct )
+{
+    Q_UNUSED(aDisk);
+    Q_UNUSED(aButtonAct);
+
+    iResponseHandler->CompleteAnyKey( ERemConCoreApiSelectDiskFunction );
+}
+
+/*!
+ From MRemConCoreApiTargetObserver
+ A 'select AV input function' has been received.
+ */
+void MpMediaKeyHandlerPrivate::MrccatoSelectAvInputFunction(
+    TUint8 aAvInputSignalNumber,
+    TRemConCoreApiButtonAction aButtonAct )
+{
+    Q_UNUSED(aAvInputSignalNumber);
+    Q_UNUSED(aButtonAct);
+
+    iResponseHandler->CompleteAnyKey( ERemConCoreApiSelectAvInputFunction );
+
+}
+
+/*!
+ From MRemConCoreApiTargetObserver
+ A 'select audio input function' has been received.
+*/
+void MpMediaKeyHandlerPrivate::MrccatoSelectAudioInputFunction(
+    TUint8 aAudioInputSignalNumber,
+    TRemConCoreApiButtonAction aButtonAct )
+{
+    Q_UNUSED(aAudioInputSignalNumber);
+    Q_UNUSED(aButtonAct);
+
+    iResponseHandler->CompleteAnyKey( ERemConCoreApiSelectAudioInputFunction );
+
+}
+
+/*!
+ \internal
+ */
+void MpMediaKeyHandlerPrivate::DoInitL()
+{
+    TX_ENTRY
+    // Register to remote control framework
+    iInterfaceSelector = CRemConInterfaceSelector::NewL();
+    CRemConCoreApiTarget *coreTarget = CRemConCoreApiTarget::NewL( *iInterfaceSelector, *this );
+    CleanupStack::PushL( coreTarget );
+    iInterfaceSelector->OpenTargetL();
+    iResponseHandler = MpMediaKeyRemConResponse::NewL( *coreTarget );
+    CleanupStack::Pop(coreTarget);
+
+    iMpEngine = MpEngineFactory::sharedEngine();
+    TX_EXIT
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/src/mpmediakeyremconresponse.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,178 @@
+/*
+* 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 media key handler.
+*              Helper class for sending response back to Remote Controller Framework.
+*
+*/
+
+// INCLUDE FILES
+#include "mpmediakeyremconresponse.h"
+#include "mptrace.h"
+
+
+/*!
+ \internal
+ C++ default constructor can NOT contain any code, that
+ might leave.
+ */
+MpMediaKeyRemConResponse::MpMediaKeyRemConResponse(
+    CRemConCoreApiTarget& aRemConCoreApiTarget )
+    : CActive( CActive::EPriorityStandard ),
+      iRemConCoreApiTarget( aRemConCoreApiTarget )
+{
+    TX_ENTRY
+    CActiveScheduler::Add( this );
+    TX_EXIT
+}
+
+/*!
+ \internal
+ Two-phased constructor.
+ */
+MpMediaKeyRemConResponse* MpMediaKeyRemConResponse::NewL(
+    CRemConCoreApiTarget& aRemConCoreApiTarget )
+{
+    MpMediaKeyRemConResponse* self =
+        new (ELeave) MpMediaKeyRemConResponse( aRemConCoreApiTarget );
+
+    return self;
+}
+
+/*!
+ \internal
+ Destructor
+ */
+MpMediaKeyRemConResponse::~MpMediaKeyRemConResponse()
+{
+    TX_ENTRY
+    Cancel();
+    iResponseArray.Close();
+    TX_EXIT
+}
+
+/*!
+ \internal
+ Send the any key response back to Remcon server
+ */
+void MpMediaKeyRemConResponse::CompleteAnyKey(
+    TRemConCoreApiOperationId aOperationId )
+{
+    TX_ENTRY_ARGS(" OperationId: " << aOperationId );
+    if ( !IsActive() ) {
+        switch ( aOperationId )
+        {
+            case ERemConCoreApiPausePlayFunction:
+            {
+                iRemConCoreApiTarget.PausePlayFunctionResponse( iStatus, KErrNone );
+                SetActive();
+                break;
+            }
+            case ERemConCoreApiPlay:
+            {
+                iRemConCoreApiTarget.PlayResponse( iStatus, KErrNone );
+                SetActive();
+                break;
+            }
+            case ERemConCoreApiStop:
+            {
+                iRemConCoreApiTarget.StopResponse( iStatus, KErrNone );
+                SetActive();
+                break;
+            }
+            case ERemConCoreApiPause:
+            {
+                iRemConCoreApiTarget.PauseResponse( iStatus, KErrNone );
+                SetActive();
+                break;
+            }
+            case ERemConCoreApiRewind:
+            {
+                iRemConCoreApiTarget.RewindResponse( iStatus, KErrNone );
+                SetActive();
+                break;
+            }
+            case ERemConCoreApiFastForward:
+            {
+                iRemConCoreApiTarget.FastForwardResponse( iStatus, KErrNone );
+                SetActive();
+                break;
+            }
+            case ERemConCoreApiBackward:
+            {
+                iRemConCoreApiTarget.BackwardResponse( iStatus, KErrNone );
+                SetActive();
+                break;
+            }
+            case ERemConCoreApiForward:
+            {
+                iRemConCoreApiTarget.ForwardResponse( iStatus, KErrNone );
+                SetActive();
+                break;
+            }
+            case ERemConCoreApiVolumeUp:
+            {
+                iRemConCoreApiTarget.VolumeUpResponse( iStatus, KErrNone );
+                SetActive();
+                break;
+            }
+            case ERemConCoreApiVolumeDown:
+            {
+                iRemConCoreApiTarget.VolumeDownResponse( iStatus, KErrNone );
+                SetActive();
+                break;
+            }
+            default:
+            {
+                TInt error = KErrNone;
+                iRemConCoreApiTarget.SendResponse(
+                    iStatus, aOperationId, error );
+                SetActive();
+                break;
+            }
+        }
+    }
+    // already active. Append to array and complete later.
+    else
+    {
+        iResponseArray.Append( aOperationId );
+    }
+    TX_EXIT
+}
+
+/*!
+ \internal
+ Implements cancellation of an outstanding request.
+ */
+void MpMediaKeyRemConResponse::DoCancel()
+{
+}
+
+/*!
+ \internal
+ Handles an active object's request completion event.
+ */
+void MpMediaKeyRemConResponse::RunL()
+{
+    TX_ENTRY_ARGS( "iStatus=" << iStatus.Int() );
+    // if any existing -> Send response
+    if ( iResponseArray.Count() ) {
+        CompleteAnyKey( iResponseArray[0] );
+        // Remove already completed key
+        iResponseArray.Remove( 0 );
+        iResponseArray.Compress();
+    }
+    TX_EXIT
+}
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/src/mpvolumeslider.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,222 @@
+/*
+* 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 volume slider.
+*
+*/
+
+#include <hbvolumesliderpopup.h>
+
+#include "mpvolumeslider.h"
+#include "mpenginefactory.h"
+#include "mptrace.h"
+
+const int KVolumeMin = 0;
+const int KVolumeMuted = 1;
+const int KDefaultSteps = 10;
+const int KDataCompleted = 0x07; // 0x01 volume max, 0x02 volume level, 0x04 volume mute
+
+/*!
+ Constructs MpVolumeSlider.
+ */
+MpVolumeSlider::MpVolumeSlider( QObject *parent )
+    : QObject( parent),
+      mMpEngine( 0 ),
+      mVolumeSliderPopup( 0 ),
+      mEngineVolumeMax( 0 ),
+      mEngineVolumeLevel( 0 ),
+      mEngineMuted( false ),
+      mEngineDataCompleted( 0 ),
+      mSliderPressed( false ),
+      mSliderStep( 0 )
+{
+    TX_ENTRY
+    mMpEngine = MpEngineFactory::sharedEngine();
+    connect( mMpEngine, SIGNAL( volumePropertyChanged( MpCommon::MpVolumeProperty, int ) ), 
+             this, SLOT( handleVolumeProperty( MpCommon::MpVolumeProperty, int ) ) );
+
+    //Request Volume properties
+    mMpEngine->getMaxVolume();
+    mMpEngine->getVolume();
+    mMpEngine->getMuteState();
+    TX_EXIT
+}
+
+/*!
+ Destructs MpVolumeSlider.
+ */
+MpVolumeSlider::~MpVolumeSlider()
+{
+    TX_ENTRY
+    delete mVolumeSliderPopup;
+    TX_EXIT
+}
+
+/*!
+ Make volume slider visible with latest engine data.
+ */
+void MpVolumeSlider::showVolumeSlider()
+{
+    TX_ENTRY
+
+    if ( !mSliderPressed ) {
+
+        // Initialize popup until needed, in order to save time during app start up.
+        if ( !mVolumeSliderPopup ) {
+            initializeVolumeSliderPopup();
+        }
+
+        // Update VolumeSlider with Engine values
+        if ( mEngineMuted ) {
+            if ( mVolumeSliderPopup->value() != KVolumeMin ) {
+                // Muted from outside (possibly from Headset or MediaKeys), update volume slider as "muted"
+                // Todo: Replace with a more appropriate method to mute slider, when provided by Orbit.
+                mVolumeSliderPopup->setValue( KVolumeMin );
+            }
+        }
+        else if ( mVolumeSliderPopup->value() != ( mEngineVolumeLevel / mSliderStep ) ){
+            mVolumeSliderPopup->setValue( mEngineVolumeLevel / mSliderStep );
+        }
+
+        // Show VolumeSlider
+        if ( !mVolumeSliderPopup->isVisible() ) {
+            mVolumeSliderPopup->setVisible( true );
+        }
+    }
+
+    TX_EXIT
+}
+
+/*!
+ Slot to handle volume property notifications
+ */
+void MpVolumeSlider::handleVolumeProperty( MpCommon::MpVolumeProperty property, int value )
+{
+    TX_ENTRY_ARGS("Property: " << property << ", Value: " << value );
+    switch( property )
+    {
+        case MpCommon::MaxVolume :
+            mEngineVolumeMax = value;
+            mEngineDataCompleted |= 0x01;
+            break;
+        case MpCommon::Volume :
+            mEngineVolumeLevel = value;
+            // Framework automatically mutes if volume == KVolumeMin and unmutes when volume > KVolumeMin
+            mEngineMuted = mEngineVolumeLevel == KVolumeMin; 
+            if ( mEngineDataCompleted == KDataCompleted ) {
+                showVolumeSlider();
+            }
+            else {
+                mEngineDataCompleted |= 0x02;
+            }
+            break;
+        case MpCommon::MuteState :
+            mEngineMuted = ( value == KVolumeMuted );
+            if ( mEngineDataCompleted == KDataCompleted ) {
+                showVolumeSlider();
+            }
+            else {
+                mEngineDataCompleted |= 0x04;
+            }
+            break;
+        default:
+            TX_LOG_ARGS( "We should never be here" );
+            break;
+    }
+    TX_EXIT
+}
+
+/*!
+ Slot called when slider is pressed.
+ */
+void MpVolumeSlider::sliderPressed()
+{
+    TX_ENTRY
+    mSliderPressed = true;
+    TX_EXIT
+}
+
+/*!
+ Slot called when slider is released.
+ */
+void MpVolumeSlider::sliderReleased()
+{
+    TX_ENTRY
+    mSliderPressed = false;
+    TX_EXIT
+}
+
+/*!
+ Slot called when mute icon is clicekd.
+ */
+void MpVolumeSlider::muteIconClicked()
+{
+    TX_ENTRY
+    if ( mVolumeSliderPopup->value() ) {
+        mMpEngine->unmute();
+        mEngineMuted = false;
+    }
+    else {
+        mMpEngine->mute();
+        mEngineMuted = true;
+    }
+    TX_EXIT
+}
+
+/*!
+ Slot called when volume slider value changes.
+ */
+void MpVolumeSlider::volumeSliderChanged( int value )
+{
+    TX_ENTRY
+
+    if ( mEngineVolumeLevel != ( value * mSliderStep ) ) {
+        // When Mute icon is clicked, slider value changes automatically to zero,
+        // don't send that change in order to avoid reset the engine previous volume.
+        if ( !( mEngineMuted && value == KVolumeMin ) ) {
+            mMpEngine->setVolume( value * mSliderStep );
+        }
+    }
+
+    TX_EXIT
+}
+
+/*!
+ Inernal
+ */
+void MpVolumeSlider::initializeVolumeSliderPopup()
+{
+    TX_ENTRY
+
+    mVolumeSliderPopup = new HbVolumeSliderPopup();
+    mVolumeSliderPopup->setRange( KVolumeMin, KDefaultSteps );
+    mVolumeSliderPopup->setSingleStep( 1 );
+    mVolumeSliderPopup->setTickPosition( Hb::NoSliderTicks );
+    mSliderStep = mEngineVolumeMax / KDefaultSteps ;
+
+    connect( mVolumeSliderPopup, SIGNAL( sliderPressed() ), 
+             this, SLOT( sliderPressed() ) );
+    connect( mVolumeSliderPopup, SIGNAL( sliderReleased() ), 
+             this, SLOT( sliderReleased() ) );
+    connect( mVolumeSliderPopup, SIGNAL( iconClicked() ), 
+             this, SLOT( muteIconClicked() ) );
+    // volumeChanged event is also sent when VolumeSlider is Muted/Unmuted
+    // QueuedConnection used in order to handle Mute events first,
+    // and then be able to know whether to apply the slider volume changes to the engine
+    connect( mVolumeSliderPopup, SIGNAL( valueChanged( int ) ), 
+             this, SLOT( volumeSliderChanged( int ) ),
+             Qt::QueuedConnection );
+
+    TX_EXIT
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/tsrc/tsrc.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,23 @@
+#
+# 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 mpnowplayingbanner unit test project file.
+#
+
+TEMPLATE = subdirs
+
+SUBDIRS += unittest_mpmediakeyhandler \
+           unittest_mpvolumeslider
+
+CONFIG += ordered
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/tsrc/unittest_mpmediakeyhandler/inc/unittest_mpmediakeyhandler.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,75 @@
+/**
+* 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 mpmediakeyhandler
+*
+*/
+
+#ifndef TESTMPMEDIAKEYHANDLER_H
+#define TESTMPMEDIAKEYHANDLER_H
+
+#include <QtTest/QtTest>
+
+class MpMediaKeyHandler;
+class MpMediaKeyHandlerPrivate;
+
+class TestMpMediaKeyHandler : public QObject
+{
+    Q_OBJECT
+
+public:
+    
+    TestMpMediaKeyHandler();
+    virtual ~TestMpMediaKeyHandler();
+
+// from QtTest
+public slots:
+
+    void initTestCase();
+    void cleanupTestCase();
+    void init();
+    void cleanup();
+
+// internal
+private slots:
+
+    void testConstructor();
+    void testDestructor();
+    void testCommandPausePlayKey();
+    void testCommandPlayKey();
+    void testCommandStopKey();
+    void testCommandPauseKey();
+    void testCommandRewindKeyPress();
+    void testCommandRewindKeyRelease();
+    void testCommandFastForwardKeyPress();
+    void testCommandFastForwardKeyRelease();
+    void testCommandBackwardKey();
+    void testCommandForwardKey();
+    void testCommandVolumeUpKey();
+    void testCommandVolumeDownKey();
+
+    void testPlay();
+    void testTuneFunction();
+    void testSelectDiskFunction();
+    void testAudioInputFunction();
+    void testSelectAvInputFunction();
+
+private:
+
+    MpMediaKeyHandler           *mTest;
+    MpMediaKeyHandlerPrivate    *mTestPrivate;
+
+};
+
+#endif  // TESTMPMEDIAKEYHANDLER_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/tsrc/unittest_mpmediakeyhandler/src/unittest_mpmediakeyhandler.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,316 @@
+/**
+* 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 mpmediakeyhandler
+*
+*/
+
+#include <QMetaType>
+
+#include "stub/inc/mpenginefactory.h"
+#include "stub/inc/remconcoreapitarget.h"
+#include "stub/inc/remconcoreapitargetobserver.h"
+#include "stub/inc/remconinterfaceselector.h"
+#include "unittest_mpmediakeyhandler.h"
+#include "mpcommondefs.h"
+
+
+// Do this so we can access all member variables.
+#define private public
+#include "mpmediakeyhandler.h"
+#include "mpmediakeyhandler_p.h"
+#undef private
+
+//This so stub classes can be loaded
+#include "mpmediakeyhandler_p.cpp"
+#include "mpmediakeyremconresponse.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);
+
+    TestMpMediaKeyHandler 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_mpmediakeyhandler.txt";
+
+        return QTest::qExec(&tv, 3, pass);
+    }
+}
+
+TestMpMediaKeyHandler::TestMpMediaKeyHandler()
+    : mTest(0)
+{
+}
+
+TestMpMediaKeyHandler::~TestMpMediaKeyHandler()
+{
+    delete mTest;
+}
+
+/*!
+ Called before the first testfunction is executed.
+ */
+void TestMpMediaKeyHandler::initTestCase()
+{
+}
+
+/*!
+ Called after the last testfunction was executed.
+ */
+void TestMpMediaKeyHandler::cleanupTestCase()
+{
+}
+
+/*!
+ Called before each testfunction is executed.
+ */
+void TestMpMediaKeyHandler::init()
+{
+    mTest = new MpMediaKeyHandler();
+    mTestPrivate = mTest->d_ptr;
+}
+
+/*!
+ Called after every testfunction.
+ */
+void TestMpMediaKeyHandler::cleanup()
+{
+    if (mTest)
+    {
+        delete mTest;
+        mTest = 0;
+        mTestPrivate = 0;
+        
+        MpEngineFactory::close();
+    }
+}
+
+void TestMpMediaKeyHandler::testConstructor()
+{
+    QVERIFY( mTest );
+    QVERIFY( mTestPrivate );
+    QVERIFY( mTestPrivate->iInterfaceSelector );
+    QVERIFY( mTestPrivate->iResponseHandler );
+    QVERIFY( mTestPrivate->iMpEngine );
+}
+
+void TestMpMediaKeyHandler::testDestructor()
+{
+    // it is been observed that CRemConCoreApiTarget is not being deleted by anyone
+    // the creator claim it does not own it, while others never claim the ownership neither
+    cleanup();
+    QVERIFY( !mTest );
+    //QCOMPARE(CRemConCoreApiTarget::getCount(), 0);
+    QCOMPARE(CRemConCoreApiTarget::getCount(), 2);
+    QCOMPARE(CRemConInterfaceSelector::getCount(), 0);
+}
+
+void TestMpMediaKeyHandler::testCommandPausePlayKey()
+{
+    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
+    mTestPrivate->MrccatoCommand(ERemConCoreApiPausePlayFunction, ERemConCoreApiButtonClick);
+    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
+    QCOMPARE(mTestPrivate->iMpEngine->iMediaCommandReceived, CmdPlayPause);
+
+}
+
+void TestMpMediaKeyHandler::testCommandPlayKey()
+{
+    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
+    mTestPrivate->MrccatoCommand(ERemConCoreApiPlay, ERemConCoreApiButtonClick);
+    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
+    QCOMPARE(mTestPrivate->iMpEngine->iMediaCommandReceived, CmdPlay);
+}
+
+void TestMpMediaKeyHandler::testCommandStopKey()
+{
+    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
+    mTestPrivate->MrccatoCommand(ERemConCoreApiStop, ERemConCoreApiButtonClick);
+    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
+    QCOMPARE(mTestPrivate->iMpEngine->iMediaCommandReceived, CmdStop);
+}
+
+void TestMpMediaKeyHandler::testCommandPauseKey()
+{
+    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
+    mTestPrivate->MrccatoCommand(ERemConCoreApiPause, ERemConCoreApiButtonClick);
+    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
+    QCOMPARE(mTestPrivate->iMpEngine->iMediaCommandReceived, CmdPause);
+}
+
+void TestMpMediaKeyHandler::testCommandRewindKeyPress()
+{
+    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
+    mTestPrivate->MrccatoCommand(ERemConCoreApiRewind, ERemConCoreApiButtonPress);
+    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
+    QCOMPARE(mTestPrivate->iMpEngine->iMediaCommandReceived, CmdStartSeekBackward);
+}
+
+void TestMpMediaKeyHandler::testCommandRewindKeyRelease()
+{
+    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
+    mTestPrivate->MrccatoCommand(ERemConCoreApiRewind, ERemConCoreApiButtonRelease);
+    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
+    QCOMPARE(mTestPrivate->iMpEngine->iMediaCommandReceived, CmdStopSeeking);
+}
+
+void TestMpMediaKeyHandler::testCommandFastForwardKeyPress()
+{
+    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
+    mTestPrivate->MrccatoCommand(ERemConCoreApiFastForward, ERemConCoreApiButtonPress);
+    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
+    QCOMPARE(mTestPrivate->iMpEngine->iMediaCommandReceived, CmdStartSeekForward);
+}
+
+void TestMpMediaKeyHandler::testCommandFastForwardKeyRelease()
+{
+    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
+    mTestPrivate->MrccatoCommand(ERemConCoreApiFastForward, ERemConCoreApiButtonRelease);
+    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
+    QCOMPARE(mTestPrivate->iMpEngine->iMediaCommandReceived, CmdStopSeeking);
+}
+
+void TestMpMediaKeyHandler::testCommandBackwardKey()
+{
+    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
+    mTestPrivate->MrccatoCommand(ERemConCoreApiBackward, ERemConCoreApiButtonClick);
+    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
+    QCOMPARE(mTestPrivate->iMpEngine->iMediaCommandReceived, CmdSkipBackward);
+}
+
+void TestMpMediaKeyHandler::testCommandForwardKey()
+{
+    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
+    mTestPrivate->MrccatoCommand(ERemConCoreApiForward, ERemConCoreApiButtonClick);
+    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
+    QCOMPARE(mTestPrivate->iMpEngine->iMediaCommandReceived, CmdSkipForward);
+}
+
+void TestMpMediaKeyHandler::testCommandVolumeUpKey()
+{
+    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
+
+    // Simulate hardware side key clicked.
+    mTestPrivate->MrccatoCommand(ERemConCoreApiVolumeUp, ERemConCoreApiButtonClick);
+    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
+    QCOMPARE( mTestPrivate->iMpEngine->iMediaCommandReceived, CmdIncreaseVolume );
+    QVERIFY( mTestPrivate->iSideKeyAlreadyClicked );
+    QTest::qWait(100);
+
+    // Simulate holding the hardware side key.
+    mTestPrivate->iMpEngine->iMediaCommandReceived = CmdNone;
+    mTestPrivate->MrccatoCommand(ERemConCoreApiVolumeUp, ERemConCoreApiButtonPress);
+    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+2);
+    QCOMPARE( mTestPrivate->iMpEngine->iMediaCommandReceived, CmdNone );
+    QVERIFY( mTestPrivate->iSideKeyAlreadyClicked );
+    QTest::qWait(100);
+
+    // Release hardware side key.
+    mTestPrivate->MrccatoCommand(ERemConCoreApiVolumeUp, ERemConCoreApiButtonRelease);
+    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+3);
+    QCOMPARE( mTestPrivate->iMpEngine->iMediaCommandReceived, CmdNone );
+    QVERIFY( !mTestPrivate->iSideKeyAlreadyClicked );
+    QTest::qWait(100);
+
+    // Simulate headset volume key pressed.
+    mTestPrivate->MrccatoCommand(ERemConCoreApiVolumeUp, ERemConCoreApiButtonPress);
+    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+4);
+    QCOMPARE( mTestPrivate->iMpEngine->iMediaCommandReceived, CmdIncreaseVolume );
+    QVERIFY( mTestPrivate->iSideKeyAlreadyClicked );
+}
+
+void TestMpMediaKeyHandler::testCommandVolumeDownKey()
+{
+    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
+
+    // Simulate hardware side key clicked.
+    mTestPrivate->MrccatoCommand(ERemConCoreApiVolumeDown, ERemConCoreApiButtonClick);
+    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
+    QCOMPARE( mTestPrivate->iMpEngine->iMediaCommandReceived, CmdDecreaseVolume );
+    QVERIFY( mTestPrivate->iSideKeyAlreadyClicked );
+    QTest::qWait(100);
+
+    // Simulate holding the hardware side key.
+    mTestPrivate->iMpEngine->iMediaCommandReceived = CmdNone;
+    mTestPrivate->MrccatoCommand(ERemConCoreApiVolumeDown, ERemConCoreApiButtonPress);
+    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+2);
+    QCOMPARE( mTestPrivate->iMpEngine->iMediaCommandReceived, CmdNone );
+    QVERIFY( mTestPrivate->iSideKeyAlreadyClicked );
+    QTest::qWait(100);
+
+    // Release hardware side key.
+    mTestPrivate->MrccatoCommand(ERemConCoreApiVolumeDown, ERemConCoreApiButtonRelease);
+    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+3);
+    QCOMPARE( mTestPrivate->iMpEngine->iMediaCommandReceived, CmdNone );
+    QVERIFY( !mTestPrivate->iSideKeyAlreadyClicked );
+    QTest::qWait(100);
+
+    // Simulate headset volume key pressed.
+    mTestPrivate->MrccatoCommand(ERemConCoreApiVolumeDown, ERemConCoreApiButtonPress);
+    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+4);
+    QCOMPARE( mTestPrivate->iMpEngine->iMediaCommandReceived, CmdDecreaseVolume );
+    QVERIFY( mTestPrivate->iSideKeyAlreadyClicked );
+}
+
+void TestMpMediaKeyHandler::testPlay()
+{
+    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
+    mTestPrivate->MrccatoPlay(ERemConCoreApiPlaybackSpeedX1, ERemConCoreApiButtonClick);
+    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
+    QCOMPARE( mTestPrivate->iMpEngine->iMediaCommandReceived, CmdPlay );
+}
+
+void TestMpMediaKeyHandler::testTuneFunction()
+{
+    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
+    mTestPrivate->MrccatoTuneFunction(ETrue, 0, 1, ERemConCoreApiButtonClick);
+    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
+    QCOMPARE( mTestPrivate->iMpEngine->iMediaCommandReceived, CmdNone );
+}
+
+void TestMpMediaKeyHandler::testSelectDiskFunction()
+{
+    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
+    mTestPrivate->MrccatoSelectDiskFunction(0, ERemConCoreApiButtonClick);
+    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
+    QCOMPARE( mTestPrivate->iMpEngine->iMediaCommandReceived, CmdNone );
+}
+
+void TestMpMediaKeyHandler::testAudioInputFunction()
+{
+    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
+    mTestPrivate->MrccatoSelectAudioInputFunction(0, ERemConCoreApiButtonClick);
+    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
+    QCOMPARE( mTestPrivate->iMpEngine->iMediaCommandReceived, CmdNone );
+}
+
+void TestMpMediaKeyHandler::testSelectAvInputFunction()
+{
+    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
+    mTestPrivate->MrccatoSelectAvInputFunction(0, ERemConCoreApiButtonClick);
+    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
+    QCOMPARE( mTestPrivate->iMpEngine->iMediaCommandReceived, CmdNone );
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/tsrc/unittest_mpmediakeyhandler/stub/inc/mpenginefactory.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,98 @@
+/*
+* 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: MpEngineFactory stub for testing mpmediakeyhandler
+*
+*/
+
+#ifndef MPENGINEFACTORY_H
+#define MPENGINEFACTORY_H
+
+enum MediaCommandReceived{
+    CmdNone,
+    CmdPlay,
+    CmdPause,
+    CmdPlayPause,
+    CmdStop,
+    CmdSkipForward,
+    CmdStartSeekForward,
+    CmdStopSeeking,
+    CmdSkipBackward,
+    CmdStartSeekBackward,
+    CmdIncreaseVolume,
+    CmdDecreaseVolume,
+    CmdSetVolumeLevel,
+    CmdMuteVolume,
+    CmdUnmuteVolume
+    };
+
+enum MediaPropertyRequested{
+    PropNone,
+    PropVolumeLevelMax,
+    PropVolumeLevel,
+    PropVolumeMuteState
+    };
+
+class MpEngine
+{
+public:
+    // Stub functions
+    MpEngine();
+
+public:
+    // Playback related
+    void play();
+    void pause();
+    void playPause();
+    void stop();
+    void skipForward();
+    void startSeekForward();
+    void stopSeeking();
+    void skipBackward();
+    void startSeekBackward();
+    void getVolumeLevelMax();
+    void getVolumeLevel();
+    void increaseVolume();
+    void decreaseVolume();
+    void setVolumeLevel( int value );
+    void getVolumeMuteState();
+    void muteVolume();
+    void unmuteVolume();
+    
+public:
+    MediaCommandReceived      iMediaCommandReceived;
+    MediaPropertyRequested    iMediaPropertyRequested;
+    
+};
+
+class MpEngineFactory
+{
+    
+public:
+    // Stub functions
+private:
+    explicit MpEngineFactory();
+
+public:
+    virtual ~MpEngineFactory();
+    static MpEngineFactory * instance();
+    static MpEngine *sharedEngine();
+    static void close();
+    
+private:
+    MpEngine             *mSharedEngine;
+
+};
+
+
+#endif // MPENGINEFACTORY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/tsrc/unittest_mpmediakeyhandler/stub/inc/remconcoreapitarget.h	Fri Aug 06 16:51:36 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: remconcoreapitarget stub for testing mpmediakeyhandler
+*
+*/
+
+
+#ifndef REMCONCOREAPITARGET_H
+#define REMCONCOREAPITARGET_H
+
+
+#include <remconcoreapi.h>  // TRemConCoreApiOperationId 
+
+
+class CRemConInterfaceSelector;
+class MRemConCoreApiTargetObserver;
+
+class CRemConCoreApiTarget : public CActive
+    {
+
+public:
+    
+    static int getCount();
+    static void setNewLLeave();
+    static void NewLLeaveIfDesiredL();
+    static int getSendResponseCount();
+    
+public:
+
+    static CRemConCoreApiTarget* NewL(CRemConInterfaceSelector& aInterfaceSelector, MRemConCoreApiTargetObserver& aObserver);
+    virtual ~CRemConCoreApiTarget();
+
+    void PausePlayFunctionResponse(TRequestStatus& aStatus, TInt aError);
+    void PlayResponse(TRequestStatus& aStatus, TInt aError);
+    void StopResponse(TRequestStatus& aStatus, TInt aError);
+    void PauseResponse(TRequestStatus& aStatus, TInt aError);
+    void RewindResponse(TRequestStatus& aStatus, TInt aError);
+    void FastForwardResponse(TRequestStatus& aStatus, TInt aError);
+    void BackwardResponse(TRequestStatus& aStatus, TInt aError);
+    void ForwardResponse(TRequestStatus& aStatus, TInt aError);
+    void VolumeUpResponse(TRequestStatus& aStatus, TInt aError);
+    void VolumeDownResponse(TRequestStatus& aStatus, TInt aError);
+    void SendResponse(TRequestStatus& aStatus, TRemConCoreApiOperationId aOperationId, TInt aError);
+
+protected:
+
+    // from CActive
+    virtual void DoCancel();
+    virtual void RunL();
+    
+private:
+    
+    CRemConCoreApiTarget();
+    
+private:
+
+    TRequestStatus*             iClientStatus;
+    
+    };
+
+#endif      // REMCONCOREAPITARGET_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/tsrc/unittest_mpmediakeyhandler/stub/inc/remconcoreapitargetobserver.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,51 @@
+/*
+* 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: remconcoreapitargetobserver stub for testing mpmediakeyhandler
+*
+*/
+
+
+#ifndef REMCONCOREAPITARGETOBSERVER_H
+#define REMCONCOREAPITARGETOBSERVER_H
+
+#include <e32base.h>
+#include <remconcoreapi.h>
+
+
+class MRemConCoreApiTargetObserver
+    {
+public:
+
+    virtual void MrccatoCommand(TRemConCoreApiOperationId aOperationId, 
+        TRemConCoreApiButtonAction aButtonAct) = 0;
+    
+    virtual void MrccatoPlay(TRemConCoreApiPlaybackSpeed aSpeed, 
+        TRemConCoreApiButtonAction aButtonAct) = 0;
+
+    virtual void MrccatoTuneFunction(TBool aTwoPart, 
+        TUint aMajorChannel, 
+        TUint aMinorChannel,
+        TRemConCoreApiButtonAction aButtonAct) = 0;
+
+   virtual void MrccatoSelectDiskFunction(TUint aDisk,
+        TRemConCoreApiButtonAction aButtonAct) = 0;
+
+    virtual void MrccatoSelectAvInputFunction(TUint8 aAvInputSignalNumber,
+        TRemConCoreApiButtonAction aButtonAct) = 0;
+
+    virtual void MrccatoSelectAudioInputFunction(TUint8 aAudioInputSignalNumber,
+        TRemConCoreApiButtonAction aButtonAct) = 0;
+    };
+
+#endif // REMCONCOREAPITARGETOBSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/tsrc/unittest_mpmediakeyhandler/stub/inc/remconinterfaceselector.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,52 @@
+/*
+* 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: remconinterfaceselector stub for testing mpmediakeyhandler
+*
+*/
+
+
+#ifndef REMCONINTERFACESELECTOR_H
+#define REMCONINTERFACESELECTOR_H
+
+
+#include <e32base.h>
+
+
+class CRemConInterfaceSelector : public CBase
+    {
+
+public:
+    
+    static int getCount();
+    static void setNewLLeave();
+    static void NewLLeaveIfDesiredL();
+    static void setOpenTargetLLeave();
+    static void OpenTargetLLeaveIfDesiredL();
+    
+public:
+
+    static CRemConInterfaceSelector* NewL();
+    virtual ~CRemConInterfaceSelector();
+
+    void OpenTargetL();
+
+private:
+    
+    CRemConInterfaceSelector();
+    
+    };
+
+#endif      // REMCONINTERFACESELECTOR_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/tsrc/unittest_mpmediakeyhandler/stub/src/mpenginefactory.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,217 @@
+/*
+* 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: MpEngineFactory stub for testing mpmediakeyhandler
+*
+*/
+
+
+#include "stub/inc/mpenginefactory.h"
+
+/*!
+ *  Stub function
+ */
+MpEngine::MpEngine() 
+    : iMediaCommandReceived( CmdNone ),
+      iMediaPropertyRequested( PropNone )
+{
+}
+
+
+/*!
+ *  Stub function
+ */
+
+void MpEngine::play()
+{
+    iMediaCommandReceived = CmdPlay;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::pause()
+{
+    iMediaCommandReceived = CmdPause;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::playPause()
+{
+    iMediaCommandReceived = CmdPlayPause;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::stop()
+{
+    iMediaCommandReceived = CmdStop;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::skipForward()
+{
+    iMediaCommandReceived = CmdSkipForward;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::startSeekForward()
+{
+    iMediaCommandReceived = CmdStartSeekForward;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::stopSeeking()
+{
+    iMediaCommandReceived = CmdStopSeeking;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::skipBackward()
+{
+    iMediaCommandReceived = CmdSkipBackward;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::startSeekBackward()
+{
+    iMediaCommandReceived = CmdStartSeekBackward;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::getVolumeLevelMax( )
+{
+    iMediaPropertyRequested = PropVolumeLevelMax;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::getVolumeLevel( )
+{
+    iMediaPropertyRequested = PropVolumeLevel;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::increaseVolume()
+{
+    iMediaCommandReceived = CmdIncreaseVolume;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::decreaseVolume()
+{
+    iMediaCommandReceived = CmdDecreaseVolume;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::setVolumeLevel( int /*value*/ )
+{
+    iMediaCommandReceived = CmdSetVolumeLevel;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::getVolumeMuteState( )
+{
+    iMediaPropertyRequested = PropVolumeMuteState;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::muteVolume()
+{
+    iMediaCommandReceived = CmdMuteVolume;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::unmuteVolume()
+{
+    iMediaCommandReceived = CmdUnmuteVolume;
+}
+
+
+//============= MpEngineFactory =============
+
+/*!
+ *  Stub function
+ */
+MpEngineFactory::MpEngineFactory()
+    : mSharedEngine( 0 )
+{
+}
+
+/*!
+ *  Stub function
+ */
+MpEngineFactory::~MpEngineFactory()
+{
+    delete mSharedEngine;
+    mSharedEngine = 0;
+}
+
+/*!
+ *  Stub function
+ */
+MpEngineFactory * MpEngineFactory::instance()
+{
+    static MpEngineFactory instance;
+    return &instance;
+}
+
+/*!
+ *  Stub function
+ */
+MpEngine *MpEngineFactory::sharedEngine()
+{
+    if ( !instance()->mSharedEngine ) {
+        instance()->mSharedEngine = new MpEngine();
+    }
+    return instance()->mSharedEngine;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngineFactory::close()
+{
+    if ( instance()->mSharedEngine ) {
+        delete instance()->mSharedEngine;
+        instance()->mSharedEngine = 0;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/tsrc/unittest_mpmediakeyhandler/stub/src/remconcoreapitarget.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,278 @@
+/*
+* Copyright (c) 2006 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: remconcoreapitarget stub for testing MpMediaKeyHandler
+*
+*/
+
+#include <e32debug.h>
+
+#include "stub/inc/remconcoreapitargetobserver.h"
+#include "stub/inc/remconcoreapitarget.h"
+
+
+int gCRemConCoreApiTargetCount = 0;
+bool gCRemConCoreApiTargetNewLLeave = false;
+int gCRemConCoreApiTargetSendResponseCount = 0;
+
+
+//static functions start
+
+int CRemConCoreApiTarget::getCount()
+{
+    return gCRemConCoreApiTargetCount;
+}
+
+void CRemConCoreApiTarget::setNewLLeave()
+{
+    gCRemConCoreApiTargetNewLLeave = true;
+}
+
+void CRemConCoreApiTarget::NewLLeaveIfDesiredL()
+{
+    if (gCRemConCoreApiTargetNewLLeave)
+    {
+        RDebug::Print(_L("CRemConCoreApiTarget::NewLLeaveIfDesiredL Leave"));
+        gCRemConCoreApiTargetNewLLeave = false;
+        User::Leave(KErrGeneral);
+    }
+}
+
+int CRemConCoreApiTarget::getSendResponseCount()
+{
+    return gCRemConCoreApiTargetSendResponseCount;
+}
+
+//static functions end
+
+
+CRemConCoreApiTarget::CRemConCoreApiTarget()
+    : CActive(EPriorityStandard),
+      iClientStatus(NULL)
+{
+    gCRemConCoreApiTargetCount++;
+}
+
+CRemConCoreApiTarget::~CRemConCoreApiTarget()
+{
+    gCRemConCoreApiTargetCount--;
+    gCRemConCoreApiTargetSendResponseCount = 0;
+}
+
+CRemConCoreApiTarget* CRemConCoreApiTarget::NewL(CRemConInterfaceSelector& /*aInterfaceSelector*/, MRemConCoreApiTargetObserver& /*aObserver*/)
+{
+    RDebug::Print(_L("stub CRemConCoreApiTarget::NewL"));
+    CRemConCoreApiTarget::NewLLeaveIfDesiredL();
+    CRemConCoreApiTarget* self = new(ELeave) CRemConCoreApiTarget();
+    return self;
+}
+
+void CRemConCoreApiTarget::PausePlayFunctionResponse(TRequestStatus& aStatus, TInt /*aError*/)
+{
+    RDebug::Print(_L(">>CRemConCoreApiTarget::PausePlayFunctionResponse"));
+    
+    iClientStatus = &aStatus;
+    gCRemConCoreApiTargetSendResponseCount++;
+  
+    // stub should not be async
+    /*TRequestStatus* status = &iStatus;
+    User::RequestComplete(status, KErrNone);
+    SetActive();*/
+    
+    RunL();
+    
+    RDebug::Print(_L("<<CRemConCoreApiTarget::PausePlayFunctionResponse"));
+}
+
+void CRemConCoreApiTarget::PlayResponse(TRequestStatus& aStatus, TInt /*aError*/)
+{
+    RDebug::Print(_L(">>CRemConCoreApiTarget::PlayResponse"));
+    
+    iClientStatus = &aStatus;
+    gCRemConCoreApiTargetSendResponseCount++;
+    
+    // stub should not be async
+    /*TRequestStatus* status = &iStatus;
+    User::RequestComplete(status, KErrNone);
+    SetActive();*/
+    
+    RunL();
+    
+    RDebug::Print(_L("<<CRemConCoreApiTarget::PlayResponse"));
+}
+
+void CRemConCoreApiTarget::StopResponse(TRequestStatus& aStatus, TInt /*aError*/)
+{
+    RDebug::Print(_L(">>CRemConCoreApiTarget::StopResponse"));
+    
+    iClientStatus = &aStatus;
+    gCRemConCoreApiTargetSendResponseCount++;
+    
+    // stub should not be async
+    /*TRequestStatus* status = &iStatus;
+    User::RequestComplete(status, KErrNone);
+    SetActive();*/
+    
+    RunL();
+    
+    RDebug::Print(_L("<<CRemConCoreApiTarget::StopResponse"));
+}
+
+void CRemConCoreApiTarget::PauseResponse(TRequestStatus& aStatus, TInt /*aError*/)
+{
+    RDebug::Print(_L(">>CRemConCoreApiTarget::PauseResponse"));
+    
+    iClientStatus = &aStatus;
+    gCRemConCoreApiTargetSendResponseCount++;
+    
+    // stub should not be async
+    /*TRequestStatus* status = &iStatus;
+    User::RequestComplete(status, KErrNone);
+    SetActive();*/
+    
+    RunL();
+    
+    RDebug::Print(_L("<<CRemConCoreApiTarget::PauseResponse"));
+}
+
+void CRemConCoreApiTarget::RewindResponse(TRequestStatus& aStatus, TInt /*aError*/)
+{
+    RDebug::Print(_L(">>CRemConCoreApiTarget::RewindResponse"));
+    
+    iClientStatus = &aStatus;
+    gCRemConCoreApiTargetSendResponseCount++;
+    
+    // stub should not be async
+    /*TRequestStatus* status = &iStatus;
+    User::RequestComplete(status, KErrNone);
+    SetActive();*/
+    
+    RunL();
+    
+    RDebug::Print(_L("<<CRemConCoreApiTarget::RewindResponse"));
+}
+
+void CRemConCoreApiTarget::FastForwardResponse(TRequestStatus& aStatus, TInt /*aError*/)
+{
+    RDebug::Print(_L(">>CRemConCoreApiTarget::FastForwardResponse"));
+    
+    iClientStatus = &aStatus;
+    gCRemConCoreApiTargetSendResponseCount++;
+    
+    // stub should not be async
+    /*TRequestStatus* status = &iStatus;
+    User::RequestComplete(status, KErrNone);
+    SetActive();*/
+    
+    RunL();
+    
+    RDebug::Print(_L("<<CRemConCoreApiTarget::FastForwardResponse"));
+}
+
+void CRemConCoreApiTarget::BackwardResponse(TRequestStatus& aStatus, TInt /*aError*/)
+{
+    RDebug::Print(_L(">>CRemConCoreApiTarget::BackwardResponse"));
+    
+    iClientStatus = &aStatus;
+    gCRemConCoreApiTargetSendResponseCount++;
+    
+    // stub should not be async
+    /*TRequestStatus* status = &iStatus;
+    User::RequestComplete(status, KErrNone);
+    SetActive();*/
+    
+    RunL();
+    
+    RDebug::Print(_L("<<CRemConCoreApiTarget::BackwardResponse"));
+}
+
+void CRemConCoreApiTarget::ForwardResponse(TRequestStatus& aStatus, TInt /*aError*/)
+{
+    RDebug::Print(_L(">>CRemConCoreApiTarget::ForwardResponse"));
+    
+    iClientStatus = &aStatus;
+    gCRemConCoreApiTargetSendResponseCount++;
+    
+    // stub should not be async
+    /*TRequestStatus* status = &iStatus;
+    User::RequestComplete(status, KErrNone);
+    SetActive();*/
+    
+    RunL();
+    
+    RDebug::Print(_L("<<CRemConCoreApiTarget::ForwardResponse"));
+}
+
+void CRemConCoreApiTarget::VolumeUpResponse(TRequestStatus& aStatus, TInt /*aError*/)
+{
+    RDebug::Print(_L(">>CRemConCoreApiTarget::VolumeUpResponse"));
+    
+    iClientStatus = &aStatus;
+    gCRemConCoreApiTargetSendResponseCount++;
+    
+    // stub should not be async
+    /*TRequestStatus* status = &iStatus;
+    User::RequestComplete(status, KErrNone);
+    SetActive();*/
+    
+    RunL();
+    
+    RDebug::Print(_L("<<CRemConCoreApiTarget::VolumeUpResponse"));
+}
+
+void CRemConCoreApiTarget::VolumeDownResponse(TRequestStatus& aStatus, TInt /*aError*/)
+{
+    RDebug::Print(_L(">>CRemConCoreApiTarget::VolumeDownResponse"));
+    
+    iClientStatus = &aStatus;
+    gCRemConCoreApiTargetSendResponseCount++;
+    
+    // stub should not be async
+    /*TRequestStatus* status = &iStatus;
+    User::RequestComplete(status, KErrNone);
+    SetActive();*/
+    
+    RunL();
+    
+    RDebug::Print(_L("<<CRemConCoreApiTarget::VolumeDownResponse"));
+}
+
+void CRemConCoreApiTarget::SendResponse(TRequestStatus& aStatus, TRemConCoreApiOperationId /*aOperationId*/, TInt /*aError*/)
+{
+    RDebug::Print(_L(">>CRemConCoreApiTarget::SendResponse"));
+    
+    iClientStatus = &aStatus;
+    gCRemConCoreApiTargetSendResponseCount++;
+    
+    // stub should not be async
+    /*TRequestStatus* status = &iStatus;
+    User::RequestComplete(status, KErrNone);
+    SetActive();*/
+
+    RunL();
+    
+    RDebug::Print(_L("<<CRemConCoreApiTarget::SendResponse"));
+}
+
+void CRemConCoreApiTarget::DoCancel()
+{
+}
+
+void CRemConCoreApiTarget::RunL()
+{
+    RDebug::Print(_L(">>CRemConCoreApiTarget::RunL"));
+    User::RequestComplete(iClientStatus, KErrNone);
+    RDebug::Print(_L("<<CRemConCoreApiTarget::RunL"));
+}
+
+//end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/tsrc/unittest_mpmediakeyhandler/stub/src/remconinterfaceselector.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2006 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: remconinterfaceselector stub for testing MpMediaKeyHandler
+*
+*/
+
+
+#include <e32debug.h>
+
+#include "stub/inc/remconinterfaceselector.h"
+
+
+int gCRemConInterfaceSelectorCount = 0;
+bool gCRemConInterfaceSelectorNewLLeave = false;
+bool gCRemConInterfaceSelectorOpenTargetLLeave = false;
+
+
+//static functions start
+
+int CRemConInterfaceSelector::getCount()
+{
+    return gCRemConInterfaceSelectorCount;
+}
+
+void CRemConInterfaceSelector::setNewLLeave()
+{
+    gCRemConInterfaceSelectorNewLLeave = true;
+}
+
+void CRemConInterfaceSelector::NewLLeaveIfDesiredL()
+{
+    if (gCRemConInterfaceSelectorNewLLeave)
+    {
+        RDebug::Print(_L("CRemConInterfaceSelector::NewLLeaveIfDesiredL Leave"));
+        gCRemConInterfaceSelectorNewLLeave = false;
+        User::Leave(KErrGeneral);
+    }
+}
+
+void CRemConInterfaceSelector::setOpenTargetLLeave()
+{
+    gCRemConInterfaceSelectorOpenTargetLLeave = true;
+}
+
+void CRemConInterfaceSelector::OpenTargetLLeaveIfDesiredL()
+{
+    if (gCRemConInterfaceSelectorOpenTargetLLeave)
+    {
+        RDebug::Print(_L("CRemConInterfaceSelector::NewLLeaveIfDesiredL Leave"));
+        gCRemConInterfaceSelectorOpenTargetLLeave = false;
+        User::Leave(KErrGeneral);
+    }
+}
+
+//static functions end
+
+CRemConInterfaceSelector::CRemConInterfaceSelector()
+{
+    gCRemConInterfaceSelectorCount++;
+}
+
+CRemConInterfaceSelector::~CRemConInterfaceSelector()
+{
+    gCRemConInterfaceSelectorCount--;
+}
+
+CRemConInterfaceSelector* CRemConInterfaceSelector::NewL()
+{
+    RDebug::Print(_L("stub CRemConInterfaceSelector::NewL"));
+    CRemConInterfaceSelector::NewLLeaveIfDesiredL();
+    CRemConInterfaceSelector* self = new(ELeave) CRemConInterfaceSelector();
+    return self;
+}
+
+void CRemConInterfaceSelector::OpenTargetL()
+{
+    CRemConInterfaceSelector::OpenTargetLLeaveIfDesiredL();
+}
+
+//end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/tsrc/unittest_mpmediakeyhandler/unittest_mpmediakeyhandler.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,52 @@
+#
+# 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: mpmediakeyhandler unit test project file.
+#
+
+TEMPLATE = app
+CONFIG += qtestlib symbian_test
+TARGET = unittest_mpmediakeyhandler
+TARGET.CAPABILITY = CAP_APPLICATION
+
+symbian: { 
+    MMP_RULES += SMPSAFE
+}
+
+DEPENDPATH += .
+INCLUDEPATH += . \
+               stub/inc \
+               ../../inc \
+               ../../../../inc
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE 
+
+LIBS += -lestor \
+        -lfbscli \
+        -lremconcoreapi \
+        -lremconinterfacebase
+
+HEADERS += stub/inc/mpenginefactory.h \
+           stub/inc/remconcoreapitarget.h \
+           stub/inc/remconcoreapitargetobserver.h \
+           stub/inc/remconinterfaceselector.h \
+           inc/unittest_mpmediakeyhandler.h \
+           ../../inc/mpmediakeyhandler.h \
+           ../../inc/mpmediakeyhandler_p.h \
+           ../../inc/mpmediakeyremconresponse.h
+
+SOURCES += stub/src/mpenginefactory.cpp \
+           stub/src/remconcoreapitarget.cpp \
+           stub/src/remconinterfaceselector.cpp \
+           src/unittest_mpmediakeyhandler.cpp \
+           ../../src/mpmediakeyhandler.cpp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/tsrc/unittest_mpvolumeslider/inc/unittest_mpvolumeslider.h	Fri Aug 06 16:51:36 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: Unit test for mpvolumeslider
+*
+*/
+
+#ifndef TESTMPVOLUMESLIDER_H
+#define TESTMPVOLUMESLIDER_H
+
+#include <QtTest/QtTest>
+#include "mpcommondefs.h"
+
+class MpVolumeSlider;
+
+class TestMpVolumeSlider : public QObject
+{
+    Q_OBJECT
+
+public:
+    
+    TestMpVolumeSlider();
+    virtual ~TestMpVolumeSlider();
+
+signals:
+    void triggerVolumePropertyChanged( MpCommon::MpVolumeProperty property, int value );
+    void triggerSliderPressed();
+    void triggerSliderReleased();
+    void triggerIconClicked();
+    void triggerValueChanged( int value );
+
+// from QtTest
+public slots:
+
+    void initTestCase();
+    void cleanupTestCase();
+    void init();
+    void cleanup();
+
+// internal
+private slots:
+
+    void testConstructor();
+    void testShowVolumeSlider();
+    void testHandleVolumeProperty();
+    void testSliderPressed();
+    void testSliderReleased();
+    void testMuteIconClicked();
+    void testVolumeSliderChanged();
+    void testInitializeVolumeSliderPopup();
+
+private:
+
+    MpVolumeSlider           *mTest;
+
+
+};
+
+#endif  // TESTMPVOLUMESLIDER_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/tsrc/unittest_mpvolumeslider/src/unittest_mpvolumeslider.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,286 @@
+/**
+* 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 mpvolumeslider
+*
+*/
+
+#include <QMetaType>
+
+#include "stub/inc/mpenginefactory.h"
+#include "stub/inc/hbvolumesliderpopup.h"
+#include "unittest_mpvolumeslider.h"
+
+
+// Do this so we can access all member variables.
+#define private public
+#include "mpvolumeslider.h"
+#undef private
+
+// Do this so private function can be accessed
+#include <../../src/mpvolumeslider.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);
+
+    TestMpVolumeSlider 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_mpvolumeslider.txt";
+
+        return QTest::qExec(&tv, 3, pass);
+    }
+}
+
+TestMpVolumeSlider::TestMpVolumeSlider()
+    : mTest(0)
+{
+}
+
+TestMpVolumeSlider::~TestMpVolumeSlider()
+{
+    delete mTest;
+}
+
+/*!
+ Called before the first testfunction is executed.
+ */
+void TestMpVolumeSlider::initTestCase()
+{
+}
+
+/*!
+ Called after the last testfunction was executed.
+ */
+void TestMpVolumeSlider::cleanupTestCase()
+{
+}
+
+/*!
+ Called before each testfunction is executed.
+ */
+void TestMpVolumeSlider::init()
+{
+    mTest = new MpVolumeSlider();
+}
+
+/*!
+ Called after every testfunction.
+ */
+void TestMpVolumeSlider::cleanup()
+{
+    if (mTest)
+    {
+        delete mTest;
+        mTest = 0;
+
+        MpEngineFactory::close();
+    }
+}
+
+void TestMpVolumeSlider::testConstructor()
+{
+    QVERIFY( mTest );
+    QCOMPARE(mTest->mMpEngine->iMediaPropertyRequested.value(0), PropVolumeLevelMax);
+    QCOMPARE(mTest->mMpEngine->iMediaPropertyRequested.value(1), PropVolumeLevel);
+    QCOMPARE(mTest->mMpEngine->iMediaPropertyRequested.value(2), PropVolumeMuteState);
+}
+
+void TestMpVolumeSlider::testShowVolumeSlider()
+{
+    mTest->mEngineVolumeMax = 100;
+    mTest->mEngineMuted = true;
+    mTest->mEngineVolumeLevel = 30;
+
+    // While VolumeSlider is pressed showVolumeSlider() function does nothing.
+    mTest->mSliderPressed = true;
+    mTest->showVolumeSlider();
+    QVERIFY( !mTest->mVolumeSliderPopup );
+
+    // When VolumeSlider is not being pressed, showVolumeSlider() attempts to show the slider.
+    mTest->mSliderPressed = false;
+    mTest->showVolumeSlider();
+    QVERIFY( mTest->mVolumeSliderPopup );
+    QCOMPARE( mTest->mVolumeSliderPopup->mValue, 0 );    //Currently in mute state
+    QVERIFY( mTest->mVolumeSliderPopup->isVisible() );
+
+    // Clearing mute state
+    mTest->mEngineMuted = false;
+    mTest->showVolumeSlider();
+    QVERIFY( mTest->mVolumeSliderPopup );
+    QCOMPARE( mTest->mVolumeSliderPopup->mValue, 3 );
+    QVERIFY( mTest->mVolumeSliderPopup->isVisible() );
+}
+
+void TestMpVolumeSlider::testHandleVolumeProperty()
+{
+    MpEngine *mpEngineInstance = MpEngineFactory::sharedEngine();
+    connect( this, SIGNAL(triggerVolumePropertyChanged( MpCommon::MpVolumeProperty, int ) ),
+             mpEngineInstance, SIGNAL( volumePropertyChanged( MpCommon::MpVolumeProperty, int ) ) );
+    
+    emit triggerVolumePropertyChanged( MpCommon::MaxVolume, 100 );
+    QCOMPARE( mTest->mEngineDataCompleted, 0x01 );
+    QCOMPARE( mTest->mEngineVolumeMax, 100 );
+    QVERIFY( !mTest->mVolumeSliderPopup );
+
+    emit triggerVolumePropertyChanged( MpCommon::Volume, 0 );
+    QCOMPARE( mTest->mEngineDataCompleted, 0x03 );
+    QCOMPARE( mTest->mEngineVolumeLevel, 0 );
+    QVERIFY( mTest->mEngineMuted );
+    QVERIFY( !mTest->mVolumeSliderPopup );
+    emit triggerVolumePropertyChanged( MpCommon::Volume, 30 );
+    QCOMPARE( mTest->mEngineDataCompleted, 0x03 );
+    QCOMPARE( mTest->mEngineVolumeLevel, 30 );
+    QVERIFY( !mTest->mEngineMuted );
+    QVERIFY( !mTest->mVolumeSliderPopup );
+    mTest->mEngineDataCompleted = 0x07;
+    emit triggerVolumePropertyChanged( MpCommon::Volume, 40 );
+    QCOMPARE( mTest->mEngineDataCompleted, 0x07 );
+    QCOMPARE( mTest->mEngineVolumeLevel, 40 );
+    QVERIFY( !mTest->mEngineMuted );
+    QVERIFY( mTest->mVolumeSliderPopup->isVisible() );
+
+    mTest->mEngineDataCompleted = 0x03;
+    mTest->mVolumeSliderPopup->setVisible( false );
+    emit triggerVolumePropertyChanged( MpCommon::MuteState, 1 );
+    QCOMPARE( mTest->mEngineDataCompleted, 0x07 );
+    QVERIFY( mTest->mEngineMuted );
+    QVERIFY( !mTest->mVolumeSliderPopup->isVisible() );
+    emit triggerVolumePropertyChanged( MpCommon::MuteState, 0 );
+    QCOMPARE( mTest->mEngineDataCompleted, 0x07 );
+    QVERIFY( !mTest->mEngineMuted );
+    QVERIFY( mTest->mVolumeSliderPopup->isVisible() );
+}
+
+void TestMpVolumeSlider::testSliderPressed()
+{
+    mTest->mEngineMuted = false;
+    mTest->mEngineVolumeLevel = 20;
+    mTest->mEngineVolumeMax = 100;
+    mTest->initializeVolumeSliderPopup();
+    connect( this, SIGNAL( triggerSliderPressed() ), 
+             mTest->mVolumeSliderPopup, SIGNAL( sliderPressed() ) );
+
+    emit triggerSliderPressed();
+    QVERIFY( mTest->mSliderPressed );
+}
+
+void TestMpVolumeSlider::testSliderReleased()
+{
+    mTest->mEngineMuted = false;
+    mTest->mEngineVolumeLevel = 20;
+    mTest->mEngineVolumeMax = 100;
+    mTest->initializeVolumeSliderPopup();
+    connect( this, SIGNAL( triggerSliderReleased() ), 
+             mTest->mVolumeSliderPopup, SIGNAL( sliderReleased() ) );
+    mTest->mSliderPressed = true;
+
+    emit triggerSliderReleased();
+    QVERIFY( !mTest->mSliderPressed );
+}
+
+void TestMpVolumeSlider::testMuteIconClicked()
+{
+    mTest->mEngineMuted = false;
+    mTest->mEngineVolumeLevel = 20;
+    mTest->mEngineVolumeMax = 100;
+    mTest->initializeVolumeSliderPopup();
+    connect( this, SIGNAL( triggerIconClicked() ), 
+             mTest->mVolumeSliderPopup, SIGNAL( iconClicked() ) );
+
+    mTest->mVolumeSliderPopup->setValue( 0 );
+    emit triggerIconClicked();
+    QCOMPARE( mTest->mMpEngine->iMediaCommandReceived, CmdMuteVolume );
+    QVERIFY( mTest->mEngineMuted );
+
+    mTest->mVolumeSliderPopup->setValue( 1 );
+    emit triggerIconClicked();
+    QCOMPARE( mTest->mMpEngine->iMediaCommandReceived, CmdUnmuteVolume );
+    QVERIFY( !mTest->mEngineMuted );
+}
+
+void TestMpVolumeSlider::testVolumeSliderChanged()
+{
+    mTest->mEngineMuted = false;
+    mTest->mEngineVolumeLevel = 20;
+    mTest->mEngineVolumeMax = 100;
+    mTest->initializeVolumeSliderPopup();
+    connect( this, SIGNAL( triggerValueChanged( int ) ), 
+             mTest->mVolumeSliderPopup, SIGNAL( valueChanged( int ) ) );
+
+    mTest->mEngineVolumeLevel = 60;
+    mTest->mEngineMuted = false;
+    // Same values slider and engine
+    emit triggerValueChanged( 6 );
+    QTest::qWait(25);
+    QCOMPARE( mTest->mMpEngine->iMediaCommandReceived, CmdNone );
+    QCOMPARE( mTest->mMpEngine->iCommandValue, -1 );
+    // Slider value smaller than engine
+    mTest->mMpEngine->iMediaCommandReceived = CmdNone;
+    mTest->mMpEngine->iCommandValue = -1;
+    emit triggerValueChanged( 0 );
+    QTest::qWait(25);
+    QCOMPARE( mTest->mMpEngine->iMediaCommandReceived, CmdSetVolumeLevel );
+    QCOMPARE( mTest->mMpEngine->iCommandValue, 0 );
+    // Slider value bigger than engine
+    mTest->mMpEngine->iMediaCommandReceived = CmdNone;
+    mTest->mMpEngine->iCommandValue = -1;
+    emit triggerValueChanged( 7 );
+    QTest::qWait(25);
+    QCOMPARE( mTest->mMpEngine->iMediaCommandReceived, CmdSetVolumeLevel );
+    QCOMPARE( mTest->mMpEngine->iCommandValue, 70 );
+
+    mTest->mEngineMuted = true;
+    // Slider changes to 0 while engine in mute state.
+    mTest->mMpEngine->iMediaCommandReceived = CmdNone;
+    mTest->mMpEngine->iCommandValue = -1;
+    emit triggerValueChanged( 0 );
+    QTest::qWait(25);
+    QCOMPARE( mTest->mMpEngine->iMediaCommandReceived, CmdNone );
+    QCOMPARE( mTest->mMpEngine->iCommandValue, -1 );
+    // Slider changes other than 0 while engine in mute state.
+    mTest->mMpEngine->iMediaCommandReceived = CmdNone;
+    mTest->mMpEngine->iCommandValue = -1;
+    emit triggerValueChanged( 8 );
+    QTest::qWait(25);
+    QCOMPARE( mTest->mMpEngine->iMediaCommandReceived, CmdSetVolumeLevel );
+    QCOMPARE( mTest->mMpEngine->iCommandValue, 80 );
+}
+
+void TestMpVolumeSlider::testInitializeVolumeSliderPopup()
+{
+    mTest->mEngineMuted = false;
+    mTest->mEngineVolumeLevel = 20;
+    mTest->mEngineVolumeMax = 100;
+
+    mTest->initializeVolumeSliderPopup();
+    QVERIFY( mTest->mVolumeSliderPopup );
+    QCOMPARE( mTest->mVolumeSliderPopup->mMinRange, 0 );
+    QCOMPARE( mTest->mVolumeSliderPopup->mMaxRange, 10 );
+    QCOMPARE( mTest->mVolumeSliderPopup->mSingleStep, 1 );
+    QCOMPARE( mTest->mVolumeSliderPopup->mSliderTickPosition, Hb::NoSliderTicks );
+    QCOMPARE( mTest->mSliderStep, 10 );
+}
+
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/tsrc/unittest_mpvolumeslider/stub/inc/hbvolumesliderpopup.h	Fri Aug 06 16:51:36 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: hbvolumesliderpopup stub for testing mpvolumeslider
+*
+*/
+
+
+#ifndef HBVOLUMESLIDERPOPUP_H
+#define HBVOLUMESLIDERPOPUP_H
+
+#include <QObject>
+
+namespace Hb
+{
+    enum SliderTickPosition {
+        NoSliderTicks = 0,
+        SliderTicksAbove = 1,
+        SliderTicksLeft = SliderTicksAbove,
+        SliderTicksBelow = 2,
+        SliderTicksRight = SliderTicksBelow,
+        SliderTicksBothSides = 3,
+        SliderTicksAbsolute
+    };
+
+    Q_DECLARE_FLAGS(SliderTickPositions , SliderTickPosition)
+}
+
+class HbVolumeSliderPopup : public QObject
+{
+    Q_OBJECT
+
+public:
+    explicit HbVolumeSliderPopup( QObject *parent = 0 );
+    virtual ~HbVolumeSliderPopup();
+
+    int value() const;
+    bool isVisible() const;
+    void setVisible(bool visible);
+    void setRange(int min, int max);
+    void setSingleStep(int step);
+    void setTickPosition(Hb::SliderTickPositions position);
+
+signals :
+    void sliderPressed();
+    void sliderReleased();
+    void iconClicked();
+    void valueChanged(int value);
+
+public slots:
+    void setValue(int value);
+
+public:
+    int                         mValue;
+    int                         mMinRange;
+    int                         mMaxRange;
+    int                         mSingleStep;
+    bool                        mVisible;
+    Hb::SliderTickPositions     mSliderTickPosition;
+};
+
+#endif      // HBVOLUMESLIDERPOPUP_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/tsrc/unittest_mpvolumeslider/stub/inc/mpenginefactory.h	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,109 @@
+/*
+* 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: MpEngineFactory stub for testing mpvolumeslider
+*
+*/
+
+#ifndef MPENGINEFACTORY_H
+#define MPENGINEFACTORY_H
+
+#include <QObject>
+
+#include "mpcommondefs.h"
+
+enum MediaCommandReceived{
+    CmdNone,
+    CmdPlay,
+    CmdPause,
+    CmdPlayPause,
+    CmdStop,
+    CmdSkipForward,
+    CmdStartSeekForward,
+    CmdStopSeeking,
+    CmdSkipBackward,
+    CmdStartSeekBackward,
+    CmdIncreaseVolume,
+    CmdDecreaseVolume,
+    CmdSetVolumeLevel,
+    CmdMuteVolume,
+    CmdUnmuteVolume
+    };
+
+enum MediaPropertyRequested{
+    PropNone,
+    PropVolumeLevelMax,
+    PropVolumeLevel,
+    PropVolumeMuteState
+    };
+
+class MpEngine : public QObject
+{
+    Q_OBJECT
+
+public:
+    // Stub functions
+    MpEngine();
+
+public:
+    // Playback related
+    void play();
+    void pause();
+    void playPause();
+    void stop();
+    void skipForward();
+    void startSeekForward();
+    void stopSeeking();
+    void skipBackward();
+    void startSeekBackward();
+    void getMaxVolume();
+    void getVolume();
+    void increaseVolume();
+    void decreaseVolume();
+    void setVolume( int value );
+    void getMuteState();
+    void mute();
+    void unmute();
+    
+signals:
+    void volumePropertyChanged( MpCommon::MpVolumeProperty property, int value );
+    
+public:
+    MediaCommandReceived                    iMediaCommandReceived;
+    QList<MediaPropertyRequested>           iMediaPropertyRequested;
+    int                                     iCommandValue;
+    
+};
+
+class MpEngineFactory : public QObject
+{
+    Q_OBJECT
+
+public:
+    // Stub functions
+private:
+    explicit MpEngineFactory();
+
+public:
+    virtual ~MpEngineFactory();
+    static MpEngineFactory * instance();
+    static MpEngine *sharedEngine();
+    static void close();
+    
+private:
+    MpEngine             *mSharedEngine;
+
+};
+
+
+#endif // MPENGINEFACTORY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/tsrc/unittest_mpvolumeslider/stub/src/hbvolumesliderpopup.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,99 @@
+/*
+* Copyright (c) 2006 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: hbvolumesliderpopup stub for testing mpvolumeslider
+*
+*/
+
+
+#include "stub/inc/hbvolumesliderpopup.h"
+
+/*
+ * Stub function
+ */
+HbVolumeSliderPopup::HbVolumeSliderPopup( QObject *parent )
+    : QObject( parent ),
+      mValue( 0 ),
+      mMinRange( 0 ),
+      mMaxRange( 0 ),
+      mSingleStep( 0 ),
+      mVisible( false ),
+      mSliderTickPosition( Hb::SliderTicksAbsolute )
+{
+}
+
+/*
+ * Stub function
+ */
+HbVolumeSliderPopup::~HbVolumeSliderPopup()
+{
+}
+
+/*
+ * Stub function
+ */
+int HbVolumeSliderPopup::value() const
+{
+    return mValue;
+}
+
+/*
+ * Stub function
+ */
+bool HbVolumeSliderPopup::isVisible() const
+{
+    return mVisible;
+}
+
+/*
+ * Stub function
+ */
+void HbVolumeSliderPopup::setVisible(bool visible)
+{
+    mVisible = visible;
+}
+
+/*
+ * Stub function
+ */
+void HbVolumeSliderPopup::setRange(int min, int max)
+{
+    mMinRange = min;
+    mMaxRange = max;
+}
+
+/*
+ * Stub function
+ */
+void HbVolumeSliderPopup::setSingleStep(int step)
+{
+    mSingleStep = step;
+}
+
+/*
+ * Stub function
+ */
+void HbVolumeSliderPopup::setTickPosition(Hb::SliderTickPositions position)
+{
+    mSliderTickPosition = position;
+}
+
+/*
+ * Stub function
+ */
+void HbVolumeSliderPopup::setValue(int value)
+{
+    mValue = value;
+}
+
+//end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/tsrc/unittest_mpvolumeslider/stub/src/mpenginefactory.cpp	Fri Aug 06 16:51:36 2010 -0500
@@ -0,0 +1,218 @@
+/*
+* 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: MpEngineFactory stub for testing MpMediaKeyHandler
+*
+*/
+
+
+#include "stub/inc/mpenginefactory.h"
+
+/*!
+ *  Stub function
+ */
+MpEngine::MpEngine() 
+    : iMediaCommandReceived( CmdNone ),
+      iCommandValue( -1 )
+{
+}
+
+
+/*!
+ *  Stub function
+ */
+
+void MpEngine::play()
+{
+    iMediaCommandReceived = CmdPlay;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::pause()
+{
+    iMediaCommandReceived = CmdPause;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::playPause()
+{
+    iMediaCommandReceived = CmdPlayPause;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::stop()
+{
+    iMediaCommandReceived = CmdStop;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::skipForward()
+{
+    iMediaCommandReceived = CmdSkipForward;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::startSeekForward()
+{
+    iMediaCommandReceived = CmdStartSeekForward;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::stopSeeking()
+{
+    iMediaCommandReceived = CmdStopSeeking;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::skipBackward()
+{
+    iMediaCommandReceived = CmdSkipBackward;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::startSeekBackward()
+{
+    iMediaCommandReceived = CmdStartSeekBackward;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::getMaxVolume( )
+{
+    iMediaPropertyRequested << PropVolumeLevelMax;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::getVolume( )
+{
+    iMediaPropertyRequested << PropVolumeLevel;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::increaseVolume()
+{
+    iMediaCommandReceived = CmdIncreaseVolume;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::decreaseVolume()
+{
+    iMediaCommandReceived = CmdDecreaseVolume;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::setVolume( int value )
+{
+    iMediaCommandReceived = CmdSetVolumeLevel;
+    iCommandValue = value;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::getMuteState( )
+{
+    iMediaPropertyRequested << PropVolumeMuteState;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::mute()
+{
+    iMediaCommandReceived = CmdMuteVolume;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngine::unmute()
+{
+    iMediaCommandReceived = CmdUnmuteVolume;
+}
+
+
+//============= MpEngineFactory =============
+
+/*!
+ *  Stub function
+ */
+MpEngineFactory::MpEngineFactory()
+    : mSharedEngine( 0 )
+{
+}
+
+/*!
+ *  Stub function
+ */
+MpEngineFactory::~MpEngineFactory()
+{
+    delete mSharedEngine;
+    mSharedEngine = 0;
+}
+
+/*!
+ *  Stub function
+ */
+MpEngineFactory * MpEngineFactory::instance()
+{
+    static MpEngineFactory instance;
+    return &instance;
+}
+
+/*!
+ *  Stub function
+ */
+MpEngine *MpEngineFactory::sharedEngine()
+{
+    if ( !instance()->mSharedEngine ) {
+        instance()->mSharedEngine = new MpEngine();
+    }
+    return instance()->mSharedEngine;
+}
+
+/*!
+ *  Stub function
+ */
+void MpEngineFactory::close()
+{
+    if ( instance()->mSharedEngine ) {
+        delete instance()->mSharedEngine;
+        instance()->mSharedEngine = 0;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/mpmediacontroller/tsrc/unittest_mpvolumeslider/unittest_mpvolumeslider.pro	Fri Aug 06 16:51:36 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: mpvolumeslider unit test project file.
+#
+
+TEMPLATE = app
+CONFIG += qtestlib symbian_test
+TARGET = unittest_mpvolumeslider
+TARGET.CAPABILITY = CAP_APPLICATION
+
+symbian: { 
+    MMP_RULES += SMPSAFE
+}
+
+DEPENDPATH += .
+INCLUDEPATH += . \
+               stub/inc \
+               ../../inc \
+               ../../../../inc
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE 
+
+LIBS += -lestor \
+        -lfbscli
+
+HEADERS += stub/inc/mpenginefactory.h \
+           stub/inc/hbvolumesliderpopup.h \
+           inc/unittest_mpvolumeslider.h \
+           ../../inc/mpvolumeslider.h
+
+SOURCES += stub/src/mpenginefactory.cpp \
+           stub/src/hbvolumesliderpopup.cpp \
+           src/unittest_mpvolumeslider.cpp
+
--- a/utilities/mpnowplayingbanner/mpnowplayingbanner.pro	Fri Jul 23 17:31:12 2010 -0500
+++ b/utilities/mpnowplayingbanner/mpnowplayingbanner.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -45,3 +45,4 @@
      
 RESOURCES += resources/mpnowplayingbanner.qrc
 
+DOCML += resources/nowplaying.docml
--- a/utilities/mpnowplayingbanner/resources/mpnowplayingbanner.qrc	Fri Jul 23 17:31:12 2010 -0500
+++ b/utilities/mpnowplayingbanner/resources/mpnowplayingbanner.qrc	Fri Aug 06 16:51:36 2010 -0500
@@ -1,6 +1,6 @@
 <RCC>
     <qresource prefix="/xml" >
-        <file alias="nowplaying.docml" >nowplaying.docml</file>
+        <file alias="nowplaying.docml" >nowplaying.docml.bin</file>
     </qresource>
     <qresource prefix="/css" >
         <file alias="banner_color.css" >banner_color.css</file>
--- a/utilities/tsrc/tsrc.pro	Fri Jul 23 17:31:12 2010 -0500
+++ b/utilities/tsrc/tsrc.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -17,7 +17,8 @@
 TEMPLATE = subdirs
 
 SUBDIRS += ../mpnowplayingbanner/tsrc \
-           ../mpsettingsmanager/tsrc
+           ../mpsettingsmanager/tsrc \
+           ../mpmediacontroller/tsrc
 
 CONFIG += ordered
 
--- a/utilities/utilities.pro	Fri Jul 23 17:31:12 2010 -0500
+++ b/utilities/utilities.pro	Fri Aug 06 16:51:36 2010 -0500
@@ -17,7 +17,7 @@
 TEMPLATE = subdirs
 SUBDIRS  = mpnowplayingbanner \
            mpsettingsmanager \
-           mpalbumcoverwidget
-           
+           mpalbumcoverwidget \
+           mpmediacontroller
 
 CONFIG += ordered